postdischarge-ui/src/views/manage/Satisfactionsurvey/index.vue
2024-12-17 11:50:20 +08:00

492 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container" ref="layout">
<div ref="topform" class="form">
<SearchFilter
labelWidth="100px"
:labelWidths="310"
size="small"
@search="handleQuery"
@reset="resetQuery"
@minShowCtrol="getMaxTableHeight"
:query="query"
v-show="showSearch"
>
<el-form-item label="患者姓名" prop="patientName">
<el-input
v-model="queryParams.patientName"
placeholder="请输入患者姓名"
clearable
@keyup.enter.native="handleQuery"
style="width: 220px"
/>
</el-form-item>
<el-form-item label="患者电话" prop="patientPhone">
<el-input
v-model="queryParams.patientPhone"
placeholder="请输入患者电话"
clearable
@keyup.enter.native="handleQuery"
style="width: 220px"
/>
</el-form-item>
<el-form-item label="外呼时间" prop="startTime">
<el-date-picker
v-model="dischargeTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
style="width: 220px"
value-format="yyyy-MM-dd"
end-placeholder="结束日期"
@change="changeTime"
>
</el-date-picker>
</el-form-item>
<el-form-item label="问卷名称" prop="questionnaireName">
<el-select
v-model="queryParams.questionInfoId"
placeholder="请选择问卷名称"
clearable
style="width: 220px"
>
<el-option
v-for="item in questionnaireList"
:key="item.id"
:label="item.questionnaireName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="任务节点类型" prop="taskNodeType">
<el-select
v-model="queryParams.taskNodeType"
placeholder="请选择任务节点类型"
clearable
style="width: 220px"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="医院" prop="hospitalAgencyId">
<el-select
v-model="queryParams.hospitalAgencyId"
filterable
placeholder="请选择医院"
style="width: 220px"
clearable
@clear="clearhospitalAgency"
@change="changehospitalAgency"
>
<el-option
v-for="item in hospitalAgencylist"
:key="item.id"
:label="item.agencyName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="科室" prop="departmentId">
<el-select
v-model="queryParams.departmentId"
filterable
placeholder="请选择科室"
style="width: 220px"
clearable
@clear="cleardepartment"
@change="changedepartment"
>
<el-option
v-for="item in departmentlist"
:key="item.id"
:label="item.departmentName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
</SearchFilter>
</div>
<div ref="table">
<el-table
:max-height="maxTableHeight"
v-loading="loading"
:data="patientInfoList"
@selection-change="handleSelectionChange"
>
<!-- <el-table-column type="selection" width="55" /> -->
<el-table-column label="序号" type="index" width="48" align="center" />
<el-table-column label="患者姓名" align="center" prop="patientName" />
<el-table-column label="患者电话" align="center" prop="patientPhone" />
<el-table-column
label="路径名称"
align="center"
prop="manageRouteName"
/>
<el-table-column
label="问卷模板名称"
align="center"
prop="questionnaireName"
/>
<el-table-column
label="话术名称"
align="center"
prop="scriptTemplateName"
/>
<el-table-column
label="医院"
align="center"
prop="hospitalAgencyName"
/>
<el-table-column
label="科室名称"
align="center"
prop="departmentName"
/>
<el-table-column
label="节点任务执行状态"
align="center"
prop="nodeExecuteStatus"
width="150"
>
<template slot-scope="scope">
{{ scope.row.nodeExecuteStatus == "EXECUTED" ? "已执行" : "" }}
{{ scope.row.nodeExecuteStatus == "UNEXECUTED" ? "未执行" : "" }}
</template>
</el-table-column>
<el-table-column
label="就诊时间"
align="center"
prop="visitDate"
width="150"
/>
<el-table-column
label="执行时间"
align="center"
prop="nodePlanTime"
width="150"
/>
<el-table-column label="调查结果" align="center" prop="contentedFlag" />
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="handdatile(scope.row)">详情</el-button>
</template>
</el-table-column> -->
</el-table>
</div>
<!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" @pagination="getList" /> -->
<myPagination
v-show="total > 0"
:total="total"
:pageSize="queryParams.pageSize"
:indexFromWrap="queryParams.pageNum"
@updateCPage="updateCPage"
></myPagination>
</div>
</template>
<script>
import { uploadRobotPublishRecord, selectQuestionInfoList } from "@/api/manage/Satisfactionsurvey"
import SearchFilter from "../../components/SearchForm.vue";
import { getAgencyList, selectAgencyList, } from "@/api/manage/selectAgencyList";
export default {
name: "visitout",
components: { SearchFilter },
data() {
return {
maxTableHeight: undefined,
query: {
pageNum: 1,
pageSize: 10,
},
// 问卷名称
questionnaireList: [],
//医院list
hospitalAgencylist: [],
// 院区list
campusAgencylist: [],
//科室list
departmentlist: [],
//病区list
wardlist: [],
//导入
fileList: [],
// 遮罩层
loading: true,
// 选中数组
ids: [],
patientVisitRecordId: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 表格数据
patientInfoList: [],
// 弹出层标题
// 是否显示弹出层
uploadopen: false,
// 查询参数
dischargeTime: [],// 初始化为默认日期范围
queryParams: {
pageNum: 1,
pageSize: 10,
startTime: null,
endTime: null,
questionnaireName: null,
taskNodeType: null,
patientName: null,
patientPhone: null,
hospitalAgencyId: null,
departmentId: null,
questionInfoId: null,
},
show: false,
options: [{
value: 'PHONE_OUTBOUND',
label: '电话外呼'
}, {
value: 'QUESTIONNAIRE_SCALE',
label: '问卷量表'
}],
// 表单参数
form: {},
// 表单校验
rules: {},
};
},
created() {
this.selectAgencyinfo();
this.getDefaultDateRange()
this.getList();
this.getQuestion();
console.log(this.queryParams, 'queryParams11111111')
},
mounted() {
this.getMaxTableHeight();
this.screenChange();
},
methods: {
updateCPage(index, size) {
this.queryParams.pageNum = index;
this.queryParams.pageSize = size;
this.getList();
},
changeTime(e) {
this.show = false;
},
getDefaultDateRange() {
this.show = true;
const endDate = new Date(); // 今天的日期
const startDate = new Date();
startDate.setDate(endDate.getDate() - 6); // 往前倒退七天
console.log(startDate, endDate);
this.dischargeTime[0] = startDate;
this.dischargeTime[1] = endDate;
console.log(this.dischargeTime, 'dischargeTime')
this.queryParams.startTime = this.formatDate(this.dischargeTime[0]);
this.queryParams.endTime = this.formatDate(this.dischargeTime[1]);
console.log(this.queryParams, 'queryParams')
},
formatDate(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始需要加1
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
},
getQuestion() {
selectQuestionInfoList().then(response => {
this.questionnaireList = response
})
},
/** 查询患者信息列表 */
getList() {
this.loading = true;
uploadRobotPublishRecord(this.queryParams).then((response) => {
// response.rows.forEach((e) => {
// e.birthDate ? (e.age = getAge(e.birthDate)) : e.age;
// });
this.patientInfoList = response.rows;
this.total = response.total;
this.loading = false;
});
},
/** 搜索按钮操作 */
handleQuery() {
if (this.dischargeTime?.length > 0) {
if (this.show == true) {
this.queryParams.startTime = this.formatDate(this.dischargeTime[0]);
this.queryParams.endTime = this.formatDate(this.dischargeTime[1]);
} else if (this.show == false) {
this.queryParams.startTime = this.dischargeTime[0];
this.queryParams.endTime = this.dischargeTime[1];
}
}
else {
this.queryParams.startTime = null;
this.queryParams.endTime = null;
}
this.queryParams.pageNum = 1;
this.query = this.queryParams
console.log(this.queryParams, 'this.queryPara1111111111ms')
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
};
this.dischargeTime = [];
this.queryParams.startTime = "";
this.queryParams.endTime = "";
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.patientVisitRecordIds = selection.map(
(item) => item.patientVisitRecordId
);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
//清空科室
cleardepartment() {
this.queryParams.wardId = null;
if (this.queryParams.departmentId) {
this.getAgencyListinfo("DEPARTMENT", this.queryParams.departmentId);
} else if (this.queryParams.campusAgencyId) {
this.getAgencyListinfo("CAMPUS", this.queryParams.campusAgencyId);
} else if (this.queryParams.hospitalAgencyId) {
this.getAgencyListinfo("HOSPITAL", this.queryParams.hospitalAgencyId);
}
},
//选中科室获取病区
changedepartment(id) {
this.getAgencyListinfo("DEPARTMENT", id);
// let query = {
// nodeType: 'WARD',
// parentDepartmentId: id,
// }
// getDepartmentList(query).then(res => {
// this.wardlist = res.data
this.queryParams.wardId = null;
// })
},
//选中医院获取院区
changehospitalAgency(id) {
this.getAgencyListinfo("HOSPITAL", id);
this.queryParams.departmentId = null;
// })
},
//清空医院
clearhospitalAgency() {
this.queryParams.departmentId = null;
setTimeout(() => {
this.attendingPhysicianlist = [];
}, 1000);
},
//获取下级单位
getAgencyListinfo(nodeType, id) {
let query = {
nodeType: nodeType,
};
if (nodeType == "HOSPITAL") {
query.hospitalId = id;
} else if (nodeType == "CAMPUS") {
query.campusId = id;
} else if (nodeType == "DEPARTMENT") {
query.departmentId = id;
}
getAgencyList(query).then((res) => {
if (nodeType == "HOSPITAL") {
this.campusAgencylist = res.data.campusList;
this.departmentlist = res.data.departmentList;
} else if (nodeType == "CAMPUS") {
this.departmentlist = res.data.departmentList;
}
this.wardlist = res.data.wardList;
});
},
selectAgencyinfo() {
let query = {
agencyStatus: "ON",
nodeType: "HOSPITAL",
};
selectAgencyList(query).then((res) => {
this.hospitalAgencylist = res.data;
if (this.hospitalAgencylist.length == 1) {
this.queryParams.hospitalAgencyId = this.hospitalAgencylist[0].id
this.getAgencyListinfo("HOSPITAL", this.hospitalAgencylist[0].id);
}
});
},
// 详情
handdatile(row) {
},
// 获取表格最高高度
getMaxTableHeight() {
const windowInnerHeight = window.innerHeight; // 屏幕可视高度
const layoutDiv = this.$refs.layout;
const formDiv = this.$refs.topform;
const mb8Div = this.$refs.mb8;
this.maxTableHeight =
windowInnerHeight -
134 -
this.getBoxPadding(layoutDiv) -
this.getBoxHeight(mb8Div) -
this.getBoxHeight(formDiv);
},
// 屏幕resize监听
screenChange() {
// 屏幕resize监听事件一旦屏幕宽高发生变化就会执行resize
window.addEventListener("resize", this.getMaxTableHeight, true);
// 将屏幕监听事件移除
// 这步是必须的。离开页面时不移除,再返回,或者进入到别的有相同元素的页面会报错
// 或者将这里的方法直接写在beforeDestroy函数中也可以
this.$once("hook:beforeDestroy", () => {
window.removeEventListener("resize", this.getMaxTableHeight, true);
});
},
},
};
</script>
<style lang="scss" scoped>
.titlenew {
font-size: 16px;
font-weight: 600;
height: 60px;
margin-left: 20px;
}
::v-deep .el-table__fixed-right::before {
height: 0px !important;
}
</style>