<template>
|
<div class="follow-up-statistics">
|
<!-- 搜索表单区域 -->
|
<div class="search-section">
|
<el-form
|
:model="queryParams"
|
ref="queryForm"
|
size="small"
|
:inline="true"
|
v-show="showSearch"
|
label-width="98px"
|
>
|
<el-form-item label="统计类型" prop="userName">
|
<el-select
|
v-model="queryParams.statisticaltype"
|
placeholder="请选择统计类型"
|
>
|
<el-option
|
v-for="item in Statisticallist"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
<el-select
|
style="margin-left: 10px"
|
v-if="queryParams.statisticaltype == 1"
|
v-model="queryParams.leavehospitaldistrictcodes"
|
size="medium"
|
multiple
|
filterable
|
placeholder="请选择病区"
|
>
|
<el-option
|
v-for="item in flatArrayhospit"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
<el-select
|
v-else-if="queryParams.statisticaltype == 2"
|
v-model="queryParams.deptcodes"
|
size="medium"
|
multiple
|
filterable
|
placeholder="请选择科室"
|
>
|
<el-option
|
v-for="item in flatArraydept"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
|
<el-form-item label="服务类型" prop="userName">
|
<el-select
|
v-model="queryParams.serviceType"
|
multiple
|
placeholder="请选择"
|
>
|
<el-option
|
v-for="item in options"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
|
<el-form-item label-width="200" label="应随访时间范围" prop="userName">
|
<el-date-picker
|
v-model="queryParams.dateRange"
|
value-format="yyyy-MM-dd HH:mm:ss"
|
type="daterange"
|
range-separator="至"
|
start-placeholder="开始日期"
|
end-placeholder="结束日期"
|
:default-time="['00:00:00', '23:59:59']"
|
/>
|
</el-form-item>
|
|
<el-form-item>
|
<el-button
|
type="primary"
|
icon="el-icon-search"
|
size="medium"
|
@click="handleQuery"
|
>搜索</el-button
|
>
|
<el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
|
>重置</el-button
|
>
|
</el-form-item>
|
|
<el-button
|
type="warning"
|
plain
|
icon="el-icon-download"
|
size="medium"
|
@click="handleExport"
|
>导出</el-button
|
>
|
<el-button
|
type="primary"
|
plain
|
icon="el-icon-data-line"
|
size="medium"
|
@click="showChartDialog"
|
>统计趋势图</el-button
|
>
|
</el-form>
|
</div>
|
|
<!-- Tab切换区域 -->
|
<div class="tab-section">
|
<el-tabs v-model="activeTab" @tab-click="handleTabClick">
|
<el-tab-pane label="首次随访" name="first">
|
<FirstFollowUp
|
ref="firstFollowUp"
|
:query-params="queryParams"
|
:flat-array-hospit="flatArrayhospit"
|
:flat-array-dept="flatArraydept"
|
:options="options"
|
:orgname="orgname"
|
@view-details="viewDetails"
|
@see-details="Seedetails"
|
/>
|
</el-tab-pane>
|
|
<el-tab-pane label="再次随访" name="second">
|
<SecondFollowUp
|
ref="secondFollowUp"
|
:query-params="queryParams"
|
:flat-array-hospit="flatArrayhospit"
|
:flat-array-dept="flatArraydept"
|
:options="options"
|
:orgname="orgname"
|
@view-details="viewDetails"
|
/>
|
</el-tab-pane>
|
|
<el-tab-pane
|
label="延续护理统计"
|
name="continued"
|
v-if="orgname == '省立同德翠苑院区'"
|
>
|
<ContinuedCare
|
ref="continuedCare"
|
:query-params="queryParams"
|
:flat-array-hospit="flatArrayhospit"
|
:flat-array-dept="flatArraydept"
|
:options="options"
|
:orgname="orgname"
|
@view-details="viewDetails"
|
/>
|
</el-tab-pane>
|
</el-tabs>
|
</div>
|
|
<!-- 弹窗区域 -->
|
<ChartDialog
|
:visible="chartDialogVisible"
|
:data="chartData"
|
:active-tab="activeTab"
|
@close="chartDialogVisible = false"
|
/>
|
|
<DetailDialog
|
:visible="infotitleVisible"
|
:title="infotitle"
|
:data="infotitlelist"
|
:search-name="searchName"
|
@close="infotitleVisible = false"
|
@search="handleSearch"
|
@details-go="SeedetailsgGo"
|
/>
|
|
<TimelyRateDialog
|
:visible="SeedetailsVisible"
|
:loading="Seedloading"
|
:data="logsheetlist"
|
:total="patienttotal"
|
:query-params="patientqueryParams"
|
@close="SeedetailsVisible = false"
|
@search="Seedetailstion"
|
@details-go="SeedetailsgGo"
|
/>
|
</div>
|
</template>
|
|
<script>
|
import FirstFollowUp from "./components/FirstFollowUp.vue";
|
import SecondFollowUp from "./components/SecondFollowUp.vue";
|
import ContinuedCare from "./components/ContinuedCare.vue";
|
import ChartDialog from "./components/ChartDialog.vue";
|
import DetailDialog from "./components/DetailDialog.vue";
|
import TimelyRateDialog from "./components/TimelyRateDialog.vue";
|
|
import { getSfStatisticsHyperlink } from "@/api/AiCentre/index";
|
|
export default {
|
name: "FollowUpStatistics",
|
components: {
|
FirstFollowUp,
|
SecondFollowUp,
|
ContinuedCare,
|
ChartDialog,
|
DetailDialog,
|
TimelyRateDialog,
|
},
|
data() {
|
return {
|
activeTab: "first",
|
orgname: localStorage.getItem("orgname") || "",
|
Statisticallist: [
|
{ label: "病区统计", value: 1 },
|
{ label: "科室统计", value: 2 },
|
],
|
options: this.$store.getters.tasktypes,
|
queryParams: {
|
serviceType: [2],
|
dateRange: [],
|
statisticaltype: 1,
|
leavehospitaldistrictcodes: ["all"],
|
deptcodes: [],
|
},
|
flatArrayhospit: [],
|
flatArraydept: [],
|
allDeptCodes: [],
|
allWardCodes: [],
|
showSearch: true,
|
|
// 弹窗相关状态
|
chartDialogVisible: false,
|
chartData: [],
|
infotitleVisible: false,
|
SeedetailsVisible: false,
|
searchName: "",
|
infotitle: "",
|
infotitlelist: [],
|
patienttotal: 0,
|
logsheetlist: [],
|
Seedloading: false,
|
patientqueryParams: {
|
pageNum: 1,
|
pageSize: 10,
|
},
|
};
|
},
|
created() {
|
this.getDeptTree();
|
this.loadCurrentTabData();
|
},
|
methods: {
|
getDeptTree() {
|
// 科室列表
|
this.flatArraydept = this.$store.getters.belongDepts.map((dept) => {
|
return {
|
label: dept.deptName,
|
value: dept.deptCode,
|
};
|
});
|
this.allDeptCodes = this.$store.getters.belongDepts.map(
|
(dept) => dept.deptCode
|
);
|
|
// 病区列表
|
this.flatArrayhospit = this.$store.getters.belongWards.map((ward) => {
|
return {
|
label: ward.districtName,
|
value: ward.districtCode,
|
};
|
});
|
this.allWardCodes = this.$store.getters.belongWards.map(
|
(ward) => ward.districtCode
|
);
|
|
this.flatArraydept.push({ label: "全部", value: "all" });
|
this.flatArrayhospit.push({ label: "全部", value: "all" });
|
},
|
|
handleTabClick(tab) {
|
this.activeTab = tab.name;
|
this.loadCurrentTabData();
|
},
|
|
loadCurrentTabData() {
|
switch (this.activeTab) {
|
case "first":
|
this.$refs.firstFollowUp.loadData();
|
break;
|
case "second":
|
this.$refs.secondFollowUp.loadData();
|
break;
|
case "continued":
|
this.$refs.continuedCare.loadData();
|
break;
|
}
|
},
|
|
handleQuery() {
|
this.queryParams.startTime = this.parseTime(
|
this.queryParams.dateRange[0]
|
);
|
this.queryParams.endTime = this.parseTime(this.queryParams.dateRange[1]);
|
|
if (this.queryParams.statisticaltype == 1) {
|
this.queryParams.deptcodes = [];
|
} else if (this.queryParams.statisticaltype == 2) {
|
this.queryParams.leavehospitaldistrictcodes = [];
|
}
|
|
this.loadCurrentTabData();
|
},
|
|
resetQuery() {
|
this.queryParams.dateRange = [];
|
this.queryParams.leavehospitaldistrictcodes = [];
|
this.handleQuery();
|
},
|
|
async handleExport() {
|
switch (this.activeTab) {
|
case "first":
|
await this.$refs.firstFollowUp.exportTable();
|
break;
|
case "second":
|
await this.$refs.secondFollowUp.exportTable();
|
break;
|
case "continued":
|
await this.$refs.continuedCare.exportTable();
|
break;
|
}
|
},
|
|
showChartDialog() {
|
this.chartData = this.getCurrentTabData();
|
this.chartDialogVisible = true;
|
},
|
|
getCurrentTabData() {
|
switch (this.activeTab) {
|
case "first":
|
return this.$refs.firstFollowUp.tableData;
|
case "second":
|
return this.$refs.secondFollowUp.tableData;
|
case "continued":
|
return this.$refs.continuedCare.tableData;
|
default:
|
return [];
|
}
|
},
|
|
viewDetails(row, infoKey, title, type) {
|
this.infotitle = title;
|
|
let obj = {
|
hyperLinkInfoType: infoKey,
|
leavehospitaldistrictcodes: this.queryParams.leavehospitaldistrictcodes,
|
serviceType: this.queryParams.serviceType,
|
};
|
if (type == 1) {
|
obj.drcode = row.drcode;
|
}
|
if (this.queryParams.statisticaltype == 1) {
|
obj.leavehospitaldistrictcodes = [row.leavehospitaldistrictcode];
|
obj.deptcodes = [];
|
} else {
|
obj.deptcodes = [row.deptcode];
|
obj.leavehospitaldistrictcodes = [];
|
}
|
|
getSfStatisticsHyperlink(obj).then((response) => {
|
this.infotitlelist = response.data;
|
});
|
|
this.infotitleVisible = true;
|
},
|
|
Seedetails(row) {
|
this.SeedetailsVisible = true;
|
this.Seedloading = true;
|
|
this.$refs.firstFollowUp
|
.selectTimelyRate(row, this.queryParams)
|
.then((response) => {
|
this.logsheetlist = response.data.detail;
|
this.patienttotal = response.data.total;
|
this.Seedloading = false;
|
});
|
},
|
|
Seedetailstion() {
|
console.log(this.patientqueryParams);
|
|
this.$refs.firstFollowUp
|
.selectTimelyRates(this.patientqueryParams)
|
.then((response) => {
|
this.logsheetlist = response.data.detail;
|
this.patienttotal = response.data.total;
|
});
|
},
|
|
SeedetailsgGo(row) {
|
this.SeedetailsVisible = false;
|
let type = "";
|
if (row.preachformson && row.preachformson.includes("3")) {
|
type = 1;
|
}
|
setTimeout(() => {
|
this.$router.push({
|
path: "/followvisit/record/detailpage/",
|
query: {
|
taskid: row.taskid,
|
patid: row.patid,
|
id: row.id,
|
Voicetype: type,
|
},
|
});
|
}, 300);
|
},
|
|
handleSearch() {
|
// 搜索逻辑
|
},
|
},
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.follow-up-statistics {
|
padding: 20px;
|
background: #ffff;
|
border: 1px solid #dcdfe6;
|
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04);
|
|
.search-section {
|
margin-bottom: 20px;
|
}
|
|
.tab-section {
|
::v-deep .el-tabs__header {
|
margin-bottom: 20px;
|
}
|
|
::v-deep .el-tabs__item {
|
font-size: 16px;
|
padding: 0 20px;
|
height: 40px;
|
line-height: 40px;
|
}
|
|
::v-deep .el-tabs__active-bar {
|
height: 3px;
|
}
|
}
|
}
|
</style>
|