访视相关

main
wangxiaoshuang 2024-04-07 16:01:09 +08:00
parent df1d608c50
commit bb04e1bc1d
7 changed files with 244 additions and 44 deletions

11
src/api/readManagenent.js Normal file
View File

@ -0,0 +1,11 @@
// 阅片管理
import request from '@/utils/request'
// 任务列表
export function getPatientVisitTaskList(data) {
return request({
url: '/Patient/getPatientVisitTaskList',
method: 'post',
data
})
}

View File

@ -304,3 +304,30 @@ export function getSubjectImageZipInfo(id) {
method: 'get',
})
}
// 访视->修改检查->获取访视已绑定的检查
export function getCurrentVisitPatientStudyList(data) {
return request({
url: `/Patient/getCurrentVisitPatientStudyList`,
method: 'post',
data
})
}
// 访视->修改检查->获取访视可绑定的检查
export function getPatientOtherStudyList(data) {
return request({
url: `/Patient/getPatientOtherStudyList`,
method: 'post',
data
})
}
// 访视->修改检查->修改访视和检查绑定关系
export function updateSubjectVisitStudyBinding(data) {
return request({
url: `/Patient/updateSubjectVisitStudyBinding`,
method: 'put',
data
})
}

View File

@ -32,10 +32,9 @@
<el-menu-item
v-if="!hasPermi(['role:zys'])"
index="2"
:disabled="TotalNeedSignSystemDocCount !== 0"
>
<i class="el-icon-box" />
<!-- 我的项目 -->
<!-- 我的项目:disabled="TotalNeedSignSystemDocCount !== 0" -->
<span slot="title">
{{ $t("trials:tab:trials") }}
</span>

View File

@ -212,7 +212,7 @@
</el-form>
</template>
<script>
import store from "@/store";
// import store from "@/store";
import { mapGetters, mapState } from "vuex";
import { getTrialInfo, addOrUpdateTrialHir } from "@/api/trials";
import { getBasicDataSelects } from "@/api/dictionary/dictionary";

View File

