浏览代码

增加标签组

zhangxc 6 年之前
父节点
当前提交
e1c0cabd86

+ 12 - 0
src/api/utils.js

@@ -93,6 +93,7 @@ export default {
         "formPosition": 1,          // 填写单显示位置(0:左, 1:上)
         "exclusionType": 1,         //互斥:1
         "text": "",                  //如果有文本内容,上面的值都置空
+        "symptomType": 0,         //0:默认值 1:主症状特有 2:伴随症状特有
       }
       let sonQuestionMap = {     //目前只在既往史中用到,同层数据置空
           "id": "",
@@ -128,8 +129,19 @@ export default {
         }
         mapping.sonQuestion = tmpData[0];    //{sonQuestion:18}
         tmpArr.push(mapping)
+      }else if (type == 4) { //横铺展开(如咳嗽)
+        mapping.formPosition = 0;
+        mapping.exclusionType = 0;
+        mapping.symptomType = dataArr[i].symptomType
+        if(dataArr[i].text) {
+          mapping.text = dataArr[i].text
+        } else {
+          mapping.sonQuestion = dataArr[i].id
+        }
+        tmpArr.push(mapping)
       }
     }
+    console.log('tmpArr',tmpArr)
     return tmpArr;
   }
 }

+ 305 - 0
src/components/icss/BloodPressTagGroup.vue

