浏览代码

知识库-规则维护-修改复制

zhouna 4 年之前
父节点
当前提交
5d755f25dd

+ 77 - 86
src/components/knowledgeExtra/AddNewRule.vue

@@ -11,7 +11,8 @@
                         <el-select v-model="form.parRuleType"
                                    placeholder="请选择"
                                    size="small"
-                                   @change="ruleTypeChange">
+                                   @change="ruleTypeChange"
+                                   >
                             <el-option
                                     v-for="item in ruleTypeList"
                                     :key="item.id"
@@ -20,8 +21,8 @@
                             </el-option>
                         </el-select>
                     </el-form-item>
-                    <el-form-item label="规则术语类型:" prop="parLibTypeId">
-                        <el-select v-model="form.parLibTypeId"
+                    <el-form-item label="规则术语类型:" prop="parLenCode">
+                        <el-select v-model="form.parLenCode"
                                    placeholder="请选择"
                                    size="small" @change="ruleTermChange">
                             <el-option
@@ -32,18 +33,15 @@
                             </el-option>
                         </el-select>
                     </el-form-item>
-                    <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
+                    <el-form-item  class="addDepartFormItem" label="医学标准术语:" prop="parConceptId">
+                        <el-select clearable filterable remote :remote-method="searchConcept" v-model="form.parConceptId">
+                            <el-option
                                     v-for="item in conceptList"
-                                    class="conceptItem ellipsis"
-                                    :title="item.conceptName"
-                                    @click="selectConcept(item)"
-                                    :key="item.conceptId">
-                                {{item.conceptNameType||item.conceptName}}
-                            </li>
-                        </ul>
+                                    :key="item.conceptId"
+                                    :label="item.conceptName"
+                                    :value="item.conceptId">
+                            </el-option>
+                        </el-select>
                     </el-form-item>
                     <el-form-item label="有无子条件:" prop="parHasSub">
                         <el-select v-model="form.parHasSub"
@@ -60,7 +58,7 @@
                     <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.parHasSub==='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"
@@ -84,13 +82,13 @@
             return{
                 labelPosition:'left',
                 isFirst:true,
+                isCopy:false,
                 title:'规则维护-添加规则',
                 ruleTermTypeList:[],
                 ruleTypeList:[],
                 conceptList:[],
                 baseTypeList:[],
                 conceptName:'',
-                showList:false,
                 subGroups:[[{
                     subDescription:'',
                     parRuleType:'',
@@ -107,9 +105,9 @@
                     parDescription:'',
                     parRuleType:'',
                     parConceptId:'',
-                    parConceptName:'',
-                    parHasSub:'',
-                    parLibTypeId:'',
+                    parlibName:'',
+                    parHasSub:undefined,
+                    parLenCode:'',
                     parMsg:'',
                     klRuleInfoSaveSub:[],
                 },
@@ -124,8 +122,8 @@
                             }}, trigger: 'change'
                     }],
                     parRuleType:[{ required: true, message: '请选择规则类型',trigger: ['blur'] }],
-                    parLibTypeId:[{ required: true, message: '请选择规则术语类型',trigger: ['blur'] }],
-                    parConceptName:[{ required: true, message: '请输入医学标准术语',trigger: ['blur'] }],
+                    parLenCode:[{ required: true, message: '请选择规则术语类型',trigger: ['blur'] }],
+                    parlibName:[{ required: true, message: '请输入医学标准术语',trigger: ['blur'] }],
                     parHasSub:[{ required: true, message: '请选择有无子条件',trigger: ['blur'] }],
                     parMsg:[{
                         validator: (rule,value,callback)=>{
@@ -136,29 +134,58 @@
                             }}, trigger: 'change'
                     }]
                 },
