|
@@ -1,432 +1,489 @@
|
|
|
<template>
|
|
|
- <el-dialog
|
|
|
- v-el-drag-dialog
|
|
|
- :title="titleStr"
|
|
|
- :visible.sync="data.bSwitch"
|
|
|
- width="1200px"
|
|
|
- top="5vh"
|
|
|
- >
|
|
|
- <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="80px" class="demo-ruleForm">
|
|
|
- <el-row :gutter="16">
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="病历类型" prop="case_type">
|
|
|
- <el-select v-model="ruleForm.case_type" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option label="出院记录" value="出院记录" />
|
|
|
- <el-option label="入院记录" value="入院记录" />
|
|
|
- <el-option label="病程类" value="病程类" />
|
|
|
- <el-option label="手术类" value="手术类" />
|
|
|
- <el-option label="医嘱" value="医嘱" />
|
|
|
- <el-option label="费用" value="费用" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="质控项目" prop="object">
|
|
|
- <el-cascader
|
|
|
- v-model="ruleForm.object"
|
|
|
- :options="objects"
|
|
|
- :props="{
|
|
|
- expandTrigger: 'hover',
|
|
|
- value: 'field_name',
|
|
|
- label: 'field_name',
|
|
|
- children: 'child'
|
|
|
- }"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- :show-all-levels="false"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="质控科室">
|
|
|
- <el-select
|
|
|
- v-model="ruleForm.department"
|
|
|
- multiple
|
|
|
- collapse-tags
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="item in departments"
|
|
|
- :key="item.id"
|
|
|
- :label="item.dep_name"
|
|
|
- :value="item.dep_id"
|
|
|
+ <div>
|
|
|
+ <el-dialog
|
|
|
+ v-el-drag-dialog
|
|
|
+ :title="titleStr"
|
|
|
+ :visible.sync="data.bSwitch"
|
|
|
+ width="1200px"
|
|
|
+ top="5vh"
|
|
|
+ >
|
|
|
+ <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="80px" class="demo-ruleForm">
|
|
|
+ <el-row :gutter="16">
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="病历类型" prop="case_type">
|
|
|
+ <el-select v-model="ruleForm.case_type" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-option label="出院记录" value="出院记录" />
|
|
|
+ <el-option label="入院记录" value="入院记录" />
|
|
|
+ <el-option label="病程类" value="病程类" />
|
|
|
+ <el-option label="手术类" value="手术类" />
|
|
|
+ <el-option label="医嘱" value="医嘱" />
|
|
|
+ <el-option label="费用" value="费用" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="质控项目" prop="object">
|
|
|
+ <el-cascader
|
|
|
+ v-model="ruleForm.object"
|
|
|
+ :options="objects"
|
|
|
+ :props="{
|
|
|
+ expandTrigger: 'hover',
|
|
|
+ value: 'field_name',
|
|
|
+ label: 'field_name',
|
|
|
+ children: 'child'
|
|
|
+ }"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ :show-all-levels="false"
|
|
|
+ placeholder="请选择"
|
|
|
+ style="width: 100%;"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="单项否决">
|
|
|
+ <el-select v-model="ruleForm.is_not" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-option label="是" :value="1" />
|
|
|
+ <el-option label="否" :value="0" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="质控状态" prop="status">
|
|
|
+ <el-select v-model="ruleForm.status" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-option label="开启" :value="1" />
|
|
|
+ <el-option label="禁用" :value="2" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="质控类型" prop="type">
|
|
|
+ <el-select v-model="ruleForm.type" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-option label="时效性" value="时效性" />
|
|
|
+ <el-option label="完整性" value="完整性" />
|
|
|
+ <el-option label="逻辑性" value="逻辑性" />
|
|
|
+ <el-option label="内涵性" value="内涵性" />
|
|
|
+ <el-option label="专病规则" value="专病规则" />
|
|
|
+ <el-option label="专科规则" value="专科规则" />
|
|
|
+ <el-option label="检查规则" value="检查规则" />
|
|
|
+ <el-option label="检验规则" value="检验规则" />
|
|
|
+ <el-option label="其他规则" value="其他规则" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="质控场景" prop="changjing">
|
|
|
+ <el-select v-model="ruleForm.changjing" multiple collapse-tags filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-option label="医生端" value="医生端" />
|
|
|
+ <el-option label="编码员" value="编码员" />
|
|
|
+ <el-option label="质控员" value="质控员" />
|
|
|
+ <el-option label="国考" value="国考" />
|
|
|
+ <el-option label="卫统" value="卫统" />
|
|
|
+ <el-option label="医保" value="医保" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="风险等级" prop="error_level">
|
|
|
+ <el-select v-model="ruleForm.error_level" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-option label="低风险" :value="1" />
|
|
|
+ <el-option label="中风险" :value="2" />
|
|
|
+ <el-option label="高风险" :value="3" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="扣分分值" prop="score">
|
|
|
+ <el-input-number v-model="ruleForm.score" :precision="1" :step="0.5" step-strictly :max="100" :min="0" controls-position="right" placeholder="请输入" style="width: 100%;" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="规则描述" prop="description">
|
|
|
+ <el-input
|
|
|
+ v-model="ruleForm.description"
|
|
|
+ type="textarea"
|
|
|
+ :autosize="{ minRows: 3 }"
|
|
|
+ placeholder="请输入"
|
|
|
/>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="单项否决">
|
|
|
- <el-select v-model="ruleForm.is_not" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option label="是" :value="1" />
|
|
|
- <el-option label="否" :value="0" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="质控状态" prop="status">
|
|
|
- <el-select v-model="ruleForm.status" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option label="开启" :value="1" />
|
|
|
- <el-option label="禁用" :value="2" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="质控类型" prop="type">
|
|
|
- <el-select v-model="ruleForm.type" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option label="时效性" value="时效性" />
|
|
|
- <el-option label="完整性" value="完整性" />
|
|
|
- <el-option label="逻辑性" value="逻辑性" />
|
|
|
- <el-option label="内涵性" value="内涵性" />
|
|
|
- <el-option label="专病规则" value="专病规则" />
|
|
|
- <el-option label="专科规则" value="专科规则" />
|
|
|
- <el-option label="检查规则" value="检查规则" />
|
|
|
- <el-option label="检验规则" value="检验规则" />
|
|
|
- <el-option label="其他规则" value="其他规则" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="质控场景" prop="changjing">
|
|
|
- <el-select v-model="ruleForm.changjing" multiple collapse-tags filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option label="医生端" value="医生端" />
|
|
|
- <el-option label="编码员" value="编码员" />
|
|
|
- <el-option label="质控员" value="质控员" />
|
|
|
- <el-option label="国考" value="国考" />
|
|
|
- <el-option label="卫统" value="卫统" />
|
|
|
- <el-option label="医保" value="医保" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="风险等级" prop="error_level">
|
|
|
- <el-select v-model="ruleForm.error_level" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option label="低风险" :value="1" />
|
|
|
- <el-option label="中风险" :value="2" />
|
|
|
- <el-option label="高风险" :value="3" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="扣分分值" prop="score">
|
|
|
- <el-input-number v-model="ruleForm.score" :precision="1" :step="0.5" step-strictly :max="100" :min="0" controls-position="right" placeholder="请输入" style="width: 100%;" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="24">
|
|
|
- <el-form-item label="规则描述" prop="description">
|
|
|
- <el-input
|
|
|
- v-model="ruleForm.description"
|
|
|
- type="textarea"
|
|
|
- :autosize="{ minRows: 3 }"
|
|
|
- placeholder="请输入"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="24">
|
|
|
- <el-form-item label="质控规则">
|
|
|
- <el-col :span="5">
|
|
|
- <el-form-item label="规则模板" prop="rule_type">
|
|
|
- <el-select v-model="ruleForm.rule_type" filterable placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option label="普通规则" value="普通规则" />
|
|
|
- <!-- <el-option label="时效性规则" value="时效性规则" />
|
|
|
- <el-option label="完整性规则" value="完整性规则" />
|
|
|
- <el-option label="知识库规则" value="知识库规则" />
|
|
|
- <el-option label="大模型规则" value="大模型规则" /> -->
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="质控规则">
|
|
|
+ <el-col :span="5">
|
|
|
+ <el-form-item label="规则模板" prop="rule_type">
|
|
|
+ <el-select v-model="ruleForm.rule_type" filterable placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-option label="普通规则" value="普通规则" />
|
|
|
+ <!-- <el-option label="时效性规则" value="时效性规则" />
|
|
|
+ <el-option label="完整性规则" value="完整性规则" />
|
|
|
+ <el-option label="知识库规则" value="知识库规则" />
|
|
|
+ <el-option label="大模型规则" value="大模型规则" /> -->
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
|
|
|
- <el-col :span="24" style="margin-bottom: 20px;">
|
|
|
- <el-button type="primary" plain icon="el-icon-plus" @click="onAddQZTJ">前置条件</el-button>
|
|
|
- <el-button type="primary" plain icon="el-icon-plus" @click="onAddZKYJ">质控依据</el-button>
|
|
|
- <el-button type="primary" plain icon="el-icon-plus" @click="onAddZKyujing">质控预警</el-button>
|
|
|
- </el-col>
|
|
|
+ <el-col :span="24" style="margin-bottom: 20px;">
|
|
|
+ <el-button type="primary" plain icon="el-icon-plus" @click="onAddQZTJ">前置条件</el-button>
|
|
|
+ <el-button type="primary" plain icon="el-icon-plus" @click="onAddZKYJ">质控依据</el-button>
|
|
|
+ <el-button type="primary" plain icon="el-icon-plus" @click="onAddZKyujing">质控预警</el-button>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <!-- 前置条件 -->
|
|
|
+ <el-col v-if="ruleForm.qztj.length" :span="24">
|
|
|
+ <el-card v-for="(item, index) of ruleForm.qztj" :key="'qztj'+index" class="box-card" shadow="never">
|
|
|
+ <div slot="header" class="clearfix box-card_header span">
|
|
|
+ <span class="text">前置条件{{ index + 1 }}</span>
|
|
|
+ <span class="ml40">
|
|
|
+ <span>流向</span>
|
|
|
+ <el-radio v-model="item.condition_type" :label="1" class="ml40">过滤</el-radio>
|
|
|
+ <el-radio v-model="item.condition_type" :label="2">免审</el-radio>
|
|
|
+ </span>
|
|
|
+ <i class="el-icon-delete" style="float: right; margin-top: 13px; cursor: pointer;" @click="onDeleteQZTJ(index)" />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <el-row v-for="(sItem, sIndex) of item.condition_content" :key="'tj'+sIndex" :gutter="12" class="mb12">
|
|
|
+ <el-col :span="2">
|
|
|
+ <div class="text-right">条件{{ sIndex + 1 }}</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <div class="rule-condition">
|
|
|
+ <el-input
|
|
|
+ :value="getDisplayName(sItem.param1)"
|
|
|
+ placeholder="请选择"
|
|
|
+ size="small"
|
|
|
+ style="width: calc(100% - 90px)"
|
|
|
+ readonly
|
|
|
+ @click="openCategoryDialog(index, sIndex)"
|
|
|
+ />
|
|
|
+ <el-button
|
|
|
+ size="small"
|
|
|
+ style="width: 90px"
|
|
|
+ class="category-select"
|
|
|
+ @click="openCategoryDialog(index, sIndex)"
|
|
|
+ >
|
|
|
+ <i class="el-icon-s-operation" style="margin-right: 5px" />
|
|
|
+ 选择
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-select v-model="sItem.condition" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-option v-for="(items,bindex) in selectFormula" :key="bindex" :label="items.formula" :value="items.formula" />
|
|
|
+ </el-select>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-input v-model="sItem.param2" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="onAddTJ(index, sIndex)" />
|
|
|
+ <el-button v-if="item.condition_content.length !== 1" size="mini" type="primary" plain icon="el-icon-minus" @click="onDeleteTJ(index, sIndex)" />
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <div class="span">
|
|
|
+ <span>条件之间的逻辑</span>
|
|
|
+ <el-radio v-model="item.condition_relation" :label="1" class="ml40">且(满足所有条件)</el-radio>
|
|
|
+ <el-radio v-model="item.condition_relation" :label="2">或(满足任意一条件)</el-radio>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ </el-col>
|
|
|
|
|
|
- <!-- 前置条件 -->
|
|
|
- <el-col v-if="ruleForm.qztj.length" :span="24">
|
|
|
- <el-card v-for="(item, index) of ruleForm.qztj" :key="'qztj'+index" class="box-card" shadow="never">
|
|
|
- <div slot="header" class="clearfix box-card_header span">
|
|
|
- <span class="text">前置条件{{ index + 1 }}</span>
|
|
|
- <span class="ml40">
|
|
|
- <span>流向</span>
|
|
|
- <el-radio v-model="item.condition_type" :label="1" class="ml40">过滤</el-radio>
|
|
|
- <el-radio v-model="item.condition_type" :label="2">免审</el-radio>
|
|
|
- </span>
|
|
|
- <i class="el-icon-delete" style="float: right; margin-top: 13px; cursor: pointer;" @click="onDeleteQZTJ(index)" />
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <el-row v-for="(sItem, sIndex) of item.condition_content" :key="'tj'+sIndex" :gutter="12" class="mb12">
|
|
|
- <el-col :span="2">
|
|
|
- <div class="text-right">条件{{ sIndex + 1 }}</div>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-cascader
|
|
|
- v-model="sItem.param1"
|
|
|
- :options="objects"
|
|
|
- :props="{
|
|
|
- expandTrigger: 'hover',
|
|
|
- value: 'field',
|
|
|
- label: 'field_name',
|
|
|
- children: 'child'
|
|
|
- }"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- :show-all-levels="false"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- />
|
|
|
- </el-col>
|
|
|
- <el-col :span="4">
|
|
|
- <el-select v-model="sItem.condition" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option v-for="(items,bindex) in selectFormula" :key="bindex" :label="items.formula" :value="items.formula" />
|
|
|
- </el-select>
|
|
|
- </el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-input v-model="sItem.param2" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
- </el-col>
|
|
|
- <el-col :span="4">
|
|
|
- <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="onAddTJ(index, sIndex)" />
|
|
|
- <el-button v-if="item.condition_content.length !== 1" size="mini" type="primary" plain icon="el-icon-minus" @click="onDeleteTJ(index, sIndex)" />
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <div class="span">
|
|
|
- <span>条件之间的逻辑</span>
|
|
|
- <el-radio v-model="item.condition_relation" :label="1" class="ml40">且(满足所有条件)</el-radio>
|
|
|
- <el-radio v-model="item.condition_relation" :label="2">或(满足任意一条件)</el-radio>
|
|
|
+ <!-- 质控逻辑 -->
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-divider />
|
|
|
+ <el-card v-for="(item, index) of ruleForm.rule" :key="'rule'+index" class="box-card" shadow="never">
|
|
|
+ <div slot="header" class="clearfix box-card_header span">
|
|
|
+ <span class="text">质控逻辑</span>
|
|
|
+ <span class="ml40">
|
|
|
+ <span>流向</span>
|
|
|
+ <el-radio v-model="item.detail_status" :label="1" class="ml40">正确</el-radio>
|
|
|
+ <el-radio v-model="item.detail_status" :label="2">错误</el-radio>
|
|
|
+ </span>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </el-card>
|
|
|
- </el-col>
|
|
|
+ <div>
|
|
|
+ <el-row v-for="(sItem, sIndex) of item.condition_content" :key="'tj'+sIndex" :gutter="12" class="mb12">
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <div class="text-right">逻辑{{ sIndex + 1 }}</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="5">
|
|
|
+ <div class="rule-condition">
|
|
|
+ <el-input
|
|
|
+ :value="getDisplayName(sItem.param1)"
|
|
|
+ placeholder="请选择"
|
|
|
+ size="small"
|
|
|
+ style="width: calc(100% - 90px)"
|
|
|
+ readonly
|
|
|
+ @click="openCategoryDialog(index, sIndex)"
|
|
|
+ />
|
|
|
+ <el-button
|
|
|
+ size="small"
|
|
|
+ style="width: 90px"
|
|
|
+ class="category-select"
|
|
|
+ @click="openCategoryDialog(index, sIndex)"
|
|
|
+ >
|
|
|
+ <i class="el-icon-s-operation" style="margin-right: 5px" />
|
|
|
+ 选择
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-select v-model="sItem.condition" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
+ <el-option v-for="(items,bindex) in selectFormula" :key="bindex" :label="items.formula" :value="items.formula" />
|
|
|
+ </el-select>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-if="sItem.condition == '等于' || sItem.condition == '不等于'|| sItem.condition == '包含' || sItem.condition == '不包含'" :span="6">
|
|
|
+ <div class="input-with-category">
|
|
|
+ <el-input
|
|
|
+ v-model="sItem.param2"
|
|
|
+ placeholder="请输入"
|
|
|
+ size="small"
|
|
|
+ style="width: calc(100% - 90px)"
|
|
|
+ />
|
|
|
+ <el-select
|
|
|
+ v-model="sItem.categoryType"
|
|
|
+ size="small"
|
|
|
+ placeholder="文本"
|
|
|
+ style="width: 90px"
|
|
|
+ class="category-select"
|
|
|
+ >
|
|
|
+ <i slot="prefix" class="el-icon-s-operation" />
|
|
|
+ <el-option
|
|
|
+ v-for="item in categories"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-if="sItem.condition == '范围'" :span="3">
|
|
|
+ <el-input v-model="sItem.fanwei_1" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
+ </el-col>
|
|
|
+ <el-col v-if="sItem.condition == '范围'" :span="1">
|
|
|
+ <div class="text-right">至</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-if="sItem.condition == '范围'" :span="3">
|
|
|
+ <el-input v-model="sItem.fanwei_2" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
+ </el-col>
|
|
|
+ <!-- 时效 -->
|
|
|
+ <el-col v-if="sItem.condition == '时效'" :span="3">
|
|
|
+ <el-cascader
|
|
|
+ v-model="sItem.sx_1"
|
|
|
+ :options="objects"
|
|
|
+ :props="{
|
|
|
+ expandTrigger: 'hover',
|
|
|
+ value: 'field',
|
|
|
+ label: 'field_name',
|
|
|
+ children: 'child'
|
|
|
+ }"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ :show-all-levels="false"
|
|
|
+ placeholder="请选择"
|
|
|
+ style="width: 100%;"
|
|
|
+ />
|
|
|
+ </el-col>
|
|
|
+ <el-col v-if="sItem.condition == '时效'" :span="0.5">
|
|
|
+ <div class="text-right">至</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-if="sItem.condition == '时效'" :span="3">
|
|
|
+ <el-cascader
|
|
|
+ v-model="sItem.sx_2"
|
|
|
+ :options="objects"
|
|
|
+ :props="{
|
|
|
+ expandTrigger: 'hover',
|
|
|
+ value: 'field',
|
|
|
+ label: 'field_name',
|
|
|
+ children: 'child'
|
|
|
+ }"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ :show-all-levels="false"
|
|
|
+ placeholder="请选择"
|
|
|
+ style="width: 100%;"
|
|
|
+ />
|
|
|
+ </el-col>
|
|
|
+ <el-col v-if="sItem.condition == '时效' && sItem.sx_2" :span="0.5">
|
|
|
+ <div class="text-right">+</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-if="sItem.condition == '时效' && sItem.sx_2" :span="2">
|
|
|
+ <el-input v-model="sItem.sx_3" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
+ </el-col>
|
|
|
+ <el-col v-if="sItem.condition == '时效'" :span="1">
|
|
|
+ <div class="text-right">小时</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="3">
|
|
|
+ <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="onAddGZ(index, sIndex)" />
|
|
|
+ <el-button v-if="item.condition_content.length !== 1" type="primary" size="mini" plain icon="el-icon-minus" @click="onDeleteGZ(index, sIndex)" />
|
|
|
|
|
|
- <!-- 质控逻辑 -->
|
|
|
- <el-col :span="24">
|
|
|
- <el-divider />
|
|
|
- <el-card v-for="(item, index) of ruleForm.rule" :key="'rule'+index" class="box-card" shadow="never">
|
|
|
- <div slot="header" class="clearfix box-card_header span">
|
|
|
- <span class="text">质控逻辑</span>
|
|
|
- <span class="ml40">
|
|
|
- <span>流向</span>
|
|
|
- <el-radio v-model="item.detail_status" :label="1" class="ml40">正确</el-radio>
|
|
|
- <el-radio v-model="item.detail_status" :label="2">错误</el-radio>
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <el-row v-for="(sItem, sIndex) of item.condition_content" :key="'tj'+sIndex" :gutter="12" class="mb12">
|
|
|
- <el-col :span="1.5">
|
|
|
- <div class="text-right">逻辑{{ sIndex + 1 }}</div>
|
|
|
- </el-col>
|
|
|
- <el-col :span="5">
|
|
|
- <el-cascader
|
|
|
- v-model="sItem.param1"
|
|
|
- :options="objects"
|
|
|
- :props="{
|
|
|
- expandTrigger: 'hover',
|
|
|
- value: 'field',
|
|
|
- label: 'field_name',
|
|
|
- children: 'child'
|
|
|
- }"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- :show-all-levels="false"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- />
|
|
|
- </el-col>
|
|
|
- <el-col :span="4">
|
|
|
- <el-select v-model="sItem.condition" filterable clearable placeholder="请选择" style="width: 100%;">
|
|
|
- <el-option v-for="(items,bindex) in selectFormula" :key="bindex" :label="items.formula" :value="items.formula" />
|
|
|
- </el-select>
|
|
|
- </el-col>
|
|
|
- <el-col v-if=" sItem.condition == '等于' || sItem.condition == '不等于'|| sItem.condition == '包含' || sItem.condition == '不包含'" :span="4">
|
|
|
- <el-autocomplete
|
|
|
- v-model="sItem.param2"
|
|
|
- class="inline-input"
|
|
|
- value-key="name"
|
|
|
- :fetch-suggestions="querySearch"
|
|
|
- placeholder="请输入"
|
|
|
- style="width: 100%;"
|
|
|
- @select="handleSelect"
|
|
|
- />
|
|
|
- </el-col>
|
|
|
- <el-col v-if="sItem.condition == '范围'" :span="3">
|
|
|
- <el-input v-model="sItem.fanwei_1" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
- </el-col>
|
|
|
- <el-col v-if="sItem.condition == '范围'" :span="1">
|
|
|
- <div class="text-right">至</div>
|
|
|
- </el-col>
|
|
|
- <el-col v-if="sItem.condition == '范围'" :span="3">
|
|
|
- <el-input v-model="sItem.fanwei_2" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
- </el-col>
|
|
|
- <!-- 时效 -->
|
|
|
- <el-col v-if="sItem.condition == '时效'" :span="3">
|
|
|
- <el-cascader
|
|
|
- v-model="sItem.sx_1"
|
|
|
- :options="objects"
|
|
|
- :props="{
|
|
|
- expandTrigger: 'hover',
|
|
|
- value: 'field',
|
|
|
- label: 'field_name',
|
|
|
- children: 'child'
|
|
|
- }"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- :show-all-levels="false"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- />
|
|
|
- </el-col>
|
|
|
- <el-col v-if="sItem.condition == '时效'" :span="0.5">
|
|
|
- <div class="text-right">至</div>
|
|
|
- </el-col>
|
|
|
- <el-col v-if="sItem.condition == '时效'" :span="3">
|
|
|
- <el-cascader
|
|
|
- v-model="sItem.sx_2"
|
|
|
- :options="objects"
|
|
|
- :props="{
|
|
|
- expandTrigger: 'hover',
|
|
|
- value: 'field',
|
|
|
- label: 'field_name',
|
|
|
- children: 'child'
|
|
|
- }"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- :show-all-levels="false"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- />
|
|
|
- </el-col>
|
|
|
- <el-col v-if="sItem.condition == '时效' && sItem.sx_2" :span="0.5">
|
|
|
- <div class="text-right">+</div>
|
|
|
- </el-col>
|
|
|
- <el-col v-if="sItem.condition == '时效' && sItem.sx_2" :span="2">
|
|
|
- <el-input v-model="sItem.sx_3" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
- </el-col>
|
|
|
- <el-col v-if="sItem.condition == '时效'" :span="1">
|
|
|
- <div class="text-right">小时</div>
|
|
|
- </el-col>
|
|
|
- <el-col :span="3">
|
|
|
- <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="onAddGZ(index, sIndex)" />
|
|
|
- <el-button v-if="item.condition_content.length !== 1" type="primary" size="mini" plain icon="el-icon-minus" @click="onDeleteGZ(index, sIndex)" />
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <div class="span">
|
|
|
- <span>规则之间的逻辑</span>
|
|
|
- <el-radio v-model="item.condition_relation" :label="1" class="ml40">且(满足所有条件)</el-radio>
|
|
|
- <el-radio v-model="item.condition_relation" :label="2">或(满足任意一条件)</el-radio>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <div class="span">
|
|
|
+ <span>规则之间的逻辑</span>
|
|
|
+ <el-radio v-model="item.condition_relation" :label="1" class="ml40">且(满足所有条件)</el-radio>
|
|
|
+ <el-radio v-model="item.condition_relation" :label="2">或(满足任意一条件)</el-radio>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ </el-col>
|
|
|
+ <!-- 质控依据 -->
|
|
|
+ <el-col v-if="ruleForm.rule[0].custom_basis.length" :span="24">
|
|
|
+ <el-card v-for="(item, index) of ruleForm.rule" :key="'rule'+index" class="box-card" shadow="never">
|
|
|
+ <div slot="header" class="clearfix box-card_header span">
|
|
|
+ <span class="text">质控依据</span>
|
|
|
+ <i class="el-icon-delete" style="float: right; margin-top: 13px; cursor: pointer;" @click="onDeleteZKYJ(index)" />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <el-row v-for="(sItem, sIndex) of item.custom_basis" :key="'tj'+sIndex" :gutter="12" class="mb12">
|
|
|
+ <el-col :span="2">
|
|
|
+ <div class="text-right">条件{{ sIndex + 1 }}</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-input v-model="sItem.input1" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <div class="rule-condition">
|
|
|
+ <el-input
|
|
|
+ :value="getDisplayName(sItem.param1)"
|
|
|
+ placeholder="请选择"
|
|
|
+ size="small"
|
|
|
+ style="width: calc(100% - 90px)"
|
|
|
+ readonly
|
|
|
+ @click="openCategoryDialog(index, sIndex)"
|
|
|
+ />
|
|
|
+ <el-button
|
|
|
+ size="small"
|
|
|
+ style="width: 90px"
|
|
|
+ class="category-select"
|
|
|
+ @click="openCategoryDialog(index, sIndex)"
|
|
|
+ >
|
|
|
+ <i class="el-icon-s-operation" style="margin-right: 5px" />
|
|
|
+ 选择
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-input v-model="sItem.input2" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="onAddTJZKYJ(index, sIndex)" />
|
|
|
+ <el-button v-if="item.custom_basis.length !== 1" size="mini" type="primary" plain icon="el-icon-minus" @click="onDeleteTJZKYJ(index, sIndex)" />
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </el-card>
|
|
|
+ </el-col>
|
|
|
+ <!-- 质控预警 -->
|
|
|
+ <el-col v-if=" Object.keys(ruleForm.rule[0].custom_msg).length != 0 " :span="24">
|
|
|
+
|
|
|
+ <el-card v-for="(item, index) of ruleForm.rule" :key="'rule'+index" class="box-card" shadow="never">
|
|
|
+ <div slot="header" class="clearfix box-card_header span">
|
|
|
+ <span class="text">质控预警</span>
|
|
|
+ <i class="el-icon-delete" style="float: right; margin-top: 13px; cursor: pointer;" @click="onDeleteZKyujing(index)" />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <el-row :gutter="12" class="mb12">
|
|
|
+ <el-col :span="2">
|
|
|
+ <div class="text-right">事件</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="7">
|
|
|
+ <div class="rule-condition">
|
|
|
+ <el-input
|
|
|
+ :value="getDisplayName(item.custom_msg.param1)"
|
|
|
+ placeholder="请选择"
|
|
|
+ size="small"
|
|
|
+ style="width: calc(100% - 90px)"
|
|
|
+ readonly
|
|
|
+ @click="openCategoryDialog(index, 0)"
|
|
|
+ />
|
|
|
+ <el-button
|
|
|
+ size="small"
|
|
|
+ style="width: 90px"
|
|
|
+ class="category-select"
|
|
|
+ @click="openCategoryDialog(index, 0)"
|
|
|
+ >
|
|
|
+ <i class="el-icon-s-operation" style="margin-right: 5px" />
|
|
|
+ 选择
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1"> + </el-col>
|
|
|
+ <el-col :span="2"><el-input v-model="item.custom_msg.aftertime" clearable placeholder="请输入" style="width: 100%;" /></el-col>
|
|
|
+ <el-col :span="1">分</el-col>
|
|
|
+ <el-col :span="1">前</el-col>
|
|
|
+ <el-col :span="2"><el-input v-model="item.pre_warning_time" clearable placeholder="请输入" style="width: 100%;" /></el-col>
|
|
|
+ <el-col :span="2">分提醒</el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="12" class="mb12">
|
|
|
+ <el-col :span="2">
|
|
|
+ <div class="text-right">预警提示</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-input v-model="item.custom_msg.input1" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-input v-model="item.custom_msg.input3" clearable disabled placeholder="请输入" style="width: 100%;" />
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-input v-model="item.custom_msg.input2" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="4" />
|
|
|
+ </el-row>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </el-card>
|
|
|
- </el-col>
|
|
|
- <!-- 质控依据 -->
|
|
|
- <el-col v-if="ruleForm.rule[0].custom_basis.length" :span="24">
|
|
|
- <el-card v-for="(item, index) of ruleForm.rule" :key="'rule'+index" class="box-card" shadow="never">
|
|
|
- <div slot="header" class="clearfix box-card_header span">
|
|
|
- <span class="text">质控依据</span>
|
|
|
- <i class="el-icon-delete" style="float: right; margin-top: 13px; cursor: pointer;" @click="onDeleteZKYJ(index)" />
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <el-row v-for="(sItem, sIndex) of item.custom_basis" :key="'tj'+sIndex" :gutter="12" class="mb12">
|
|
|
- <el-col :span="2">
|
|
|
- <div class="text-right">条件{{ sIndex + 1 }}</div>
|
|
|
- </el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-input v-model="sItem.input1" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
- </el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-cascader
|
|
|
- v-model="sItem.param1"
|
|
|
- :options="objects"
|
|
|
- :props="{
|
|
|
- expandTrigger: 'hover',
|
|
|
- value: 'field',
|
|
|
- label: 'field_name',
|
|
|
- children: 'child'
|
|
|
- }"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- :show-all-levels="false"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- />
|
|
|
- </el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-input v-model="sItem.input2" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
- </el-col>
|
|
|
- <el-col :span="4">
|
|
|
- <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="onAddTJZKYJ(index, sIndex)" />
|
|
|
- <el-button v-if="item.custom_basis.length !== 1" size="mini" type="primary" plain icon="el-icon-minus" @click="onDeleteTJZKYJ(index, sIndex)" />
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </div>
|
|
|
- </el-card>
|
|
|
- </el-col>
|
|
|
- <!-- 质控预警 -->
|
|
|
- <el-col v-if=" Object.keys(ruleForm.rule[0].custom_msg).length != 0 " :span="24">
|
|
|
+ </el-card>
|
|
|
+ </el-col>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
|
|
|
- <el-card v-for="(item, index) of ruleForm.rule" :key="'rule'+index" class="box-card" shadow="never">
|
|
|
- <div slot="header" class="clearfix box-card_header span">
|
|
|
- <span class="text">质控预警</span>
|
|
|
- <i class="el-icon-delete" style="float: right; margin-top: 13px; cursor: pointer;" @click="onDeleteZKyujing(index)" />
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <el-row :gutter="12" class="mb12">
|
|
|
- <el-col :span="2">
|
|
|
- <div class="text-right">事件</div>
|
|
|
- </el-col>
|
|
|
- <el-col :span="7">
|
|
|
- <el-cascader
|
|
|
- v-model="item.custom_msg.param1"
|
|
|
- :options="objects"
|
|
|
- :props="{
|
|
|
- expandTrigger: 'hover',
|
|
|
- value: 'field',
|
|
|
- label: 'field_name',
|
|
|
- children: 'child'
|
|
|
- }"
|
|
|
- clearable
|
|
|
- filterable
|
|
|
- :show-all-levels="false"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 100%;"
|
|
|
- />
|
|
|
- </el-col>
|
|
|
- <el-col :span="1"> + </el-col>
|
|
|
- <el-col :span="2"><el-input v-model="item.custom_msg.aftertime" clearable placeholder="请输入" style="width: 100%;" /></el-col>
|
|
|
- <el-col :span="1">分</el-col>
|
|
|
- <el-col :span="1">前</el-col>
|
|
|
- <el-col :span="2"><el-input v-model="item.pre_warning_time" clearable placeholder="请输入" style="width: 100%;" /></el-col>
|
|
|
- <el-col :span="2">分提醒</el-col>
|
|
|
- </el-row>
|
|
|
- <el-row :gutter="12" class="mb12">
|
|
|
- <el-col :span="2">
|
|
|
- <div class="text-right">预警提示</div>
|
|
|
- </el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-input v-model="item.custom_msg.input1" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
- </el-col>
|
|
|
- <el-col :span="4">
|
|
|
- <el-input v-model="item.custom_msg.input3" clearable disabled placeholder="请输入" style="width: 100%;" />
|
|
|
- </el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-input v-model="item.custom_msg.input2" clearable placeholder="请输入" style="width: 100%;" />
|
|
|
- </el-col>
|
|
|
- <el-col :span="4" />
|
|
|
- </el-row>
|
|
|
- </div>
|
|
|
- </el-card>
|
|
|
- </el-col>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button type="primary" @click="submitForm('ruleForm')">提 交</el-button>
|
|
|
+ <el-button @click="onTest">测试规则</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
|
|
|
- </el-row>
|
|
|
- </el-form>
|
|
|
- <span slot="footer" class="dialog-footer">
|
|
|
- <el-button type="primary" @click="submitForm('ruleForm')">提 交</el-button>
|
|
|
- <el-button @click="onTest">测试规则</el-button>
|
|
|
- </span>
|
|
|
- </el-dialog>
|
|
|
+ <!-- 新增选择弹窗 -->
|
|
|
+ <el-dialog
|
|
|
+ title="选择类目"
|
|
|
+ :visible.sync="categoryDialogVisible"
|
|
|
+ width="600px"
|
|
|
+ append-to-body
|
|
|
+ >
|
|
|
+ <div class="category-content">
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="8">
|
|
|
+ <!-- 左侧菜单 -->
|
|
|
+ <el-menu
|
|
|
+ :default-active="activeCategory"
|
|
|
+ class="category-menu"
|
|
|
+ >
|
|
|
+ <el-menu-item
|
|
|
+ v-for="item in objects"
|
|
|
+ :key="item.field_name"
|
|
|
+ :index="item.field_name"
|
|
|
+ @click="handleCategoryClick(item)"
|
|
|
+ >
|
|
|
+ {{ item.field_name }}
|
|
|
+ </el-menu-item>
|
|
|
+ </el-menu>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="16">
|
|
|
+ <!-- 右侧子项 -->
|
|
|
+ <div class="sub-category-list">
|
|
|
+ <el-button
|
|
|
+ v-for="subItem in currentSubCategories"
|
|
|
+ :key="subItem.field"
|
|
|
+ @click="handleSubCategorySelect(subItem)"
|
|
|
+ >
|
|
|
+ {{ subItem.field_name }}
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
@@ -530,12 +587,32 @@ export default {
|
|
|
rule_type: [
|
|
|
{ required: true, message: '请选择', trigger: 'blur' }
|
|
|
]
|
|
|
- }
|
|
|
+ },
|
|
|
+ categoryDialogVisible: false,
|
|
|
+ searchKeyword: '',
|
|
|
+ selectedCategoryValue: '',
|
|
|
+ currentRuleIndex: null,
|
|
|
+ currentConditionIndex: null,
|
|
|
+ categories: [
|
|
|
+ { label: '文本', value: 'text' },
|
|
|
+ { label: '时间', value: 'time' },
|
|
|
+ { label: '数值', value: 'number' }
|
|
|
+ ],
|
|
|
+ categoryType: 'text', // 默认选中文本类型
|
|
|
+ activeCategory: '',
|
|
|
+ currentSubCategories: [],
|
|
|
+ selectedCategory: null
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
titleStr() {
|
|
|
return this.data.row.id ? '编辑' : '新增'
|
|
|
+ },
|
|
|
+ filteredCategories() {
|
|
|
+ if (!this.searchKeyword) return this.categories
|
|
|
+ return this.categories.filter(item =>
|
|
|
+ item.label.toLowerCase().includes(this.searchKeyword.toLowerCase())
|
|
|
+ )
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
@@ -805,6 +882,54 @@ export default {
|
|
|
return false
|
|
|
}
|
|
|
})
|
|
|
+ },
|
|
|
+ openCategoryDialog(ruleIndex, conditionIndex) {
|
|
|
+ this.currentRuleIndex = ruleIndex
|
|
|
+ this.currentConditionIndex = conditionIndex
|
|
|
+ this.categoryDialogVisible = true
|
|
|
+ if (this.objects.length > 0) {
|
|
|
+ this.activeCategory = this.objects[0].field_name
|
|
|
+ this.currentSubCategories = this.objects[0].child || []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handleSearch(value) {
|
|
|
+ // 搜索功能已通过 computed 属性实现
|
|
|
+ },
|
|
|
+ confirmCategory() {
|
|
|
+ if (this.selectedCategory) {
|
|
|
+ // 更新对应条件的类目
|
|
|
+ this.ruleForm.rule[this.currentRuleIndex].condition_content[this.currentConditionIndex].category = this.selectedCategory
|
|
|
+ // 可能还需要更新显示的文本
|
|
|
+ const selectedItem = this.categories.find(item => item.value === this.selectedCategory)
|
|
|
+ this.ruleForm.rule[this.currentRuleIndex].condition_content[this.currentConditionIndex].param2 =
|
|
|
+ selectedItem ? selectedItem.label : ''
|
|
|
+ }
|
|
|
+ this.categoryDialogVisible = false
|
|
|
+ },
|
|
|
+ // 点击左侧类目
|
|
|
+ handleCategoryClick(item) {
|
|
|
+ this.activeCategory = item.field_name
|
|
|
+ this.currentSubCategories = item.child || []
|
|
|
+ },
|
|
|
+ // 选择右侧子类目
|
|
|
+ handleSubCategorySelect(category) {
|
|
|
+ if (this.currentRuleIndex !== null && this.currentConditionIndex !== null) {
|
|
|
+ const condition = this.ruleForm.rule[this.currentRuleIndex].condition_content[this.currentConditionIndex]
|
|
|
+ const parentObj = this.objects.find(obj => obj.field_name === this.activeCategory)
|
|
|
+ const parentField = parentObj ? parentObj.field : ''
|
|
|
+
|
|
|
+ condition.param1 = [parentField, category.field]
|
|
|
+ condition.field_name = category.field_name
|
|
|
+ }
|
|
|
+ this.categoryDialogVisible = false
|
|
|
+ },
|
|
|
+ getDisplayName(param1) {
|
|
|
+ if (!Array.isArray(param1)) return ''
|
|
|
+ const [parentField, childField] = param1
|
|
|
+ const parentObj = this.objects.find(obj => obj.field === parentField)
|
|
|
+ if (!parentObj) return ''
|
|
|
+ const childObj = parentObj.child.find(child => child.field === childField)
|
|
|
+ return childObj ? childObj.field_name : ''
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -845,4 +970,63 @@ export default {
|
|
|
color: #909399;
|
|
|
}
|
|
|
}
|
|
|
+.input-with-category {
|
|
|
+ display: flex;
|
|
|
+ align-items: stretch;
|
|
|
+ gap: 0;
|
|
|
+
|
|
|
+ ::v-deep .el-input__inner {
|
|
|
+ border-top-right-radius: 0;
|
|
|
+ border-bottom-right-radius: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .category-select {
|
|
|
+ ::v-deep .el-input__inner {
|
|
|
+ border-top-left-radius: 0;
|
|
|
+ border-bottom-left-radius: 0;
|
|
|
+ margin-left: -1px;
|
|
|
+ padding-left: 25px; /* 为图标留出空间 */
|
|
|
+ }
|
|
|
+ ::v-deep .el-input__prefix {
|
|
|
+ left: 5px;
|
|
|
+ color: #909399;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+.category-content {
|
|
|
+ height: 400px;
|
|
|
+ .category-menu {
|
|
|
+ height: 100%;
|
|
|
+ border-right: 1px solid #e6e6e6;
|
|
|
+ }
|
|
|
+ .sub-category-list {
|
|
|
+ padding: 10px;
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 10px;
|
|
|
+
|
|
|
+ .el-button {
|
|
|
+ margin: 5px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+.rule-condition {
|
|
|
+ display: flex;
|
|
|
+ align-items: stretch;
|
|
|
+ gap: 0;
|
|
|
+
|
|
|
+ .el-input {
|
|
|
+ ::v-deep .el-input__inner {
|
|
|
+ border-top-right-radius: 0;
|
|
|
+ border-bottom-right-radius: 0;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .category-select {
|
|
|
+ border-top-left-radius: 0;
|
|
|
+ border-bottom-left-radius: 0;
|
|
|
+ margin-left: -1px;
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|