zhouna 4 gadi atpakaļ
vecāks
revīzija
7d867ccaa5

+ 46 - 16
src/components/knowledgeExtra/AddNewRule.vue

@@ -20,7 +20,7 @@
                                     :value="item.id">
                             </el-option>
                         </el-select>
-                        <span class="tip-text">注:更改术语类型,将会清空已填写的规则内容~</span>
+                        <span class="tip-text">注:更改规则类型,将会清空已填写的规则内容~</span>
                     </el-form-item>
                     <el-form-item label="规则术语类型:" prop="parLenCode">
                         <el-select v-model="form.parLenCode"
@@ -36,7 +36,7 @@
                         <span class="tip-text">注:更改规则术语类型,将会清空已填写的规则内容~</span>
                     </el-form-item>
                     <el-form-item  class="addDepartFormItem" label="医学标准术语:" prop="parConceptId">
-                        <el-select clearable filterable remote :remote-method="searchConcept" v-model="form.parConceptId">
+                        <el-select clearable filterable remote :remote-method="searchConcept" v-model.trim="form.parConceptId">
                             <el-option
                                     v-for="item in conceptList"
                                     :key="item.conceptId"
@@ -45,10 +45,10 @@
                             </el-option>
                         </el-select>
                     </el-form-item>
-                    <!--<el-form-item label="有无子条件:" prop="parHasSub">
+                    <el-form-item v-if="showHasSub" label="有无子条件:" prop="parHasSub">
                         <el-select v-model="form.parHasSub"
                                    placeholder="请选择"
-                                   size="small">
+                                   size="small" @change="hasSubChange">
                             <el-option
                                     v-for="item in hasSub"
                                     :key="item.id"
@@ -56,13 +56,14 @@
                                     :value="item.id">
                             </el-option>
                         </el-select>
-                    </el-form-item>-->
+                    </el-form-item>
                     <el-form-item v-if="showMsg" label="附加信息:" prop="parMsg" class="parMsg">
-                        <el-input type="textarea" :rows="3" placeholder="请输入附加信息" v-model="form.parMsg"></el-input>
+                        <el-input type="textarea" :rows="3" placeholder="请输入附加信息" v-model.trim="form.parMsg"></el-input>
                     </el-form-item>
                     <el-form-item v-if="form.parHasSub===1" label="规则内容:" prop="remind" class="discDesc">
                         <SubRulesGroup v-for="(group,i) in subGroups"
                                        ref="groups"
+                                       :key="i"
                                        :data="group"
                                        :baseTypes="baseTypeList"
                                        :inx="i"
@@ -72,7 +73,7 @@
                                        @addGroup="addGroup"
                                        @delGroup="delGroup"></SubRulesGroup>
                     </el-form-item>
-                    <el-button class="disclButn" size="small" type="primary" @click="confirm">保存</el-button>
+                    <el-button class="disclButn" size="small" type="primary" @click="confirm">确定</el-button>
                 </el-form>
             </div>
         </div>
