浏览代码

标签组修改(血压和症状)

zhangxc 6 年之前
父节点
当前提交
77a9c8c7c0

+ 16 - 1
src/components/icss/BloodPressTagGroup.vue

@@ -90,7 +90,22 @@ export default {
         }
     },
     mounted() {
-         this.rightTagsList2 = this.options
+        this.rightTagsList2 = this.options
+        let newArr = []
+        for (let i = 0; i < this.rightTagsList2.length; i++) {
+            if(this.rightTagsList2[i].tagType == 8) {
+                newArr.push({ text: this.rightTagsList2[i].tagName ,type:'input' ,id: i+',,,'})
+            } else {
+                if(i === 0 ) {
+                    newArr.push({ text: '' ,type:'input' ,id: i+',,,'})
+                }
+                newArr.push(this.rightTagsList2[i])
+                if(!this.rightTagsList2[i+1] || this.rightTagsList2[i+1]&&this.rightTagsList2[i+1].tagType != 8) {
+                    newArr.push({ text: '' ,type:'input' ,id: i+',,,,'})
+                }
+            }
+        }
+        this.rightTagsList2 = newArr
         this.searchTagList()
         // this.leftTagsList = this.pool
         // console.log('TAGPOOL', this.pool)

+ 7 - 1
src/components/icss/NoiseTemplate.vue

@@ -43,6 +43,10 @@
         @changeActionData="changeActionData"
         >
       </BloodPressTagGroup>
+      <SymptomPush
+        v-if="dataPub.region2 == 11" 
+      >
+      </SymptomPush>
       <el-form
         v-if="dataPub.region2 == 2"
         class="order"
@@ -84,6 +88,7 @@ import PubTagGroup from './PubTagGroup';
 import PubTagPartDetail from './PubTagPartDetail';
 import SymptomTagGroup from './SymptomTagGroup';
 import BloodPressTagGroup from './BloodPressTagGroup';
+import SymptomPush from './SymptomPush';
 import api from '@api/icss.js';
 import utils from '@api/utils.js';
 
@@ -155,7 +160,7 @@ export default {
       let param = {
         "questionWrapper": {
           "controlType": 0,                            //控件类型(0:默认值 1:下拉单选 2:下拉多选 6:文本框 7:数字键盘文本框 99:联合推送)
-          "id": "",                                    //新增id置空
+          "id": isEdit?data.id:'',                                    //新增id置空
           "type": this.dataPub.region1,                //标签归属
           "tagType": this.dataPub.region2,             //标签类型
           "tagName": this.dataPub.region3,             //系统名称
@@ -215,6 +220,7 @@ export default {
     PubTagPartDetail,
     SymptomTagGroup,
     BloodPressTagGroup,
+    SymptomPush,
   }
 }
 </script>

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

@@ -214,7 +214,7 @@ export default {
       labelTypesMaps: {       //// 归属和填写单类型限制
         '1':['2','3','4','11'],
         '3':['4','6'],
-        '4':[,'2','3'],
+        '4':['2','3'],
         '5':['7'],
         '6':['9'],
         '7':['9'],

+ 422 - 0
src/components/icss/SymptomPush.vue

@@ -0,0 +1,422 @@
+// 症状推送类型(添加症状)
+<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 tagPool">
+            <li v-for="(item, index) in leftTagsList"
+                class = "tagItem"
+                :key='item.id'
+                :title="'[ '+item.tagName+' ]'"
+                :style="getStyle(item)?styles:null"
+                @click='selectLeftTag(item, index, $event)'
+            >
+                <p class="tagName ellipsis" >{{item.tagName}} </p>
+            </li>
+        </ul>
+      </div>
+    </div>
+    <div class="bottomPartMid fl">
+        <p><span class="el-icon-arrow-right" @click="toRightList"></span></p>
+        <p><span class="el-icon-arrow-left" @click="toLeftList"></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 class="inputBox">
+                    <el-input
+                        v-if="item.type === 'input'"
+                        placeholder=""
+                        v-model="item.text"
+                    >
+                    </el-input>
+                </div>
+                <p v-if="item.tagName" class="tagName">{{item.tagName}} </p>
+                <div class="attributeBox">
+                    <p v-if="item.symptomType === 1" class="tagAttribute" @click.stop>跟主症状 <span @click="closeTagAttribute(item)" class="closeTagAttribute"><i class="el-icon-error"></i></span></p>
+                    <p v-if="item.symptomType === 2" class="tagAttribute" @click.stop>跟伴随症状<span  @click="closeTagAttribute(item)" class="closeTagAttribute"><i class="el-icon-error"></i></span></p>
+                </div>
+            </li>
+        </ul>
+    </div>
+    <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>
+<script>
+import api from '@api/icss.js';
+import utils from '@api/utils.js';
+
+export default {
+    name: "SymptomTagGroup",
+    props: {
+        pool: {
+            default: () => [],
+            type: Array
+        },
+        type: {
+            default: '',
+            type: String
+        },
+        sexType: {
+            default: '',
+            type: String
+        },
+        options: {
+            default: () => [],
+            type: Array
+        }
+    },
+    data() {
+        return {
+            leftTagsList: [],
+            selectLeftTagsList: [],
+            rightTagsList: [],
+            rightTagsList2: [],
+            selectRightTagsList: [],
+            searchVal: '',
+            styles:{
+                background:'#eae7e7'
+            },
+        }
+    },
+    mounted() {
+        this.rightTagsList2 = this.options
+        let newArr = []
+        for (let i = 0; i < this.rightTagsList2.length; i++) {
+            if(this.rightTagsList2[i].tagType == 8) {
+                newArr.push({ text: this.rightTagsList2[i].tagName ,type:'input' ,id: i+',,,'})
+            } else {
+                if(i === 0 ) {
+                    newArr.push({ text: '' ,type:'input' ,id: i+',,,'})
+                }
+                newArr.push(this.rightTagsList2[i])
+                if(!this.rightTagsList2[i+1] || this.rightTagsList2[i+1]&&this.rightTagsList2[i+1].tagType != 8) {
+                    newArr.push({ text: '' ,type:'input' ,id: i+',,,,'})
+                }
+            }
+        }
+        this.rightTagsList2 = newArr
+        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()
+            }
+        },
+        sexType(newVal, preVal) {
+            if (newVal != preVal) {
+                if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
+                    this.leftTagsList = [];
+                    this.selectLeftTagsList = [];
+                    this.rightTagsList = [];
+                    this.rightTagsList2 = [];
+                    this.selectRightTagsList = [];
+                    this.searchVal = '';
+                     this.searchTagList();
+                }
+            }
+        },
+
+        
+    },
+    methods: {
+        selectLeftTag(tag, index, e) {
+            const hasTag = this.isHasTag(tag, this.selectLeftTagsList)
+            if (hasTag) {
+                this.selectLeftTagsList = this.selectLeftTagsList.filter(item => item.id !== tag.id)
+            } else {
+                this.selectLeftTagsList.push(tag);
+            }
+        },
+        selectRightTag(tag) {
+            const hasTag = this.isHasTag(tag, this.selectRightTagsList)
+            if (hasTag) {
+                this.selectRightTagsList = this.selectRightTagsList.filter(item => item.id !== tag.id)
+            } else {
+                this.selectRightTagsList.push(tag);
+            }
+            
+        },
+        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()
+            // }
+            
+            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].type !== 'input') {
+                    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 = [];
+            // 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()
+            this.$emit('changeActionData',this.rightTagsList2, false);
+        },
+        toRightList() {
+            this.rightTagsList.push(...this.selectLeftTagsList);
+            let textItem = { text: ',' ,type:'input' }
+            for (let i = 0; i < this.selectLeftTagsList.length; i++) { //选中标签每个加入输入框,默认为逗号
+                if(this.rightTagsList2.length === 0) {
+                    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)
+            }
+            this.selectLeftTagsList = []
+            this.selectRightTagsList = []
+            this.$emit('changeActionData',this.rightTagsList2, false);
+        },
+        searchTagList() {
+            let notIds = []
+            for (let i = 0; i < this.rightTagsList2.length; i++) {
+                if(this.rightTagsList2[i].id) {
+                    notIds.push(this.rightTagsList2[i].id)
+                }
+                
+            }
+            let param = {
+                "tagName": this.searchVal,
+                "tagType": [1, 2],
+                "controlType": [],
+                "type": this.type || '',
+                "notIds": notIds,
+                "sexType": this.sexType,
+
+            }
+            api.searchTagList(param).then((res) => {
+                if (res.data.code === '0') {
+                    this.leftTagsList = res.data.data
+                    this.selectLeftTagsList = []
+                    this.selectRightTagsList = []
+                }
+            })
+           
+        },
+        mainSymptom() {
+            for(let i = 0; i < this.selectRightTagsList.length; i++) {
+                this.rightTagsList2 = this.rightTagsList2.filter((item) =>{
+                    if(item.id === this.selectRightTagsList[i].id) {
+                        item.symptomType = 1
+                    }
+                    return item
+                })
+            }
+            
+            this.selectRightTagsList = []
+        },
+        followSymptom() {
+            for(let i = 0; i < this.selectRightTagsList.length; i++) {
+                this.rightTagsList2 = this.rightTagsList2.filter((item) =>{
+                    if(item.id === this.selectRightTagsList[i].id) {
+                        item.symptomType = 2
+                    }
+                    return item
+                })
+            }
+            this.selectRightTagsList = []
+        },
+        closeTagAttribute(tag) {
+            this.rightTagsList2 = this.rightTagsList2.filter((item) =>{
+                    if(item.id === tag.id) {
+                        item.symptomType = 3
+                    }
+                    return item
+                })
+        }
+
+    }
+}
+</script>
+
+<style lang="less" >
+@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 {
+        border: 1px solid @icssBorder;
+    }
+    .tagPool {
+        height: 300px;
+        overflow-y: auto;
+
+    }
+    .attributeBox {
+        position: absolute;
+        right: -100px;
+        top: 2px;
+    }
+    .tagItem {
+        position: relative;
+        line-height: 30px;
+        cursor: pointer;
+        padding: 0 10px;
+    }
+    .operationPool {
+        position: relative;
+        width: 60%;
+        min-height: 300px;
+        padding: 10px 0;
+    }
+    .tagName:before {
+        content: '['
+    }
+    .tagName::after {
+        content: ']'
+    }
+    .bottomPartMid {
+        width: 8%;
+        margin-top: 60px;
+        p {
+        width: 100%;
+        text-align: center;
+        span {
+            cursor: pointer;
+            display: inline-block;
+            width: 30px;
+            height: 40px;
+            line-height: 40px;
+            margin: 0 auto;
+            border: 1px solid @icssBorder;
+            margin-bottom: 15px;
+            font-size: 18px;
+        }
+        }
+    }
+    .bottomPartRight {
+        float: left;
+        width: 40%;
+    }
+    .buttonBox {
+        width: 10%;
+        float: left;
+    }
+    .followButton {
+        margin-top: 20px;
+    }
+    .tagAttribute {
+       border: 1px solid @icssBorder;
+       height: 17px;
+       line-height: 17px;
+       padding: 3px 5px;
+       border-radius: 10px;
+    }
+    .inputBox {
+        width: 120px;
+        .el-input {
+            .el-input__inner {
+                height: 30px;
+                background: rgb(234, 231, 231);
+            }
+        }
+    }
+    .closeTagAttribute {
+        position: absolute;
+        top: -5px;
+        right: -5px;
+    }
+    .active {
+        color: #aBcdef;
+    }
+}
+</style>