-                hasSub:[{name:'有',id:'1'},{name:'无',id:'0'},
+                hasSub:[{name:'有',id:1},{name:'无',id:0},
                 ]
             }
         },
         created(){
-            let info = this.$route.params.data;
+            this.getTypeList();
+            const param = this.$route.params;
+            let info = param.data;
             if(info){
                 this.id = info.id;
-                this.title = "规则维护-修改规则";
+                this.isCopy=param.copy;
+                this.title = "规则维护-"+(this.isCopy?'复制':'修改')+"规则";
                 this.form=Object.assign({},this.form,info);
-                // this.getList();
+                this.conceptList=[{conceptName:this.form.parlibName,conceptId:this.form.parConceptId}];
+                this.subGroups=this.formatGroupDatas(info.klRuleByIdSub);
+
+            }
+        },
+        watch:{
+            'form.parRuleType':function(val){
+                const obj = this.ruleTypeList.find((it)=>it.id===val);
+                this.ruleTermTypeList = obj.subMenuList;
+            },
+            'form.parLenCode':function(val){
+                const obj = this.ruleTermTypeList.find((it)=>it.code===val);
+                this.baseTypeList = obj.subMenuList;
             }
-            this.getTypeList();
         },
         components:{
             SubRulesGroup
         },
         methods:{
+            showConfirmDialog(msg,resolve){
+                this.$alert(msg, '提示', {
+                    confirmButtonText: '确定',
+                    type: 'warning'
+                }).then(() => {
+                    resolve();
+                }).catch(() => {});
+            },
+            formatGroupDatas(data){
+                let arr=[];
+                data.map((it)=>{
+                    if(!arr[it.groupType]){arr[it.groupType]=[];}
+                    arr[it.groupType].push(it);
+                })
+                return arr;
+            },
             searchConcept(val){
-                console.log(val)
                 const param = {
                     excludedConceptIds:[this.form.parRuleType],
-                    libTypes:[this.form.parLibTypeId],
+                    libType:this.form.parLenCode,
                     name:val,
                 };
                 api.searchConcept(param).then((res) => {
@@ -170,41 +197,26 @@
                     console.log(error);
                 });
             },
-            selectConcept(it){
-                this.form.parConceptName=it.conceptName;
-                this.form.parConceptId = it.conceptId;
-                this.showList = false;
-            },
-            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();
+            ruleTypeChange(val){       //规则类型选中
+                //this.showConfirmDialog('确定要修改规则类型吗?修改后规则内容将被清空',function(){
+                    this.form.parRuleType=val;
+                    this.form.parLenCode='';
+                    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();
+                //this.showConfirmDialog('确定要修改规则术语类型吗?修改后规则内容将被清空',function(){
+                    this.form.parLenCode=val;
+                    const obj = this.ruleTermTypeList.find((it)=>it.code===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);
-                });
+              const typeListData = JSON.parse(localStorage.getItem("zskTypesList"));
+              this.ruleTypeList = typeListData;
             },
             setInitGroupData(){
               this.subGroups = [[{
@@ -219,7 +231,7 @@
                   subMinUnit:'',
                   subMinValue:''
               }]];
-              this.form.parConceptName='';//医学标准术语清空
+              this.form.parlibName='';//医学标准术语清空
               this.conceptList=[];  //下拉列表清空
             },
             getDetail(){
@@ -275,33 +287,12 @@
             confirm(){
                 this.$refs['form'].validate((valid) => {
                     if (valid) {
-                        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:"修改成功",
-                                        type:'success'
-                                    });
-                                    //返回带搜索条件的首页
-                                    this.$router.push({
-                                        name: 'VersionInfo',
-                                        params: Object.assign({}, this.$route.params, {currentPage: 1})
-                                    });
-                                }else{
-                                    this.$message({
-                                        message:res.data.msg,
-                                        type:'warning'
-                                    });
-                                }
-                            })*/
-                        }else{//添加
-                            //const params = Object.assign({},this.form);
-                            this.saveRule(this.form)
-                            //console.log(params)
+                        this.form.klRuleInfoSaveSub = this.form.parHasSub?this.formatGroups():undefined;
+                        let params = this.form;
+                        if(this.parId){//修改/复制
+                            params = Object.assign({},this.form,{id:this.isCopy?undefined:this.parId})
                         }
-                        //this.saveRule(params);
+                        this.saveRule(params);
                     } else {
                         return false;
                     }

+ 10 - 10
src/components/knowledgeExtra/RuleManager.vue

@@ -103,9 +103,9 @@
                         label="操作"
                         width="180">
                     <template slot-scope="scope">
-                        <el-button type="text" size="small" @click="editData(scope.row.id)">修改</el-button>
+                        <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
                         <span style="margin:0 3px;">|</span>
-                        <el-button type="text" size="small" @click="copyData(scope.row)">复制</el-button>
+                        <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
                         <span style="margin:0 3px;">|</span>
                         <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>
@@ -183,7 +183,7 @@
         },
         methods: {
             getTypeList(){
-                const typeListData = localStorage.getItem("zskTypesList");
+                const typeListData = JSON.parse(localStorage.getItem("zskTypesList"));
                 if(typeListData){
                     this.ruleTypeList = typeListData;
                     return;
@@ -192,6 +192,7 @@
                     if (res.data.code == '0') {
                         const data = res.data.data;
                         this.ruleTypeList = data;
+                        localStorage.setItem("zskTypesList",JSON.stringify(data));
                     }
                 }).catch((error) => {
                     console.log(error);
@@ -242,9 +243,11 @@
                             this.currentPage=this.inCurrentPage;
                             this.inCurrentPage = undefined;
                         }
+                    }else{
+                        this.warning(res.data.msg||'获取列表数据失败');
                     }
                 }).catch((error) => {
-                    loading.close()
+                    loading.close();
                     console.log(error);
                 });
             },
