|
|
@@ -6,80 +6,145 @@
|
|
|
<el-option label="急诊" value="EMERGENCY"></el-option>
|
|
|
<el-option label="住院" value="INPATIENT"></el-option>
|
|
|
</el-select>
|
|
|
+ <el-select
|
|
|
+ v-if="inquiry.visitType === 'INPATIENT'"
|
|
|
+ v-model="inquiry.ward"
|
|
|
+ style="width: 140px"
|
|
|
+ clearable
|
|
|
+ placeholder="病区(为空时查全院)"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in wardList"
|
|
|
+ :key="item.code"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.code"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
<el-date-picker
|
|
|
type="daterange"
|
|
|
v-model="dateRange"
|
|
|
+ :shortcuts="shortcuts"
|
|
|
style="width: 200px"
|
|
|
+ :clearable="false"
|
|
|
start-placeholder="开始日期"
|
|
|
end-placeholder="结束日期"
|
|
|
></el-date-picker>
|
|
|
<el-divider direction="vertical"></el-divider>
|
|
|
- <el-checkbox v-model="inquiry.onlyShowUnsatisfied" @change="handleSatisfiedChange">只看含有“不满意”的问卷
|
|
|
+ <el-checkbox
|
|
|
+ v-model="inquiry.onlyShowUnsatisfied"
|
|
|
+ @change="handleSatisfiedChange"
|
|
|
+ >
|
|
|
+ 只看含有“不满意”的问卷
|
|
|
</el-checkbox>
|
|
|
- <el-button icon="Search" type="primary" @click="fetchAssessments" style="margin-left: 4px">检索</el-button>
|
|
|
+ <el-button icon="Search" type="primary" @click="fetchAssessments(true)" style="margin-left: 4px">检索</el-button>
|
|
|
<el-button icon="DataAnalysis" type="success" @click="executeAssessmentAnalyse" style="margin-left: 12px">
|
|
|
问卷分析
|
|
|
</el-button>
|
|
|
- <el-button type="primary" icon="Download" @click="exportExcel">导出Excel</el-button>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ icon="Download"
|
|
|
+ @click="exportExcel(1)"
|
|
|
+ >
|
|
|
+ 导出问卷Excel
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ v-if="inquiry.visitType === 'INPATIENT'"
|
|
|
+ type="primary"
|
|
|
+ icon="Download"
|
|
|
+ @click="exportExcel(2)"
|
|
|
+ >
|
|
|
+ 导出患者Excel
|
|
|
+ </el-button>
|
|
|
</header>
|
|
|
- <div class="layout_main layout_el-table">
|
|
|
- <el-table :data="assessments.listV2" stripe highlight-current-row>
|
|
|
- <el-table-column prop="patientId" label="门诊号" width="70"></el-table-column>
|
|
|
- <el-table-column v-if="inquiry.visitType === 'INPATIENT'" prop="zykshl" label="住院科室护理"></el-table-column>
|
|
|
- <el-table-column v-if="inquiry.visitType === 'INPATIENT'" prop="zyksys" label="住院科室医生"></el-table-column>
|
|
|
- <el-table-column v-if="inquiry.visitType === 'INPATIENT'" prop="yyst" label="医院食堂"></el-table-column>
|
|
|
- <el-table-column v-if="inquiry.visitType !== 'INPATIENT'" prop="mjzdzjhl"
|
|
|
- label="门急诊导诊及护理"></el-table-column>
|
|
|
- <el-table-column v-if="inquiry.visitType !== 'INPATIENT'" prop="mjzys" label="门急诊医生"></el-table-column>
|
|
|
- <el-table-column prop="yjk" label="药剂科"></el-table-column>
|
|
|
- <el-table-column prop="fsk" label="放射科"></el-table-column>
|
|
|
- <el-table-column prop="csyxk" label="超声影像科"></el-table-column>
|
|
|
- <el-table-column prop="jyk" label="检验科"></el-table-column>
|
|
|
- <el-table-column prop="sfck" label="收费窗口"></el-table-column>
|
|
|
- <el-table-column v-if="inquiry.visitType === 'INPATIENT'" prop="mzyh" label="门诊医护"></el-table-column>
|
|
|
- <el-table-column v-if="inquiry.visitType === 'INPATIENT'" prop="jzyh" label="急诊医护"></el-table-column>
|
|
|
- <el-table-column prop="ybk" label="医保科"></el-table-column>
|
|
|
- <el-table-column prop="xzwyyy" label="选择我院的原因"></el-table-column>
|
|
|
- <el-table-column prop="sfhxzzl" label="是否会再次选择我院"></el-table-column>
|
|
|
- <el-table-column prop="ztpj" label="整体评价"></el-table-column>
|
|
|
- <el-table-column prop="zmydyshs" label="满意的医生护士"></el-table-column>
|
|
|
- <el-table-column prop="dwydjyhyj" label="意见和建议"></el-table-column>
|
|
|
- <el-table-column prop="createDatetime" label="问卷时间"></el-table-column>
|
|
|
- <el-table-column fixed="right" width="100">
|
|
|
- <template #default="scope">
|
|
|
- <el-button
|
|
|
- v-if="scope.row.deleted === 0"
|
|
|
- icon="Delete"
|
|
|
- type="danger"
|
|
|
- title="删除"
|
|
|
- @click="changeAssessmentStatus(scope.row, 1)"
|
|
|
- ></el-button>
|
|
|
- <el-button
|
|
|
- v-else
|
|
|
- icon="Refresh"
|
|
|
- type="success"
|
|
|
- title="恢复"
|
|
|
- @click="changeAssessmentStatus(scope.row, 0)"
|
|
|
- ></el-button>
|
|
|
- <el-button
|
|
|
- icon="User"
|
|
|
- title="患者信息"
|
|
|
- type="primary"
|
|
|
- plain
|
|
|
- @click="beforeShowPatInfo(scope.row)"
|
|
|
- ></el-button>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- <el-pagination
|
|
|
- @size-change="handleSizeChange"
|
|
|
- @current-change="handleCurrentChange"
|
|
|
- :current-page="inquiry.pageNum"
|
|
|
- :page-sizes="[30, 50, 70, 100]"
|
|
|
- :page-size="inquiry.pageSize"
|
|
|
- layout="total, sizes, prev, pager, next"
|
|
|
- :total="assessments.totalSize"
|
|
|
- ></el-pagination>
|
|
|
+ <div class="layout_main layout_container layout-horizontal">
|
|
|
+ <div v-if="inquiry.visitType === 'INPATIENT'" class="layout_el-table" style="margin-right: 4px">
|
|
|
+ <el-table
|
|
|
+ ref="patTable"
|
|
|
+ :data="assessments.patients
|
|
|
+ .slice((currentPage - 1) * pageSize,
|
|
|
+ currentPage * pageSize)"
|
|
|
+ stripe
|
|
|
+ highlight-current-row
|
|
|
+ @row-click="handleClickPatRow"
|
|
|
+ >
|
|
|
+ <el-table-column prop="patNo" label="住院号" width="70"></el-table-column>
|
|
|
+ <el-table-column prop="patName" label="姓名" width="70"></el-table-column>
|
|
|
+ <el-table-column prop="disdate" label="出院时间" width="80"></el-table-column>
|
|
|
+ <el-table-column prop="disdept" label="出院病区" width="100"></el-table-column>
|
|
|
+ <el-table-column label="已填问卷" width="60">
|
|
|
+ <template #default="{row}">
|
|
|
+ <span v-html="questionnared(row.questionnaireCount)"></span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-pagination
|
|
|
+ :current-page="currentPage"
|
|
|
+ :page-size="pageSize"
|
|
|
+ :total="assessments.patients.length"
|
|
|
+ layout="total, prev, next"
|
|
|
+ @current-change="handleCurrentChange1"
|
|
|
+ ></el-pagination>
|
|
|
+ </div>
|
|
|
+ <div class="layout_main layout_el-table">
|
|
|
+ <el-table :data="assessments.listV2" stripe highlight-current-row>
|
|
|
+ <el-table-column prop="patientId" label="门诊号" width="70"></el-table-column>
|
|
|
+ <el-table-column v-if="inquiry.visitType === 'INPATIENT'" prop="inpatientNo" label="住院号" width="70"></el-table-column>
|
|
|
+ <el-table-column v-if="inquiry.visitType === 'INPATIENT'" prop="zykshl" label="住院科室护理"></el-table-column>
|
|
|
+ <el-table-column v-if="inquiry.visitType === 'INPATIENT'" prop="zyksys" label="住院科室医生"></el-table-column>
|
|
|
+ <el-table-column v-if="inquiry.visitType === 'INPATIENT'" prop="yyst" label="医院食堂"></el-table-column>
|
|
|
+ <el-table-column v-if="inquiry.visitType !== 'INPATIENT'" prop="mjzdzjhl"
|
|
|
+ label="门急诊导诊及护理"></el-table-column>
|
|
|
+ <el-table-column v-if="inquiry.visitType !== 'INPATIENT'" prop="mjzys" label="门急诊医生"></el-table-column>
|
|
|
+ <el-table-column prop="yjk" label="药剂科"></el-table-column>
|
|
|
+ <el-table-column prop="fsk" label="放射科"></el-table-column>
|
|
|
+ <el-table-column prop="csyxk" label="超声影像科"></el-table-column>
|
|
|
+ <el-table-column prop="jyk" label="检验科"></el-table-column>
|
|
|
+ <el-table-column prop="sfck" label="收费窗口"></el-table-column>
|
|
|
+ <el-table-column v-if="inquiry.visitType === 'INPATIENT'" prop="mzyh" label="门诊医护"></el-table-column>
|
|
|
+ <el-table-column v-if="inquiry.visitType === 'INPATIENT'" prop="jzyh" label="急诊医护"></el-table-column>
|
|
|
+ <el-table-column prop="ybk" label="医保科"></el-table-column>
|
|
|
+ <el-table-column prop="xzwyyy" label="选择我院的原因"></el-table-column>
|
|
|
+ <el-table-column prop="sfhxzzl" label="是否会再次选择我院"></el-table-column>
|
|
|
+ <el-table-column prop="ztpj" label="整体评价"></el-table-column>
|
|
|
+ <el-table-column prop="zmydyshs" label="满意的医生护士"></el-table-column>
|
|
|
+ <el-table-column prop="dwydjyhyj" label="意见和建议"></el-table-column>
|
|
|
+ <el-table-column prop="createDatetime" label="问卷时间"></el-table-column>
|
|
|
+ <el-table-column fixed="right" width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-button
|
|
|
+ v-if="scope.row.deleted === 0"
|
|
|
+ icon="Delete"
|
|
|
+ type="danger"
|
|
|
+ title="删除"
|
|
|
+ @click="changeAssessmentStatus(scope.row, 1)"
|
|
|
+ ></el-button>
|
|
|
+ <el-button
|
|
|
+ v-else
|
|
|
+ icon="Refresh"
|
|
|
+ type="success"
|
|
|
+ title="恢复"
|
|
|
+ @click="changeAssessmentStatus(scope.row, 0)"
|
|
|
+ ></el-button>
|
|
|
+ <el-button
|
|
|
+ icon="User"
|
|
|
+ title="患者信息"
|
|
|
+ type="primary"
|
|
|
+ plain
|
|
|
+ @click="beforeShowPatInfo(scope.row)"
|
|
|
+ ></el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-pagination
|
|
|
+ @size-change="handleSizeChange"
|
|
|
+ @current-change="handleCurrentChange"
|
|
|
+ :current-page="inquiry.pageNum"
|
|
|
+ :page-sizes="[30, 50, 70, 100]"
|
|
|
+ :page-size="inquiry.pageSize"
|
|
|
+ layout="total, sizes, prev, pager, next"
|
|
|
+ :total="assessments.totalSize"
|
|
|
+ ></el-pagination>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
@@ -928,6 +993,7 @@
|
|
|
<script setup>
|
|
|
import {
|
|
|
getQuestionnaireBodies,
|
|
|
+ getPatInfoList,
|
|
|
getAllQuestionnaireBodies,
|
|
|
updateAssessmentStatusV2,
|
|
|
assessmentsAnalyseV2,
|
|
|
@@ -935,11 +1001,51 @@ import {
|
|
|
} from "@/api/outpatient/clinic-satisfied";
|
|
|
import {ElMessage} from "element-plus";
|
|
|
import {Export} from "@/utils/ExportExcel";
|
|
|
-import {getDateRangeFormatDate} from "@/utils/date";
|
|
|
+import {getDateRangeFormatDate, getOneMonthOffset} from "@/utils/date";
|
|
|
import SimplestPatInfo from "@/components/outpatient/SimplestPatInfo.vue";
|
|
|
import useDialogToJs from "@/components/js-dialog-comp/useDialogToJs";
|
|
|
+import {shortcuts} from "@/data/shortcuts";
|
|
|
+import {getAllWards} from "@/api/login";
|
|
|
+import {xcMessage} from "@/utils/xiaochan-element-plus";
|
|
|
|
|
|
const dateRange = ref([])
|
|
|
+const wardList = ref([])
|
|
|
+
|
|
|
+const pageSize = 30
|
|
|
+const currentPage = ref(1)
|
|
|
+
|
|
|
+function handleCurrentChange1(val) {
|
|
|
+ currentPage.value = val
|
|
|
+}
|
|
|
+
|
|
|
+function questionnared(c) {
|
|
|
+ if (c > 0) {
|
|
|
+ return '<span style="color: green">是</span>'
|
|
|
+ }
|
|
|
+ return '<span style="color: red">否</span>'
|
|
|
+}
|
|
|
+
|
|
|
+const patTable = ref(null)
|
|
|
+function handleClickPatRow(row) {
|
|
|
+ if (row.patNo === inquiry.patNo && row.times === inquiry.times) {
|
|
|
+ inquiry.patNo = null
|
|
|
+ inquiry.times = null
|
|
|
+ patTable.value.setCurrentRow(null)
|
|
|
+ } else {
|
|
|
+ inquiry.patNo = row.patNo
|
|
|
+ inquiry.times = row.times
|
|
|
+ }
|
|
|
+ fetchAssessments()
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ getAllWards().then((res) => {
|
|
|
+ wardList.value = res;
|
|
|
+ })
|
|
|
+ const m = getOneMonthOffset()
|
|
|
+ dateRange.value[0] = m.start
|
|
|
+ dateRange.value[1] = m.end
|
|
|
+})
|
|
|
|
|
|
const formatDateRange = () => {
|
|
|
if (dateRange.value.length === 2) {
|
|
|
@@ -953,14 +1059,18 @@ const inquiry = reactive({
|
|
|
visitType: 'OUTPATIENT',
|
|
|
start: null,
|
|
|
end: null,
|
|
|
+ ward: null,
|
|
|
pageNum: 1,
|
|
|
pageSize: 30,
|
|
|
+ patNo: null,
|
|
|
+ times: null,
|
|
|
onlyShowUnsatisfied: false
|
|
|
})
|
|
|
|
|
|
const assessments = reactive({
|
|
|
totalSize: 0,
|
|
|
- listV2: []
|
|
|
+ listV2: [],
|
|
|
+ patients: []
|
|
|
})
|
|
|
|
|
|
const showAnalyzeResult = ref(false)
|
|
|
@@ -980,10 +1090,18 @@ const titleOfAnalyze = computed(() => {
|
|
|
const handleVisitTypeChange = () => {
|
|
|
assessments.totalSize = 0
|
|
|
assessments.listV2 = []
|
|
|
+ assessments.patients = []
|
|
|
}
|
|
|
|
|
|
-const fetchAssessments = () => {
|
|
|
+const fetchAssessments = (flag) => {
|
|
|
formatDateRange()
|
|
|
+ if (flag) {
|
|
|
+ inquiry.patNo = null
|
|
|
+ inquiry.times = null
|
|
|
+ getPatInfoList(inquiry).then(res => {
|
|
|
+ assessments.patients = res
|
|
|
+ })
|
|
|
+ }
|
|
|
getQuestionnaireBodies(inquiry).then(res => {
|
|
|
assessments.totalSize = res.totalSize
|
|
|
assessments.listV2 = res.listV2
|
|
|
@@ -1005,7 +1123,6 @@ function beforeShowPatInfo(row) {
|
|
|
const executeAssessmentAnalyse = () => {
|
|
|
formatDateRange()
|
|
|
assessmentsAnalyseV2(inquiry).then(res => {
|
|
|
- console.log(res)
|
|
|
analyzeResult.value = res
|
|
|
showAnalyzeResult.value = true
|
|
|
})
|
|
|
@@ -1042,55 +1159,71 @@ const changeAssessmentStatus = (row, deleted) => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-const exportExcel = () => {
|
|
|
+const exportExcel = (flag) => {
|
|
|
let fields;
|
|
|
- if (inquiry.visitType === 'INPATIENT') {
|
|
|
- fields = {
|
|
|
- patientId: '门诊号',
|
|
|
- inpatientNo: '住院号',
|
|
|
- deptName: '出院科室',
|
|
|
- zykshl: '住院科室护理人员',
|
|
|
- zyksys: '住院科室医生',
|
|
|
- yyst: '医院食堂',
|
|
|
- yjk: '药剂科',
|
|
|
- fsk: '放射科',
|
|
|
- csyxk: '超声影像科',
|
|
|
- jyk: '检验科',
|
|
|
- sfck: '收费窗口',
|
|
|
- ybk: '医保科',
|
|
|
- yyhjws: '医院环境卫生',
|
|
|
- mzyh: '门诊医护',
|
|
|
- jzyh: '急诊医护',
|
|
|
- xzwyyy: '选择我院的原因',
|
|
|
- sfhxzzl: '是否会再次选择我院',
|
|
|
- ztpj: '整体评价(1-10分)',
|
|
|
- zmydyshs: '最满意的医生护士',
|
|
|
- dwydjyhyj: '建议与意见'
|
|
|
- };
|
|
|
+ if (flag === 1) {
|
|
|
+ if (inquiry.visitType === 'INPATIENT') {
|
|
|
+ fields = {
|
|
|
+ patientId: '门诊号',
|
|
|
+ inpatientNo: '住院号',
|
|
|
+ deptName: '出院科室',
|
|
|
+ zykshl: '住院科室护理人员',
|
|
|
+ zyksys: '住院科室医生',
|
|
|
+ yyst: '医院食堂',
|
|
|
+ yjk: '药剂科',
|
|
|
+ fsk: '放射科',
|
|
|
+ csyxk: '超声影像科',
|
|
|
+ jyk: '检验科',
|
|
|
+ sfck: '收费窗口',
|
|
|
+ ybk: '医保科',
|
|
|
+ yyhjws: '医院环境卫生',
|
|
|
+ mzyh: '门诊医护',
|
|
|
+ jzyh: '急诊医护',
|
|
|
+ xzwyyy: '选择我院的原因',
|
|
|
+ sfhxzzl: '是否会再次选择我院',
|
|
|
+ ztpj: '整体评价(1-10分)',
|
|
|
+ zmydyshs: '最满意的医生护士',
|
|
|
+ dwydjyhyj: '建议与意见'
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ fields = {
|
|
|
+ patientId: '门诊号',
|
|
|
+ deptName: '就诊科室',
|
|
|
+ mjzdzjhl: '门急诊导诊及护理',
|
|
|
+ mjzys: '门急诊医生',
|
|
|
+ yjk: '药剂科',
|
|
|
+ fsk: '放射科',
|
|
|
+ csyxk: '超声影像科',
|
|
|
+ jyk: '检验科',
|
|
|
+ sfck: '收费窗口',
|
|
|
+ ybk: '医保科',
|
|
|
+ yyhjws: '医院环境卫生',
|
|
|
+ xzwyyy: '选择我院的原因',
|
|
|
+ sfhxzzl: '是否会再次选择我院',
|
|
|
+ ztpj: '整体评价(1-10分)',
|
|
|
+ zmydyshs: '最满意的医生护士',
|
|
|
+ dwydjyhyj: '建议与意见'
|
|
|
+ };
|
|
|
+ }
|
|
|
+ formatDateRange();
|
|
|
+ getAllQuestionnaireBodies(inquiry).then(res => {
|
|
|
+ Export(res, fields, titleOfAnalyze.value)
|
|
|
+ })
|
|
|
} else {
|
|
|
+ if (assessments.patients.length === 0) {
|
|
|
+ xcMessage.error('没有可以导出的患者数据。')
|
|
|
+ return
|
|
|
+ }
|
|
|
fields = {
|
|
|
- patientId: '门诊号',
|
|
|
- deptName: '就诊科室',
|
|
|
- mjzdzjhl: '门急诊导诊及护理',
|
|
|
- mjzys: '门急诊医生',
|
|
|
- yjk: '药剂科',
|
|
|
- fsk: '放射科',
|
|
|
- csyxk: '超声影像科',
|
|
|
- jyk: '检验科',
|
|
|
- sfck: '收费窗口',
|
|
|
- ybk: '医保科',
|
|
|
- yyhjws: '医院环境卫生',
|
|
|
- xzwyyy: '选择我院的原因',
|
|
|
- sfhxzzl: '是否会再次选择我院',
|
|
|
- ztpj: '整体评价(1-10分)',
|
|
|
- zmydyshs: '最满意的医生护士',
|
|
|
- dwydjyhyj: '建议与意见'
|
|
|
+ patNo: '住院号',
|
|
|
+ times: '住院次数',
|
|
|
+ patName: '患者姓名',
|
|
|
+ disdate: '出院日期',
|
|
|
+ disdept: '出院病区',
|
|
|
+ countDes: '是否已填问卷',
|
|
|
};
|
|
|
+ Export(assessments.patients, fields, '住院问卷患者填写情况')
|
|
|
}
|
|
|
- formatDateRange();
|
|
|
- getAllQuestionnaireBodies(inquiry).then(res => {
|
|
|
- Export(res, fields, titleOfAnalyze.value)
|
|
|
- })
|
|
|
}
|
|
|
|
|
|
</script>
|