@ -9,7 +9,9 @@
<span slot="title"
>{{ $t("trials:hirVisit:button:editStudy") }}{{
$t("trials:globalReview:title:subject")
}}T0001132{{ $t("trials:studyList:table:visit") }}ZhangSan
}}{{ data.SubjectCode }}{{ $t("trials:studyList:table:visit") }}{{
data.VisitName
}}
</span>
<!--当前检查--->
<div class="topTable">
@ -36,35 +38,35 @@
<!--检查编号-->
<el-table-column
align="center"
prop="IsUrgent"
prop="PatientIdStr"
:label="$t('trials:audit:table:studyId')"
show-overflow-tooltip
></el-table-column>
<!--检查类型-->
<el-table-column
align="center"
prop="IsUrgent"
prop="Modalities"
:label="$t('trials:audit:table:modality')"
show-overflow-tooltip
></el-table-column>
<!--序列数量-->
<el-table-column
align="center"
prop="IsUrgent"
prop="InstanceCount"
:label="$t('trials:audit:table:seriesCount')"
show-overflow-tooltip
></el-table-column>
<!--检查日期-->
<el-table-column
align="center"
prop="IsUrgent"
prop="StudyTime"
:label="$t('trials:audit:table:studyDate')"
show-overflow-tooltip
></el-table-column>
<!--所属访视-->
<el-table-column
align="center"
prop="IsUrgent"
prop="VisitName"
:label="$t('trials:hirVisit:table:ownershipVisit')"
show-overflow-tooltip
></el-table-column>
@ -99,7 +101,7 @@
<!-- 检查日期 -->
<el-form-item :label="$t('trials:uploadedDicoms:table:studyDate')">
<el-date-picker
v-model="searchData.date"
v-model="dateValue"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
@ -143,35 +145,35 @@
<!--检查编号-->
<el-table-column
align="center"
prop="IsUrgent"
prop="PatientIdStr"
:label="$t('trials:audit:table:studyId')"
show-overflow-tooltip
></el-table-column>
<!--检查类型-->
<el-table-column
align="center"
prop="IsUrgent"
prop="Modalities"
:label="$t('trials:audit:table:modality')"
show-overflow-tooltip
></el-table-column>
<!--序列数量-->
<el-table-column
align="center"
prop="IsUrgent"
prop="InstanceCount"
:label="$t('trials:audit:table:seriesCount')"
show-overflow-tooltip
></el-table-column>
<!--检查日期-->
<el-table-column
align="center"
prop="IsUrgent"
prop="StudyTime"
:label="$t('trials:audit:table:studyDate')"
show-overflow-tooltip
></el-table-column>
<!--所属访视-->
<el-table-column
align="center"
prop="IsUrgent"
prop="VisitName"
:label="$t('trials:hirVisit:table:ownershipVisit')"
show-overflow-tooltip
></el-table-column>
@ -197,27 +199,124 @@
</el-dialog>
</template>
<script>
import {
getCurrentVisitPatientStudyList,
getPatientOtherStudyList,
updateSubjectVisitStudyBinding,
} from "@/api/trials/visit.js";
const defaultSearchData = () => {
return {
EarliestStudyTime: null,
LatestStudyTime: null,
};
};
export default {
name: "editStudyList",
props: {
visible: {
require: true,
required: true,
default: false,
},
data: {
required: true,
default: () => {
return {};
},
},
},
data() {
return {
//
searchData: {},
searchData: defaultSearchData(),
dateValue: [],
//
bottomList: [{ IsUrgent: 2 }],
bottomList: [],
bottomLoading: false,
//
topList: [{ IsUrgent: 1 }],
topList: [],
topLoading: false,
};
},
created() {
this.getTopList();
this.getBottomList();
},
methods: {
//
async getTopList() {
try {
let data = {
SujectVisitId: this.data.SubjectVisitId,
};
this.topLoading = true;
let res = await getCurrentVisitPatientStudyList(data);
this.topLoading = false;
if (res.IsSuccess) {
this.topList = res.Result;
}
} catch (err) {
this.topLoading = false;
console.log(err);
}
},
//
async getBottomList() {
let data = {};
Object.keys(this.searchData).forEach((key) => {
data[key] = this.searchData[key];
});
data.PatientId = this.data.PatientList[0].PatientId;
data.SujectVisitId = this.data.SubjectVisitId;
if (this.dateValue[0] && this.dateValue[1]) {
data.EarliestStudyTime = this.dateValue[0].toISOString();
data.LatestStudyTime = this.dateValue[0].toISOString();
}
try {
this.bottomLoading = true;
let res = await getPatientOtherStudyList(data);
this.bottomLoading = false;
if (res.IsSuccess) {
this.bottomList = res.Result;
}
} catch (err) {
console.log(err);
this.bottomLoading = false;
}
},
// 访
async setRelation(item, isAdd = true) {
try {
let confirmMessage = "trials:sitesList:message:removeSite";
if (isAdd) {
confirmMessage = "trials:customSite:message:add";
}
let confirm = await this.$confirm(this.$t(confirmMessage), {
type: "warning",
distinguishCancelAndClose: true,
confirmButtonText: this.$t("common:button:confirm"),
cancelButtonText: this.$t("recompose:button:cancel"),
});
if (confirm !== "confirm") return;
let data = {
isAdd,
SubjectId: this.data.SubjectId,
SubjectVisitId: this.data.SubjectVisitId,
ScpStudyId: item.SCPStudyId,
};
let res = await updateSubjectVisitStudyBinding(data);
if (res.IsSuccess) {
this.getTopList();
this.getBottomList();
let message = "common:message:addedSuccessfully";
if (!isAdd) {
message = "common:message:removedSuccessfully";
}
this.$message.success(this.$t(message));
}
} catch (err) {
console.log(err);
}
},
//
beforeCloseStudyDig() {
this.$emit("update:visible", false);
@ -229,15 +328,29 @@ export default {
//
detail(item, key) {},
//
remove(item) {},
remove(item) {
this.setRelation(item, false);
},
//
handleSearch() {},
handleSearch() {
this.getBottomList();
},
//
handleReset() {},
handleReset() {
this.reset();
this.getBottomList();
},
//
reset() {
this.searchData = defaultSearchData();
this.dateValue = [];
},
//
handleSelectChange() {},
//
add(item) {},
add(item) {
this.setRelation(item, true);
},
addTrials() {},
},
};

View File

@ -263,7 +263,11 @@
/>
</template>
<!--修改检查-->
<editStudyList :visible.sync="editStudyVisible" />
<editStudyList
:visible.sync="editStudyVisible"
:data="editStudyData"
v-if="editStudyVisible"
/>
</BaseContainer>
</template>
<script>
@ -274,6 +278,7 @@ import {
getPatientSubejctVisitList,
getSubjectImageZipInfo,
} from "@/api/trials/visit.js";
import { submitVisitStudyBinding } from "@/api/inspection.js";
import JSZip from "jszip";
import axios from "axios";
import { saveAs } from "file-saver";
@ -306,6 +311,7 @@ export default {
total: 0,
//
editStudyVisible: false,
editStudyData: {},
};
},
created() {
@ -351,10 +357,39 @@ export default {
},
//
editStudy(item) {
this.editStudyData = item;
this.editStudyVisible = true;
},
//
submit() {},
async submit(item) {
let confirm = await this.$confirm(
this.$t("trials:adjustRecord:message:confirm"),
{
type: "warning",
distinguishCancelAndClose: true,
confirmButtonText: this.$t("common:button:confirm"),
cancelButtonText: this.$t("recompose:button:cancel"),
}
);
if (confirm !== "confirm") return;
let data = {
TrialId: this.$route.query.trialId,
SubjectVisitId: [item.SubjectVisitId],
};
try {
this.loading = true;
let res = await submitVisitStudyBinding(data);
this.loading = false;
if (res.IsSuccess) {
this.$message.success(
this.$t("trials:crcUpload:message:submittedSuccessfully")
);
}
} catch (err) {
this.btnLoading2 = false;
console.log(err);
}
},
//
remove() {},
//

View File

@ -5,18 +5,18 @@
<el-form :inline="true">
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:crcQuestion:table:subjectId')">
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
<el-input v-model="searchData.SubjectCode" style="width: 140px" />
</el-form-item>
<!-- 患者编号 -->
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<!-- <el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
</el-form-item>
</el-form-item> -->
<!-- 患者姓名 -->
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<!-- <el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
</el-form-item>
</el-form-item> -->
<!-- 访视名称 -->
<el-form-item :label="$t('trials:globalReview:table:visitName')">
<!-- <el-form-item :label="$t('trials:globalReview:table:visitName')">
<el-select
v-model="searchData.SiteId"
clearable
@ -30,43 +30,43 @@
:value="item.SiteId"
/>
</el-select>
</el-form-item>
</el-form-item> -->
<!-- 任务状态 -->
<el-form-item :label="$t('trials:readTask:table:taskState')">
<el-select
v-model="searchData.SiteId"
v-model="searchData.taskState"
clearable
filterable
style="width: 150px"
>
<el-option
v-for="item of visitOptions"
:key="item.SiteId"
:label="item.TrialSiteCode"
:value="item.SiteId"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<!-- 阅片状态 -->
<el-form-item :label="$t('trials:readTask:table:readingTaskState')">
<el-select
v-model="searchData.SiteId"
v-model="searchData.ReadingTaskState"
clearable
filterable
style="width: 150px"
>
<el-option
v-for="item of visitOptions"
:key="item.SiteId"
:label="item.TrialSiteCode"
:value="item.SiteId"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<!-- 阅片完成时间 -->
<el-form-item :label="$t('trials:reviewTrack:table:signTime')">
<el-date-picker
v-model="searchData.date"
v-model="dateValue"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
@ -168,11 +168,11 @@
<template slot-scope="scope">
<!--阅片结果-->
<el-button type="text" @click="readResult(scope.row)">{{
$t("trials:hirVisit:button:editStudy")
$t("trials:auditRecord:table:readingResult")
}}</el-button>
<!--下载报告-->
<el-button type="text" @click="downloadReport(scope.row)">{{
$t("common:button:submit")
$t("trials:reading:button:uploadReport")
}}</el-button>
</template>
</el-table-column>
@ -192,6 +192,21 @@
<script>
import BaseContainer from "@/components/BaseContainer";
import Pagination from "@/components/Pagination";
import { getPatientVisitTaskList } from "@/api/readManagenent.js";
const defaultSearchData = () => {
return {
SubjectCode: null,
ReadingCategory: 1,
ReadingTaskState: 0,
TaskState: 0,
BeginSignTime: null,
EndSignTime: null,
PageIndex: 0,
PageSize: 0,
Asc: false,
SortField: "CreateTime",
};
};
export default {
name: "readManagenent",
components: { BaseContainer, Pagination },
@ -220,7 +235,7 @@ export default {
//
handleSortByColumn() {},
//
getList() {},
async getList() {},
//
downloadReport() {},
//