@@ -140,8 +141,8 @@
                     parHasSub:[{ required: true, message: '请选择有无子条件',trigger: ['change'] }],
                     parMsg:[{ required: true, message: '请输入附加信息',trigger: ['change'] },{
                         validator: (rule,value,callback)=>{
-                            if(value.length>300){
-                                callback(new Error('附加信息不能超过300字'));
+                            if(value.length>100){
+                                callback(new Error('附加信息不能超过100字'));
                             }else{
                                 callback();
                             }}, trigger: 'change'
@@ -181,9 +182,12 @@
                 this.subRuleMaxNum=obj.number;
             },
             'form.parConceptId':function(val){
-                if(this.checkFirstPlace) {
+                if(val&&this.checkFirstPlace&&this.conceptList) {
                     this.firstPlace = this.conceptList.find((it) => it.conceptId === val);
                     this.firstPlace['checkedType']=this.ruleTermCodeStr;
+                }else if(!val){
+                    this.setInitGroupData();
+                    this.firstPlace =null;
                 }else{
                     this.firstPlace =null;
                 }
@@ -201,12 +205,35 @@
             },
             showMsg:function(){
                 return this.ruleTermCodeStr.length>1&&this.msgDict.indexOf(this.ruleTermCodeStr)>-1;
+            },
+            showHasSub:function(){
+                return this.subDict.indexOf(this.ruleTermCodeStr)>-1;
             }
         },
         methods:{
+            hasSubChange(val){
+                if(val){
+                    this.subGroups = [[{
+                        subDescription:'',
+                        parRuleType:'',
+                        subConceptId:'',
+                        subType:'',
+                        subMaxOperator:'',
+                        subMaxUnit:'',
+                        subMaxValue:'',
+                        subMinOperator:'',
+                        subMinUnit:'',
+                        subMinValue:'',
+                        subEqValue:'',
+                        subLenCode:'',
+                        dataType:'',
+                    }]];
+                }
+            },
             setDict(){
                 this.dict = localStorage.getItem("zskDicts");
                 this.msgDict = localStorage.getItem("zskMsgDict");
+                this.subDict = localStorage.getItem("zskSubDict");
             },
             showConfirmDialog(msg,resolve){
                 this.$alert(msg, '提示', {
@@ -248,12 +275,14 @@
             ruleTypeChange(val){       //规则类型选中
                 this.form.parRuleType=val;
                 this.form.parLenCode='';
+                this.form.parMsg="";
                 const obj = this.ruleTypeList.find((it)=>it.id===val);//console.log(val)
                 this.ruleTermTypeList = obj.subMenuList;
                 this.setInitGroupData();
             },
             ruleTermChange(val){        //规则术语类型选中
                 this.form.parLenCode=val;
+                this.form.parMsg="";
                 const obj = this.ruleTermTypeList.find((it)=>it.code===val);
                 this.form.parLenName=obj.name;
                 this.baseTypeList = obj.subMenuList;
@@ -308,7 +337,7 @@
                         subLenCode:this.form.parLenCode,
                         subLenName: this.form.parLenName,
                         subLibName: this.form.parlibName,
-                        subType:2,
+                        subType:obj.subType,
                         dataType:'',
                         subMaxOperator:'',
                         subMaxUnit:'',
@@ -318,11 +347,12 @@
                         subMinValue:'',
                         subEqValue:'',
                     };
-                }console.log(temp)
+                }
                 this.subGroups.push([temp]);
             },
             delGroup(i){
-                this.subGroups.splice(i,1);
+                //this.subGroups.splice(i,1);
+                this.$set(this.subGroups,i,null);
             },
             saveRule(params){
                 api.saveRule(params).then((res)=>{
@@ -331,7 +361,7 @@
                             message:"操作成功",
                             type:'success'
                         });
-                        this.$router.push({name: 'ZskRuleManager'});
+                        this.$router.push({name: 'ZskRuleManager',params: Object.assign({}, this.$route.params, { currentPage: 1 })});
                     }else{
                         this.$message({
                             message:res.data.msg,
@@ -343,7 +373,7 @@
             formatGroups(){
                 let obj = [];
                 this.subGroups.map((item,i)=>{
-                    item.map((it)=>{
+                    item&&item.map((it)=>{
                         obj.push({...it,groupType:i});
                     })
                 });
@@ -383,7 +413,7 @@
                     _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})
+                        params = Object.assign({},_this.form,{parId:_this.isCopy?undefined:_this.parId,parStatus:_this.isCopy?1:_this.form.parStatus})
                     }
                     console.log(params)
                     _this.saveRule(params);

+ 16 - 14
src/components/knowledgeExtra/RuleManager.vue

@@ -92,17 +92,6 @@
                         {{scope.row.parHasSub === '0'?'无':'有'}}
                     </template>
                 </el-table-column>
-                <el-table-column
-                        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="状态">
                     <template slot-scope="scope">
@@ -118,13 +107,13 @@
                 </el-table-column>
                 <el-table-column
                         label="操作"
-                        width="180">
+                        width="180" fixed="right">
                     <template slot-scope="scope">
                         <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="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>
+                        <el-button type="text" size="small" :class="scope.row.parStatus === 0?'':'unvailable'" @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,1)">删除</el-button>
                     </template>
@@ -176,6 +165,11 @@
             }
         },
         created() {
+            const param = this.$route.params;
+            if(param.currentPage){
+                this.inCurrentPage = param.currentPage
+                this.filter = param.filter
+            }
             this.getTypeList();
             const that = this;
             //返回时避免参数未赋值就获取列表
@@ -209,6 +203,8 @@
                         //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
                         localStorage.setItem("zskDicts",arr.join(","));
                         localStorage.setItem("zskMsgDict",(data['21'].map((it)=>it.val)||[]).join(","));
+                        localStorage.setItem("zskNumDict",data['22'][0].val);
+                        localStorage.setItem("zskSubDict",data['23'][0].val);
                     }
                 }).catch((error) => {
                     console.log(error);
@@ -224,7 +220,7 @@
                     this.ruleTypeList = typeListData;
                     return;
                 }
-                api.getTypesList({}).then((res) => {
+                api.getTypesList({planCode:'rule'}).then((res) => {
                     if (res.data.code == '0') {
                         const data = res.data.data;
                         this.ruleTypeList = data;
@@ -433,4 +429,10 @@
     #upFile{
         display: none !important;
     }
+    .unvailable{
+        color: #FE7D3D;
+        &:hover{
+            color: #f19061;
+        }
+    }
 </style>

+ 97 - 41
src/components/knowledgeExtra/SubConditions.vue

@@ -33,7 +33,7 @@
                 </el-select>
             </el-form-item>
             <el-form-item  class="addDepartFormItem" label="医学标准术语:" prop="subConceptId">
-                <el-select clearable remote filterable :disabled="disabled" :remote-method="searchConcept" v-model="groupData.subConceptId">
+                <el-select clearable remote filterable :disabled="disabled" :remote-method="searchConcept" v-model.trim="groupData.subConceptId">
                     <el-option
                             v-for="item in conceptList"
                             :key="item.conceptId"
@@ -42,7 +42,7 @@
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item v-if="groupData.subType===2" label="选择类型:" prop="dataType">
+            <el-form-item v-if="groupData.subType===2&&showDataType" label="选择类型:" prop="dataType">
                 <el-select v-model="groupData.dataType"
                            placeholder="请选择"
                            size="small" @change="dataTypeChange">
@@ -56,7 +56,7 @@
             </el-form-item>
             <el-form-item class="min-margin" v-if="groupData.dataType==='1'" label="最大值:">
                 <div class="select-item clearfix">
-                    <el-col :span="4">
+                    <el-col :span="3">
                         <el-form-item prop="subMaxOperator">
                             <el-select v-model="groupData.subMaxOperator"
                                        placeholder="请选择"
@@ -70,21 +70,21 @@
                             </el-select>
                         </el-form-item>
                     </el-col>
-                    <el-col :span="4">
+                    <el-col :span="3">
                         <el-form-item prop="subMaxValue">
-                            <el-input-number controls-position="right" type="text" v-model="groupData.subMaxValue" placeholder="填写数值"/>
+                            <el-input type="text" v-model="groupData.subMaxValue" placeholder="填写数值"/>
                         </el-form-item>
                     </el-col>
-                    <el-col :span="4">
+                    <el-col :span="3">
                         <el-form-item prop="subMaxUnit">
-                            <el-input  type="text" v-model="groupData.subMaxUnit" placeholder="填写单位"/>
+                            <el-input  type="text" v-model.trim="groupData.subMaxUnit" placeholder="填写单位"/>
                         </el-form-item>
                     </el-col>
                 </div>
             </el-form-item>
             <el-form-item class="min-margin" v-if="groupData.dataType==='1'" label="最小值:">
                 <div class="select-item clearfix">
-                    <el-col :span="4">
+                    <el-col :span="3">
                         <el-form-item prop="subMinOperator">
                             <el-select v-model="groupData.subMinOperator"
                                        placeholder="请选择"
@@ -98,23 +98,23 @@
                             </el-select>
                         </el-form-item>
                     </el-col>
-                    <el-col :span="4">
-                        <el-form-item prop="subMaxValue">
-                            <el-input-number controls-position="right" type="text" v-model="groupData.subMinValue" placeholder="填写数值"/>
+                    <el-col :span="3">
+                        <el-form-item prop="subMinValue">
+                            <el-input type="text" v-model="groupData.subMinValue" placeholder="填写数值"/>
                         </el-form-item>
                     </el-col>
-                    <el-col :span="4">
+                    <el-col :span="3">
                         <el-form-item prop="subMinUnit">
-                            <el-input  type="text" v-model="groupData.subMinUnit" placeholder="填写单位"/>
+                            <el-input  type="text" v-model.trim="groupData.subMinUnit" placeholder="填写单位"/>
                         </el-form-item>
                     </el-col>
                 </div>
             </el-form-item>
-            <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 v-if="groupData.subType!==6&&groupData.dataType==='2'" label="医学内容:" prop="subEqValue" class="discDesc is-required">
+                <el-input type="textarea" rows="3" placeholder="请输入医学内容" v-model.trim="groupData.subEqValue"></el-input>
             </el-form-item>
-            <el-form-item v-if="groupData.subType===6" label="正则表达式:" prop="subEqValue" class="discDesc">
-                <el-input type="textarea" rows="3" placeholder="请输入正则表达式" v-model="groupData.subEqValue"></el-input>
+            <el-form-item v-if="groupData.subType===6" label="正则表达式:" prop="subEqValue" class="discDesc is-required">
+                <el-input type="textarea" rows="3" placeholder="请输入正则表达式" v-model.trim="groupData.subEqValue"></el-input>
             </el-form-item>
         </el-form>
         <div class="inner-oper" v-if="showAdd">
@@ -130,8 +130,9 @@
         props:['groupData','ind','isLast','baseTypes','firstPlace','disabled','showAdd'],
         data(){
             return {
-                baseTermTypeList:[],
+                //baseTermTypeList:[],
                 typeList:[],
+                numTypes:'',    //只有数值类型的类型id
                 operMaxList:[
                     {name:'<=',key:'<='},
                     {name:'<',key:'<'},
@@ -144,7 +145,7 @@
                 rules:{
                     subDescription:[{ required: true, message: '请输入基础规则名称',trigger: ['blur'] },{
                         validator: (rule,value,callback)=>{
-                            if(value.length>100){
+                            if(value&&value.length>100){
                                 callback(new Error('规则名称不能超过100字'));
                             }else{
                                 callback();
@@ -156,7 +157,9 @@
                     dataType:[{ required: true, message: '请选择类型',trigger: ['change'] }],
                     subMaxOperator:[{
                         validator: (rule,value,callback)=>{
-                            if((!value)&&this.groupData.subMinOperator===''){
+                            const {subMaxValue,subMinOperator,subMinValue}=this.groupData;
+                            const val=value+subMinOperator+subMinValue+subMaxValue;
+                            if(!val||(!value&&subMaxValue!=='')){
                                 callback(new Error('最大值和最小值至少完整填写一个,单位不必填'));
                             }else{
                                 callback();
@@ -164,13 +167,50 @@
                     }],
                     subMinOperator:[{
                         validator: (rule,value,callback)=>{
-                            if((!value)&&this.groupData.subMaxOperator===''){
+                            const {subMaxValue,subMaxOperator,subMinValue}=this.groupData;
+                            const val=value+subMaxOperator+subMinValue+subMaxValue;
+                            if(!val||(!value&&subMinValue!=='')){
+                                callback(new Error('最大值和最小值至少完整填写一个,单位不必填'));
+                            }else{
+                                callback();
+                            }}, trigger: 'blur'
+                    }],
+                    subMaxValue:[{
+                        validator: (rule,value,callback)=>{
+                            const {subMaxOperator,subMinOperator,subMinValue}=this.groupData;
+                            const val=value+subMaxOperator+subMinValue+subMinOperator;
+                            const isNum=/^(\-|\+)?\d+(\.\d+)?$/.test(value);
+                            if(!val||(value==''&&subMaxOperator)){
                                 callback(new Error('最大值和最小值至少完整填写一个,单位不必填'));
+                            }else if(value!==''&&!isNum){
+                                callback(new Error('只能输入数字'));
+                            }else{
+                                callback();
+                            }}, trigger: 'blur'
+                    }],
+                    subMinValue:[{
+                        validator: (rule,value,callback)=>{
+                            const {subMaxValue,subMinOperator,subMaxOperator}=this.groupData;
+                            const val=value+subMaxOperator+subMaxValue+subMinOperator;
+                            const isNum=/^(\-|\+)?\d+(\.\d+)?$/.test(value);
+                            if(!val||(value==''&&subMinOperator)){
+                                callback(new Error('最大值和最小值至少完整填写一个,单位不必填'));
+                            }else if(value!==''&&!isNum){
+                                callback(new Error('只能输入数字'));
+                            }else{
+                                callback();
+                            }}, trigger: 'blur'
+                    }],
+                    subEqValue:[{
+                        validator: (rule,value,callback)=>{
+                            if(value===''){
+                                callback(new Error('请输入'+this.textName));
+                            }else if(value.length>200){
+                                callback(new Error(this.textName+'不能超过200字'));
                             }else{
                                 callback();
                             }}, trigger: 'blur'
                     }],
-                    subEqValue:[{ required: true, message: '请输入'+this.groupData.subType===6?"正则表达式":"医学内容",trigger: ['blur'] }],
                 },
             }
         },
@@ -181,7 +221,7 @@
                 },
                 deep:true
             },
-            'baseTypes':{
+            /*'baseTypes':{
                 handler:function(val){
                     if(!this.groupData.subType){
                         this.baseTermTypeList =[];
@@ -191,15 +231,14 @@
                     this.baseTermTypeList = obj.subMenuList;
                 },
                 deep:true
-            },
+            },*/
             '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;
+                    if (this.ind!==0||!val) return;
+                    const dict = localStorage.getItem("zskDicts").match(new RegExp(val.checkedType+'-\\d+','g'))||[];
+                    const types = dict[0].split("-");
+                    this.groupData.subType = +types[2];
+                    this.groupData.subLenCode = types[1];
                     this.conceptList = [val];
                     this.groupData.subDescription = val.conceptName;
                     this.groupData.subConceptId = val.conceptId;
@@ -209,32 +248,44 @@
             }
         },
         created(){
+            this.numTypes = localStorage.getItem("zskNumDict");
             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}];
+        },
+        computed:{
+            baseTermTypeList:function(){
+                if(!this.baseTypes.length){
+                    return [];
+                }
+                const sub = this.baseTypes.find((it) => it.type === this.groupData.subType)||{};
+                return sub.subMenuList;
+            },
+            showDataType:function(){
+                return (this.numTypes+',').indexOf(this.groupData.subLenCode+',')===-1;
+            },
+            textName:function(){
+                return this.groupData.subType!==6&&this.groupData.dataType==='2'?'医学内容':'正则表达式';
             }
         },
         methods:{
             dataTypeChange(val){
-                this.groupData.subEqOperator=val==='2'?'=':undefined;
-                this.groupData.dataType=val;
+                this.groupData.subEqOperator=(val==='2'?'=':'');
                 this.clearNumText();
+                delete this.groupData.dataType;     //触发更新
+                this.$set(this.groupData,'dataType',val);
             },
             subTypeChange(val){        //基础规则类型修改
                 this.groupData.subLenCode='';
                 this.groupData.dataType='';
                 this.clearConcept();
                 this.clearNumText();
-                if(!val){
-                    this.baseTermTypeList =[];
-                    return;
-                }
-                const obj = this.baseTypes.find((it)=>it.type===val);
-                this.baseTermTypeList = obj.subMenuList;
             },
             subCodeChange(val){        //基础规则术语类型修改
                 this.groupData.subLenCode=val;
-                this.groupData.dataType='';
+                if((this.numTypes+',').indexOf(val+',')>-1){
+                    this.groupData.dataType='1';
+                }else{
+                    this.groupData.dataType='';
+                }
                 this.clearConcept();
                 this.clearNumText();
             },
@@ -250,6 +301,7 @@
                 this.groupData.subMinValue='';
                 this.groupData.subMinUnit='';
                 this.groupData.subEqValue='';
+                this.groupData.subEqOperator='';
             },
             searchConcept(val){
                 const param = {
@@ -380,6 +432,7 @@
         .el-form-item__error{
             top: auto;
             white-space: nowrap;
+            background: #fff;
         }
         .el-input-number{
             width: 95px;
@@ -389,5 +442,8 @@
             height: 15px;
             line-height: 16px;
         }
+        .el-col-3 {
+            width: 94px;
+        }
     }
 </style>

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

@@ -1,5 +1,5 @@
 <template>
-    <div class="sub-groups">
+    <div class="sub-groups" v-if="data">
         <SubConditions v-for="(rules,i) in data"
                        ref="group"
                        :groupData="rules"