This commit is contained in:
2024-04-15 15:46:17 +08:00
parent 21d426b1e5
commit af880a9876
3 changed files with 520 additions and 18 deletions

View File

@ -0,0 +1,9 @@
import request from '@/utils/request'
export function selectQuestionnaireResult(patientQuestionSubmitResultId) {
return request({
url: `/system/patientQuestionSubmitResult/selectQuestionnaireResult?patientQuestionSubmitResultId=${patientQuestionSubmitResultId}`,
method: 'get',
})
}

View File

@ -0,0 +1,473 @@
<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" style="color: #00e06e; border-color: #00e06e"
v-if="list.patientSource == 'WE_CHAT_OFFICIAL_ACCOUNT'">
<img src="../../../assets/manage/gzh.png" alt="" style="width: 24px" />
<div>公众号</div>
</div>
<div class="item" style="color: #339de5; border-color: #339de5" v-if="list.patientSource == 'WE_CHAT_APPLET'">
<img src="../../../assets/manage/xcx.png" alt="" />
<div>小程序</div>
</div>
<div class="item" style="color: #f4881f; border-color: #f4881f" v-if="list.patientSource == 'MANAGE_END'">
<img src="../../../assets/manage/gld.png" alt="" />
<div>管理端</div>
</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>身份证号{{ list.cardNo }}</div>
<div style="width: 50%">住址{{ list.address }}</div>
</div> -->
</div>
</div>
<div class="bottomheader">
<!-- 问卷模板 -->
<div class="right">
<div class="words" v-for="(item, index) in questiondata.subjectResultList" :key="index">
{{ index + 1 }}.{{ item.questionName }}
<span v-if="item.questionType == 'MULTIPLE_CHOICE'">单选题</span>
<span v-if="item.questionType == 'MULTIPLE_CHOICE_QUESTIONS'">多选题</span>
<span v-if="item.questionType == 'SCORING_QUESTIONS'">打分题</span>
<span v-if="item.questionType == 'COMBINATION_RADIO_SUBJECT'">组合单选题</span>
<span v-if="item.questionType == 'COMBINATION_MULTIPLE_SUBJECT'">组合多选题</span>
<span v-if="item.questionType == 'COMBINATION_BLANKS_SUBJECT'">组合填空题</span>
<span v-if="item.questionType == 'FILL_IN_THE_BLANKS'">填空题</span>
<span v-if="item.questionType == 'COMBINATION_SCORING_SUBJECT'">组合打分题</span>
<span v-if="item.questionType == 'DATE_BLANKS_SUBJECT'">日期填空题</span>
<span v-if="item.questionType == 'TIME_BLANKS_SUBJECT'">时间填空题</span>
<el-radio-group v-if="item.questionType == 'MULTIPLE_CHOICE' ||
item.questionType == 'COMBINATION_RADIO_SUBJECT' ||
item.questionType == 'SCORING_QUESTIONS' ||
item.questionType == 'COMBINATION_SCORING_SUBJECT'
" v-model="item.checked" class="custom-radio-group" @change="radioGroupChange($event, item)">
<el-radio disabled class="custom" v-for="(aitem, aindex) in item.optionResults" :key="aindex"
:label="aitem.id" @change="radioChange($event, aitem, index)">{{ aitem.optionName }}</el-radio>
</el-radio-group>
<!-- 多选组合多选 -->
<el-checkbox-group v-model="checkeddata" @change="radioGroupChange($event, item, 'checkbox')" v-if="item.questionType == 'MULTIPLE_CHOICE_QUESTIONS' ||
item.questionType == 'COMBINATION_MULTIPLE_SUBJECT'
">
<el-checkbox disabled v-for="(aitem, aindex) in item.optionResults" :key="aindex" :label="aitem.id"
@change="radioChangecheck($event, aitem, index, aindex)">{{ aitem.optionName }}</el-checkbox>
</el-checkbox-group>
<!-- 填空题组合填空 -->
<div v-if="item.questionType == 'FILL_IN_THE_BLANKS' ||
item.questionType == 'COMBINATION_BLANKS_SUBJECT'
" class="tk">
<el-input disabled v-model="item.fillBlanksAnswer" placeholder="请输入答案" type="textarea" />
<!-- <el-input></el-input> -->
</div>
<!-- 日期填空题 -->
<div v-if="item.questionType == 'DATE_BLANKS_SUBJECT'" style="margin: 20px 0 10px 30px">
<el-date-picker disabled @change="timepicker($event, index)" clearable v-model="item.fillBlanksAnswer"
type="date" value-format="yyyy-MM-dd" placeholder="选择日期">
</el-date-picker>
</div>
<!-- 时间填空题 -->
<div style="margin: 20px 0 10px 30px" v-if="item.questionType == 'TIME_BLANKS_SUBJECT'">
<el-time-select disabled @change="timepickerselect($event, index)" clearable v-model="item.fillBlanksAnswer"
:picker-options="{
start: '08:30',
step: '00:30',
end: '23:30',
}" placeholder="选择时间">
</el-time-select>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import {
selectQuestionnaireResult
} from "@/api/system/SatisfactionQuestionnaireDetails";
export default {
name: "SatisfactionQuestionnaireDetails",
data() {
return {
checkeddata: [],
formlists: {},
baseUrl: process.env.VUE_APP_BASE_API,
radio: "1",
activeName: "first",
id: "",
list: [],
questiondata: {
totalScore: 0, //
routeHandlePerson: null,
routeHandleId: null,
},
formview: [],
//
formlist: {},
materialsFilePath: "",
materialsType: "",
// rules: {
// routeHandleRemark: [
// { required: true, message: "", trigger: "change" },
// ],
// },
};
},
created() {
this.list = this.$route.query
this.selectlist();
},
methods: {
// 访
selectlist() {
selectQuestionnaireResult(this.$route.query.patientQuestionSubmitResultId).then((res) => {
this.questiondata = res.data;
if (this.$route.query.routeHandleRemark) {
this.questiondata.routeHandleRemark =
this.$route.query.routeHandleRemark;
}
this.questiondata.subjectResultList.forEach((e) => {
e.optionResults.forEach((el) => {
// console.log(el, "el");
if (
(el.optionChooseSign == "0" &&
e.questionType == "MULTIPLE_CHOICE") ||
e.questionType == "COMBINATION_RADIO_SUBJECT"
) {
e.checked = el.id;
} else if (
el.optionChooseSign == "0" &&
e.questionType == "MULTIPLE_CHOICE_QUESTIONS"
) {
this.checkeddata.push(el.id);
} else if (
el.optionChooseSign == "0" &&
e.questionType == "SCORING_QUESTIONS"
) {
e.checked = el.id;
} else if (
e.questionType == "COMBINATION_MULTIPLE_SUBJECT" &&
el.optionChooseSign == "0"
) {
this.checkeddata.push(el.id);
}
});
});
});
},
//
timepicker(e, index) {
this.questiondata.questionSubjectList[index].optionAnswer = e;
},
//
timepickerselect(e, index) {
console.log(e);
this.questiondata.questionSubjectList[index].optionAnswer = e;
},
radioGroupChange(e, item) { },
// radio
radioChange(e, item, index) {
console.log(e, item, index, "选中某个单选框时");
this.questiondata.questionSubjectList[
index
].questionSubjectOptionList.forEach((el) => {
if (el.id == item.id) {
el.optionChooseSign = "0";
} else {
el.optionChooseSign = "1";
}
});
},
//
radioChangecheck(e, item, index, aindex) {
console.log(e, item, index, "选中某个复选框时");
if (e == true) {
this.questiondata.questionSubjectList[index].questionSubjectOptionList[
aindex
].optionChooseSign = "0";
} else {
this.questiondata.questionSubjectList[index].questionSubjectOptionList[
aindex
].optionChooseSign = "1";
}
},
},
};
</script>
<style lang="scss" scoped>
.tk {
::v-deep .el-textarea__inner {
margin: 20px 0 10px 30px;
}
}
::v-deep .el-radio {
padding: 10px;
}
::v-deep .el-checkbox-group {
display: flex;
flex-direction: column;
padding: 10px 0px 10px 24px;
}
::v-deep .el-checkbox {
padding: 10px 0 10px 0px;
// padding: 10px;
}
.custom-radio-group {
display: flex;
flex-direction: column;
padding: 10px 0 10px 10px;
.custom {
padding: 10px 0 10px 10px;
}
}
.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: 600px;
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;
}
video {
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: 100%;
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 {
overflow: auto;
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: 55px;
.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;
.item {
line-height: 30px;
font-size: 14px;
margin-left: 20px;
border: 1px solid #c7c7c7;
width: 100px;
border-radius: 5px;
justify-content: center;
height: 30px;
display: flex;
align-items: center;
img {
margin-right: 10px;
width: 20px;
height: 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>

View File

@ -22,7 +22,6 @@
<el-table-column label="序号" type="index" width="55" align="center" />
<el-table-column label="患者姓名" align="center" prop="patientName" />
<el-table-column label="患者电话" align="center" prop="patientPhone" width='120' />
<el-table-column label="家属电话" align="center" prop="familyMemberPhone" width='120' />
<el-table-column label="出生日期" align="center" prop="birthDate" width='130' />
<el-table-column label="身份证号" align="center" prop="cardNo" width='130' />
<el-table-column label="性别" align="center" prop="sex">
@ -32,7 +31,6 @@
</template>
</el-table-column>
<el-table-column label="年龄" align="center" prop="age" />
<el-table-column label="住址" align="center" prop="address" />
<el-table-column label="患者类型" align="center" prop="visitDate" width='130'>
<template slot-scope="scope">
<dict-tag :options="dict.type.patient_type" :value="scope.row.patientType" />
@ -40,7 +38,10 @@
</el-table-column>
<el-table-column label="签约状态" align="center" prop="signStatus" width='130'>
<template slot-scope="scope">
<dict-tag :options="dict.type.sign_status" :value="scope.row.signStatus" />
<!-- <dict-tag :options="dict.type.sign_status" :value="scope.row.signStatus" /> -->
{{ scope.row.signStatus == 'UN_SIGN' ? '未签约' : '' }}
{{ scope.row.signStatus == 'IN_SIGN' ? '在签' : '' }}
{{ scope.row.signStatus == 'SEPARATE_SIGN' ? '解约' : '' }}
</template>
</el-table-column>
<el-table-column label="服务状态" align="center" prop="serviceStatus" width='130'>
@ -50,27 +51,23 @@
{{ scope.row.serviceStatus == 'SERVICE_END' ? '服务结束' : '' }}
</template>
</el-table-column>
<el-table-column label="签约时间" align="center" prop="signTime" width='130'>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.signTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="就诊方式" align="center" prop="visitMethod">
<template slot-scope="scope">
<dict-tag :options="dict.type.visit_method" :value="scope.row.visitMethod" />
</template>
</el-table-column>
<el-table-column label="主治医生" align="center" prop="attendingPhysicianName" />
<el-table-column label="诊断" align="center" prop="mainDiagnosis" />
<el-table-column label="医院" align="center" prop="hospitalAgencyName" width='130' />
<el-table-column label="院区" align="center" prop="campusAgencyName" width='130' />
<el-table-column label="科室名称" align="center" prop="departmentName" width='130' />
<el-table-column label="病区名称" align="center" prop="wardName" width='130' />
<el-table-column label="患者健康状况" align="center" prop="patientSource">
<el-table-column label="患者健康状况" align="center" prop="patientHealthState">
<template slot-scope="scope">
{{ scope.row.serviceStatus == 'ABNORMAL' ? '异常' : '' }}
{{ scope.row.serviceStatus == 'GOOD' ? '良好' : '' }}
{{ scope.row.serviceStatus == 'BLACKLIST' ? '黑名单' : '' }}
{{ scope.row.patientHealthState == 'ABNORMAL' ? '异常' : '' }}
{{ scope.row.patientHealthState == 'GOOD' ? '良好' : '' }}
{{ scope.row.patientHealthState == 'BLACKLIST' ? '黑名单' : '' }}
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="200">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="goQuestionnaireDetails(scope.row)">满意度问卷详情</el-button>
</template>
</el-table-column>
</el-table>
@ -111,14 +108,37 @@ export default {
this.loading = true;
this.queryParams.params = {};
satisfactionSurvey(this.queryParams).then(response => {
response.data.forEach(e => {
response.rows.forEach(e => {
e.birthDate ? e.age = getAge(e.birthDate) : ''
})
this.patientInfoList = response.data;
this.patientInfoList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
goQuestionnaireDetails(row) {
this.$router.push({
path: "/satisfactionSurvey/SatisfactionQuestionnaireDetails",
query: {
patientQuestionSubmitResultId: row.patientQuestionSubmitResultId,
taskContent: row.taskContent,
taskType: row.taskType,
templateId: row.templateId,
cardNo: row.cardNo,
patientName: row.patientName,
patientPhone: row.patientPhone,
sex: row.sex,
routeHandleRemark: row.routeHandleRemark,
textRemindContent: row.textRemindContent,
birthDate: row.birthDate,
address: row.address,
patientSource: row.patientSource,
createTime: row.createTime,
age: row.birthDate ? getAge(row.birthDate) : "",
},
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;