484 lines
13 KiB
Vue
484 lines
13 KiB
Vue
<template>
|
||
<div class="header">
|
||
<div class="topheader">
|
||
<div style="float: right;height:0;">
|
||
<el-button style="margin: 10px 10px 0 0;" @click="goback">返回</el-button>
|
||
</div>
|
||
<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>问卷总分:{{ questiondata.questionnaireTotalScore }}</div>
|
||
<div style="width: 50%">问卷得分:{{ questiondata.totalScore }}</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";
|
||
}
|
||
},
|
||
goback() {
|
||
this.$store.dispatch('tagsView/delView', this.$route).then(({ visitedViews }) => {
|
||
this.$router.push({
|
||
path: "/satisfactionSurvey/satisfactionSurvey",
|
||
});
|
||
})
|
||
},
|
||
},
|
||
};
|
||
</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: 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;
|
||
|
||
.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>
|