问卷得分隐藏

This commit is contained in:
coderxqt 2025-12-23 14:38:18 +08:00
parent 716e2c4d1f
commit 645854a4f1
5 changed files with 2199 additions and 1888 deletions

View File

@ -5,10 +5,11 @@ VUE_APP_TITLE = 新医路院后患者管理平台
ENV = 'development'
# 新医路院后患者管理平台/开发环境
VUE_APP_BASE_API = 'http://192.168.20.37:19090'
# VUE_APP_BASE_API = 'http://192.168.20.37:19090'
# VUE_APP_BASE_API = 'http://8.131.93.145:54011'
# VUE_APP_BASE_API = 'http://192.168.0.95:9090'
# VUE_APP_BASE_API = 'https://1608.xinelu.cn'
VUE_APP_BASE_API = 'http://192.168.124.7:19090'
# 路由懒加载

View File

@ -5,8 +5,9 @@ VUE_APP_TITLE = 新医路院后患者管理平台
ENV = 'production'
# 新医路院后患者管理平台/生产环境
VUE_APP_BASE_API = 'http://192.168.20.37:19090'
# VUE_APP_BASE_API = 'http://192.168.20.37:19090'
# VUE_APP_BASE_API = 'http://8.131.93.145:54011'
# VUE_APP_BASE_API = 'http://192.168.0.95:9090'
# VUE_APP_BASE_API = 'https://1608.xinelu.cn'
VUE_APP_BASE_API = 'http://192.168.124.7:19090'

View File

@ -7,7 +7,8 @@ NODE_ENV = production
ENV = 'staging'
# 新医路院后患者管理平台/测试环境
VUE_APP_BASE_API = 'http://192.168.20.37:19090'
# VUE_APP_BASE_API = 'http://192.168.20.37:19090'
# VUE_APP_BASE_API = 'http://8.131.93.145:54011'
# VUE_APP_BASE_API = 'http://192.168.0.95:9090'
# VUE_APP_BASE_API = 'https://1608.xinelu.cn'
VUE_APP_BASE_API = 'http://192.168.124.7:19090'

View File

