ソースを参照

Merge branch 'knowledgePlat' of http://192.168.2.236:10080/zhouna/platformFront into knowledgePlat

luolei 4 年 前
コミット
9c083c5492

+ 12 - 12
src/api/config.js

@@ -5,7 +5,7 @@ const testUrl = ''
 export default {
   host: 'http://192.168.2.121:5050',
   // imgHost: 'http://192.168.2.121:82',      //富文本编辑器图片回传地址
-  imgHost:'http://192.168.2.236:82',      //富文本编辑器图片回传地址
+  imgHost:'http://192.168.2.121:82',      //富文本编辑器图片回传地址
   delayTime: 500,
   urls: {
     /* 登录注册相关接口 */
@@ -520,17 +520,17 @@ export default {
     'getRunningStatus': '/api/cdssman/test/running/getStatus',   //查看测试用例运行状态
     'getRunningStatusByHospitalId': '/api/cdssman/test/running/getStatusByHospitalId',   //查拉面所有测试用例运行状态
     'updateRunningStatus': '/api/cdssman/test/running/updateStatus',   //更新测试用例运行状态
-    //知识库规则维护
-    'zskRuleList':'/api/cdssman/klRule/getKlRuleInfoPage',//规则列表
-    'zskAddRule':'/api/cdssman//klRule/saveRuleInfo',//添加规则
-    'zskActiveRule':'/api/cdssman/klRule/startRuleInfo',//启用规则
-    'zskDisableRule':'/api/cdssman/klRule/disableRuleInfo',//禁用规则
-    'zskDelRule':'/api/cdssman/klRule/clearRuleInfo',//删除规则
-    'zskRuleDetail':'/api/cdssman/klRule/getByIdRuleInfo',//规则详情
-    'zskTypeList':'/api/cdssman/klRulePlan/getMenu',//类型列表
-    'zskSearchConcept':'/api/cdssman/klDisease/searchConcept',//知识库搜索术语
-    'zskUpdateAll':'/api/cdssman/cache/clearRuleAll',//更新数据
-
+      //知识库规则维护
+      'zskRuleList':'/api/cdssman/klRule/getKlRuleInfoPage',//规则列表
+      'zskAddRule':'/api/cdssman//klRule/saveRuleInfo',//添加规则
+      'zskActiveRule':'/api/cdssman/klRule/startRuleInfo',//启用规则
+      'zskDisableRule':'/api/cdssman/klRule/disableRuleInfo',//禁用规则
+      'zskDelRule':'/api/cdssman/klRule/clearRuleInfo',//删除规则
+      'zskRuleDetail':'/api/cdssman/klRule/getByIdRuleInfo',//规则详情
+      'zskTypeList':'/api/cdssman/klRulePlan/getMenu',//类型列表
+      'zskSearchConcept':'/api/cdssman/klDisease/searchConcept',//知识库搜索术语
+      'zskUpdateAll':'/api/cdssman/cache/clearRuleAll',//更新数据
+      'zskgetDict':'/api/cdssman/kl/dictionary/getDictionarys',//
     //知识库树形图
     'getTree':'/api/cdssman/multContact/getTree',//获取当前type数据
     'searchTreeItem':'/api/cdssman/multContact/getAllForRelation',//检索树元素

+ 3 - 0
src/api/knowledgeLib.js

@@ -30,4 +30,7 @@ export default {
     zskUpdateAll() {    //更新数据
         return axios.post(urls.zskUpdateAll)
     },
+    zskgetDict(){
+        return axios.post(urls.zskgetDict)
+    }
 }

+ 47 - 10
src/components/knowledgeExtra/AddNewRule.vue

@@ -57,16 +57,17 @@
                             </el-option>
                         </el-select>
                     </el-form-item>-->
-                    <el-form-item label="附加信息:" prop="remind" class="parMsg">
-                        <el-input type="textarea" :rows="3" placeholder="请输入附加信息" v-model="form.parMsg" maxlength="121"></el-input>
+                    <el-form-item v-if="showMsg" label="附加信息:" prop="parMsg" class="parMsg">
+                        <el-input type="textarea" :rows="3" placeholder="请输入附加信息" v-model="form.parMsg"></el-input>
                     </el-form-item>
                     <el-form-item v-if="form.parHasSub===1" label="规则内容:" prop="remind" class="discDesc">
                         <SubRulesGroup v-for="(group,i) in subGroups"
                                        ref="groups"
                                        :data="group"
-                                       :firstPlace="firstPlace"
                                        :baseTypes="baseTypeList"
                                        :inx="i"
+                                       :maxNum="subRuleMaxNum"
+                                       :firstPlace="firstPlace"
                                        :isLast="subGroups.length===1"
                                        @addGroup="addGroup"
                                        @delGroup="delGroup"></SubRulesGroup>
@@ -87,14 +88,16 @@
                 labelPosition:'left',
                 isFirst:true,
                 isCopy:false,
+                dict:'',        //规则内容固定的类型
+                msgDict:'',     //显示附加信息的类型
                 title:'规则维护-添加规则',
                 ruleTermTypeList:[],
                 ruleTypeList:[],
                 conceptList:[],
                 baseTypeList:[],
                 conceptName:'',
+                subRuleMaxNum:null,     //规则内容中规则的限制个数
                 firstPlace:null,
-                checkFirstPlace:false,
                 subGroups:[[{
                     subDescription:'',
                     parRuleType:'',
@@ -107,6 +110,8 @@
                     subMinUnit:'',
                     subMinValue:'',
                     subEqValue:'',
+                    subLenCode:'',
+                    dataType:'',
                 }]],
                 form:{
                     parDescription:'',
@@ -132,7 +137,7 @@
                     parLenCode:[{ required: true, message: '请选择规则术语类型',trigger: ['change'] }],
                     parConceptId:[{ required: true, message: '请输入医学标准术语',trigger: ['blur'] }],
                     parHasSub:[{ required: true, message: '请选择有无子条件',trigger: ['change'] }],
-                    parMsg:[{
+                    parMsg:[{ required: true, message: '请输入附加信息',trigger: ['change'] },{
                         validator: (rule,value,callback)=>{
                             if(value.length>300){
                                 callback(new Error('附加信息不能超过300字'));
@@ -147,6 +152,7 @@
         },
         created(){
             this.getTypeList();
+            this.getDict();
             const param = this.$route.params;
             let info = param.data;
             if(info){
@@ -171,10 +177,12 @@
                 }
                 const obj = this.ruleTermTypeList.find((it)=>it.code===val);
                 this.baseTypeList = obj.subMenuList;
+
             },
             'form.parConceptId':function(val){
                 if(this.checkFirstPlace) {
                     this.firstPlace = this.conceptList.find((it) => it.conceptId === val);
+                    this.firstPlace['checkedType']=this.ruleTermCodeStr;
                 }else{
                     this.firstPlace =null;
                 }
@@ -183,7 +191,31 @@
         components:{
             SubRulesGroup
         },
+        computed:{
+            ruleTermCodeStr:function(){
+                return this.form.parRuleType+"-"+this.form.parLenCode
+            },
+            checkFirstPlace:function(){
+                return this.dict.indexOf(this.ruleTermCodeStr)>-1;
+            },
+            showMsg:function(){
+                return this.ruleTermCodeStr.length>1&&this.msgDict.indexOf(this.ruleTermCodeStr)>-1;
+            }
+        },
         methods:{
+            getDict(){
+                api.zskgetDict().then((res) => {
+                    if (res.data.code == '0') {
+                        const data = res.data.data;
+                        const arr =data['20'].map((it)=>it.val);
+                        this.dict = arr.join(",");
+                        this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+                        localStorage.setItem("zskDicts",arr.join(","));
+                    }
+                }).catch((error) => {
+                    console.log(error);
+                });
+            },
             showConfirmDialog(msg,resolve){
                 this.$alert(msg, '提示', {
                     confirmButtonText: '确定',
@@ -196,6 +228,11 @@
                 let arr=[];
                 data.map((it)=>{
                     if(!arr[it.groupType]){arr[it.groupType]=[];}
+                    if(it.subMaxOperator){
+                        it.dataType='1';
+                    }else if(it.subEqValue){
+                        it.dataType='2';
+                    }
                     arr[it.groupType].push(it);
                 })
                 return arr;
@@ -226,13 +263,9 @@
                 this.form.parLenCode=val;
                 const obj = this.ruleTermTypeList.find((it)=>it.code===val);
                 this.baseTypeList = obj.subMenuList;
+                this.subRuleMaxNum = obj.number;
                 this.setInitGroupData();
                 this.form.parHasSub=obj.subMenuList.length?1:0;
-                if(obj.firstPlace===1){
-                    this.checkFirstPlace=true;
-                }else{
-                    this.checkFirstPlace=false;
-                }
             },
             getTypeList(){
               const typeListData = JSON.parse(localStorage.getItem("zskTypesList"));
@@ -251,6 +284,8 @@
                   subMinUnit:'',
                   subMinValue:'',
                   subEqValue:'',
+                  subLenCode:'',
+                  dataType:'',
               }]];
               this.form.parConceptId='';//医学标准术语清空
               this.conceptList=[];  //下拉列表清空
@@ -268,6 +303,8 @@
                     subMinUnit:'',
                     subMinValue:'',
                     subEqValue:'',
+                    subLenCode:'',
+                    dataType:'',
                 }]);
             },
             delGroup(i){

+ 23 - 27
src/components/knowledgeExtra/SubConditions.vue

@@ -1,7 +1,7 @@
 <template>
     <div class="groups-cont">
         <el-form ref="groupData" label-width="150px" class="sub-condition-form" :model="groupData" :rules="rules">
-            <span class="del-btn"  @click="delRule">删除</span><!--:class="isLast?'disable del-btn':'del-btn'"-->
+            <span v-if="!disabled&&!isLast" class="del-btn"  @click="delRule">删除</span><!--:class="isLast?'disable del-btn':'del-btn'"-->
             <el-form-item label="基础规则名称:" prop="subDescription">
                 <el-input v-model.trim = "groupData.subDescription" :disabled="disabled"></el-input>
             </el-form-item>
@@ -43,10 +43,9 @@
                 </el-select>
             </el-form-item>
             <el-form-item v-if="groupData.subType===2" label="选择类型:" prop="dataType">
-                <el-select v-model="dataType"
-                           @change="dataTypeChange"
+                <el-select v-model="groupData.dataType"
                            placeholder="请选择"
-                           size="small">
+                           size="small" @change="dataTypeChange">
                     <el-option
                             v-for="item in dataTypes"
                             :key="item.id"
@@ -55,7 +54,7 @@
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item class="min-margin" v-if="dataType==='1'" label="最大值:" required>
+            <el-form-item class="min-margin" v-if="groupData.dataType==='1'" label="最大值:" required>
                 <div class="select-item clearfix">
                     <el-col :span="4">
                         <el-form-item prop="subMaxOperator">
@@ -83,7 +82,7 @@
                     </el-col>
                 </div>
             </el-form-item>
-            <el-form-item class="min-margin" v-if="dataType==='1'" label="最小值:" required>
+            <el-form-item class="min-margin" v-if="groupData.dataType==='1'" label="最小值:" required>
                 <div class="select-item clearfix">
                     <el-col :span="4">
                         <el-form-item prop="subMinOperator">
@@ -111,14 +110,14 @@
                     </el-col>
                 </div>
             </el-form-item>
-            <el-form-item v-if="dataType==='2'" label="医学内容:" prop="subEqValue" class="discDesc">
-                <el-input type="textarea" rows="3" placeholder="请输入医学内容" v-model="groupData.subEqValue" maxlength="121"></el-input>
+            <el-form-item v-if="groupData.dataType==='2'" label="医学内容:" prop="subEqValue" class="discDesc">
+                <el-input type="textarea" rows="3" placeholder="请输入医学内容" v-model="groupData.subEqValue"></el-input>
             </el-form-item>
             <el-form-item v-if="groupData.subType===6" label="正则表达式:" prop="subEqValue" class="discDesc">
-                <el-input type="textarea" rows="3" placeholder="请输入正则表达式" v-model="groupData.subEqValue" maxlength="121"></el-input>
+                <el-input type="textarea" rows="3" placeholder="请输入正则表达式" v-model="groupData.subEqValue"></el-input>
             </el-form-item>
         </el-form>
-        <div class="inner-oper">
+        <div class="inner-oper" v-if="showAdd">
             <span>新增规则:</span>
             <span class="add-btn" @click="addRule"><img src="../../images/add.png" alt="新增规则"></span>
         </div>
@@ -128,12 +127,11 @@
     import api from '@api/knowledgeLib.js';
     export default {
         name:'subCondititons',
-        props:['groupData','ind','isLast','baseTypes','firstPlace','disabled'],
+        props:['groupData','ind','isLast','baseTypes','firstPlace','disabled','showAdd'],
         data(){
             return {
                 baseTermTypeList:[],
                 typeList:[],
-                dataType:'',
                 operTypeList:[{name:'>',key:'>'},
                     {name:'>=',key:'>='},
                     {name:'<',key:'<'},
@@ -185,10 +183,11 @@
             },
             'firstPlace':function(val){
                 if(!val)return;
-                const sub = this.baseTypes.find((it)=>it.firstPlace===1);
+                const types= val.checkedType.split("-");
+                const sub = this.baseTypes.find((it)=>it.ruleType===+types[0]&&it.type===2);
                 this.groupData.subType=sub.type;
                 this.baseTermTypeList =sub.subMenuList;
-                this.groupData.subLenCode=this.baseTermTypeList.find((it)=>it.firstPlace===1).code;
+                this.groupData.subLenCode=this.baseTermTypeList.find((it)=>it.ruleType===+types[0]).code;
                 this.conceptList=[val];
                 this.groupData.subDescription=val.conceptName;
                 this.groupData.subConceptId = val.conceptId;
@@ -197,11 +196,6 @@
         },
         created(){
             this.conceptList=[{conceptName:this.groupData.subLibName,conceptId:this.groupData.subConceptId}];
-            if(this.groupData.subMaxOperator){
-                this.dataType='1'
-            }else if(this.groupData.subEqValue){
-                this.dataType='2'
-            }
         },
         methods:{
             dataTypeChange(val){
@@ -209,10 +203,9 @@
                 this.clearNumText();
             },
             subTypeChange(val){         //基础规则类型修改
-                this.dataType='';
-                this.groupData.subConceptId='';
-                this.groupData.dataType='';
                 this.groupData.subLenCode='';
+                this.groupData.dataType='';
+                this.clearConcept();
                 this.clearNumText();
                 if(!val){
                     this.baseTermTypeList =[];
@@ -221,13 +214,16 @@
                 const obj = this.baseTypes.find((it)=>it.type===val);
                 this.baseTermTypeList = obj.subMenuList;
             },
-            subCodeChange(){        //基础规则术语类型修改
-                this.dataType='';
-                this.groupData.subConceptId='';
+            subCodeChange(val){        //基础规则术语类型修改
+                this.groupData.subLenCode=val;
                 this.groupData.dataType='';
-                this.groupData.subLenCode='';
+                this.clearConcept();
                 this.clearNumText();
             },
+            clearConcept(){
+              this.groupData.subConceptId='';
+              this.conceptList=[];
+            },
             clearNumText(){
                 this.groupData.subMaxOperator='';
                 this.groupData.subMaxValue='';
@@ -296,7 +292,6 @@
             }
         }
         .inner-oper{
-            border-top:2px solid #F5F5F5;
             padding: 15px 0 15px 21px;
             .add-btn {
                 cursor: pointer;
@@ -308,6 +303,7 @@
         .sub-condition-form{
             padding: 20px;
             position: relative;
+            border-bottom:2px solid #F5F5F5;
             .del-btn{
                 color: #FF5B5B;
                 cursor: pointer;

+ 13 - 3
src/components/knowledgeExtra/SubRulesGroup.vue

@@ -3,8 +3,9 @@
         <SubConditions v-for="(rules,i) in data"
                        ref="group"
                        :groupData="rules"
-                       :isLast="rules.length===1"
+                       :isLast="data.length===1"
                        :ind="i"
+                       :showAdd="data.length<maxNum"
                        :baseTypes="baseTypes"
                        :firstPlace="firstPlace"
                        :disabled="i===0&&disable"
@@ -13,7 +14,7 @@
                        @delRule="delRule"></SubConditions>
         <div class="group-oper">
             <el-button size="small" @click="addGroup">+新增分组</el-button>
-            <el-button :class="isLast?'disable':''" size="small" type="danger" plain @click="delGroup">-删除分组</el-button>
+            <el-button :disabled="isLast" size="small" type="danger" plain @click="delGroup">-删除分组</el-button>
         </div>
     </div>
 </template>
@@ -21,7 +22,7 @@
     import SubConditions from './SubConditions.vue';
     export default {
         name:'SubRulesGroup',
-        props:['data','inx','isLast','baseTypes','firstPlace'],
+        props:['data','inx','isLast','baseTypes','maxNum','firstPlace'],
         data(){
             return {
             }
@@ -50,6 +51,7 @@
                     subMinUnit:'',
                     subMinValue:'',
                     subEqValue:'',
+                    dataType:'',
                 };
                 this.data.push(temp);
             },
@@ -100,4 +102,12 @@
         border-top: 4px solid #F5F5F5;
         background: #fff;
     }
+    .el-button--danger.is-plain{
+        background: none;
+        &.is-disabled{
+            color: #f9a7a7;
+            background-color: #fef0f0;
+            border-color: #fde2e2;
+        }
+    }
 </style>