<template>
|
<!-- 聊连页面记录 -->
|
<div class="Followupdetailspage" id="app-container">
|
<div class="Followuserinfo">
|
<div>
|
<div class="userinfo-text">
|
<!-- <span>患者服务详情</span> -->
|
<div class="headline">
|
<div>患者服务详情</div>
|
<div style="margin-left: 20px">
|
<el-button
|
v-if="!Whetherall"
|
type="primary"
|
@click="getTaskservelist()"
|
>查看患者全部服务</el-button
|
>
|
<el-button v-else type="success" @click="getTaskservelist(id)"
|
>只展示本次服务信息</el-button
|
>
|
</div>
|
<div style="margin-left: 20px; color: #59a0f0">
|
<el-link
|
href="https://9.208.2.207:6060/search-homepage"
|
target="_blank"
|
:underline="true"
|
>
|
前往CDSS查询
|
</el-link>
|
</div>
|
</div>
|
<!-- <el-button type="success">随访后短信</el-button> -->
|
</div>
|
</div>
|
<div>
|
<el-table :data="logsheetlist" :row-class-name="tableRowClassName" style="width: 100%">
|
<el-table-column
|
prop="sendname"
|
align="center"
|
label="姓名"
|
width="100"
|
>
|
<template slot-scope="scope">
|
<el-button
|
size="medium"
|
type="text"
|
@click="
|
gettoken360(
|
scope.row.sfzh,
|
scope.row.drcode,
|
scope.row.drname
|
)
|
"
|
><span class="button-textsc">{{
|
scope.row.sendname
|
}}</span></el-button
|
>
|
</template>
|
</el-table-column>
|
<el-table-column
|
prop="taskName"
|
align="center"
|
width="200"
|
show-overflow-tooltip
|
label="任务名称"
|
>
|
</el-table-column>
|
<el-table-column
|
prop="sendstate"
|
align="center"
|
width="200"
|
label="任务状态"
|
>
|
<template slot-scope="scope">
|
<div v-if="scope.row.sendstate == 1">
|
<el-tag type="primary" :disable-transitions="false"
|
>表单已领取</el-tag
|
>
|
</div>
|
<div v-if="scope.row.sendstate == 2">
|
<el-tag type="primary" :disable-transitions="false"
|
>待随访</el-tag
|
>
|
</div>
|
<div v-if="scope.row.sendstate == 3">
|
<el-tag type="success" :disable-transitions="false"
|
>表单已发送</el-tag
|
>
|
</div>
|
<div v-if="scope.row.sendstate == 4">
|
<el-tag type="info" :disable-transitions="false">不执行</el-tag>
|
</div>
|
<div v-if="scope.row.sendstate == 5">
|
<el-tag type="danger" :disable-transitions="false"
|
>发送失败</el-tag
|
>
|
</div>
|
<div v-if="scope.row.sendstate == 6">
|
<el-tag type="success" :disable-transitions="false"
|
>已完成</el-tag
|
>
|
</div>
|
</template>
|
</el-table-column>
|
<el-table-column
|
prop="finishtime"
|
align="center"
|
label="随访完成时间"
|
width="200"
|
show-overflow-tooltip
|
>
|
</el-table-column>
|
<el-table-column
|
label="出院日期"
|
width="200"
|
align="center"
|
key="endtime"
|
prop="endtime"
|
>
|
<template slot-scope="scope">
|
<span>{{ formatTime(scope.row.endtime) }}</span>
|
</template></el-table-column
|
>
|
<el-table-column
|
label="责任护士"
|
width="120"
|
align="center"
|
key="nurseName"
|
prop="nurseName"
|
/>
|
<el-table-column
|
label="主治医生"
|
width="120"
|
align="center"
|
key="drname"
|
prop="drname"
|
/>
|
|
<el-table-column
|
label="结果状态"
|
align="center"
|
key="excep"
|
prop="excep"
|
width="120"
|
>
|
<template slot-scope="scope">
|
<dict-tag
|
:options="dict.type.sys_yujing"
|
:value="scope.row.excep"
|
/>
|
</template>
|
</el-table-column>
|
<el-table-column
|
label="处理意见"
|
align="center"
|
key="suggest"
|
prop="suggest"
|
width="120"
|
>
|
<template slot-scope="scope">
|
<dict-tag
|
:options="dict.type.sys_suggest"
|
:value="scope.row.suggest"
|
/>
|
</template>
|
</el-table-column>
|
|
<el-table-column
|
prop="templatename"
|
align="center"
|
label="服务模板"
|
width="200"
|
show-overflow-tooltip
|
>
|
</el-table-column>
|
<el-table-column
|
prop="remark"
|
align="center"
|
label="服务记录"
|
width="200"
|
show-overflow-tooltip
|
>
|
</el-table-column>
|
|
<el-table-column
|
prop="bankcardno"
|
align="center"
|
label="呼叫状态"
|
width="210"
|
>
|
</el-table-column>
|
<el-table-column
|
label="操作"
|
fixed="right"
|
align="center"
|
width="200"
|
class-name="small-padding fixed-width"
|
>
|
<template slot-scope="scope">
|
<el-button
|
size="medium"
|
type="text"
|
@click="Seedetails(scope.row)"
|
><span class="button-zx"
|
><i class="el-icon-s-order"></i>查看</span
|
></el-button
|
>
|
</template>
|
</el-table-column>
|
</el-table>
|
</div>
|
</div>
|
<div class="Followuserinfos">
|
<div>
|
<el-form ref="form" :model="form" label-width="120px">
|
<div class="headline">
|
<div>人工处理</div>
|
<el-row :gutter="20">
|
<el-col :span="8"
|
><el-form-item label="联系电话">
|
<el-input
|
placeholder="联系电话缺失"
|
v-model="userform.telcode"
|
></el-input> </el-form-item
|
></el-col>
|
<el-col :span="8"
|
><el-form-item label="联系人电话">
|
<el-input
|
placeholder="联系人电话缺失"
|
v-model="userform.relativetelcode"
|
></el-input> </el-form-item
|
></el-col>
|
<el-col :span="8"
|
><el-form-item label="联系人关系">
|
<el-input
|
placeholder="联系人关系缺失"
|
v-model="userform.relation"
|
></el-input> </el-form-item
|
></el-col>
|
</el-row>
|
<div style="margin-left: 30px">
|
<el-button type="primary" plain @click="Editsingletasksonyic('')"
|
>保存服务</el-button
|
>
|
</div>
|
</div>
|
|
<el-form-item label="随访记录">
|
<el-input type="textarea" v-model="form.remark"></el-input>
|
</el-form-item>
|
|
<el-form-item label="处理意见">
|
<div>
|
<el-button plain type="warning" @click="Editsingletaskson('1')"
|
>暂不处理</el-button
|
>
|
<el-button plain type="success" @click="Editsingletaskson('2')"
|
>病情稳定</el-button
|
>
|
<el-button plain type="primary" @click="Editsingletaskson('3')"
|
>通知就诊</el-button
|
>
|
<!-- <el-button type="danger" @click="Editsingletaskson('4')"
|
>失访</el-button
|
> -->
|
<el-button plain type="info" @click="Editsingletaskson('5')"
|
>中心随访</el-button
|
>
|
<el-button
|
type="primary"
|
round
|
v-if="this.form.isVisitAgain != 2"
|
@click="sendAgain()"
|
>再次随访</el-button
|
>
|
</div>
|
</el-form-item>
|
</el-form>
|
<el-collapse>
|
<el-collapse-item title="查看当前患者信息" name="1">
|
<div class="detailed">
|
<el-form ref="userform" :model="userform" label-width="100px">
|
<el-row :gutter="20">
|
<el-col :span="12">
|
<el-form-item label="患者姓名" prop="name">
|
<el-input
|
v-model="userform.name"
|
placeholder="请输入姓名"
|
maxlength="30"
|
></el-input> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="12"
|
><el-form-item label="联系方式" prop="telcode">
|
<el-input
|
v-model="userform.telcode"
|
placeholder="请输入联系方式"
|
maxlength="20"
|
/> </el-form-item
|
></el-col>
|
<el-col :span="12">
|
<el-form-item label="亲属联系方式" prop="name">
|
<el-input
|
v-model="userform.relativetelcode"
|
placeholder="请输入姓名"
|
maxlength="20"
|
></el-input> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="24">
|
<el-form-item label="出生地" prop="birthplace">
|
<el-input
|
v-model="userform.birthplace"
|
placeholder="国、省、地市、区县、街道等详细信息"
|
maxlength="50"
|
/> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="24"
|
><el-form-item label="居住地" prop="placeOfResidence">
|
<el-input
|
v-model="userform.placeOfResidence"
|
placeholder="国、省、地市、区县、街道等详细信息"
|
maxlength="50"
|
/> </el-form-item
|
></el-col>
|
</el-row>
|
<!-- <el-row :gutter="20">
|
<el-col :span="24">
|
<el-form-item label="标签" prop="desc">
|
<div class="xinz-inf">
|
<el-tag
|
:key="tag.tagname"
|
type="success"
|
v-for="tag in dynamicTags"
|
:disable-transitions="false"
|
>
|
{{ tag.tagname }}
|
</el-tag>
|
</div>
|
</el-form-item>
|
</el-col>
|
</el-row> -->
|
</el-form>
|
</div>
|
</el-collapse-item>
|
</el-collapse>
|
</div>
|
</div>
|
<div>
|
<el-tabs v-model="activeName" type="border-card">
|
<el-tab-pane name="wj">
|
<span class="mulsz" slot="label"
|
><i class="el-icon-notebook-1"></i> 问卷随访结果</span
|
>
|
<div class="CONTENT">
|
<div class="title">{{ taskname ? taskname : "问卷" }}</div>
|
|
<div class="preview-left" v-if="!Voicetype">
|
<div
|
class="topic-dev"
|
v-for="(item, index) in tableDatatop"
|
:key="item.id"
|
>
|
<!-- 单选 -->
|
<div
|
:class="
|
item.isabnormal
|
? 'scriptTopic-isabnormal'
|
: 'scriptTopic-dev'
|
"
|
:key="index"
|
v-if="item.scriptType == 1"
|
>
|
<div class="dev-text">
|
{{ index + 1 }}、[单选]<span>{{ item.scriptContent }}</span>
|
</div>
|
<div class="dev-xx">
|
<el-radio-group
|
v-model="item.scriptResult"
|
@change="handleOptionChange($event, index, item)"
|
>
|
<el-radio
|
v-for="(
|
items, index
|
) in item.svyLibTemplateTargetoptions"
|
:class="items.isabnormal ? 'red-star' : ''"
|
:key="index"
|
:label="items.optioncontent"
|
>{{ items.optioncontent }}</el-radio
|
>
|
</el-radio-group>
|
</div>
|
<div v-show="item.prompt">
|
<el-alert :title="item.prompt" type="warning"> </el-alert>
|
</div>
|
</div>
|
<!-- 多选 -->
|
<div
|
:class="
|
item.isabnormal
|
? 'scriptTopic-isabnormal'
|
: 'scriptTopic-dev'
|
"
|
:key="index"
|
v-if="item.scriptType == 2"
|
>
|
<div class="dev-text">
|
{{ index + 1 }}、[多选]<span>{{ item.scriptContent }}</span>
|
</div>
|
<div class="dev-xx">
|
<el-checkbox-group
|
v-model="item.scriptResult"
|
@change="updateScore($event, index, item)"
|
>
|
<el-checkbox
|
:class="items.isabnormal ? 'red-star' : ''"
|
@change="$forceUpdate()"
|
v-for="(
|
items, indexs
|
) in item.svyLibTemplateTargetoptions"
|
:key="indexs"
|
:label="items.optioncontent"
|
>
|
{{ items.optioncontent }}
|
</el-checkbox>
|
</el-checkbox-group>
|
</div>
|
<div v-show="item.prompt && item.scriptResult[0]">
|
<el-alert :title="item.prompt" type="warning"> </el-alert>
|
</div>
|
</div>
|
<!-- 填空 -->
|
<div
|
class="scriptTopic-dev"
|
:key="index"
|
v-if="item.scriptType == 4"
|
>
|
<div class="dev-text">
|
{{ index + 1 }}、[问答]<span>{{ item.scriptContent }}</span>
|
</div>
|
<div class="dev-xx">
|
<el-input
|
type="textarea"
|
:rows="2"
|
placeholder="请输入答案"
|
v-model="item.scriptResult"
|
clearable
|
>
|
</el-input>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<div class="preview-left" v-else>
|
<div
|
class="topic-dev"
|
v-for="(item, index) in tableDatatop"
|
:key="item.id"
|
>
|
<div v-if="item.targetvalue">
|
<div class="dev-text">
|
{{ index + 1 }}、[单选]<span>{{ item.questiontext }}</span>
|
</div>
|
<div class="dev-xx">
|
<el-radio-group
|
v-model="item.matchedtext"
|
@change="handleOptionChange($event, index, item)"
|
>
|
<el-radio
|
v-for="(items, index) in item.scriptResult"
|
:key="items"
|
:label="items"
|
>{{ items }}</el-radio
|
>
|
</el-radio-group>
|
</div>
|
<div v-show="item.prompt">
|
<el-alert :title="item.prompt" type="warning"> </el-alert>
|
</div>
|
</div>
|
|
<div class="scriptTopic-dev" :key="index" v-else>
|
<div class="dev-text">
|
{{ index + 1 }}、[问答]<span>{{ item.questiontext }}</span>
|
</div>
|
<div class="dev-xx">
|
<el-input
|
type="textarea"
|
:rows="2"
|
placeholder="请输入答案"
|
v-model="item.matchedtext"
|
clearable
|
>
|
</el-input>
|
</div>
|
</div>
|
</div>
|
</div>
|
<el-button v-if="Voicetype" type="primary" @click="yuyingetdetail"
|
>保存服务详情</el-button
|
>
|
<el-button v-else type="primary" @click="getdetail"
|
>保存服务详情</el-button
|
>
|
</div>
|
</el-tab-pane>
|
|
<el-tab-pane name="yy">
|
<span class="mulsz" slot="label"
|
><i class="el-icon-headset"></i> 语音随访详情</span
|
>
|
<div class="borderdiv">
|
<div class="title">{{ taskname ? taskname : "问卷" }}</div>
|
<div
|
style="
|
display: flex;
|
text-align: center;
|
align-items: center;
|
color: #59a0f0;
|
"
|
>
|
完整语音:
|
<mini-audio
|
:audio-source="
|
voice ? voice : 'https://example.com/example.mp3'
|
"
|
></mini-audio>
|
</div>
|
<div class="preview-left">
|
<div v-for="item in voiceDatatop">
|
<div class="leftside">
|
<i class="el-icon-phone-outline"></i
|
><span>{{ item.questiontext }}</span>
|
</div>
|
<div class="offside">
|
<i class="el-icon-user"></i>
|
<div class="offside-value">
|
<el-input
|
type="textarea"
|
:autosize="{ minRows: 1 }"
|
v-model="item.asrtext"
|
></el-input>
|
|
<div>
|
<mini-audio
|
:audio-source="
|
item.questionvoice
|
? item.questionvoice
|
: 'https://example.com/example.mp3'
|
"
|
></mini-audio>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
<el-button v-if="Voicetype" type="primary" @click="yuyingetdetail"
|
>保存随访详情</el-button
|
>
|
<el-button v-else type="primary" @click="getdetail"
|
>保存随访详情</el-button
|
>
|
</div>
|
</el-tab-pane>
|
</el-tabs>
|
</div>
|
<el-dialog
|
title="患者再次随访"
|
v-dialogDrags
|
:visible.sync="dialogFormVisible"
|
>
|
<el-form ref="zcform" :rules="zcrules" :model="form" label-width="80px">
|
<el-form-item label="任务名称">
|
<el-input
|
style="width: 400px"
|
disabled
|
v-model="form.taskName"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="患者名称">
|
<el-input
|
style="width: 400px"
|
disabled
|
v-model="form.sendname"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="年龄">
|
<el-input style="width: 400px" disabled v-model="form.age"></el-input>
|
</el-form-item>
|
<el-form-item label="科室">
|
<el-input
|
style="width: 400px"
|
disabled
|
v-model="form.deptname"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="病区">
|
<el-input
|
style="width: 400px"
|
disabled
|
v-model="form.leavehospitaldistrictname"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="出院时间">
|
<el-input
|
style="width: 400px"
|
disabled
|
v-model="form.endtime"
|
></el-input>
|
</el-form-item>
|
|
<el-form-item label="随访方式" prop="resource">
|
<el-radio-group v-model="form.resource">
|
<el-radio label="1">本病区随访</el-radio>
|
<el-radio label="2">随访中心随访</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<!-- <el-form-item label="即刻发送">
|
<el-switch v-model="zcform.delivery"></el-switch>
|
</el-form-item> -->
|
<el-form-item label="随访时间" prop="date1">
|
<el-date-picker
|
type="date"
|
placeholder="选择日期"
|
:picker-options="pickerOptions"
|
align="right"
|
v-model="form.date1"
|
style="width: 100%"
|
></el-date-picker>
|
</el-form-item>
|
<el-form-item label="随访记录">
|
<el-input type="textarea" v-model="form.remark"></el-input>
|
</el-form-item>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button type="warning" @click="dialogFormVisible = false"
|
>取 消</el-button
|
>
|
<el-button type="primary" @click="setupsubtask">确认创建服务</el-button>
|
</div>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import {
|
getsearchrResults,
|
getPersonVoices,
|
addserviceSubtask,
|
getTaskservelist,
|
getTaskFollowup,
|
Editsingletaskson,
|
serviceSubtaskDetailedit,
|
serviceSubtaskDetailadd,
|
updatePersonVoices,
|
addPersonVoices,
|
query360PatInfo,
|
} from "@/api/AiCentre/index";
|
import {
|
messagelistpatient,
|
alterpatient,
|
listcontactinformation,
|
} from "@/api/patient/homepage";
|
export default {
|
dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
|
data() {
|
return {
|
userid: "",
|
input: "今天身体还不错",
|
radio: "2",
|
taskname: "",
|
activeName: "wj",
|
voice: "",
|
templateid: "",
|
again:'',
|
zcform: {},
|
form: {},
|
tableDatatop: [], //题目表
|
voiceDatatop: [], //题目表
|
dynamicTags: [],
|
zcrules: {
|
date1: [
|
{ required: true, message: "请选择随访方式", trigger: "change" },
|
],
|
resource: [
|
{ required: true, message: "请选择随访时间", trigger: "blur" },
|
],
|
},
|
url: "http://9.208.2.190:8090/smartor/serviceExternal/query360PatInfo",
|
postData: {
|
XiaoXiTou: {
|
FaSongFCSJC: "ZJHES",
|
FaSongJGID: localStorage.getItem("orgid"),
|
FaSongJGMC: localStorage.getItem("orgname"),
|
FaSongSJ: "2025-01-09 17:29:36",
|
FaSongXTJC: "SUIFANGXT",
|
FaSongXTMC: "随访系统",
|
XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
|
XiaoXiLX: "SC_LC_360STCX",
|
XiaoXiMC: "360 视图查询",
|
ZuHuID: localStorage.getItem("ZuHuID"),
|
ZuHuMC: localStorage.getItem("orgname"),
|
},
|
YeWuXX: {
|
BingRenXX: {
|
ZhengJianHM: "",
|
ZhengJianLXDM: "01",
|
ZhengJianLXMC: "居民身份证",
|
ZuZhiJGID: localStorage.getItem("orgid"),
|
ZuZhiJGMC: localStorage.getItem("orgname"),
|
},
|
YongHuXX: {
|
XiTongID: "SUIFANGXT",
|
XiTongMC: "随访系统",
|
YongHuID: "1400466972205912064",
|
YongHuXM: "JNRMYY",
|
ZuZhiJGID: localStorage.getItem("orgid"),
|
ZuZhiJGMC: localStorage.getItem("orgname"),
|
idp: "lyra",
|
},
|
},
|
},
|
pickerOptions: {
|
shortcuts: [{
|
text: '七天后',
|
onClick(picker) {
|
const date = new Date();
|
date.setTime(date.getTime() + 3600 * 1000 * 24 * 7);
|
picker.$emit('pick', date);
|
}
|
}, {
|
text: '15天后',
|
onClick(picker) {
|
const date = new Date();
|
date.setTime(date.getTime() + 3600 * 1000 * 24* 15);
|
picker.$emit('pick', date);
|
}
|
}, {
|
text: '30天后',
|
onClick(picker) {
|
const date = new Date();
|
date.setTime(date.getTime() + 3600 * 1000 * 24 * 30);
|
picker.$emit('pick', date);
|
}
|
}]
|
},
|
userform: {},
|
Whetherall: true, //是否全部记录展示
|
dialogFormVisible: false,
|
Voicetype: 0, //是否为语音服务
|
logsheetlist: [],
|
topicobj: {},
|
sendname: null,
|
serviceType: null,
|
id: null,
|
taskid: null,
|
patid: null,
|
};
|
},
|
|
created() {
|
this.taskid = this.$route.query.taskid;
|
this.id = this.$route.query.id;
|
this.sendname = this.$route.query.sendname;
|
this.patid = this.$route.query.patid;
|
this.again = this.$route.query.again;
|
this.Voicetype = this.$route.query.Voicetype;
|
this.serviceType = this.$route.query.serviceType;
|
|
this.getTaskservelist();
|
},
|
|
methods: {
|
// 获取问卷数据
|
getsearchrResults(id) {
|
getsearchrResults({
|
taskid: this.taskid,
|
patid: this.patid,
|
subId: id ? id : this.id,
|
isFinish: false,
|
}).then((res) => {
|
if (res.code === 200) {
|
if (this.again&&res.data.upScriptResult) {
|
this.tableDatatop = res.data.upScriptResult;
|
}else{
|
this.tableDatatop = res.data.scriptResult;
|
}
|
this.tableDatatop.forEach((item) => {
|
if (item.scriptType == 2) item.scriptResult = [];
|
if (item.scriptResult && item.scriptType != 2) {
|
item.isoption = 3;
|
item.scriptResult = item.scriptResult;
|
} else if (item.scriptResult && item.scriptType == 2) {
|
item.scriptResult = item.scriptResult.split("&");
|
item.isoption = 3;
|
}
|
});
|
this.taskname = res.data.taskName;
|
this.overdata();
|
}
|
});
|
},
|
//患者360跳转
|
gettoken360(sfzh, drcode, drname) {
|
this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
|
if (this.postData.XiaoXiTou.ZuHuMC == "丽水市中医院") {
|
this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
|
this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY";
|
}
|
query360PatInfo(this.postData).then((res) => {
|
if (res.data.url) {
|
window.open(res.data.url, "_blank");
|
// this.linkUrl = res.data.url;
|
} else {
|
this.$modal.msgWarning("360查询无结果");
|
}
|
});
|
},
|
// 获取基础信息
|
getuserinfo() {
|
const queryParams = {
|
pid: Number(this.patid),
|
allhosp: "0",
|
pageNum: 1,
|
};
|
// 患者基础信息
|
messagelistpatient(queryParams).then((response) => {
|
if (response.rows[0]) {
|
this.userform = response.rows[0];
|
// this.dynamicTags = response.rows[0].tagList.map(this.processElement);
|
}
|
});
|
listcontactinformation({ patid: this.patid }).then((response) => {
|
this.tableData = response.rows;
|
if (this.tableData.length) {
|
this.userform.relativetelcode = this.tableData[0].contactway;
|
this.userform.relation = this.tableData[0].relation;
|
}
|
});
|
},
|
// 获取语音数据
|
getPersonVoices(id) {
|
let obj = {
|
taskid: this.taskid,
|
patid: this.patid,
|
subId: id ? id : this.id,
|
};
|
|
getPersonVoices(obj).then((res) => {
|
if (res.code == 200) {
|
this.voiceDatatop = res.data.serviceSubtaskDetails;
|
this.voice = res.data.voice;
|
this.activeName = "yy";
|
this.taskname = res.data.taskName;
|
// 问卷展示数据处理
|
this.tableDatatop = res.data.filteredDetails;
|
this.tableDatatop.forEach((item) => {
|
if (item.targetvalue) {
|
item.scriptResult = item.targetvalue.split("&");
|
} else {
|
item.scriptResult = [];
|
}
|
});
|
|
if (!this.tableDatatop.length) {
|
this.puttaskid(this.templateid);
|
}
|
}
|
});
|
},
|
// 获取问卷完整数据比对
|
puttaskid(id) {
|
getTaskFollowup(id).then((res) => {
|
if (res.code == 200) {
|
this.tableDatatop = res.data.ivrTaskTemplateScriptVOList;
|
this.tableDatatop.forEach((item) => {
|
item.id = null;
|
// 类型判断赋值
|
if (item.ivrTaskScriptTargetoptionList) {
|
item.targetvalue = 1;
|
item.questiontext = item.scriptContent;
|
item.targetvalue = item.ivrTaskScriptTargetoptionList
|
.map((obj) => obj.targetvalue)
|
.join("&");
|
}
|
if (item.targetvalue) {
|
item.scriptResult = item.targetvalue.split("&");
|
} else {
|
item.scriptResult = [];
|
}
|
});
|
}
|
});
|
},
|
// 医护人员存储数据
|
getdetail() {
|
let excep = "";
|
const promises = [];
|
this.tableDatatop.forEach((item) => {
|
var objs = item.svyLibTemplateTargetoptions.find(
|
(items) => items.optioncontent == item.scriptResult
|
);
|
if (obj) {
|
if (objs.isabnormal) {
|
excep = 1;
|
}
|
}
|
let obj = {
|
asrtext: null,
|
patid: this.patid,
|
subId: this.id,
|
taskid: this.taskid,
|
scriptid: item.id,
|
excep: excep,
|
questiontext: item.scriptContent,
|
};
|
if (item.scriptType == 2 && item.scriptResult[0]) {
|
obj.asrtext = item.scriptResult.join("&");
|
} else if (item.scriptType != 2 && item.scriptResult) {
|
obj.asrtext = item.scriptResult;
|
}
|
|
if (item.isoption == 3) {
|
promises.push(serviceSubtaskDetailedit(obj));
|
} else {
|
promises.push(serviceSubtaskDetailadd(obj));
|
}
|
});
|
// 使用 Promise.all 等待所有异步操作完成
|
Promise.all(promises)
|
.then((results) => {
|
// 所有异步操作成功完成后的逻辑
|
results.forEach((res) => {
|
if (res.code !== 200) {
|
this.$modal.error("修改失败");
|
}
|
});
|
this.Editsingletasksonyic(6);
|
|
this.$modal
|
.confirm(
|
'任务保存成功是否针对患者:"' +
|
this.logsheetlist[0].sendname +
|
'"再次随访?'
|
)
|
.then(() => {
|
document.querySelector("#app").scrollTo(0, 0);
|
this.dialogFormVisible = true;
|
})
|
.catch(() => {});
|
})
|
.catch((error) => {
|
// 如果有任何一个异步操作失败,会进入这里
|
console.error("发生错误:", error);
|
});
|
},
|
yuyingetdetail() {
|
this.tableDatatop.forEach((item, index) => {
|
item.scriptResult = item.scriptResult.join("&");
|
item.templatequestionnum = index + 1;
|
item.subId = this.id;
|
item.taskid = this.taskid;
|
item.asrtext = item.matchedtext;
|
if (!item.id) {
|
item.isoperation = 1;
|
}
|
item.patid = this.patid;
|
item.templateid = item.templateID;
|
});
|
let obj = {
|
serviceSubtaskDetailList: this.tableDatatop,
|
param1: this.taskid,
|
param2: this.patid,
|
subId: this.id,
|
};
|
|
addPersonVoices(obj).then((res) => {
|
if (res.code == 200) {
|
this.$modal.msgSuccess("服务保存成功");
|
this.$modal
|
.confirm(
|
'任务保存成功是否针对患者:"' + this.userform.name + '"再次随访?'
|
)
|
.then(() => {
|
document.querySelector("#app").scrollTo(0, 0);
|
this.dialogFormVisible = true;
|
})
|
.catch(() => {});
|
}
|
});
|
},
|
|
// 获取患者记录
|
getTaskservelist(id) {
|
if (id) {
|
this.Whetherall = false;
|
} else {
|
this.Whetherall = true;
|
}
|
|
getTaskservelist({
|
patid: this.patid,
|
subId: id,
|
}).then((res) => {
|
if (res.code == 200) {
|
this.form = res.rows[0].serviceSubtaskList.find(item => item.id == this.id);
|
this.logsheetlist = res.rows[0].serviceSubtaskList;
|
this.templateid = this.logsheetlist[0].templateid;
|
const targetDate = new Date(this.form.longSendTime); // 目标日期
|
const now = new Date(); // 当前时间
|
this.form.endtime = this.formatTime(this.form.endtime);
|
if (now < targetDate && this.form.sendstate == 2) {
|
this.$confirm("当前服务未到发送时间请谨慎修改", "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(() => {})
|
.catch(() => {});
|
}
|
this.getuserinfo();
|
}
|
if (this.Voicetype) {
|
this.getPersonVoices();
|
} else {
|
this.getsearchrResults();
|
}
|
});
|
},
|
Editsingletaskson(son) {
|
let objson = {};
|
getTaskservelist({
|
patid: this.patid,
|
subId: this.id,
|
}).then((res) => {
|
if (res.code == 200) {
|
objson = res.rows[0].serviceSubtaskList[0];
|
objson.suggest = son;
|
Editsingletaskson(objson).then((res) => {
|
if (res.code) {
|
this.$modal.msgSuccess("服务记录成功");
|
this.getTaskservelist();
|
}
|
});
|
}
|
});
|
},
|
Editsingletasksonyic(sendstate) {
|
|
let objson = {};
|
getTaskservelist({
|
patid: this.patid,
|
subId: this.id,
|
}).then((res) => {
|
if (res.code == 200) {
|
objson = res.rows[0].serviceSubtaskList.find(item => item.id == this.id);
|
objson.remark = this.form.remark;
|
if (sendstate) objson.sendstate = sendstate;
|
Editsingletaskson(objson).then((res) => {
|
if (res.code) {
|
this.$modal.msgSuccess("服务修改成功");
|
alterpatient(this.userform).then((res) => {
|
if (res.code == 200) {
|
this.$modal.msgSuccess("基础信息保存成功");
|
} else {
|
this.$modal.msgError("基础信息修改失败");
|
}
|
});
|
this.getTaskservelist();
|
}
|
});
|
}
|
});
|
},
|
// 异常列渲染
|
tableRowClassName({ row, rowIndex }) {
|
if (row.id == this.id) {
|
return "warning-row";
|
}
|
return "";
|
},
|
// 调起再次发送
|
sendAgain() {
|
document.querySelector("#app").scrollTo(0, 0);
|
// scrollTo(0, 0)
|
this.dialogFormVisible = true;
|
},
|
// 查看详情
|
Seedetails(row) {
|
this.$modal
|
.confirm('是否查看任务为"' + row.taskName + '"的服务详情数据?')
|
.then(() => {
|
if (row.preachformson) {
|
if (row.preachformson.includes("3")) {
|
this.Voicetype = 1;
|
}
|
}
|
this.taskid = row.taskid;
|
this.id = row.id;
|
this.patid = row.patid;
|
this.serviceType = row.serviceType;
|
this.getTaskservelist();
|
})
|
.catch(() => {});
|
},
|
handleOptionChange(a, b, c) {
|
console.log(a);
|
|
if (this.Voicetype) {
|
var obj = this.tableDatatop[b].ivrTaskScriptTargetoptionList.find(
|
(item) => item.optioncontent == a
|
);
|
} else {
|
var obj = this.tableDatatop[b].svyLibTemplateTargetoptions.find(
|
(item) => item.optioncontent == a
|
);
|
}
|
if (obj.isabnormal) {
|
this.tableDatatop[b].isabnormal = true;
|
} else {
|
this.tableDatatop[b].isabnormal = false;
|
}
|
this.$forceUpdate();
|
},
|
overdata() {
|
this.tableDatatop.forEach((item, index) => {
|
var obj = item.svyLibTemplateTargetoptions.find(
|
(items) => items.optioncontent == item.scriptResult
|
);
|
if (obj) {
|
if (obj.isabnormal) {
|
this.tableDatatop[index].isabnormal = true;
|
} else {
|
this.tableDatatop[index].isabnormal = false;
|
}
|
this.$forceUpdate();
|
}
|
});
|
},
|
// 创建再次随访服务
|
setupsubtask() {
|
this.$refs["zcform"].validate((valid) => {
|
if (valid) {
|
this.form.remark =
|
this.form.remark + "【" + this.getCurrentTime() + "】";
|
let form = structuredClone(this.form);
|
form.longSendTime = this.formatTime(form.date1);
|
form.finishtime = "";
|
if (form.resource) {
|
if (form.resource == 2) {
|
form.serviceType = 13;
|
}
|
} else {
|
this.$modal.msgError("未选择随访方式");
|
}
|
// form.id = null;
|
form.sendstate = 2;
|
addserviceSubtask(form).then((res) => {
|
if (res.code == 200) {
|
this.$modal.msgSuccess("创建成功");
|
if (form.serviceType == 13) {
|
this.$router.push({
|
path: "/logisticsservice/record",
|
});
|
} else if (form.serviceType == 2) {
|
this.$router.push({
|
path: "/followvisit/discharge",
|
});
|
}
|
} else {
|
this.$modal.msgError("创建失败");
|
}
|
document.querySelector("#app").scrollTo(0, 0);
|
this.dialogFormVisible = false;
|
});
|
}
|
});
|
},
|
getCurrentTime() {
|
const now = new Date();
|
const year = now.getFullYear();
|
const month = String(now.getMonth() + 1).padStart(2, "0");
|
const day = String(now.getDate()).padStart(2, "0");
|
const hours = String(now.getHours()).padStart(2, "0");
|
const minutes = String(now.getMinutes()).padStart(2, "0");
|
const seconds = String(now.getSeconds()).padStart(2, "0");
|
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
},
|
updateScore(a, b, c) {
|
|
},
|
},
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.Followupdetailspage {
|
margin: 10px;
|
}
|
.Followuserinfo {
|
margin: 20px 10px;
|
align-items: center;
|
padding: 30px;
|
background: #ffff;
|
border: 1px solid #dcdfe6;
|
-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
|
0 0 6px 0 rgba(0, 0, 0, 0.04);
|
.userinfo-text {
|
font-size: 20px;
|
margin-right: 20px;
|
margin-bottom: 10px;
|
}
|
.userinfo-value {
|
color: rgb(15, 139, 211);
|
span {
|
margin-right: 20px;
|
}
|
}
|
}
|
::v-deep.el-table .warning-row {
|
background: #c4e2ee;
|
}
|
.Followuserinfos {
|
margin: 20px 10px;
|
align-items: center;
|
padding: 30px;
|
background: #ffff;
|
border: 1px solid #dcdfe6;
|
-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
|
0 0 6px 0 rgba(0, 0, 0, 0.04);
|
.userinfo-text {
|
font-size: 20px;
|
margin-right: 20px;
|
margin-bottom: 10px;
|
}
|
.userinfo-value {
|
color: rgb(15, 139, 211);
|
span {
|
margin-right: 20px;
|
}
|
}
|
}
|
.borderdiv {
|
min-height: 60vh;
|
font-size: 20px;
|
padding: 30px;
|
.title {
|
font-size: 22px;
|
font-weight: bold;
|
margin-bottom: 20px;
|
text-align: center;
|
}
|
.leftside {
|
margin: 30px 0;
|
span {
|
width: 400px;
|
margin-left: 20px;
|
padding: 10px;
|
color: #fff;
|
background: rgb(110, 196, 247);
|
border-radius: 10px;
|
}
|
}
|
.offside {
|
display: flex;
|
flex-direction: row-reverse;
|
.offside-value {
|
padding: 10px;
|
background: rgb(217, 173, 253);
|
border-radius: 10px;
|
color: #fff;
|
margin-right: 20px;
|
}
|
}
|
}
|
.CONTENT {
|
padding: 10px;
|
.title {
|
font-size: 22px;
|
font-weight: bold;
|
margin-bottom: 20px;
|
text-align: center;
|
}
|
}
|
.preview-left {
|
margin: 20px;
|
// margin: 20px;
|
padding: 30px;
|
// background: #ffff;
|
border: 1px solid #dcdfe6;
|
-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
|
0 0 6px 0 rgba(0, 0, 0, 0.04);
|
.topic-dev {
|
margin-bottom: 25px;
|
font-size: 20px !important;
|
.dev-text {
|
margin-bottom: 10px;
|
}
|
}
|
}
|
.scriptTopic-isabnormal {
|
color: red;
|
}
|
.detailed {
|
width: 88%;
|
border-radius: 8px;
|
padding: 30px;
|
margin-bottom: 30px;
|
background-color: #ddf0f8;
|
.bg-purple {
|
margin-bottom: 20px;
|
}
|
.spanvalue {
|
display: inline-block;
|
min-width: 200px;
|
border-bottom: 1px solid rgb(172, 172, 172);
|
}
|
}
|
.headline {
|
font-size: 24px;
|
height: 40px;
|
border-left: 5px solid #41a1be;
|
padding-left: 5px;
|
margin-bottom: 10px;
|
display: flex;
|
// justify-content: space-between;
|
.Add-details {
|
font-size: 18px;
|
color: #02a7f0;
|
cursor: pointer;
|
}
|
}
|
.red-star {
|
::v-deep.el-radio__label {
|
position: relative;
|
padding-right: 10px; /* 根据需要调整 */
|
}
|
::v-deep.el-radio__label::after {
|
content: "*";
|
color: red;
|
position: absolute;
|
right: -5px; /* 根据需要调整 */
|
top: 0;
|
}
|
::v-deep.el-input-group__textarea {
|
white-space: pre-wrap; /* 保持空白符序列并正常换行 */
|
word-break: break-all; /* 在长单词或URL地址内部进行换行 */
|
}
|
::v-deep.el-checkbox__label {
|
position: relative;
|
padding-right: 10px; /* 根据需要调整 */
|
}
|
::v-deep.el-checkbox__label::after {
|
content: "*";
|
color: red;
|
position: absolute;
|
right: -5px; /* 根据需要调整 */
|
top: 0;
|
}
|
}
|
::v-deep.offside-value .el-radio__label {
|
color: #fff;
|
}
|
::v-deep.el-link.el-link--default {
|
color: #02a7f0 !important;
|
}
|
.mulsz {
|
font-size: 25px;
|
margin-top: 20px;
|
}
|
</style>
|