Преглед изворни кода

知识库-规则维护-添加

zhouna пре 4 година
родитељ
комит
c5be2249a7

+ 9 - 0
src/api/config.js

@@ -518,6 +518,15 @@ 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',//知识库搜索术语
 
   },
   menuIconList: { //菜单对应图标

+ 9 - 12
src/api/knowledgeLib.js

@@ -4,31 +4,28 @@ import config from '@api/config.js';
 const urls = config.urls;
 export default {
     getRulesList(param){
-        return axios.post(urls.rulesList,param);
+        return axios.post(urls.zskRuleList,param);
     },
     getTypesList(param){
-        return axios.post(urls.ruleTypesList,param);
-    },
-    getRulesApplyList(param){
-        return axios.post(urls.rulesApplyList,param);
+        return axios.post(urls.zskTypeList,param);
     },
     deleteRule(param){
-        return axios.post(urls.ruleDelete,param);
+        return axios.post(urls.zskDelRule,param);
     },
     deleteRuleApply(param){
-        return axios.post(urls.ruleApplyDelete,param);
+        return axios.post(urls.zskDisableRule,param);
     },
     ruleDetail(param){
-        return axios.post(urls.ruleDetail,param);
+        return axios.post(urls.zskRuleDetail,param);
     },
-    ruleApplyDetail(param){
-        return axios.post(urls.ruleApplyDetail,param);
+    searchConcept(param){
+        return axios.post(urls.zskSearchConcept,param);
     },
     saveRule(param){
-        return axios.post(urls.addRule,param);
+        return axios.post(urls.zskAddRule,param);
     },
     saveRuleApply(param){
-        return axios.post(urls.addRuleApply,param);
+        return axios.post(urls.zskActiveRule,param);
     },
     reloadLib() {    //医学术语命名维护-加载词库
         return axios.post(urls.reloadLib)

+ 181 - 81
src/components/knowledgeExtra/AddNewRule.vue

@@ -3,72 +3,73 @@
         <crumbs :title="title" :param="$route.params" linkTo="ZskRuleManager"></crumbs>
         <div class="contents">
             <div class="content">
-                <!-- <el-form ref="form" :label-position="labelPosition" label-width="95px" class="add-admin-form" :model="form" :rules="rules"> -->
                 <el-form ref="form" :label-position="labelPosition" class="add-new-form" label-width="130px" :model="form" :rules="rules">
-                    <el-form-item label="规则名称:" prop="name">
-                        <el-input v-model.trim = "form.name"></el-input>
+                    <el-form-item label="规则名称:" prop="parDescription">
+                        <el-input v-model.trim = "form.parDescription"></el-input>
                     </el-form-item>
-                    <el-form-item label="规则类型:" prop="ruleType">
-                        <el-select v-model="form.ruleType"
+                    <el-form-item label="规则类型:" prop="parRuleType">
+                        <el-select v-model="form.parRuleType"
                                    placeholder="请选择"
-                                   size="small">
+                                   size="small"
+                                   @change="ruleTypeChange">
                             <el-option
                                     v-for="item in ruleTypeList"
-                                    :key="item.name"
+                                    :key="item.id"
                                     :label="item.name"
-                                    :value="item.name">
+                                    :value="item.id">
                             </el-option>
                         </el-select>
                     </el-form-item>
-                    <el-form-item label="规则术语类型:" prop="ruleTermType">
-                        <el-select v-model="form.ruleTermType"
+                    <el-form-item label="规则术语类型:" prop="parLibTypeId">
+                        <el-select v-model="form.parLibTypeId"
                                    placeholder="请选择"
-                                   size="small">
+                                   size="small" @change="ruleTermChange">
                             <el-option
                                     v-for="item in ruleTermTypeList"
-                                    :key="item.name"
+                                    :key="item.id"
                                     :label="item.name"
-                                    :value="item.name">
+                                    :value="item.code">
                             </el-option>
                         </el-select>
                     </el-form-item>
-                    <el-form-item  class="addDepartFormItem" label="医学标准术语:" prop="term">
-                        <el-input  @focus="focuInput" v-model.trim = "form.term" suffix-icon="el-icon-search"></el-input>
-                        <ul class="itemList" v-show="conceptList.length>0">
+                    <el-form-item  class="addDepartFormItem" label="医学标准术语:" prop="parConceptName">
+                        <el-input @focus="inputFocus" @input="searchConcept" v-model="form.parConceptName" suffix-icon="el-icon-search"></el-input>
+                        <ul class="itemList" v-show="showList&&conceptList.length>0">
                             <li
                                     v-for="item in conceptList"
-                                    class="diagItem ellipsis"
+                                    class="conceptItem ellipsis"
                                     :title="item.conceptName"
-                                    @click="selectDiag(item)"
+                                    @click="selectConcept(item)"
                                     :key="item.conceptId">
                                 {{item.conceptNameType||item.conceptName}}
                             </li>
                         </ul>
                     </el-form-item>
-                    <el-form-item label="有无子条件:" prop="hasSub">
-                        <el-select v-model="form.hasSub"
+                    <el-form-item label="有无子条件:" prop="parHasSub">
+                        <el-select v-model="form.parHasSub"
                                    placeholder="请选择"
                                    size="small">
                             <el-option
                                     v-for="item in hasSub"
-                                    :key="item.name"
+                                    :key="item.id"
                                     :label="item.name"
-                                    :value="item.key">
+                                    :value="item.id">
                             </el-option>
                         </el-select>
                     </el-form-item>
-                    <el-form-item label="附加信息:" prop="remind" class="discDesc">
-                        <el-input type="textarea" :rows="3" placeholder="请输入附加信息" v-model="form.remind" maxlength="121"></el-input>
+                    <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>
-                    <el-form-item v-if="form.hasSub==='1'" label="规则内容:" prop="remind" class="discDesc">
+                    <el-form-item v-if="form.parHasSub==='1'" label="规则内容:" prop="remind" class="discDesc">
                         <SubRulesGroup v-for="(group,i) in subGroups"
                                        :data="group"
+                                       :baseTypes="baseTypeList"
                                        :inx="i"
                                        :isLast="subGroups.length===1"
                                        @addGroup="addGroup"
                                        @delGroup="delGroup"></SubRulesGroup>
                     </el-form-item>
-                    <el-button class="disclButn" size="small" type="primary" @click="confirm('form')">保存</el-button>
+                    <el-button class="disclButn" size="small" type="primary" @click="confirm">保存</el-button>
                 </el-form>
             </div>
         </div>
@@ -84,30 +85,37 @@
                 labelPosition:'left',
                 isFirst:true,
                 title:'规则维护-添加规则',
-                searchConcept:'',
                 ruleTermTypeList:[],
                 ruleTypeList:[],
                 conceptList:[],
+                baseTypeList:[],
+                conceptName:'',
+                showList:false,
                 subGroups:[[{
-                    name:'',
-                    ruleType:'',
-                    termType:'',
-                    normTerm:'',
-                    type:'',
-                    max:'',
-                    min:'',
-                    text:''
+                    subDescription:'',
+                    parRuleType:'',
+                    subConceptId:'',
+                    subType:'',
+                    subMaxOperator:'',
+                    subMaxUnit:'',
+                    subMaxValue:'',
+                    subMinOperator:'',
+                    subMinUnit:'',
+                    subMinValue:''
                 }]],
                 form:{
-                    ruleType:'',
-                    ruleTermType:'',
-                    term:'',
-                    hasSub:'1',
-                    remind:'',
+                    parDescription:'',
+                    parRuleType:'',
+                    parConceptId:'',
+                    parConceptName:'',
+                    parHasSub:'',
+                    parLibTypeId:'',
+                    parMsg:'',
+                    klRuleInfoSaveSub:[],
                 },
-                id:null,
+                parId:null,
                 rules:{
-                    name:[{ required: true, message: '请输入规则名称',trigger: ['blur'] },{
+                    parDescription:[{ required: true, message: '请输入规则名称',trigger: ['blur'] },{
                         validator: (rule,value,callback)=>{
                             if(value.length>100){
                                 callback(new Error('规则名称不能超过100字'));
@@ -115,11 +123,11 @@
                                 callback();
                             }}, trigger: 'change'
                     }],
-                    ruleType:[{ required: true, message: '请选择规则类型',trigger: ['blur'] }],
-                    ruleTermType:[{ required: true, message: '请选择规则术语类型',trigger: ['blur'] }],
-                    term:[{ required: true, message: '请输入医学标准术语',trigger: ['blur'] }],
-                    hasSub:[{ required: true, message: '请选择有无子条件',trigger: ['blur'] }],
-                    remind:[{
+                    parRuleType:[{ required: true, message: '请选择规则类型',trigger: ['blur'] }],
+                    parLibTypeId:[{ required: true, message: '请选择规则术语类型',trigger: ['blur'] }],
+                    parConceptName:[{ required: true, message: '请输入医学标准术语',trigger: ['blur'] }],
+                    parHasSub:[{ required: true, message: '请选择有无子条件',trigger: ['blur'] }],
+                    parMsg:[{
                         validator: (rule,value,callback)=>{
                             if(value.length>300){
                                 callback(new Error('附加信息不能超过300字'));
@@ -128,12 +136,7 @@
                             }}, trigger: 'change'
                     }]
                 },
-                pickerOptions1:{
-                    disabledDate(time) {
-                        return time.getTime() < Date.now();
-                    },
-                },
-                hasSub:[{name:'有',key:'1'},{name:'无',key:'0'},
+                hasSub:[{name:'有',id:'1'},{name:'无',id:'0'},
                 ]
             }
         },
@@ -141,20 +144,93 @@
             let info = this.$route.params.data;
             if(info){
                 this.id = info.id;
-                this.form=Object.assign({},this.form,info);
                 this.title = "规则维护-修改规则";
+                this.form=Object.assign({},this.form,info);
                 // this.getList();
             }
+            this.getTypeList();
         },
         components:{
             SubRulesGroup
         },
         methods:{
-            focuInput(){
-
+            searchConcept(val){
+                console.log(val)
+                const param = {
+                    excludedConceptIds:[this.form.parRuleType],
+                    libTypes:[this.form.parLibTypeId],
+                    name:val,
+                };
+                api.searchConcept(param).then((res) => {
+                    if (res.data.code == '0') {
+                        const data = res.data.data;
+                        this.conceptList = data;
+                    }
+                }).catch((error) => {
+                    console.log(error);
+                });
+            },
+            selectConcept(it){
+                this.form.parConceptName=it.conceptName;
+                this.form.parConceptId = it.conceptId;
+                this.showList = false;
             },
-            searchTerm(){
+            inputFocus(){
+                this.showList = !this.showList;
+            },
+            ruleTypeChange(val){        //规则类型选中
+                this.form.parRuleType=val;
+                this.form.parLibTypeId='';
+                const obj = this.ruleTypeList.find((it)=>it.id===val);//console.log(val)
+                this.ruleTermTypeList = obj.subMenuList;
+                this.setInitGroupData();
+            },
+            ruleTermChange(val){        //规则术语类型选中
+                this.form.parLibTypeId=val;
+                const obj = this.ruleTermTypeList.find((it)=>it.code===val);//console.log(val)
+                this.baseTypeList = obj.subMenuList;
+                this.setInitGroupData();
+            },
+            getTypeList(){
+              const typeListData = localStorage.getItem("zskTypesList");
+              if(typeListData){
+                  this.ruleTypeList = typeListData;
+                  return;
+              }
+                api.getTypesList({}).then((res) => {
+                    if (res.data.code == '0') {
+                        const data = res.data.data;
+                        this.ruleTypeList = data;
+                    }
+                }).catch((error) => {
+                    console.log(error);
+                });
+            },
+            setInitGroupData(){
+              this.subGroups = [[{
+                  subDescription:'',
+                  parRuleType:'',
+                  subConceptId:'',
+                  subType:'',
+                  subMaxOperator:'',
+                  subMaxUnit:'',
+                  subMaxValue:'',
+                  subMinOperator:'',
+                  subMinUnit:'',
+                  subMinValue:''
+              }]];
+              this.form.parConceptName='';//医学标准术语清空
+              this.conceptList=[];  //下拉列表清空
+            },
+            getDetail(){
+                api.ruleDetail({id}).then((res) => {
+                    if (res.data.code == '0') {
+                        const data = res.data.data;
 
+                    }
+                }).catch((error) => {
+                    console.log(error);
+                });
             },
             addGroup(){
                 this.subGroups.push([{
@@ -171,12 +247,38 @@
             delGroup(i){
                 this.subGroups.splice(i,1);
             },
-            confirm(form){
-                this.$refs[form].validate((valid) => {
+            saveRule(params){
+                api.saveRule(params).then((res)=>{
+                    if(res.data.code==0){
+                        this.$message({
+                            message:"添加成功",
+                            type:'success'
+                        });
+                        this.$router.push({name: 'ZskRuleManager'});
+                    }else{
+                        this.$message({
+                            message:res.data.msg,
+                            type:'warning'
+                        });
+                    }
+                })
+            },
+            formatGroups(){
+                let obj = [];
+                this.subGroups.map((item,i)=>{
+                   item.map((it)=>{
+                       obj.push({groupType:i,...it});
+                   })
+                });
+                return obj
+            },
+            confirm(){
+                this.$refs['form'].validate((valid) => {
                     if (valid) {
-                        if(this.id){//修改
-                            const param = Object.assign({},this.form,{id:this.id?this.id:undefined})
-                            api.saveRule(param).then((res)=>{
+                        this.form.klRuleInfoSaveSub = this.formatGroups();
+                        if(this.parId){//修改
+                            const params = Object.assign({},this.form,{id:this.parId?this.parId:undefined})
+                            /*api.saveRule(param).then((res)=>{
                                 if(res.data.code==0){
                                     this.$message({
                                         message:"修改成功",
@@ -193,24 +295,13 @@
                                         type:'warning'
                                     });
                                 }
-                            })
+                            })*/
                         }else{//添加
-                            const params = Object.assign({},this.form,{'id':this.id});
-                            api.saveRule(params).then((res)=>{
-                                if(res.data.code==0){
-                                    this.$message({
-                                        message:"添加成功",
-                                        type:'success'
-                                    });
-                                    this.$router.push({name: 'ZskRuleManager'});
-                                }else{
-                                    this.$message({
-                                        message:res.data.msg,
-                                        type:'warning'
-                                    });
-                                }
-                            })
+                            //const params = Object.assign({},this.form);
+                            this.saveRule(this.form)
+                            //console.log(params)
                         }
+                        //this.saveRule(params);
                     } else {
                         return false;
                     }
@@ -228,6 +319,15 @@
         color: #545455;
         min-width: 980px;
         position: relative;
+        .conceptItem{
+            padding: 0 10px;
+            cursor: pointer;
+            height: 32px;
+            line-height: 32px;
+            &:hover{
+                background: #ebedf1;
+            }
+        }
         .discDesc{
             margin-bottom: 20px;
         }
@@ -248,10 +348,10 @@
             position: absolute;
             // display: none;
             background: #fff;
-            width: 162px;
-            max-height: 150px;
+            width: 188px;
+            max-height: 160px;
             border: 1px solid #DCDFE6;
-            left: 54px;
+            left: 0;
             top: 37px;
             z-index: 2;
             overflow-y: auto;

+ 89 - 62
src/components/knowledgeExtra/RuleManager.vue

@@ -3,23 +3,23 @@
         <crumbs title="规则维护" :minWidth="titleWidth" class="knowledgeTitle">
             <el-form :inline="true" class="demo-form-inline">
                 <el-form-item label="规则名称:">
-                    <el-input size="mini" v-model="filter.ruleName" placeholder="输入规则名称"></el-input>
+                    <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称"></el-input>
                 </el-form-item>
                 <el-form-item label="规则类型:">
-                    <el-select v-model="filter.type" clearable placeholder="请选择" size="mini">
+                    <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
                         <el-option
-                                v-for="item in typeList"
-                                :key="item.key"
+                                v-for="item in ruleTypeList"
+                                :key="item.id"
                                 :label="item.name"
-                                :value="item.key">
+                                :value="item.id">
                         </el-option>
                     </el-select>
                 </el-form-item>
                 <el-form-item label="术语名称:">
-                    <el-input size="mini" v-model="filter.termName" placeholder="输入术语名称"></el-input>
+                    <el-input size="mini" v-model="filter.parConceptName" placeholder="输入术语名称"></el-input>
                 </el-form-item>
                 <el-form-item label="状态:">
-                    <el-select v-model="filter.isState" clearable placeholder="请选择" size="mini">
+                    <el-select v-model="filter.parStatus" clearable placeholder="请选择" size="mini">
                         <el-option
                                 v-for="item in stateSelect"
                                 :key="item.id"
@@ -36,7 +36,7 @@
                 <el-form-item>
                     <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
                     <input type="file" name="uploadfile " id="upFile" @change="uploadFile($event)" accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">
-                    <el-button size="mini" @click="uploadClick">加载词库</el-button>
+                    <el-button size="mini" @click="uploadClick">更新数据</el-button>
                 </el-form-item>
             </el-form>
         </crumbs>
@@ -51,32 +51,34 @@
                         width="60">
                 </el-table-column>
                 <el-table-column
-                        prop="ruleName"
-                        label="规则名称">
+                        prop="parDescription"
+                        label="规则名称"
+                        width="160">
                 </el-table-column>
                 <el-table-column
-                        prop="ruleType"
+                        prop="parRuleType"
                         label="规则类型">
                 </el-table-column>
                 <el-table-column
-                        prop="conceptName"
-                        label="术语名称">
-                </el-table-column>
-                <el-table-column
-                        prop="libTypeName"
+                        prop="parConceptName"
                         label="医学标准术语"
                         width="160">
                 </el-table-column>
                 <el-table-column
-                        prop="hasSubCond"
+                        prop="parLibTypeName"
+                        label="术语类型"
+                        width="130">
+                </el-table-column>
+                <el-table-column
+                        prop="parHasSub"
                         label="有无子条件"
                         width="100">
                     <template slot-scope="scope">
-                        {{scope.row.hasSubCond === '0'?'无':'有'}}
+                        {{scope.row.parHasSub === '0'?'无':'有'}}
                     </template>
                 </el-table-column>
                 <el-table-column
-                        prop="msg"
+                        prop="parMsg"
                         label="附加信息"
                         width="160">
                 </el-table-column>
@@ -84,7 +86,7 @@
                         label="状态">
                     <template slot-scope="scope">
                           <span>
-                            {{scope.row.status === '0'?'禁用':'启用'}}
+                            {{scope.row.parStatus === 0?'禁用':'启用'}}
                           </span>
                     </template>
                 </el-table-column>
@@ -95,19 +97,19 @@
                 <el-table-column
                         prop="gmtModified"
                         label="操作时间"
-                        width="150">
+                        width="180">
                 </el-table-column>
                 <el-table-column
                         label="操作"
                         width="180">
                     <template slot-scope="scope">
-                        <el-button type="text" size="small" @click="editData(scope.row)">修改</el-button>
+                        <el-button type="text" size="small" @click="editData(scope.row.id)">修改</el-button>
                         <span style="margin:0 3px;">|</span>
                         <el-button type="text" size="small" @click="copyData(scope.row)">复制</el-button>
                         <span style="margin:0 3px;">|</span>
-                        <el-button type="text" size="small" :class="scope.row.status === '0'?'':'delete'" @click="showDelDialog(scope.row)">{{scope.row.status === '0'?'启用':'禁用'}}</el-button>
+                        <el-button type="text" size="small" :class="scope.row.parStatus === 0?'':'delete'" @click="showDelDialog(scope.row)">{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
                         <span style="margin:0 3px;">|</span>
-                        <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row)">删除</el-button>
+                        <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row,1)">删除</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -136,15 +138,16 @@
             return {
                 list: [],
                 stateSelect:[
-                    {id:'1',name:'启用'},
-                    {id:'0',name:'禁用'},
+                    {id:1,name:'启用'},
+                    {id:0,name:'禁用'},
                 ],
+                ruleTypeList:[],
                 searched: false,
                 filter:{
-                    isState:'',
-                    ruleName:'',
-                    termName:'',
-                    type:'',
+                    parStatus:'',
+                    parDescription:'',
+                    parConceptName:'',
+                    parRuleType:'',
                 },
                 cacheData: {},
                 currentPage: 1,
@@ -152,15 +155,11 @@
                 pageSizeArr:config.pageSizeArr,
                 pageLayout:config.pageLayout,
                 total: 0,
-                typeList:[],
                 titleWidth:'1070px' //头部最小宽度
             }
         },
         created() {
-            const typeList = JSON.parse(localStorage.getItem("knowledgeEnumsData"));
-            if(typeList){
-                this.typeList = typeList.lexiconRSTypeEnum;
-            }
+            this.getTypeList();
             const that = this;
             //返回时避免参数未赋值就获取列表
             setTimeout(function(){
@@ -183,6 +182,21 @@
             })
         },
         methods: {
+            getTypeList(){
+                const typeListData = localStorage.getItem("zskTypesList");
+                if(typeListData){
+                    this.ruleTypeList = typeListData;
+                    return;
+                }
+                api.getTypesList({}).then((res) => {
+                    if (res.data.code == '0') {
+                        const data = res.data.data;
+                        this.ruleTypeList = data;
+                    }
+                }).catch((error) => {
+                    console.log(error);
+                });
+            },
             handleSizeChange(val){
                 this.pageSize = val;
                 this.currentPage = utils.getCurrentPage(this.currentPage, this.total, this.pageSize);
@@ -209,14 +223,13 @@
                     text: 'Loading',
                     spinner: 'el-icon-loading',
                     background: 'rgba(0, 0, 0, 0.7)'
-                });loading.close()
-                /*api.getRulesList(params).then((res) => {
-
-                    if (res.data.code == '0') {*/
-                const data={pages:1,size: 10,total: 1,records:[{id:'0',gmtModified:'5001-220',modifier:'32',conceptName:'单独',description:"ee",ruleType:'1',hasSubCond:'1',status:'1',msg:'ff'}]};
-                        //const data = res.data.data;
+                });
+                api.getRulesList(params).then((res) => {
+                    loading.close();
+                    if (res.data.code == '0') {
+                        const data = res.data.data;
                         for(let j = 0;j < data.records.length;j++){
-                            data.records[j].condition = (data.records[j].isDeleted == '1'?'启用':'禁用')
+                            data.records[j].condition = (data.records[j].parStatus == '1'?'启用':'禁用')
                         }
                         this.list = data.records;
                         if(!flag){//搜索时不缓存
@@ -229,11 +242,11 @@
                             this.currentPage=this.inCurrentPage;
                             this.inCurrentPage = undefined;
                         }
-                /*    }
+                    }
                 }).catch((error) => {
                     loading.close()
                     console.log(error);
-                });*/
+                });
             },
             getFilterItems(isTurnPage) {
                 //翻页时筛选条件没点确定则清空
@@ -243,10 +256,10 @@
                 const param = {
                     current: this.inCurrentPage||this.currentPage,
                     size: this.pageSize,
-                    relationId: this.filter.type,
-                    startName: this.filter.ruleName.trim(),
-                    endName: this.filter.termName.trim(),
-                    isDeleted:this.filter.isState
+                    parRuleType: this.filter.parRuleType,
+                    parDescription: this.filter.parDescription.trim(),
+                    parConceptName: this.filter.parConceptName.trim(),
+                    parStatus:this.filter.parStatus
                 };
                 return param;
             },
@@ -279,26 +292,40 @@
             copyData(){
 
             },
-            editData(){
-
+            editData(id){
+                const pam = this.searched ? {
+                    currentPage: this.currentPage,
+                    pageSize:this.pageSize,
+                    filter: this.filter
+                } : {currentPage: this.currentPage,
+                    pageSize:this.pageSize};
+                api.ruleDetail({id}).then((res) => {
+                    if (res.data.code == '0') {
+                        const data = res.data.data;
+                        this.$router.push({name:'AddZskRule',params:{...pam,data}});
+                    }
+                }).catch((error) => {
+                    this.warning('获取详情失败,请重试')
+                });
             },
-            showDelDialog(item){
+            showDelDialog(row,isDelete){
                 const params = {
-                    id:item.id,
-                    isDeleted:item.isDeleted === 'N'?'Y':'N'
-                }
-                let warningTxt = item.isDeleted === 'N'?'是否删除该关系?可能对现有系统造成影响':'是否重新启用该条数据?'
+                    parId:row.parId
+                };
+                const txt=row.parStatus===0?'重新启用':'禁用';
+                const warningTxt = isDelete?'是否删除该关系?可能对现有系统造成影响':'是否'+txt+'该条数据?';
+                const handleFn = isDelete?api.deleteRule:(row.parStatus===0?api.saveRuleApply:api.deleteRuleApply);
                 this.showConfirmDialog(warningTxt,()=>{
-                    api.delKnowledgeRelation(params).then((res)=>{
+                    handleFn(params).then((res)=>{
                         if(res.data.code=='0'){
                             if(!this.searched){
                                 //未点确认时清空搜索条件
                                 this.clearFilter();
                             }
-                            if(item.isDeleted !== 'N'){       //恢复成功后跳转到筛选条件的首页
+                            if(isDelete){       //恢复成功后跳转到筛选条件的首页
                                 this.currentPage = 1;
                             } else {
-                                if (this.filter.isState!==''&&this.list.length === 1){
+                                if (this.filter.parStatus!==''&&this.list.length === 1){
                                     //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
                                     this.currentPage = this.currentPage===1?1:this.currentPage-1;
                                 }
@@ -315,10 +342,10 @@
             },
             clearFilter(){
                 this.filter={
-                    isState:'',
-                    startName:'',
-                    endName:'',
-                    type:'',
+                    parStatus:'',
+                    parConceptName:'',
+                    parDescription:'',
+                    parRuleType:'',
                 };
             },
             uploadClick(){

+ 100 - 50
src/components/knowledgeExtra/SubConditions.vue

@@ -2,77 +2,77 @@
     <div class="groups-cont">
         <el-form ref="form" 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'"-->
-            <el-form-item label="基础规则名称:" prop="name">
-                <el-input v-model.trim = "groupData.name"></el-input>
+            <el-form-item label="基础规则名称:" prop="subDescription">
+                <el-input v-model.trim = "groupData.subDescription"></el-input>
             </el-form-item>
-            <el-form-item label="基础规则类型:" prop="baseType">
-                <el-select v-model="groupData.baseType"
+            <el-form-item label="基础规则类型:" prop="subType">
+                <el-select v-model="groupData.subType"
                            placeholder="请选择"
                            size="small">
                     <el-option
-                            v-for="item in baseTypeList"
-                            :key="item.name"
+                            v-for="item in baseTypes"
+                            :key="item.id"
                             :label="item.name"
-                            :value="item.name">
+                            :value="item.type">
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item label="基础规则术语类型:" prop="baseTermType">
-                <el-select v-model="groupData.baseTermType"
+            <el-form-item label="基础规则术语类型:" prop="subConceptId">
+                <el-select v-model="groupData.subConceptId"
                            placeholder="请选择"
                            size="small">
                     <el-option
                             v-for="item in baseTermTypeList"
-                            :key="item.name"
+                            :key="item.id"
                             :label="item.name"
-                            :value="item.name">
+                            :value="item.code">
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item  class="addDepartFormItem" label="医学标准术语:" prop="term">
-                <el-input  @focus="focuInput" v-model.trim = "groupData.term" suffix-icon="el-icon-search"></el-input>
-                <ul class="itemList" v-show="conceptList.length>0">
+            <el-form-item  class="addDepartFormItem" label="医学标准术语:" prop="subLibName">
+                <el-input   @focus="inputFocus" @input="searchConcept" v-model.trim = "groupData.subLibName" suffix-icon="el-icon-search"></el-input>
+                <ul class="itemList" v-show="showList&&conceptList.length>0">
                     <li
                             v-for="item in conceptList"
-                            class="diagItem ellipsis"
+                            class="conceptItem ellipsis"
                             :title="item.conceptName"
-                            @click="selectDiag(item)"
+                            @click="selectConcept(item)"
                             :key="item.conceptId">
                         {{item.conceptNameType||item.conceptName}}
                     </li>
                 </ul>
             </el-form-item>
-            <el-form-item label="选择类型:" prop="type">
-                <el-select v-model="groupData.type"
+            <el-form-item v-if="groupData.subType===2" label="选择类型:" prop="dataType">
+                <el-select v-model="dataType"
                            placeholder="请选择"
                            size="small">
                     <el-option
-                            v-for="item in typeList"
-                            :key="item.name"
+                            v-for="item in dataTypes"
+                            :key="item.id"
                             :label="item.name"
-                            :value="item.name">
+                            :value="item.id">
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item label="最大值:" prop="max">
+            <el-form-item v-if="dataType==='1'" label="最大值:" prop="max">
                 <div class="select-item clearfix">
-                    <el-select v-model="groupData.max"
+                    <el-select v-model="groupData.subMaxOperator"
                                placeholder="请选择"
                                size="small">
                         <el-option
                                 v-for="item in operTypeList"
-                                :key="item.name"
+                                :key="item.id"
                                 :label="item.name"
-                                :value="item.name">
+                                :value="item.id">
                         </el-option>
                     </el-select>
-                    <el-input  type="text" placeholder="填写数值"/>
-                    <el-input  type="text" placeholder="填写单位"/>
+                    <el-input  type="text" v-model="groupData.subMaxValue" placeholder="填写数值"/>
+                    <el-input  type="text" v-model="groupData.subMaxUnit" placeholder="填写单位"/>
                 </div>
             </el-form-item>
-            <el-form-item label="最小值:" prop="min">
+            <el-form-item v-if="dataType==='1'" label="最小值:" prop="min">
                 <div class="select-item clearfix">
-                    <el-select v-model="groupData.max"
+                    <el-select v-model="groupData.subMinOperator"
                                placeholder="请选择"
                                size="small">
                         <el-option
@@ -82,15 +82,15 @@
                                 :value="item.name">
                         </el-option>
                     </el-select>
-                    <el-input  type="text" placeholder="填写数值"/>
-                    <el-input  type="text" placeholder="填写单位"/>
+                    <el-input  type="text" v-model="groupData.subMinValue" placeholder="填写数值"/>
+                    <el-input  type="text" v-model="groupData.subMinUnit" placeholder="填写单位"/>
                 </div>
             </el-form-item>
-            <el-form-item label="医学内容:" prop="content" class="discDesc">
-                <el-input type="textarea" :rows="3" placeholder="请输入医学内容" v-model="groupData.content" maxlength="121"></el-input>
+            <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>
-            <el-form-item label="正则表达式:" prop="regx" class="discDesc">
-                <el-input type="textarea" :rows="3" placeholder="请输入正则表达式" v-model="groupData.regx" maxlength="121"></el-input>
+            <el-form-item v-if="groupData.subType===6" label="正则表达式:" prop="regx" class="discDesc">
+                <el-input type="textarea" :rows="3" placeholder="请输入正则表达式" v-model="groupData.subEqValue" maxlength="121"></el-input>
             </el-form-item>
         </el-form>
         <div class="inner-oper">
@@ -100,24 +100,26 @@
     </div>
 </template>
 <script>
+    import api from '@api/knowledgeLib.js';
     export default {
         name:'subCondititons',
-        props:['groupData','ind','isLast'],
+        props:['groupData','ind','isLast','baseTypes'],
         data(){
             return {
-                baseTypeList:[],
                 baseTermTypeList:[],
                 typeList:[],
-                searchConcept:'',
+                showList:false,
+                dataType:'',
                 operTypeList:[{name:'>',key:1},
                     {name:'>=',key:2},
                     {name:'<',key:3},
                     {name:'<=',key:4},
                     {name:'=',key:5},
                 ],
+                dataTypes:[{id:'1',name:'数值类型'},{id:'2',name:'文本类型'}],
                 conceptList:[],
                 rules:{
-                    name:[{ required: true, message: '请选择基础规则名称',trigger: ['blur'] },{
+                    subDescription:[{ required: true, message: '请选择基础规则名称',trigger: ['blur'] },{
                         validator: (rule,value,callback)=>{
                             if(value.length>100){
                                 callback(new Error('规则名称不能超过100字'));
@@ -125,14 +127,13 @@
                                 callback();
                             }}, trigger: 'change'
                     }],
-                    baseType:[{ required: true, message: '请选择基础规则类型',trigger: ['blur'] }],
-                    baseTermType:[{ required: true, message: '请选择基础规则术语类型',trigger: ['blur'] }],
-                    term:[{ required: true, message: '请输入医学标准术语',trigger: ['blur'] }],
+                    subType:[{ required: true, message: '请选择基础规则类型',trigger: ['blur'] }],
+                    subConceptId:[{ required: true, message: '请选择基础规则术语类型',trigger: ['blur'] }],
+                    subLibName:[{ required: true, message: '请输入医学标准术语',trigger: ['blur'] }],
                     type:[{ required: true, message: '请选择类型',trigger: ['blur'] }],
                     max:[{ required: true, message: '请输入最大值',trigger: ['blur'] }],
                     min:[{ required: true, message: '请输入最小值',trigger: ['blur'] }],
-                    content:[{ required: true, message: '请输入医学内容',trigger: ['blur'] }],
-                    regx:[{ required: true, message: '请输入正则表达式',trigger: ['blur'] }],
+                    subEqValue:[{ required: true, message: '请输入医学内容',trigger: ['blur'] }],
                 },
             }
         },
@@ -142,9 +143,43 @@
                     this.$emit("changeVal",newVal,this.ind);
                 },
                 deep:true
+            },
+            'groupData.subType':function(val){
+                this.dataType='';
+                if(!val){
+                    this.baseTermTypeList = [];
+                    this.conceptList=[];
+                    return;
+                }
+                const obj = this.baseTypes.find((it)=>it.type===val);
+                this.baseTermTypeList = obj.subMenuList;
             }
         },
         methods:{
+            searchConcept(val){
+                console.log(val)
+                const param = {
+                    excludedConceptIds:[this.groupData.subType],
+                    libTypes:[this.groupData.subConceptId],
+                    name:val,
+                };
+                api.searchConcept(param).then((res) => {
+                    if (res.data.code == '0') {
+                        const data = res.data.data;
+                        this.conceptList = data;
+                    }
+                }).catch((error) => {
+                    console.log(error);
+                });
+            },
+            selectConcept(it){
+                this.groupData.subLibName=it.conceptName;
+                this.groupData.subConceptId = it.conceptId;
+                this.showList = false;
+            },
+            inputFocus(){
+                this.showList = !this.showList;
+            },
             addRule(){
                 this.$emit("addRule");
             },
@@ -157,12 +192,6 @@
                     this.$emit("delRule",this.ind);
                 });
 
-            },
-            focuInput(){
-
-            },
-            searchTerm(){
-
             },
             warning(msg,type){
                 this.$message({
@@ -185,6 +214,15 @@
 <style lang="less">
     .groups-cont{
         background: #fff;
+        .conceptItem{
+            padding: 0 10px;
+            cursor: pointer;
+            height: 32px;
+            line-height: 32px;
+            &:hover{
+                background: #ebedf1;
+            }
+        }
         .inner-oper{
             border-top:2px solid #F5F5F5;
             padding: 15px 0 15px 21px;
@@ -235,5 +273,17 @@
         .el-button--danger.is-plain{
             background: none;
         }
+        .itemList {
+            position: absolute;
+            // display: none;
+            background: #fff;
+            width: 188px;
+            max-height: 160px;
+            border: 1px solid #DCDFE6;
+            left: 0;
+            top: 37px;
+            z-index: 2;
+            overflow-y: auto;
+        }
     }
 </style>

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

@@ -4,6 +4,7 @@
                        :groupData="rules"
                        :isLast="rules.length===1"
                        :ind="i"
+                       :baseTypes="baseTypes"
                        @changeVal="handleInput"
                        @addRule="addRule"
                        @delRule="delRule"></SubConditions>
@@ -17,7 +18,7 @@
     import SubConditions from './SubConditions.vue';
     export default {
         name:'SubRulesGroup',
-        props:['data','inx','isLast'],
+        props:['data','inx','isLast','baseTypes'],
         data(){
             return {
             }
@@ -25,18 +26,19 @@
         methods:{
             handleInput(val,i){
                 this.data[i]=val;
-                console.log(this.data,val,i)
             },
             addRule(){
                 let temp={
-                    name:'',
-                    ruleType:'',
-                    termType:'',
-                    normTerm:'',
-                    type:'',
-                    max:'',
-                    min:'',
-                    text:''
+                    subDescription:'',
+                    parRuleType:'',
+                    subConceptId:'',
+                    subType:'',
+                    subMaxOperator:'',
+                    subMaxUnit:'',
+                    subMaxValue:'',
+                    subMinOperator:'',
+                    subMinUnit:'',
+                    subMinValue:''
                 };
                 this.data.push(temp);
             },
@@ -47,9 +49,7 @@
                 this.$emit("addGroup");
             },
             delGroup(){
-                this.showConfirmDialog("是否删除该组规则,可能对现有系统会造成影响",()=>{
-                    this.$emit("delGroup",this.inx);
-                });
+               this.$emit("delGroup",this.inx);
             },
             warning(msg,type){
                 this.$message({