From 15371b329484632c987e349e50f41cab90d3ae8c Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期三, 15 四月 2026 09:28:25 +0800
Subject: [PATCH] 测试完成
---
src/views/sfstatistics/percentage/index.vue | 366 +++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 359 insertions(+), 7 deletions(-)
diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
index cab048c..911156a 100644
--- a/src/views/sfstatistics/percentage/index.vue
+++ b/src/views/sfstatistics/percentage/index.vue
@@ -1,17 +1,369 @@
<template>
- <div>闅忚缁熻</div>
+ <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'
+
+
export default {
- data() {
- return {};
+ 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,
- created() {},
+ // 寮圭獥鐩稿叧鐘舵��
+ chartDialogVisible: false,
+ chartData: [],
+ infotitleVisible: false,
+ SeedetailsVisible: false,
+ searchName: '',
+ infotitle: '',
+ infotitlelist: [],
+ patienttotal: 0,
+ logsheetlist: [],
+ Seedloading: false,
+ patientqueryParams: {
+ pn: 1,
+ ps: 10
+ }
+ }
+ },
+ created() {
+ this.getDeptTree()
+ },
+ 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)
- methods: {},
-};
+ // 鐥呭尯鍒楄〃
+ 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, title) {
+ this.infotitle = title
+ this.infotitlelist = row
+ this.infotitleVisible = true
+ },
+
+ Seedetails(row) {
+ this.SeedetailsVisible = true
+ this.Seedloading = true
+
+ this.$refs.firstFollowUp.selectTimelyRate(row, this.queryParams.dateRange)
+ .then(response => {
+ this.logsheetlist = response.data.detail
+ this.patienttotal = response.data.total
+ this.Seedloading = false
+ })
+ },
+
+ Seedetailstion() {
+ this.$refs.firstFollowUp.selectTimelyRate(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></style>
+<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>
--
Gitblit v1.9.3