@@ -0,0 +1,305 @@
+<template>
+    <div class="symptomTagGroupWrapper clearfix">
+    <div class="bottomPartLeft">
+      <p class="poolTitle">标签池</p>
+      <div class="pool">
+        <el-input
+          placeholder="请输入搜索内容"
+          v-model="searchVal"
+        >
+            <i
+                slot="prefix"
+                class="el-input__icon el-icon-search"
+            ></i>
+        </el-input>
+        <ul class="tagList">
+            <li v-for="(item, index) in leftTagsList"
+                class = "tagItem"
+                :key='item.id'
+                :style="getStyle(item)?styles:null"
+                @click='selectLeftTag(item, index, $event)'
+            >
+                <p class="tagName" >{{item.tagName}} </p>
+            </li>
+        </ul>
+      </div>
+    </div>
+    <div class="bottomPartMid fl">
+      <p><span class="el-icon-arrow-left" @click="toLeftList"></span></p>
+      <p><span class="el-icon-arrow-right" @click="toRightList"></span></p>
+    </div>
+    <div class="bottomPartRight ">
+      <p class="poolTitle">操作池</p>
+      <ul class="tagList operationPool">
+            <li class = "tagItem"
+                v-for="(item) in rightTagsList2" 
+                :key='item.id'
+                :style="getStyle2(item)?styles:null"
+                @click='selectRightTag(item)'
+            >   
+                <div>
+                    <el-input
+                        v-if="item.text"
+                        placeholder=""
+                        v-model="item.text"
+                    >
+                    </el-input>
+                </div>
+                <p v-if="item.tagName" class="tagName">{{item.tagName}} </p>
+            </li>
+        </ul>
+    </div>
+  </div>
+</template>
+<script>
+import api from '@api/icss.js';
+import utils from '@api/utils.js';
+
+export default {
+    name: "BloodPressTagGroup",
+    props: {
+        pool: {
+            default: () => [],
+            type: Array
+        },
+        type: {
+            default: '',
+            type: String
+        },
+    },
+    data() {
+        return {
+            leftTagsList: [],
+            selectLeftTagsList: [],
+            rightTagsList: [],
+            rightTagsList2: [],
+            selectRightTagsList: [],
+            searchVal: '',
+            styles:{
+                background:'#eae7e7'
+            },
+        }
+    },
+    mounted() {
+        this.searchTagList()
+        // this.leftTagsList = this.pool
+        // console.log('TAGPOOL', this.pool)
+    },
+    watch: {
+        pool(newVal, preVal) {
+            if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
+                this.leftTagsList = newVal
+            }
+        },
+        searchVal(newVal, preVal){
+            if(newVal.trim() == ''){
+                this.searchTagList()
+            }else if(newVal.trim() != preVal.trim()){
+                this.searchTagList()
+            }
+        },
+        
+        
+    },
+    methods: {
+        selectLeftTag(tag, index, e) {
+           
+            const hasTag = this.isHasTag(tag, this.selectLeftTagsList)
+            console.log(hasTag)
+            if (hasTag) {
+                this.selectLeftTagsList = this.selectLeftTagsList.filter(item => item.id !== tag.id)
+            } else {
+                this.selectLeftTagsList.push(tag);
+            }
+            console.log(this.selectLeftTagsList)
+            
+        },
+        selectRightTag(tag) {
+            const hasTag = this.isHasTag(tag, this.selectRightTagsList)
+            console.log(hasTag)
+            if (hasTag) {
+                this.selectRightTagsList = this.selectRightTagsList.filter(item => item.id !== tag.id)
+            } else {
+                this.selectRightTagsList.push(tag);
+            }
+            console.log(this.selectRightTagsList)
+            
+        },
+        isHasTag(item, arr) {
+            for ( let i = 0; i <arr.length; i++) {
+                if(arr[i].id === item.id) {
+                    return true;
+                }
+            }
+            return false;
+        },
+        getStyle(item){       //左侧选中状态
+            // console.log('selected',utils.filterArr(this.leftTagsList,item,2))
+            // return utils.filterArr(this.selectLeftTagsList,item,2)
+            return this.isHasTag(item, this.selectLeftTagsList)
+        },
+        getStyle2(item) {
+            // return utils.filterArr(this.selectRightTagsList,item,2)
+            return this.isHasTag(item, this.selectRightTagsList)
+        },
+        toLeftList() {
+            // if(!this.searchVal) {
+            //     this.leftTagsList = this.searchTagList()
+            // }
+            
+            this.searchTagList()
+            for (let i = 0; i < this.selectRightTagsList.length; i++) {
+                this.rightTagsList = this.rightTagsList.filter(item => item.id !== this.selectRightTagsList[i].id)
+            }
+            for (let i = 0; i < this.selectRightTagsList.length; i++) {//每次往回移时同时删掉下面输入框
+                if (this.selectRightTagsList[i].id) {
+                    for (let j = 0; j < this.rightTagsList2.length; j++) {
+                        if(this.selectRightTagsList[i].id === this.rightTagsList2[j].id) {
+                                this.rightTagsList2.splice(j-1, 3)
+                        }
+                    }
+                }
+            }
+
+            // this.rightTagsList2 = [];
+            // let textItem = { text: ','  }
+            // for (let i = 0; i < this.rightTagsList.length; i++) {
+            //     if(this.rightTagsList2.length === 0) {
+            //         this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem)))
+            //     }
+            //     this.rightTagsList2.push(this.rightTagsList[i]);
+            //     this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem)))
+            // }
+            // for (let i = 0; i < this.rightTagsList.length; i++) {
+            //     this.leftTagsList = this.leftTagsList.filter(item => item.id !== this.rightTagsList[i].id)
+            // }
+            this.selectLeftTagsList = []
+            this.selectRightTagsList = []
+            this.searchTagList()
+            console.log(this.rightTagsList2)
+            this.$emit('changeActionData',this.rightTagsList2, false);
+        },
+        toRightList() {
+            this.rightTagsList.push(...this.selectLeftTagsList);
+            let textItem = { text: ','  }
+            for (let i = 0; i < this.selectLeftTagsList.length; i++) { //选中标签每个前后加入输入框,默认为逗号
+                let textItem1 = JSON.parse(JSON.stringify(textItem))
+                textItem1.id = this.selectLeftTagsList[i].id + ',,'
+                this.rightTagsList2.push(textItem1)
+                this.rightTagsList2.push(this.selectLeftTagsList[i]);
+                let textItem2 = JSON.parse(JSON.stringify(textItem))
+                    textItem2.id = this.selectLeftTagsList[i].id + ','
+                this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem2)))
+            }
+            
+            for (let i = 0; i < this.rightTagsList.length; i++) {
+                this.leftTagsList = this.leftTagsList.filter(item => item.id !== this.rightTagsList[i].id)
+            }
+            console.log('this.rightTagsList',this.rightTagsList)
+            this.selectLeftTagsList = []
+            this.selectRightTagsList = []
+            console.log(this.rightTagsList2)
+            this.$emit('changeActionData',this.rightTagsList2, false);
+        },
+        searchTagList() {
+            let notIds = []
+            for (let i = 0; i < this.rightTagsList.length; i++) {
+                if(this.rightTagsList[i].id) {
+                    notIds.push(this.rightTagsList[i].id)
+                }
+                
+            }
+            let param = {
+                "tagName": this.searchVal,
+                "tagType": [1, 2],
+                "controlType": [],
+                "type": this.type || '',
+                "notIds": notIds,
+
+            }
+            api.searchTagList(param).then((res) => {
+                if (res.data.code === '0') {
+                    this.leftTagsList = res.data.data
+                    this.selectLeftTagsList = []
+                    this.selectRightTagsList = []
+                }
+            })
+           
+        }
+
+    }
+}
+</script>
+
+<style lang="less" scoped>
+@import '../../less/common.less';
+.symptomTagGroupWrapper {
+    .bottomPartLeft {
+        width: 30%;
+        box-sizing: border-box;
+        float: left;
+    }
+    .poolTitle {
+        // border-bottom: 1px solid @icssBorder;
+        box-sizing: border-box;
+        margin-bottom: 20px;
+    }
+    .pool {
+        // border:1px solid @icssBorder;
+    
+    }
+    .search {
+        width: 100%;
+        border-bottom: 1px solid @icssBorder;
+        box-sizing: border-box;
+        height: 30px;
+    }
+    .tagList {
+        padding: 10px 10px;
+        height: 300px;
+        overflow-y: auto;
+        border: 1px solid @icssBorder;
+    }
+    .tagItem {
+        line-height: 20px;
+    }
+    .operationPool {
+        position: relative;
+        width: 60%;
+    }
+    .tagName:before {
+        content: '['
+    }
+    .tagName::after {
+        content: ']'
+    }
+    .bottomPartMid {
+        width: 10%;
+    p {
+        width: 100%;
+        text-align: center;
+        span {
+            display: inline-block;
+            width: 50px;
+            height: 30px;
+            line-height: 30px;
+            margin: 0 auto;
+        }
+    }
+    }
+    .bottomPartRight {
+        float: left;
+        width: 40%;
+    }
+    .buttonBox {
+        width: 10%;
+        float: left;
+    }
+    .followButton {
+        margin-top: 20px;
+    }
+    .active {
+        color: #aBcdef;
+    }
+}
+</style>

