<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">
|
<span slot="title" style="cursor: pointer" @click="Editprogress = 3"
|
>问卷预览</span
|
>
|
</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="100px"
|
class="demo-ruleForm"
|
>
|
<el-row :gutter="10">
|
<el-col :span="10">
|
<el-form-item label="问卷分类" prop="region">
|
<el-select
|
v-model="ruleForm.categoryid"
|
size="medium"
|
filterable
|
placeholder="请选择分类"
|
>
|
<el-option-group
|
v-for="group in optionsclass"
|
:key="group.id"
|
:label="group.name"
|
>
|
<el-option
|
v-for="item in group.svyLibTemplateCategoryList"
|
:key="item.id"
|
:label="item.name"
|
:value="item.id"
|
>
|
</el-option>
|
</el-option-group>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="10">
|
<el-form-item label="评价类型">
|
<el-select
|
v-model="ruleForm.scoreType"
|
placeholder="请选择分类"
|
>
|
<el-option
|
v-for="group in appraiselist"
|
:key="group.value"
|
:label="group.label"
|
:value="group.value"
|
>
|
</el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-form-item label="问卷标题" prop="name">
|
<div style="width: 30%">
|
<el-input v-model="ruleForm.svyname"></el-input>
|
</div>
|
</el-form-item>
|
<el-form-item label="问卷描述">
|
<el-input
|
style="width: 40vw"
|
type="textarea"
|
autosize
|
placeholder="请输入内容"
|
v-model="ruleForm.description"
|
>
|
</el-input
|
></el-form-item>
|
|
<el-form-item label="文件" prop="sickness">
|
<div style="width: 40%">
|
<el-upload
|
class="upload-demo"
|
action="https://jsonplaceholder.typicode.com/posts/"
|
:on-change="handleChange"
|
:file-list="fileList"
|
>
|
<el-button size="small" type="primary">点击上传</el-button>
|
<div slot="tip" class="el-upload__tip">
|
只能上传jpg/png/xsl文件,且不超过50mb
|
</div>
|
</el-upload>
|
</div>
|
</el-form-item>
|
<el-row>
|
<el-form-item label="标签" prop="desc">
|
<div class="xinz-inf">
|
<el-tag
|
:key="tag"
|
type="success"
|
v-for="tag in dynamicTags"
|
closable
|
:disable-transitions="false"
|
@close="handleClosetag(tag)"
|
>
|
{{ tag }}
|
</el-tag>
|
<el-select
|
v-model="inputValue"
|
v-if="inputVisible"
|
@change="handleInputConfirm"
|
filterable
|
remote
|
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>
|
</el-row>
|
<el-row>
|
<el-form-item label="适用疾病" prop="region">
|
<div class="xinz-inf">
|
<el-tag
|
:key="item.icd10name"
|
type="warning"
|
v-for="item in illnesslist"
|
closable
|
:disable-transitions="false"
|
@close="handleCloseillness(item)"
|
>
|
{{ item.icd10name }}
|
</el-tag>
|
<el-select
|
v-model="inputValueillness"
|
v-if="inputVisibleillness"
|
@change="illnessConfirm"
|
:remote-method="remoteMethod"
|
filterable
|
remote
|
allow-create
|
default-first-option
|
placeholder="请选择/查询"
|
:loading="loading"
|
>
|
<el-option
|
v-for="item in optionsillness"
|
:key="item.icdid"
|
:label="item.icdname"
|
:value="item.icdid"
|
>
|
</el-option>
|
</el-select>
|
<el-button
|
v-else
|
class="button-new-tag"
|
size="small"
|
@click="inputVisibleillness = true"
|
>+ 新增疾病</el-button
|
>
|
</div>
|
</el-form-item>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="6">
|
<el-form-item label="版本号" prop="name">
|
<el-input v-model="ruleForm.version"></el-input> </el-form-item
|
></el-col>
|
<el-col :span="9">
|
<el-form-item label="可用状态" prop="region">
|
<el-select
|
v-model="ruleForm.isenable"
|
size="medium"
|
filterable
|
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-form-item label="问卷方式" prop="region">
|
<el-select
|
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="region">
|
<el-select
|
v-model="ruleForm.campus"
|
size="medium"
|
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-form-item label="适用科室" prop="region">
|
<el-cascader
|
v-model="tempDetpRelevanceslist"
|
:options="deptList"
|
:props="props"
|
:show-all-levels="false"
|
clearable
|
>
|
<template slot-scope="{ node, data }">
|
<span>{{ data.deptName }}</span>
|
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
|
</template>
|
</el-cascader>
|
</el-form-item>
|
<el-form-item>
|
<el-button type="success" @click="nextstep('ruleForm')"
|
>下一步</el-button
|
>
|
<el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
|
<el-button @click="Departmenttreatment('ruleForm')"
|
>保存问卷基础信息</el-button
|
>
|
</el-form-item>
|
</el-form>
|
</div>
|
<!-- 问卷设置 -->
|
<div v-if="Editprogress == 2">
|
<div class="leftvlue-jbxx">问卷题目设置</div>
|
<el-divider></el-divider>
|
<div style="display: flex; justify-content: space-between">
|
<div>
|
<el-button
|
type="primary"
|
icon="el-icon-plus"
|
round
|
@click="getaddtopiclist"
|
>添加题目</el-button
|
>
|
</div>
|
<div style="display: flex">
|
<span
|
style="
|
width: 180px;
|
font-size: 20px;
|
font-weight: normal;
|
color: red;
|
"
|
>问卷总分:</span
|
>
|
<el-input
|
v-model="ruleForm.scriptScore"
|
placeholder="请输入分数"
|
></el-input>
|
</div>
|
</div>
|
<div class="presentation">
|
<div class="presentation-left">
|
<el-card class="box-card" style="min-height: 688px">
|
<el-table
|
v-loading="loading"
|
:data="ruleForm.svyTemplateLibScripts"
|
>
|
<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
|
label="题目内容"
|
align="center"
|
key="scriptContent"
|
prop="scriptContent"
|
:show-overflow-tooltip="true"
|
/>
|
|
<el-table-column
|
label="操作"
|
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">
|
<el-card class="box-card">
|
<el-form
|
:inline="true"
|
:model="topicobj"
|
class="demo-form-inline"
|
>
|
<div class="headline">
|
题目设置详情
|
<span style="margin-left: 30px"
|
><el-button type="primary" @click="Submittopicobj"
|
>保存</el-button
|
></span
|
>
|
</div>
|
<el-form-item label="题目标题">
|
<el-input
|
v-model="topicobj.scriptTopic"
|
placeholder="请输入标题"
|
></el-input>
|
</el-form-item>
|
<el-row :gutter="10">
|
<el-col :span="12"
|
><el-form-item label="是否必填">
|
<el-select
|
v-model="topicobj.ismandatory"
|
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.isavailable"
|
placeholder="请选择"
|
>
|
<el-option
|
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>
|
<div v-if="topicobj.scriptType != 3">
|
<div class="headline">选项设置</div>
|
<div
|
class="topicxq"
|
v-for="item in topicobj.svyLibTemplateTargetoptions"
|
>
|
<el-row :gutter="10">
|
<el-col :span="11">
|
<el-form-item
|
v-if="topicobj.scoretype == 1"
|
label="分值"
|
>
|
<el-input
|
type="text"
|
placeholder="请输入选项分值"
|
v-model="item.score"
|
show-word-limit
|
>
|
</el-input>
|
</el-form-item>
|
<el-form-item
|
v-else-if="topicobj.scoretype == 2"
|
label="ABC等级"
|
>
|
<el-radio-group v-model="item.score">
|
<el-radio label="A">A</el-radio>
|
<el-radio label="B">B</el-radio>
|
<el-radio label="C">C</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item
|
v-else-if="topicobj.scoretype == 3"
|
label="优良等级"
|
>
|
<el-radio-group v-model="item.score">
|
<el-radio label="优">优</el-radio>
|
<el-radio label="良">良</el-radio>
|
<el-radio label="差">差</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="10">
|
<el-col :span="11"
|
><el-form-item label="选项">
|
<el-input
|
type="text"
|
placeholder="请输入选项"
|
v-model="item.optioncontent"
|
show-word-limit
|
>
|
</el-input> </el-form-item
|
></el-col>
|
<el-col :span="11"
|
><el-form-item label="下题跳转">
|
<el-input
|
type="text"
|
placeholder="请输入题号"
|
v-model="item.nextQuestion"
|
show-word-limit
|
>
|
</el-input> </el-form-item
|
></el-col>
|
<!-- <el-col :span="2">
|
<el-button
|
type="danger"
|
icon="el-icon-delete"
|
circle
|
@click="deletexuanx(item)"
|
></el-button>
|
</el-col> -->
|
</el-row>
|
<el-row :gutter="10">
|
|
<el-form-item label="选中提示">
|
<el-input
|
style="width: 20vw"
|
type="textarea"
|
autosize
|
placeholder="请输入内容"
|
v-model="item.prompt"
|
>
|
</el-input
|
></el-form-item>
|
</el-row>
|
</div>
|
</div>
|
<div v-else>
|
<div class="topicxq">
|
<el-row :gutter="10">
|
<el-form-item label="答案">
|
<el-input
|
style="width: 20vw"
|
type="textarea"
|
autosize
|
placeholder="此处放置患者回答"
|
v-model="radioas"
|
>
|
</el-input
|
></el-form-item>
|
</el-row>
|
</div>
|
</div>
|
</el-form>
|
</el-card>
|
</div>
|
</div>
|
|
<el-button type="success" @click="nextstep('ruleForm')"
|
>下一步</el-button
|
>
|
<el-button type="primary" @click="laststep()">上一步</el-button>
|
<el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
|
<el-button @click="Departmenttreatment('ruleForm')"
|
>保存题目数据</el-button
|
>
|
</div>
|
<!-- 问卷预览 -->
|
<div v-if="Editprogress == 3">
|
<div class="leftvlue-jbxx">问卷预览</div>
|
<el-divider></el-divider>
|
<div class="preview-left">
|
<!-- 单选 -->
|
<div
|
class="scriptTopic-dev"
|
v-for="item in ruleForm.svyTemplateLibScripts"
|
:key="item.sort"
|
v-if="item.scriptType == 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.svyLibTemplateTargetoptions"
|
:key="index"
|
:label="index"
|
>{{ items.optioncontent }}</el-radio
|
>
|
</el-radio-group>
|
</div>
|
</div>
|
<!-- 多选 -->
|
<div
|
class="scriptTopic-dev"
|
v-for="item in ruleForm.svyTemplateLibScripts"
|
:key="item.sort"
|
v-if="item.scriptType == 2"
|
>
|
<div class="dev-text">
|
{{ item.sort }}、[多选]<span>{{ item.wssd }}</span>
|
</div>
|
<div class="dev-xx">
|
<el-checkbox-group v-model="item.remark">
|
<el-checkbox
|
v-for="(items, index) in item.svyLibTemplateTargetoptions"
|
:key="index"
|
:label="index"
|
>
|
{{ items.optioncontent }}
|
</el-checkbox>
|
</el-checkbox-group>
|
</div>
|
</div>
|
<!-- 填空 -->
|
<div
|
class="scriptTopic-dev"
|
v-for="item in ruleForm.svyTemplateLibScripts"
|
:key="item.sort"
|
v-if="item.scriptType == 3"
|
>
|
<div class="dev-text">
|
{{ item.sort }}、[填空]<span>{{ item.optioncontent }}</span>
|
</div>
|
<div class="dev-xx">
|
<el-input placeholder="请输入答案" v-model="radioas" clearable>
|
</el-input>
|
</div>
|
</div>
|
</div>
|
<el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
|
<el-button>导出为pdf</el-button>
|
<el-button type="primary" @click="laststep()">上一步</el-button>
|
</div>
|
</div>
|
<!-- 预览模版弹窗 -->
|
<el-drawer
|
title="添加题目"
|
:visible.sync="drawer"
|
custom-class="demo-drawer"
|
size="50%"
|
>
|
<div class="preview-left">
|
<el-form
|
:model="queryParams"
|
ref="queryForm"
|
size="small"
|
:inline="true"
|
label-width="98px"
|
>
|
<el-form-item label="问题标题" prop="scriptTopic">
|
<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"
|
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
|
v-show="total > 0"
|
:total="total"
|
:page.sync="queryParams.pageNum"
|
:limit.sync="queryParams.pageSize"
|
@pagination="getaddtopiclist"
|
/>
|
</div>
|
</el-drawer>
|
</div>
|
</template>
|
|
<script>
|
import { listtag } from "@/api/system/label";
|
import { listDept } from "@/api/system/dept";
|
import store from "@/store";
|
import {
|
getQtemplateclassify,
|
delQtemplateclassify,
|
addQtemplateclassify,
|
getQtemplatelist,
|
compileQtemplate,
|
Qtemplateinfo,
|
compileissue,
|
delQtemplateinfo,
|
Followupinfo,
|
issueinfo,
|
getissuelist,
|
deltargetillness,
|
addtargetillness,
|
getillnesslist,
|
illnesslistget,
|
getillness,
|
} from "@/api/AiCentre/index";
|
|
export default {
|
data() {
|
return {
|
sidecolumnrabs: "left", //方向
|
Editprogress: 1, //编辑进度
|
currentVersion: "1.2.3", //当前版本
|
loading: false, // 遮罩层
|
drawer: false, //控制展开
|
radio: "false", //单选题选中
|
radios: [], //多选题选中
|
radioas: "", //填空题答案
|
dynamicTags: [],
|
inputVisible: false,
|
inputValue: "",
|
topicobj: {},
|
// 总条数
|
total: 1,
|
ruleForm: { svyTemplateLibScripts: [], tempDetpRelevances: [] },
|
rules: {},
|
rulesa: {},
|
optionsclass: [], //分类列表
|
optionlist: [
|
{ value: "scriptTopic", table: "scriptTopic" },
|
{ value: "scriptTopic", table: "scriptTopic" },
|
],
|
|
appraiselist: [
|
{ label: "分数", value: "1" },
|
{ label: "ABC等级", value: "2" },
|
{ label: "优良等级", value: "3" },
|
],
|
|
fileList: [
|
{
|
name: "food.jpeg",
|
url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
|
},
|
{
|
name: "food2.jpeg",
|
url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
|
},
|
],
|
|
variablelist: [
|
{
|
variable: "paitent",
|
value: "表示患者的标识",
|
},
|
],
|
|
valssu: [
|
{
|
idd: 1,
|
wssd: "你最近怎么样",
|
sdadd: ["sss", "ssccss", "ssaas", "ss"],
|
},
|
],
|
addvalue: "添加题目",
|
// 题目表格数据
|
userList: [],
|
deptList: [],
|
props: { multiple: true, value: "deptId", label: "deptName" },
|
themelist: [],
|
languagelist: [],
|
courtyardlist: [],
|
precedencetype: [],
|
inputValueillness: "",
|
inputVisible: false,
|
inputVisibleillness: false,
|
illnessVisible: false, //指标疾病弹框
|
deptOptions: [],
|
optionsillness: [],
|
delScriptVOList: [],
|
illnesslistapi: [],
|
illnesslist: [],
|
tempDetpRelevanceslist: [],
|
optionstag: [],
|
valuetype: [],
|
usable: [
|
{ value: "0", label: "可用" },
|
{ value: "1", label: "停用" },
|
],
|
required: [
|
{ value: "1", label: "必填" },
|
{ value: "2", label: "不必填" },
|
],
|
mode: [], //方式
|
// 查询参数
|
queryParams: {
|
pageNum: 1,
|
pageSize: 10,
|
},
|
arr: [
|
[
|
{ id: 1, grade: "5" },
|
{ id: 2, grade: "5" },
|
{ id: 3, grade: "5" },
|
{ id: 4, grade: "5" },
|
],
|
[
|
{ id: 1, grade: "5" },
|
{ id: 3, grade: "5" },
|
{ id: 4, grade: "5" },
|
],
|
[
|
{ id: 1, grade: "5" },
|
{ id: 2, grade: "5" },
|
{ id: 4, grade: "5" },
|
],
|
],
|
};
|
},
|
|
created() {
|
this.gettabList();
|
this.getissueinfo();
|
this.mode = store.getters.Askmode;
|
this.languagelist = store.getters.languagelist;
|
this.usable = store.getters.usable;
|
this.required = store.getters.required;
|
this.valuetype = store.getters.valuetype;
|
this.courtyardlist = store.getters.courtyardlist;
|
// this.test();
|
},
|
|
methods: {
|
// 公共方法---------------
|
getIndexInArray(arr, obj) {
|
return arr.indexOf(obj);
|
},
|
// 递归扁平化
|
flattenArray(arr) {
|
let result = [];
|
arr.forEach((item) => {
|
result.push(item);
|
if (item.svyLibTemplateCategoryList) {
|
result = result.concat(
|
this.flattenArray(item.svyLibTemplateCategoryList)
|
);
|
delete item.svyLibTemplateCategoryList;
|
}
|
});
|
return result;
|
},
|
// -----------------------------
|
// 获取数据
|
getissueinfo() {
|
this.id = this.$route.query.id;
|
if (this.id) {
|
getQtemplatelist({ svyid: this.id }).then((res) => {
|
this.ruleForm = res.rows[0];
|
this.dynamicTags = this.ruleForm.labelInfo.split(",");
|
this.tempDetpRelevanceslist = JSON.parse(this.ruleForm.deptNames);
|
this.ruleForm.suitway = this.ruleForm.suitway.split(",");
|
console.log(this.tempDetpRelevanceslist);
|
});
|
getillness({ outid: this.id, type: 5 }).then((res) => {
|
this.illnesslist = res.rows;
|
});
|
}
|
getillnesslist({
|
pageNum: 1,
|
pageSize: 100,
|
}).then((response) => {
|
this.optionsillness = response.rows;
|
});
|
listDept(this.queryParams).then((response) => {
|
this.deptList = this.handleTree(response.data, "deptId");
|
});
|
// 分类
|
getQtemplateclassify({}).then((res) => {
|
// this.optionsclass = this.flattenArray(res.rows);
|
this.optionsclass = res.rows;
|
});
|
},
|
submitForm(formName) {
|
this.$modal.loading("正在上传数据,请稍候...");
|
|
this.ruleForm.labelInfo = this.dynamicTags.join(",");
|
this.ruleForm.suitway = this.ruleForm.suitway.join(",");
|
|
if (this.id) {
|
this.ruleForm.isoperation = 2;
|
compileQtemplate(this.ruleForm).then((res) => {
|
this.$modal.msgSuccess("修改成功");
|
this.confirmillness();
|
this.$modal.closeLoading();
|
|
this.$router.go(-1);
|
});
|
} else {
|
this.ruleForm.isoperation = 1;
|
compileQtemplate(this.ruleForm).then((res) => {
|
this.$modal.msgSuccess("新增成功");
|
this.confirmillness(res.data);
|
|
this.$modal.closeLoading();
|
|
this.$router.go(-1);
|
});
|
}
|
},
|
// 科室处理
|
Departmenttreatment() {
|
this.ruleForm.deptNames = JSON.stringify(this.tempDetpRelevanceslist);
|
console.log(this.tempDetpRelevanceslist);
|
this.ruleForm.svyTemplateLibScripts =
|
this.ruleForm.svyTemplateLibScripts.concat(this.delScriptVOList);
|
console.log(this.tempDetpRelevanceslist, "this.tempDetpRelevanceslist");
|
const result = this.tempDetpRelevanceslist.map(
|
(subArr) => subArr[subArr.length - 1]
|
);
|
// id数组查数组对象
|
result.forEach((item) => {
|
const condition = this.ruleForm.tempDetpRelevances.some(
|
(obj) => obj.deptId === item
|
);
|
if (!condition) {
|
listDept({ deptId: item }).then((res) => {
|
console.log(res.data[0]);
|
res.data[0].type = 2;
|
this.ruleForm.tempDetpRelevances.push(res.data[0]);
|
});
|
}
|
});
|
// 数组对象查id数组
|
this.ruleForm.tempDetpRelevances.forEach((item) => {
|
const condition = result.some((obj) => obj === item.deptId);
|
if (!condition) {
|
console.log(condition);
|
const index = this.ruleForm.tempDetpRelevances.indexOf(item);
|
this.ruleForm.tempDetpRelevances[index].delFlag = 1;
|
}
|
});
|
setTimeout(() => {
|
this.submitForm();
|
}, 1000);
|
},
|
// 下一步
|
nextstep() {
|
if (this.Editprogress <= 2) {
|
return this.Editprogress++;
|
}
|
},
|
// 上一步
|
laststep() {
|
this.Editprogress = this.Editprogress - 1;
|
},
|
// 关闭
|
closeFm() {
|
this.$confirm("退出不会保留页面内容更改, 是否继续?", "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(() => {
|
this.$router.go(-1);
|
})
|
.catch(() => {
|
this.$message({
|
type: "info",
|
message: "已取消",
|
});
|
});
|
},
|
// 获取题目列表
|
getaddtopiclist() {
|
this.drawer = true;
|
this.queryParams.scoretype = this.ruleForm.scoreType;
|
getissuelist(this.queryParams).then((res) => {
|
this.loading = false;
|
this.userList = res.rows;
|
this.total = res.total;
|
console.log(this.userList);
|
});
|
},
|
// 新增题目
|
addtopic(row) {
|
row.isoperation = 1;
|
row.svyLibScriptOptions.forEach((item) => {
|
item.isoperation = 1;
|
});
|
row.svyLibTemplateTargetoptions = row.svyLibScriptOptions;
|
this.ruleForm.svyTemplateLibScripts.push(row);
|
this.sortFn();
|
this.$modal.msgSuccess("新增成功");
|
},
|
handleDelete(row) {
|
let index = this.ruleForm.svyTemplateLibScripts.indexOf(row);
|
this.ruleForm.svyTemplateLibScripts.splice(index, 1);
|
row.isoperation = 3;
|
this.delScriptVOList.push(row);
|
this.sortFn();
|
},
|
handleUpdate(row) {
|
this.topicobj = row;
|
this.radioas = "";
|
console.log(this.topicobj, "看数据");
|
// getissuelist({ svyid: row.svyid }).then((res) => {
|
// });
|
},
|
syioption(row) {
|
const index = this.getIndexInArray(
|
this.ruleForm.svyTemplateLibScripts,
|
row
|
);
|
const item = this.ruleForm.svyTemplateLibScripts.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中
|
this.ruleForm.svyTemplateLibScripts.splice(index - 1, 0, item); // 将item插入到索引位置的前一位
|
this.sortFn();
|
},
|
xiayioption(row) {
|
const index = this.getIndexInArray(
|
this.ruleForm.svyTemplateLibScripts,
|
row
|
);
|
const item = this.ruleForm.svyTemplateLibScripts.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中
|
this.ruleForm.svyTemplateLibScripts.splice(index + 1, 0, item); // 将item插入到索引位置的前一位
|
this.sortFn();
|
},
|
sortFn() {
|
this.ruleForm.svyTemplateLibScripts.forEach((item, index) => {
|
item.sort = index + 1;
|
item.svyLibTemplateTargetoptions.forEach((items) => {
|
items.nextQuestion = Number(item.sort) + 1;
|
});
|
});
|
console.log(this.ruleForm.svyTemplateLibScripts);
|
},
|
|
// 修改题目信息
|
Submittopicobj() {},
|
// 新增变量
|
addvariable() {
|
this.variablelist.push({
|
variable: "",
|
value: "",
|
});
|
},
|
// 删除变量
|
delvariable(item) {
|
const index = this.variablelist.indexOf(item);
|
if (index !== -1) {
|
this.variablelist.splice(index, 1); // 从索引位置删除一个元素
|
} else {
|
console.log("未找到该对象");
|
}
|
},
|
// 控制文件
|
handleChange(file, fileList) {
|
this.fileList = fileList.slice(-3);
|
},
|
// 标签-----------------
|
gettabList() {
|
const tagqueryParams = {
|
pageNum: 1,
|
pageSize: 1000,
|
tagcategoryid: "0",
|
};
|
listtag(tagqueryParams).then((response) => {
|
console.log(response);
|
this.optionstag = response.rows;
|
});
|
},
|
handleClosetag(tag) {
|
console.log(tag);
|
console.log(this.dynamicTags.indexOf(tag));
|
this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
|
// this.ruleForm.ivrLibaTemplateTargetList[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,
|
};
|
}
|
// this.ruleForm.ivrLibaTemplateTargetList.push(tagvalue);
|
// this.dynamicTags.push(tagvalue);
|
this.dynamicTags.push(tagvalue.tagname);
|
});
|
}
|
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;
|
},
|
// 疾病-----------------------
|
|
handleCloseillness(tag) {
|
this.illnesslist.splice(this.illnesslist.indexOf(tag), 1);
|
if (tag.id) {
|
this.illnesslistapi.push(tag.id);
|
}
|
},
|
remoteMethod(value) {
|
console.log(value);
|
const illnessqueryParams = {
|
pageNum: 1,
|
pageSize: 100,
|
icdname: value,
|
};
|
this.loading = true;
|
setTimeout(() => {
|
this.loading = false;
|
getillnesslist(illnessqueryParams).then((response) => {
|
this.optionsillness = response.rows;
|
});
|
}, 200);
|
},
|
illnessConfirm(item) {
|
let opeavalue = {};
|
let tagname = this.inputValueillness;
|
illnesslistget(item).then((res) => {
|
opeavalue = res.data;
|
opeavalue.outid = this.id;
|
opeavalue.type = 5;
|
opeavalue.icd10id = opeavalue.icdid;
|
opeavalue.icd10name = opeavalue.icdname;
|
opeavalue.icd10code = opeavalue.icdcode;
|
if (tagname) {
|
this.illnesslist.push(opeavalue);
|
}
|
});
|
console.log(this.illnesslist);
|
this.inputVisibleillness = false;
|
this.inputValueillness = "";
|
},
|
// 保存
|
confirmillness(guid) {
|
this.illnesslist.forEach((item, index) => {
|
if (guid) {
|
item.outid = guid;
|
}
|
if (!item.id) {
|
addtargetillness(item).then((res) => {});
|
}
|
});
|
if (this.illnesslistapi.length) {
|
deltargetillness(this.illnesslistapi.join(",")).then((res) => {});
|
}
|
this.illnessVisible = false;
|
this.$modal.msgSuccess("编辑成功");
|
},
|
// --------------------------
|
resetQuery() {
|
this.queryParams = { pageNum: 1, pageSize: 10 };
|
this.getaddtopiclist();
|
},
|
resetForm(formName) {
|
this.$refs[formName].resetFields();
|
},
|
// 问卷分数限制算法
|
// 混合路线
|
generateCombinations(arrays, currentIndex = 0, currentCombination = []) {
|
if (currentIndex === arrays.length) {
|
return [currentCombination];
|
}
|
|
const currentArray = arrays[currentIndex];
|
const newCombinations = [];
|
|
for (const item of currentArray) {
|
const newCombination = [...currentCombination, item];
|
const combinations = this.generateCombinations(
|
arrays,
|
currentIndex + 1,
|
newCombination
|
);
|
newCombinations.push(...combinations);
|
}
|
return newCombinations;
|
},
|
// 执行
|
test() {
|
const arrays = [
|
["2", "3", "4", "5"],
|
["1", "2", "5", "6"],
|
["3", "4", "5", "3"],
|
["3", "2", "5", "7"],
|
];
|
const arraysa = [
|
{
|
id: 1,
|
grade: "5",
|
arr: [
|
{ name: "不错", skip: 2 },
|
{ name: "一般", skip: 2 },
|
{ name: "还不错", skip: 2 },
|
{ name: "很棒", skip: 3 },
|
],
|
},
|
|
{
|
id: 2,
|
grade: "5",
|
arr: [
|
{ name: "优秀", skip: 3 },
|
{ name: "良好", skip: 3 },
|
{ name: "一般", skip: 3 },
|
{ name: "较差", skip: 4 },
|
],
|
},
|
{
|
id: 3,
|
grade: "5",
|
arr: [
|
{ name: "是的", skip: 4 },
|
{ name: "不清楚", skip: 4 },
|
{ name: "还可", skip: 4 },
|
{ name: "一般", skip: 4 },
|
],
|
},
|
{
|
id: 4,
|
grade: "5",
|
arr: [
|
{ name: "真不错", skip: null },
|
{ name: "还可以", skip: null },
|
{ name: "一般般", skip: null },
|
{ name: "不清楚", skip: null },
|
],
|
},
|
];
|
|
// const newMixArray = this.generateCombinations(arrays);
|
const newMixArray = this.getExecutionOrders(arraysa);
|
|
console.log(newMixArray, "全部路线");
|
this.screen(newMixArray);
|
},
|
getExecutionOrders(data) {
|
let orders = [];
|
|
const explore = (currentOrder, id) => {
|
console.log(currentOrder, "currentOrder", id);
|
const currentQuestion = data[currentOrder[currentOrder.length - 1]];
|
if (
|
currentQuestion.arr.some(
|
(option) =>
|
option.skip !== null && !currentOrder.includes(option.skip)
|
)
|
) {
|
currentQuestion.arr.forEach((option) => {
|
if (option.skip !== null && !currentOrder.includes(option.skip)) {
|
explore([...currentOrder, option.skip]);
|
}
|
});
|
} else {
|
orders.push(
|
currentOrder.map((id) => ({
|
id: data[id].id,
|
grade: data[id].grade,
|
}))
|
);
|
}
|
};
|
console.log(data, "data");
|
data.forEach((entry) => {
|
explore([entry.id], entry.id);
|
});
|
|
return orders;
|
},
|
|
// 数组求和
|
sumArray(arr) {
|
return arr.reduce((acc, curr) => acc + parseInt(curr), 0);
|
},
|
// 筛选错误路线
|
screen(data) {
|
const arraysGreaterThan10 = data.filter((arr) => this.sumArray(arr) > 21);
|
|
console.log(arraysGreaterThan10, "筛选错误路线大于13分");
|
},
|
},
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.Questionnairemanagement {
|
// display: flex;
|
}
|
.sidecolumn {
|
margin: 20px;
|
margin-bottom: 0;
|
padding: 20px;
|
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-top: 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);
|
.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;
|
}
|
}
|
}
|
.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;
|
}
|
}
|
.addtopic {
|
margin-top: 30px;
|
}
|
.presentation {
|
margin: 20px 0;
|
display: flex;
|
.presentation-left {
|
width: 50%;
|
// height: 500px;
|
.button-textxg {
|
color: #024df0;
|
}
|
.button-textsc {
|
color: #f52727;
|
}
|
}
|
.presentation-right {
|
width: 50%;
|
max-height: 688px;
|
padding: 0 20px;
|
font-size: 18px;
|
overflow: auto;
|
.headline {
|
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: 25px;
|
}
|
::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.scriptTopic-dev.el-radio__label {
|
// font-size: 24px;
|
// }
|
::v-deep.el-radio-group {
|
span {
|
font-size: 24px;
|
}
|
}
|
::v-deep.el-checkbox-group {
|
span {
|
font-size: 24px;
|
}
|
}
|
// ::v-deep.el-form-item--medium .el-form-item__content {
|
// line-height: 36px;
|
// display: flex;
|
// }
|
</style>
|