<template>
|
<div class="Questionnairemanagement">
|
<!-- 左侧栏 -->
|
<div class="sidecolumn">
|
<div>
|
<el-steps finish-status="success" :active="Editprogress" simple>
|
<el-step>
|
<template slot="title">
|
<span style="cursor: pointer" @click="Editprogress = 1"
|
>基础信息</span
|
>
|
</template>
|
</el-step>
|
<el-step>
|
<template slot="title">
|
<span style="cursor: pointer" @click="Editprogress = 2"
|
>随访模板题目</span
|
>
|
</template>
|
</el-step>
|
<el-step description="查看随访模板预览,可导出PDF">
|
<template slot="title">
|
<span style="cursor: pointer" @click="preview">随访模板预览</span>
|
</template>
|
</el-step>
|
</el-steps>
|
</div>
|
</div>
|
<!-- 右侧数据 -->
|
<div class="leftvlue">
|
<!-- 基本信息 -->
|
<div v-if="Editprogress == 1">
|
<div class="leftvlue-jbxx">基本信息</div>
|
<el-divider></el-divider>
|
<el-form
|
:model="ruleForm"
|
:rules="rules"
|
ref="ruleForm"
|
label-width="120px"
|
class="demo-ruleForm"
|
>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="模板名称" prop="region">
|
<div>
|
<el-input
|
v-model="ruleForm.templateName"
|
placeholder="请输入名称"
|
></el-input>
|
</div>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="随访模板分类" prop="region">
|
<el-select
|
v-model="ruleForm.assortid"
|
size="medium"
|
filterable
|
placeholder="请选择分类"
|
>
|
<el-option-group
|
v-for="group in indexAssortlist"
|
:key="group.id"
|
:label="group.indexAssortName"
|
>
|
<el-option
|
v-for="item in group.ivrLibaTemplateAssortList"
|
:key="item.id"
|
:label="item.indexAssortName"
|
:value="item.id"
|
>
|
</el-option>
|
</el-option-group>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="模板简介" prop="note">
|
<div>
|
<el-input
|
type="textarea"
|
placeholder="请输入简介"
|
v-model="ruleForm.note"
|
></el-input>
|
</div>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
|
<el-row :gutter="20">
|
<el-col :span="12">
|
<el-form-item label="版本号" prop="version">
|
<el-input
|
style="width: 220px"
|
v-model="ruleForm.version"
|
placeholder="默认1.0.1"
|
></el-input> </el-form-item
|
></el-col>
|
<el-col :span="12">
|
<el-form-item label="可用状态" prop="region">
|
<el-select
|
v-model="ruleForm.isenable"
|
size="medium"
|
placeholder="请选择"
|
>
|
<el-option
|
class="ruleFormaa"
|
v-for="item in usable"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
>
|
</el-option>
|
</el-select> </el-form-item
|
></el-col>
|
</el-row>
|
|
<el-row :gutter="20">
|
<el-col :span="12">
|
<el-form-item label="语言" prop="name">
|
<el-select
|
v-model="ruleForm.language"
|
size="medium"
|
filterable
|
placeholder="请选择语言"
|
>
|
<el-option
|
class="ruleFormaa"
|
v-for="item in languagelist"
|
:key="item.label"
|
:label="item.label"
|
:value="item.label"
|
>
|
</el-option>
|
</el-select> </el-form-item
|
></el-col>
|
<el-col :span="12">
|
<el-form-item label="播报优先" prop="playType">
|
<el-select
|
v-model="ruleForm.playType"
|
size="medium"
|
filterable
|
placeholder="请选择语言"
|
>
|
<el-option
|
class="ruleFormaa"
|
v-for="item in precedencetype"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
>
|
</el-option>
|
</el-select> </el-form-item
|
></el-col>
|
</el-row>
|
<el-form-item label="随访方式" prop="region">
|
<el-select
|
style="width: 500px"
|
v-model="ruleForm.suitway"
|
size="medium"
|
multiple
|
filterable
|
placeholder="请选择分类(多选)"
|
>
|
<el-option
|
class="ruleFormaa"
|
v-for="item in mode"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
>
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="标签" prop="desc">
|
<div class="xinz-inf">
|
<el-tag
|
:key="tag.tagname"
|
type="success"
|
v-for="tag in dynamicTags"
|
closable
|
:disable-transitions="false"
|
@close="handleClosetag(tag)"
|
>
|
{{ tag.tagname }}
|
</el-tag>
|
<el-select
|
v-model="inputValue"
|
v-if="inputVisible"
|
@change="handleInputConfirm"
|
filterable
|
remote
|
allow-create
|
reserve-keyword
|
default-first-option
|
:remote-method="remoteMethodtag"
|
:loading="loading"
|
placeholder="请选择"
|
>
|
<el-option
|
v-for="item in optionstag"
|
:key="item.tagid"
|
:label="item.tagname"
|
:value="item.tagname"
|
>
|
</el-option>
|
</el-select>
|
<el-button
|
v-else
|
class="button-new-tag"
|
size="small"
|
@click="showInput"
|
>+ 新增标签</el-button
|
>
|
</div>
|
</el-form-item>
|
<div class="xinz-infs">
|
<el-form-item label="适用疾病" prop="region">
|
<el-tag
|
v-for="tag in displayedTags"
|
:key="tag.icdid"
|
type="warning"
|
:disable-transitions="false"
|
>
|
{{ tag.icdname }}
|
</el-tag>
|
<el-tag v-if="hasMore" type="info">+{{ remaining }} more</el-tag>
|
</el-form-item>
|
</div>
|
<div style="margin-left: 120px; margin-bottom: 10px">
|
<el-button type="warning" @click="$refs.child.handleAddpatient()"
|
>疾病详情</el-button
|
>
|
</div>
|
<el-form-item label="适用通用库" prop="region">
|
<el-select
|
style="width: 500px"
|
v-model="ruleForm.submoduleID"
|
size="medium"
|
multiple
|
filterable
|
placeholder="请选择通用库"
|
>
|
<el-option
|
class="ruleFormaa"
|
v-for="item in generallist"
|
:key="item.id"
|
:label="item.extName"
|
:value="item.id"
|
>
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="适用院区" prop="region">
|
<el-select
|
style="width: 500px"
|
v-model="ruleForm.campus"
|
size="medium"
|
multiple
|
filterable
|
placeholder="请选择分类"
|
>
|
<el-option
|
class="ruleFormaa"
|
v-for="item in courtyardlist"
|
:key="item.label"
|
:label="item.label"
|
:value="item.label"
|
>
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-row>
|
<el-col :span="20"
|
><el-form-item label="适用科室" prop="region">
|
<el-select
|
v-model="tempDetpRelevanceslist"
|
@remove-tag="removetag"
|
style="width: 55vw"
|
size="medium"
|
multiple
|
filterable
|
placeholder="请选择科室"
|
>
|
<el-option
|
class="ruleFormaa"
|
v-for="item in flatArray"
|
:key="item.deptCode"
|
:label="item.label"
|
:value="item.deptCode"
|
>
|
</el-option>
|
</el-select> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20"
|
><el-form-item label="适用病区" prop="region">
|
<el-select
|
v-model="tempbelongWards"
|
@remove-tag="removehpsp"
|
style="width: 55vw"
|
size="medium"
|
multiple
|
filterable
|
placeholder="请选择科室"
|
>
|
<el-option
|
class="ruleFormaa"
|
v-for="item in flatArray"
|
:key="item.deptCode"
|
:label="item.label"
|
:value="item.deptCode"
|
>
|
</el-option>
|
</el-select> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12"
|
><el-form-item label="开场白" prop="revisitBefore">
|
<el-input
|
type="textarea"
|
:rows="3"
|
v-model="ruleForm.revisitBefore"
|
placeholder="请输入开场白"
|
/> </el-form-item
|
></el-col>
|
<el-col :span="12"
|
><el-form-item label="结束语" prop="revisitAfter">
|
<el-input
|
type="textarea"
|
:rows="3"
|
v-model="ruleForm.revisitAfter"
|
placeholder="请输入结束语"
|
/> </el-form-item
|
></el-col>
|
</el-row>
|
|
<el-row :gutter="20">
|
<el-col :span="8">
|
<el-form-item label="静默时间(秒)" prop="name">
|
<div style="width: 40%">
|
<el-input
|
v-model="ruleForm.silencetime"
|
></el-input></div></el-form-item
|
></el-col>
|
<el-col :span="8">
|
<el-form-item label="静默次数" prop="name">
|
<div style="width: 40%">
|
<el-input
|
v-model="ruleForm.noVoiceNum"
|
></el-input></div></el-form-item
|
></el-col>
|
<el-col :span="8">
|
<el-form-item label="无匹配重复(次)" prop="region">
|
<div style="width: 40%">
|
<el-input v-model="ruleForm.mateNum"></el-input>
|
</div> </el-form-item
|
></el-col>
|
</el-row>
|
<el-form-item>
|
<el-button type="success" plain @click="nextstep('ruleForm')"
|
>下一步</el-button
|
>
|
<el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
|
<el-button
|
type="success"
|
@click="Departmenttreatment('ruleForm')"
|
>{{ task ? "保存到任务模板" : "保存随访模板基础信息" }}</el-button
|
>
|
</el-form-item>
|
</el-form>
|
</div>
|
<!-- 随访模板设置 -->
|
<div v-if="Editprogress == 2">
|
<div class="leftvlue-jbxx">随访模板题目设置</div>
|
<el-divider></el-divider>
|
<div class="addtopic">
|
<el-button
|
type="primary"
|
icon="el-icon-plus"
|
round
|
@click="getaddtopiclist"
|
>添加题目</el-button
|
>
|
<el-button
|
type="success"
|
icon="el-icon-edit-outline"
|
round
|
@click="Operateit = !Operateit"
|
>{{ !Operateit ? "编辑题目" : "完整信息展示" }}</el-button
|
>
|
</div>
|
<div class="presentation">
|
<div :class="Operateit ? 'presentation-left' : 'spresentation-left'">
|
<el-card class="box-card" style="min-height: 688px">
|
<el-table
|
v-loading="loading"
|
:data="ruleForm.ivrTaskTemplateScriptVOList"
|
>
|
<el-table-column
|
label="编号"
|
align="center"
|
key="sort"
|
prop="sort"
|
/>
|
<el-table-column
|
label="标题"
|
align="center"
|
key="scriptTopic"
|
prop="scriptTopic"
|
:show-overflow-tooltip="true"
|
/>
|
<el-table-column
|
v-if="!Operateit"
|
label="问题话术"
|
align="center"
|
key="scriptContent"
|
prop="scriptContent"
|
:show-overflow-tooltip="true"
|
/>
|
<el-table-column
|
v-if="!Operateit"
|
label="问题话术"
|
align="center"
|
key="scriptContent"
|
prop="scriptContent"
|
:show-overflow-tooltip="true"
|
/>
|
<el-table-column
|
label="下题跳转"
|
align="center"
|
key="nextScriptno"
|
prop="nextScriptno"
|
:show-overflow-tooltip="true"
|
>
|
<template slot-scope="scope">
|
<span>{{
|
scope.row.nextScriptno == 0
|
? "已是最后一题"
|
: scope.row.nextScriptno
|
}}</span>
|
</template>
|
</el-table-column>
|
|
<el-table-column
|
label="操作"
|
v-if="Operateit"
|
align="center"
|
width="250"
|
class-name="small-padding fixed-width"
|
>
|
<template slot-scope="scope">
|
<el-button
|
icon="el-icon-edit"
|
type="primary"
|
circle
|
@click="handleUpdate(scope.row)"
|
></el-button>
|
<el-button
|
type="danger"
|
icon="el-icon-delete"
|
circle
|
@click="handleDelete(scope.row)"
|
></el-button>
|
<el-button
|
@click="syioption(scope.row)"
|
type="success"
|
icon="el-icon-top"
|
circle
|
></el-button>
|
<el-button
|
@click="xiayioption(scope.row)"
|
type="success"
|
icon="el-icon-bottom"
|
circle
|
></el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
</el-card>
|
</div>
|
<div class="presentation-right" v-if="Operateit">
|
<el-card class="box-card">
|
<el-form
|
:model="topicobj"
|
:inline="true"
|
class="demo-form-inline"
|
>
|
<div class="headline">题目设置详情</div>
|
<el-row>
|
<el-col :span="24"
|
><el-form-item label="题目标题">
|
<el-input
|
v-model="topicobj.scriptTopic"
|
placeholder="请从左侧列表选择"
|
></el-input> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="24"
|
><el-form-item label="问题话术">
|
<el-input
|
type="textarea"
|
style="width: 600px"
|
v-model="topicobj.scriptContent"
|
placeholder="请从左侧列表选择"
|
></el-input> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row :gutter="10">
|
<el-col :span="12"
|
><el-form-item label="问题节点">
|
<el-input
|
v-model="topicobj.sort"
|
placeholder="请从左侧列表选择"
|
:disabled="true"
|
></el-input> </el-form-item
|
></el-col>
|
<el-col :span="12"
|
><el-form-item label="下题跳转">
|
<el-input
|
v-model="topicobj.nextScriptno"
|
placeholder="请输入题号"
|
></el-input> </el-form-item
|
></el-col>
|
</el-row>
|
|
<el-row :gutter="10">
|
<el-col :span="12"
|
><el-form-item label="是否必填">
|
<el-select
|
v-model="topicobj.isMust"
|
placeholder="默认必填"
|
>
|
<el-option
|
v-for="item in required"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
>
|
</el-option>
|
</el-select> </el-form-item
|
></el-col>
|
<el-col :span="12"
|
><el-form-item label="题目类型">
|
<el-select
|
v-model="topicobj.scriptType"
|
placeholder="请选择"
|
:disabled="true"
|
>
|
<el-option
|
v-for="item in askvaluetype"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
>
|
</el-option>
|
</el-select> </el-form-item
|
></el-col>
|
</el-row>
|
<el-form-item
|
label="是否由选项配置跳转"
|
v-if="topicobj.scriptType == 1"
|
>
|
<el-radio-group v-model="topicobj.branchFlag">
|
<el-radio :label="'1'">是</el-radio>
|
<el-radio :label="'0'">否</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item label="选中提示" v-if="topicobj.scriptType != 1">
|
<el-input
|
style="width: 24vw"
|
type="textarea"
|
autosize
|
placeholder="请输入内容"
|
v-model="topicobj.prompt"
|
>
|
</el-input
|
></el-form-item>
|
<el-row>
|
<el-col :span="24"
|
><el-form-item label="语音文本">
|
<el-input
|
type="textarea"
|
style="width: 600px"
|
v-model="topicobj.ivrtext"
|
placeholder="请从左侧列表选择"
|
></el-input> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="6">
|
<el-form-item label="语音文件" prop="verbaltrickyy">
|
<el-upload
|
class="upload-demo"
|
:action="uploadImgUrl"
|
:headers="headers"
|
:show-file-list="false"
|
:on-success="
|
(response, file) => handleChanges(response, file, 1)
|
"
|
accept=".wav,.mp3"
|
:limit="1"
|
>
|
<el-button size="small" type="primary"
|
>点击上传</el-button
|
>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<span
|
style="font-size: 18px; margin-top: 10px"
|
v-if="topicobj.ivrVoice"
|
>{{
|
topicobj.ivrVoice.substring(
|
topicobj.ivrVoice.lastIndexOf("/") + 1
|
)
|
}}</span
|
>
|
</el-col>
|
<el-col :span="6">
|
<mini-audio
|
:audio-source="
|
topicobj.ivrVoice
|
? topicobj.ivrVoice
|
: 'https://example.com/example.mp3'
|
"
|
></mini-audio>
|
</el-col>
|
</el-row>
|
<div class="topicxq" v-if="topicobj.scriptType == 4">
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="收集内容">
|
<el-input
|
style="width: 400px"
|
type="textarea"
|
v-model="topicobj.value"
|
placeholder="问题收集内容"
|
></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</div>
|
<div v-else>
|
<div class="headline">
|
<div class="basics">选项设置</div>
|
<!-- <div class="headbottom">
|
<el-button
|
type="primary"
|
icon="el-icon-circle-plus-outline"
|
@click="addzbiao"
|
>添加指标</el-button
|
>
|
</div> -->
|
</div>
|
|
<Regular
|
:TargetoptionList="topicobj.ivrTaskScriptTargetoptionList"
|
@deloption="deloption"
|
@branchFlagfn="branchFlagfn"
|
:branchFlag="topicobj.branchFlag ? true : false"
|
:controlsc="false"
|
:scriptType="topicobj.scriptType"
|
/>
|
<!-- 无匹配类型 -->
|
<div class="topicxq">
|
<el-row :gutter="10">
|
<el-col :span="20"
|
><el-form-item label="无匹配话术">
|
<el-input
|
type="textarea"
|
style="width: 400px"
|
placeholder="请输入"
|
v-model="topicobj.noMatchText"
|
show-word-limit
|
>
|
</el-input> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="6">
|
<el-form-item label="无匹配语音" prop="verbaltrickyy">
|
<el-upload
|
class="upload-demo"
|
:action="uploadImgUrl"
|
:show-file-list="false"
|
:headers="headers"
|
:on-success="
|
(response, file) =>
|
handleChanges(response, file, 2)
|
"
|
accept=".wav,.mp3"
|
:limit="1"
|
>
|
<el-button size="small" type="primary"
|
>点击上传</el-button
|
>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<span
|
style="font-size: 12px"
|
v-if="topicobj.nomatchvoice"
|
>{{
|
topicobj.nomatchvoice.substring(
|
topicobj.nomatchvoice.lastIndexOf("/") + 1
|
)
|
}}</span
|
>
|
</el-col>
|
<el-col :span="6">
|
<mini-audio
|
:audio-source="
|
topicobj.nomatchvoice
|
? topicobj.nomatchvoice
|
: 'https://example.com/example.mp3'
|
"
|
></mini-audio>
|
</el-col>
|
</el-row>
|
</div>
|
<div class="topicxq">
|
<el-row :gutter="10">
|
<el-col :span="20"
|
><el-form-item label="听不清话术">
|
<el-input
|
style="width: 400px"
|
type="textarea"
|
placeholder="请输入"
|
v-model="topicobj.noClearlyText"
|
show-word-limit
|
>
|
</el-input> </el-form-item
|
></el-col>
|
</el-row>
|
|
<el-row>
|
<el-col :span="6">
|
<el-form-item label="听不清语音" prop="verbaltrickyy">
|
<el-upload
|
class="upload-demo"
|
:action="uploadImgUrl"
|
:show-file-list="false"
|
:headers="headers"
|
:on-success="
|
(response, file) =>
|
handleChanges(response, file, 4)
|
"
|
accept=".wav,.mp3"
|
:limit="1"
|
>
|
<el-button size="small" type="primary"
|
>点击上传</el-button
|
>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<span
|
style="font-size: 12px"
|
v-if="topicobj.noclearlyvoice"
|
>{{
|
topicobj.noclearlyvoice.substring(
|
topicobj.noclearlyvoice.lastIndexOf("/") + 1
|
)
|
}}</span
|
>
|
</el-col>
|
<el-col :span="6">
|
<mini-audio
|
:audio-source="
|
topicobj.noclearlyvoice
|
? topicobj.noclearlyvoice
|
: 'https://example.com/example.mp3'
|
"
|
></mini-audio>
|
</el-col>
|
</el-row>
|
</div>
|
<div class="topicxq">
|
<el-row :gutter="10">
|
<el-col :span="20"
|
><el-form-item label="静默话术">
|
<el-input
|
type="textarea"
|
style="width: 400px"
|
placeholder="请输入"
|
v-model="topicobj.slienceText"
|
show-word-limit
|
>
|
</el-input> </el-form-item
|
></el-col>
|
</el-row>
|
|
<el-row>
|
<el-col :span="6">
|
<el-form-item label="静默语音" prop="verbaltrickyy">
|
<el-upload
|
class="upload-demo"
|
:action="uploadImgUrl"
|
:show-file-list="false"
|
:headers="headers"
|
:on-success="
|
(response, file) =>
|
handleChanges(response, file, 3)
|
"
|
accept=".wav,.mp3"
|
:limit="1"
|
>
|
<el-button size="small" type="primary"
|
>点击上传</el-button
|
>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<span
|
style="font-size: 12px"
|
v-if="topicobj.sliencevoice"
|
>{{
|
topicobj.sliencevoice.substring(
|
topicobj.sliencevoice.lastIndexOf("/") + 1
|
)
|
}}</span
|
>
|
</el-col>
|
<el-col :span="6">
|
<mini-audio
|
:audio-source="
|
topicobj.sliencevoice
|
? topicobj.sliencevoice
|
: 'https://example.com/example.mp3'
|
"
|
></mini-audio>
|
</el-col>
|
</el-row>
|
</div>
|
</div>
|
</el-form>
|
</el-card>
|
</div>
|
</div>
|
|
<el-button type="success" @click="Departmenttreatment('ruleForm')">{{
|
task ? "保存到任务模板" : "保存题目数据"
|
}}</el-button>
|
<el-button type="primary" plain @click="laststep()">上一步</el-button>
|
<el-button type="success" plain @click="preview('ruleForm')"
|
>查看预览</el-button
|
>
|
<el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
|
</div>
|
<!-- 随访模板预览 -->
|
<div v-if="Editprogress == 3">
|
<div class="leftvlue-jbxx">随访模板问题预览</div>
|
<el-divider></el-divider>
|
|
<div class="preview-left">
|
<div v-for="item in valssu">
|
<!-- 单选 -->
|
<div
|
class="scriptTopic-dev"
|
:key="item.sort"
|
v-if="item.valueType == 1"
|
>
|
<div class="dev-text">
|
{{ item.sort }}、[单选]<span>{{ item.scriptContent }}</span>
|
</div>
|
<div class="dev-xx">
|
<el-radio-group v-model="item.remark">
|
<el-radio
|
v-for="(items, index) in item.ivrTaskScriptTargetoptionList"
|
:key="index"
|
:label="index"
|
>{{ items.targetvalue }}</el-radio
|
>
|
</el-radio-group>
|
</div>
|
</div>
|
<!-- 多选 -->
|
<div
|
class="scriptTopic-dev"
|
:key="item.sort"
|
v-if="item.valueType == 2"
|
>
|
<div class="dev-text">
|
{{ item.sort }}、[多选]<span>{{ item.scriptContent }}</span>
|
</div>
|
<div class="dev-xx">
|
<el-checkbox-group v-model="item.remark">
|
<el-checkbox
|
v-for="(items, index) in item.ivrTaskScriptTargetoptionList"
|
:key="index"
|
:label="index"
|
>
|
{{ items.targetvalue }}
|
</el-checkbox>
|
</el-checkbox-group>
|
</div>
|
</div>
|
<!-- 填空 -->
|
<div
|
class="scriptTopic-dev"
|
:key="item.sort"
|
v-if="item.valueType == 3"
|
>
|
<div class="dev-text">
|
{{ item.sort }}、[填空]<span>{{ item.scriptContent }}</span>
|
</div>
|
<div class="dev-xx">
|
<el-input placeholder="请输入答案" v-model="radioas" clearable>
|
</el-input>
|
</div>
|
</div>
|
</div>
|
</div>
|
<el-button type="primary" plain @click="laststep()">上一步</el-button>
|
<el-button type="warning" @click="measurement()">前往测试</el-button>
|
<el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
|
</div>
|
</div>
|
<!-- 添加题目弹窗 -->
|
<el-drawer
|
title="添加题目"
|
@close="$forceUpdate()"
|
@closed="$forceUpdate()"
|
:visible.sync="drawer"
|
custom-class="demo-drawer"
|
size="50%"
|
>
|
<div style="margin: 0 25px">
|
<el-tabs v-model="activeName">
|
<el-tab-pane label="题库选取" name="first">
|
<div class="preview-left">
|
<el-form
|
:model="queryParams"
|
ref="queryForm"
|
size="small"
|
:inline="true"
|
label-width="98px"
|
>
|
<el-form-item label="标题" prop="userName">
|
<el-input
|
v-model="queryParams.scriptTopic"
|
placeholder="请输入"
|
clearable
|
style="width: 200px"
|
@keyup.enter.native="getaddtopiclist"
|
/>
|
</el-form-item>
|
|
<el-form-item>
|
<el-button
|
type="primary"
|
icon="el-icon-search"
|
size="medium"
|
@click="getaddtopiclist"
|
>搜索</el-button
|
>
|
<el-button
|
icon="el-icon-refresh"
|
size="medium"
|
@click="resetQuery"
|
>重置</el-button
|
>
|
</el-form-item>
|
</el-form>
|
<el-table v-loading="loading" :data="userList">
|
<el-table-column
|
label="标题"
|
align="center"
|
key="scriptTopic"
|
prop="scriptTopic"
|
width="100"
|
/>
|
<el-table-column
|
label="问题话术"
|
align="center"
|
key="scriptContent"
|
prop="scriptContent"
|
width="200"
|
:show-overflow-tooltip="true"
|
/>
|
<el-table-column
|
label="问题类型"
|
align="center"
|
key="valueType"
|
prop="valueType"
|
width="120"
|
>
|
<template slot-scope="scope">
|
<dict-tag
|
:options="valuetypes"
|
:value="scope.row.valueType"
|
/>
|
</template>
|
</el-table-column>
|
<el-table-column
|
label="选项内容"
|
align="center"
|
key="targetoptions"
|
prop="targetoptions"
|
width="200"
|
:show-overflow-tooltip="true"
|
/>
|
|
<el-table-column
|
label="操作"
|
align="center"
|
class-name="small-padding fixed-width"
|
>
|
<template slot-scope="scope">
|
<el-button
|
size="medium"
|
type="text"
|
@click="addtopic(scope.row)"
|
><span class="button-textxg"
|
><i class="el-icon-circle-plus-outline"></i>添加</span
|
></el-button
|
>
|
</template>
|
</el-table-column>
|
</el-table>
|
<pagination
|
:total="total"
|
:page.sync="queryParams.pageNum"
|
:limit.sync="queryParams.pageSize"
|
@pagination="getaddtopiclist"
|
/>
|
</div>
|
</el-tab-pane>
|
<el-tab-pane label="手动配置" name="second">
|
<div class="preview-left">
|
<el-form
|
:inline="true"
|
:model="indexform"
|
class="demo-form-inline"
|
>
|
<div class="headline">
|
题目设置详情
|
<span style="margin-left: 30px"
|
><el-button type="primary" @click="Submittopicobj"
|
>保存新增</el-button
|
></span
|
>
|
</div>
|
<el-divider></el-divider>
|
<div>
|
<el-row :gutter="10">
|
<el-col :span="12">
|
<el-form-item label="题目标题">
|
<el-input
|
v-model="indexform.scriptTopic"
|
placeholder="请输入题目标题"
|
></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="问题节点">
|
<el-input
|
v-model="indexform.sort"
|
placeholder="请输入问题节点"
|
></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="10">
|
<el-col :span="18"
|
><el-form-item label="问题话术">
|
<el-input
|
style="width: 600px"
|
type="textarea"
|
v-model="indexform.scriptContent"
|
placeholder="请从左侧列表选择"
|
></el-input> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row :gutter="10">
|
<el-col :span="12"
|
><el-form-item label="是否必填">
|
<el-select
|
v-model="indexform.isMust"
|
placeholder="默认必填"
|
>
|
<el-option
|
v-for="item in required"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
>
|
</el-option>
|
</el-select> </el-form-item
|
></el-col>
|
<!-- <el-col :span="12"
|
><el-form-item label="取值类型">
|
<el-select
|
v-model="indexform.valueType"
|
placeholder="请选择"
|
:disabled="true"
|
>
|
<el-option
|
v-for="item in valuetype"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
>
|
</el-option>
|
</el-select> </el-form-item
|
></el-col> -->
|
</el-row>
|
<el-form-item
|
label="选中提示"
|
v-if="topicobj.scriptType != 1"
|
>
|
<el-input
|
style="width: 24vw"
|
type="textarea"
|
autosize
|
placeholder="请输入内容"
|
v-model="indexform.prompt"
|
>
|
</el-input
|
></el-form-item>
|
<el-row :gutter="10">
|
<el-col :span="18"
|
><el-form-item label="语音文本">
|
<el-input
|
style="width: 600px"
|
type="textarea"
|
v-model="indexform.ivrtext"
|
placeholder="请从左侧列表选择"
|
></el-input> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="6">
|
<el-form-item label="语音文件" prop="verbaltrickyy">
|
<el-upload
|
class="upload-demo"
|
:action="uploadImgUrl"
|
:headers="headers"
|
:show-file-list="false"
|
:on-success="
|
(response, file) => handleChange(response, file, 1)
|
"
|
accept=".wav,.mp3"
|
:limit="1"
|
>
|
<el-button size="small" type="primary"
|
>点击上传</el-button
|
>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<span
|
style="font-size: 18px; margin-top: 10px"
|
v-if="indexform.ivrVoice"
|
>{{
|
indexform.ivrVoice.substring(
|
indexform.ivrVoice.lastIndexOf("/") + 1
|
)
|
}}</span
|
>
|
</el-col>
|
<el-col :span="6">
|
<mini-audio
|
:audio-source="
|
indexform.ivrVoice
|
? indexform.ivrVoice
|
: 'https://example.com/example.mp3'
|
"
|
></mini-audio>
|
</el-col>
|
</el-row>
|
</div>
|
<div>
|
<el-form-item label="指标名称" prop="deptId">
|
<el-input
|
v-model="indexform.targetname"
|
placeholder="请输入指标名称"
|
maxlength="20"
|
/>
|
</el-form-item>
|
<el-form-item label="指标描述" prop="deptId">
|
<el-input
|
v-model="indexform.targetdesc"
|
placeholder="请输入指标描述"
|
maxlength="60"
|
/>
|
</el-form-item>
|
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="值类型">
|
<el-radio-group v-model="indexform.valueType">
|
<el-radio :label="1">选项</el-radio>
|
<el-radio :label="2">文本</el-radio>
|
<el-radio :label="3">数值</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="题目类型">
|
<el-radio-group
|
@input="typeselection"
|
v-model="indexform.scriptType"
|
>
|
<el-radio :label="1">单选</el-radio>
|
<!-- <el-radio :label="2">多选</el-radio> -->
|
<el-radio :label="4">问答</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</div>
|
<div class="topicxq" v-show="indexform.scriptType == 4">
|
<el-row>
|
<el-col :span="20">
|
<el-form-item label="收集内容">
|
<el-input
|
style="width: 400px"
|
type="textarea"
|
v-model="indexform.value"
|
placeholder="问题收集内容"
|
></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</div>
|
|
<div v-show="indexform.scriptType == 1">
|
<div class="headline">
|
<div class="basics">选项设置</div>
|
</div>
|
<el-divider></el-divider>
|
<Regular
|
:TargetoptionList="indexform.ivrTaskScriptTargetoptionList"
|
@deloption="deloption"
|
@addoption="addoptionson"
|
:controlsc="false"
|
:addoption="true"
|
/>
|
<!-- 无匹配类型 -->
|
<div class="topicxq">
|
<el-row :gutter="10">
|
<el-col :span="20"
|
><el-form-item label="无匹配话术">
|
<el-input
|
type="textarea"
|
style="width: 400px"
|
placeholder="请输入"
|
v-model="indexform.noMatchText"
|
show-word-limit
|
>
|
</el-input> </el-form-item
|
></el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="6">
|
<el-form-item label="无匹配语音" prop="verbaltrickyy">
|
<el-upload
|
class="upload-demo"
|
:action="uploadImgUrl"
|
:show-file-list="false"
|
:headers="headers"
|
:on-success="
|
(response, file) =>
|
handleChange(response, file, 2)
|
"
|
accept=".wav,.mp3"
|
:limit="1"
|
>
|
<el-button size="small" type="primary"
|
>点击上传</el-button
|
>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<span
|
style="font-size: 12px"
|
v-if="indexform.nomatchvoice"
|
>{{
|
indexform.nomatchvoice.substring(
|
indexform.nomatchvoice.lastIndexOf("/") + 1
|
)
|
}}</span
|
>
|
</el-col>
|
<el-col :span="6">
|
<mini-audio
|
:audio-source="
|
indexform.nomatchvoice
|
? indexform.nomatchvoice
|
: 'https://example.com/example.mp3'
|
"
|
></mini-audio>
|
</el-col>
|
</el-row>
|
</div>
|
|
<div class="topicxq">
|
<el-row :gutter="10">
|
<el-col :span="20"
|
><el-form-item label="静默话术">
|
<el-input
|
type="textarea"
|
style="width: 400px"
|
placeholder="请输入"
|
v-model="indexform.slienceText"
|
show-word-limit
|
>
|
</el-input> </el-form-item
|
></el-col>
|
</el-row>
|
|
<el-row>
|
<el-col :span="6">
|
<el-form-item label="静默语音" prop="verbaltrickyy">
|
<el-upload
|
class="upload-demo"
|
:action="uploadImgUrl"
|
:show-file-list="false"
|
:headers="headers"
|
:on-success="
|
(response, file) =>
|
handleChange(response, file, 3)
|
"
|
accept=".wav,.mp3"
|
:limit="1"
|
>
|
<el-button size="small" type="primary"
|
>点击上传</el-button
|
>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<span
|
style="font-size: 12px"
|
v-if="indexform.sliencevoice"
|
>{{
|
indexform.sliencevoice.substring(
|
indexform.sliencevoice.lastIndexOf("/") + 1
|
)
|
}}</span
|
>
|
</el-col>
|
<el-col :span="6">
|
<mini-audio
|
:audio-source="
|
indexform.sliencevoice
|
? indexform.sliencevoice
|
: 'https://example.com/example.mp3'
|
"
|
></mini-audio>
|
</el-col>
|
</el-row>
|
</div>
|
<div class="topicxq">
|
<el-row :gutter="10">
|
<el-col :span="20"
|
><el-form-item label="听不清话术">
|
<el-input
|
style="width: 400px"
|
type="textarea"
|
placeholder="请输入"
|
v-model="indexform.noClearlyText"
|
show-word-limit
|
>
|
</el-input> </el-form-item
|
></el-col>
|
</el-row>
|
|
<el-row>
|
<el-col :span="6">
|
<el-form-item label="听不清语音" prop="verbaltrickyy">
|
<el-upload
|
class="upload-demo"
|
:action="uploadImgUrl"
|
:show-file-list="false"
|
:headers="headers"
|
:on-success="
|
(response, file) =>
|
handleChange(response, file, 4)
|
"
|
accept=".wav,.mp3"
|
:limit="1"
|
>
|
<el-button size="small" type="primary"
|
>点击上传</el-button
|
>
|
</el-upload>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<span
|
style="font-size: 12px"
|
v-if="indexform.noclearlyvoice"
|
>{{
|
indexform.noclearlyvoice.substring(
|
indexform.noclearlyvoice.lastIndexOf("/") + 1
|
)
|
}}</span
|
>
|
</el-col>
|
<el-col :span="6">
|
<mini-audio
|
:audio-source="
|
indexform.noclearlyvoice
|
? indexform.noclearlyvoice
|
: 'https://example.com/example.mp3'
|
"
|
></mini-audio>
|
</el-col>
|
</el-row>
|
</div>
|
</div>
|
</el-form>
|
</div>
|
</el-tab-pane>
|
</el-tabs>
|
</div>
|
</el-drawer>
|
<!-- 添加适用疾病窗口 -->
|
<Optional-Form
|
ref="child"
|
:dialogVisiblepatient="dialogVisiblepatient"
|
:overallCase="illnesslist"
|
@addoption="dialogVisiblepatient = false"
|
@kkoption="dialogVisiblepatient = true"
|
/>
|
</div>
|
</template>
|
|
<script>
|
import { listtag } from "@/api/system/label";
|
import store from "@/store";
|
import { listDept } from "@/api/system/dept";
|
import Regular from "@/components/Regular"; //正则组件
|
import {
|
getFollowupclassify,
|
addtargetillness,
|
getTaskFollowup,
|
Taskparticty,
|
getverbaltricklist,
|
getverbaltrick,
|
delFollowupinfo,
|
Followupinfo,
|
getFollowuplist,
|
deltargetillness,
|
getillnesslist,
|
depthospgetson,
|
depthospgetsonlist,
|
illnesslistget,
|
getillness,
|
getgenerallist,
|
} from "@/api/AiCentre/index";
|
import OptionalForm from "@/components/OptionalForm"; //正则组件
|
import { getToken } from "@/utils/auth";
|
import { deptTreeSelect } from "@/api/system/user";
|
|
export default {
|
name: "tpuconfigurat",
|
components: { Regular, OptionalForm },
|
data() {
|
return {
|
headers: {
|
Authorization: "Bearer " + getToken(),
|
},
|
uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/uploadSort",
|
Editprogress: 1, //编辑进度
|
loading: false, // 遮罩层
|
drawer: false, //控制展开
|
radios: [], //多选题选中
|
radioas: "", //填空题答案
|
task: null, //是否来自任务
|
taskform: null, //任务信息
|
Operateit: true,
|
indexform: {
|
ivrTaskScriptTargetoptionList: [],
|
},
|
labelInfovalue: [], //标签临时存储
|
deptNamesvalue: [], //科室临时存储
|
dialogVisiblepatient: false, //适用疾病窗口
|
dynamicTags: [],
|
indexAssortlist: [],
|
inputValue: "",
|
inputValueillness: "",
|
topicobj: {
|
noMatchText: "抱歉,我没有听懂,您能再说一遍吗?",
|
noClearlyText: "抱歉,我没有听清您说的话,您可以再说一次吗?",
|
slienceText: "抱歉,我没有听到您说的话,您可以再说一次吗?",
|
},
|
total: 1,
|
id: "",
|
ruleForm: {
|
templateName: "",
|
revisitBefore:
|
"亲爱的患者/家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访。",
|
revisitAfter:
|
"请您注意休息和营养,生活上要劳逸结合,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次回访就到这里,祝您身体健康!",
|
ivrLibaTemplateTagList: [],
|
ivrTaskTemplateScriptVOList: [],
|
tempDetpRelevances: [],
|
},
|
rules: {},
|
optionstag: [],
|
prefollowuplist: [],
|
postfollowuplist: [],
|
tempDetpRelevanceslist: [], //科室数据
|
tempDetpRelevanceslistform: [], //科室数据
|
tempbelongWards: [], //病区数据
|
tempbelongWardsform: [], //病区数据
|
generallist: [
|
{ value: "1", label: "随访通用库一" },
|
{ value: "2", label: "随访二库" },
|
],
|
|
fileList: [
|
{
|
name: "food.jpeg",
|
url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
|
},
|
],
|
administrativelist: [
|
{ value: "1", label: "心外科" },
|
{ value: "2", label: "心内科" },
|
],
|
standbylist: [],
|
themelist: [],
|
languagelist: [],
|
courtyardlist: [],
|
precedencetype: [],
|
usable: [],
|
required: [],
|
valuetype: [],
|
valuetypes: [],
|
askvaluetype: [],
|
mode: [],
|
inputVisible: false,
|
inputVisibleillness: false,
|
illnessVisible: false, //指标疾病弹框
|
deptOptions: [],
|
optionsillness: [],
|
illnesslistapi: [],
|
illnesslist: [],
|
defaultProps: {
|
children: "ivrLibaTemplateAssortList",
|
label: "indexAssortName",
|
},
|
tempDetpRelevanceslist: [],
|
delScriptVOList: [],
|
optionIndex: "",
|
activeName: "first",
|
variablelist: [
|
{ variatename: "姓名", variate: "${name}", default: 1 },
|
{ variatename: "电话", variate: "${phone}", default: 1 },
|
{ variatename: "病情", variate: "${illness}", default: 1 },
|
],
|
deptlist: [],
|
hosplist: [],
|
flatArray: [],
|
props: { multiple: true, value: "deptId", label: "deptName" },
|
|
variablelist: [
|
{
|
variable: "paitent",
|
value: "表示患者的标识",
|
},
|
],
|
queryParamsdept: {
|
tempid: "",
|
type: 2,
|
},
|
|
valssu: [],
|
radio: "",
|
addvalue: "添加题目",
|
// 题目表格数据
|
userList: [],
|
belongWards: [],
|
belongDepts: [],
|
// 查询参数
|
queryParams: {
|
pageNum: 1,
|
pageSize: 10,
|
userName: undefined,
|
phonenumber: undefined,
|
status: undefined,
|
deptId: undefined,
|
IDnumber: undefined,
|
},
|
};
|
},
|
activated() {
|
if (this.id != this.$route.query.id) {
|
console.log(1);
|
|
this.RoutingDataProcessing();
|
this.gettabList();
|
this.getvFollowup();
|
this.auxiliary();
|
} else {
|
this.tempDetpRelevanceslistform = [];
|
this.tempbelongWardsform = [];
|
}
|
},
|
|
created() {
|
this.RoutingDataProcessing();
|
this.gettabList();
|
this.getvFollowup();
|
this.auxiliary();
|
this.getDeptTree();
|
this.mode = store.getters.mode;
|
this.usable = store.getters.usable;
|
this.required = store.getters.required;
|
this.valuetype = store.getters.valuetype;
|
this.valuetypes = store.getters.valuetypelb;
|
this.askvaluetype = store.getters.askvaluetype;
|
this.languagelist = store.getters.languagelist;
|
this.courtyardlist = store.getters.courtyardlist;
|
this.precedencetype = store.getters.precedencetype;
|
this.belongWards = store.getters.belongWards;
|
this.belongDepts = store.getters.belongDepts;
|
},
|
mounted() {},
|
computed: {
|
displayedTags() {
|
// 返回前10个tag
|
return this.illnesslist.slice(0, 10);
|
},
|
hasMore() {
|
// 判断是否有更多的tag
|
return this.illnesslist.length > 10;
|
},
|
remaining() {
|
// 计算剩余的tag数量
|
return this.illnesslist.length - 10;
|
},
|
},
|
|
methods: {
|
//公共方法--------------------
|
getIndexInArray(arr, obj) {
|
return arr.indexOf(obj);
|
},
|
processElement(element) {
|
return { ...element, isoperation: 0 };
|
},
|
// 路由数据处理
|
RoutingDataProcessing() {
|
this.id = this.$route.query.id;
|
this.task = this.$route.query.task;
|
this.queryParamsdept.tempid = this.id;
|
},
|
// 获取科室树
|
getDeptTree() {
|
// 科室列表
|
deptTreeSelect().then((response) => {
|
this.deptOptions = response.data;
|
this.flatArray = this.flattenArray(response.data);
|
});
|
},
|
flattenArray(multiArray) {
|
let result = [];
|
|
// 递归函数,用于将多级数组转换为一维数组,只包含最底层的元素
|
function flatten(element) {
|
// 如果当前元素有子元素,继续递归
|
if (element.children && element.children.length > 0) {
|
element.children.forEach((child) => flatten(child));
|
} else {
|
// 克隆元素以避免修改原始数据
|
let item = JSON.parse(JSON.stringify(element));
|
result.push(item); // 将最底层的元素添加到结果数组
|
}
|
}
|
|
// 从顶层元素开始递归
|
multiArray.forEach((element) => flatten(element));
|
return result; // 返回只包含最底层元素的一维数组
|
},
|
// 获取表单数据
|
getvFollowup() {
|
if (this.id) {
|
getTaskFollowup(this.id).then((res) => {
|
if (res.code == 200) {
|
console.log(res, "任务模板");
|
this.ruleForm = res.data;
|
if (this.ruleForm.deptNames)
|
// this.tempDetpRelevanceslist = JSON.parse(this.ruleForm.deptNames);
|
this.ruleForm.suitway = this.ruleForm.suitway.split(",");
|
if (this.ruleForm.campus)
|
this.ruleForm.campus = this.ruleForm.campus.split(",");
|
this.ruleForm.submoduleID = this.ruleForm.submoduleID.split(",");
|
console.log(this.ruleForm.submoduleID, "submoduleID");
|
|
this.ruleForm.submoduleID = this.ruleForm.submoduleID.map((res) => {
|
return Number(res);
|
});
|
|
this.dynamicTags = this.ruleForm.ivrLibaTemplateTagList;
|
if (this.ruleForm.ivrLibaTemplateTagList)
|
this.dynamicTags = this.ruleForm.ivrLibaTemplateTagList.map(
|
this.processElement
|
);
|
this.sortFn();
|
}
|
});
|
getillness({ outid: this.id, type: 3 }).then((res) => {
|
this.illnesslist = res.rows;
|
this.illnesslist.forEach((item) => {
|
item.icdname = item.icd10name;
|
});
|
});
|
} else {
|
this.ruleForm = {
|
templateName: "",
|
ivrLibaTemplateTagList: [],
|
ivrTaskTemplateScriptVOList: [],
|
tempDetpRelevances: [],
|
};
|
this.deptOptions = [];
|
this.optionsillness = [];
|
this.illnesslistapi = [];
|
this.illnesslist = [];
|
this.dynamicTags = [];
|
this.tempDetpRelevanceslist = [];
|
}
|
},
|
// 附属数据表
|
auxiliary() {
|
// 分类
|
getFollowupclassify({}).then((res) => {
|
this.indexAssortlist = res.rows;
|
});
|
this.tempDetpRelevanceslist = [];
|
this.tempbelongWards = [];
|
|
if (this.id) {
|
depthospgetsonlist(this.queryParamsdept).then((res) => {
|
if (res.code == 200) {
|
let arr = res.rows;
|
console.log(arr, "arr");
|
|
arr.forEach((item) => {
|
if (item.deptType == 1) {
|
console.log(this.deptlist, "11");
|
this.deptlist.push(item);
|
console.log("22");
|
this.tempDetpRelevanceslist.push(item.deptCode);
|
} else if (item.deptType == 2) {
|
this.hosplist.push(item);
|
this.tempbelongWards.push(item.deptCode);
|
console.log("33");
|
}
|
});
|
}
|
});
|
}
|
|
// 疾病
|
getillnesslist({
|
pageNum: 1,
|
pageSize: 100,
|
}).then((response) => {
|
this.optionsillness = response.rows;
|
});
|
getgenerallist({
|
pageNum: 1,
|
pageSize: 100,
|
}).then((res) => {
|
this.generallist = res.rows;
|
});
|
// 疾病列
|
},
|
// 选项配置跳转触发
|
branchFlagfn(row) {
|
if (this.topicobj.branchFlag == 1 && this.topicobj.nextScriptno != 0) {
|
this.topicobj.nextScriptno =
|
this.topicobj.ivrTaskScriptTargetoptionList[0].nextQuestion;
|
}
|
},
|
//保存
|
submitForm(formName) {
|
if (this.ruleForm.id) {
|
this.ruleForm.isoperation = 2;
|
} else {
|
this.ruleForm.isoperation = 1;
|
}
|
if (!this.ruleForm.assortid) {
|
this.ruleForm.assortid = -1;
|
}
|
this.ruleForm.labelInfo = JSON.stringify(this.dynamicTags);
|
if (Array.isArray(this.ruleForm.suitway))
|
this.ruleForm.suitway = this.ruleForm.suitway.join(",");
|
if (Array.isArray(this.ruleForm.campus))
|
this.ruleForm.campus = this.ruleForm.campus.join(",");
|
if (Array.isArray(this.ruleForm.submoduleID))
|
this.ruleForm.submoduleID = this.ruleForm.submoduleID.join(",");
|
|
// 提交
|
this.ruleForm.ivrTaskTemplateScriptVOList.forEach((res) => {
|
if (!res.isoperation) {
|
res.isoperation = 2;
|
}
|
res.ivrTaskScriptTargetoptionList =
|
res.ivrTaskScriptTargetoptionList.map((item) => {
|
if (!item.isoperation) {
|
item.isoperation = 2;
|
item.templateID = this.ruleForm.id;
|
}
|
return item;
|
});
|
});
|
this.delScriptVOList.forEach((item) => {
|
this.ruleForm.ivrTaskTemplateScriptVOList.push(item);
|
});
|
// Taskparticty(this.ruleForm).then((res) => {
|
// if (res.code == 200) {
|
// this.$modal.msgSuccess("编辑成功");
|
// this.$modal.closeLoading();
|
// this.confirmillness(res.data);
|
// // window.location.reload();
|
// // const obj = { path: "/knowledge/tpuconfigurat/?id=" + this.id };
|
// // this.$tab.closeOpenPage(obj);
|
// } else {
|
// this.$modal.msgError("保存失败");
|
// this.$modal.closeLoading();
|
// }
|
// });
|
if (this.id) {
|
this.ruleForm.isoperation = 2;
|
this.ruleForm.tempDetpRelevances = [];
|
Taskparticty(this.ruleForm).then((res) => {
|
if (res.code == 200) {
|
this.$modal.msgSuccess("修改成功");
|
this.confirmillness();
|
this.putbelongDepts(this.id);
|
this.$modal.closeLoading();
|
this.$router.go(-1);
|
// window.location.reload();
|
} else {
|
this.$modal.closeLoading();
|
}
|
});
|
} else {
|
this.ruleForm.isoperation = 1;
|
this.ruleForm.version = this.ruleForm.version
|
? this.ruleForm.version
|
: "1.0";
|
this.ruleForm.tempDetpRelevances = [];
|
Taskparticty(this.ruleForm).then((res) => {
|
if (res.code == 200) {
|
this.$modal.msgSuccess("新增成功");
|
this.confirmillness(res.data);
|
this.putbelongDepts(res.data);
|
this.$modal.closeLoading();
|
this.$router.go(-1);
|
} else {
|
this.$modal.closeLoading();
|
}
|
});
|
}
|
},
|
confirmillness(guid) {
|
this.illnesslist.forEach((item, index) => {
|
if (guid) {
|
item.outid = guid;
|
} else {
|
console.log(this.ruleForm);
|
item.outid = this.ruleForm.id;
|
}
|
item.icd10name = item.icdname;
|
item.icd10code = item.icdcode;
|
item.type = 3;
|
if (!item.id) {
|
addtargetillness(item).then((res) => {});
|
}
|
});
|
this.illnessVisible = false;
|
this.$modal.msgSuccess("编辑成功");
|
},
|
// 科室处理
|
Departmenttreatment() {
|
this.$modal.loading("正在修正保存数据,请稍候...");
|
this.tempDetpRelevanceslist.forEach((item) => {
|
let result = this.deptlist.some((obj) => obj.deptCode == item);
|
|
if (!result) {
|
this.tempDetpRelevanceslistform.push({
|
deptType: 1,
|
longTemp: this.ruleForm.longTemp,
|
deptCode: item,
|
tempid: this.id,
|
type: 2,
|
});
|
}
|
});
|
this.tempbelongWards.forEach((item) => {
|
let result = this.hosplist.some((obj) => obj.deptCode == item);
|
if (!result) {
|
this.tempbelongWardsform.push({
|
deptType: 2,
|
longTemp: this.ruleForm.longTemp,
|
deptCode: item,
|
tempid: this.id,
|
type: 2,
|
// 1 : 问卷模板库id、11:问卷任务模板库id;2 :语音问卷库id、21:语音任务模板库id,3 : 宣教模板库id,33:宣教任务模板库id
|
});
|
}
|
});
|
setTimeout(() => {
|
this.submitForm();
|
}, 1000);
|
// this.submitForm();
|
},
|
// 保存科室/病区
|
putbelongDepts(id) {
|
this.tempDetpRelevanceslistform.forEach((item) => {
|
if (!item.tempid) item.tempid = id;
|
});
|
|
this.tempbelongWardsform.forEach((item) => {
|
if (!item.tempid) item.tempid = id;
|
});
|
if (this.tempDetpRelevanceslistform.length > 0) {
|
depthospgetson(this.tempDetpRelevanceslistform).then((res) => {
|
if (res.code == 200) {
|
this.$modal.msgSuccess("科室新增成功");
|
}
|
});
|
}
|
if (this.tempbelongWardsform.length > 0) {
|
depthospgetson(this.tempbelongWardsform).then((res) => {
|
if (res.code == 200) {
|
this.$modal.msgSuccess("院区新增成功");
|
}
|
});
|
}
|
},
|
// 下一步
|
nextstep() {
|
if (this.Editprogress <= 2) {
|
return this.Editprogress++;
|
}
|
},
|
// 上一步
|
laststep() {
|
this.Editprogress = this.Editprogress - 1;
|
},
|
// 关闭
|
closeFm() {
|
this.$confirm("退出不会保留页面内容更改, 是否继续?", "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(() => {
|
const obj = { path: "/knowledge/templateku/" };
|
this.$tab.closeOpenPage(obj);
|
})
|
.catch(() => {
|
this.$message({
|
type: "info",
|
message: "已取消",
|
});
|
});
|
},
|
//控制语音文件(新)
|
handleChange(response, file, additionalParam) {
|
console.log(response);
|
console.log(additionalParam);
|
if (additionalParam == 1) {
|
this.indexform.ivrVoice = response.url;
|
} else if (additionalParam == 2) {
|
this.indexform.nomatchvoice = response.url;
|
} else if (additionalParam == 3) {
|
this.indexform.sliencevoice = response.url;
|
} else if (additionalParam == 4) {
|
this.indexform.noclearlyvoice = response.url;
|
}
|
this.$forceUpdate();
|
},
|
//控制语音文件
|
handleChanges(response, file, additionalParam) {
|
console.log(response);
|
console.log(additionalParam);
|
if (additionalParam == 1) {
|
this.topicobj.ivrVoice = response.url;
|
} else if (additionalParam == 2) {
|
this.topicobj.nomatchvoice = response.url;
|
} else if (additionalParam == 3) {
|
this.topicobj.sliencevoice = response.url;
|
} else if (additionalParam == 4) {
|
this.topicobj.noclearlyvoice = response.url;
|
}
|
this.$forceUpdate();
|
},
|
// 文件超出个数限制时的钩子
|
handleExceed(files, fileList) {
|
this.$message.warning(
|
`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
|
files.length + fileList.length
|
} 个文件`
|
);
|
},
|
// 标签-----------------
|
gettabList() {
|
const tagqueryParams = {
|
pageNum: 1,
|
pageSize: 1000,
|
tagcategoryid: "0",
|
};
|
listtag(tagqueryParams).then((response) => {
|
this.optionstag = response.rows;
|
});
|
},
|
handleClosetag(tag) {
|
const lindex = this.dynamicTags.indexOf(tag);
|
this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
|
this.ruleForm.ivrLibaTemplateTagList[lindex].isoperation = 3;
|
},
|
handleInputConfirm() {
|
let tagvalue = {};
|
let tagname = this.inputValue;
|
if (tagname) {
|
listtag({
|
pageNum: 1,
|
pageSize: 1000,
|
tagcategoryid: "0",
|
tagname: tagname,
|
}).then((res) => {
|
if (res.rows[0]) {
|
tagvalue = res.rows[0];
|
tagvalue.isoperation = 1;
|
} else {
|
tagvalue = {
|
tagname: tagname,
|
isoperation: 1,
|
};
|
}
|
const exists = this.dynamicTags.some(
|
(department) => department.tagname === tagname
|
);
|
if (exists) {
|
this.$modal.msgError("标签重复");
|
return;
|
}
|
this.ruleForm.ivrLibaTemplateTagList.push(tagvalue);
|
this.dynamicTags.push(tagvalue);
|
});
|
}
|
this.inputVisible = false;
|
this.inputValue = "";
|
},
|
remoteMethodtag(query) {
|
if (query !== "") {
|
this.loading = true;
|
setTimeout(() => {
|
this.loading = false;
|
listtag({ tagname: query, tagcategoryid: "0" }).then((res) => {
|
this.optionstag = res.rows;
|
});
|
}, 200);
|
} else {
|
this.optionstag = [];
|
}
|
},
|
showInput() {
|
this.inputVisible = true;
|
},
|
//话术题目----------------
|
addzbiao() {},
|
resetQuery() {
|
this.queryParams = { pageNum: 1, pageSize: 10 };
|
this.getaddtopiclist();
|
},
|
getaddtopiclist() {
|
this.drawer = true;
|
getverbaltricklist(this.queryParams).then((res) => {
|
this.loading = false;
|
this.userList = res.rows;
|
this.total = res.total;
|
console.log(this.userList);
|
});
|
},
|
addtopic(row) {
|
if (
|
this.ruleForm.ivrTaskTemplateScriptVOList.some(
|
(obj) => obj.scriptTopic == row.scriptTopic
|
)
|
) {
|
this.$modal.msgError("该题目已存在");
|
return;
|
}
|
getverbaltrick({ id: row.id }).then((res) => {
|
console.log(res, "详情");
|
res.data.isoperation = 1;
|
res.data.pid = this.ruleForm.id;
|
res.data.ivrTaskScriptTargetoptionList.forEach((item) => {
|
item.isoperation = 1;
|
});
|
this.ruleForm.ivrTaskTemplateScriptVOList.push(res.data);
|
this.sortFn();
|
this.$modal.msgSuccess("添加成功");
|
});
|
},
|
handleDelete(row) {
|
this.$modal
|
.confirm('是否确认删除问题:"' + row.scriptTopic + '"?')
|
.then(() => {
|
this.ruleForm.ivrTaskTemplateScriptVOList.splice(
|
this.ruleForm.ivrTaskTemplateScriptVOList.indexOf(row),
|
1
|
);
|
row.isoperation = 3;
|
if (row.id) {
|
this.delScriptVOList.push(row);
|
}
|
this.sortFn();
|
this.$modal.msgSuccess("已删除,保存模板生效");
|
})
|
.catch(() => {});
|
},
|
handleUpdate(row) {
|
console.log(row, "单体数据");
|
this.optionIndex = this.ruleForm.ivrTaskTemplateScriptVOList.indexOf(row);
|
if (row.ivrTaskScriptTargetoptionList.length) {
|
this.topicobj = row;
|
this.topicobj.valueType = row.valueType;
|
} else {
|
getverbaltrick({ id: row.id }).then((res) => {
|
if (res.data) {
|
this.topicobj = res.data;
|
console.log(res.data, "topicobj");
|
} else {
|
this.topicobj = row;
|
console.log("没找到选项,请查看问题库是否正确配置");
|
}
|
});
|
}
|
},
|
syioption(row) {
|
const index = this.getIndexInArray(
|
this.ruleForm.ivrTaskTemplateScriptVOList,
|
row
|
);
|
const item = this.ruleForm.ivrTaskTemplateScriptVOList.splice(
|
index,
|
1
|
)[0]; // 移除指定索引处的元素,并保存到item变量中
|
this.ruleForm.ivrTaskTemplateScriptVOList.splice(index - 1, 0, item); // 将item插入到索引位置的前一位
|
this.sortFn();
|
},
|
xiayioption(row) {
|
const index = this.getIndexInArray(
|
this.ruleForm.ivrTaskTemplateScriptVOList,
|
row
|
);
|
const item = this.ruleForm.ivrTaskTemplateScriptVOList.splice(
|
index,
|
1
|
)[0]; // 移除指定索引处的元素,并保存到item变量中
|
this.ruleForm.ivrTaskTemplateScriptVOList.splice(index + 1, 0, item); // 将item插入到索引位置的前一位
|
this.sortFn();
|
},
|
// 问题排序
|
sortFn() {
|
console.log(this.ruleForm.ivrTaskTemplateScriptVOList);
|
|
this.ruleForm.ivrTaskTemplateScriptVOList.forEach((item, index) => {
|
item.sort = Number(index) + 1;
|
console.log(this.ruleForm.ivrTaskTemplateScriptVOList.length);
|
console.log(item.sort);
|
|
if (item.sort == this.ruleForm.ivrTaskTemplateScriptVOList.length) {
|
item.nextScriptno = 0;
|
} else {
|
item.nextScriptno = item.sort + 1;
|
}
|
if (item.ivrTaskScriptTargetoptionList && !item.branchFlag) {
|
item.ivrTaskScriptTargetoptionList.forEach((items) => {
|
items.nextQuestion = Number(item.sort) + 1;
|
});
|
}
|
});
|
this.$forceUpdate();
|
|
console.log(this.ruleForm.ivrTaskTemplateScriptVOList);
|
},
|
// -----------------------话术选项
|
deloption(item) {
|
const index = this.topicobj.ivrTaskScriptTargetoptionList.indexOf(item);
|
if (index != -1) {
|
if (item.id) {
|
console.log(item, "chunz");
|
item.isoperation = 3;
|
console.log(this.topicobj.ivrTaskScriptTargetoptionList);
|
this.$forceUpdate();
|
} else {
|
this.topicobj.ivrTaskScriptTargetoptionList.splice(index, 1); // 从索引位置删除一个元素
|
}
|
// this.sortFn();
|
} else {
|
console.log("未找到该对象");
|
}
|
},
|
// 修改题目信息
|
Submittopicobj() {
|
this.$modal
|
.confirm(
|
'是否确认新增名称为"' + this.indexform.scriptTopic + '"的问题数据?'
|
)
|
.then(() => {
|
this.indexform.isoperation = 1;
|
this.indexform.pid = this.ruleForm.id;
|
this.indexform.ivrTaskScriptTargetoptionList.forEach((item) => {
|
item.isoperation = 1;
|
});
|
this.ruleForm.ivrTaskTemplateScriptVOList.push(this.indexform);
|
this.indexform = {
|
ivrTaskScriptTargetoptionList: [],
|
};
|
this.drawer = false;
|
|
this.sortFn();
|
this.$modal.msgSuccess("题目新增成功,保存模板生效");
|
});
|
},
|
|
// ---------------------
|
resetForm(formName) {
|
this.$refs[formName].resetFields();
|
},
|
// 科室删除触发
|
removetag(row) {
|
let result = this.deptlist
|
.filter((item) => item.deptCode == row)
|
.map((item) => item.id);
|
console.log(result.length);
|
if (result.length) {
|
depthospgetsondel(result).then((res) => {
|
if (res.code) {
|
}
|
});
|
}
|
},
|
// 删除删除触发
|
removehpsp(row) {
|
let result = this.hosplist
|
.filter((item) => item.deptCode == row)
|
.map((item) => item.id);
|
if (result.length) {
|
depthospgetsondel(result).then((res) => {
|
if (res.code) {
|
}
|
});
|
}
|
},
|
// 预览---------------
|
preview() {
|
console.log(this.ruleForm);
|
this.valssu = this.ruleForm.ivrTaskTemplateScriptVOList;
|
this.Editprogress = 3;
|
},
|
// 前往测试
|
measurement() {
|
this.$modal
|
.confirm("即将前往模板测试页面,请确认模板数据已保存。")
|
.then((res) => {
|
this.$router.push({
|
path: "/knowledge/templateku/configurat/measurement",
|
query: {
|
id: this.id,
|
name: this.ruleForm.templateName,
|
timeout: this.ruleForm.silencetime,
|
},
|
});
|
})
|
.catch(() => {});
|
},
|
// 新建模板中临时题目
|
// 题目类型更换
|
typeselection(row) {
|
if (row == 1 && !this.indexform.ivrTaskScriptTargetoptionList.length) {
|
this.indexform.ivrTaskScriptTargetoptionList.push({
|
guid: 1,
|
isoperation: 1,
|
targetvalue: "",
|
targetregex: "",
|
targetregex2: "",
|
dynamiccruxs: [],
|
nodynamiccruxs: [],
|
dynamiccruxsJson: "",
|
nodynamiccruxsJson: "",
|
});
|
}
|
this.$forceUpdate();
|
},
|
addoptionson() {
|
this.indexform.ivrTaskScriptTargetoptionList.push({
|
guid: 1,
|
isoperation: 1,
|
targetvalue: "",
|
targetregex: "",
|
targetregex2: "",
|
dynamiccruxs: [],
|
nodynamiccruxs: [],
|
dynamiccruxsJson: "",
|
nodynamiccruxsJson: "",
|
});
|
},
|
},
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.Questionnairemanagement {
|
// display: flex;
|
}
|
.sidecolumn {
|
margin: 20px;
|
margin-bottom: 0;
|
padding: 30px;
|
background: #edf1f7;
|
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);
|
}
|
.leftvlue {
|
// display: flex;
|
// flex: 1;
|
// width: 80%;
|
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);
|
.mulsz {
|
font-size: 20px;
|
}
|
.leftvlue-jbxx {
|
font-size: 24px;
|
border-left: 5px solid #41a1be;
|
padding-left: 5px;
|
margin: 15px 0;
|
}
|
.demo-cascader {
|
margin-right: 20px;
|
}
|
.PreviewTemplate {
|
color: #02a7f0;
|
cursor: pointer;
|
font-size: 20px;
|
margin: 0 20px;
|
}
|
}
|
.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);
|
.scriptTopic-dev {
|
margin-bottom: 25px;
|
font-size: 20px !important;
|
.dev-text {
|
margin-bottom: 10px;
|
}
|
}
|
.headline {
|
display: flex;
|
justify-content: space-between;
|
font-size: 20px;
|
border-left: 3px solid #41a1be;
|
padding-left: 5px;
|
margin: 15px 0;
|
}
|
.topicxq {
|
background-color: #e2f5fc;
|
border-radius: 4px;
|
margin-top: 10px;
|
padding-left: 10px;
|
padding-top: 15px;
|
}
|
}
|
.xinz-inf {
|
font-size: 18px;
|
white-space: nowrap;
|
overflow: hidden;
|
text-overflow: ellipsis;
|
|
line-height: 48px;
|
|
.el-tag + .el-tag {
|
margin-left: 10px;
|
}
|
.button-new-tag {
|
margin-left: 10px;
|
height: 32px;
|
line-height: 30px;
|
padding-top: 0;
|
padding-bottom: 0;
|
}
|
.input-new-tag {
|
width: 90px;
|
margin-left: 10px;
|
vertical-align: bottom;
|
}
|
}
|
|
.xinz-infs {
|
font-size: 18px;
|
line-height: 48px;
|
|
.el-tag + .el-tag {
|
margin-left: 10px;
|
}
|
}
|
.addtopic {
|
margin-top: 30px;
|
}
|
.presentation {
|
margin: 20px 0;
|
display: flex;
|
.presentation-left {
|
width: 45%;
|
// height: 500px;
|
.button-textxg {
|
color: #024df0;
|
}
|
.button-textsc {
|
color: #f52727;
|
}
|
}
|
.spresentation-left {
|
width: 100%;
|
// height: 500px;
|
.button-textxg {
|
color: #024df0;
|
}
|
.button-textsc {
|
color: #f52727;
|
}
|
}
|
.presentation-right {
|
width: 55%;
|
max-height: 688px;
|
margin: 0 20px;
|
font-size: 18px;
|
-webkit-box-shadow: 0 2px 4px 0 rgba(32, 32, 32, 0.12),
|
0 0 6px 0 rgba(58, 57, 57, 0.04);
|
overflow: auto;
|
.headline {
|
display: flex;
|
justify-content: space-between;
|
font-size: 20px;
|
border-left: 3px solid #41a1be;
|
padding-left: 5px;
|
margin: 15px 0;
|
}
|
.topicxq {
|
background-color: #e2f5fc;
|
border-radius: 4px;
|
margin-top: 10px;
|
padding-left: 10px;
|
padding-top: 15px;
|
}
|
}
|
}
|
::v-deep .addtopic-input {
|
input {
|
background: #02a7f0;
|
color: #edf1f7;
|
width: 150px;
|
}
|
}
|
::v-deep.el-step.is-vertical .el-step__title {
|
font-size: 20px;
|
}
|
::v-deep.el-input--medium {
|
font-size: 18px !important;
|
}
|
::v-deep.ruleFormaa.el-select {
|
display: inline-block;
|
position: relative;
|
width: 700px;
|
}
|
.el-select__tags {
|
font-size: 20px;
|
max-width: 888px !important;
|
}
|
::v-deep.el-radio__inner {
|
width: 22px;
|
height: 22px;
|
}
|
// ::v-deep.topic-dev.el-radio__label {
|
// font-size: 24px;
|
// }
|
::v-deep.el-radio-group {
|
span {
|
font-size: 20px;
|
}
|
}
|
::v-deep.el-checkbox-group {
|
span {
|
font-size: 20px;
|
}
|
}
|
// ::v-deep.el-form-item--medium .el-form-item__content {
|
// line-height: 36px;
|
// display: flex;
|
// }
|
</style>
|