子路径

This commit is contained in:
闫晓茹 2024-06-20 08:54:06 +08:00
parent 56feabe81c
commit d1e9578006
4 changed files with 1257 additions and 427 deletions

View File

@ -7,6 +7,14 @@ export function taskPartitionList(taskTypeId) {
method: 'get',
})
}
export function triggerCondition(data) {
return request({
url: `/system/triggerCondition/edit`,
method: 'put',
data
})
}
export function list(parentDictCode) {
return request({
url: `/system/dict/data/list?parentDictCode=${parentDictCode}`,

File diff suppressed because it is too large Load Diff

View File

@ -2,8 +2,18 @@
<div class="header">
<div class="topheader">
<div class="user">
<img class="headsculpture" src="../../../assets/manage/touxiang.png" alt="" v-if="list.sex == 'MALE'" />
<img class="headsculpture" src="../../../assets/manage/nvtouxiang.png" alt="" v-if="list.sex == 'FEMALE'" />
<img
class="headsculpture"
src="../../../assets/manage/touxiang.png"
alt=""
v-if="list.sex == 'MALE'"
/>
<img
class="headsculpture"
src="../../../assets/manage/nvtouxiang.png"
alt=""
v-if="list.sex == 'FEMALE'"
/>
<div class="name">
{{ list.patientName }}
</div>
@ -37,83 +47,191 @@
<div class="bottomheader">
<div style="display: flex">
<!-- 问卷模板 -->
<div class="right" v-if="$route.query.taskType == 'QUESTIONNAIRE_SCALE' ||
$route.query.taskType == 'ARTIFICIAL_FOLLOW_UP'
">
<div style="float: right; margin-top: 20px" v-if="$route.query.taskType == 'QUESTIONNAIRE_SCALE' ||
$route.query.taskType == 'ARTIFICIAL_FOLLOW_UP'
">
<el-form :inline="true" class="demo-form-inline" :model="questiondata" :rules="rules" ref="questiondata">
<div
class="right"
v-if="
$route.query.taskType == 'QUESTIONNAIRE_SCALE' ||
$route.query.taskType == 'ARTIFICIAL_FOLLOW_UP'
"
>
<div
style="float: right; margin-top: 20px"
v-if="
$route.query.taskType == 'QUESTIONNAIRE_SCALE' ||
$route.query.taskType == 'ARTIFICIAL_FOLLOW_UP'
"
>
<el-form
:inline="true"
class="demo-form-inline"
:model="questiondata"
:rules="rules"
ref="questiondata"
>
<el-form-item label="任务处理信息" prop="routeHandleRemark">
<el-input disabled type="textarea" placeholder="请输入任务处理信息" v-model="questiondata.routeHandleRemark" />
<el-input
disabled
type="textarea"
placeholder="请输入任务处理信息"
v-model="questiondata.routeHandleRemark"
/>
</el-form-item>
</el-form>
</div>
<div class="sport" v-if="$route.query.taskType == 'QUESTIONNAIRE_SCALE'">
<div
class="sport"
v-if="$route.query.taskType == 'QUESTIONNAIRE_SCALE'"
>
问卷模板: Barthel指数评定问卷
</div>
<div class="words" v-if="$route.query.taskType == 'QUESTIONNAIRE_SCALE'">
<div
class="words"
v-if="$route.query.taskType == 'QUESTIONNAIRE_SCALE'"
>
您好!本问卷用于评估日常生活能力请根据自身日常实际表现选择合适的选项
</div>
<div class="sport" v-if="$route.query.taskType == 'ARTIFICIAL_FOLLOW_UP'">
<div
class="sport"
v-if="$route.query.taskType == 'ARTIFICIAL_FOLLOW_UP'"
>
人工随访模板: 神经内科人工随访
</div>
<div class="words" v-if="$route.query.taskType == 'ARTIFICIAL_FOLLOW_UP'">
<div
class="words"
v-if="$route.query.taskType == 'ARTIFICIAL_FOLLOW_UP'"
>
**您好!
</div>
<div class="words" v-if="$route.query.taskType == 'ARTIFICIAL_FOLLOW_UP'">
<div
class="words"
v-if="$route.query.taskType == 'ARTIFICIAL_FOLLOW_UP'"
>
我是医院的工作人员今天给您打电话想要了解一下您的恢复情况
</div>
<div class="words" v-for="(item, index) in questiondata.subjectResultList" :key="index">
<div
class="words"
v-for="(item, index) in questiondata.subjectResultList"
:key="index"
>
{{ index + 1 }}.{{ item.questionName }}
<span v-if="item.questionType == 'MULTIPLE_CHOICE'">单选题</span>
<span v-if="item.questionType == 'MULTIPLE_CHOICE_QUESTIONS'">多选题</span>
<span v-if="item.questionType == 'SCORING_QUESTIONS'">打分题</span>
<span v-if="item.questionType == 'COMBINATION_RADIO_SUBJECT'">组合单选题</span>
<span v-if="item.questionType == 'COMBINATION_MULTIPLE_SUBJECT'">组合多选题</span>
<span v-if="item.questionType == 'COMBINATION_BLANKS_SUBJECT'">组合填空题</span>
<span v-if="item.questionType == 'FILL_IN_THE_BLANKS'">填空题</span>
<span v-if="item.questionType == 'COMBINATION_SCORING_SUBJECT'">组合打分题</span>
<span v-if="item.questionType == 'DATE_BLANKS_SUBJECT'">日期填空题</span>
<span v-if="item.questionType == 'TIME_BLANKS_SUBJECT'">时间填空题</span>
<el-radio-group v-if="item.questionType == 'MULTIPLE_CHOICE' ||
item.questionType == 'COMBINATION_RADIO_SUBJECT' ||
item.questionType == 'SCORING_QUESTIONS' ||
item.questionType == 'COMBINATION_SCORING_SUBJECT'
" v-model="item.checked" class="custom-radio-group">
<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>
<span v-if="item.questionType == 'MULTIPLE_CHOICE'"
>单选题</span
>
<span v-if="item.questionType == 'MULTIPLE_CHOICE_QUESTIONS'"
>多选题</span
>
<span v-if="item.questionType == 'SCORING_QUESTIONS'"
>打分题</span
>
<span v-if="item.questionType == 'COMBINATION_RADIO_SUBJECT'"
>组合单选题</span
>
<span v-if="item.questionType == 'COMBINATION_MULTIPLE_SUBJECT'"
>组合多选题</span
>
<span v-if="item.questionType == 'COMBINATION_BLANKS_SUBJECT'"
>组合填空题</span
>
<span v-if="item.questionType == 'FILL_IN_THE_BLANKS'"
>填空题</span
>
<span v-if="item.questionType == 'COMBINATION_SCORING_SUBJECT'"
>组合打分题</span
>
<span v-if="item.questionType == 'DATE_BLANKS_SUBJECT'"
>日期填空题</span
>
<span v-if="item.questionType == 'TIME_BLANKS_SUBJECT'"
>时间填空题</span
>
<el-radio-group
v-if="
item.questionType == 'MULTIPLE_CHOICE' ||
item.questionType == 'COMBINATION_RADIO_SUBJECT' ||
item.questionType == 'SCORING_QUESTIONS' ||
item.questionType == 'COMBINATION_SCORING_SUBJECT'
"
v-model="item.checked"
class="custom-radio-group"
>
<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" v-if="item.questionType == 'MULTIPLE_CHOICE_QUESTIONS' ||
item.questionType == 'COMBINATION_MULTIPLE_SUBJECT'
">
<el-checkbox disabled v-for="(aitem, aindex) in item.optionResults" :key="aindex" :label="aitem.id"
@change="radioChangecheck($event, aitem, index, aindex)">{{ aitem.optionName }}</el-checkbox>
<el-checkbox-group
v-model="checkeddata"
v-if="
item.questionType == 'MULTIPLE_CHOICE_QUESTIONS' ||
item.questionType == 'COMBINATION_MULTIPLE_SUBJECT'
"
>
<el-checkbox
disabled
v-for="(aitem, aindex) in item.optionResults"
:key="aindex"
:label="aitem.id"
@change="radioChangecheck($event, aitem, index, aindex)"
>{{ aitem.optionName }}</el-checkbox
>
</el-checkbox-group>
<!-- 填空题组合填空 -->
<div v-if="item.questionType == 'FILL_IN_THE_BLANKS' ||
item.questionType == 'COMBINATION_BLANKS_SUBJECT'
" class="tk">
<el-input disabled v-model="item.fillBlanksAnswer" placeholder="请输入答案" type="textarea" />
<div
v-if="
item.questionType == 'FILL_IN_THE_BLANKS' ||
item.questionType == 'COMBINATION_BLANKS_SUBJECT'
"
class="tk"
>
<el-input
disabled
v-model="item.fillBlanksAnswer"
placeholder="请输入答案"
type="textarea"
/>
<!-- <el-input></el-input> -->
</div>
<!-- 日期填空题 -->
<div v-if="item.questionType == 'DATE_BLANKS_SUBJECT'" style="margin: 20px 0 10px 30px">
<el-date-picker disabled @change="timepicker($event, index)" clearable v-model="item.fillBlanksAnswer"
type="date" value-format="yyyy-MM-dd" placeholder="选择日期">
<div
v-if="item.questionType == 'DATE_BLANKS_SUBJECT'"
style="margin: 20px 0 10px 30px"
>
<el-date-picker
disabled
@change="timepicker($event, index)"
clearable
v-model="item.fillBlanksAnswer"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期"
>
</el-date-picker>
</div>
<!-- 时间填空题 -->
<div style="margin: 20px 0 10px 30px" v-if="item.questionType == 'TIME_BLANKS_SUBJECT'">
<el-time-select disabled @change="timepickerselect($event, index)" clearable
v-model="item.fillBlanksAnswer" :picker-options="{
start: '08:30',
step: '00:30',
end: '23:30',
}" placeholder="选择时间">
<div
style="margin: 20px 0 10px 30px"
v-if="item.questionType == 'TIME_BLANKS_SUBJECT'"
>
<el-time-select
disabled
@change="timepickerselect($event, index)"
clearable
v-model="item.fillBlanksAnswer"
:picker-options="{
start: '08:30',
step: '00:30',
end: '23:30',
}"
placeholder="选择时间"
>
</el-time-select>
</div>
</div>
@ -164,20 +282,33 @@
</el-form-item>
</el-form>
</div> -->
<div v-if="$route.query.taskType == 'PHONE_OUTBOUND'">
<div v-if="$route.query.taskType == 'PHONE_OUTBOUND'">
<div class="sport">电话外呼</div>
<div class="nexttime">
<el-form ref="formlist" :model="formlist" label-width="110px" :inline="true">
<!-- <br/> -->
<el-form
ref="formlist"
:model="formlist"
label-width="110px"
:inline="true"
>
<!-- <br/> -->
<el-form-item label="是否接通" prop="phone">
<el-radio v-model="formlist.phoneConnectStatus" label="CONNECTED">已接通</el-radio>
<el-radio v-model="formlist.phoneConnectStatus" label="NOTCONNECTED">未接通</el-radio>
<el-radio v-model="formlist.phoneConnectStatus" label="CONNECTED"
>已接通</el-radio
>
<el-radio v-model="formlist.phoneConnectStatus" label="NOTCONNECTED"
>未接通</el-radio
>
</el-form-item>
<br />
<el-form-item label="任务处理信息" prop="routeHandleRemark">
<el-input v-model="formlist.routeHandleRemark" placeholder="请输入任务处理信息" />
<el-input
v-model="formlist.routeHandleRemark"
placeholder="请输入任务处理信息"
/>
</el-form-item>
<br />
<!-- <el-form-item label="话术名称" prop="scriptName">
@ -190,7 +321,11 @@
</el-form-item> -->
<!-- <br /> -->
<el-form-item label="通用话术名称" prop="phoneTemplateName">
<el-input disabled v-model="formlist.phoneTemplateName" placeholder="请输入通用话术名称" />
<el-input
disabled
v-model="formlist.phoneTemplateName"
placeholder="请输入通用话术名称"
/>
</el-form-item>
<br />
<!-- <el-form-item label="话术简介" prop="scriptIntroduction">
@ -225,28 +360,52 @@
inactive-value="0"
>
</el-switch> -->
<el-radio disabled v-model="formlist.phonePushSign" label="1">已开启</el-radio>
<el-radio disabled v-model="formlist.phonePushSign" label="0">未开启</el-radio>
<el-radio disabled v-model="formlist.phonePushSign" label="1"
>已开启</el-radio
>
<el-radio disabled v-model="formlist.phonePushSign" label="0"
>未开启</el-radio
>
</el-form-item>
<br />
<el-form-item label="电话" prop="patientPhone">
<el-input disabled v-model="formlist.patientPhone" placeholder="请输入电话" />
<el-input
disabled
v-model="formlist.patientPhone"
placeholder="请输入电话"
/>
</el-form-item>
<br />
<!-- <div style="background:red;width:200px;height:1600px"> -->
<el-form-item label="重复次数" prop="phoneRedialTimes">
<el-select v-model="formlist.phoneRedialTimes" disabled style="width: 200px">
<el-option v-for="item in optionslistS" :key="item.dictValue" :label="item.dictLabel"
:value="item.dictValue">
<el-select
v-model="formlist.phoneRedialTimes"
disabled
style="width: 200px"
>
<el-option
v-for="item in optionslistS"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option>
</el-select>
</el-form-item>
<br />
<el-form-item label="发送短信" prop="phone">
<el-select disabled v-model="formlist.phoneMessageRemind" style="width: 200px">
<el-option v-for="item in optionslist" :key="item.dictValue" :label="item.dictLabel"
:value="item.dictValue">
<el-select
disabled
v-model="formlist.phoneMessageRemind"
style="width: 200px"
>
<el-option
v-for="item in optionslist"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option>
</el-select>
<!-- <el-input
@ -258,35 +417,43 @@
<br />
<el-form-item label="话术图" prop="phone">
<img :src="formlist.scriptFilePath" style="width: 250px; height: 200px" />
<img
:src="formlist.scriptFilePath"
style="width: 250px; height: 200px"
/>
</el-form-item>
<br />
<div class="pushMethod">
<el-form-item label="短信模板:" prop="phone">
<span class="spanname">
<message style="width: 200px;height:100px" @on-template="messageontemplateMESSAGE"
:templateId="formlist.phoneMessageTemplateId" :templateName="formlist.phoneMessageTemplateName">
</message>
</span>
<el-form-item label="短信模板:" prop="phone">
<span class="spanname">
<message
style="width: 200px;height:100px"
@on-template="messageontemplateMESSAGE"
:templateId="formlist.phoneMessageTemplateId"
:templateName="formlist.phoneMessageTemplateName"
></message>
</span>
</el-form-item>
</div>
</el-form-item>
</div>
</el-form>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import message from "../components/message.vue";
import { selectFollowPatientInfo, question, addPatientQuestionResult, selectPhonePush, } from "@/api/system/followupsee";
<script>
import { selectFollowPatientInfo, question, addPatientQuestionResult, selectPhonePush, } from "@/api/system/followupsee";
import {
selectPatientQuestionSubmit,
} from "@/api/system/taskExecuteRecord";
import { getScript } from "@/api/manage/script";
import message from "../components/message.vue";
import Cookies from 'js-cookie'
export default {
components: {
@ -299,8 +466,8 @@ export default {
checkList: [],
checked: false,
formlist: {},
optionslistS: [],
optionslist: [],
optionslistS:[],
optionslist:[],
rules: {
routeHandleRemark: [
{ required: true, message: '请输入任务处理信息', trigger: 'change' }
@ -317,7 +484,7 @@ export default {
routeHandlePerson: null,
routeHandleId: null,
},
optionslist: [],
optionslist:[],
};
@ -343,8 +510,8 @@ export default {
}
},
methods: {
//
infolistword() {
//
infolistword() {
var dictType = "text_message_remind";
getAgencytype(dictType).then((res) => {
this.optionslist = res.data;
@ -473,266 +640,238 @@ export default {
},
};
</script>
<style lang="scss" scoped>
</script>
<style lang="scss" scoped>
::v-deep .el-input.is-disabled .el-input__inner {
background: #fff !important;
color: #606266;
}
.pushMethod {
height: 30px;
// margin-top: 30px;
line-height: 30px;
font-size: 13px;
color: #64666a;
.spanname {
width: 100%;
pointer-events: none;
}
}
::v-deep .el-input.is-disabled .el-input__inner {
background: #fff !important;
color: #606266;
}
::v-deep .el-textarea.is-disabled .el-textarea__inner {
color: #606266;
background: #fff;
}
.tk {
::v-deep .el-textarea__inner {
margin: 20px 0 10px 30px;
}
}
.pushMethod {
height: 30px;
// margin-top: 30px;
line-height: 30px;
font-size: 13px;
color: #64666a;
::v-deep .el-radio {
padding: 10px;
}
::v-deep .el-checkbox-group {
display: flex;
flex-direction: column;
padding: 10px 0px 10px 24px;
}
::v-deep .el-checkbox {
padding: 10px 0 10px 0px;
// padding: 10px;
}
.custom-radio-group {
display: flex;
flex-direction: column;
padding: 10px 0 10px 10px;
.custom {
padding: 10px 0 10px 10px;
}
}
.bodytop {
position: relative;
top: 20px;
// height: 500px;
width: 400px;
margin: 0 auto;
// background: red;f
overflow: auto;
border: 1px solid #e2e2e2;
.titledata {
margin: 30px 0px 15px 30px;
top: 14px;
font-size: 20px;
}
.audiotop {
margin: 10px 0px 10px 30px;
}
img {
// width: 362px;
// height: 127px;
margin: 0px 0px 0px 30px;
}
.know {
margin: 11px 0px 10px 30px;
font-size: 20px;
font-weight: 550;
}
.knowlist {
margin: 10px 0px 10px 30px;
font-size: 16px;
}
}
.right {
width: 100%;
height: 500px;
// background: yellow;
}
.header {
background-color: #f1f3f5;
padding-top: 10px;
.spanname {
width: 100%;
::v-deep .el-tabs__header {
margin: 0 !important;
width: 100%;
// overflow: auto;
// height: 500px;
// background: red;
}
pointer-events: none;
}
}
::v-deep .el-input.is-disabled .el-input__inner {
background: #fff !important;
color: #606266;
}
::v-deep .el-textarea.is-disabled .el-textarea__inner {
color: #606266;
background: #fff;
}
.tk {
::v-deep .el-textarea__inner {
margin: 20px 0 10px 30px;
}
}
::v-deep .el-radio {
padding: 10px;
}
::v-deep .el-checkbox-group {
display: flex;
flex-direction: column;
padding: 10px 0px 10px 24px;
}
::v-deep .el-checkbox {
padding: 10px 0 10px 0px;
// padding: 10px;
}
.custom-radio-group {
display: flex;
flex-direction: column;
padding: 10px 0 10px 10px;
.custom {
padding: 10px 0 10px 10px;
}
}
.bodytop {
position: relative;
top: 20px;
// height: 500px;
width: 400px;
margin: 0 auto;
// background: red;f
overflow: auto;
border: 1px solid #e2e2e2;
.titledata {
margin: 30px 0px 15px 30px;
top: 14px;
font-size: 20px;
}
.audiotop {
margin: 10px 0px 10px 30px;
}
img {
// width: 362px;
// height: 127px;
margin: 0px 0px 0px 30px;
}
.know {
margin: 11px 0px 10px 30px;
font-size: 20px;
font-weight: 550;
}
.knowlist {
margin: 10px 0px 10px 30px;
font-size: 16px;
}
}
.right {
width: 100%;
height: 500px;
// background: yellow;
}
.header {
background-color: #f1f3f5;
padding-top: 10px;
::v-deep .el-tabs__header {
margin: 0 !important;
width: 100%;
// overflow: auto;
// height: 500px;
// background: red;
}
.bottomheader {
overflow-y: scroll;
.bottomheader {
overflow-y: scroll;
width: 99%;
height: 67vh;
background-color: #fff;
margin: 10px auto;
padding: 10px 20px;
.sport {
padding: 10px 50px 10px 10px;
font-size: 20px;
font-weight: 600;
}
.words {
font-size: 15px;
padding: 10px 50px 10px 10px;
}
.sports {
position: absolute;
left: 50%;
transform: translate(-50%);
font-size: 18px;
font-weight: 600;
}
.word {
font-size: 14px;
font-weight: 550;
padding: 50px 50px 10px 10px;
}
.videoleft {
width: 40%;
height: 200px;
background: red;
}
.time {
font-size: 20px;
font-weight: 550;
padding: 10px 50px 10px 10px;
}
.number {
width: 25px;
height: 25px;
text-align: center;
display: inline-block;
color: white;
background: blue;
border-radius: 50%;
}
.nexttime {
font-size: 15px;
padding: 10px 50px 10px 10px;
}
.images {
width: 53%;
height: 241px;
margin: 0 auto;
background: red;
}
.attention {
font-size: 14px;
font-weight: 550;
padding: 10px 50px 10px 10px;
}
// .videobottom
// {
// font-size: 14px;
// font-weight: 550;
// padding: 10px 50px 10px 10px;
// }
}
.sport {
padding: 10px 50px 10px 10px;
font-size: 20px;
font-weight: 600;
}
.topheader {
width: 99%;
background-color: #fff;
margin: 0 auto;
.words {
font-size: 15px;
padding: 10px 50px 10px 10px;
}
.information {
display: flex;
flex-wrap: wrap;
padding: 10px 20px;
height: 110px;
.sports {
position: absolute;
left: 50%;
transform: translate(-50%);
font-size: 18px;
font-weight: 600;
}
.top,
.bottom {
color: #666666;
width: 100%;
display: flex;
.word {
font-size: 14px;
font-weight: 550;
padding: 50px 50px 10px 10px;
}
div {
width: 25%;
}
}
}
.videoleft {
width: 40%;
height: 200px;
background: red;
}
.user {
width: 100%;
padding: 0 20px;
display: flex;
height: 80px;
align-items: center;
line-height: 80px;
.time {
font-size: 20px;
font-weight: 550;
padding: 10px 50px 10px 10px;
}
.source {
display: flex;
position: relative;
right: 59px;
position: absolute;
.item {
margin-left: 20px;
}
}
.number {
width: 25px;
height: 25px;
text-align: center;
display: inline-block;
color: white;
background: blue;
border-radius: 50%;
}
.name {
font-size: 20px;
padding-left: 12px;
}
.nexttime {
font-size: 15px;
padding: 10px 50px 10px 10px;
}
.gender {
padding-left: 10px;
}
.images {
width: 53%;
height: 241px;
margin: 0 auto;
background: red;
}
.age {
padding-left: 10px;
}
.attention {
font-size: 14px;
font-weight: 550;
padding: 10px 50px 10px 10px;
}
.headsculpture {
border-radius: 50%;
width: 40px;
height: 40px;
}
}
}
}
</style>
// .videobottom
// {
// font-size: 14px;
// font-weight: 550;
// padding: 10px 50px 10px 10px;
// }
}
.topheader {
width: 99%;
background-color: #fff;
margin: 0 auto;
.information {
display: flex;
flex-wrap: wrap;
padding: 10px 20px;
height: 110px;
.top,
.bottom {
color: #666666;
width: 100%;
display: flex;
div {
width: 25%;
}
}
}
.user {
width: 100%;
padding: 0 20px;
display: flex;
height: 80px;
align-items: center;
line-height: 80px;
.source {
display: flex;
position: relative;
right: 59px;
position: absolute;
.item {
margin-left: 20px;
}
}
.name {
font-size: 20px;
padding-left: 12px;
}
.gender {
padding-left: 10px;
}
.age {
padding-left: 10px;
}
.headsculpture {
border-radius: 50%;
width: 40px;
height: 40px;
}
}
}
}
</style>

View File

@ -183,7 +183,7 @@
</div>
<div class="bottomform">
<wangeditor
style="width: 100%; background-color: red"
style="width: 100%;"
:nodeContent="form.nodeContent"
@on-nodeContent="onNodeContent"
v-show="