This commit is contained in:
2024-09-14 14:54:06 +08:00
parent 030245d130
commit 8fa3fdb4e1
4 changed files with 122 additions and 71 deletions

View File

@ -72,7 +72,7 @@ import {
selectDiseaseCounts, selectDiseaseCounts,
} from "@/api/system/departmentDisease"; } from "@/api/system/departmentDisease";
export default { export default {
props: ['methods', 'modal', 'servicePackageId'], props: ['methods', 'modal', 'servicePackageId', 'hospitalAgencyId'],
name: "DepartmentList", name: "DepartmentList",
data() { data() {
return { return {
@ -109,7 +109,11 @@ export default {
}, },
}, },
created() { created() {
this.querydepartmen.hospitalAgencyId = JSON.parse(localStorage.getItem('user')).hospitalAgencyId if (this.$route.query.hospitalAgencyId && this.$route.path == '/knowledge/addQuestionnaire') {
this.querydepartmen.hospitalAgencyId = this.$route.query.hospitalAgencyId
} else {
this.querydepartmen.hospitalAgencyId = JSON.parse(localStorage.getItem('user')).hospitalAgencyId
}
this.vmodal = this.modal this.vmodal = this.modal
if (this.methods == 'getDepartmentList' && localStorage.getItem('questionquery')) { if (this.methods == 'getDepartmentList' && localStorage.getItem('questionquery')) {
this.querydepartmen.hospitalAgencyId = JSON.parse(localStorage.getItem('questionquery')).hospitalAgencyId this.querydepartmen.hospitalAgencyId = JSON.parse(localStorage.getItem('questionquery')).hospitalAgencyId

View File

@ -51,7 +51,7 @@
<div ref="table"> <div ref="table">
<el-table :max-height="maxTableHeight" v-loading="loading" :data="scriptList" <el-table :max-height="maxTableHeight" v-loading="loading" :data="scriptList"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column label="序号" align="center" prop="sort" type="index" width="48"/> <el-table-column label="序号" align="center" prop="sort" type="index" width="48" />
<el-table-column label="通用话术名称" align="center" prop="commonScriptName" :show-overflow-tooltip="true" /> <el-table-column label="通用话术名称" align="center" prop="commonScriptName" :show-overflow-tooltip="true" />
<el-table-column label="话术名称" align="center" prop="scriptName" :show-overflow-tooltip="true" /> <el-table-column label="话术名称" align="center" prop="scriptName" :show-overflow-tooltip="true" />
<el-table-column label="话术ID" align="center" prop="scriptId" :show-overflow-tooltip="true" /> <el-table-column label="话术ID" align="center" prop="scriptId" :show-overflow-tooltip="true" />
@ -78,10 +78,9 @@
<el-button size="mini" icon="el-icon-folder-checked" type="text" @click="release(scope.row)">发布</el-button> --> <el-button size="mini" icon="el-icon-folder-checked" type="text" @click="release(scope.row)">发布</el-button> -->
<!-- <el-button size="mini" type="text" icon="el-icon-search" @click="handlesee(scope.row)">预览</el-button> --> <!-- <el-button size="mini" type="text" icon="el-icon-search" @click="handlesee(scope.row)">预览</el-button> -->
<el-button size="mini" type="text" icon="el-icon-zoom-in" @click="see(scope.row)">话术</el-button> <el-button size="mini" type="text" icon="el-icon-zoom-in" @click="see(scope.row)">话术</el-button>
<el-button size="mini" type="text" icon="el-icon-picture-outline" <el-button size="mini" type="text" icon="el-icon-picture-outline" @click="seescript(scope.row)">
@click="seescript(scope.row)"> 预览</el-button> 预览</el-button>
<el-button size="mini" type="text" icon="el-icon-document" <el-button size="mini" type="text" icon="el-icon-document" @click="seeAI(scope.row)"> AI话术</el-button>
@click="seeAI(scope.row)"> AI话术</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['manage:script:edit']">修改</el-button> v-hasPermi="['manage:script:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
@ -106,8 +105,8 @@
<el-input v-model="form.scriptName" placeholder="请输入话术名称" maxlength="100" /> <el-input v-model="form.scriptName" placeholder="请输入话术名称" maxlength="100" />
</el-form-item> </el-form-item>
<el-form-item label="科室名称" prop="departmentId"> <el-form-item label="科室名称" prop="departmentId">
<el-button type="" @click="clickinnerVisible()" :style="form.departmentName == '请选择科室' ? 'color: #c0c4cc;' : '' <el-button type="" @click="clickinnerVisible()"
" style=" :style="form.departmentName == '请选择科室' ? 'color: #c0c4cc;' : ''" style="
width: 206px; width: 206px;
text-align: left; text-align: left;
height: 36px; height: 36px;
@ -115,8 +114,8 @@
">{{ form.departmentName }}</el-button> ">{{ form.departmentName }}</el-button>
</el-form-item> </el-form-item>
<el-form-item label="病种名称" prop="diseaseTypeName"> <el-form-item label="病种名称" prop="diseaseTypeName">
<el-button type="" @click="clickdisease()" :style="form.diseaseTypeName == '请选择病种' ? 'color: #c0c4cc;' : '' <el-button type="" @click="clickdisease()" :style="form.diseaseTypeName == '请选择病种' ? 'color: #c0c4cc;' : ''"
" style=" style="
width: 206px; width: 206px;
text-align: left; text-align: left;
height: 36px; height: 36px;
@ -132,6 +131,9 @@
<el-input onKeyUp="value=value.replace(/[\W]/g,'')" v-model="form.robotPublishId" placeholder="请输入机器人ID" <el-input onKeyUp="value=value.replace(/[\W]/g,'')" v-model="form.robotPublishId" placeholder="请输入机器人ID"
maxlength="100" /> maxlength="100" />
</el-form-item> </el-form-item>
<el-form-item label="话术变量" prop="variables">
<el-input v-model="form.variables" placeholder="多个变量名用|分隔" style="width: 206px" />
</el-form-item>
<el-form-item label="话术排序" prop="scriptSort"> <el-form-item label="话术排序" prop="scriptSort">
<el-input-number v-model="form.scriptSort" controls-position="right" :min="0" placeholder="请输入话术排序" <el-input-number v-model="form.scriptSort" controls-position="right" :min="0" placeholder="请输入话术排序"
style="width: 206px" /> style="width: 206px" />
@ -146,7 +148,6 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="话术简介" prop="scriptIntroduction"> <el-form-item label="话术简介" prop="scriptIntroduction">
<el-input maxlength="200" v-model="form.scriptIntroduction" placeholder="请输入话术简介" type="textarea" /> <el-input maxlength="200" v-model="form.scriptIntroduction" placeholder="请输入话术简介" type="textarea" />
</el-form-item> </el-form-item>
@ -163,26 +164,26 @@
<el-dialog title="" :visible.sync="innerVisibleshow" width="1000px" append-to-body <el-dialog title="" :visible.sync="innerVisibleshow" width="1000px" append-to-body
:before-close="innerVisiblecancel"> :before-close="innerVisiblecancel">
<div style="padding-bottom: 23px;"> <div style="padding-bottom: 23px;">
<el-form ref="queryForm" :model="informationqueryParams" :rules="rules" label-width="80px" :inline="true"> <el-form ref="queryForm" :model="informationqueryParams" :rules="rules" label-width="80px" :inline="true">
<el-form-item label="科室名称" prop="departmentName" label-width="120"> <el-form-item label="科室名称" prop="departmentName" label-width="120">
<el-input v-model="informationqueryParams.departmentName" placeholder="请输入科室名称" clearable /> <el-input v-model="informationqueryParams.departmentName" placeholder="请输入科室名称" clearable />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="informationInfoinfo">搜索</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="informationInfoinfo">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="addresetQuerylist">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="addresetQuerylist">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table :data="infolist" @cell-dblclick="nurseclick" v-loading="loading"> <el-table :data="infolist" @cell-dblclick="nurseclick" v-loading="loading">
<el-table-column label="请选择" width="100" align="center"> <el-table-column label="请选择" width="100" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="primary" style="width: 15px; height: 15px" v-if="form.departmentId == scope.row.id" circle <el-button type="primary" style="width: 15px; height: 15px" v-if="form.departmentId == scope.row.id"
@click="nurseclick(scope.row)"></el-button> circle @click="nurseclick(scope.row)"></el-button>
<el-button v-else style="width: 15px; height: 15px" circle @click="nurseclick(scope.row)"></el-button> <el-button v-else style="width: 15px; height: 15px" circle @click="nurseclick(scope.row)"></el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column property="departmentName" label="科室名称" align="center" :show-overflow-tooltip="true"> <el-table-column property="departmentName" label="科室名称" align="center" :show-overflow-tooltip="true">
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<myPagination v-show="totaldepartment > 0" :total="totaldepartment" :pageSize="informationqueryParams.pageSize" <myPagination v-show="totaldepartment > 0" :total="totaldepartment" :pageSize="informationqueryParams.pageSize"
:indexFromWrap="informationqueryParams.pageNum" @updateCPage="updateCPagetwo"></myPagination> :indexFromWrap="informationqueryParams.pageNum" @updateCPage="updateCPagetwo"></myPagination>
@ -192,27 +193,27 @@
<!-- 病种弹框 --> <!-- 病种弹框 -->
<el-dialog title="" :visible.sync="diseaseshowst" width="1000px" append-to-body :before-close="canceldiseases"> <el-dialog title="" :visible.sync="diseaseshowst" width="1000px" append-to-body :before-close="canceldiseases">
<div style="padding-bottom: 23px;"> <div style="padding-bottom: 23px;">
<el-form ref="queryForm" :model="querydisease" :rules="rules" label-width="80px" :inline="true"> <el-form ref="queryForm" :model="querydisease" :rules="rules" label-width="80px" :inline="true">
<el-form-item label="病种名称" prop="diseaseTypeName" label-width="120"> <el-form-item label="病种名称" prop="diseaseTypeName" label-width="120">
<el-input v-model="querydisease.diseaseTypeName" placeholder="请输入病种名称" clearable /> <el-input v-model="querydisease.diseaseTypeName" placeholder="请输入病种名称" clearable />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="infodisease">搜索</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="infodisease">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetdisease">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetdisease">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table :data="listdisease" @cell-dblclick="nurseclickdisease" v-loading="loading"> <el-table :data="listdisease" @cell-dblclick="nurseclickdisease" v-loading="loading">
<el-table-column label="请选择" width="100" align="center"> <el-table-column label="请选择" width="100" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="primary" style="width: 15px; height: 15px" v-if="form.diseaseTypeId == scope.row.id" circle <el-button type="primary" style="width: 15px; height: 15px" v-if="form.diseaseTypeId == scope.row.id"
@click="nurseclickdisease(scope.row)"></el-button> circle @click="nurseclickdisease(scope.row)"></el-button>
<el-button v-else style="width: 15px; height: 15px" circle <el-button v-else style="width: 15px; height: 15px" circle
@click="nurseclickdisease(scope.row)"></el-button> @click="nurseclickdisease(scope.row)"></el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column property="diseaseTypeName" label="病种名称" align="center" :show-overflow-tooltip="true"> <el-table-column property="diseaseTypeName" label="病种名称" align="center" :show-overflow-tooltip="true">
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<!-- <pagination v-show="diseasetotal > 0" :total="diseasetotal" :page.sync="querydisease.pageNum" <!-- <pagination v-show="diseasetotal > 0" :total="diseasetotal" :page.sync="querydisease.pageNum"
:limit.sync="querydisease.pageSize" @pagination="infodisease" /> --> :limit.sync="querydisease.pageSize" @pagination="infodisease" /> -->
@ -322,6 +323,7 @@ export default {
scriptStatus: null, scriptStatus: null,
scriptIntroduction: null, scriptIntroduction: null,
scriptSort: null, scriptSort: null,
variables: null,
scriptRemark: null, scriptRemark: null,
}, },
// //
@ -338,6 +340,7 @@ export default {
platformId: null, platformId: null,
scriptStatus: "", scriptStatus: "",
scriptIntroduction: null, scriptIntroduction: null,
variables: null,
scriptSort: null, scriptSort: null,
scriptRemark: null, scriptRemark: null,
createBy: null, createBy: null,
@ -457,7 +460,7 @@ export default {
}); });
}, },
// AI // AI
seeAI(row){ seeAI(row) {
window.open(`https://aifuv2cloud.aihealthx.cn/NewRobotTemplate/?template_id=${row.scriptId}`, '_blank'); window.open(`https://aifuv2cloud.aihealthx.cn/NewRobotTemplate/?template_id=${row.scriptId}`, '_blank');
}, },
// //
@ -610,6 +613,7 @@ export default {
this.form = { this.form = {
id: null, id: null,
departmentId: null, departmentId: null,
variables: null,
scriptSort: undefined, scriptSort: undefined,
departmentName: null, departmentName: null,
diseaseTypeId: null, diseaseTypeId: null,
@ -650,6 +654,7 @@ export default {
platformId: null, platformId: null,
scriptStatus: null, scriptStatus: null,
scriptIntroduction: null, scriptIntroduction: null,
variables: null,
scriptSort: null, scriptSort: null,
scriptRemark: null, scriptRemark: null,
hospitalAgencyId: JSON.parse(localStorage.getItem('user')).hospitalAgencyId hospitalAgencyId: JSON.parse(localStorage.getItem('user')).hospitalAgencyId

View File

@ -9,6 +9,11 @@
<el-radio label="SATISFACTION_QUESTIONNAIRE">满意度问卷</el-radio> <el-radio label="SATISFACTION_QUESTIONNAIRE">满意度问卷</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<div class="topheader" style="padding-left: 20px;">
关联话术库
<scripts @on-template="messageontemplateword" :templateId="list.scriptInfoId"
:templateName="list.scriptName"></scripts>
</div>
<div class="topheader" style="text-align: right;"> <div class="topheader" style="text-align: right;">
<el-button size="medium" @click="goback">返回</el-button> <el-button size="medium" @click="goback">返回</el-button>
<!-- <el-button size="medium" type="primary" plain>预览问卷</el-button> --> <!-- <el-button size="medium" type="primary" plain>预览问卷</el-button> -->
@ -97,8 +102,11 @@
<div> <div>
<div v-for="(uitem, uindex) in item.questionSubjectOptionList" <div v-for="(uitem, uindex) in item.questionSubjectOptionList"
:key="uindex" style="display:flex;margin-bottom:10px"> :key="uindex" style="display:flex;margin-bottom:10px">
<el-input placeholder="请输入内容" v-model="uitem.optionName" clearable> <el-input placeholder="请输入内容" v-model="uitem.optionName"
</el-input> style="width:180px" clearable />
<span style="width:120px;text-align:right">匹配意图 </span>
<el-input placeholder="请输入内容" v-model="uitem.intent" clearable
style="width:180px" />
<el-button icon="el-icon-close" type="text" <el-button icon="el-icon-close" type="text"
style="color:red;margin-left:10px" style="color:red;margin-left:10px"
@click.stop="deloption(item, uitem, index, uindex)"></el-button> @click.stop="deloption(item, uitem, index, uindex)"></el-button>
@ -222,12 +230,14 @@
<span>选项 </span> <span>选项 </span>
<div> <div>
<div v-for="(uitem, uindex) in aitem.questionSubjectOptionList" <div v-for="(uitem, uindex) in aitem.questionSubjectOptionList"
:key="uindex" style="display:flex"> :key="uindex" style="display:flex;margin-bottom:10px;">
<el-input placeholder="请输入内容" v-model="uitem.optionName" <el-input placeholder="请输入内容" v-model="uitem.optionName"
clearable> style="width:180px" clearable />
</el-input> <span style="width:100px;text-align:right">匹配意图 </span>
<el-input placeholder="请输入内容" v-model="uitem.intent" clearable
style="width:180px" />
<el-button icon="el-icon-close" type="text" <el-button icon="el-icon-close" type="text"
style="color:red;margin:10px 0 0 10px" style="color:red;margin:0 0 0 10px"
@click.stop="deloption(aitem, uitem, aindex, uindex)"></el-button> @click.stop="deloption(aitem, uitem, aindex, uindex)"></el-button>
</div> </div>
</div> </div>
@ -472,11 +482,12 @@
<script> <script>
import { getQuestion, addQuestion, updateQuestion, selectUserDepartment, diseaseList } from "@/api/system/question"; import { getQuestion, addQuestion, updateQuestion, selectUserDepartment, diseaseList } from "@/api/system/question";
import draggable from 'vuedraggable' import draggable from 'vuedraggable'
import scripts from "../components/script.vue";
export default { export default {
name: "addQuestionnaire", name: "addQuestionnaire",
dicts: ['scoring_method'], dicts: ['scoring_method'],
components: { components: {
draggable draggable, scripts
}, },
data() { data() {
return { return {
@ -539,6 +550,9 @@ export default {
}, },
], ],
list: { list: {
robotPublishId:undefined,
scriptName: undefined,
scriptInfoId: undefined,
questionnaireName: undefined, questionnaireName: undefined,
questionnaireDescription: undefined, questionnaireDescription: undefined,
questionnaireTotalScore: 0, // questionnaireTotalScore: 0, //
@ -578,8 +592,7 @@ export default {
diseaselist: [], diseaselist: [],
}; };
}, },
watch: { watch: {},
},
created() { created() {
if (this.$route.query.id) { if (this.$route.query.id) {
this.info(); this.info();
@ -645,6 +658,12 @@ export default {
}, },
}, },
methods: { methods: {
//
messageontemplateword(item) {
this.list.robotPublishId = item.robotPublishId
this.list.scriptName = item.templateName
this.list.scriptInfoId = item.templateId
},
changediseaseType(e) { changediseaseType(e) {
this.list.diseaseTypeName = this.diseaselist?.find(el => el.id == e)?.diseaseTypeName this.list.diseaseTypeName = this.diseaselist?.find(el => el.id == e)?.diseaseTypeName
}, },
@ -688,6 +707,7 @@ export default {
optionid: ++this.optionid, optionid: ++this.optionid,
optionName: '', optionName: '',
optionAnswer: '', optionAnswer: '',
intent: '',
// //
questionName: '', questionName: '',
// //
@ -779,6 +799,7 @@ export default {
questionDescription: '', questionDescription: '',
questionSubjectOptionList: [{ questionSubjectOptionList: [{
optionid: ++this.optionid, optionid: ++this.optionid,
intent: '',
// //
questionName: undefined, questionName: undefined,
// //
@ -811,6 +832,7 @@ export default {
optionid: ++this.optionid, optionid: ++this.optionid,
optionName: '', optionName: '',
optionAnswer: '', optionAnswer: '',
intent: '',
// //
questionName: undefined, questionName: undefined,
// //
@ -1063,6 +1085,7 @@ export default {
item.questionSubjectOptionList = [] item.questionSubjectOptionList = []
for (var i = 0; i < e; i++) { for (var i = 0; i < e; i++) {
item.questionSubjectOptionList.push({ item.questionSubjectOptionList.push({
intent: '',
optionid: ++this.optionid, optionid: ++this.optionid,
optionName: i + 1, optionName: i + 1,
optionScore: 0, optionScore: 0,
@ -1088,6 +1111,8 @@ export default {
if (!this.list.departmentId) { if (!this.list.departmentId) {
this.$message.error('请选择科室!'); this.$message.error('请选择科室!');
return return
} else {
this.list.departmentName = this.departmentlist?.find(el => el.id == this.list.departmentId)?.departmentName
} }
if (!this.list.diseaseTypeId) { if (!this.list.diseaseTypeId) {
this.$message.error('请选择病种!'); this.$message.error('请选择病种!');
@ -1248,6 +1273,21 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .el-form {
display: flex;
flex-wrap: wrap;
.el-form-item {
display: flex;
align-items: center;
}
}
::v-deep .el-dialog__header {
padding: 0 20px;
height: 40px;
}
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 5px; width: 5px;
} }
@ -1538,7 +1578,7 @@ export default {
} }
.topheader { .topheader {
width: 50%; width: 33%;
display: inline-block; display: inline-block;
padding-right: 30px; padding-right: 30px;
height: 80px; height: 80px;

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="app-container"> <div class="app-containers">
<el-button size="small" @click="classificationOpen = true" style=" <el-button size="small" @click="classificationOpen = true" style="
width: 200px; width: 200px;
font-size: 14px; font-size: 14px;
@ -43,7 +43,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table v-loading="loading" :data="scriptList" @row-dblclick="handleselect"> <el-table v-loading="loading" :data="scriptList" @row-dblclick="handleselect">
<el-table-column label="序号" align="center" prop="sort" type="index" width="48"/> <el-table-column label="序号" align="center" prop="sort" type="index" width="48" />
<el-table-column label="通用话术名称" align="center" prop="commonScriptName" :show-overflow-tooltip="true" /> <el-table-column label="通用话术名称" align="center" prop="commonScriptName" :show-overflow-tooltip="true" />
<el-table-column label="话术名称" align="center" prop="scriptName" :show-overflow-tooltip="true" /> <el-table-column label="话术名称" align="center" prop="scriptName" :show-overflow-tooltip="true" />
<el-table-column label="话术ID" align="center" prop="scriptId" :show-overflow-tooltip="true" /> <el-table-column label="话术ID" align="center" prop="scriptId" :show-overflow-tooltip="true" />
@ -181,11 +181,12 @@ export default {
this.handleselectId = ""; this.handleselectId = "";
this.handleselectName = ""; this.handleselectName = "";
this.$emit("on-template", { this.$emit("on-template", {
robotPublishId: '',
templateId: "", templateId: "",
templateName: "", templateName: "",
templateContent: "", templateContent: "",
scriptInfoId:'', scriptInfoId: '',
phoneTemplateId:'', phoneTemplateId: '',
}); });
}, },
handleselect(item) { handleselect(item) {
@ -196,8 +197,9 @@ export default {
templateName: item.commonScriptName, templateName: item.commonScriptName,
templateContent: item.scriptIntroduction, templateContent: item.scriptIntroduction,
phoneNodeContent: item.flowScheme, phoneNodeContent: item.flowScheme,
scriptInfoId:item.id, scriptInfoId: item.id,
phoneTemplateId:item.scriptId, phoneTemplateId: item.scriptId,
robotPublishId: item.robotPublishId
}); });
this.classificationOpen = false; this.classificationOpen = false;
}, },
@ -254,7 +256,7 @@ export default {
padding-bottom: 60px; padding-bottom: 60px;
} }
.app-container { .app-containers {
display: inline-block; display: inline-block;
padding: 0 !important; padding: 0 !important;
// background: red; // background: red;