+ 20 - 5
src/components/icss/SymptomTagGroup.vue

@@ -33,8 +33,8 @@
       <p class="poolTitle">操作界面:</p>
       <ul class="tagList operationPool">
             <li class = "tagItem"
-                v-for="(item, index) in rightTagsList2" 
-                :key='item.id + index'
+                v-for="(item) in rightTagsList2" 
+                :key='item.id'
                 :style="getStyle2(item)?styles:null"
                 @click='selectRightTag(item)'
             >   
@@ -103,6 +103,21 @@ export default {
     },
     mounted() {
         this.rightTagsList2 = this.options
+        let newArr = []
+        for (let i = 0; i < this.rightTagsList2.length; i++) {
+            if(this.rightTagsList2[i].tagType == 8) {
+                newArr.push({ text: this.rightTagsList2[i].tagName ,type:'input' ,id: i+',,,'})
+            } else {
+                if(i === 0 ) {
+                    newArr.push({ text: '' ,type:'input' ,id: i+',,,'})
+                }
+                newArr.push(this.rightTagsList2[i])
+                if(!this.rightTagsList2[i+1] || this.rightTagsList2[i+1]&&this.rightTagsList2[i+1].tagType != 8) {
+                    newArr.push({ text: '' ,type:'input' ,id: i+',,,,'})
+                }
+            }
+        }
+        this.rightTagsList2 = newArr
         this.searchTagList()
         // this.leftTagsList = this.pool
         // console.log('TAGPOOL', this.pool)
@@ -234,9 +249,9 @@ export default {
         },
         searchTagList() {
             let notIds = []
-            for (let i = 0; i < this.rightTagsList.length; i++) {
-                if(this.rightTagsList[i].id) {
-                    notIds.push(this.rightTagsList[i].id)
+            for (let i = 0; i < this.rightTagsList2.length; i++) {
+                if(this.rightTagsList2[i].id) {
+                    notIds.push(this.rightTagsList2[i].id)
                 }
                 
             }