| | |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-if=" |
| | | orgname == '景宁畲族自治县人民医院' || |
| | | orgname == '丽水市中医院' |
| | | " |
| | | label="拨号状态" |
| | | width="120" |
| | | align="center" |
| | | key="isManuallyCalled" |
| | | prop="isManuallyCalled" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag |
| | | v-if="Number(scope.row.isManuallyCalled) > 0" |
| | | type="success" |
| | | :disable-transitions="false" |
| | | >拨通{{ scope.row.isManuallyCalled }}次</el-tag |
| | | > |
| | | <el-tag v-else type="info" :disable-transitions="false" |
| | | >未拨通</el-tag |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="finishtime" |
| | | align="center" |
| | |
| | | > |
| | | </el-table-column> |
| | | |
| | | |
| | | |
| | | <el-table-column |
| | | prop="bankcardno" |
| | | align="center" |
| | |
| | | v-if=" |
| | | (orgname == '南华大学附属第一医院' || |
| | | orgname == '丽水市第二人民医院' || |
| | | orgname == '缙云县人民医院') && |
| | | orgname == '缙云县人民医院' || |
| | | orgname == '丽水市妇幼保健院' || |
| | | orgname == '松阳县中医医院') && |
| | | !Voicetype |
| | | " |
| | | > |
| | |
| | | type="primary" |
| | | round |
| | | @click="smsSubTask" |
| | | v-if="orgname != '省立同德翠苑院区'" |
| | | v-if=" |
| | | orgname != '省立同德翠苑院区' && |
| | | orgname != '丽水市中医院' |
| | | " |
| | | > |
| | | 问卷短信推送 |
| | | </el-button> |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | @click="weChatSubTask" |
| | | v-if="orgname == '丽水市中医院'" |
| | | > |
| | | 问卷微信推送 |
| | | </el-button> |
| | | </span> |
| | | </div> |
| | | |
| | | <div class="preview-left" v-if="!Voicetype"> |
| | | <div class="preview-left" v-if="showQuestionnaireForm"> |
| | | <div |
| | | class="topic-dev" |
| | | v-for="(item, index) in tableDatatop" |
| | |
| | | </div> |
| | | </div> |
| | | <el-button |
| | | v-if="Voicetype" |
| | | v-if="showQuestionnaireForm" |
| | | type="primary" |
| | | @click="yuyingetdetail" |
| | | @click="getdetail" |
| | | >保存问卷详情</el-button |
| | | > |
| | | <el-button v-else type="primary" @click="getdetail" |
| | | <el-button v-else type="primary" @click="yuyingetdetail" |
| | | >保存问卷详情</el-button |
| | | > |
| | | </div> |
| | |
| | | v-if="(form.isVisitAgain == 1) & (visitAgain == 2)" |
| | | > |
| | | 再次随访 |
| | | </el-button> |
| | | <!-- 超时服务:管理员可将完成时间改为应随访时间、状态改为已完成 --> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | @click="handleTimeoutComplete" |
| | | v-if="form.sendstate == 7 && isAdmin" |
| | | > |
| | | 超时标记已完成 |
| | | </el-button> |
| | | </div> |
| | | |
| | |
| | | <div class="collapse-section"> |
| | | <el-collapse v-model="collapseActive" accordion> |
| | | <el-collapse-item title="患者档案信息" name="patient"> |
| | | <el-form ref="userform2" :model="userform" label-width="90px" size="small"> |
| | | <el-form |
| | | ref="userform2" |
| | | :model="userform" |
| | | label-width="90px" |
| | | size="small" |
| | | > |
| | | <el-row :gutter="16"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="患者姓名"> |
| | | <el-input v-model="userform.name" placeholder="请输入姓名" maxlength="30"></el-input> |
| | | <el-input |
| | | v-model="userform.name" |
| | | placeholder="请输入姓名" |
| | | maxlength="30" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="性别"> |
| | | <el-select v-model="userform.sex" placeholder="请选择" style="width: 100%"> |
| | | <el-select |
| | | v-model="userform.sex" |
| | | placeholder="请选择" |
| | | style="width: 100%" |
| | | > |
| | | <el-option label="男" :value="1"></el-option> |
| | | <el-option label="女" :value="2"></el-option> |
| | | </el-select> |
| | |
| | | <el-row :gutter="16"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="年龄"> |
| | | <el-input v-model="userform.age" placeholder="请输入年龄" maxlength="20"></el-input> |
| | | <el-input |
| | | v-model="userform.age" |
| | | placeholder="请输入年龄" |
| | | maxlength="20" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="联系方式"> |
| | | <el-input v-model="userform.telcode" placeholder="请输入联系方式" maxlength="20"></el-input> |
| | | <el-input |
| | | v-model="userform.telcode" |
| | | placeholder="请输入联系方式" |
| | | maxlength="20" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="16"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="亲属电话"> |
| | | <el-input v-model="userform.relativetelcode" placeholder="请输入亲属联系方式" maxlength="20"></el-input> |
| | | <el-input |
| | | v-model="userform.relativetelcode" |
| | | placeholder="请输入亲属联系方式" |
| | | maxlength="20" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="16"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="诊断名称"> |
| | | <el-input v-model="form.leavediagname" placeholder="请输入诊断" maxlength="50"></el-input> |
| | | <el-input |
| | | v-model="form.leavediagname" |
| | | placeholder="请输入诊断" |
| | | maxlength="50" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="16"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="出生地"> |
| | | <el-input v-model="userform.birthplace" placeholder="国、省、地市、区县、街道等" maxlength="50"></el-input> |
| | | <el-input |
| | | v-model="userform.birthplace" |
| | | placeholder="国、省、地市、区县、街道等" |
| | | maxlength="50" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="16"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="居住地"> |
| | | <el-input v-model="userform.placeOfResidence" placeholder="国、省、地市、区县、街道等" maxlength="50"></el-input> |
| | | <el-input |
| | | v-model="userform.placeOfResidence" |
| | | placeholder="国、省、地市、区县、街道等" |
| | | maxlength="50" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </el-collapse-item> |
| | | <el-collapse-item title="投诉建议" name="advice" v-if="orgname=='缙云县人民医院'"> |
| | | <el-collapse-item |
| | | title="投诉建议" |
| | | name="advice" |
| | | v-if="orgname == '缙云县人民医院'" |
| | | > |
| | | <AdviceList :subid="taskid" :taskid="id" :patid="patid" /> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | | </div> |
| | | |
| | | |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | title="患者再次随访" |
| | | v-dialogDrags |
| | | :visible.sync="dialogFormVisible" |
| | | width="700px" |
| | | width="900px" |
| | | > |
| | | <el-form ref="zcform" :rules="zcrules" :model="form" label-width="80px"> |
| | | <el-form ref="zcform" :rules="zcrules" :model="form" label-width="120px"> |
| | | <!-- 基础服务信息 - 默认折叠 --> |
| | | <el-collapse v-model="activeNames" @change="handleCollapseChange"> |
| | | <el-collapse-item title="基础服务信息" name="basic"> |
| | |
| | | |
| | | <!-- 下次随访信息 - 默认展开 --> |
| | | <el-collapse-item title="下次随访" name="next"> |
| | | <el-form-item label="再次随访任务"> |
| | | <el-input |
| | | disabled |
| | | v-model="nextTaskName" |
| | | placeholder="再次随访任务" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="随访方式" prop="visitType"> |
| | |
| | | <el-form-item label="随访记录" :required="form.resource == '2'"> |
| | | <el-input type="textarea" v-model="form.remark"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="医生处理意见" prop="doctorOpinion"> |
| | | <el-input |
| | | type="textarea" |
| | | v-model="form.doctorOpinion" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | | </el-form> |
| | |
| | | :visible.sync="CaldialogVisible" |
| | | width="60%" |
| | | > |
| | | <CallCenterLs ref="CallCenterLs" :initial-phone="currentPhoneNumber" /> |
| | | <CallCenterLs |
| | | ref="CallCenterLs" |
| | | :initial-phone="currentPhoneNumber" |
| | | @call-connected="recordCallConnected" |
| | | /> |
| | | </el-dialog> |
| | | </div> |
| | | </div> |
| | |
| | | query360PatInfonh, |
| | | sendMsg, |
| | | smsSubTask, |
| | | weChatSubTask, |
| | | getconfigKey, |
| | | } from "@/api/AiCentre/index"; |
| | | import { getIvrtask } from "@/api/smartor/ivrtask"; |
| | | import { |
| | | messagelistpatient, |
| | | alterpatient, |
| | |
| | | input: "今天身体还不错", |
| | | radio: "2", |
| | | taskname: "", |
| | | nextTaskName: "", |
| | | activeName: "wj", |
| | | voice: "", |
| | | templateid: "", |
| | |
| | | }, |
| | | trigger: "change", |
| | | }, |
| | | ], |
| | | doctorOpinion: [ |
| | | { required: true, message: "请输入医生处理意见", trigger: "blur" }, |
| | | ], |
| | | }, |
| | | userrules: { |
| | |
| | | failed: "error", |
| | | }; |
| | | return typeMap[this.callStatus]; |
| | | }, |
| | | // 是否以问卷形式展示(非语音服务,或语音服务但无完整语音数据需手动填报) |
| | | showQuestionnaireForm() { |
| | | return !this.Voicetype; |
| | | }, |
| | | // 是否为管理员角色 |
| | | isAdmin() { |
| | | const roles = this.$store.getters.roles || []; |
| | | return roles.includes("admin") || roles.includes("sysadmin"); |
| | | }, |
| | | }, |
| | | created() { |
| | |
| | | if (res.code == 200) { |
| | | this.voiceDatatop = res.data.serviceSubtaskDetails; |
| | | this.voice = res.data.voice; |
| | | this.activeName = "yy"; |
| | | this.activeName = this.voice ? "yy" : "wj"; |
| | | this.taskname = res.data.taskName; |
| | | // 问卷展示数据处理 |
| | | this.tableDatatop = res.data.filteredDetails; |
| | |
| | | .map((obj) => obj.targetvalue) |
| | | .join("&"); |
| | | } |
| | | console.log(item.targetvalue, "item.targetvalue"); |
| | | |
| | | if (item.targetvalue) { |
| | | item.scriptResult = item.targetvalue.split("&"); |
| | | } |
| | | console.log(item.scriptResult); |
| | | }); |
| | | } |
| | | }); |
| | |
| | | this.$modal.msgSuccess("服务保存成功"); |
| | | this.Editsingletasksonyic(this.serviceStates); |
| | | const orgName = localStorage.getItem("orgname"); |
| | | |
| | | if (this.form.isVisitAgain != 1 || this.visitAgain == 1) { |
| | | if ( |
| | | this.form.isVisitAgain != 1 || |
| | | orgName == "丽水市中医院" || |
| | | this.visitAgain == 1 |
| | | ) { |
| | | this.Torouter(); |
| | | return; |
| | | } |
| | |
| | | }); |
| | | } |
| | | } else { |
| | | location.reload(); |
| | | // location.reload(); |
| | | this.$router.go(-1); |
| | | } |
| | | }, |
| | | // 电话============================ |
| | |
| | | console.log(err); |
| | | }); |
| | | }, |
| | | weChatSubTask() { |
| | | this.$modal |
| | | .confirm("是否向患者通过微信推送问卷内容?") |
| | | .then(() => { |
| | | weChatSubTask(this.id).then((res) => { |
| | | if (String(res.code) === "200") { |
| | | this.$modal.msgSuccess(res.msg || "发送成功"); |
| | | } else { |
| | | this.$modal.msgError(res.message || res.msg || "发送失败"); |
| | | } |
| | | }); |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | }); |
| | | }, |
| | | handleConfirmReplace() { |
| | | // 遍历所有题目(tableDatatop) |
| | | this.tableDatatop.forEach((item) => { |
| | |
| | | this.CaldialogVisible = true; |
| | | return; |
| | | } |
| | | // 下方是中医院呼叫 |
| | | // 下方是丽水市中医院 |
| | | if (this.isSipRegistering) { |
| | | this.$message.warning("系统正在初始化,请稍候..."); |
| | | return; |
| | |
| | | this.callStatus = status.type; |
| | | |
| | | if (status.type === "connected") { |
| | | this.currentCall = { |
| | | phone: this.currentPhoneNumber, |
| | | type: this.callType, |
| | | startTime: new Date(), |
| | | }; |
| | | if (!this.currentCall) { |
| | | this.currentCall = { |
| | | phone: this.currentPhoneNumber, |
| | | type: this.callType, |
| | | startTime: new Date(), |
| | | }; |
| | | // 丽水市中医院:电话接通后记录拨打成功次数 |
| | | this.recordCallConnected(); |
| | | } |
| | | } else if (status.type === "ended" || status.type === "failed") { |
| | | this.currentCall = null; |
| | | } |
| | |
| | | if (status.type === "failed") { |
| | | this.$message.error(`呼叫失败: ${status.text}`); |
| | | } |
| | | }, |
| | | // 电话拨打成功后(接通)次数 +1,并通过 Editsingletaskson 更新服务数据 |
| | | // 仅限景宁畲族自治县人民医院与丽水市中医院 |
| | | recordCallConnected() { |
| | | const allowedOrgs = ["景宁畲族自治县人民医院", "丽水市中医院"]; |
| | | if (!allowedOrgs.includes(this.orgname)) return; |
| | | |
| | | getTaskservelist({ |
| | | patid: this.patid, |
| | | subId: this.id, |
| | | }).then((res) => { |
| | | if (res.code == 200) { |
| | | const objson = res.rows[0].serviceSubtaskList.find( |
| | | (item) => item.id == this.id |
| | | ); |
| | | if (!objson) return; |
| | | objson.isManuallyCalled = (Number(objson.isManuallyCalled) || 0) + 1; |
| | | Editsingletaskson(objson).then((r) => { |
| | | if (r.code == 200) { |
| | | // 及时更新顶部服务列表与表单中的拨号状态 |
| | | const localRow = (this.logsheetlist || []).find( |
| | | (item) => item.id == this.id |
| | | ); |
| | | if (localRow) { |
| | | localRow.isManuallyCalled = objson.isManuallyCalled; |
| | | } |
| | | if (this.form && this.form.id == this.id) { |
| | | this.form.isManuallyCalled = objson.isManuallyCalled; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | // 结束当前通话 |
| | | endCurrentCall() { |
| | |
| | | savequestiondetail(obj).then((res) => { |
| | | if (res.code == 200) { |
| | | this.$modal.msgSuccess("服务保存成功"); |
| | | // this.Torouter(); |
| | | |
| | | if ( |
| | | this.form.isVisitAgain != 1 || |
| | | orgName == "丽水市中医院" || |
| | |
| | | this.Torouter(); |
| | | return; |
| | | } |
| | | |
| | | this.$modal |
| | | .confirm( |
| | | '任务保存成功是否针对患者:"' + |
| | |
| | | console.log(this.form.templatename, "templatename"); |
| | | |
| | | this.form.remark = this.form.remark || ""; |
| | | this.form.doctorOpinion = this.form.doctorOpinion || ""; |
| | | this.logsheetlist = res.rows[0].serviceSubtaskList; |
| | | this.templateid = this.form.templateid; |
| | | this.selectedTag = this.form.excep; |
| | |
| | | } |
| | | }); |
| | | }, |
| | | // 超时服务:管理员将完成时间改为应随访时间、状态改为已完成 |
| | | handleTimeoutComplete() { |
| | | this.$modal |
| | | .confirm( |
| | | "是否将该超时服务的随访完成时间调整为应随访时间,并将随访状态改为已完成?" |
| | | ) |
| | | .then(() => { |
| | | getTaskservelist({ |
| | | patid: this.patid, |
| | | subId: this.id, |
| | | }).then((res) => { |
| | | if (res.code == 200) { |
| | | const objson = res.rows[0].serviceSubtaskList.find( |
| | | (item) => item.id == this.id |
| | | ); |
| | | if (objson) { |
| | | objson.finishtime = objson.visitTime; |
| | | objson.sendstate = 6; |
| | | Editsingletaskson(objson).then((res) => { |
| | | if (res.code) { |
| | | this.$modal.msgSuccess("操作成功"); |
| | | this.getTaskservelist(); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | alterpatient(sendstate) { |
| | | this.Editsingletasksonyic(this.serviceStates); |
| | | // alterpatient(this.userform).then((res) => { |
| | |
| | | return tag ? tag.description : ""; |
| | | }, |
| | | |
| | | // 获取再次随访任务信息(下次随访部分展示) |
| | | fetchNextTaskInfo() { |
| | | const taskid = this.form.taskid || this.taskid; |
| | | if (!taskid) { |
| | | this.nextTaskName = ""; |
| | | return; |
| | | } |
| | | getIvrtask(taskid).then((r) => { |
| | | const task = r.data || {}; |
| | | const nextid = task.nexttaskid; |
| | | if (nextid) { |
| | | getIvrtask(nextid).then((r2) => { |
| | | this.nextTaskName = |
| | | (r2.data && r2.data.taskName) || task.nexttaskname || ""; |
| | | }); |
| | | } else { |
| | | this.nextTaskName = task.nexttaskname || ""; |
| | | } |
| | | }); |
| | | }, |
| | | // 调起再次发送 |
| | | sendAgain() { |
| | | this.fetchNextTaskInfo(); |
| | | getTaskservelist({ |
| | | patid: this.patid, |
| | | visitCount: 2, |
| | |
| | | // 同时重置与选项相关的状态 |
| | | // questionItem.isabnormal = false; |
| | | questionItem.showAppendInput = false; |
| | | questionItem.score = null; // 取消选中后清空题目分数 |
| | | // 注意:取消选中时,我们通常不希望触发题目跳转逻辑,所以直接返回 |
| | | // 如果需要,可以在这里添加取消选中后的特定逻辑,例如重置题目序列 |
| | | } else { |
| | |
| | | // 处理异常状态高亮 |
| | | this.tableDatatop[questionIndex].isabnormal = |
| | | selectedOptionObj.isabnormal; |
| | | |
| | | // 处理分数:把选中选项的 score 带到题目 score 上 |
| | | this.tableDatatop[questionIndex].score = selectedOptionObj.score; |
| | | |
| | | // 处理附加输入框显示 |
| | | |
| | |
| | | if (obj.isabnormal) { |
| | | this.tableDatatop[index].isabnormal = obj.isabnormal; |
| | | } |
| | | // 回显单选题目分数:把已选中选项的 score 带到题目 score 上 |
| | | if (obj.score !== undefined && obj.score !== null) { |
| | | this.tableDatatop[index].score = obj.score; |
| | | } |
| | | this.$forceUpdate(); |
| | | } |
| | | }); |
| | |
| | | |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | }, |
| | | updateScore(a, b, c) {}, |
| | | // 多选:把选中选项的分数累加到题目 score 上 |
| | | updateScore(selectedValues, questionIndex, question) { |
| | | const options = question.svyTaskTemplateTargetoptions || []; |
| | | const score = options.reduce((sum, opt) => { |
| | | if (selectedValues && selectedValues.includes(opt.optioncontent)) { |
| | | return sum + (Number(opt.score) || 0); |
| | | } |
| | | return sum; |
| | | }, 0); |
| | | question.score = score; |
| | | this.$forceUpdate(); |
| | | }, |
| | | // 合并修改相关============================= |
| | | toggleMergeMode() { |
| | | this.isMergeMode = !this.isMergeMode; |
| | |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .el-input.is-disabled .el-input__inner { |
| | | ::v-deep .el-input.is-disabled .el-input__inner { |
| | | background-color: #fff; |
| | | border-color: #dcdfe6; |
| | | color: #080808 !important; |
| | | cursor: not-allowed; |
| | | } |
| | | |
| | | .el-textarea.is-disabled .el-textarea__inner { |
| | | ::v-deep .el-textarea.is-disabled .el-textarea__inner { |
| | | background-color: #fff; |
| | | border-color: #dcdfe6; |
| | | color: #080808 !important; |