浏览代码

Merge remote-tracking branch 'origin/knowledgePlat' into test

zhouna 4 年之前
父节点
当前提交
478aa4b586

+ 42 - 23
src/components/knowledgeExtra/AddNewRule.vue

@@ -118,6 +118,7 @@
                     parRuleType:'',
                     parConceptId:'',
                     parlibName:'',
+                    parLenName:'',
                     parHasSub:undefined,
                     parLenCode:'',
                     parMsg:'',
@@ -152,7 +153,7 @@
         },
         created(){
             this.getTypeList();
-            this.getDict();
+            this.setDict();
             const param = this.$route.params;
             let info = param.data;
             if(info){
@@ -177,7 +178,7 @@
                 }
                 const obj = this.ruleTermTypeList.find((it)=>it.code===val);
                 this.baseTypeList = obj.subMenuList;
-
+                this.subRuleMaxNum=obj.number;
             },
             'form.parConceptId':function(val){
                 if(this.checkFirstPlace) {
@@ -203,18 +204,9 @@
             }
         },
         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);
-                });
+            setDict(){
+                this.dict = localStorage.getItem("zskDicts");
+                this.msgDict = localStorage.getItem("zskMsgDict");
             },
             showConfirmDialog(msg,resolve){
                 this.$alert(msg, '提示', {
@@ -228,13 +220,14 @@
                 let arr=[];
                 data.map((it)=>{
                     if(!arr[it.groupType]){arr[it.groupType]=[];}
-                    if(it.subMaxOperator){
+                    if(it.subMaxOperator||it.subMinOperator){
                         it.dataType='1';
                     }else if(it.subEqValue){
                         it.dataType='2';
                     }
                     arr[it.groupType].push(it);
-                })
+                });
+                arr = arr.filter((it)=>{if(it)return it});
                 return arr;
             },
             searchConcept(val){
@@ -262,6 +255,7 @@
             ruleTermChange(val){        //规则术语类型选中
                 this.form.parLenCode=val;
                 const obj = this.ruleTermTypeList.find((it)=>it.code===val);
+                this.form.parLenName=obj.name;
                 this.baseTypeList = obj.subMenuList;
                 this.subRuleMaxNum = obj.number;
                 this.setInitGroupData();
@@ -291,11 +285,12 @@
                 this.conceptList=[];  //下拉列表清空
             },
             addGroup(){
-                this.subGroups.push([{
+                let temp = {
                     subDescription:'',
-                    parRuleType:'',
                     subConceptId:'',
                     subType:'',
+                    subLenCode:'',
+                    dataType:'',
                     subMaxOperator:'',
                     subMaxUnit:'',
                     subMaxValue:'',
@@ -303,9 +298,28 @@
                     subMinUnit:'',
                     subMinValue:'',
                     subEqValue:'',
-                    subLenCode:'',
-                    dataType:'',
-                }]);
+                };
+                if(this.checkFirstPlace){
+                    const obj=this.subGroups[0][0];
+                    temp = {
+                        subDescription:obj.subConceptName,
+                        subConceptId:obj.subConceptId,
+                        subConceptName:obj.subConceptName,
+                        subLenCode:this.form.parLenCode,
+                        subLenName: this.form.parLenName,
+                        subLibName: this.form.parlibName,
+                        subType:2,
+                        dataType:'',
+                        subMaxOperator:'',
+                        subMaxUnit:'',
+                        subMaxValue:'',
+                        subMinOperator:'',
+                        subMinUnit:'',
+                        subMinValue:'',
+                        subEqValue:'',
+                    };
+                }console.log(temp)
+                this.subGroups.push([temp]);
             },
             delGroup(i){
                 this.subGroups.splice(i,1);
@@ -330,7 +344,7 @@
                 let obj = [];
                 this.subGroups.map((item,i)=>{
                     item.map((it)=>{
-                        obj.push({groupType:i,...it});
+                        obj.push({...it,groupType:i});
                     })
                 });
                 return obj
@@ -339,6 +353,10 @@
                 this.$refs['form'].validate((valid) => {
                     if (valid) {
                         const groupsRef = this.$refs['groups'];
+                        if(!groupsRef||groupsRef.length===0){
+                            callBack();
+                            return;
+                        }
                         let groupRef=null,goOn=true;
                         for(let i=0;i<groupsRef.length;i++){
                             groupRef=groupsRef[i].$refs['group'];
@@ -361,12 +379,13 @@
             confirm(){
                 const _this=this;
                 this.validateForms(function(){
-                    _this.form.klRuleByIdSub=undefined;
+                    delete _this.form.klRuleByIdSub;
                     _this.form.klRuleInfoSaveSub = _this.form.parHasSub?_this.formatGroups():undefined;
                     let params = _this.form;
                     if(_this.parId){//修改/复制
                         params = Object.assign({},_this.form,{parId:_this.isCopy?undefined:_this.parId})
                     }
+                    console.log(params)
                     _this.saveRule(params);
                 });
             },

+ 38 - 9
src/components/knowledgeExtra/RuleManager.vue

@@ -3,7 +3,7 @@
         <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.parDescription" placeholder="输入规则名称"></el-input>
+                    <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
                 </el-form-item>
                 <el-form-item label="规则类型:">
                     <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
@@ -15,8 +15,8 @@
                         </el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item label="术语名称:">
-                    <el-input size="mini" v-model="filter.parConceptName" placeholder="输入术语名称"></el-input>
+                <el-form-item label="医学标准术语:">
+                    <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语"  clearable></el-input>
                 </el-form-item>
                 <el-form-item label="状态:">
                     <el-select v-model="filter.parStatus" clearable placeholder="请选择" size="mini">
@@ -53,11 +53,17 @@
                         prop="parDescription"
                         label="规则名称"
                         width="160">
+                    <template slot-scope="scope">
+                        <el-tooltip v-if="scope.row.parDescription.length>8" class="item" effect="dark" :content="scope.row.parDescription" placement="top">
+                            <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+                        </el-tooltip>
+                        <span v-if="scope.row.parDescription.length<9">{{scope.row.parDescription}}</span>
+                    </template>
                 </el-table-column>
                 <el-table-column
                         prop="parRuleType"
                         label="规则类型"
-                        width="100">
+                        width="150">
                     <template slot-scope="scope">
                         {{statusTrans(scope.row.parRuleType)}}
                     </template>
@@ -66,11 +72,17 @@
                         prop="parConceptName"
                         label="医学标准术语"
                         width="160">
+                    <template slot-scope="scope">
+                        <el-tooltip v-if="scope.row.parConceptName.length>8" class="item" effect="dark" :content="scope.row.parConceptName" placement="top">
+                            <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+                        </el-tooltip>
+                        <span v-if="scope.row.parConceptName.length<9">{{scope.row.parConceptName}}</span>
+                    </template>
                 </el-table-column>
                 <el-table-column
                         prop="parLibTypeName"
                         label="术语类型"
-                        width="130">
+                        width="150">
                 </el-table-column>
                 <el-table-column
                         prop="parHasSub"
@@ -84,6 +96,12 @@
                         prop="parMsg"
                         label="附加信息"
                         width="160">
+                    <template slot-scope="scope">
+                        <el-tooltip v-if="scope.row.parMsg.length>8" class="item" effect="dark" :content="scope.row.parMsg" placement="top">
+                            <span>{{scope.row.parMsg.slice(0,8)+'...'}}</span>
+                        </el-tooltip>
+                        <span v-if="scope.row.parMsg.length<9">{{scope.row.parMsg}}</span>
+                    </template>
                 </el-table-column>
                 <el-table-column
                         label="状态">
@@ -93,10 +111,6 @@
                           </span>
                     </template>
                 </el-table-column>
-                <el-table-column
-                        prop="modifier"
-                        label="操作人">
-                </el-table-column>
                 <el-table-column
                         prop="gmtModified"
                         label="操作时间"
@@ -168,6 +182,7 @@
             setTimeout(function(){
                 that.getDataList();
             });
+            this.getDict();
         },
         watch: {
             'filter': {
@@ -185,6 +200,20 @@
             })
         },
         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(","));
+                        localStorage.setItem("zskMsgDict",(data['21'].map((it)=>it.val)||[]).join(","));
+                    }
+                }).catch((error) => {
+                    console.log(error);
+                });
+            },
             statusTrans(type){
                 const obj = this.ruleTypeList.find((it)=>it.type===type);
                 return obj&&obj.name;

+ 56 - 34
src/components/knowledgeExtra/SubConditions.vue

@@ -54,15 +54,15 @@
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item class="min-margin" v-if="groupData.dataType==='1'" label="最大值:" required>
+            <el-form-item class="min-margin" v-if="groupData.dataType==='1'" label="最大值:">
                 <div class="select-item clearfix">
                     <el-col :span="4">
                         <el-form-item prop="subMaxOperator">
                             <el-select v-model="groupData.subMaxOperator"
                                        placeholder="请选择"
-                                       size="small">
+                                       size="small" clearable>
                                 <el-option
-                                        v-for="item in operTypeList"
+                                        v-for="item in operMaxList"
                                         :key="item.key"
                                         :label="item.name"
                                         :value="item.key">
@@ -82,15 +82,15 @@
                     </el-col>
                 </div>
             </el-form-item>
-            <el-form-item class="min-margin" v-if="groupData.dataType==='1'" label="最小值:" required>
+            <el-form-item class="min-margin" v-if="groupData.dataType==='1'" label="最小值:">
                 <div class="select-item clearfix">
                     <el-col :span="4">
                         <el-form-item prop="subMinOperator">
                             <el-select v-model="groupData.subMinOperator"
                                        placeholder="请选择"
-                                       size="small">
+                                       size="small" clearable>
                                 <el-option
-                                        v-for="item in operTypeList"
+                                        v-for="item in operMinList"
                                         :key="item.name"
                                         :label="item.name"
                                         :value="item.name">
@@ -110,7 +110,7 @@
                     </el-col>
                 </div>
             </el-form-item>
-            <el-form-item v-if="groupData.dataType==='2'" label="医学内容:" prop="subEqValue" class="discDesc">
+            <el-form-item v-if="groupData.subType!==6&&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">
@@ -132,16 +132,17 @@
             return {
                 baseTermTypeList:[],
                 typeList:[],
-                operTypeList:[{name:'>',key:'>'},
-                    {name:'>=',key:'>='},
-                    {name:'<',key:'<'},
+                operMaxList:[
                     {name:'<=',key:'<='},
-                    {name:'=',key:'='},
+                    {name:'<',key:'<'},
+                ],
+                operMinList:[{name:'>',key:'>'},
+                    {name:'>=',key:'>='},
                 ],
                 dataTypes:[{id:'1',name:'数值类型'},{id:'2',name:'文本类型'}],
                 conceptList:[],
                 rules:{
-                    subDescription:[{ required: true, message: '请选择基础规则名称',trigger: ['blur'] },{
+                    subDescription:[{ required: true, message: '请输入基础规则名称',trigger: ['blur'] },{
                         validator: (rule,value,callback)=>{
                             if(value.length>100){
                                 callback(new Error('规则名称不能超过100字'));
@@ -153,13 +154,23 @@
                     subLenCode:[{ required: true, message: '请选择基础规则术语类型',trigger: ['change'] }],
                     subConceptId:[{ required: true, message: '请输入医学标准术语',trigger: ['blur'] }],
                     dataType:[{ required: true, message: '请选择类型',trigger: ['change'] }],
-                    subMaxOperator:[{ required: true, message: '请选择最大值操作符',trigger: ['change'] }],
-                    subMaxValue:[{ required: true, message: '请输入最大值',trigger: ['blur'] }],
-                    subMaxUnit:[{ required: true, message: '请输入最大值单位',trigger: ['blur'] }],
-                    subMinOperator:[{ required: true, message: '请选择最小值操作符',trigger: ['change'] }],
-                    subMinValue:[{ required: true, message: '请输入最小值',trigger: ['blur'] }],
-                    subMinUnit:[{ required: true, message: '请输入最小值单位',trigger: ['blur'] }],
-                    subEqValue:[{ required: true, message: '请输入医学内容',trigger: ['blur'] }],
+                    subMaxOperator:[{
+                        validator: (rule,value,callback)=>{
+                            if((!value)&&this.groupData.subMinOperator===''){
+                                callback(new Error('最大值和最小值至少完整填写一个,单位不必填'));
+                            }else{
+                                callback();
+                            }}, trigger: 'blur'
+                    }],
+                    subMinOperator:[{
+                        validator: (rule,value,callback)=>{
+                            if((!value)&&this.groupData.subMaxOperator===''){
+                                callback(new Error('最大值和最小值至少完整填写一个,单位不必填'));
+                            }else{
+                                callback();
+                            }}, trigger: 'blur'
+                    }],
+                    subEqValue:[{ required: true, message: '请输入'+this.groupData.subType===6?"正则表达式":"医学内容",trigger: ['blur'] }],
                 },
             }
         },
@@ -171,38 +182,45 @@
                 deep:true
             },
             'baseTypes':{
-                handler:function(){
+                handler:function(val){
                     if(!this.groupData.subType){
                         this.baseTermTypeList =[];
                         return;
                     }
-                    const obj = this.baseTypes.find((it)=>it.type===this.groupData.subType);
+                    const obj = val.find((it)=>it.type===this.groupData.subType);
                     this.baseTermTypeList = obj.subMenuList;
                 },
                 deep:true
             },
-            'firstPlace':function(val){
-                if(!val)return;
-                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.ruleType===+types[0]).code;
-                this.conceptList=[val];
-                this.groupData.subDescription=val.conceptName;
-                this.groupData.subConceptId = val.conceptId;
-                this.groupData.subConceptName = val.conceptName;
+            'firstPlace':{
+                handler:function(val) {
+                    if (!val) return;
+                    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.ruleType === +types[0]).code;
+                    this.conceptList = [val];
+                    this.groupData.subDescription = val.conceptName;
+                    this.groupData.subConceptId = val.conceptId;
+                    this.groupData.subConceptName = val.conceptName;
+                },
+                deep:true
             }
         },
         created(){
-            this.conceptList=[{conceptName:this.groupData.subLibName,conceptId:this.groupData.subConceptId}];
+            this.conceptList=[{conceptName:this.groupData.subLibName||this.groupData.subConceptName,conceptId:this.groupData.subConceptId}];
+            if(this.groupData.subLenCode){
+                this.baseTermTypeList=[{name:this.groupData.subLenName,code:this.groupData.subLenCode}];
+            }
         },
         methods:{
             dataTypeChange(val){
+                this.groupData.subEqOperator=val==='2'?'=':undefined;
                 this.groupData.dataType=val;
                 this.clearNumText();
             },
-            subTypeChange(val){         //基础规则类型修改
+            subTypeChange(val){        //基础规则类型修改
                 this.groupData.subLenCode='';
                 this.groupData.dataType='';
                 this.clearConcept();
@@ -338,6 +356,9 @@
             line-height: 32px;
             height: 32px;
         }
+        .el-button--danger.is-plain{
+            background: none;
+        }
         .itemList {
             position: absolute;
             // display: none;
@@ -358,6 +379,7 @@
         }
         .el-form-item__error{
             top: auto;
+            white-space: nowrap;
         }
         .el-input-number{
             width: 95px;

+ 5 - 2
src/components/knowledgeExtra/SubRulesGroup.vue

@@ -29,7 +29,7 @@
         },
         computed:{
             'disable':function(){
-                return Object.keys(this.firstPlace||{}).length>0&&this.inx===0;
+                return Object.keys(this.firstPlace||{}).length>0;
             }
         },
         methods:{
@@ -102,9 +102,12 @@
         border-top: 4px solid #F5F5F5;
         background: #fff;
     }
+    .el-button--danger.is-plain:focus, .el-button--danger.is-plain:hover{
+        color: #fbc4c4;
+        border-color:#fbc4c4;
+    }
     .el-button--danger.is-plain{
         background: none;
-        color: #F56C6C;
         &.is-disabled{
             color: #f9a7a7;
             background-color: #fef0f0;