+ 25 - 15
src/components/icss/NoiseTemplate.vue

@@ -26,9 +26,17 @@
       <SymptomTagGroup 
         v-if="dataPub.region2 == 4" 
         :pool="dataPub.tagPool" 
-        :type="dataPub.region1">
-
+        :type="dataPub.region1"
+        @changeActionData="changeActionData"
+        >
       </SymptomTagGroup>
+      <BloodPressTagGroup 
+        v-if="dataPub.region2 == 3" 
+        :pool="dataPub.tagPool" 
+        :type="dataPub.region1"
+        @changeActionData="changeActionData"
+        >
+      </BloodPressTagGroup>
       <el-form
         v-if="dataPub.region2 == 2"
         class="order"
@@ -69,6 +77,7 @@
 import PubTagGroup from './PubTagGroup';
 import PubTagPartDetail from './PubTagPartDetail';
 import SymptomTagGroup from './SymptomTagGroup';
+import BloodPressTagGroup from './BloodPressTagGroup';
 import api from '@api/icss.js';
 import utils from '@api/utils.js';
 
@@ -151,25 +160,26 @@ export default {
         }
       }
       console.log(param)
-      // return api.saveOrUpdate(param).then((res) => {
-      //   if (res.data.code === '0') {
-      //     this.$message({
-      //       message: res.data.msg,
-      //       type: 'success'
-      //     });
-      //   }else{
-      //     this.$message({
-      //       message: res.data.msg,
-      //       type: 'error'
-      //     });
-      //   }
-      // })
+      return api.saveOrUpdate(param).then((res) => {
+        if (res.data.code === '0') {
+          this.$message({
+            message: res.data.msg,
+            type: 'success'
+          });
+        }else{
+          this.$message({
+            message: res.data.msg,
+            type: 'error'
+          });
+        }
+      })
     },
   },
   components: {
     PubTagGroup,
     PubTagPartDetail,
     SymptomTagGroup,
+    BloodPressTagGroup,
   }
 }
 </script>

