Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
2024-04-03 13:38:31 +08:00
commit 06989d5888
4 changed files with 1042 additions and 2 deletions

View File

@ -0,0 +1,8 @@
import request from '@/utils/request'
export function manualFollowUpList(query) {
return request({
url: '/manage/signroute/manualFollowUpList',
method: 'get',
params: query
})
}

View File

@ -19,7 +19,7 @@
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item label="素材状态" prop="materialsStatus">
<!-- <el-form-item label="素材状态" prop="materialsStatus">
<el-select
v-model="queryParams.materialsStatus"
placeholder="请选择素材状态"
@ -32,7 +32,7 @@
>
</el-option>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="素材名称" prop="materialsName">
<el-input
v-model="queryParams.materialsName"

View File

@ -0,0 +1,706 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
>
<el-form-item label="随访时间" prop="startDate">
<el-date-picker
v-model="intentionalTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
style="width: 300px"
value-format="yyyy-MM-dd"
end-placeholder="结束日期"
@change="chooseTime"
>
</el-date-picker>
</el-form-item>
<el-form-item label="姓名" prop="patientName">
<el-input
v-model="queryParams.patientName"
placeholder="请输入就诊流水号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="电话" prop="patientPhone">
<el-input
v-model="queryParams.patientPhone"
placeholder="请输入电话"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="医院" prop="hospitalAgencyId">
<el-select
v-model="queryParams.hospitalAgencyId"
filterable
placeholder="请选择医院"
style="width: 200px"
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="campusAgencyId"
v-if="queryParams.hospitalAgencyId"
>
<el-select
v-model="queryParams.campusAgencyId"
filterable
placeholder="请选择院区"
style="width: 200px"
clearable
@clear="clearcampusAgency"
@change="changecampusAgency"
>
<el-option
v-for="item in campusAgencylist"
:key="item.id"
:label="item.agencyName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label="科室"
prop="departmentId"
v-if="queryParams.hospitalAgencyId"
>
<el-select
v-model="queryParams.departmentId"
filterable
placeholder="请选择科室"
style="width: 200px"
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>
<el-form-item
label="病区"
prop="wardId"
v-if="queryParams.hospitalAgencyId"
>
<el-select
v-model="queryParams.wardId"
filterable
placeholder="请选择病区"
style="width: 200px"
clearable
>
<el-option
v-for="item in wardlist"
:key="item.id"
:label="item.departmentName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="就诊类型" prop="visitMethod">
<el-select
v-model="queryParams.visitMethod"
placeholder="请选择就诊类型"
clearable
>
<el-option
v-for="dict in dict.type.visit_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="就诊流水号" prop="visitSerialNumber">
<el-input
v-model="queryParams.visitSerialNumber"
placeholder="请输入就诊流水号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="门诊/出院时间" prop="intentionalTimeStart">
<el-date-picker
@change="mzchange"
v-model="mzTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
style="width: 300px"
value-format="yyyy-MM-dd"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item label="入院时间" prop="intentionalTimeStart">
<el-date-picker
v-model="ryTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
style="width: 300px"
value-format="yyyy-MM-dd"
end-placeholder="结束日期"
@change="rychange"
>
</el-date-picker>
</el-form-item>
<el-form-item label="诊断" prop="mainDiagnosis">
<el-input
v-model="queryParams.mainDiagnosis"
placeholder="请选择诊断"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item
label="主治医生"
prop="attendingPhysicianId"
v-if="queryParams.hospitalAgencyId"
>
<el-select
v-model="queryParams.attendingPhysicianId"
style="width: 200px"
filterable
placeholder="请选择主治医生"
clearable
>
<el-option
v-for="item in attendingPhysicianlist"
:key="item.userId"
:label="item.nickName"
:value="item.userId"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-form>
<el-table
v-loading="loading"
:data="taskExecuteRecordList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" 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="visitSerialNumber">
<template slot-scope="scope">
{{ scope.row.sex == "MALE" ? "男" : "" }}
{{ scope.row.sex == "FEMALE" ? "女" : "" }}
</template>
</el-table-column>
<el-table-column label="医院" align="center" prop="hospitalAgencyName" />
<el-table-column label="院区" align="center" prop="campusAgencyName" />
<el-table-column label="科室名称" align="center" prop="departmentName" />
<el-table-column label="病区名称" align="center" prop="wardName" />
<el-table-column
label="门诊/住院号"
align="center"
prop="inHospitalNumber"
width="100"
/>
<el-table-column
label="就诊流水号"
align="center"
prop="visitSerialNumber"
width="100"
/>
<el-table-column label="诊断" align="center" prop="mainDiagnosis" />
<el-table-column label="手术名称" align="center" prop="surgicalName" />
<el-table-column
label="主治医生"
align="center"
prop="attendingPhysicianName"
/>
<el-table-column label="就诊类型" align="center" prop="visitMethod">
<template slot-scope="scope">
<span
>{{ scope.row.visitMethod == "OUTPATIENT_SERVICE" ? "门诊" : "" }}
{{ scope.row.visitMethod == "BE_HOSPITALIZED" ? "住院" : "" }}
</span>
</template></el-table-column
>
<el-table-column
label="入院时间"
align="center"
prop="admissionTime"
width="180"
>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.admissionTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column
label="门诊/出院时间"
align="center"
prop="visitOrDischargeTime"
width="180"
>
<template slot-scope="scope">
<span>{{
parseTime(scope.row.visitOrDischargeTime, "{y}-{m}-{d}")
}}</span>
</template>
</el-table-column>
<el-table-column
label="随访时间"
align="center"
prop="executeTime"
width="180"
>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.executeTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column label="随访模板" align="center" prop="templateName">
</el-table-column>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
fixed="right"
>
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-notebook-2"
@click="handleUpdate(scope.row)"
>处理</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
import { manualFollowUpList } from "@/api/system/followup"
import { usergetList } from "@/api/unitconfig/patientConfiguration";
import { getAge } from "@/utils/age";
import {
selectAgencyList, getAgencyList
} from "@/api/manage/selectAgencyList";
export default {
name: "TaskExecuteRecord",
dicts: ["visit_type"],
data() {
return {
// 访
intentionalTime: [],
//
mzTime: [],
//
ryTime: [],
//list
hospitalAgencylist: [],
// list
campusAgencylist: [],
//list
departmentlist: [],
//list
wardlist: [],
//
attendingPhysicianlist: [],
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
taskExecuteRecordList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
followStartTime: null,
followEndTime: null,
clinicalStartTime: null,
clinicalEndTime: null,
admissionEndTime: null,
admissionStartTime: null,
mainDiagnosis: null,
visitSerialNumber: null,
attendingPhysicianId: null,
patientId: null,
visitMethod: null,
manageRouteId: null,
manageRouteNodeId: null,
patientName: null,
startDate: null,
endDate: null,
manageRouteName: null,
manageRouteNodeName: null,
taskContent: null,
executeTime: null,
executePerson: null,
executeType: null,
executeRemark: null,
hospitalAgencyId: null,
campusAgencyId: null,
departmentId: null,
wardId: null,
},
//
form: {},
//
// rules: {
// patientId: [
// { required: true, message: "id", trigger: "blur" },
// ],
// },
};
},
created() {
this.getList();
this.selectAgencyinfo();
},
methods: {
//
usergetListinfo() {
usergetList({
agencyId: this.queryParams.hospitalAgencyId,
postName: 'DOCTOR'
}).then(res => {
this.attendingPhysicianlist = res.data
})
},
//
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
})
},
//
changehospitalAgency(id) {
this.getAgencyListinfo('HOSPITAL', id)
// let query = {
// agencyStatus: 'ON',
// nodeType: 'CAMPUS',
// parentId: id,
// }
// selectAgencyList(query).then(res => {
// this.campusAgencylist = res.data
this.queryParams.campusAgencyId = null
this.queryParams.departmentId = null
this.queryParams.wardId = null
this.queryParams.attendingPhysicianId = null
// })
//
this.usergetListinfo();
},
//
changecampusAgency(id) {
this.getAgencyListinfo('CAMPUS', id)
// let query = {
// nodeType: 'DEPARTMENT',
// agencyId: id,
// }
// getDepartmentList(query).then(res => {
// this.departmentlist = res.data
this.queryParams.departmentId = null
this.queryParams.wardId = null
// })
},
//
changedepartment(id) {
this.getAgencyListinfo('DEPARTMENT', id)
// let query = {
// nodeType: 'WARD',
// parentDepartmentId: id,
// }
// getDepartmentList(query).then(res => {
// this.wardlist = res.data
this.queryParams.wardId = null
// })
},
//
clearhospitalAgency() {
this.queryParams.campusAgencyId = null
this.queryParams.departmentId = null
this.queryParams.wardId = null
this.queryParams.attendingPhysicianId = null
},
//
clearcampusAgency() {
this.queryParams.departmentId = null
this.queryParams.wardId = null
this.getAgencyListinfo('HOSPITAL', this.queryParams.hospitalAgencyId)
},
//
cleardepartment() {
this.queryParams.wardId = null
this.getAgencyListinfo('CAMPUS', this.queryParams.campusAgencyId)
},
//list
selectAgencyinfo() {
let query = {
agencyStatus: "ON",
nodeType: "HOSPITAL",
};
selectAgencyList(query).then((res) => {
this.hospitalAgencylist = res.data;
});
},
/** 查询患者管理任务执行记录列表 */
getList() {
this.loading = true;
manualFollowUpList(this.queryParams).then((response) => {
this.taskExecuteRecordList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
patientId: null,
manageRouteId: null,
manageRouteNodeId: null,
patientName: null,
manageRouteName: null,
manageRouteNodeName: null,
taskContent: null,
executeTime: null,
executePerson: null,
executeType: null,
executeRemark: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
};
this.resetForm("form");
},
// 访
chooseTime() {
if (this.intentionalTime == null) {
this.intentionalTime = [];
this.queryParams.followStartTime = null
this.queryParams.followEndTime = null
} else {
this.queryParams.followStartTime = this.intentionalTime[0]
this.queryParams.followEndTime = this.intentionalTime[1]
}
},
//
mzchange(){
if (this.mzTime == null) {
this.mzTime = [];
this.queryParams.clinicalStartTime = null
this.queryParams.clinicalEndTime = null
} else {
this.queryParams.clinicalStartTime = this.mzTime[0]
this.queryParams.clinicalEndTime = this.mzTime[1]
}
},
//
rychange(){
if (this.ryTime == null) {
this.ryTime = [];
this.queryParams.admissionStartTime = null
this.queryParams.admissionEndTime = null
} else {
this.queryParams.admissionStartTime = this.ryTime[0]
this.queryParams.admissionEndTime = this.ryTime[1]
}
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
this.intentionalTime = [];
this.mzTime = [];
this.ryTime = [];
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加患者管理任务执行记录";
},
/** 修改按钮操作 */
handleUpdate(row) {
console.log(row)
this.$router.push({
path: "/task/followupsee",
query: {
patientId: row.patientId,
taskContent: row.taskContent,
cardNo: row.cardNo,
patientName: row.patientName,
patientPhone: row.patientPhone,
sex: row.sex,
birthDate: row.birthDate,
familyMemberPhone: row.familyMemberPhone,
address: row.address,
patientSource: row.patientSource,
createTime: row.createTime,
age: row.birthDate ? getAge(row.birthDate) : "",
},
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != null) {
updateTaskExecuteRecord(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addTaskExecuteRecord(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
// handleClick(tab, event) {
// this.intentionalTime = [];
// this.queryParams.startDate = null;
// this.queryParams.endDate = null;
// // this.signTime = []
// // this.queryParams.signTimeStart = null
// // this.queryParams.signTimeEnd = null
// this.getList();
// },
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal
.confirm(
'是否确认删除患者管理任务执行记录编号为"' + ids + '"的数据项?'
)
.then(function () {
return delTaskExecuteRecord(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => { });
},
/** 导出按钮操作 */
handleExport() {
this.download(
"system/taskExecuteRecord/export",
{
...this.queryParams,
},
`taskExecuteRecord_${new Date().getTime()}.xlsx`
);
},
},
};
</script>

View File

@ -0,0 +1,326 @@
<template>
<div class="header">
<div class="topheader">
<div class="user">
<img
class="headsculpture"
src="../../../assets/manage/touxiang.png"
alt=""
v-if="list.sex == 'MALE'"
/>
<img
class="headsculpture"
src="../../../assets/manage/nvtouxiang.png"
alt=""
v-if="list.sex == 'FEMALE'"
/>
<div class="name">
{{ list.patientName }}
</div>
<div class="gender">
{{ list.sex == "MALE" ? "男" : list.sex == "FEMALE" ? "女" : "" }}
</div>
<div class="age">
{{ list.age }}
</div>
<div class="source">
<div class="item" @click="submit"><el-button plain>保存</el-button></div>
<div class="item" @click="cencal"><el-button plain>取消</el-button></div>
</div>
</div>
<div class="information">
<div class="top">
<div>身份证号{{ list.cardNo }}</div>
<div>患者电话{{ list.patientPhone }}</div>
<div style="width: 50%">出生日期{{ list.birthDate }}</div>
</div>
<div class="bottom">
<!-- <div>注册时间{{ $route.query.createTime }}</div> -->
<div>家属电话{{ list.familyMemberPhone }}</div>
<div style="width: 50%">住址{{ list.address }}</div>
</div>
</div>
</div>
<div class="bottomheader">
<div style="display: flex">
<!-- 问卷模板 -->
<div
class="right"
v-if="$route.query.taskContent == 'QUESTIONNAIRE_SCALE'"
>
<div class="sport">问卷模板: Barthel指数评定问卷</div>
<div class="words">
您好!本问卷用于评估日常生活能力请根据自身日常实际表现选择合适的选项
</div>
<div class="words">
1.进食单选题
<el-radio-group v-model="radio" class="custom-radio-group">
<el-radio label="1" class="custom">备选项</el-radio>
<el-radio label="2" class="custom">备选项</el-radio>
<el-radio label="3" class="custom">备选项</el-radio>
</el-radio-group>
</div>
</div>
<!-- 电话外呼 -->
<div v-if="$route.query.taskContent == 'PHONE_OUTBOUND'">
<div class="sport">电话外呼</div>
<div class="nexttime">话术名称</div>
</div>
<!-- 人工随访 -->
<div class="right" v-if="$route.query.taskContent == 'ARTIFICIAL_FOLLOW_UP'">
<div class="sport">人工随访模板: 神经内科人工随访</div>
<div class="words">**您好!</div>
<div class="words">
我是医院的工作人员今天给您打电话想要了解一下您的恢复情况
</div>
<div class="words">
1.进食单选题
<el-radio-group v-model="radio" class="custom-radio-group">
<el-radio label="1" class="custom">备选项</el-radio>
<el-radio label="2" class="custom">备选项</el-radio>
<el-radio label="3" class="custom">备选项</el-radio>
</el-radio-group>
</div>
</div>
<!-- <div v-if="$route.query.taskContent == 'ARTIFICIAL_FOLLOW_UP'">
<div class="sport">人工随访模板:</div>
<div class="sport">人工随访模板内容:</div>
</div> -->
</div>
</div>
</div>
</template>
<script>
import { selectVisitRecord } from "@/api/system/taskExecuteRecord";
export default {
name: "patientdetails",
data() {
return {
radio: "1",
activeName: "first",
id: "",
list: [],
};
},
created() {
console.log(this.$route.query);
this.id = this.$route.query.patientId;
this.info();
},
methods: {
info() {
selectVisitRecord(this.id).then((res) => {
console.log(res);
this.list = res.data;
});
},
//
submit(){},
//
cencal(){
this.$router.push({
path: "/task/followup",
});
},
handleClick(tab, event) {
console.log(tab, event);
},
},
};
</script>
<style lang="scss" scoped>
.custom-radio-group {
display: flex;
flex-direction: column;
padding: 10px 0 10px 10px;
.custom {
padding: 10px 0 10px 10px;
}
}
.bodytop {
position: relative;
top: 20px;
// height: 500px;
width: 400px;
margin: 0 auto;
// background: red;f
overflow: auto;
border: 1px solid #e2e2e2;
.titledata {
margin: 30px 0px 15px 30px;
top: 14px;
font-size: 20px;
}
.audiotop {
margin: 10px 0px 10px 30px;
}
img {
// width: 362px;
// height: 127px;
margin: 0px 0px 0px 30px;
}
.know {
margin: 11px 0px 10px 30px;
font-size: 20px;
font-weight: 550;
}
.knowlist {
margin: 10px 0px 10px 30px;
font-size: 16px;
}
}
.right {
width: 70%;
height: 500px;
// background: yellow;
}
.header {
background-color: #f1f3f5;
padding-top: 10px;
::v-deep .el-tabs__header {
margin: 0 !important;
width: 100%;
// overflow: auto;
// height: 500px;
// background: red;
}
.bottomheader {
width: 99%;
background-color: #fff;
margin: 10px auto;
padding: 10px 20px;
.sport {
padding: 10px 50px 10px 10px;
font-size: 20px;
font-weight: 600;
}
.words {
font-size: 15px;
padding: 10px 50px 10px 10px;
}
.sports {
position: absolute;
left: 50%;
transform: translate(-50%);
font-size: 18px;
font-weight: 600;
}
.word {
font-size: 14px;
font-weight: 550;
padding: 50px 50px 10px 10px;
}
.videoleft {
width: 40%;
height: 200px;
background: red;
}
.time {
font-size: 20px;
font-weight: 550;
padding: 10px 50px 10px 10px;
}
.number {
width: 25px;
height: 25px;
text-align: center;
display: inline-block;
color: white;
background: blue;
border-radius: 50%;
}
.nexttime {
font-size: 15px;
padding: 10px 50px 10px 10px;
}
.images {
width: 53%;
height: 241px;
margin: 0 auto;
background: red;
}
.attention {
font-size: 14px;
font-weight: 550;
padding: 10px 50px 10px 10px;
}
// .videobottom
// {
// font-size: 14px;
// font-weight: 550;
// padding: 10px 50px 10px 10px;
// }
}
.topheader {
width: 99%;
background-color: #fff;
margin: 0 auto;
.information {
display: flex;
flex-wrap: wrap;
padding: 10px 20px;
height: 110px;
.top,
.bottom {
color: #666666;
width: 100%;
display: flex;
div {
width: 25%;
}
}
}
.user {
width: 100%;
padding: 0 20px;
display: flex;
height: 80px;
align-items: center;
line-height: 80px;
.source {
display: flex;
position: relative;
right: 59px;
position: absolute;
.item{
margin-left: 20px;
}
}
.name {
font-size: 20px;
padding-left: 12px;
}
.gender {
padding-left: 10px;
}
.age {
padding-left: 10px;
}
.headsculpture {
border-radius: 50%;
width: 40px;
height: 40px;
}
}
}
}
</style>