@@ -289,10 +292,7 @@
                     resolve();
                 }).catch(() => {});
             },
-            copyData(){
-
-            },
-            editData(id){
+            editData(id,isCopy){
                 const pam = this.searched ? {
                     currentPage: this.currentPage,
                     pageSize:this.pageSize,
@@ -302,7 +302,7 @@
                 api.ruleDetail({id}).then((res) => {
                     if (res.data.code == '0') {
                         const data = res.data.data;
-                        this.$router.push({name:'AddZskRule',params:{...pam,data}});
+                        this.$router.push({name:'AddZskRule',params:{...pam,data,copy:isCopy}});
                     }
                 }).catch((error) => {
                     this.warning('获取详情失败,请重试')
@@ -310,7 +310,7 @@
             },
             showDelDialog(row,isDelete){
                 const params = {
-                    parId:row.parId
+                    id:row.parId
                 };
                 const txt=row.parStatus===0?'重新启用':'禁用';
                 const warningTxt = isDelete?'是否删除该关系?可能对现有系统造成影响':'是否'+txt+'该条数据?';

+ 107 - 62
src/components/knowledgeExtra/SubConditions.vue

@@ -8,7 +8,8 @@
             <el-form-item label="基础规则类型:" prop="subType">
                 <el-select v-model="groupData.subType"
                            placeholder="请选择"
-                           size="small">
+                           size="small"
+                           @change="subTypeChange">
                     <el-option
                             v-for="item in baseTypes"
                             :key="item.id"
@@ -17,8 +18,8 @@
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item label="基础规则术语类型:" prop="subConceptId">
-                <el-select v-model="groupData.subConceptId"
+            <el-form-item label="基础规则术语类型:" prop="subLenCode">
+                <el-select v-model="groupData.subLenCode"
                            placeholder="请选择"
                            size="small">
                     <el-option
@@ -29,18 +30,15 @@
                     </el-option>
                 </el-select>
             </el-form-item>
-            <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
+            <el-form-item  class="addDepartFormItem" label="医学标准术语:" prop="subConceptId">
+                <el-select clearable remote filterable :remote-method="searchConcept" v-model="groupData.subConceptId">
+                    <el-option
                             v-for="item in conceptList"
-                            class="conceptItem ellipsis"
-                            :title="item.conceptName"
-                            @click="selectConcept(item)"
-                            :key="item.conceptId">
-                        {{item.conceptNameType||item.conceptName}}
-                    </li>
-                </ul>
+                            :key="item.conceptId"
+                            :label="item.conceptName"
+                            :value="item.conceptId">
+                    </el-option>
+                </el-select>
             </el-form-item>
             <el-form-item v-if="groupData.subType===2" label="选择类型:" prop="dataType">
                 <el-select v-model="dataType"
@@ -54,36 +52,60 @@
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item v-if="dataType==='1'" label="最大值:" prop="max">
+            <el-form-item class="min-margin" v-if="dataType==='1'" label="最大值:" required>
                 <div class="select-item clearfix">
-                    <el-select v-model="groupData.subMaxOperator"
-                               placeholder="请选择"
-                               size="small">
-                        <el-option
-                                v-for="item in operTypeList"
-                                :key="item.id"
-                                :label="item.name"
-                                :value="item.id">
-                        </el-option>
-                    </el-select>
-                    <el-input  type="text" v-model="groupData.subMaxValue" placeholder="填写数值"/>
-                    <el-input  type="text" v-model="groupData.subMaxUnit" placeholder="填写单位"/>
+                    <el-col :span="4">
+                        <el-form-item prop="subMaxOperator">
+                            <el-select v-model="groupData.subMaxOperator"
+                                       placeholder="请选择"
+                                       size="small">
+                                <el-option
+                                        v-for="item in operTypeList"
+                                        :key="item.key"
+                                        :label="item.name"
+                                        :value="item.key">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="4">
+                        <el-form-item prop="subMaxValue">
+                            <el-input  type="text" v-model="groupData.subMaxValue" placeholder="填写数值"/>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="4">
+                        <el-form-item prop="subMaxUnit">
+                            <el-input  type="text" v-model="groupData.subMaxUnit" placeholder="填写单位"/>
+                        </el-form-item>
+                    </el-col>
                 </div>
             </el-form-item>
-            <el-form-item v-if="dataType==='1'" label="最小值:" prop="min">
+            <el-form-item class="min-margin" v-if="dataType==='1'" label="最小值:" required>
                 <div class="select-item clearfix">
-                    <el-select v-model="groupData.subMinOperator"
-                               placeholder="请选择"
-                               size="small">
-                        <el-option
-                                v-for="item in operTypeList"
-                                :key="item.name"
-                                :label="item.name"
-                                :value="item.name">
-                        </el-option>
-                    </el-select>
-                    <el-input  type="text" v-model="groupData.subMinValue" placeholder="填写数值"/>
-                    <el-input  type="text" v-model="groupData.subMinUnit" placeholder="填写单位"/>
+                    <el-col :span="4">
+                        <el-form-item prop="subMinOperator">
+                            <el-select v-model="groupData.subMinOperator"
+                                       placeholder="请选择"
+                                       size="small">
+                                <el-option
+                                        v-for="item in operTypeList"
+                                        :key="item.name"
+                                        :label="item.name"
+                                        :value="item.name">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="4">
+                        <el-form-item prop="subMaxValue">
+                            <el-input  type="text" v-model="groupData.subMinValue" placeholder="填写数值"/>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="4">
+                        <el-form-item prop="subMinUnit">
+                            <el-input  type="text" v-model="groupData.subMinUnit" placeholder="填写单位"/>
+                        </el-form-item>
+                    </el-col>
                 </div>
             </el-form-item>
             <el-form-item v-if="dataType==='2'" label="医学内容:" prop="subEqValue" class="discDesc">
@@ -108,7 +130,6 @@
             return {
                 baseTermTypeList:[],
                 typeList:[],
-                showList:false,
                 dataType:'',
                 operTypeList:[{name:'>',key:1},
                     {name:'>=',key:2},
@@ -128,39 +149,62 @@
                             }}, trigger: 'change'
                     }],
                     subType:[{ required: true, message: '请选择基础规则类型',trigger: ['blur'] }],
-                    subConceptId:[{ required: true, message: '请选择基础规则术语类型',trigger: ['blur'] }],
+                    subLenCode:[{ 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'] }],
+                    subMaxOperator:[{ required: true, message: '请选择最大值操作符号',trigger: ['blur'] }],
+                    subMaxValue:[{ required: true, message: '请输入最大值',trigger: ['blur'] }],
+                    subMaxUnit:[{ required: true, message: '请输入最大值单位',trigger: ['blur'] }],
+                    subMinOperator:[{ required: true, message: '请选择最小值操作符号',trigger: ['blur'] }],
+                    subMinValue:[{ required: true, message: '请输入最小值',trigger: ['blur'] }],
+                    subMinUnit:[{ required: true, message: '请输入最小值单位',trigger: ['blur'] }],
                     subEqValue:[{ required: true, message: '请输入医学内容',trigger: ['blur'] }],
                 },
             }
         },
         watch:{
             'groupData':{
-                handler:function(val,newVal){
-                    this.$emit("changeVal",newVal,this.ind);
+                handler:function(val){
+                    this.$emit("changeVal",val,this.ind);
                 },
                 deep:true
             },
-            'groupData.subType':function(val){
+            'baseTypes':{
+                handler:function(){
+                    const obj = this.baseTypes.find((it)=>it.type===this.groupData.subType);
+                    this.baseTermTypeList = obj.subMenuList;
+                },
+                deep:true
+            }
+        },
+        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:{
+            selectedConcept(val,f){
+                this.groupData.subConceptId=val;
+                //this.groupData.subLibName='333';
+                console.log(val)
+            },
+            subTypeChange(val){
                 this.dataType='';
+                this.groupData.subLibName='';
                 if(!val){
-                    this.baseTermTypeList = [];
-                    this.conceptList=[];
+                    this.baseTermTypeList =[];
                     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],
+                    libType:this.groupData.subLenCode,
                     name:val,
                 };
                 api.searchConcept(param).then((res) => {
@@ -172,14 +216,6 @@
                     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");
             },
@@ -285,5 +321,14 @@
             z-index: 2;
             overflow-y: auto;
         }
+        .el-form-item{
+            margin-bottom: 22px;
+            &.min-margin{
+                margin-bottom: 0;
+            }
+        }
+        .el-form-item__error{
+            top: auto;
+        }
     }
 </style>

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

@@ -9,7 +9,7 @@
                        @addRule="addRule"
                        @delRule="delRule"></SubConditions>
         <div class="group-oper">
-            <el-button :class="isLast?'disable':''" size="small" @click="addGroup">+新增分组</el-button>
+            <el-button size="small" @click="addGroup">+新增分组</el-button>
             <el-button :class="isLast?'disable':''" size="small" type="danger" plain @click="delGroup">-删除分组</el-button>
         </div>
     </div>
@@ -30,15 +30,18 @@
             addRule(){
                 let temp={
                     subDescription:'',
-                    parRuleType:'',
                     subConceptId:'',
                     subType:'',
+                    subLenName:'',
+                    subLenCode:'',
+                    subLibName:'',
                     subMaxOperator:'',
                     subMaxUnit:'',
                     subMaxValue:'',
                     subMinOperator:'',
                     subMinUnit:'',
-                    subMinValue:''
+                    subMinValue:'',
+                    subEqValue:'',
                 };
                 this.data.push(temp);
             },