+ 1 - 1
src/components/icss/PubTagGroup.vue

@@ -136,7 +136,7 @@
           <el-option label="可以" value="0"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="是否复制当前模块:" prop="region11" v-if="form.region2 == 3">
+      <el-form-item label="是否复制当前模块(是否显示加号):" prop="region11" v-if="form.region2 == 3">
         <el-select v-model="form.region11">
           <el-option label="不可以" value="1"></el-option>
           <el-option label="可以" value="0"></el-option>

+ 61 - 23
src/components/icss/SymptomTagGroup.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="symptomTagGroupWrapper clearfix">
-    <div class="bottomPartLeft fl">
+    <div class="bottomPartLeft">
       <p class="poolTitle">标签池</p>
       <div class="pool">
         <el-input
@@ -28,12 +28,12 @@
       <p><span class="el-icon-arrow-left" @click="toLeftList"></span></p>
       <p><span class="el-icon-arrow-right" @click="toRightList"></span></p>
     </div>
-    <div class="bottomPartRight fr">
+    <div class="bottomPartRight ">
       <p class="poolTitle">操作池</p>
-      <ul class="tagList">
+      <ul class="tagList operationPool">
             <li class = "tagItem"
-                v-for="(item, index) in rightTagsList2" 
-                :key='index'
+                v-for="(item) in rightTagsList2" 
+                :key='item.id'
                 :style="getStyle2(item)?styles:null"
                 @click='selectRightTag(item)'
             >   
@@ -46,14 +46,18 @@
                     </el-input>
                 </div>
                 <p v-if="item.tagName" class="tagName">{{item.tagName}} </p>
-                <p v-if="item.symptomType === 1">跟主症状</p>
-                <p v-if="item.symptomType === 2">跟伴随症状</p>
+                <p v-if="item.symptomType === 1" class="tagAttribute">跟主症状</p>
+                <p v-if="item.symptomType === 2" class="tagAttribute">跟伴随症状</p>
             </li>
         </ul>
     </div>
-    <div :style="{widt: '20%'}">
-        <el-button type="primary" @click="mainSymptom">跟主症状</el-button>
-        <el-button type="primary" @click="followSymptom">跟伴随症状</el-button>
+    <div class="buttonBox">
+        <div class="mainButton">
+            <el-button type="primary" @click="mainSymptom">跟主症状</el-button>
+        </div>
+        <div class="followButton">
+            <el-button type="primary" @click="followSymptom">跟伴随症状</el-button>
+        </div>
     </div>
   </div>
 </template>
@@ -157,31 +161,51 @@ export default {
             for (let i = 0; i < this.selectRightTagsList.length; i++) {
                 this.rightTagsList = this.rightTagsList.filter(item => item.id !== this.selectRightTagsList[i].id)
             }
-            this.rightTagsList2 = [];
-            let textItem = { text: ','  }
-            for (let i = 0; i < this.rightTagsList.length; i++) {
-                if(this.rightTagsList2.length === 0) {
-                    this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem)))
+            for (let i = 0; i < this.selectRightTagsList.length; i++) {//每次往回移时同时删掉下面输入框
+                if (this.selectRightTagsList[i].id) {
+                    for (let j = 0; j < this.rightTagsList2.length; j++) {
+                        if(this.selectRightTagsList[i].id === this.rightTagsList2[j].id) {
+                            if(this.rightTagsList2.length === 3) {
+                                this.rightTagsList2 = []
+                            } else {
+                                this.rightTagsList2.splice(j, 2)
+                            }
+                        }
+                    }
                 }
-                this.rightTagsList2.push(this.rightTagsList[i]);
-                this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem)))
             }
