待阅列表添加标注tab;修改检查页面添加排序;修改项目状态签名bug修复
parent
c2f5c2238f
commit
6a6048ee31
|
@ -67,7 +67,7 @@
|
||||||
<span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span>
|
<span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span>
|
||||||
<span style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${ currentUser })` }}</span>
|
<span style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${ currentUser })` }}</span>
|
||||||
</div>
|
</div>
|
||||||
<SignForm ref="signForm" :trial-id="trialId" :sign-code-enum="signCode" @close="closeSignDialog" />
|
<SignForm ref="signForm" :trial-id="trialId" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -33,6 +33,8 @@
|
||||||
:data="topList"
|
:data="topList"
|
||||||
stripe
|
stripe
|
||||||
height="30vh"
|
height="30vh"
|
||||||
|
@sort-change="handleSortByColumn"
|
||||||
|
:default-sort="{ prop: 'StudyTime', order: 'ascending' }"
|
||||||
>
|
>
|
||||||
<!-- <el-table-column type="selection" align="center" width="45" /> -->
|
<!-- <el-table-column type="selection" align="center" width="45" /> -->
|
||||||
<!--患者编号-->
|
<!--患者编号-->
|
||||||
|
@ -41,6 +43,7 @@
|
||||||
prop="PatientIdStr"
|
prop="PatientIdStr"
|
||||||
:label="$t('trials:uploadDicomList:table:pId')"
|
:label="$t('trials:uploadDicomList:table:pId')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
></el-table-column>
|
></el-table-column>
|
||||||
<!--检查类型-->
|
<!--检查类型-->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
|
@ -48,6 +51,7 @@
|
||||||
prop="Modalities"
|
prop="Modalities"
|
||||||
:label="$t('trials:audit:table:modality')"
|
:label="$t('trials:audit:table:modality')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
></el-table-column>
|
></el-table-column>
|
||||||
<!--序列数量-->
|
<!--序列数量-->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
|
@ -55,6 +59,7 @@
|
||||||
prop="SeriesCount"
|
prop="SeriesCount"
|
||||||
:label="$t('trials:audit:table:seriesCount')"
|
:label="$t('trials:audit:table:seriesCount')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
></el-table-column>
|
></el-table-column>
|
||||||
<!--图像数量-->
|
<!--图像数量-->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
|
@ -62,6 +67,7 @@
|
||||||
prop="InstanceCount"
|
prop="InstanceCount"
|
||||||
:label="$t('trials:audit:table:instanceCount')"
|
:label="$t('trials:audit:table:instanceCount')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
></el-table-column>
|
></el-table-column>
|
||||||
<!--检查日期-->
|
<!--检查日期-->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
|
@ -69,6 +75,7 @@
|
||||||
prop="StudyTime"
|
prop="StudyTime"
|
||||||
:label="$t('trials:audit:table:studyDate')"
|
:label="$t('trials:audit:table:studyDate')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
></el-table-column>
|
></el-table-column>
|
||||||
<!--所属访视-->
|
<!--所属访视-->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
|
@ -76,6 +83,7 @@
|
||||||
prop="VisitName"
|
prop="VisitName"
|
||||||
:label="$t('trials:hirVisit:table:ownershipVisit')"
|
:label="$t('trials:hirVisit:table:ownershipVisit')"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
></el-table-column>
|
></el-table-column>
|
||||||
<!--操作-->
|
<!--操作-->
|
||||||
<el-table-column
|
<el-table-column
|
||||||
|
|
|
@ -0,0 +1,338 @@
|
||||||
|
<template>
|
||||||
|
<BaseContainer
|
||||||
|
v-loading="loading"
|
||||||
|
style="background-color: #fff"
|
||||||
|
>
|
||||||
|
<div slot="search-container">
|
||||||
|
<el-form :inline="true">
|
||||||
|
<!-- 受试者编号 -->
|
||||||
|
<el-form-item :label="$t('trials:reviewTrack:table:subjectCode')">
|
||||||
|
<el-input v-model="searchData.SubjectCode" style="width: 100px" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 患者编号 -->
|
||||||
|
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
|
||||||
|
<el-input v-model="searchData.PatientIdStr" style="width: 140px" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 患者姓名 -->
|
||||||
|
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
|
||||||
|
<el-input v-model="searchData.PatientName" style="width: 140px" />
|
||||||
|
</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>
|
||||||
|
</div>
|
||||||
|
<div slot="main-container">
|
||||||
|
<el-table
|
||||||
|
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:reviewTrack:table:subjectCode')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!-- 患者编号 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="PatientIdStr"
|
||||||
|
min-width="100"
|
||||||
|
:label="$t('trials:uploadDicomList:table:pId')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span
|
||||||
|
v-for="(item, index) in scope.row.PatientList"
|
||||||
|
:key="`${index}${item.PatientId}`"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
index === scope.row.PatientList.length - 1
|
||||||
|
? item.PatientIdStr
|
||||||
|
: `${item.PatientIdStr}, `
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 患者姓名 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="SubjectShortName"
|
||||||
|
min-width="100"
|
||||||
|
:label="$t('trials:uploadDicomList:table:patientName')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!-- 剩余阅片量 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="UnReadCanReadTaskCount"
|
||||||
|
min-width="100"
|
||||||
|
:label="$t('trials:pendingReadingTasks:table:remainingReadingVolume')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
/>
|
||||||
|
<!-- 建议完成时间 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="SuggesteFinishedTime"
|
||||||
|
min-width="100"
|
||||||
|
: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"
|
||||||
|
: ""
|
||||||
|
}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!--操作-->
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('common:action:action')"
|
||||||
|
width="250"
|
||||||
|
fixed="right"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<!-- 阅片 -->
|
||||||
|
<el-button
|
||||||
|
: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')
|
||||||
|
"
|
||||||
|
icon="el-icon-edit-outline"
|
||||||
|
@click="handleReadImage(scope.row)"
|
||||||
|
/>
|
||||||
|
<!-- 释放 -->
|
||||||
|
<el-button
|
||||||
|
: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"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</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";
|
||||||
|
const searchDataDefault = () => {
|
||||||
|
return {
|
||||||
|
SubjectCode: "",
|
||||||
|
PatientIdStr: null,
|
||||||
|
PatientName: null,
|
||||||
|
PageIndex: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
export default {
|
||||||
|
name: "ReadingTaskList",
|
||||||
|
props: {
|
||||||
|
trialCriterionInfo: {
|
||||||
|
type: Object,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: { BaseContainer, Pagination },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
searchData: searchDataDefault(),
|
||||||
|
list: [],
|
||||||
|
total: 0,
|
||||||
|
loading: false,
|
||||||
|
trialId: "",
|
||||||
|
isReadingTaskViewInOrder: null,
|
||||||
|
randomReadInfo: {},
|
||||||
|
isRender: false,
|
||||||
|
isTableShow: true,
|
||||||
|
readingTool: null,
|
||||||
|
criterionType: null,
|
||||||
|
openWindow: null,
|
||||||
|
userId: zzSessionStorage.getItem("userId"),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
window.addEventListener("message", this.receiveMsg);
|
||||||
|
this.trialId = this.$route.query.trialId;
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
window.removeEventListener("message", this.receiveMsg);
|
||||||
|
if (this.openWindow) {
|
||||||
|
this.openWindow.close();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.searchData.TrialId = this.trialId;
|
||||||
|
this.searchData.TrialReadingCriterionId = this.trialCriterionInfo.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;
|
||||||
|
} else {
|
||||||
|
this.randomReadInfo = res.OtherInfo.RandomReadInfo;
|
||||||
|
}
|
||||||
|
this.isRender = true;
|
||||||
|
this.loading = false;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.isRender = true;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 释放
|
||||||
|
handleReleaseTasks(row) {
|
||||||
|
this.loading = true;
|
||||||
|
var params = {
|
||||||
|
isInOrder: true,
|
||||||
|
subejctId: row.SubjectId,
|
||||||
|
isClaim: false,
|
||||||
|
trialReadingCriterionId: this.trialCriterionInfo.TrialReadingCriterionId
|
||||||
|
};
|
||||||
|
claimOrCancelSubject(params)
|
||||||
|
.then((res) => {
|
||||||
|
// '释放成功!'
|
||||||
|
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();
|
||||||
|
},
|
||||||
|
handleReset() {
|
||||||
|
this.searchData = searchDataDefault();
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
handleReadImage(row) {
|
||||||
|
if (this.openWindow) {
|
||||||
|
this.openWindow.close();
|
||||||
|
}
|
||||||
|
this.loading = true;
|
||||||
|
verifyReadingRestTime()
|
||||||
|
.then((_) => {
|
||||||
|
this.loading = false;
|
||||||
|
|
||||||
|
window.localStorage.setItem(
|
||||||
|
"TrialReadingCriterionId",
|
||||||
|
this.trialCriterionInfo.TrialReadingCriterionId
|
||||||
|
);
|
||||||
|
var token = getToken();
|
||||||
|
var path = "";
|
||||||
|
var criterionName = this.trialCriterionInfo.TrialReadingCriterionName;
|
||||||
|
if (this.readingTool === 0) {
|
||||||
|
path = `/readingDicoms?TrialReadingCriterionId=${this.trialCriterionInfo.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.trialCriterionInfo.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 });
|
||||||
|
|
||||||
|
this.openWindow = window.open(routeData.href, "_blank");
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleOutOfOrderReading() {
|
||||||
|
if (this.openWindow) {
|
||||||
|
this.openWindow.close();
|
||||||
|
}
|
||||||
|
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}`;
|
||||||
|
} else {
|
||||||
|
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;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
receiveMsg(event) {
|
||||||
|
if (event.data === "refreshTaskList") {
|
||||||
|
this.getList();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 排序
|
||||||
|
handleSortChange(column) {
|
||||||
|
if (column.order === "ascending") {
|
||||||
|
this.searchData.Asc = true;
|
||||||
|
} else {
|
||||||
|
this.searchData.Asc = false;
|
||||||
|
}
|
||||||
|
this.searchData.SortField = column.prop;
|
||||||
|
this.searchData.PageIndex = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -1,352 +1,57 @@
|
||||||
<template>
|
<template>
|
||||||
<BaseContainer
|
<div>
|
||||||
v-loading="loading"
|
<el-tabs v-model="activeName" type="border-card">
|
||||||
style="height: 100%; background-color: #fff"
|
<!-- <el-tab-pane :label="$t('trials:study:tabpane:notBind')" name="notBind">
|
||||||
>
|
<notBindStudyList
|
||||||
<div slot="search-container">
|
activeName="notBind"
|
||||||
<el-form :inline="true">
|
v-if="activeName === 'notBind'"
|
||||||
<!-- 受试者编号 -->
|
/>
|
||||||
<el-form-item :label="$t('trials:reviewTrack:table:subjectCode')">
|
</el-tab-pane> -->
|
||||||
<el-input v-model="searchData.SubjectCode" style="width: 100px" />
|
<el-tab-pane
|
||||||
</el-form-item>
|
v-for="i in trialCriterionList"
|
||||||
<!-- 患者编号 -->
|
:key="i.TrialReadingCriterionId"
|
||||||
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
|
:label="i.TrialReadingCriterionName"
|
||||||
<el-input v-model="searchData.PatientIdStr" style="width: 140px" />
|
:name="i.TrialReadingCriterionId"
|
||||||
</el-form-item>
|
|
||||||
<!-- 患者姓名 -->
|
|
||||||
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
|
|
||||||
<el-input v-model="searchData.PatientName" style="width: 140px" />
|
|
||||||
</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>
|
|
||||||
</div>
|
|
||||||
<div slot="main-container">
|
|
||||||
<el-table
|
|
||||||
v-adaptive="{ bottomOffset: 75 }"
|
|
||||||
:data="list"
|
|
||||||
stripe
|
|
||||||
height="100"
|
|
||||||
@sort-change="handleSortChange"
|
|
||||||
>
|
>
|
||||||
<el-table-column type="index" width="40" align="left" />
|
<TaskList
|
||||||
<!-- 受试者编号 -->
|
v-if="activeName === i.TrialReadingCriterionId"
|
||||||
<el-table-column
|
:trial-criterion-info="i"
|
||||||
prop="SubjectCode"
|
|
||||||
min-width="100"
|
|
||||||
:label="$t('trials:reviewTrack:table:subjectCode')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
/>
|
||||||
<!-- 患者编号 -->
|
</el-tab-pane>
|
||||||
<el-table-column
|
</el-tabs>
|
||||||
prop="PatientIdStr"
|
</div>
|
||||||
min-width="100"
|
|
||||||
:label="$t('trials:uploadDicomList:table:pId')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<span
|
|
||||||
v-for="(item, index) in scope.row.PatientList"
|
|
||||||
:key="`${index}${item.PatientId}`"
|
|
||||||
>
|
|
||||||
{{
|
|
||||||
index === scope.row.PatientList.length - 1
|
|
||||||
? item.PatientIdStr
|
|
||||||
: `${item.PatientIdStr}, `
|
|
||||||
}}
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<!-- 患者姓名 -->
|
|
||||||
<el-table-column
|
|
||||||
prop="SubjectShortName"
|
|
||||||
min-width="100"
|
|
||||||
:label="$t('trials:uploadDicomList:table:patientName')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<!-- 剩余阅片量 -->
|
|
||||||
<el-table-column
|
|
||||||
prop="UnReadCanReadTaskCount"
|
|
||||||
min-width="100"
|
|
||||||
:label="$t('trials:pendingReadingTasks:table:remainingReadingVolume')"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<!-- 建议完成时间 -->
|
|
||||||
<el-table-column
|
|
||||||
prop="SuggesteFinishedTime"
|
|
||||||
min-width="100"
|
|
||||||
: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"
|
|
||||||
: ""
|
|
||||||
}}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<!--操作-->
|
|
||||||
<el-table-column
|
|
||||||
:label="$t('common:action:action')"
|
|
||||||
width="250"
|
|
||||||
fixed="right"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<!-- 阅片 -->
|
|
||||||
<el-button
|
|
||||||
: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')
|
|
||||||
"
|
|
||||||
icon="el-icon-edit-outline"
|
|
||||||
@click="handleReadImage(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 释放 -->
|
|
||||||
<el-button
|
|
||||||
: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"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</BaseContainer>
|
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import {
|
import { getTrialCriterionList } from '@/api/trials/reading'
|
||||||
getIRUnReadSubjectTaskList,
|
import TaskList from './components/TaskList'
|
||||||
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: "",
|
|
||||||
PatientIdStr: null,
|
|
||||||
PatientName: null,
|
|
||||||
PageIndex: 1,
|
|
||||||
PageSize: 20,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
export default {
|
export default {
|
||||||
name: "ReadingTaskList",
|
name: 'ReadingTask',
|
||||||
components: { BaseContainer, Pagination },
|
components: {
|
||||||
|
TaskList
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
searchData: searchDataDefault(),
|
activeName: '',
|
||||||
list: [],
|
trialId: '',
|
||||||
total: 0,
|
trialCriterionList: []
|
||||||
loading: false,
|
|
||||||
trialId: "",
|
|
||||||
isReadingTaskViewInOrder: null,
|
|
||||||
randomReadInfo: {},
|
|
||||||
isRender: false,
|
|
||||||
trialCriterionList: [],
|
|
||||||
TrialReadingCriterionId: "",
|
|
||||||
isTableShow: true,
|
|
||||||
readingTool: null,
|
|
||||||
criterionType: null,
|
|
||||||
openWindow: null,
|
|
||||||
userId: zzSessionStorage.getItem("userId"),
|
|
||||||
};
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
TrialReadingCriterionId(v) {
|
|
||||||
if (!v) return;
|
|
||||||
this.getList();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
window.addEventListener("message", this.receiveMsg);
|
|
||||||
this.trialId = this.$route.query.trialId;
|
|
||||||
// this.getList()
|
|
||||||
this.getTrialCriterionList();
|
|
||||||
},
|
|
||||||
beforeDestroy() {
|
|
||||||
window.removeEventListener("message", this.receiveMsg);
|
|
||||||
if (this.openWindow) {
|
|
||||||
this.openWindow.close();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
mounted() {
|
||||||
getTrialCriterionList() {
|
this.trialId = this.$route.query.trialId
|
||||||
getTrialCriterionList(this.trialId)
|
this.getTrialCriterionList()
|
||||||
.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;
|
|
||||||
if (res.OtherInfo.IsReadingTaskViewInOrder) {
|
|
||||||
this.list = res.Result.CurrentPageData;
|
|
||||||
this.total = res.Result.TotalCount;
|
|
||||||
} else {
|
|
||||||
this.randomReadInfo = res.OtherInfo.RandomReadInfo;
|
|
||||||
}
|
|
||||||
this.isRender = true;
|
|
||||||
this.loading = false;
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
this.isRender = true;
|
|
||||||
this.loading = false;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
// 释放
|
|
||||||
handleReleaseTasks(row) {
|
|
||||||
this.loading = true;
|
|
||||||
var params = {
|
|
||||||
isInOrder: true,
|
|
||||||
subejctId: row.SubjectId,
|
|
||||||
isClaim: false,
|
|
||||||
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;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
handleSearch() {
|
|
||||||
this.searchData.PageIndex = 1;
|
|
||||||
this.getList();
|
|
||||||
},
|
|
||||||
handleReset() {
|
|
||||||
this.searchData = searchDataDefault();
|
|
||||||
this.getList();
|
|
||||||
},
|
|
||||||
handleReadImage(row) {
|
|
||||||
if (this.openWindow) {
|
|
||||||
this.openWindow.close();
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
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}`;
|
|
||||||
} 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}`;
|
|
||||||
}
|
|
||||||
var routeData = this.$router.resolve({ path });
|
|
||||||
|
|
||||||
this.openWindow = window.open(routeData.href, "_blank");
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
this.loading = false;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
handleOutOfOrderReading() {
|
|
||||||
if (this.openWindow) {
|
|
||||||
this.openWindow.close();
|
|
||||||
}
|
|
||||||
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}`;
|
|
||||||
} else {
|
|
||||||
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;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
receiveMsg(event) {
|
|
||||||
if (event.data === "refreshTaskList") {
|
|
||||||
this.getList();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 排序
|
|
||||||
handleSortChange(column) {
|
|
||||||
if (column.order === "ascending") {
|
|
||||||
this.searchData.Asc = true;
|
|
||||||
} else {
|
|
||||||
this.searchData.Asc = false;
|
|
||||||
}
|
|
||||||
this.searchData.SortField = column.prop;
|
|
||||||
this.searchData.PageIndex = 1;
|
|
||||||
this.getList();
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
methods: {
|
||||||
|
async getTrialCriterionList() {
|
||||||
|
try {
|
||||||
|
const res = await getTrialCriterionList(this.trialId)
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.trialCriterionList = res.Result
|
||||||
|
this.activeName = this.trialCriterionList.length > 0 ? this.trialCriterionList[0].TrialReadingCriterionId : ''
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue