Compare commits

..

No commits in common. "f8c4646ead424988a0b994a26a62ec5f658ea0ff" and "6fdc1779354ed1836de77a9781339ddede7531dd" have entirely different histories.

2 changed files with 1869 additions and 2177 deletions

View File

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

View File

@ -230,14 +230,9 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="随访方式" prop="phoneDialMethod" v-if="
label="随访方式" queryParams.taskNodeType == 'PHONE_OUTBOUND' || queryParams.taskNodeType == 'QUESTIONNAIRE_SCALE'
prop="phoneDialMethod" ">
v-if="
queryParams.taskNodeType == 'PHONE_OUTBOUND' ||
queryParams.taskNodeType == 'QUESTIONNAIRE_SCALE'
"
>
<el-select <el-select
style="width: 220px" style="width: 220px"
v-model="queryParams.phoneDialMethod" v-model="queryParams.phoneDialMethod"
@ -253,7 +248,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="" prop=""> <el-form-item label="" prop="">
<span style="" v-if="showUNEXECUTED && foldshow == true"> <span
style=""
v-if="
showUNEXECUTED && foldshow == true
"
>
<el-switch <el-switch
class="switchStyle" class="switchStyle"
v-model="timeSignshow" v-model="timeSignshow"
@ -283,17 +283,10 @@
</div> </div>
<div ref="mb8" class="mb8"> <div ref="mb8" class="mb8">
<el-row :gutter="10" class=""> <el-row :gutter="10" class="">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
type="danger" v-hasPermi="['manage:preHospitalized:remove']">删除</el-button>
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['manage:preHospitalized:remove']"
>删除</el-button
>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
@ -304,19 +297,8 @@
:data="taskExecuteRecordList" :data="taskExecuteRecordList"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<el-table-column <el-table-column type="selection" width="35" align="center" v-if="showUNEXECUTED"/>
type="selection" <el-table-column label="序号" type="index" width="48" align="center" key="xh"/>
width="35"
align="center"
v-if="showUNEXECUTED"
/>
<el-table-column
label="序号"
type="index"
width="48"
align="center"
key="xh"
/>
<el-table-column <el-table-column
label="姓名" label="姓名"
align="center" align="center"
@ -331,6 +313,7 @@
prop="patientPhone" prop="patientPhone"
width="110" width="110"
key="patientPhone" key="patientPhone"
/> />
<el-table-column <el-table-column
label="性别" label="性别"
@ -338,6 +321,7 @@
prop="visitSerialNumber" prop="visitSerialNumber"
width="48" width="48"
key="visitSerialNumber" key="visitSerialNumber"
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.sex == "MALE" ? "男" : "" }} {{ scope.row.sex == "MALE" ? "男" : "" }}
@ -345,12 +329,7 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- prop="hospitalAgencyName" --> <!-- prop="hospitalAgencyName" -->
<el-table-column <el-table-column label="医院/院区" align="center" width="105" key="hospitalAgencyName">
label="医院/院区"
align="center"
width="105"
key="hospitalAgencyName"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.hospitalAgencyName }} {{ scope.row.hospitalAgencyName }}
{{ scope.row.campusAgencyName }} {{ scope.row.campusAgencyName }}
@ -399,13 +378,7 @@
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
key="mainDiagnosis" key="mainDiagnosis"
/> />
<el-table-column <el-table-column label="手术名称" align="center" prop="surgicalName" width="100" key="surgicalName"/>
label="手术名称"
align="center"
prop="surgicalName"
width="100"
key="surgicalName"
/>
<el-table-column <el-table-column
label="主治医生" label="主治医生"
align="center" align="center"
@ -414,12 +387,7 @@
key="attendingPhysicianName" key="attendingPhysicianName"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
/> />
<el-table-column <el-table-column label="就诊方式" align="center" prop="visitMethod" key="visitMethod">
label="就诊方式"
align="center"
prop="visitMethod"
key="visitMethod"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span> <span>
{{ scope.row.visitMethod == "OUTPATIENT_SERVICE" ? "门诊" : "" }} {{ scope.row.visitMethod == "OUTPATIENT_SERVICE" ? "门诊" : "" }}
@ -584,11 +552,7 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-if=" v-if="showUNEXECUTED && (scope.row.taskNodeType == 'PHONE_OUTBOUND' || scope.row.taskNodeType == 'QUESTIONNAIRE_SCALE') "
showUNEXECUTED &&
(scope.row.taskNodeType == 'PHONE_OUTBOUND' ||
scope.row.taskNodeType == 'QUESTIONNAIRE_SCALE')
"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-bank-card" icon="el-icon-bank-card"
@ -605,35 +569,20 @@
> >
<!-- && scope.row.taskNodeType == 'PHONE_OUTBOUND' --> <!-- && scope.row.taskNodeType == 'PHONE_OUTBOUND' -->
<el-button <el-button
v-if=" v-if="(AItrue || COMMONtrue) && scope.row.phoneNodeExecuteResultStatus=='SUCCESS'"
(AItrue || COMMONtrue) &&
scope.row.phoneNodeExecuteResultStatus == 'SUCCESS'
"
size="mini" size="mini"
type="text" type="text"
@click="playback(scope.row)" @click="playback(scope.row)"
icon="el-icon-headset" icon="el-icon-headset"
>回放</el-button >回放</el-button
> >
<div <div v-else-if="(AItrue || COMMONtrue) &&scope.row.phoneNodeExecuteResultStatus=='FAILURE'">
v-else-if="
(AItrue || COMMONtrue) &&
scope.row.phoneNodeExecuteResultStatus == 'FAILURE'
"
>
未接通 未接通
</div> </div>
<div <div v-else-if="(AItrue || COMMONtrue) && scope.row.phoneNodeExecuteResultStatus=='EXPIRED'">
v-else-if="
(AItrue || COMMONtrue) &&
scope.row.phoneNodeExecuteResultStatus == 'EXPIRED'
"
>
超期 超期
</div> </div>
<div v-else-if="AItrue || COMMONtrue"> <div v-else-if="(AItrue || COMMONtrue)">{{scope.row.phoneNodeExecuteResultStatus}}</div>
{{ scope.row.phoneNodeExecuteResultStatus }}
</div>
<el-button <el-button
v-if=" v-if="
@ -648,7 +597,8 @@
> >
<el-button <el-button
v-if=" v-if="
EXECUTEDshow && scope.row.taskNodeType == 'QUESTIONNAIRE_SCALE' EXECUTEDshow &&
scope.row.taskNodeType == 'QUESTIONNAIRE_SCALE'
" "
size="mini" size="mini"
type="text" type="text"
@ -664,11 +614,7 @@
@click="handleadtail(scope.row)" @click="handleadtail(scope.row)"
>详情</el-button >详情</el-button
> >
<el-button <el-button size="mini" type="text" @click="handleDelete(scope.row)" v-if="showUNEXECUTED"
size="mini"
type="text"
@click="handleDelete(scope.row)"
v-if="showUNEXECUTED"
>删除</el-button >删除</el-button
> >
</template> </template>
@ -716,7 +662,7 @@
<el-dialog title="问卷查看" :visible.sync="questionshow" width="40%"> <el-dialog title="问卷查看" :visible.sync="questionshow" width="40%">
<div class="bottomheader"> <div class="bottomheader">
<div class="right"> <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 <div
class="words" class="words"
v-for="(item, index) in questiondata.subjectResultList" v-for="(item, index) in questiondata.subjectResultList"
@ -856,7 +802,11 @@ import {
createActualTimeTask, createActualTimeTask,
getPhoneDialVideo, getPhoneDialVideo,
} from "@/api/system/followup"; } from "@/api/system/followup";
import { taskManagement, batchDeleteTask } from "@/api/manage/taskmanagement"; import {
taskManagement,
batchDeleteTask
} from "@/api/manage/taskmanagement";
import { usergetList } from "@/api/unitconfig/patientConfiguration"; import { usergetList } from "@/api/unitconfig/patientConfiguration";
import { getAge } from "@/utils/age"; import { getAge } from "@/utils/age";
@ -980,6 +930,7 @@ export default {
value: "EXECUTED", value: "EXECUTED",
label: "已执行", label: "已执行",
}, },
], ],
// //
taskNodeTypeDATA:[ taskNodeTypeDATA:[
@ -1014,6 +965,7 @@ export default {
value: "COMMON", value: "COMMON",
label: "人工随访电话", label: "人工随访电话",
}, },
], ],
// //
// rules: { // rules: {
@ -1086,19 +1038,23 @@ export default {
}); });
}); });
this.questionshow = true; this.questionshow = true;
}else{ }else{
this.$message.error("未查到问卷提交信息"); this.$message.error("未查到问卷提交信息");
} }
}); });
}, },
// //
changetaskNodeType(e){ changetaskNodeType(e){
console.log(e, "e"); console.log(e,'e')
if (e == "PHONE_OUTBOUND") { if(e=='PHONE_OUTBOUND'){
this.queryParams.phoneDialMethod = "ALL"; this.queryParams.phoneDialMethod="ALL"
} else if (e == "QUESTIONNAIRE_SCALE") { }else if(e=='QUESTIONNAIRE_SCALE'){
this.queryParams.phoneDialMethod = "ALL"; this.queryParams.phoneDialMethod="ALL"
} }
}, },
audiohandleClose() { audiohandleClose() {
this.$refs.audioPlayer.pause(); this.$refs.audioPlayer.pause();
@ -1106,8 +1062,8 @@ export default {
this.audiourl = null; this.audiourl = null;
}, },
async playback(row) { async playback(row) {
console.log(row, "row"); console.log(row,'row')
this.patientName = row.patientName; this.patientName=row.patientName
// await this.$confirm("?", "", { // await this.$confirm("?", "", {
// confirmButtonText: "", // confirmButtonText: "",
// cancelButtonText: "", // cancelButtonText: "",
@ -1118,17 +1074,20 @@ export default {
if(res.data.record){ if(res.data.record){
this.audioshow = true; this.audioshow = true;
this.audiourl = this.audiourl = process.env.VUE_APP_BASE_API + res.data.phoneDialRecordVideo;
process.env.VUE_APP_BASE_API + res.data.phoneDialRecordVideo;
this.formlist = res.data.record; this.formlist = res.data.record;
setTimeout(() => { setTimeout(() => {
this.$refs.audioPlayer.load(); // this.$refs.audioPlayer.load(); //
// this.$refs.audioPlayer.play(); // this.$refs.audioPlayer.play();
// }, 1000); // }, 1000);
}); });
}else{ }else{
this.$message.error("未查到回放信息"); this.$message.error("未查到回放信息");
} }
}); });
}, },
Outbound(row) { Outbound(row) {
@ -1433,19 +1392,16 @@ export default {
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
if (this.queryParams.nodeExecuteStatus == "UNEXECUTED") { if(this.queryParams.nodeExecuteStatus=='UNEXECUTED'){
this.showUNEXECUTED = true; this.showUNEXECUTED=true
this.EXECUTEDshow = false; this.EXECUTEDshow=false
}else{ }else{
this.EXECUTEDshow = true; this.EXECUTEDshow=true
this.showUNEXECUTED = false; this.showUNEXECUTED=false
} }
this.queryParams.pageNum = 1; this.queryParams.pageNum = 1;
if ( if(this.queryParams.taskNodeType=='PROPAGANDA_ARTICLE' || this.queryParams.taskNodeType=='TEXT_REMIND' ){
this.queryParams.taskNodeType == "PROPAGANDA_ARTICLE" || this.queryParams.phoneDialMethod=""
this.queryParams.taskNodeType == "TEXT_REMIND"
) {
this.queryParams.phoneDialMethod = "";
} }
this.getList(); this.getList();
}, },
@ -1535,6 +1491,7 @@ export default {
}, },
// //
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.ids = selection.map((item) => item.manageRouteNodeId); this.ids = selection.map((item) => item.manageRouteNodeId);
this.single = selection.length !== 1; this.single = selection.length !== 1;
this.multiple = !selection.length; this.multiple = !selection.length;
@ -1599,16 +1556,20 @@ export default {
}, },
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
console.log(row.manageRouteNodeId); console.log(row.manageRouteNodeId)
var ids = []; var ids=[]
if(row.manageRouteNodeId){ if(row.manageRouteNodeId){
ids.push(row.manageRouteNodeId); ids.push(row.manageRouteNodeId)
}else if(this.ids){ }else if(this.ids){
ids = this.ids; ids=this.ids
} }
// const ids = row.manageRouteNodeId || this.ids; // const ids = row.manageRouteNodeId || this.ids;
this.$modal this.$modal
.confirm("是否确认删除?") .confirm(
'是否确认删除?'
)
.then(function () { .then(function () {
return batchDeleteTask(ids); return batchDeleteTask(ids);
}) })
@ -1768,7 +1729,7 @@ export default {
margin: 10px 0px 10px 0; margin: 10px 0px 10px 0;
.name { .name {
display: inline-block; display: inline-block;
margin: 20px; margin: 20px
} }
.imagelist { .imagelist {