+
+            // this.rightTagsList2 = [];
+            // let textItem = { text: ','  }
+            // for (let i = 0; i < this.rightTagsList.length; i++) {
+            //     if(this.rightTagsList2.length === 0) {
+            //         this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem)))
+            //     }
+            //     this.rightTagsList2.push(this.rightTagsList[i]);
+            //     this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem)))
+            // }
             // for (let i = 0; i < this.rightTagsList.length; i++) {
             //     this.leftTagsList = this.leftTagsList.filter(item => item.id !== this.rightTagsList[i].id)
             // }
             this.selectLeftTagsList = []
             this.selectRightTagsList = []
             this.searchTagList()
+            console.log(this.rightTagsList2)
+            this.$emit('changeActionData',this.rightTagsList2, false);
         },
         toRightList() {
             this.rightTagsList.push(...this.selectLeftTagsList);
             let textItem = { text: ','  }
-            for (let i = 0; i < this.selectLeftTagsList.length; i++) {
+            for (let i = 0; i < this.selectLeftTagsList.length; i++) { //选中标签每个加入输入框,默认为逗号
                 if(this.rightTagsList2.length === 0) {
-                    this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem)))
+                    let textItem1 = JSON.parse(JSON.stringify(textItem))
+                    textItem1.id = this.selectLeftTagsList[i].id + ',,'
+                    this.rightTagsList2.push(textItem1)
                 }
                 this.rightTagsList2.push(this.selectLeftTagsList[i]);
-                this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem)))
+                let textItem2 = JSON.parse(JSON.stringify(textItem))
+                    textItem2.id = this.selectLeftTagsList[i].id + ','
+                this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem2)))
             }
             
             for (let i = 0; i < this.rightTagsList.length; i++) {
@@ -190,6 +214,8 @@ export default {
             console.log('this.rightTagsList',this.rightTagsList)
             this.selectLeftTagsList = []
             this.selectRightTagsList = []
+            console.log(this.rightTagsList2)
+            this.$emit('changeActionData',this.rightTagsList2, false);
         },
         searchTagList() {
             let notIds = []
@@ -219,7 +245,7 @@ export default {
         mainSymptom() {
             console.log(this.selectRightTag)
             for(let i = 0; i < this.selectRightTagsList.length; i++) {
-                this.rightTagsList = this.rightTagsList.filter((item) =>{
+                this.rightTagsList2 = this.rightTagsList2.filter((item) =>{
                     if(item.id === this.selectRightTagsList[i].id) {
                         item.symptomType = 1
                     }
@@ -231,7 +257,7 @@ export default {
         },
         followSymptom() {
             for(let i = 0; i < this.selectRightTagsList.length; i++) {
-                this.rightTagsList = this.rightTagsList.filter((item) =>{
+                this.rightTagsList2 = this.rightTagsList2.filter((item) =>{
                     if(item.id === this.selectRightTagsList[i].id) {
                         item.symptomType = 2
                     }
@@ -251,6 +277,7 @@ export default {
     .bottomPartLeft {
         width: 30%;
         box-sizing: border-box;
+        float: left;
     }
     .poolTitle {
         // border-bottom: 1px solid @icssBorder;
@@ -271,12 +298,15 @@ export default {
         padding: 10px 10px;
         height: 300px;
         overflow-y: auto;
-        // width: 80%;
         border: 1px solid @icssBorder;
     }
     .tagItem {
         line-height: 20px;
     }
+    .operationPool {
+        position: relative;
+        width: 60%;
+    }
     .tagName:before {
         content: '['
     }
@@ -298,8 +328,16 @@ export default {
     }
     }
     .bottomPartRight {
+        float: left;
         width: 40%;
     }
+    .buttonBox {
+        width: 10%;
+        float: left;
+    }
+    .followButton {
+        margin-top: 20px;
+    }
     .active {
         color: #aBcdef;
     }