@ -1,95 +1,255 @@
<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="queryParams" v-show="showSearch">
<SearchFilter
labelWidth="100px"
:labelWidths="310"
size="small"
@search="handleQuery"
@reset="resetQuery"
@minShowCtrol="getMaxTableHeight"
:query="queryParams"
v-show="showSearch"
>
<el-form-item label="批次" prop="sn">
<span>
<sn @on-template="messageontemplateword" :templateId="queryParams.sn"></sn>
<sn
@on-template="messageontemplateword"
:templateId="queryParams.sn"
></sn>
</span>
</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
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="patientPhone">
<el-input v-model="queryParams.patientPhone" placeholder="请输入患者电话" clearable @keyup.enter.native="handleQuery"
style="width: 220px" />
<el-input
v-model="queryParams.patientPhone"
placeholder="请输入患者电话"
clearable
@keyup.enter.native="handleQuery"
style="width: 220px"
/>
</el-form-item>
<el-form-item label="患者姓名" prop="patientName">
<el-input v-model="queryParams.patientName" placeholder="请输入患者姓名" clearable @keyup.enter.native="handleQuery"
style="width: 220px" />
<el-input
v-model="queryParams.patientName"
placeholder="请输入患者姓名"
clearable
@keyup.enter.native="handleQuery"
style="width: 220px"
/>
</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-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-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-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-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>
<el-form-item label="任务执行状态" prop="nodeExecuteStatus">
<el-select v-model="queryParams.nodeExecuteStatus" placeholder="请选择任务执行状态" clearable style="width: 220px">
<el-option v-for="item in nodeExecutList" :key="item.value" :label="item.label" :value="item.value">
<el-select
v-model="queryParams.nodeExecuteStatus"
placeholder="请选择任务执行状态"
clearable
style="width: 220px"
>
<el-option
v-for="item in nodeExecutList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="任务执行类型" prop="taskExcuteType">
<el-select v-model="queryParams.taskExcuteType" placeholder="请选择任务执行类型" clearable style="width: 220px">
<el-option v-for="item in taskExcuteTypelist" :key="item.value" :label="item.label" :value="item.value">
<el-select
v-model="queryParams.taskExcuteType"
placeholder="请选择任务执行类型"
clearable
style="width: 220px"
>
<el-option
v-for="item in taskExcuteTypelist"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="调查结果" prop="contentedFlag">
<el-select v-model="queryParams.contentedFlag" placeholder="请选择调查结果" clearable style="width: 220px">
<el-option v-for="item in contentedFlaglist" :key="item.value" :label="item.label" :value="item.value">
<el-select
v-model="queryParams.contentedFlag"
placeholder="请选择调查结果"
clearable
style="width: 220px"
>
<el-option
v-for="item in contentedFlaglist"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="通话状态" prop="phoneNodeExecuteResultStatus">
<el-select v-model="queryParams.phoneNodeExecuteResultStatus" placeholder="请选择通话状态" clearable
style="width: 220px">
<el-option v-for="item in SUCCESSlist" :key="item.value" :label="item.label" :value="item.value">
<el-select
v-model="queryParams.phoneNodeExecuteResultStatus"
placeholder="请选择通话状态"
clearable
style="width: 220px"
>
<el-option
v-for="item in SUCCESSlist"
:key="item.value"
:label="item.label"
:value="item.value"
>
</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
: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="sn" width="150" />
<el-table-column label="患者姓名" align="center" prop="patientName" width="120" />
<el-table-column label="患者电话" align="center" prop="patientPhone" width="120" />
<el-table-column label="执行时间" align="center" prop="nodePlanTime" width="120" />
<el-table-column label="路径名称" align="center" prop="manageRouteName" width="120" />
<el-table-column label="问卷模板名称" align="center" prop="questionnaireName" width="120" />
<el-table-column label="话术名称" align="center" prop="scriptTemplateName" width="120" />
<el-table-column label="医院" align="center" prop="hospitalAgencyName" width="120" />
<el-table-column label="科室名称" align="center" prop="departmentName" width="120" />
<el-table-column label="执行状态" align="center" prop="nodeExecuteStatus" width="120">
<el-table-column
label="患者姓名"
align="center"
prop="patientName"
width="120"
/>
<el-table-column
label="患者电话"
align="center"
prop="patientPhone"
width="120"
/>
<el-table-column
label="执行时间"
align="center"
prop="nodePlanTime"
width="120"
/>
<el-table-column
label="路径名称"
align="center"
prop="manageRouteName"
width="120"
/>
<el-table-column
label="问卷模板名称"
align="center"
prop="questionnaireName"
width="120"
/>
<el-table-column
label="话术名称"
align="center"
prop="scriptTemplateName"
width="120"
/>
<el-table-column
label="医院"
align="center"
prop="hospitalAgencyName"
width="120"
/>
<el-table-column
label="科室名称"
align="center"
prop="departmentName"
width="120"
/>
<el-table-column
label="执行状态"
align="center"
prop="nodeExecuteStatus"
width="120"
>
<template slot-scope="scope">
<span style="color: #67c23a">
{{ scope.row.nodeExecuteStatus == "EXECUTED" ? "已执行" : "" }}
@ -99,101 +259,221 @@
</span>
</template>
</el-table-column>
<el-table-column label="通话状态" align="center" prop="phoneNodeExecuteResultStatus" width="120">
<el-table-column
label="通话状态"
align="center"
prop="phoneNodeExecuteResultStatus"
width="120"
>
<template slot-scope="scope">
<span style="color: #67c23a" v-if="scope.row.phoneNodeExecuteResultStatus == 'SUCCESS'">
<span
style="color: #67c23a"
v-if="scope.row.phoneNodeExecuteResultStatus == 'SUCCESS'"
>
已接通
</span>
<span style="color: #f56c6c" v-else>
未接通
</span>
<span style="color: #f56c6c" v-else> 未接通 </span>
<!-- {{scope.row.phoneNodeExecuteResultStatus == "SUCCESS" ? "已接通" : "未接通"}} -->
</template>
</el-table-column>
<el-table-column label="反馈意见" align="center" prop="fillBlanksAnswer" width="150"
:show-overflow-tooltip="true" />
<el-table-column
label="反馈意见"
align="center"
prop="fillBlanksAnswer"
width="150"
:show-overflow-tooltip="true"
/>
<!-- <el-table-column label="就诊时间" align="center" prop="visitDate" width="150" /> -->
<el-table-column label="调查结果" align="center" prop="contentedFlag" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="150">
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
fixed="right"
width="150"
>
<template slot-scope="scope">
<el-button
v-if="
((scope.row.phoneDialMethod == 'AI' && scope.row.nodeExecuteStatus == 'EXECUTED') || (scope.row.phoneDialMethod == 'COMMON' && scope.row.nodeExecuteStatus == 'EXECUTED')) && scope.row.phoneNodeExecuteResultStatus == 'SUCCESS'"
size="mini" type="text" @click="playback(scope.row)" icon="el-icon-headset">回放</el-button>
((scope.row.phoneDialMethod == 'AI' &&
scope.row.nodeExecuteStatus == 'EXECUTED') ||
(scope.row.phoneDialMethod == 'COMMON' &&
scope.row.nodeExecuteStatus == 'EXECUTED')) &&
scope.row.phoneNodeExecuteResultStatus == 'SUCCESS'
"
size="mini"
type="text"
@click="playback(scope.row)"
icon="el-icon-headset"
>回放</el-button
>
<el-button
v-if="scope.row.nodeExecuteStatus == 'EXECUTED' && scope.row.taskNodeType == 'QUESTIONNAIRE_SCALE'"
size="mini" type="text" icon="el-icon-notebook-2" @click="questionlook(scope.row)">问卷查看</el-button>
v-if="
scope.row.nodeExecuteStatus == 'EXECUTED' &&
scope.row.taskNodeType == 'QUESTIONNAIRE_SCALE'
"
size="mini"
type="text"
icon="el-icon-notebook-2"
@click="questionlook(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>
<myPagination
v-show="total > 0"
:total="total"
:pageSize="queryParams.pageSize"
:indexFromWrap="queryParams.pageNum"
@updateCPage="updateCPage"
></myPagination>
<el-dialog title="问卷查看" :visible.sync="questionshow" width="40%">
<div class="bottomheaderdata">
<div class="right">
<div class="title" v-if="questiondata.totalScore || questiondata.totalScore == 0">
<!-- <div class="title" v-if="questiondata.totalScore || questiondata.totalScore == 0">
总分{{ questiondata.totalScore }}
</div>
<div class="words" v-for="(item, index) in questiondata.subjectResultList" :key="index">
</div> -->
<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>
<span v-if="item.questionType == 'FEEDBACK_BLANKS_SUBJECT'">反馈填空题</span>
<el-radio-group v-if="
<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
>
<span v-if="item.questionType == 'FEEDBACK_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)">
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="
<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)">
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="
<div
v-if="
item.questionType == 'FILL_IN_THE_BLANKS' ||
item.questionType == 'COMBINATION_BLANKS_SUBJECT' ||
item.questionType == 'FEEDBACK_BLANKS_SUBJECT'" class="tk">
<el-input disabled v-model="item.fillBlanksAnswer" placeholder="请输入答案" type="textarea" />
item.questionType == 'FEEDBACK_BLANKS_SUBJECT'
"
class="tk"
>
<el-input
disabled
v-model="item.fillBlanksAnswer"
placeholder="请输入答案"
type="textarea"
/>
</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="选择日期">
<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="{
<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="选择时间">
}"
placeholder="选择时间"
>
</el-time-select>
</div>
</div>
</div>
</div>
</el-dialog>
<el-dialog title="回放" :visible.sync="audioshow" width="800px" :before-close="audiohandleClose">
<el-dialog
title="回放"
:visible.sync="audioshow"
width="800px"
:before-close="audiohandleClose"
>
<div class="audio">
<div style="display: flex">
<span class="name">姓名:{{ patientName }}</span>
@ -220,13 +500,14 @@
</template>
<script>
import { uploadRobotPublishRecord, selectQuestionInfoList } from "@/api/manage/Satisfactionsurvey"
import SearchFilter from "../../components/SearchForm.vue";
import { getAgencyList, selectAgencyList, } from "@/api/manage/selectAgencyList";
import { selectPatientQuestionSubmit } from "@/api/system/taskExecuteRecord";
import {
getPhoneDialVideo,
} from "@/api/system/followup";
uploadRobotPublishRecord,
selectQuestionInfoList,
} from "@/api/manage/Satisfactionsurvey";
import SearchFilter from "../../components/SearchForm.vue";
import { getAgencyList, selectAgencyList } from "@/api/manage/selectAgencyList";
import { selectPatientQuestionSubmit } from "@/api/system/taskExecuteRecord";
import { getPhoneDialVideo } from "@/api/system/followup";
import sn from "../components/sn";
export default {
name: "visitout",
@ -244,7 +525,6 @@ export default {
value: "FAILURE",
label: "未接通",
},
],
//
nodeExecutList: [
@ -267,7 +547,6 @@ export default {
value: "ACTUAL_TIME_TASK",
label: "单通电话",
},
],
//
contentedFlaglist: [
@ -279,7 +558,6 @@ export default {
value: "DISCONTENTED",
label: "不满意",
},
],
//
audiourl: undefined,
@ -300,7 +578,6 @@ export default {
formlist: [],
patientName: null,
//
questionnaireList: [],
//list
@ -333,7 +610,7 @@ export default {
//
uploadopen: false,
//
dischargeTime: [],//
dischargeTime: [], //
queryParams: {
pageNum: 1,
pageSize: 10,
@ -346,7 +623,7 @@ export default {
hospitalAgencyId: null,
departmentId: null,
questionInfoId: null,
nodeExecuteStatus: '',
nodeExecuteStatus: "",
taskExcuteType: null,
contentedFlag: null,
phoneNodeExecuteResultStatus: null,
@ -354,13 +631,16 @@ export default {
},
show: false,
options: [{
value: 'PHONE_OUTBOUND',
label: '电话外呼'
}, {
value: 'QUESTIONNAIRE_SCALE',
label: '问卷量表'
}],
options: [
{
value: "PHONE_OUTBOUND",
label: "电话外呼",
},
{
value: "QUESTIONNAIRE_SCALE",
label: "问卷量表",
},
],
//
form: {},
//
@ -369,12 +649,10 @@ export default {
},
created() {
this.selectAgencyinfo();
this.getDefaultDateRange()
this.getDefaultDateRange();
this.getList();
this.getQuestion();
console.log(this.queryParams, 'queryParams11111111')
console.log(this.queryParams, "queryParams11111111");
},
mounted() {
this.getMaxTableHeight();
@ -394,8 +672,8 @@ export default {
},
//
async playback(row) {
console.log(row, 'row')
this.patientName = row.patientName
console.log(row, "row");
this.patientName = row.patientName;
// await this.$confirm("?", "", {
// confirmButtonText: "",
// cancelButtonText: "",
@ -404,7 +682,8 @@ export default {
getPhoneDialVideo(row.manageRouteNodeId).then((res) => {
console.log(res, "res");
this.audioshow = true;
this.audiourl = process.env.VUE_APP_BASE_API + res.data.phoneDialRecordVideo;
this.audiourl =
process.env.VUE_APP_BASE_API + res.data.phoneDialRecordVideo;
this.formlist = res.data.record;
setTimeout(() => {
this.$refs.audioPlayer.load(); //
@ -421,8 +700,8 @@ export default {
// e.optionResults.reverse()
// });
this.questiondata = res.data
console.log(this.questiondata, ' this.questiondata')
this.questiondata = res.data;
console.log(this.questiondata, " this.questiondata");
this.questiondata.subjectResultList.forEach((e) => {
// if(e.whetherScore==1){
// e.optionResults.forEach((el) => {
@ -475,14 +754,14 @@ export default {
},
formatDate(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); // 01
const day = String(date.getDate()).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, "0"); // 01
const day = String(date.getDate()).padStart(2, "0");
return `${year}-${month}-${day}`;
},
getQuestion() {
selectQuestionInfoList().then(response => {
this.questionnaireList = response
})
selectQuestionInfoList().then((response) => {
this.questionnaireList = response;
});
},
/** 查询患者信息列表 */
getList() {
@ -507,7 +786,6 @@ export default {
// }
// })
this.patientInfoList = response.rows;
this.total = response.total;
this.loading = false;
@ -519,20 +797,16 @@ export default {
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 {
} else {
this.queryParams.startTime = null;
this.queryParams.endTime = null;
}
this.queryParams.pageNum = 1;
this.query = this.queryParams
this.query = this.queryParams;
this.getList();
},
/** 重置按钮操作 */
@ -584,7 +858,6 @@ export default {
this.getAgencyListinfo("HOSPITAL", id);
this.queryParams.departmentId = null;
// })
},
//
clearhospitalAgency() {
@ -623,7 +896,7 @@ export default {
selectAgencyList(query).then((res) => {
this.hospitalAgencylist = res.data;
if (this.hospitalAgencylist.length == 1) {
this.queryParams.hospitalAgencyId = this.hospitalAgencylist[0].id
this.queryParams.hospitalAgencyId = this.hospitalAgencylist[0].id;
this.getAgencyListinfo("HOSPITAL", this.hospitalAgencylist[0].id);
}
});
@ -631,15 +904,12 @@ export default {
//
messageontemplateword(item) {
console.log(item, 'sn');
console.log(item, "sn");
this.queryParams.sn = item.sn;
},
//
handdatile(row) {
},
handdatile(row) {},
//
getMaxTableHeight() {
const windowInnerHeight = window.innerHeight; //
@ -683,7 +953,7 @@ export default {
border-color: #1890ff !important;
}
::v-deep .el-checkbox__input.is-disabled+span.el-checkbox__label {
::v-deep .el-checkbox__input.is-disabled + span.el-checkbox__label {
color: black !important;
}
@ -709,7 +979,7 @@ export default {
background-color: #1890ff !important;
}
::v-deep .el-radio__input.is-disabled+span.el-radio__label {
::v-deep .el-radio__input.is-disabled + span.el-radio__label {
color: black !important;
}
@ -746,7 +1016,7 @@ export default {
.name {
display: inline-block;
margin: 20px
margin: 20px;
}
.imagelist {
@ -856,7 +1126,6 @@ audio {
}
}
.custom-radio-group {
display: flex;
flex-direction: column;

View File

@ -230,9 +230,14 @@
/>
</el-select>
</el-form-item>
<el-form-item label="随访方式" prop="phoneDialMethod" v-if="
queryParams.taskNodeType == 'PHONE_OUTBOUND' || queryParams.taskNodeType == 'QUESTIONNAIRE_SCALE'
">
<el-form-item
label="随访方式"
prop="phoneDialMethod"
v-if="
queryParams.taskNodeType == 'PHONE_OUTBOUND' ||
queryParams.taskNodeType == 'QUESTIONNAIRE_SCALE'
"
>
<el-select
style="width: 220px"
v-model="queryParams.phoneDialMethod"
@ -248,12 +253,7 @@
</el-select>
</el-form-item>
<el-form-item label="" prop="">
<span
style=""
v-if="
showUNEXECUTED && foldshow == true
"
>
<span style="" v-if="showUNEXECUTED && foldshow == true">
<el-switch
class="switchStyle"
v-model="timeSignshow"
@ -283,10 +283,17 @@
</div>
<div ref="mb8" class="mb8">
<el-row :gutter="10" class="">
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['manage:preHospitalized:remove']">删除</el-button>
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['manage:preHospitalized:remove']"
>删除</el-button
>
</el-col>
</el-row>
</div>
@ -297,8 +304,19 @@
:data="taskExecuteRecordList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="35" align="center" v-if="showUNEXECUTED"/>
<el-table-column label="序号" type="index" width="48" align="center" key="xh"/>
<el-table-column
type="selection"
width="35"
align="center"
v-if="showUNEXECUTED"
/>
<el-table-column
label="序号"
type="index"
width="48"
align="center"
key="xh"
/>
<el-table-column
label="姓名"
align="center"
@ -313,7 +331,6 @@
prop="patientPhone"
width="110"
key="patientPhone"
/>
<el-table-column
label="性别"
@ -321,7 +338,6 @@
prop="visitSerialNumber"
width="48"
key="visitSerialNumber"
>
<template slot-scope="scope">
{{ scope.row.sex == "MALE" ? "男" : "" }}
@ -329,7 +345,12 @@
</template>
</el-table-column>
<!-- prop="hospitalAgencyName" -->
<el-table-column label="医院/院区" align="center" width="105" key="hospitalAgencyName">
<el-table-column
label="医院/院区"
align="center"
width="105"
key="hospitalAgencyName"
>
<template slot-scope="scope">
{{ scope.row.hospitalAgencyName }}
{{ scope.row.campusAgencyName }}
@ -378,7 +399,13 @@
:show-overflow-tooltip="true"
key="mainDiagnosis"
/>
<el-table-column label="手术名称" align="center" prop="surgicalName" width="100" key="surgicalName"/>
<el-table-column
label="手术名称"
align="center"
prop="surgicalName"
width="100"
key="surgicalName"
/>
<el-table-column
label="主治医生"
align="center"
@ -387,7 +414,12 @@
key="attendingPhysicianName"
:show-overflow-tooltip="true"
/>
<el-table-column label="就诊方式" align="center" prop="visitMethod" key="visitMethod">
<el-table-column
label="就诊方式"
align="center"
prop="visitMethod"
key="visitMethod"
>
<template slot-scope="scope">
<span>
{{ scope.row.visitMethod == "OUTPATIENT_SERVICE" ? "门诊" : "" }}
@ -552,7 +584,11 @@
>
<template slot-scope="scope">
<el-button
v-if="showUNEXECUTED && (scope.row.taskNodeType == 'PHONE_OUTBOUND' || scope.row.taskNodeType == 'QUESTIONNAIRE_SCALE') "
v-if="
showUNEXECUTED &&
(scope.row.taskNodeType == 'PHONE_OUTBOUND' ||
scope.row.taskNodeType == 'QUESTIONNAIRE_SCALE')
"
size="mini"
type="text"
icon="el-icon-bank-card"
@ -569,20 +605,35 @@
>
<!-- && scope.row.taskNodeType == 'PHONE_OUTBOUND' -->
<el-button
v-if="(AItrue || COMMONtrue) && scope.row.phoneNodeExecuteResultStatus=='SUCCESS'"
v-if="
(AItrue || COMMONtrue) &&
scope.row.phoneNodeExecuteResultStatus == 'SUCCESS'
"
size="mini"
type="text"
@click="playback(scope.row)"
icon="el-icon-headset"
>回放</el-button
>
<div v-else-if="(AItrue || COMMONtrue) &&scope.row.phoneNodeExecuteResultStatus=='FAILURE'">
<div
v-else-if="
(AItrue || COMMONtrue) &&
scope.row.phoneNodeExecuteResultStatus == 'FAILURE'
"
>
未接通
</div>
<div v-else-if="(AItrue || COMMONtrue) && scope.row.phoneNodeExecuteResultStatus=='EXPIRED'">
<div
v-else-if="
(AItrue || COMMONtrue) &&
scope.row.phoneNodeExecuteResultStatus == 'EXPIRED'
"
>
超期
</div>
<div v-else-if="(AItrue || COMMONtrue)">{{scope.row.phoneNodeExecuteResultStatus}}</div>
<div v-else-if="AItrue || COMMONtrue">
{{ scope.row.phoneNodeExecuteResultStatus }}
</div>
<el-button
v-if="
@ -597,8 +648,7 @@
>
<el-button
v-if="
EXECUTEDshow &&
scope.row.taskNodeType == 'QUESTIONNAIRE_SCALE'
EXECUTEDshow && scope.row.taskNodeType == 'QUESTIONNAIRE_SCALE'
"
size="mini"
type="text"
@ -614,7 +664,11 @@
@click="handleadtail(scope.row)"
>详情</el-button
>
<el-button size="mini" type="text" @click="handleDelete(scope.row)" v-if="showUNEXECUTED"
<el-button
size="mini"
type="text"
@click="handleDelete(scope.row)"
v-if="showUNEXECUTED"
>删除</el-button
>
</template>
@ -662,7 +716,7 @@
<el-dialog title="问卷查看" :visible.sync="questionshow" width="40%">
<div class="bottomheader">
<div class="right">
<div class="title" v-if="questiondata.totalScore || questiondata.totalScore ==0">总分{{ questiondata.totalScore }}</div>
<!-- <div class="title" v-if="questiondata.totalScore || questiondata.totalScore ==0">总分{{ questiondata.totalScore }}</div> -->
<div
class="words"
v-for="(item, index) in questiondata.subjectResultList"
@ -795,25 +849,21 @@
</div>
</el-dialog>
</div>
</template>
<script>
import {
</template>
<script>
import {
manualFollowUpList,
createActualTimeTask,
getPhoneDialVideo,
} from "@/api/system/followup";
import {
taskManagement,
} from "@/api/system/followup";
import { taskManagement, batchDeleteTask } from "@/api/manage/taskmanagement";
batchDeleteTask
} from "@/api/manage/taskmanagement";
import { usergetList } from "@/api/unitconfig/patientConfiguration";
import { getAge } from "@/utils/age";
import { selectAgencyList, getAgencyList } from "@/api/manage/selectAgencyList";
import SearchFilter from "../../components/SearchForm.vue";
import { selectPatientQuestionSubmit } from "@/api/system/taskExecuteRecord";
export default {
import { usergetList } from "@/api/unitconfig/patientConfiguration";
import { getAge } from "@/utils/age";
import { selectAgencyList, getAgencyList } from "@/api/manage/selectAgencyList";
import SearchFilter from "../../components/SearchForm.vue";
import { selectPatientQuestionSubmit } from "@/api/system/taskExecuteRecord";
export default {
name: "Followup22",
dicts: ["visit_method"],
components: { SearchFilter },
@ -865,8 +915,8 @@
//
timeSignshow: false,
phoneDialMethodshow: false,
showUNEXECUTED:true,//
EXECUTEDshow:false,//
showUNEXECUTED: true, //
EXECUTEDshow: false, //
queryParams: {
pageNum: 1,
@ -903,7 +953,7 @@
departmentId: null,
wardId: null,
},
patientName:null,
patientName: null,
//
form: {},
visitoptions: [
@ -921,7 +971,7 @@
},
],
//
nodeExecuteStatusdata:[
nodeExecuteStatusdata: [
{
value: "UNEXECUTED",
label: "未执行",
@ -930,10 +980,9 @@
value: "EXECUTED",
label: "已执行",
},
],
//
taskNodeTypeDATA:[
taskNodeTypeDATA: [
{
value: "PHONE_OUTBOUND",
label: "电话外呼",
@ -952,7 +1001,7 @@
},
],
// 访
phoneDialMethodDATA:[
phoneDialMethodDATA: [
{
value: "ALL",
label: "全部",
@ -965,7 +1014,6 @@
value: "COMMON",
label: "人工随访电话",
},
],
//
// rules: {
@ -1002,7 +1050,7 @@
async questionlook(row) {
// this.totalScoredata=0,
await selectPatientQuestionSubmit(row.taskExecuteRecordId).then((res) => {
if(res.data){
if (res.data) {
this.questiondata = res.data;
this.questiondata?.subjectResultList.forEach((e) => {
// if(e.whetherScore==1){
@ -1038,23 +1086,19 @@
});
});
this.questionshow = true;
}else{
} else {
this.$message.error("未查到问卷提交信息");
}
});
},
//
changetaskNodeType(e){
console.log(e,'e')
if(e=='PHONE_OUTBOUND'){
this.queryParams.phoneDialMethod="ALL"
}else if(e=='QUESTIONNAIRE_SCALE'){
this.queryParams.phoneDialMethod="ALL"
changetaskNodeType(e) {
console.log(e, "e");
if (e == "PHONE_OUTBOUND") {
this.queryParams.phoneDialMethod = "ALL";
} else if (e == "QUESTIONNAIRE_SCALE") {
this.queryParams.phoneDialMethod = "ALL";
}
},
audiohandleClose() {
this.$refs.audioPlayer.pause();
@ -1062,8 +1106,8 @@
this.audiourl = null;
},
async playback(row) {
console.log(row,'row')
this.patientName=row.patientName
console.log(row, "row");
this.patientName = row.patientName;
// await this.$confirm("?", "", {
// confirmButtonText: "",
// cancelButtonText: "",
@ -1072,22 +1116,19 @@
getPhoneDialVideo(row.manageRouteNodeId).then((res) => {
console.log(res, "res");
if(res.data.record){
if (res.data.record) {
this.audioshow = true;
this.audiourl = process.env.VUE_APP_BASE_API + res.data.phoneDialRecordVideo;
this.audiourl =
process.env.VUE_APP_BASE_API + res.data.phoneDialRecordVideo;
this.formlist = res.data.record;
setTimeout(() => {
this.$refs.audioPlayer.load(); //
// this.$refs.audioPlayer.play();
// }, 1000);
});
}else{
} else {
this.$message.error("未查到回放信息");
}
});
},
Outbound(row) {
@ -1392,16 +1433,19 @@
},
/** 搜索按钮操作 */
handleQuery() {
if(this.queryParams.nodeExecuteStatus=='UNEXECUTED'){
this.showUNEXECUTED=true
this.EXECUTEDshow=false
}else{
this.EXECUTEDshow=true
this.showUNEXECUTED=false
if (this.queryParams.nodeExecuteStatus == "UNEXECUTED") {
this.showUNEXECUTED = true;
this.EXECUTEDshow = false;
} else {
this.EXECUTEDshow = true;
this.showUNEXECUTED = false;
}
this.queryParams.pageNum = 1;
if(this.queryParams.taskNodeType=='PROPAGANDA_ARTICLE' || this.queryParams.taskNodeType=='TEXT_REMIND' ){
this.queryParams.phoneDialMethod=""
if (
this.queryParams.taskNodeType == "PROPAGANDA_ARTICLE" ||
this.queryParams.taskNodeType == "TEXT_REMIND"
) {
this.queryParams.phoneDialMethod = "";
}
this.getList();
},
@ -1446,7 +1490,7 @@
};
this.timeSignshow = false;
this.phoneDialMethodshow = false;
this.showUNEXECUTED=true;
this.showUNEXECUTED = true;
// }
// else {
@ -1491,7 +1535,6 @@
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.manageRouteNodeId);
this.single = selection.length !== 1;
this.multiple = !selection.length;
@ -1522,7 +1565,7 @@
address: row.address,
patientSource: row.patientSource,
createTime: row.createTime,
age: row.birthDate ? getAge(row.birthDate) :row.age,
age: row.birthDate ? getAge(row.birthDate) : row.age,
manageRouteId: row.manageRouteId,
manageRouteNodeId: row.manageRouteNodeId,
visitRecordId: row.visitRecordId,
@ -1556,20 +1599,16 @@
},
/** 删除按钮操作 */
handleDelete(row) {
console.log(row.manageRouteNodeId)
var ids=[]
if(row.manageRouteNodeId){
ids.push(row.manageRouteNodeId)
}else if(this.ids){
ids=this.ids
console.log(row.manageRouteNodeId);
var ids = [];
if (row.manageRouteNodeId) {
ids.push(row.manageRouteNodeId);
} else if (this.ids) {
ids = this.ids;
}
// const ids = row.manageRouteNodeId || this.ids;
this.$modal
.confirm(
'是否确认删除?'
)
.confirm("是否确认删除?")
.then(function () {
return batchDeleteTask(ids);
})
@ -1614,76 +1653,76 @@
]);
},
},
};
</script>
<style lang="scss" scoped>
::v-deep .el-input.is-disabled .el-input__inner {
};
</script>
<style lang="scss" scoped>
::v-deep .el-input.is-disabled .el-input__inner {
background-color: #fff !important;
color: black !important;
}
}
::v-deep .el-textarea.is-disabled .el-textarea__inner {
::v-deep .el-textarea.is-disabled .el-textarea__inner {
background-color: #fff !important;
color: black !important;
}
}
::v-deep .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
::v-deep .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
border: 1px solid #dcdfe6 !important;
border-color: #1890ff !important;
}
}
::v-deep .el-checkbox__input.is-disabled + span.el-checkbox__label {
::v-deep .el-checkbox__input.is-disabled + span.el-checkbox__label {
color: black !important;
}
}
::v-deep .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after {
::v-deep .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after {
border-color: #1890ff !important;
}
}
::v-deep .el-checkbox__input.is-disabled .el-checkbox__inner {
::v-deep .el-checkbox__input.is-disabled .el-checkbox__inner {
background-color: #fff !important;
}
}
::v-deep .el-radio__input.is-disabled .el-radio__inner {
::v-deep .el-radio__input.is-disabled .el-radio__inner {
border: 1px solid #dcdfe6 !important;
background-color: #fff !important;
}
}
::v-deep .el-radio__input.is-disabled.is-checked .el-radio__inner {
::v-deep .el-radio__input.is-disabled.is-checked .el-radio__inner {
border-color: #1890ff !important;
}
}
::v-deep .el-radio__input.is-disabled.is-checked .el-radio__inner::after {
::v-deep .el-radio__input.is-disabled.is-checked .el-radio__inner::after {
color: #1890ff !important;
background-color: #1890ff !important;
}
}
::v-deep .el-radio__input.is-disabled + span.el-radio__label {
::v-deep .el-radio__input.is-disabled + span.el-radio__label {
color: black !important;
}
}
.tk {
.tk {
::v-deep .el-textarea__inner {
margin: 20px 0 10px 30px;
}
}
}
::v-deep .el-radio {
::v-deep .el-radio {
padding: 10px;
}
}
::v-deep .el-checkbox-group {
::v-deep .el-checkbox-group {
display: flex;
flex-direction: column;
padding: 10px 0px 10px 24px;
}
}
::v-deep .el-checkbox {
::v-deep .el-checkbox {
padding: 10px 0 10px 0px;
// padding: 10px;
}
}
.custom-radio-group {
.custom-radio-group {
display: flex;
flex-direction: column;
padding: 10px 0 10px 10px;
@ -1691,9 +1730,9 @@
.custom {
padding: 10px 0 10px 10px;
}
}
}
.custom-radio-group {
.custom-radio-group {
display: flex;
flex-direction: column;
padding: 10px 0 10px 10px;
@ -1701,14 +1740,14 @@
.custom {
padding: 10px 0 10px 10px;
}
}
}
.right {
.right {
width: 100%;
// background: yellow;
}
}
.bottomheader {
.bottomheader {
width: 99%;
background-color: #fff;
margin: 0 auto;
@ -1723,13 +1762,13 @@
font-size: 15px;
padding: 10px 50px 10px 10px;
}
}
}
.audio {
.audio {
margin: 10px 0px 10px 0;
.name {
display: inline-block;
margin: 20px
margin: 20px;
}
.imagelist {
@ -1794,52 +1833,52 @@
color: #dcdfe6;
}
}
}
}
audio {
audio {
width: 350px;
}
}
::v-deep .el-table {
::v-deep .el-table {
overflow: auto;
}
}
.app-container {
.app-container {
// padding-top: 0 !important;
}
}
::v-deep.el-table {
::v-deep.el-table {
.el-table-column--selection .cell {
text-overflow: clip !important;
padding-left: 6px !important;
padding-right: 3px !important;
}
}
}
// :deep(.el-switch) {
// position: relative;
// user-select: none;
// :deep(.el-switch) {
// position: relative;
// user-select: none;
// .el-switch__core {
// width: 45px !important;
// }
// .el-switch__core {
// width: 45px !important;
// }
// &.is-checked .el-switch__label {
// position: absolute;
// top: 0px;
// left: -3px;
// color: #fff;
// }
// &.is-checked .el-switch__label {
// position: absolute;
// top: 0px;
// left: -3px;
// color: #fff;
// }
// .el-switch__label {
// position: absolute;
// top: 0px;
// left: 10px;
// color: #fff;
// }
// }
// .el-switch__label {
// position: absolute;
// top: 0px;
// left: 10px;
// color: #fff;
// }
// }
::v-deep .el-switch {
::v-deep .el-switch {
.el-switch__label {
position: absolute !important;
display: none;
@ -1869,9 +1908,9 @@
width: 60px !important;
text-align: center;
}
}
}
::v-deep .el-table__fixed-right::before {
::v-deep .el-table__fixed-right::before {
height: 0px !important;
}
</style>
}
</style>