소스 검색

Merge branch 'dev' into ChronicMag_zxc

zhangxc 6 년 전
부모
커밋
a1d22af0d1

+ 9 - 0
src/App.vue

@@ -17,6 +17,7 @@
       this.getUserEnumsData();
       this.getDiagbotManEnumsData();
       this.getIcssEnumsData();
+      this.getKnowledgeEnums();
       //请求拦截器,添加token
       axios.interceptors.request.use((req) => {
         const tokenStr = localStorage.getItem('token');
@@ -94,6 +95,14 @@
             localStorage.setItem('icssEnumsData', JSON.stringify(data));
           }
         });
+      },
+      getKnowledgeEnums(){
+        icss.getKnowledgeEnums().then((res) => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            localStorage.setItem('knowledgeEnumsData', JSON.stringify(data));
+          }
+        });
       }
     }
   }

+ 30 - 16
src/api/config.js

@@ -114,12 +114,12 @@ export default {
     'addCommonSymptom': 'api/icssman/questionUsual/addQuestionUsual',  //常见科室症状维护--添加科室症状
     'getCommonSymptomById': 'api/icssman/questionUsual/getQuestionUsualByDept', //常见科室症状维护--修改、详情
     'delCommonSymptom': 'api/icssman/questionUsual/deleteQuestionUsual',  //常见科室症状维护--删除科室症状
-    'discInformation': 'api/icssman/disclaimerInformation/getDisclaimerInformations', //免责声明
-    'addDiscInformation': 'api/icssman/disclaimerInformation/addDisclaimerInformations', //免责声明-新增
-    'modifDiscInformation': 'api/icssman/disclaimerInformation/updateDisclaimerInformations', //免责声明-修改
-    'delDiscInformation': 'api/icssman/disclaimerInformation/cancelDisclaimerInformations', //免责声明-删除
-    'closeInformation': 'api/icssman/disclaimerInformation/endDisclaimerInformations', //免责声明-停用
-    'openInformation': 'api/icssman/disclaimerInformation/startDisclaimerInformations', //免责声明-启用
+    'discInformation': 'api/knowledgeman/disclaimerInformation/getDisclaimerInformations', //免责声明
+    'addDiscInformation': 'api/knowledgeman/disclaimerInformation/addDisclaimerInformations', //免责声明-新增
+    'modifDiscInformation': 'api/knowledgeman/disclaimerInformation/updateDisclaimerInformations', //免责声明-修改
+    'delDiscInformation': 'api/knowledgeman/disclaimerInformation/cancelDisclaimerInformations', //免责声明-删除
+    'closeInformation': 'api/knowledgeman/disclaimerInformation/endDisclaimerInformations', //免责声明-停用
+    'openInformation': 'api/knowledgeman/disclaimerInformation/startDisclaimerInformations', //免责声明-启用
     'getQuestionInfos': 'api/icssman/moduleInfo/getQuestionInfos', //模板维护标签池数据获取
     'saveModuleInfo': 'api/icssman/moduleInfo/saveModuleInfo', //模板维护新增
     'updateModuleInfo': 'api/icssman/moduleInfo/updateModuleInfo', //模板维护修改
@@ -134,20 +134,21 @@ export default {
     'getPhysicalExamTempByDepId':'api/icssman/deptVital/getModuleByDeptId', //通过科室id获取查体模板
     'savePhysicalExamTemp':'api/icssman/deptVital/saveDeptVitals',//保存查体模板
     'delPhysicalExamTemp':'api/icssman/deptVital/delAllDeptVitalList',//删除查体模板
-    'getConceptKnowledgeList':'/api/knowledgeman/libraryDetail/getLibraryDetailList', //  术语静态知识列表
-    'getConceptKnowledge':'/api/knowledgeman/Knowledge/getConceptKnowledge',//术语静态知识查询
+    'getConceptKnowledgeList':'/api/knowledgeman/conceptDetail/page', //  术语静态知识列表
+    'getConceptKnowledge':'/api/knowledgeman/conceptDetail/getByConceptId',//术语静态知识详情
     'getConceptInfo':'/api/knowledgeman/concept/getConceptInfo', //  搜索术语
     'versionInfo': 'api/icssman/versionInfo/getVersionInfoAlls', //版本信息
     'addVersInfo': 'api/icssman/versionInfo/saveVersionInfoAlls', //版本信息-添加
     'updateVersInfo': 'api/icssman/versionInfo/updateVersionInfoAlls', //版本信息-修改
     'delVersionInfo': 'api/icssman/versionDetail/cancelVersionDetails', //版本信息-删除版本说明
     'addVersionInfo': 'api/icssman/versionDetail/addVersionDetails', //版本信息-添加版本说明
-    'modiVersionInfo': 'api/icssman/versionDetail/updateVersionDetails', //版本信息-修改版本说明
+    'modiVersionInfo': 'api/icssman/versionDetail/upgetConceptKnowledgedateVersionDetails', //版本信息-修改版本说明
     'getVersionDetlInfo': 'api/icssman/versionDetail/getDetailById', //版本信息-版本说明列表获取
-    'promptServer':'/api/icssman/file/uploadImage',    //静态知识
+    'promptServer':'/api/knowledgeman/file/uploadImage',    //静态知识富文本图片上传
     /**************医学术语维护****************/
-	'saveConceptInfo':'/api/knowledgeman/libraryDetail/addLibraryDetail',   //保存术语静态知识
-    'delConceptInfo':'/api/knowledgeman/libraryDetail/removeLibraryDetail',   //删除术语静态知识
+    'getKnowledgeEnums':'api/knowledgeman/getKlmEnumsData', //术语库枚举
+	  'saveConceptInfo':'/api/knowledgeman/conceptDetail/insertOrUpdate',   //保存术语静态知识
+    'delConceptInfo':'/api/knowledgeman/conceptDetail/delete',   //删除术语静态知识
     'knowledgeName': 'api/knowledgeman/concept/getAllInformation', //医学术语-命名维护
     'knowledgeUpload': 'api/knowledgeman/concept/conceptInfoExcelIm', //医学术语-命名维护-导入
     'allKnowledgeType': 'api/knowledgeman/lexicon/getAllLexicon', //医学术语-类型列表
@@ -159,7 +160,7 @@ export default {
     'getAllRelationType': 'api/knowledgeman/lexiconRelationship/getAllLexiconRelationship', //医学术语-关系维护-关系下拉
     'addRelationConcept': 'api/knowledgeman/relation/addRelationInfo', //医学术语-关系维护-添加
     'RelationUpload': 'api/knowledgeman/relation/relationInfoExcelIm', //医学术语-关系维护-导入
-    'scaleContentStructure': 'api/icssman/scaleContent/list',  //量表结构维护 -- 列表
+    'scaleContentStructure': 'api/knowledgeman/scaleContent/page',  //量表结构维护 -- 列表
     'getAllDeptAndDisInfo': 'api/icssman/moduleInfo/getAllDeptAndDisInfo',  //模板维护-获取科室和疾病所有信息
     'queryEvaluationModulePages': 'api/icssman/evaluationModuleMapping/queryEvaluationModulePages',  //慢病管理评估维护 -- 列表
     'getMedicalInfoList': '/api/knowledgeman/medical/getMedicalInfoList', //医学术语--属性维护--属性列表
@@ -168,7 +169,7 @@ export default {
     'addMedicalInfo': '/api/knowledgeman/medical/addMedicalInfo', //医学术语--属性维护--术语医学属性添加或者编辑
     'removeMedicalInfo': '/api/knowledgeman/medical/removeMedicalInfo', //医学术语--属性维护--术语医学属性删除
     'getAllLexiconRelationship':'/api/knowledgeman/lexicon/getAllLexicon', //医学术语--获取所有关系类型
-    'getAllConcept':'/api/knowledgeman/concept/getAllConcept',   //医学术语--获取所有概念(标准术语)
+    'getAllConcept':'/api/knowledgeman/conceptDetail/index',   //医学术语--获取所有概念(标准术语)
     'getAllBodypart': '/api/knowledgeman/bodypart/getAllBodypart',  //医学术语--获取所有部位
     'getAllDepts': '/api/knowledgeman/medical/getAllDepts',  //医学术语--获取所有科室
     'getLisMappingPage': '/api/icssman/lisMapping/getLisMappingPage', //医学数据-化验大小项与公表项维护-列表
@@ -190,9 +191,22 @@ export default {
     'addDisScaleInfo':'api/icssman/disScale/addDisScaleInfo',  //医学数据-诊断量表关联维护-添加和修改
     'getDisScaleByDisId':'api/icssman/disScale/getDisScaleByDisId',  //医学数据-诊断量表关联维护-根据诊断id获取诊断量表关联信息(修改回读用)
     'delDisScaleInfo':'api/icssman/disScale/delDisScaleInfo',  //医学数据-诊断量表关联维护-删除
-    'insertOrUpdate': 'api/icssman/scaleContent/insertOrUpdate',  //量表结构维护 -- 添加或者更新
-    'deleteScale': 'api/icssman/scaleContent/delete',  //量表结构维护 -- 删除
+    'insertOrUpdate': 'api/knowledgeman/scaleContent/insertOrUpdate',  //量表结构维护 -- 添加或者更新
+    'rebuildOrUpdate': 'api/knowledgeman/scaleContent/getByConceptId',  //量表结构维护 -- 添加或者更新
+    'deleteScale': 'api/knowledgeman/scaleContent/delete',  //量表结构维护 -- 删除
+    'searchKnowledgeLis': 'api/knowledgeman/scaleContent/index', //量表结构检索
+    'getknowledgeList': 'api/knowledgeman/dictionaryInfo/getList', //量表结构字典信息
     'getModuleType': 'api/icssman/moduleInfo/getModuleType',  //模板维护 -- 类型筛选
+	'indexByLexicon': 'api/knowledgeman/commonconcept/indexByLexicon',  //知识库标准化-根据名称和术语库词性类型搜索
+    'getAssaySon': 'api/knowledgeman/lisSonContact/lisSonContactList',  //化验子项维护
+    'getAssaySonDetail': 'api/knowledgeman/lisSonContact/relationContactDetail',  //化验子项维护-详情
+    'getConceptInfoAssay': '/api/knowledgeman/concept/getAllForRelation',  //化验子项维护-搜索术语
+    'addAssaySon': 'api/knowledgeman/lisSonContact/addRelation',  //化验子项维护-添加
+    'delAssaySon': 'api/knowledgeman/lisSonContact/removeRelationContact',  //化验子项维护-删除/恢复
+    'getConceptRelation': 'api/knowledgeman/relationContact/relationContactList',  //术语关联维护
+    'getConceptRelationDet': 'api/knowledgeman/relationContact/relationContactDetail',  //术语关联维护-详情
+    'addConceptRelation': 'api/knowledgeman/relationContact/addRelation',  //术语关联维护-添加
+    'delConceptRelation': 'api/knowledgeman/relationContact/removeRelationContact',  //术语关联维护-删除/恢复
     'multContactList': 'api/knowledgeman/multContact/multContactList', //知识库标准化-医学术语多层关联维护-列表
     'removeRelationContact': 'api/knowledgeman/multContact/removeRelationContact', //知识库标准化-医学术语多层关联维护-删除或者恢复
     'relationContactDetail': 'api/knowledgeman/multContact/relationContactDetail', //知识库标准化-医学术语多层关联维护-详情

+ 45 - 1
src/api/icss.js

@@ -10,6 +10,9 @@ export default {
     getDropList() {
         return axios.post(urls.getDropList)
     },
+    getknowledgeList() {
+        return axios.post(urls.getknowledgeList)
+    },
     getPromptList(param){
       return axios.post(urls.getPromptList,param)
     },
@@ -52,6 +55,9 @@ export default {
     searchTagList(param) {
         return axios.post(urls.searchTagList, param)
     },
+    searchKnowledgeLis(param) {
+        return axios.post(urls.searchKnowledgeLis, param)
+    },
     validateSystomName(param) {
         return axios.post(urls.searchTagList, param)
     },
@@ -61,6 +67,9 @@ export default {
     detailsTag(param) {   //根据id返回数据
       return axios.post(urls.detailsTag, param)
     },
+    rebuildOrUpdate(param) {   //根据id返回量表数据
+      return axios.post(urls.rebuildOrUpdate, param)
+    },
     getDeptInfo(param) {//科室维护
         return axios.post(urls.getDeptInfo, param)
     },
@@ -85,6 +94,9 @@ export default {
     deleteTagGroup(param) {
         return axios.post(urls.deleteTagGroup, param)
     },
+    indexByLexicon(param) {
+        return axios.post(urls.indexByLexicon, param)
+    },
     getGroupParams(val){
       if(val == 2){
         return groupParams[0]
@@ -168,7 +180,7 @@ export default {
     getModuleInfoSub(param) {//获取子模板列表
         return axios.post(urls.getModuleInfoSub, param)
     },
-    getQuestionInfos(param) {//获取模板维护标签池数据
+    getQuestionInfos(param) {//获取辅检模板维护标签池数据
         return axios.post(urls.getQuestionInfos, param)
     },
     getModuleInfoOne(param) {//模板维护系统修改获取单个模板信息顶部信息
@@ -249,6 +261,7 @@ export default {
     },
     addRelationConcept(param) {//关系维护-添加
         return axios.post(urls.addRelationConcept, param)
+        // return axios.post('http://192.168.3.101:5050/api/knowledgeman/relation/addRelationInfo', param)
     },
     RelationUpload(param) {//关系维护-导入
         return axios.post(urls.RelationUpload, param)
@@ -273,6 +286,7 @@ export default {
     },
     getAllConcept(param) {  //医学术语--获取所有概念(标准术语)
         return axios.post(urls.getAllConcept, param)
+        // return axios.post('http://192.168.3.101:5050/api/knowledgeman/concept/getAllConcept', param)
     },
     getAllBodypart(param) {
         return axios.post(urls.getAllBodypart, param)
@@ -356,6 +370,36 @@ export default {
     deleteScale(param) {
         return axios.post(urls.deleteScale, param)    //量表结构 -- 删除
     },
+    getKnowledgeEnums(){ //医学术语库枚举
+        return axios.post(urls.getKnowledgeEnums)
+    },
+    getAssaySon(param) {
+        return axios.post(urls.getAssaySon, param)    //化验子项-列表
+    },
+    getAssaySonDetail(param) {
+        return axios.post(urls.getAssaySonDetail, param)    //化验子项-详情
+    },
+    getConceptInfoAssay(param) {
+        return axios.post(urls.getConceptInfoAssay, param)    //化验子项-搜索术语
+    },
+    addAssaySon(param) {
+        return axios.post(urls.addAssaySon, param)    //化验子项-添加
+    },
+    delAssaySon(param) {
+        return axios.post(urls.delAssaySon, param)    //化验子项-删除/恢复
+    },
+    getConceptRelation(param) {
+        return axios.post(urls.getConceptRelation, param)    //术语关联-列表
+    },
+    getConceptRelationDet(param) {
+        return axios.post(urls.getConceptRelationDet, param)    //术语关联-详情
+    },
+    addConceptRelation(param) {
+        return axios.post(urls.addConceptRelation, param)    //术语关联-添加
+    },
+    delConceptRelation(param) {
+        return axios.post(urls.delConceptRelation, param)    //术语关联-删除/恢复
+    },
     multContactList(param) {    //知识库标准化-医学术语多层关联维护-列表
         return axios.post(urls.multContactList, param)
     },

+ 24 - 9
src/components/forgetPassword/FindPassword.vue

@@ -154,11 +154,13 @@
               if ((that.picTime--) <= 0) {
                 this.$message({
                   message: '图形验证码已过期',
-                  type: 'warning'
+                  type: 'warning',
+                  showClose: true
                 });
                 that.picCode = '';
                 that.picTime = 600//图形验证码过期时间10分钟;
                 window.clearInterval(that.picTimer);
+                that.picTimer = null
                 that.getPicCode();//过期刷新验证码
               }
             }, 1000);
@@ -166,7 +168,8 @@
           } else {
             this.$message({
               message: res.data.msg,
-              type: 'warning'
+              type: 'warning',
+              showClose: true
             });
 
           }
@@ -208,7 +211,8 @@
           if (!reg.test(this.phone)) {
             /*this.$message({
               message: '手机格式不正确',
-              type: 'warning'
+              type: 'warning',
+              showClose: true
             });*/
             // this.imgCodeErr = true;
             this.phoneErrText = "手机号格式有误";
@@ -222,7 +226,8 @@
                 this.phoneErrText = ''
                 this.$message({
                   message: res.data.msg,
-                  type: 'warning'
+                  type: 'warning',
+                  showClose: true
                 });
                 this.phone = "";
               }
@@ -234,7 +239,8 @@
         if(!this.phone){
           /*this.$message({
             message: '手机号不能为空',
-            type: 'warning'
+            type: 'warning',
+            showClose: true
           });*/
           // this.imgCodeErr = true;
           this.phoneErrText = "手机号不能为空";
@@ -254,7 +260,8 @@
               if (+res.data.code == 0) {
                 this.$message({
                   message: '验证码发送成功',
-                  type: 'success'
+                  type: 'success',
+                  showClose: true
                 });
                 //按钮倒计时
                 this.timerFlag = true;
@@ -272,11 +279,13 @@
                   if ((that.msgCodeTime--) <= 0) {
                     this.$message({
                       message: '短信验证码已过期,请重新获取',
-                      type: 'warning'
+                      type: 'warning',
+                      showClose: true
                     });
                     that.msgCode = '';
                     that.msgCodeTime = 180;
                     window.clearInterval(that.msgCodeTimer);
+                    that.msgCodeTimer = null;
                   }
                 }, 1000);
 
@@ -284,7 +293,8 @@
                 console.log(res.data);
                 this.$message({
                   message: res.data.msg,
-                  type: 'warning'
+                  type: 'warning',
+                  showClose: true
                 });
                 // return
               }
@@ -354,6 +364,10 @@
           api.vertifyMobileCode(params).then((res) => {
             // 验证成功,切换下一页
             if (+res.data.code == 0) {
+              clearInterval(this.msgCodeTimer);
+              clearInterval(this.picTimer);
+              this.picTimer = null;
+              this.msgCodeTimer = null;
               this.flag = 2;//切换下一页
               this.newPawComplete = true;
               this.imgCodeErr = false;
@@ -388,7 +402,8 @@
                 }else {
                   this.$message({
                     message: res.data.msg,
-                    type: 'warning'
+                    type: 'warning',
+                    showClose: true
                   });
                   this.newPsw = "";
                   this.newPswAgain = "";

+ 359 - 0
src/components/icss/AddAssaySon.vue

@@ -0,0 +1,359 @@
+<template>
+    <div class="assayBox" @click="close">
+        <crumbs
+          :title="'化验子项维护-'+titleText"
+          class="topBack"
+          linkTo="/admin/LT-YXSYKWH-HYZXWH"
+        ></crumbs>
+        <el-form :model="form" ref="ruleForm"  class="addDepartForm">
+            <p class="assayTitle">添加化验标准术语</p>
+            <el-form-item  class="addDepartFormItem"  v-if="!isEdit" label="添加:" prop="department">
+                <input class="searchInput"  @focus="focuInput" type="text" v-model = "searchConcept"> 
+                <span class="searchName" @click="searchDiag">搜索</span>
+                <ul class="itemList" v-show="conceptList.length>0">
+                    <li 
+                    v-for="item in conceptList" 
+                    class="diagItem ellipsis"
+                    :title="item.conceptName"
+                    @click="selectDiag(item)"
+                    :key="item.conceptId">
+                    {{item.conceptNameType||item.conceptName}}
+                    </li>
+                </ul>
+            </el-form-item>
+             <el-form-item class="isRequired" label="已选择化验标准术语:" prop="type">
+                {{form.conceptNameType||form.conceptName}}
+            </el-form-item>
+        </el-form>
+        <div class="symptomList">
+            <div class="screenIndex clearfix">
+                    <p class="assayTitle">化验子项添加</p>
+                    <label class="screenIndexLabel">添加:</label>
+                    <input class="searchInput"  @focus="focuInput" type="text" v-model = "searchIndexVal"> 
+                    <span class="searchName" @click="searchIndex">搜索</span>
+                    <ul class="itemList indexList" v-show="indexList.length>0">
+                        <li 
+                        v-for="item in indexList" 
+                        class="diagItem ellipsis"
+                        :title="item.conceptName"
+                        @click="selectIndex(item)"
+                        :key="item.conceptName">
+                        {{item.conceptNameType||item.conceptName}}
+                        </li>
+                    </ul>
+            </div>
+            <table class="indexTab">
+                
+                <tr>
+                    <td class="selectedContent">已选择内容</td>
+                    <td class="selectedContentOpera">操作</td>
+                </tr>
+                <tr v-for="(item, index) in selectedIndexList" :key="item.conceptId"> 
+                    <!-- <td class="selectedContent ">{{item.parentConceptName?item.conceptName+'('+item.parentConceptName+')':item.conceptName}}</td> -->
+                    <td class="selectedContent ">{{item.conceptNameType||item.conceptName}}</td>
+                    <td class="selectedContentOpera"><el-button type="text" size="small" class="delete" @click="delSelectedIndex(item, index)">删除</el-button></td>
+                </tr>
+            </table>
+        </div>
+        <div class="btn">
+            <el-button
+            type="primary"
+            @click="submitForm('ruleForm')"
+            >确 定</el-button>
+        </div>
+    </div>
+    
+</template>
+
+<script>
+  import api from '@api/icss.js';
+  export default {
+    name: 'AddAssaySon',
+    data() {
+      return{   
+        form: {
+            conceptId: '', 
+            conceptName:'' ,
+            conceptNameType:''
+        },
+        titleText: '添加化验子项',
+        conceptList: [],
+        indexList: [],
+        selectedIndexList: [],  //选择的同义词
+        searchConcept: '',
+        searchIndexVal: '',
+        isEdit: false,
+        nodeList:[] //化验子项列表
+      }
+    },
+    created(){
+        const { isEdit, data } = this.$route.params;
+        if(isEdit) {
+          this.isEdit = isEdit;
+          this.titleText = '修改化验子项';
+          this.form.conceptId = data.conceptId;
+          this.form.conceptName = data.conceptName;
+          this.form.conceptNameType = data.conceptNameType;
+          this.selectedIndexList = data.nodeList;
+        }
+    },
+    methods: {
+        close() {
+            this.conceptList = [];
+            this.indexList = [];
+        },
+        back(){
+            this.$router.go(-1);
+        },
+        searchDiag() {
+            const param = {
+              "name": this.searchConcept,
+              "relationId": 18,
+              "relationPosition": 1,
+              "typeId": 12
+            }
+            api.getConceptInfoAssay(param).then((res)=>{
+               if(res.data.code === '0') {
+                   this.conceptList = res.data.data
+                }
+            })
+        },
+        selectDiag(item) {
+            this.form.conceptId = item.conceptId;
+            this.form.conceptName = item.conceptName;
+            this.form.conceptNameType = item.conceptNameType;
+            this.searchConcept = '';
+            this.conceptList=[];
+        },
+        focuInput() {
+            // 聚焦时清空搜索结果?   
+        },
+        selectedTags() {//已选项ids
+          let selectedTags = []
+          for (let i =0; i < this.selectedIndexList.length; i++) {
+            selectedTags.push(this.selectedIndexList[i].conceptId)
+          }
+          return selectedTags
+        },
+        searchIndex() {
+           const notIds = this.selectedTags();
+           const param = {
+            "name": this.searchIndexVal,
+            "relationId": 18,
+            "relationPosition": 2,
+            "typeId": 13,
+            "relationConceptId":this.form.conceptId,
+            "excludedConceptIds":notIds
+          }
+          
+          api.getConceptInfoAssay(param).then((res)=>{
+             if(res.data.code === '0') {
+                 this.indexList = res.data.data;
+              }
+          })
+        },
+        selectIndex(item) {
+          this.selectedIndexList.push(item);
+          this.indexList = [];
+        },
+        delSelectedIndex(selectedItem, index) {
+            this.selectedIndexList.splice(index, 1)
+            this.nodeList.splice(index, 1)
+        },
+        submitForm(formName) {
+            if(!this.form.conceptId) {
+                this.warning('请选择化验标准术语')
+                return
+            }
+            if(this.selectedIndexList.length === 0) {
+                this.warning('请添加化验子项')
+                return
+            }
+            this.showDelDialog();
+        },
+        showDelDialog() {
+          const selected = this.selectedIndexList;
+          for (let i = 0; i < selected.length; i++) {
+            let item = {};
+            item.conceptId = selected[i].conceptId;
+            item.relationId = 18;
+            this.nodeList.push(item);
+          }
+          const param ={
+            "conceptId": this.form.conceptId,
+            "nodeList": this.nodeList,
+            "sonRelationId": 18
+          }
+          this.showConfirmDialog('是否建立该关联?', () => {
+              api.addAssaySon(param).then((res) => {
+              if (res.data.code  === '0') {
+                  this.warning(res.data.msg || '关联成功', 'success','1000')
+                  setTimeout(() => {
+                  this.$router.push({
+                      path:'/admin/LT-YXSYKWH-HYZXWH'
+                  })
+                  }, 1000);
+              } else {
+                  this.warning(res.data.msg)
+              }
+              }).catch((err) => {
+                  this.warning(err);
+              })
+          });
+        },
+        showConfirmDialog(msg, resolve) {
+            this.$alert(msg, '提示', {
+                confirmButtonText: '确定',
+                type: 'warning'
+            }).then(() => {
+                resolve();
+            }).catch(() => {});
+        },
+        warning(msg, type,time) {
+            this.$message({
+                showClose: true,
+                message: msg,
+                type: type || 'warning',
+                duration:time || '3000'
+            })
+        },
+    }
+  }
+</script>
+
+<style lang="less">
+    @import '../../less/common.less';
+    .assayBox {
+        color: #606266;
+        min-width: 980px;
+        .topBack {
+            top: 0;
+        }
+        .assayTitle{
+            font-weight: bold;
+            margin-bottom: 20px;
+        }
+        .groupTitle {
+            background-color: #fff;
+            height: 40px;
+            line-height: 40px;
+            padding-left: 20px;
+        }
+        
+        .searchInput, .searchName {
+            display: inline-block;
+            height: 32px;
+            line-height: 32px;
+            border: 1px solid #a9a9a9;
+            margin: 0px 0 0 0;
+            padding: 0 5px;
+            float: left;
+            margin-top: 4px;
+        }
+        .isRequired .el-form-item__label::before {
+            content: '*';
+            color: red;
+        }
+        .searchName {
+            border-left: none;
+            cursor: pointer;
+            font-size: 16px;
+            padding: 0 14px;
+        }
+        .itemList {
+            position: absolute;
+            // display: none;
+            background: #fff;
+            width: 162px;
+            max-height: 150px;
+            border: 1px solid #a9a9a9;
+            left: 54px;
+            top: 37px;
+            z-index: 2;
+            overflow-y: auto;
+        }
+        .diagItem {
+            padding: 0 5px;
+            height: 30px;
+            line-height: 30px;
+            font-size: 14px;
+            cursor: pointer;
+        }
+        .diagItem:hover {
+            background: #f5f7fa;
+        }
+        .addDepartForm {
+            position: relative;
+            background-color: #fff;
+            padding: 20px;
+            margin: 70px 20px 0px 20px;
+            border-bottom: 1px solid #c0c4cc;
+        }
+        .addDepartFormItem {
+            position: relative;
+        }
+        .symptomList {
+            background-color: #fff;
+             padding: 20px;
+             margin: 0px 20px 0px 20px;
+             min-height: 400px;
+        }
+        .screenIndexLabel {
+            float: left;
+            height: 40px;
+            line-height: 40px;
+            font-size: 14px;
+        }
+        .indexTab {
+            // width: 100%;
+            width: 600px;
+            border-collapse: collapse;
+            tr {
+                td {
+                    padding: 5px 10px;
+                    border-bottom: 1px solid #a9a9a9;
+                    text-align: center;
+                }
+            }
+            .selectedContent {
+                width: 25%;
+            }
+            .selectedContentGrop {
+                width: 55%;
+            }
+            .selectedContentOpera {
+                width: 20%;
+            }
+        }
+        .screenIndex {
+            width: 100%;
+            margin-bottom: 30px;
+            position: relative;
+        }
+        .indexList {
+            left: 42px;
+            top: 78px;
+        }
+        .groupInput {
+            text-align: center;
+            height: 28px;
+            color: #606266;
+            width: 60%;
+        }
+        .btn {
+            position: relative;
+            background-color: #fff;
+            margin: 0px 20px;
+            height: 40px;
+            padding: 20px;
+            .el-button {
+                position: absolute;
+                right: 20px;
+            }
+        }
+        .selectDepart {
+            
+        }
+    }
+    
+</style>

+ 504 - 0
src/components/icss/AddConceptRelation.vue

@@ -0,0 +1,504 @@
+<template>
+  <div class="addConceptRelationBox" @click="close">
+    <crumbs
+    :title="'医学术语关联维护-'+titleText"
+    class="topBack"
+    linkTo="/admin/LT-YXSYKWH-YXSYGLWH"
+    ></crumbs>
+    <el-form :model="form" ref="ruleForm"  class="addDepartForm">
+      <p class="assayTitle">选择医学标准术语</p>
+      <el-form-item  v-if="!isEdit" label="术语搜索:" prop="department">
+        <input class="searchInput"  @focus="focuInput" type="text" v-model = "searchDiagVal"> 
+        <span class="searchName" @click="searchDiag">搜索</span>
+        <!-- <ul class="itemList conceptList" ref="conceptList"> -->
+        <ul class="itemList" v-show="conceptList.length>0">
+          <li 
+          v-for="item in conceptList" 
+          class="diagItem ellipsis"
+          :title="item.conceptNameType"
+          @click="selectDiag(item)"
+          :key="item.conceptId">
+          {{item.conceptNameType||item.conceptName}}
+        </li>
+      </ul>
+    </el-form-item>
+    <el-form-item class="isRequired" label="已选择术语:" prop="type">
+      {{form.conceptNameType}}
+    </el-form-item>
+  </el-form>
+  <div class="symptomList">
+    <div class="bottomPartLeft fl">
+      <p class="assayTitle">关联标准术语</p>
+      <p class="symptomPoolTitle">术语搜索</p>
+      <el-form>
+        <el-form-item label="类型:">
+          <el-select v-model="type" placeholder="请选择" size="small">
+          <el-option 
+            v-for="item in typeList"
+            :key="item.key"
+            :label="item.name"
+            :value="item.key">
+          </el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+
+    <div class="symptomPool">
+      <el-input
+        placeholder="请输入搜索内容"
+        v-model="searchTagVal">
+        <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.conceptId'
+      :title="item.conceptNameType"
+      :style="getStyle(item)?styles:null"
+      @click='selectLeftTag(item, index)'
+      >
+      <!-- <p class="tagName ellipsis" >{{item.conceptName}} </p> -->
+      <p class="ellipsis" >{{item.conceptNameType}} </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 fl">
+  <p class="symptomPoolTitle">已选内容:</p>
+  <ul class="tagList operationPool">
+    <li class = "tagItem"
+    v-for="(item,index) in rightTagsList" 
+    :key='item.conceptId'
+    :style="index === selectRightTagIndex?styles:null"
+    @click='selectRightTag(index)'
+    >   
+    <!-- <p v-if="item.conceptName" class="tagName  ellipsis" :title="'[ '+item.conceptName+' ]'">{{item.conceptName}} </p> -->
+    <p v-if="item.conceptName" class="ellipsis" :title="item.conceptNameType">{{item.conceptNameType}} </p>
+  </li>
+</ul>
+
+</div>
+<div class="bottomPartMid fl" >
+  <p><span class="el-icon-arrow-up" @click="toUp"></span></p>
+  <p><span class="el-icon-arrow-down" @click="toDown"></span></p>
+</div>
+
+</div>
+<div class="btn">
+  <el-button
+  type="primary"
+  @click="submitForm('ruleForm')"
+  >确 定</el-button>
+</div>
+</div>
+
+</template>
+
+<script>
+import api from '@api/icss.js';
+export default {
+  name: 'AddConceptRelation',
+  data() {
+    return{
+      form: {
+        conceptId: '', 
+        conceptName:'',
+        conceptNameType:''
+      },
+      titleText: '添加',
+      conceptList: [],
+      searchDiagVal: '',
+      searchTagVal: '',
+      isEdit: false,
+      leftTagsList:[],
+      rightTagsList:[], //右侧已选的左侧不能再搜出--去重处理
+      selectLeftTagsList: [],
+      selectRightTagIndex: -1,
+      styles:{
+        background:'#eae7e7'
+      },
+      type:'',
+      typeList:[],
+      nodeList:[]
+    }
+  },
+        created(){
+          const { isEdit, data } = this.$route.params;
+          if(isEdit) {
+            this.titleText = '修改';
+            this.isEdit = isEdit;
+            this.rightTagsList = data.nodeList;
+            this.form.conceptId =data.conceptId;
+            this.form.conceptName =data.conceptName;
+            this.form.conceptNameType =data.conceptNameType;
+          }
+          let typeList = JSON.parse(localStorage.getItem("knowledgeEnumsData"));
+          this.typeList = typeList.lexiconTypeEnum;
+        },
+        watch: {
+          searchTagVal(newVal, preVal) {
+            if(newVal.trim() != preVal.trim()){
+              this.getTagList(false)
+            }
+          },
+          type(newVal,preVal){
+            if(newVal != preVal){
+              this.getTagList(true)
+            }
+          }
+        },
+        methods: {
+          close() {
+            this.conceptList =[];
+          },
+          back(){
+            this.$router.go(-1);
+          },
+          searchDiag() {
+          const param = {
+            "name": this.searchDiagVal,
+            "relationId": 17,
+            "relationPosition": 1
+          }
+          api.getConceptInfoAssay(param).then((res)=>{
+           if(res.data.code === '0') {
+             this.conceptList = res.data.data
+           }
+       })
+        },
+        selectDiag(item) {
+          this.form.conceptId = item.conceptId;
+          this.form.conceptName = item.conceptName;
+          this.form.conceptNameType = item.conceptNameType;
+          this.searchDiagVal = '';
+          this.conceptList=[];
+        },
+        focuInput() {
+
+        },
+        getTagList(flag) {
+          const notIds = this.selectedTags();
+          let param;
+          if(flag){
+            param = {
+              "name": this.searchTagVal,
+              "relationId": 17,
+              "relationPosition": 2,
+              "typeId": this.type, //选中类型的id
+              "relationConceptId":this.form.conceptId,
+              "excludedConceptIds":notIds
+            }
+          }else{// 单独搜索时不带类型限制
+            param = {
+              "name": this.searchTagVal,
+              "relationId": 17,
+              "relationPosition": 2,
+              "relationConceptId":this.form.conceptId,
+              "excludedConceptIds":notIds
+            }
+          }
+          api.getConceptInfoAssay(param).then((res)=>{
+           if(res.data.code === '0') {
+             this.leftTagsList = res.data.data
+           }
+         })
+        },
+        selectedTags() {//右侧选项ids
+          let selectedTags = []
+          for (let i =0; i < this.rightTagsList.length; i++) {
+            selectedTags.push(this.rightTagsList[i].conceptId)
+          }
+          return selectedTags
+        },
+        selectLeftTag(tag, index, e) {
+          const hasTag = this.isHasTag(tag, this.selectLeftTagsList)
+          if (hasTag) {
+            this.selectLeftTagsList = this.selectLeftTagsList.filter(item => item.conceptId !== tag.conceptId)
+          } else {
+            this.selectLeftTagsList.push(tag);
+          }
+        },
+        selectRightTag(index) {
+          this.selectRightTagIndex = this.selectRightTagIndex === index ? -1 : index
+        },
+        toRightList(){
+          if(this.selectLeftTagsList.length==0){
+            return
+          }
+          this.rightTagsList.push(...this.selectLeftTagsList);
+          this.selectLeftTagsList = [];
+          this.selectRightTagIndex = -1;
+          if(this.searchTagVal.trim()){
+            this.getTagList(false);
+          }else{
+            this.getTagList(true)
+          }
+        },
+        toLeftList(){
+          if(this.selectRightTagIndex == -1) {
+            return
+          }
+          this.rightTagsList.splice(this.selectRightTagIndex, 1)
+          this.selectLeftTagsList = [];
+          this.selectRightTagIndex -= 1;
+          if(this.searchTagVal.trim()){
+            this.getTagList(false);
+          }else{
+            this.getTagList(true)
+          }
+        },
+        toUp(){
+          if(this.selectRightTagIndex === 0 || this.selectRightTagIndex === -1) {
+            return
+          }
+          const tempItem = this.rightTagsList[this.selectRightTagIndex]
+          this.rightTagsList.splice(this.selectRightTagIndex, 1)
+          this.rightTagsList.splice(this.selectRightTagIndex-1, 0,tempItem)
+          this.selectRightTagIndex -= 1
+        },
+        toDown(){
+         if(this.selectRightTagIndex === this.rightTagsList.length-1 || this.selectRightTagIndex === -1) {
+          return
+        }
+        const tempItem = this.rightTagsList[this.selectRightTagIndex]
+        this.rightTagsList.splice(this.selectRightTagIndex, 1)
+        this.rightTagsList.splice(this.selectRightTagIndex+1, 0,tempItem)
+        this.selectRightTagIndex += 1
+
+      },
+
+      isHasTag(item, arr) {
+        for ( let i = 0; i <arr.length; i++) {
+          if(arr[i].conceptId === item.conceptId) {
+            return true;
+          }
+        }
+        return false;
+      },
+      getStyle(item){       //左侧选中状态
+        return this.isHasTag(item, this.selectLeftTagsList)
+      },
+      getStyle2(item) {
+        return this.isHasTag(item, this.selectRightTagsList)
+      },
+      submitForm(formName) {
+        if(!this.form.conceptId) {
+          this.warning('请选择术语')
+          return
+        }
+        if(this.rightTagsList.length === 0) {
+          this.warning('请添加关联术语')
+          return
+        }
+        this.showDelDialog()
+      },
+      showDelDialog() {
+        const rightTagsList = this.rightTagsList;
+        for (let i = 0; i < rightTagsList.length; i++) {
+          let item = {};
+          item.conceptId = rightTagsList[i].conceptId;
+          item.relationId = 17;
+          this.nodeList.push(item);
+        }
+        const param ={
+          "conceptId": this.form.conceptId,
+          "nodeList": this.nodeList,
+          "sonRelationId": 17
+        }
+        this.showConfirmDialog('是否建立该关联?', () => {
+          api.addConceptRelation(param).then((res) => {
+            if (res.data.code  === '0') {
+              this.warning(res.data.msg || '关联成功', 'success','1000')
+              setTimeout(() => {
+                this.$router.push({
+                  path:'/admin/LT-YXSYKWH-YXSYGLWH'
+                })
+              }, 1000);
+            } else {
+              this.warning(res.data.msg)
+            }
+          }).catch((err) => {
+            this.warning(err);
+          })
+        });
+      },
+      showConfirmDialog(msg, resolve) {
+        this.$alert(msg, '提示', {
+          confirmButtonText: '确定',
+          type: 'warning'
+        }).then(() => {
+          resolve();
+        }).catch(() => {});
+      },
+      warning(msg, type,time) {
+        this.$message({
+          showClose: true,
+          message: msg,
+          type: type || 'warning',
+          duration:time || '3000'
+        })
+      },
+    }
+  }
+    </script>
+
+    <style lang="less">
+    @import '../../less/common.less';
+    .addConceptRelationBox {
+      color: #606266;
+      font-size: 14px;
+      .topBack {
+        top: 0;
+      }
+      .groupTitle {
+        background-color: #fff;
+        height: 40px;
+        line-height: 40px;
+        padding-left: 20px;
+      }
+      .searchInput, .searchName {
+        display: inline-block;
+        height: 32px;
+        line-height: 32px;
+        border: 1px solid #a9a9a9;
+        margin: 0px 0 0 0;
+        padding: 0 5px;
+        float: left;
+      }
+      .isRequired .el-form-item__label::before {
+        content: '*';
+        color: red;
+      }
+      .searchName {
+        border-left: none;
+        cursor: pointer;
+        padding: 0 12px;
+        font-size: 16px;
+      }
+      .itemList {
+        position: absolute;
+        background: #fff;
+        width: 162px;
+        max-height: 150px;
+        border: 1px solid #a9a9a9;
+        left: 82px;
+        top: 33px;
+        z-index: 2;
+        overflow-y: auto;
+      }
+      .diagItem {
+        padding: 0 5px;
+        height: 30px;
+        line-height: 30px;
+        font-size: 14px;
+        cursor: pointer;
+      }
+      .diagItem:hover {
+        background: #f5f7fa;
+      }
+      .addDepartForm {
+        background-color: #fff;
+        // padding: 20px;
+        padding: 20px 20px 0 20px;
+        margin: 70px 20px 0px 20px;
+        border-bottom: 1px solid #a9a9a9;
+      }
+      .symptomList {
+        background-color: #fff;
+        padding: 20px;
+        margin: 0px 20px 0px 20px;
+        height: 500px;
+      }
+      .bottomPartLeft {
+        width: 32%;
+      }
+      .symptomPoolTitle {
+        height: 40px;
+        line-height: 40px;
+      }
+      .symptomPool {
+        width: 100%;
+        .el-input__inner {
+          border-radius: 0;
+        }
+      }
+      .tagList {
+        width: 100%;
+        height: 300px;
+        border: 1px solid @icssBorder;
+        box-sizing: border-box;
+        // border-top: none;
+      }
+      /* .tagList {
+        border: 1px solid @icssBorder;
+      } */
+      .tagPool {
+        height: 300px;
+        overflow-y: auto;
+        border-top: none;
+      }
+      .tagItem {
+        position: relative;
+        line-height: 30px;
+        cursor: pointer;
+        padding: 0 10px;
+      }
+      .tagName:before {
+        content: '['
+      }
+      .tagName::after {
+        content: ']'
+      }
+      .bottomPartMid {
+        width: 8%;
+        margin-top: 220px;
+        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 {
+        width: 32%;
+        margin-top: 101px;
+      }
+      .operationPool {
+        position: relative;
+        width: 100%;
+        height: 340px;
+        padding: 10px 0;
+        overflow-y: auto;
+      }
+      .btn {
+        position: relative;
+        background-color: #fff;
+        margin: 0px 20px;
+        padding: 20px;
+        .el-button {
+          position: absolute;
+          right: 20px;
+          top: -20px;
+        }
+      }
+      .assayTitle{
+        font-weight: bold;
+        margin-bottom: 20px;
+      }
+    }
+    
+    </style>

+ 4 - 4
src/components/icss/AddDisclInfo.vue

@@ -1,7 +1,7 @@
 <!-- 免责声明修改 By_liucf -->
 <template>
     <div>
-        <crumbs :title="topInfo" linkTo="/admin/LT-YXSJWH-MZSMWH">
+        <crumbs :title="topInfo" linkTo="/admin/LT-YXSJKWH-MZSMWH">
         </crumbs>
         <div class="contents">
             <el-form ref="form" :label-position="labelPosition" :model="form" :rules="rules" label-width="65px" class="add-discl-form">
@@ -95,7 +95,7 @@
       }
     },
     created(){
-      const params = JSON.parse(localStorage.getItem("icssEnumsData"));
+      const params = JSON.parse(localStorage.getItem("knowledgeEnumsData"));
       this.options = params.disclaimerCodeEnum;
       // 修改
       const data = this.$route.params.info;
@@ -141,7 +141,7 @@
               api.modifDiscInformation(param).then((res) => {
                 if (res.data.code == '0') {
                   this.$message({showClose: true,message: this.toast, type: 'success'});
-                  this.$router.push({path: 'LT-YXSJWH-MZSMWH'});
+                  this.$router.push({path: 'LT-YXSJKWH-MZSMWH'});
                 } else {
                   this.$message({
                     showClose: true,
@@ -165,7 +165,7 @@
               api.addDiscInformation(param).then((res) => {
                 if (res.data.code == '0') {
                   this.$message({showClose: true,message: this.toast, type: 'success'});
-                  this.$router.push({path: 'LT-YXSJWH-MZSMWH'});
+                  this.$router.push({path: 'LT-YXSJKWH-MZSMWH'});
                 } else {
                   this.$message({
                     showClose: true,

+ 178 - 59
src/components/icss/AddMedicalName.vue

@@ -9,21 +9,23 @@
           <tr>
             <td class="ind">序号</td>
             <td>标准词<span class="necess">*</span></td>
+            <td>拼音</td>
             <td>类型<span class="necess">*</span></td>
             <td class="desc">说明</td>
           </tr>
           <tr>
             <td class="ind">1</td>
             <td :title="data.name&&data.name.length>9?data.name:''">
-              <!-- <el-input v-model="data.name" placeholder="请输入术语" maxlength="30" size="small" @input.native="handleInput(1)"></el-input> -->
               <!-- 修改时标准词不能修改,修改了会当做新增处理 4-17 -->
               <p v-if="id">{{data.name}}</p>
-              <!-- <input v-else type="text" v-model="data.name" placeholder="请输入术语" maxlength="30" @input="handleInput(1)"> -->
               <!-- 4-18 需求变更 -->
               <input v-else type="text" v-model="data.name" placeholder="请输入术语" maxlength="30" @blur="handleBlur(1)">
             </td>
             <td>
-              <el-select v-if="!id" v-model="data.type" filterable placeholder="请选择" size="small">
+              <input type="text" v-model="data.spell" placeholder="请输入拼音" maxlength="30"  @input="handlePinyin">
+            </td>
+            <td>
+              <el-select v-if="!id" v-model="data.type" filterable placeholder="请选择" size="small" @change="selectType">
                 <el-option
                   v-for="item in typeList"
                   :key="item.id"
@@ -34,7 +36,6 @@
               <span v-else>{{data.type}}</span>
             </td>
             <td class="desc">
-              <!-- <el-input v-model="data.remark" placeholder="请输入术语说明" maxlength="120" size="small" @input="handleRemark"></el-input> -->
               <input v-model="data.remark" placeholder="请输入术语说明" maxlength="120"></input>
             </td>
           </tr>
@@ -44,6 +45,7 @@
             <tr>
               <td class="ind">序号</td>
               <td>术语</td>
+              <td>拼音</td>
               <td>类型</td>
               <td class="desc">说明</td>
               <td class="descs">术语性质</td>
@@ -54,18 +56,21 @@
               <td :title="item.name&&item.name.length>9?item.name:''">
                 <!-- 使用原生input,输入限制 -->
                 <!-- <el-input v-model="item.name" placeholder="请输入术语" maxlength="30" size="small" @input.native="handleInput(2,index)"></el-input> -->
-                <!-- <input type="text" v-model="item.name" placeholder="请输入术语" maxlength="30" @input="handleInput(2,index)"> -->
                 <input type="text" v-model="item.name" :title="item.name" placeholder="请输入术语" maxlength="30" @blur="handleBlur(2,index,99)" :disabled="!item.isEdit">
               </td>
+              <td v-if="!item.isEdit">
+                {{item.spell}}
+              </td>
+              <td v-else>
+                <input type="text" v-model="item.spell" placeholder="请输入拼音" maxlength="30"  @input="handlePinyin" class="spell">
+              </td>
               <td>
                 {{data.type}}
               </td>
               <td class="desc">
-                <!-- <el-input v-model="item.remark" placeholder="请输入术语说明" maxlength="120" size="small" @input="handleRemark(index,item.name)"></el-input> -->
                 <input v-model="item.remark" placeholder="请输入术语说明" maxlength="120"></input>
               </td>
               <td class="desc">
-                <!-- <el-input v-model="item.remark" placeholder="请输入术语说明" maxlength="120" size="small" @input="handleRemark(index,item.name)"></el-input> -->
                 {{item.isConcept == 1?"标准词":"同义词"}}
               </td>
               <td v-if="id">
@@ -74,12 +79,12 @@
               </td>
             </tr>
             <tr @click="addSpan(55)">
-              <td colspan="6" class="addSpan">+</td>
+              <td colspan="7" class="addSpan">+</td>
             </tr>
           </table>
           <div class="actionDo">
             <div class="btnWrap">
-              <el-button type="primary" size="mini" v-if="show" @click="comfirn(14)">确认修改</el-button>
+              <!-- <el-button type="primary" size="mini" v-if="show" @click="comfirn(14)">确认修改</el-button> -->
               <el-button plain size="mini" v-if="show" @click="toggleShow(1)">放弃修改</el-button>
               <el-button plain size="mini" @click="toggleShow(2)" v-if="!show">修改标准词</el-button>
             </div>
@@ -95,6 +100,7 @@
           <tr>
             <td class="ind">序号</td>
             <td>术语</td>
+            <td>拼音</td>
             <td>类型</td>
             <td class="desc">说明</td>
             <td v-if="id">操作</td>
@@ -104,14 +110,15 @@
             <td :title="item.name&&item.name.length>9?item.name:''">
               <!-- 使用原生input,输入限制 -->
               <!-- <el-input v-model="item.name" placeholder="请输入术语" maxlength="30" size="small" @input.native="handleInput(2,index)"></el-input> -->
-              <!-- <input type="text" v-model="item.name" placeholder="请输入术语" maxlength="30" @input="handleInput(2,index)"> -->
               <input type="text" v-model="item.name" placeholder="请输入术语" maxlength="30" @blur="handleBlur(2,index)">
             </td>
+            <td>
+              <input type="text" v-model="item.spell" placeholder="请输入拼音" maxlength="30"  @input="handlePinyin">
+            </td>
             <td>
               {{data.type}}
             </td>
             <td class="desc">
-              <!-- <el-input v-model="item.remark" placeholder="请输入术语说明" maxlength="120" size="small" @input="handleRemark(index,item.name)"></el-input> -->
               <input v-model="item.remark" placeholder="请输入术语说明" maxlength="120"></input>
             </td>
             <td v-if="id">
@@ -122,6 +129,29 @@
             <td :colspan="colspan" class="addSpan">+</td>
           </tr>
         </table>
+        <div class="moreInfo" v-if="showMore==1">
+          <p>更多信息:</p>
+          <el-form>
+            <el-form-item label="性别:">
+                <el-select v-model="sexType">
+                    <el-option v-for="(it,i) in sex" :label="it.name" :value="it.name"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="年龄:" class="ages">
+                <el-input
+                  v-model.number="minAge"
+                  type="number"
+                  @input="inputAge">
+                </el-input>
+                <span class="ageLine">~</span>
+                <el-input
+                v-model.number="maxAge"
+                type="number"
+                @input="inputAge"
+              ></el-input>
+            </el-form-item>
+          </el-form> 
+        </div>
         <div class="btn">
           <el-button
             type="primary"
@@ -134,6 +164,7 @@
 </template>
 <script type="text/javascript">
 import api from '@api/icss.js';
+import pinyin from '../../js/Convert_Pinyin.js';
   export default {
     name:'AddMedicalName',
     data(){
@@ -143,7 +174,8 @@ import api from '@api/icss.js';
           name:'',
           type:'',
           remark:'',
-          isConcept:1
+          isConcept:1,
+          spell:''
         },
         radioVal:'',
         typeList:[],
@@ -151,12 +183,30 @@ import api from '@api/icss.js';
         synonymous:[],//同义词
         singleword:[],
         allwords:[],//标准词和同义词
-        colspan:4,
-        colspans:5,
+        colspan:5,
+        colspans:6,
         currentPage:1,
         pageSize:10,
         show:false,
-        tmpSynonymous:[]
+        tmpSynonymous:[],
+        sexType:'通用',
+        maxAge:200,
+        minAge:0,
+        showMore:'',
+        sex:[
+          {
+            name:'通用',
+            value:3
+          },
+          {
+            name:'男',
+            value:1
+          },
+          {
+            name:'女',
+            value:2
+          }
+        ]
       }
     },
     created(){
@@ -207,6 +257,16 @@ import api from '@api/icss.js';
               this.singleword = result.data.libName;
               this.synonymous = result.data.otherNames;
               this.allwords = (result.data.libName).concat(result.data.otherNames);
+              this.showMore = result.data.isHasCommon;
+              this.maxAge = result.data.maxAge;
+              this.minAge = result.data.minAge;
+              // this.sexType = result.data.sexType;
+              let sexType = result.data.sexType;
+              this.sex.map((v,i)=>{
+                if(v.value==sexType){
+                  this.sexType = v.name;
+                }
+              })
             }else{
               this.$message({
                 message:result.msg,
@@ -244,69 +304,59 @@ import api from '@api/icss.js';
       },*/
       handleBlur(type,index,flg){
         // 不能为纯数字、纯字符、纯数字加字符 4-18
-        const pattern = /[^~@#$%^&*_\-+=,,.。::"“??”;;、!!0-9]/g;
+        // const pattern = /[^~@#$%^&*_\-+=,,.。::"“??”;;、!!0-9]/g;
+        // 需求更改:不能为纯数字,其余均可输入 5-20
+        const pattern = /[^0-9]/g;
         if(type==1){//标准词输入
-          if(!pattern.test(this.data.name)){
+          if(this.data.name && !pattern.test(this.data.name)){
             this.$message({
-              message:'无法输入纯数字或者纯字符,请输入正确数据!',
+              // message:'无法输入纯数字或者纯字符,请输入正确数据!',
+              message:'无法输入纯数字,请输入正确数据!',
               type:'warning'
             });
             this.data.name = '';
+          }else{
+            let data = this.data;
+            data.spell = pinyin.getCamelChars(data.name);
           }
-        }else{
+        }else if(type==2){
+          // 修改时术语名称、拼音和类型均不能修改
           if(flg == 99){
-            if(!pattern.test(this.synonymous[index-1].name)){
+              if(this.synonymous[index-1].name && !pattern.test(this.synonymous[index-1].name)){
               this.$message({
-                message:'无法输入纯数字或者纯字符,请输入正确数据!',
+                // message:'无法输入纯数字或者纯字符,请输入正确数据!',
+                message:'无法输入纯数字,请输入正确数据!',
                 type:'warning'
               });
               this.synonymous[index-1].name = '';
+            }else{
+              let current = this.synonymous[index-1];
+              current.spell = pinyin.getCamelChars(current.name);
             }
           }else{
-            if(!pattern.test(this.synonymous[index].name)){
+            if(this.synonymous[index].name && !pattern.test(this.synonymous[index].name)){
               this.$message({
-                message:'无法输入纯数字或者纯字符,请输入正确数据!',
+                message:'无法输入纯数字,请输入正确数据!',
                 type:'warning'
               });
               this.synonymous[index].name = '';
+            }else{
+              let current = this.synonymous[index];
+              current.spell = pinyin.getCamelChars(current.name);
             }
           }
         }
       },
-      // handleRemark(index,name){
-      handleRemark(type,index){
-      //说明只能输入中文
-        // if(!name){//标准词输入
-        /*if(type==1){//标准词输入
-          this.data.remark = this.data.remark.replace(/[^\u4e00-\u9fa5]/g,'');
-        }else{
-          this.synonymous[index].remark = this.synonymous[index].remark.replace(/[^\u4e00-\u9fa5]/g,'');
-        }*/
-        const pattern = /[^~@#$%/^&*_\-+=,,.。::"“??”;;、!!0-9]/g;
-        if(type==1){//标准词输入
-          if(!pattern.test(this.data.remark)){
-            this.$message({
-              message:'无法输入纯数字或者纯字符,请输入正确数据!',
-              type:'warning'
-            });
-            this.data.remark = '';
-          }
-        }else{
-          if(!pattern.test(this.synonymous[index].remark)){
-            this.$message({
-              message:'无法输入纯数字或者纯字符,请输入正确数据!',
-              type:'warning'
-            });
-            this.synonymous[index].remark = '';
-          }
-        }
+      handlePinyin(e){//只能输入英文
+        e.target.value = e.target.value.replace(/[^a-zA-Z]/g,'');
       },
       addSpan(type){
         let singleSpan = {
           name:'',
           remark:'',
           isConcept:0,
-          isEdit:true
+          isEdit:true,
+          spell:null
         }
         if(type == 55){
           this.allwords.push(singleSpan);
@@ -348,6 +398,11 @@ import api from '@api/icss.js';
           this.warning('请选择术语类型');
           return
         }
+        // 处于修改标准词状态且没有选中,不能保存
+        if(this.show && !this.radioVal){
+          this.warning('请先选择标准词');
+          return
+        }
         // 过滤同义词空数据
         let realData=[];
         if(this.id){//修改用暂存的列表
@@ -370,34 +425,65 @@ import api from '@api/icss.js';
             return item.name;
           })
         }
-        console.log(realData,787887)
+        
         let detailList = [];
         detailList[0] = this.data;
         for(let i=0; i<realData.length; i++){
           realData[i].type = this.data.type;
           detailList.push(realData[i]);
         }
-        const params = {
-          'name':this.data.name,
-          'type':this.data.type,
-          'detailList':detailList,
-          'conceptId':this.id
+        let params;
+        if(this.showMore==1){
+          // 下拉文字转code
+          let sexCode;
+          this.sex.map((v,i)=>{
+            if(v.name==this.sexType){
+              sexCode = v.value;
+            }
+          })
+          params = {
+            'name':this.data.name,
+            'type':this.data.type,
+            'detailList':detailList,
+            'conceptId':this.id,
+            'sexType':sexCode,
+            'maxAge':this.maxAge,
+            'minAge':this.minAge
+          }
+        }else{
+          params = {
+            'name':this.data.name,
+            'type':this.data.type,
+            'detailList':detailList,
+            'conceptId':this.id
+          }
         }
         api.addMedicalName(params).then((res)=>{
           const result = res.data;
           if(result.code==0){
             this.warning(res.data.msg||'操作成功','success');
-            if(flg == 14){
+            this.$router.push({name:'MedicalName'});
+            /*if(flg == 14){
               this.getDetail(this.id)
               this.radioVal = ''
               this.show = false
             }else{
               this.$router.push({name:'MedicalName'});
-            }
+            }*/
           }else{
             this.warning(res.data.msg);
           }
         })
+      },
+      inputAge(){
+        console.log("输入年龄")
+      },
+      selectType(e){
+        this.typeList.map((v,i)=>{
+          if(v.name==e){
+            this.showMore = v.isHasCommon;
+          }
+        })
       }
     }
   }
@@ -491,4 +577,37 @@ import api from '@api/icss.js';
     color: red;
     margin-left: 2px;
   }
+  .moreInfo{
+    border-top: 1px solid #c0c4cc ;
+    margin-top: 45px;
+    p{
+      margin:15px 0;
+    }
+  }
+  .spell{
+    text-align: center;
+  }
+  /deep/.ages{
+    margin-top: 20px;
+    .el-input {
+       display: inline-block;
+       width: auto;
+       .el-input__inner {
+         width: 60px;
+         padding: 0 5px;
+         text-align: center;
+       }
+       .el-input__inner::-webkit-outer-spin-button,
+       .el-input__inner::-webkit-inner-spin-button {
+         -webkit-appearance: none;
+       }
+       .el-input__inner[type="number"] {
+         -moz-appearance: textfield;
+       }
+     }
+     .ageLine{
+      display: inline-block;
+      margin: 0 35px;
+     }
+   }
 </style>

+ 10 - 7
src/components/icss/AddMedicalRelation.vue

@@ -34,14 +34,15 @@
               <span>{{data.startType}}</span>
             </td>
             <td>
-              <el-select v-model="data.relationName" clearable placeholder="请选择" size="mini">
+              <!-- <el-select v-model="data.relationName" clearable placeholder="请选择" size="mini">
                 <el-option
                   v-for="item in relationList"
                   :key="item.id"
                   :label="item.name"
                   :value="item.name">
                 </el-option>
-              </el-select>
+              </el-select> -->
+              <span>{{data.relationName}}</span>
             </td>
             <td>
               <span>{{data.endName}}</span>
@@ -55,7 +56,7 @@
           <el-button
             type="primary"
             @click="comfirn"
-          >确 定</el-button>
+          >建立术语关系</el-button>
         </div>
       </div>
     </div>
@@ -70,7 +71,7 @@
         data:{
           startName:'',
           startType:'',
-          relationName:'',
+          relationName:'包含',
           endName:'',
           endType:''
         },
@@ -82,10 +83,11 @@
       }
     },
     created(){
-      this.getRelationList();
+      // 关系只有“属于”,前端写死 5-16
+      // this.getRelationList();
     },
     methods:{
-      getRelationList(){//获取关系下拉
+      /*getRelationList(){//获取关系下拉
         const param = {
           'code':'',
           'name':''
@@ -101,8 +103,9 @@
             })
           }
         })
-      },
+      },*/
       comfirn(){
+        // 添加页面关系已经写死“属于”
         if(!this.data.startName.trim() || !this.data.relationName.trim() || !this.data.endName.trim()){
           this.$message({
             type:'warning',

+ 52 - 78
src/components/icss/AddMedicinePrompt.vue

@@ -1,9 +1,5 @@
 <template>
     <div class="NoiseTemplateWrapper TemplateWrapper">
-        <!-- <div class="groupTitle"><i
-                class="el-icon-back"
-                @click="back"
-        ></i> 医学静态知识--{{isEdit?'修改':'添加'}}</div> -->
         <crumbs
           :title=" isEdit? '医学术语静态知识维护-修改':'医学术语静态知识维护-添加'"
           class="topBack"
@@ -14,43 +10,29 @@
                      :model="form"
                      label-width="160px"
                      ref="groups">
-                <el-form-item v-if="!isEdit" label="选择医学标准术语:" prop="selectedTerm">
+                <el-form-item v-if="!isEdit" label="选择标准术语:" prop="selectedTerm">
                     <el-select v-model="form.selectedTerm"
                                filterable
                                remote
                                clearable
                                value-key="conceptId"
                                ref="termName"
-                               placeholder="搜索术语"
+                               placeholder="搜索"
                                :remote-method="searchTerms">
-                        <el-option v-for="term in terms" :key="term.conceptId" :label="term.nameAndType" :value="term" ></el-option>
+                        <el-option v-for="term in terms" :key="term.conceptId" :label="term.name" :value="term" ></el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item label="已选择医学标准术语:" label-width="160px">
+                <el-form-item label="已选择标准术语:" label-width="160px">
                     {{form.selectedTermName}}
                 </el-form-item>
-                <el-form-item label="术语类型:">
-                    {{form.selectedTermType}}
-                    <!--<el-select  filterable
-                                remote
-                                clearable
-                                v-model="form.termType"
-                                placeholder="搜索术语类型">
-                        <el-option v-for="it in termTypes" :label="it.name" :value="it.name" :key="it.id"></el-option>
-                    </el-select>-->
-                </el-form-item>
                 <p class="line"></p>
-                <el-form-item label="添加静态知识" style="font-weight: bold">
-                </el-form-item>
-                <el-form-item label="静态知识来源:" prop="source">
-                    <el-input v-if="!isEdit" v-model="form.source" placeholder="输入静态知识来源"></el-input>
-                    {{isEdit?form.source:''}}
-                </el-form-item>
-                <InfoParagraph :data="form.prags[0]"
-                               :index="0"
-                               :len="1"
+                <InfoParagraph v-for="(f,i) in form.prags"
+                               :data="f"
+                               :index="i"
                                :isEdit = "isEdit"
-                               ref="subForm"></InfoParagraph>
+                               ref="subForm"
+                               @add="addParagraph(i)"
+                               @del="delParagraph"></InfoParagraph>
             </el-form>
             <div class="btn">
                 <el-button
@@ -67,6 +49,7 @@
    */
   import api from '@api/icss.js';
   import InfoParagraph from './MedicineInfoPg';
+  import config from '@api/config';
 
   export default {
     name: 'AddMedicinePrompt',
@@ -87,7 +70,6 @@
           isTip:0,                 //是否要覆盖,0不覆盖,1覆盖
           selectedTerm:'',            //术语标签
           termType:'',
-          source:'',
           selectedTermName:'',
           selectedTermType:'',
           prags:[{              //单个段落相关
@@ -99,15 +81,6 @@
             text:''}]
         },
         rules: {
-          source: [
-            { required: true, message: '请输入静态知识来源', trigger: 'change' },
-            { validator: (rule,value,callback)=>{
-                if(value.length>30){
-                  callback(new Error('段落标题不能超过30字'));
-                }else{
-                  callback();
-                }}, trigger: 'change' }
-          ],
           selectedTerm: [
             { required: true, message: '请选择术语标签', trigger: 'change' }
           ]
@@ -117,54 +90,58 @@
     watch:{
       'form.selectedTerm':function(newVal){
         const name = newVal.name;
-        //this.editData.selectedTermName = name;
         this.form.selectedTermName = name;
-        this.form.selectedTermType = newVal.type;
         this.form.conceptId = newVal.conceptId;
       }
     },
     created:function(){
       const {isEdit,data} = this.$route.params;
-      //this.getTermTypes();
       if(isEdit){
         this.isEdit = isEdit;
-        /*api.getTremList({term:data.name,type:data.type}).then((res) => {
+        this.form.selectedTermName = data.libName;
+        this.form.conceptId = data.conceptId;
+        api.getTremList({conceptId:data.conceptId}).then((res) => {
           if (res.data.code == '0') {
             const data = res.data.data;
-            this.form.prags=data.information&&data.information.map((it)=>{
-              return {title:it.title,position:this.mapStringToNum(it.position),content:it.content,isReason:it.isReason};
+            this.form.prags=data&&data.map((it)=>{
+              return {
+                        title:it.title,
+                        position:this.mapStringToNum(it.position),
+                        content:it.content.replace('{imageUrlPrefix}',config.imgHost),
+                        isReason:it.isReason,
+                        text:it.text,
+                        disabled:true};
             });
-            console.log(data)
+
           }
         }).catch((error) => {
           console.log(error);
-        });*/
-        this.form.selectedTermName = data.conceptName;
-        this.form.selectedTermType = data.conceptType;
-        this.form.source = data.source;
-        this.form.conceptId = data.conceptId;
-        this.form.prags[0].content = data.content;
-        this.form.prags[0].isReason = data.isReason;
-        this.form.prags[0].position=this.mapStringToNum(data.position);
-        this.form.prags[0].title = data.title;
+        });
       }
     },
     methods: {
-      back() { this.$router.go(-1) },
-      async getTermTypes(){
-        let types = localStorage.getItem('termTypes');
-        if(!types){
-          types = await api.getAllType();
-          if(types.data.code=='0'){
-            this.termTypes = types.data.data.records;
-          }
-        }else{
-          this.termTypes = JSON.parse(types).records;
+      addParagraph(i){
+        this.form.prags.push({
+          title:'',
+          content:'',
+          isReason:0,
+          orderNo:this.form.prags.length,
+          position:[],
+          text:''});
+      },
+      delParagraph(i){
+        if(this.form.prags.length==1){
+          this.warning('只剩一个段落,不能再删啦!');
+          return;
         }
+        this.showConfirmDialog('确定要删除该段落?', () => {
+          this.form.prags.splice(i,1);
+        });
       },
+      back() { this.$router.go(-1) },
       searchTerms(query){
         //搜索术语列表
-        api.getAllConcept({name:query,isConcept:1}).then((res) =>{
+        api.getAllConcept({name:query}).then((res) =>{
           if(res.data.code === '0') {
             this.terms = res.data.data;
           }else{
@@ -187,26 +164,26 @@
           }
         });
         //验证段落表单
-        //for(let i=0;i<this.$refs.subForm.length;i++){
-          it=this.$refs.subForm;
+        for(let i=0;i<this.$refs.subForm.length;i++){
+          it=this.$refs.subForm[i];
           it.$refs.form.validate((valid) =>{
             if(!valid){
               goOn = false;
             }
           });
-        //};
+        };
 
         if(!goOn){
           return;
         }
         //通过必填验证,提交保存
-        const item=this.form.prags[0];
-        const param = Object.assign({},item,{
-                                                position:typeof item.position=='string'?item.position:item.position.join(","),
-                                                source:this.form.source,
-                                                conceptId:this.form.conceptId,
-                                                isTip:1,
-                                              });
+        const item=this.form.prags;
+        const param =item.map((it)=>{
+          return Object.assign({},it,{
+                                        position:typeof it.position=='string'?it.position:it.position.join(","),
+                                        conceptId:this.form.conceptId,
+                                        content:it.content.replace(config.imgHost,'{imageUrlPrefix}')});
+        });
         this.showSaveDialog(param,'是否保存该静态知识?');
       },
       showSaveDialog(param,msg) {
@@ -215,9 +192,6 @@
             if (res.data.code === '0') {
               this.warning(res.data.msg || '保存成功', 'success');
               this.$router.push("/admin/LT-YXSYKWH-YXSYJTZSWH");
-            } else if(res.data.code === '00000002'){
-              //已存在,选择是否覆盖
-              this.showSaveDialog(Object.assign({},param,{isTip:0}),res.data.msg);
             } else {
               this.warning(res.data.msg)
             }

+ 202 - 0
src/components/icss/AssaySon.vue

@@ -0,0 +1,202 @@
+<template>
+    <div>
+        <crumbs title="化验子项维护" style="min-width: 980px">
+            <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="标准术语:">
+                    <el-input size="mini" v-model="conceptName" placeholder="术语名称" clearable></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                    <el-button size="mini" type="warning" @click="addRelation">添加化验子项</el-button>
+                </el-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table
+                :data="list"
+                border
+                style="width: 100%">
+                <el-table-column
+                    :resizable = "false"
+                    type="index"
+                    :index = 'indexMethod'
+                    label="编号"
+                    width="60">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="operTime"
+                    label="操作时间"
+                    width="180">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="libName"
+                    label="标准术语"
+                    show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="otherNames"
+                    label="子项"
+                    show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                    label="状态"
+                    show-overflow-tooltip>
+                    <template slot-scope="scope">
+                      <span :class="scope.row.isDeleted == 'N'?'':'delete'">
+                        {{scope.row.isDeleted == 'N'?'启用中':'已删除'}}
+                      </span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="operName"
+                    label="操作人">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="operate"
+                    label="操作">
+                    <template slot-scope="scope">
+                        <el-button  @click="modifyRelation(scope.row)" type="text" size="small" :disabled="scope.row.isDeleted != 'N'">修改</el-button>
+                        <span style="margin:0 3px;">|</span>
+                        <el-button @click="showDelDialog(scope.row)" :class="scope.row.isDeleted == 'N'?'delete':'review'" type="text" size="small">{{scope.row.isDeleted == 'N'?'删除':'恢复'}}</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        <div class="pagination">
+            <el-pagination v-if="total>pageSize"
+                       :current-page.sync="currentPage"
+                       @current-change="currentChange"
+                       background
+                       :page-size="pageSize"
+                       layout="total,prev, pager, next, jumper"
+                       :total="total">
+            </el-pagination>
+        </div>       
+        </div>      
+    </div>
+</template>
+
+<script>
+import api from '@api/icss.js';
+
+export default {
+    name: 'AssaySon',   //慢病指标值关联维护
+    data: function() {
+        return {
+            list: [],
+            conceptName:'',
+            currentPage: 1,
+            pageSize: 10,
+            total: 0,
+        }
+    },
+    created() {
+        this.getDataList()
+        
+    },
+    methods: {
+        getDataList() {
+            const param = this.getFilterItems();
+            api.getAssaySon(param).then((res) => {
+                if(res.data.code == '0') {
+                    this.list = res.data.data.records
+                    this.total = res.data.data.total;
+                }
+            })
+        },
+        filterDatas() {
+            this.currentPage = 1;
+            this.getDataList();
+        },
+        addRelation() {
+            this.$router.push({name:'AddAssaySon'})
+        },
+        modifyRelation(row) {
+            const param = {
+                conceptId: row.conceptId,
+                relationId:18
+            }
+            api.getAssaySonDetail(param).then((res) => {
+                if(res.data.code == '0') {
+                    // const item = Object.assign({},row,{data: res.data.data});
+                    const item = res.data.data;
+                    this.$router.push({name:'AddAssaySon',params:{isEdit:true,data:item}});
+                }
+            })
+        },
+        currentChange(next) {
+            this.currentPage = next;
+            this.getDataList();
+        },
+        getFilterItems() {
+            const param = {
+                current: this.currentPage,
+                size: this.pageSize,
+                name:this.conceptName
+            };
+            return param;
+        },
+        indexMethod(index) {
+            return ((this.currentPage - 1) * this.pageSize) + index + 1;
+        },
+        getTagType(val) {
+            return val
+        },
+        warning(msg,type){
+          this.$message({
+            showClose: true,
+            message:msg,
+            type:type||'warning'
+          })
+        },
+        showConfirmDialog(msg,resolve){
+          this.$alert(msg, '提示', {
+            confirmButtonText: '确定',
+            type: 'warning'
+          }).then(() => {
+            resolve();
+          }).catch(() => {});
+        },
+        showDelDialog(row){
+          const param = {
+            "conceptId": row.conceptId,
+            "isDeleted": row.isDeleted=== 'N'?'Y':'N',
+            "relationId": 18
+          }
+          this.showConfirmDialog('是否删除该关联?',()=>{
+            api.delAssaySon(param).then((res)=>{
+              if(res.data.code=='0'){
+                this.getDataList();
+                this.warning(res.data.msg || '操作成功','success');
+              }else{
+                this.warning(res.data.msg);
+              }
+            }).catch((error)=>{
+              this.warning(error);
+            })
+          });
+        }
+    }
+}
+</script>
+
+
+<style lang="less">
+    @import "../../less/admin.less";
+    .delete{
+       color: red;
+    }
+    .delete:hover {
+        color: red;
+    } 
+    .review{
+      color: #22ccc8;
+    }
+    .pagination {
+        min-width: 1010px;
+    }
+</style>

+ 406 - 312
src/components/icss/BloodPressTagGroup.vue

@@ -1,5 +1,5 @@
 <template>
-    <div class="symptomTagGroupWrapper clearfix">
+  <div class="symptomTagGroupWrapper clearfix">
     <div class="bottomPartLeft">
       <p class="poolTitle">标签池</p>
       <div class="pool">
@@ -7,48 +7,72 @@
           placeholder="请输入搜索内容"
           v-model="searchVal"
         >
-            <i
-                slot="prefix"
-                class="el-input__icon el-icon-search"
-            ></i>
+          <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'
-                :title="'[ '+item.tagName+' ]'"
-                :style="getStyle(item)?styles:null"
-                @click='selectLeftTag(item, index, $event)'
-            >
-                <p class="tagName ellipsis" >{{item.tagName}} </p>
-            </li>
+          <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>
+      <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>
+      <div class="poolTitle clearfix">
+        <span class="fl">操作界面:</span>
+        <div class="arrowWrap fr">
+          <i
+            class="el-icon-arrow-left arrowWrapPub"
+            @click="toggleTopDownList(1)"
+          ></i>
+          <i
+            class="el-icon-arrow-right arrowWrapPub"
+            @click="toggleTopDownList(2)"
+          ></i>
+        </div>
+      </div>
       <ul class="tagList operationPool templateTagList">
-            <li class = "tagItem operationItem"
-                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  ellipsis" :title="'[ '+item.tagName+' ]'">{{item.tagName}} </p>
-            </li>
-        </ul>
+        <li
+          class="tagItem operationItem"
+          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  ellipsis"
+            :title="'[ '+item.tagName+' ]'"
+          >{{item.tagName}} </p>
+        </li>
+      </ul>
     </div>
   </div>
 </template>
@@ -57,307 +81,377 @@ 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
-        },
-        sexType: {
-            default: '',
-            type: String
-        },
-        options: {
-            default: () => [],
-            type: Array
-        },
+  name: "BloodPressTagGroup",
+  props: {
+    pool: {
+      default: () => [],
+      type: Array
     },
-    data() {
-        return {
-            leftTagsList: [],
-            selectLeftTagsList: [],
-            rightTagsList: [],
-            rightTagsList2: [],
-            selectRightTagsList: [],
-            searchVal: '',
-            styles:{
-                background:'#eae7e7'
-            },
-        }
+    type: {
+      default: '',
+      type: String
     },
-    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+',,,,'})
-                }
-            }
+    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.$emit('changeActionData',this.rightTagsList2, false);
+      }
+    }
+    this.rightTagsList2 = newArr
+    this.$emit('changeActionData', this.rightTagsList2, false);
+    this.searchTagList()
+    // this.leftTagsList = this.pool
+    // console.log('TAGPOOL', this.pool)
+  },
+  watch: {
+    pool(newVal, preVal) {
+      this.leftTagsList = newVal
+    },
+    searchVal(newVal, preVal) {
+      if (newVal.trim() == '') {
         this.searchTagList()
-        // this.leftTagsList = this.pool
-        // console.log('TAGPOOL', this.pool)
+      } else if (newVal.trim() != preVal.trim()) {
+        this.searchTagList()
+      }
     },
-    watch: {
-        pool(newVal, 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();
-                }
-            }
-        },
-        
-        
+    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);
+
+
+  },
+  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) {
+      if (tag.type == 'input') {
+        return;
+      }
+      let tmpArr = [];
+      tmpArr.push(tag);
+      if (this.selectRightTagsList.length > 0 && tag.id == this.selectRightTagsList[0].id) {
+        this.selectRightTagsList = this.selectRightTagsList.filter(item => item.id !== tag.id)
+      } else {
+        this.selectRightTagsList = tmpArr;
+      }
+      // const hasTag = this.isHasTag(tag, this.selectRightTagsList)
+      // if (hasTag) {
+      //   this.selectRightTagsList = this.selectRightTagsList.filter(item => item.id !== tag.id)
+      // } else {
+      //   this.selectRightTagsList.push(tag);
+      // }
+
+    },
+    toggleTopDownList(type) {
+      if (this.selectRightTagsList.length == 0 || this.rightTagsList2.length == 0) {
+        return
+      }
+      const tmpRightSelect = JSON.parse(JSON.stringify(this.selectRightTagsList))
+      const tmpRightLis = JSON.parse(JSON.stringify(this.rightTagsList2))
+      const numLen = tmpRightLis.length
+      const numId = tmpRightSelect[0].id
+      if (type == 1) {
+        for (let i = 0; i < tmpRightLis.length; i++) {
+          if (numId === tmpRightLis[i].id) {//选中的是第几个
+            if (i == 1) {//第一个不能往上移动
+              return;
+            } else {//先把这个元素和后面的输入框从数组中删除,再添加到数组里
+              let tmp1 = tmpRightLis[i]
+              let tmp2 = tmpRightLis[i + 1]
+              tmpRightLis.splice(i, 1)
+              tmpRightLis.splice(i, 1)
+              tmpRightLis.splice(i - 2, 0, tmp1)
+              tmpRightLis.splice(i - 1, 0, tmp2)
+              this.rightTagsList2 = [...tmpRightLis]
+              this.$emit('changeActionData', this.rightTagsList2, false);
+              return
             }
-            
-        },
-        selectRightTag(tag) {
-            const hasTag = this.isHasTag(tag, this.selectRightTagsList)
-            if (hasTag) {
-                this.selectRightTagsList = this.selectRightTagsList.filter(item => item.id !== tag.id)
+          }
+        }
+      } else if (type == 2) {
+        for (let i = 0; i < tmpRightLis.length; i++) {
+          if (numId === tmpRightLis[i].id) {
+            if (i == numLen - 1) {
+              return;
             } 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)
-                            }
-                        }
-                    }
-                }
+              let tmp1 = tmpRightLis[i]
+              let tmp2 = tmpRightLis[i + 1]
+              tmpRightLis.splice(i, 1)
+              tmpRightLis.splice(i, 1)
+              tmpRightLis.splice(i + 2, 0, tmp1)
+              tmpRightLis.splice(i + 3, 0, tmp2)
+              this.rightTagsList2 = [...tmpRightLis]
+              this.$emit('changeActionData', this.rightTagsList2, false);
+              return
             }
+          }
+        }
+      }
+    },
+    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.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(typeof this.rightTagsList2[i].id === 'number') {
-                    notIds.push(this.rightTagsList2[i].id)
-                }
-                
+      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)
+              }
             }
-            
-            let param1 = api.getGroupParams(3);            
-            let param2 = {
-                "tagName": this.searchVal,
-                "type": this.type || '',
-                "notIds": notIds,
-                "sexType": this.sexType,
-            }
-            let param = Object.assign({},param1,param2)
-            api.searchTagList(param).then((res) => {
-                if (res.data.code === '0') {
-                    this.leftTagsList = res.data.data
-                    this.selectLeftTagsList = []
-                    this.selectRightTagsList = []
-                }
-            })
-           
+          }
         }
+      }
+
+      // 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 (typeof this.rightTagsList2[i].id === 'number') {
+          notIds.push(this.rightTagsList2[i].id)
+        }
+
+      }
+
+      let param1 = api.getGroupParams(3);
+      let param2 = {
+        "tagName": this.searchVal,
+        "type": this.type || '',
+        "notIds": notIds,
+        "sexType": this.sexType,
+      }
+      let param = Object.assign({}, param1, param2)
+      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';
+@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;
-    
-    }
-    .inputBox {
-        width: 100px;
+  .arrowWrap {
+    position: absolute;
+    right: 0;
+    .arrowWrapPub {
+      border: 1px solid @icssBorder;
+      height: 23px;
+      width: 40px;
+      text-align: center;
+      background: #fff;
+      line-height: 23px;
+      border-radius: 3px;
+      margin: 0 7px 10px 5px;
     }
-    .search {
-        width: 100%;
-        border-bottom: 1px solid @icssBorder;
-        box-sizing: border-box;
-        height: 30px;
-    }
-    .tagList {
-        height: 300px;
-        overflow-y: auto;
-        border: 1px solid @icssBorder;
-    }
-    .tagItem {
-        line-height: 30px;
-        padding: 0px 10px;
-
-    }
-    .operationPool {
-        position: relative;
-        width: 85%;
-        padding: 10px;
-    }
-    .tagName {
-        line-height: 30px;
-    }
-    .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: 60%;
-    }
-    Button {
-        margin-top: 20px;
-    }
-    .operationItem {
+  }
+  .bottomPartLeft {
+    width: 30%;
+    box-sizing: border-box;
+    float: left;
+  }
+  .poolTitle {
+    // border-bottom: 1px solid @icssBorder;
+    box-sizing: border-box;
+    margin-bottom: 20px;
+    position: relative;
+  }
+  .pool {
+    // border:1px solid @icssBorder;
+  }
+  .inputBox {
+    width: 100px;
+  }
+  .search {
+    width: 100%;
+    border-bottom: 1px solid @icssBorder;
+    box-sizing: border-box;
+    height: 30px;
+  }
+  .tagList {
+    height: 300px;
+    overflow-y: auto;
+    border: 1px solid @icssBorder;
+  }
+  .tagItem {
+    line-height: 30px;
+    padding: 0px 10px;
+  }
+  .operationPool {
+    position: relative;
+    width: 100%;
+    padding: 10px;
+    box-sizing: border-box;
+  }
+  .tagName {
+    line-height: 30px;
+  }
+  .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 5px 10px 0;
-        float: left;
-        text-align: center;
-        p {
-          padding: 5px 0;
-        }
-    }
-    .templateTagList {
-      height: 318px;
+        margin: 0 auto;
+        border: 1px solid @icssBorder;
+        margin-bottom: 15px;
+        font-size: 18px;
+      }
     }
-    .active {
-        color: #aBcdef;
+  }
+  .bottomPartRight {
+    float: left;
+    width: 60%;
+  }
+  button {
+    margin-top: 20px;
+  }
+  .operationItem {
+    display: inline-block;
+    line-height: 40px;
+    margin: 0 5px 10px 0;
+    float: left;
+    text-align: center;
+    p {
+      padding: 5px 0;
     }
+  }
+  .templateTagList {
+    height: 318px;
+  }
+  .active {
+    color: #abcdef;
+  }
 }
 </style>

+ 18 - 20
src/components/icss/ChronicDiseaseAdd.vue

@@ -3,12 +3,12 @@
     <crumbs
       :title="minTitle"
       class="topBack"
-      linkTo="/admin/LT-YXSJWH-LBJGWH"
+      linkTo="/admin/LT-YXSYKWH-LBJGWH"
     ></crumbs>
     <div class="ChronicDiseaseAddWrap" @click="close">
       <div class="ChronicDisease">
         <p class="ChronicDiseaseTop" v-if="!editData.isEdit">
-          <span>选择量表标签:</span>
+          <span>选择量表术语:</span>
           <input
             type="text"
             v-model="region"
@@ -16,11 +16,11 @@
           >
           <i @click.stop="searchTagList">搜索</i>
           <ul v-if="showLis">
-            <li v-for="item in AdscriptionsType" :key="item.id" @click="selectLis(item.id,item.tagName)">{{item.tagName}}</li>
+            <li v-for="item in AdscriptionsType" :key="item.conceptId" @click="selectLis(item.conceptId,item.name)">{{item.name}}</li>
           </ul>
         </p>
         <p class="ChronicDiseaseBtm">
-          <span>已选择量表:</span>
+          <span>已选择量表术语:</span>
           <i>{{selectName}}</i>
         </p>
       </div>
@@ -47,7 +47,7 @@
             <div class="contentDetail clearfix" v-for="(item,idx) in contentPool" :class="selectRightPart.order == item.order?'selectDom':null" :key="item.order" @click="selectPart(item,2)">
               <span>{{item.name}}:</span>
               <div class="contentDetails">
-                <quillEditor v-model="item.content" :options="editorOption" v-if="item.val == 0" class="ql-editor"></quillEditor>
+                <quillEditor v-model="item.content" :options="editorOption" v-if="item.val == 1" class="ql-editor"></quillEditor>
               </div>
             </div>
           </div>
@@ -118,13 +118,13 @@ export default {
     if (tmpEditData.isEdit) {      //修改
       this.editData = tmpEditData
       this.minTitle='量表维护-修改量表结构'
-      this.selectName = tmpEditData.data.name
-      this.selectId = tmpEditData.data.id
-      let tmpScale = tmpEditData.data.scale
+      this.selectName = tmpEditData.row.name
+      this.selectId = tmpEditData.row.conceptId
+      let tmpScale = tmpEditData.data
       for(let i = 0;i < tmpScale.length;i++){
         tmpScale[i].val = tmpScale[i].type
         tmpScale[i].order = tmpScale[i].orderNo
-        tmpScale[i].name = tmpScale[i].type == 0?'文本模块':'推送模块'
+        tmpScale[i].name = tmpScale[i].type == 1?'文本模块':'推送模块'
       }
       this.contentPool = tmpScale
     }
@@ -137,9 +137,9 @@ export default {
       if(JSON.stringify(tmpLeft) == '{}'){
         return
       }
-      if(tmpLeft.val == 1){
+      if(tmpLeft.val == 2){
         for(let i = 0;i < tmpPool.length;i++){
-          if(tmpPool[i].val == 1){
+          if(tmpPool[i].val == 2){
             // this.$message({
             //   message: '推送模块只能添加一次',
             //   type: 'warning'
@@ -193,6 +193,7 @@ export default {
       this.contentPool = tmpPool
     },
     selectPart(part,dir){
+      console.log(part,dir)
       if(dir == 1){
         if(this.selectLeftPart.val == part.val){
           this.selectLeftPart = {}
@@ -215,15 +216,12 @@ export default {
       this.selectId = id
     },
     searchTagList() {
-      let param = {
-        "tagName": this.region,
-        "type": "21",
-        "filterList":[
-          "scale"
-        ]
+      if(this.region.trim() == ''){
+        return
       }
-      api.searchTagList(param).then((res) => {
+      api.searchKnowledgeLis({name: this.region}).then((res) => {
         if (res.data.code === '0') {
+          console.log(res)
           this.AdscriptionsType = res.data.data
           this.showLis = this.AdscriptionsType.length > 0
         }
@@ -249,7 +247,7 @@ export default {
       }
       return {
         "content": tmpParams,
-        "scaleId": this.selectId
+        "conceptId": this.selectId
       }
     },
     submitForm() {
@@ -274,7 +272,7 @@ export default {
             this.warning(res.data.msg || '保存成功', 'success');
             setTimeout(() => {
               this.$router.push({
-                path:'/admin/LT-YXSJWH-LBJGWH'
+                path:'/admin/LT-YXSYKWH-LBJGWH'
               })
             }, 1000);
           }

+ 53 - 25
src/components/icss/ChronicDiseaseStructureList.vue

@@ -5,6 +5,16 @@
                 <el-form-item label="量表名称:">
                     <el-input size="mini" v-model="filter.tagSysName" placeholder="量表名称" clearable></el-input>
                 </el-form-item>
+                <el-form-item label="状态:">
+                <el-select v-model="isState" clearable placeholder="请选择" size="mini">
+                  <el-option
+                    v-for="item in stateSelect"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id">
+                  </el-option>
+                </el-select>
+              </el-form-item>
                 <el-form-item>
                     <el-button size="mini" @click="filterDatas">确认</el-button>
                     <el-button size="mini" type="warning" @click="addIndeptTag">添加量表</el-button>
@@ -34,6 +44,14 @@
                         prop="name"
                         label="量表名称">
                 </el-table-column>
+                <el-table-column
+                        label="状态">
+                        <template slot-scope="scope">
+                          <span :class="scope.row.isDeleted == 'N'?'':'delete'">
+                            {{scope.row.isDeleted == 'N'?'启用中':'已删除'}}
+                          </span>
+                        </template>
+                </el-table-column>
                 <el-table-column
                         :resizable = "false"
                         prop="modifier"
@@ -41,12 +59,11 @@
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="operate"
                         label="操作">
                     <template slot-scope="scope">
-                        <el-button  @click="modifyIndeptTag(scope.row)" type="text" size="small">修改</el-button>
+                        <el-button type="text" size="small" :disabled="scope.row.isDeleted != 'N'" @click="modifyIndeptTag(scope.row)">修改</el-button>
                         <span style="margin:0 3px;">|</span>
-                        <el-button @click="showDelDialog(scope.row.id)" class="delete" type="text" size="small">删除</el-button>
+                        <el-button type="text" size="small" :class="scope.row.isDeleted == 'N'?'delete':'review'" @click="showDelDialog(scope.row)">{{scope.row.isDeleted == 'N'?'删除':'恢复'}}</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -74,6 +91,11 @@
     data: function() {
       return {
         list: [],
+        stateSelect:[
+          {id:'N',name:'启用中'},
+          {id:'Y',name:'已删除'},
+        ],
+        isState:'',
         tagTypes: [],
         AdscriptionsType:[],
         AdscriptionsOwnTo:[],
@@ -96,13 +118,13 @@
       getDropList() {
         let templateType = localStorage.getItem('icssEnumsData') ? JSON.parse(localStorage.getItem('icssEnumsData')).moduleInfoTypeEnum : []
         this.AdscriptionsType = templateType
-        return api.getDropList().then((res) =>{
+        return api.getknowledgeList().then((res) =>{
           if(res.data.code === '0') {
-            localStorage.setItem('DiseaseManage',JSON.stringify(res.data.data[8]))
-            this.tagTypes =  res.data.data[6];
-            for (var i = 0; i < this.tagTypes.length; i++) {
-              this.tagTypesList.push(this.tagTypes[i].val)
-            }
+            localStorage.setItem('DiseaseManage',JSON.stringify(res.data.data[1]))
+            // this.tagTypes =  res.data.data[6];
+            // for (var i = 0; i < this.tagTypes.length; i++) {
+            //   this.tagTypesList.push(this.tagTypes[i].val)
+            // }
           }
         })
       },
@@ -110,13 +132,13 @@
         const param = this.getFilterItems();
         api.scaleContentStructure(param).then((res) => {
           const list = res.data.data.records
-          for (var i = 0; i < list.length; i++) {
-            for (var j =  0; j < this.tagTypes.length; j++) {
-              if(list[i].tagType === this.tagTypes[j].val) {
-                list[i].tagTypeCn = this.tagTypes[j].name;
-              }
-            }
-          }
+          // for (var i = 0; i < list.length; i++) {
+          //   for (var j =  0; j < this.tagTypes.length; j++) {
+          //     if(list[i].tagType === this.tagTypes[j].val) {
+          //       list[i].tagTypeCn = this.tagTypes[j].name;
+          //     }
+          //   }
+          // }
           this.list = list;
           this.total = res.data.data.total;
         })
@@ -129,10 +151,10 @@
         this.$router.push({name:'ChronicDiseaseAdd'})
       },
       modifyIndeptTag(row) {
-        api.detailsTag({id:row.id}).then((res)=>{
-            const {code,data,msg} = res.data;
+        api.rebuildOrUpdate({conceptId:row.conceptId}).then((res)=>{
+          const {code,data,msg} = res.data;
             if(code=='0'){
-              this.$router.push({name:'ChronicDiseaseAdd',params:{isEdit:true,data:data}});
+              this.$router.push({name:'ChronicDiseaseAdd',params:{isEdit:true,data:data,row:row}});
             }else{
               this.$message({
                 message: msg,
@@ -149,7 +171,8 @@
         const param = {
           current: this.currentPage,
           size: this.pageSize,
-          tagName: this.filter.tagSysName,
+          name: this.filter.tagSysName,
+          status:this.isState
         };
         return param;
       },
@@ -171,14 +194,19 @@
           resolve();
         }).catch(() => {});
       },
-      showDelDialog(id){
+      showDelDialog(item){
         let tmpArr = []
-        tmpArr.push(id)
-        this.showConfirmDialog('是否删除该标签?',()=>{
-          api.deleteScale({ids:tmpArr}).then((res)=>{
+        tmpArr.push(item.conceptId)
+        const param = {
+          ids:tmpArr,
+          status:item.isDeleted === 'N'?'Y':'N'
+        }
+        let waringTxt = (item.isDeleted === 'N'?'是否删除该标准术语?':'是否重新启用该条数据?')
+        this.showConfirmDialog(waringTxt,()=>{
+          api.deleteScale(param).then((res)=>{
             if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
               this.getDataList();
-              this.warning(res.data.msg || '操作成功','success');
             }else{
               this.warning(res.data.msg);
             }

+ 72 - 24
src/components/icss/CommonTemplate.vue

@@ -38,13 +38,16 @@
     </div>
     <div class="bottomPartRight bottomPartRightTemplate">
       <p class="poolTitle poolTitleTmp">模板内容:
-        <span style="color:#22ccc8;fontSize:12px" v-if="type == 1 || type == 31">特殊标记1-只可放入主诉模块中,放入其他模块数据会显示异常;模版内容中至少需要1或4特殊标记,保证功能的正常使用;</span>
+        <span style="color:#22ccc8;fontSize:12px" v-if="type == 1 || type == 31">特殊标记1-只可放入主诉模块中,放入其他模块数据会显示异常;标记5不可与标记1同时打到相同标签上,同一个模版可同时存在标记1和5;
+模版内容中至少需要1或4特殊标记,保证功能的正常使用;</span>
         <span style="color:#22ccc8;fontSize:12px" v-if="type == 2 || type == 22 || type == 322 || type == 32">特殊标记4-只可放入现病史模块中,放入其他模块数据会显示异常;模版内容中至少需要1或4特殊标记,保证功能的正常使用;</span>
       </p>
       <div>
         <span style="marginLeft:10px;" v-if="type == 31">
           <el-button v-if="flagLisFst == 1" type="primary" class="flagStyle" size="mini" @click="addFlg(1)" :disabled="flagLisSec == 4">1、标示主诉中添加症状展示位置</el-button>
           <el-button v-else class="flagStyle" size="mini" @click="addFlg(1)" :disabled="flagLisSec == 4">1、标示主诉中添加症状展示位置</el-button>
+          <el-button v-if="flagLisTrd == 5" type="primary" class="flagStyle" size="mini" @click="addFlg(5)">5、主诉通用症状描述显示到现病史中的位置</el-button>
+          <el-button v-else class="flagStyle" size="mini" @click="addFlg(5)" :disabled="flagLisSec == 4">5、主诉通用症状描述显示到现病史中的位置</el-button>
         </span>
         <span style="marginLeft:10px;" v-if="type == 322 || type == 32">
           <el-button style="marginTop:3px;" v-if="flagLisSec == 4" type="primary" class="flagStyle" size="mini" @click="addFlg(4)" :disabled="flagLisFst == 1">4、标示在主诉中症状引用到现病史中展示位置
@@ -85,6 +88,8 @@
               <span v-if="type == 1" style="marginLeft:10px;">
                 <el-button v-if="flagLisFst == 1" type="primary" class="flagStyle" size="mini" @click="addFlg(1)">1、标示主诉中添加症状展示位置</el-button>
                 <el-button v-else class="flagStyle" size="mini" @click="addFlg(1)">1、标示主诉中添加症状展示位置</el-button>
+                <el-button v-if="flagLisTrd == 5" type="primary" class="flagStyle" size="mini" @click="addFlg(5)">5、主诉通用症状描述显示到现病史中的位置</el-button>
+                <el-button v-else class="flagStyle" size="mini" @click="addFlg(5)">5、主诉通用症状描述显示到现病史中的位置</el-button>
               </span>
               <span v-if="type == 2 || type == 22" style="marginLeft:10px;">
                 <el-button v-if="flagLisSec == 4" type="primary" class="flagStyle" size="mini" @click="addFlg(4)">4、标示在主诉中症状引用到现病史中展示位置
@@ -185,7 +190,8 @@ export default {
         background: '#eae7e7'
       },
       flagLisFst:-1,
-      flagLisSec:-1
+      flagLisSec:-1,
+      flagLisTrd:-1
     }
   },
   destroyed: function () {
@@ -240,6 +246,7 @@ export default {
           this.searchVal = ''
           this.flagLisFst = -1
           this.flagLisSec = -1
+          this.flagLisTrd = -1
           if(!this.options.id){
             this.getSubTemplate()      //重新获取子模板
           }
@@ -262,6 +269,7 @@ export default {
           this.searchVal = ''
           this.flagLisFst = -1
           this.flagLisSec = -1
+          this.flagLisTrd = -1
         }
         this.$emit('changeActionData', this.rightTagsList, false);
         this.searchTagList()       //重新获取标签池数据
@@ -301,6 +309,7 @@ export default {
           this.searchVal = ''
           this.flagLisFst = -1
           this.flagLisSec = -1
+          this.flagLisTrd = -1
           if(!this.options.id){
             this.getSubTemplate()      //重新获取子模板
           }
@@ -323,6 +332,8 @@ export default {
           this.flagLisFst = 1
         }else if(tmpLi.flag == 4){
           this.flagLisSec = 4
+        }else if(tmpLi.flag == 5){
+          this.flagLisTrd = 5
         }
       }
     },
@@ -336,22 +347,43 @@ export default {
       }
       for(let i = 0;i < tmpLis.length;i++){//循环右侧所有标签,点击的这个有标记,去掉标记,点击的没有标记,去掉其他标记,标记当前项
         let tmpLi = tmpLis[i];
-        if(tmpLi.flag == idx){   //有标记
+        if(tmpLi.flag == idx){//有标记
           if(tmpSelectRightTagsList.length == 0){//没选中
-            return
+            return;
           }else if(tmpSelectRightTagsList.length > 0){//有选中
             if(tmpSelectRightTagsList[0].flag == idx){//选中的有标记
-              tmpLi.flag = null
-              idx == 1?(this.flagLisFst = -1):(idx == 4?this.flagLisSec = -1:null)
+              if(idx == tmpLi.flag){
+                tmpLi.flag = null
+                idx == 1?(this.flagLisFst = -1):(idx == 4?this.flagLisSec = -1:(idx == 5?this.flagLisTrd = -1:null))
+              }else{
+                tmpLi.flag = idx
+                if(idx == 1){
+                  this.flagLisFst = 1
+                  this.flagLisTrd = -1
+                }else if(idx == 4){
+                  this.flagLisSec = 4
+                }else if(idx == 5){
+                  this.flagLisFst = -1
+                  this.flagLisTrd = 5
+                }
+              }
             }else{//选中的没标记
-              return
+              return;
             }
           }
         }else{//没有标记,判断是否有选中,选中就加上标记,没有不做处理
-          ++m
+          ++m;
           if((m == tmpLis.length)&& tmpSelectRightTagsList && tmpSelectRightTagsList.length>0){
             tmpObj.flag = idx
-            idx == 1?(this.flagLisFst = 1):(idx == 4?this.flagLisSec = 4:null)
+            if(idx == 1){
+              this.flagLisFst = 1
+              this.flagLisTrd = -1
+            }else if(idx == 4){
+              this.flagLisSec = 4
+            }else if(idx == 5){
+              this.flagLisFst = -1
+              this.flagLisTrd = 5
+            }
           }
         }
       }
@@ -499,6 +531,8 @@ export default {
           this.flagLisFst = -1
         }else if(tmpRightLis[0].flag == 4){
           this.flagLisSec = -1
+        }else if(tmpRightLis[0].flag == 5){
+          this.flagLisTrd = -1
         }
         this.searchTagList()
         this.$emit('changeActionData', this.rightTagsList, false);
@@ -528,25 +562,41 @@ export default {
     searchTagList() {
       let notIds = []
       let tmpArr = this.rightTagsList.slice();
+      let tmpTypeSin = this.getTextType(this.type)
       for (let i = 0; i < tmpArr.length; i++) {
         if(tmpArr[i].type != 'sub' && tmpArr[i].type != 'input'){
           notIds.push(tmpArr[i].id)
         }
       }
-      
       let param = {
         "tagName": this.searchVal,
-        "type": this.getTextType(this.type),
+        "type": tmpTypeSin,
         "notIds": notIds,
         "notTagType": this.type == 3?[3,8,10]:this.type==4?[4,8,10]:[3,4,8,10]//查体没有症状尾巴有血压,其他史有症状尾巴无血压
       }
-      api.searchTagList(param).then((res) => {
-        if (res.data.code === '0') {
-          this.leftTagsList = res.data.data
-          this.selectLeftTagsList = []
-          this.selectRightTagsList = []
-        }
-      })
+      let params = {
+        "notIds": notIds,
+        "tagName": this.searchVal,
+        "type": tmpTypeSin
+      }
+
+      if(tmpTypeSin == 6){
+        api.getQuestionInfos(params).then((res) => {
+          if (res.data.code === '0') {
+            this.leftTagsList = res.data.data
+            this.selectLeftTagsList = []
+            this.selectRightTagsList = []
+          }
+        })
+      }else{
+        api.searchTagList(param).then((res) => {
+          if (res.data.code === '0') {``
+            this.leftTagsList = res.data.data
+            this.selectLeftTagsList = []
+            this.selectRightTagsList = []
+          }
+        })
+      }
     },
     getSubTemplate() {
       let param = {
@@ -672,12 +722,13 @@ export default {
         .el-form-item--mini.el-form-item, .el-form-item--small.el-form-item{
           margin-bottom: 0;
         }
-        .el-button+.el-button{
-          margin: 0 0 10px 10px;
-        }
       }
     }
   }
+  
+  .el-button+.el-button{
+    margin: 5px 0 10px 10px;
+  }
   .templateTagList {
     height: 450px;
   }
@@ -685,9 +736,6 @@ export default {
     height: 462px;
     width: 98%;
   }
-  button {
-    // margin-top: 20px;
-  }
   .operationItem {
     display: inline-block;
     line-height: 40px;

+ 200 - 0
src/components/icss/ConceptRelation.vue

@@ -0,0 +1,200 @@
+<template>
+    <div>
+        <crumbs title="医学术语关联维护" style="min-width: 980px">
+            <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="标准术语名称:">
+                    <el-input size="mini" v-model="conceptName" placeholder="术语名称" clearable></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                    <el-button size="mini" type="warning" @click="addRelation">添加关联</el-button>
+                </el-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table
+                :data="list"
+                border
+                style="width: 100%">
+                <el-table-column
+                    :resizable = "false"
+                    type="index"
+                    :index = 'indexMethod'
+                    label="编号"
+                    width="60">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="operTime"
+                    label="操作时间"
+                    width="180">
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="libNameType"
+                    label="医学标准术语"
+                    show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="otherNames"
+                    label="关联术语"
+                    show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                  label="状态">
+                  <template slot-scope="scope">
+                    <span :class="scope.row.isDeleted == 'N'?'':'delete'">
+                      {{scope.row.isDeleted == 'N'?'启用中':'已删除'}}
+                    </span>
+                  </template>
+                </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    prop="operName"
+                    label="操作人">
+                </el-table-column>
+                <el-table-column
+                    label="操作" 
+                    width="160"
+                    :resizable = "false">
+                    <template slot-scope="scope">
+                      <el-button type="text" size="small" :disabled="scope.row.isDeleted != 'N'" @click="modifyRelation(scope.row)">修改</el-button>
+                      <span style="margin:0 3px;">|</span>
+                      <el-button type="text" size="small" :class="scope.row.isDeleted == 'N'?'delete':'review'" @click="showDelDialog(scope.row)">{{scope.row.isDeleted == 'N'?'删除':'恢复'}}</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        <div class="pagination">
+            <el-pagination v-if="total>pageSize"
+               :current-page.sync="currentPage"
+               @current-change="currentChange"
+               background
+               :page-size="pageSize"
+               layout="total,prev, pager, next, jumper"
+               :total="total">
+            </el-pagination>
+        </div>
+        </div>
+    </div>
+</template>
+
+<script>
+import api from '@api/icss.js';
+
+export default {
+    name: 'ConceptRelation',   //诊断量表关联维护
+    data: function() {
+        return {
+          list: [],
+          conceptName:'',
+          currentPage: 1,
+          pageSize: 10,
+          total: 0,
+        }
+    },
+    created() {
+        this.getDataList()    
+    },
+    methods: {
+        getDataList() {
+            const param = this.getFilterItems();
+            api.getConceptRelation(param).then((res) => {
+              if(res.data.code == '0') {
+                this.list = res.data.data.records
+                this.total = res.data.data.total;
+              }
+            })
+        },
+        filterDatas() {
+            this.currentPage = 1;
+            this.getDataList();
+        },
+        addRelation() {
+            this.$router.push({name:'AddConceptRelation'})
+        },
+        modifyRelation(row) {
+            const param = {
+              "conceptId": row.conceptId
+            }
+            api.getConceptRelationDet(param).then((res) => {
+              if(res.data.code=='0'){
+                const { data } = res.data
+                this.$router.push({name:'AddConceptRelation',params:{isEdit:true,data:data}});
+              } else {
+                this.warning(res.data.msg);
+              }
+            }).catch((error)=>{
+                this.warning(error)
+            })
+            
+        },
+        currentChange(next) {
+            this.currentPage = next;
+            this.getDataList();
+        },
+        getFilterItems() {
+            const param = {
+                current: this.currentPage,
+                size: this.pageSize,
+                name:this.conceptName
+            };
+            return param;
+        },
+        indexMethod(index) {
+            return ((this.currentPage - 1) * this.pageSize) + index + 1;
+        },
+        getTagType(val) {
+            return val
+        },
+        warning(msg,type){
+          this.$message({
+            showClose: true,
+            message:msg,
+            type:type||'warning'
+          })
+        },
+        showConfirmDialog(msg,resolve){
+          this.$alert(msg, '提示', {
+            confirmButtonText: '确定',
+            type: 'warning'
+          }).then(() => {
+            resolve();
+          }).catch(() => {});
+        },
+        showDelDialog(row){
+          this.showConfirmDialog('是否删除该关联?',()=>{
+            const param = {
+              "conceptId": row.conceptId,
+              "isDeleted": row.isDeleted=== 'N'?'Y':'N',
+              "relationId": 17
+            }
+            api.delConceptRelation(param).then((res)=>{
+              if(res.data.code=='0'){
+                this.getDataList();
+                this.warning(res.data.msg || '操作成功','success');
+              }else{
+                this.warning(res.data.msg);
+              }
+            }).catch((error)=>{
+              this.warning(error);
+            })
+          });
+        }
+    }
+}
+</script>
+
+
+<style lang="less">
+    @import "../../less/admin.less";
+    .delete{
+       color: red;
+    }
+    .delete:hover {
+        color: red;
+    } 
+    .pagination {
+        min-width: 1010px;
+    }
+</style>

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

@@ -521,7 +521,7 @@ export default {
   .changeTips {
     position: absolute;
     left: 220px;
-    min-width: 300px;
+    // min-width: 300px;
     color: #22ccc8;
     font-size: 12px;
   }

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

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <crumbs title="免责声明维护-详情" linkTo="/admin/LT-YXSJWH-MZSMWH"></crumbs>
+    <crumbs title="免责声明维护-详情" linkTo="/admin/LT-YXSJKWH-MZSMWH"></crumbs>
     <div class="contents">
       <div class="deptbox">
         <p class="titl">标题</p>

+ 10 - 6
src/components/icss/MedicalRelation.vue

@@ -9,9 +9,9 @@
                 <el-select v-model="type" clearable placeholder="请选择" size="mini">
                   <el-option
                     v-for="item in typeList"
-                    :key="item.id"
+                    :key="item.key"
                     :label="item.name"
-                    :value="item.id">
+                    :value="item.key">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -40,7 +40,7 @@
                   <el-button size="mini" @click="uploadClick">导入</el-button>
                   <input type="file" name="uploadfile " id="upFile" @change="uploadFile($event)" accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">
                   <router-link to="/admin/LT-YXSYKWH-TJYXSYGX" style="margin:0 10px">
-                      <el-button size="mini" type="warning">添加关系</el-button>
+                      <el-button size="mini" type="warning">添加医学术语关系</el-button>
                   </router-link>
               </el-form-item>
             </el-form>
@@ -144,7 +144,11 @@
     },
     created() {
       this.getDataList();
-      this.getRelationList();
+      // this.getRelationList();
+      const typeList = JSON.parse(localStorage.getItem("knowledgeEnumsData"));
+      if(typeList){
+        this.typeList = typeList.lexiconRSTypeEnum;
+      }
     },
     methods: {
       toEditProduct(row){
@@ -186,7 +190,7 @@
           console.log(error);
         });
       },
-      getRelationList(){
+      /*getRelationList(){
         const param = {
           'code':'',
           'name':''
@@ -202,7 +206,7 @@
             })
           }
         })
-      },
+      },*/
       getFilterItems() {
         const param = {
           current: this.currentPage,

+ 30 - 17
src/components/icss/MedicineInfoPg.vue

@@ -1,28 +1,30 @@
 <template>
     <el-form :rules="rules" :model="data" ref="form" class="sub-form">
-        <p class="line"></p>
         <!--<el-input v-model="form.orderNo" :value="index" type="hidden"></el-input>-->
+        <el-form-item label="显示位置:" prop="position" label-width="160px">
+            <el-checkbox-group v-model="data.position" :disabled="data.disabled">
+                <el-checkbox v-for="it in positions" :key="it.key" :label="it.key">{{it.name}}</el-checkbox>
+            </el-checkbox-group>
+        </el-form-item>
         <el-form-item label="是否属于诊断依据:" prop="isReason" label-width="160px">
-            <el-select v-model="data.isReason" placeholder="请选择" :disabled="isEdit&&index<len">
+            <el-select v-model="data.isReason" placeholder="请选择" :disabled="data.disabled">
                 <el-option label="否" :value="0"></el-option>
                 <el-option label="是" :value="1"></el-option>
             </el-select>
         </el-form-item>
-        <el-form-item label="显示位置:" prop="position" label-width="160px">
-            <el-checkbox-group v-model="data.position" :disabled="isEdit&&index<len">
-                <el-checkbox v-for="it in positions" :key="it.key" :label="it.key">{{it.name}}</el-checkbox>
-            </el-checkbox-group>
-        </el-form-item>
         <el-form-item label="标题名称:" prop="title" label-width="160px">
-            <el-input v-model="data.title" :disabled="isEdit&&index<len"></el-input>
+            <el-input v-model="data.title" :disabled="data.disabled"></el-input>
         </el-form-item>
         <el-form-item label="内容" prop="content" label-width="160px">
-            <quillEditor v-model="data.content" :options="editorOption"  class="ql-editor"></quillEditor>
+            <quillEditor v-model="data.content"
+                         :options="editorOption"
+                         class="ql-editor"
+                         ref="quillEditor"></quillEditor>
         </el-form-item>
-        <!--<el-form-item label-width="130px">
+        <el-form-item label-width="130px">
             <el-button @click="addEmit">添加段落</el-button>
             <el-button @click="delEmit" type="info">删除本段落</el-button>
-        </el-form-item>-->
+        </el-form-item>
     </el-form>
 </template>
 
@@ -35,7 +37,7 @@
   import {container, ImageExtend, QuillWatch} from 'quill-image-extend-module';
   Quill.register('modules/ImageExtend', ImageExtend);
   export default{
-    props:['data','index','isEdit','len'],
+    props:['data','index','isEdit'],
     name:'MedicineInfoParagraph',
     components:{
       quillEditor
@@ -89,23 +91,34 @@
         }
       }
     },
+    watch:{
+      'data.content':function(){
+        this.data.text = this.$refs.quillEditor.quill.root.innerText;
+      }
+    },
     mounted(){
       //显示位置枚举列表
-      const pos = localStorage.getItem("icssEnumsData");
-      this.positions = JSON.parse(pos)&&JSON.parse(pos).introducePositionEnum;
+      const pos = localStorage.getItem("knowledgeEnumsData");
+      this.positions = JSON.parse(pos)&&JSON.parse(pos).positionTypeEnum;
     },
     methods:{
-      /*addEmit(){
+      addEmit(){
         this.$emit("add");
       },
       delEmit(){
         this.$emit("del",this.index);
       },
-      emitVal(){
+      /*emitVal(){
         let data = this.form;
         let pst=this.form.position;
+        const content =  this.form.content.replace(config.imgHost,'{imageUrlPrefix}');
+        const text = this.$refs.quillEditor;console.log(text)
         pst = typeof pst=='string'?pst:pst.join(',');
-        data =   Object.assign({},data,{position:this.form.position?pst:'',orderNo:this.index,text:''});
+        data =   Object.assign({},data,{
+                                        position:this.form.position?pst:'',
+                                        orderNo:this.index,
+                                        text:'',
+                                        content:content});
         this.$emit("change",this.index,data);
       }*/
     }

+ 31 - 53
src/components/icss/MedicinePrompt.vue

@@ -2,17 +2,9 @@
     <div>
         <crumbs title="医学术语静态知识维护">
             <el-form :inline="true" class="demo-form-inline">
-                <el-form-item label="医学标准术语:">
-                    <el-input size="mini" v-model="filter.term" placeholder="医学标准术语" clearable></el-input>
+                <el-form-item label="标准术语:">
+                    <el-input size="mini" v-model="filter.term" placeholder="标准术语" clearable></el-input>
                 </el-form-item>
-                <el-form-item label="标题名称:">
-                    <el-input size="mini" v-model="filter.title" placeholder="标题名称" clearable></el-input>
-                </el-form-item>
-                <!--<el-form-item label="术语类型:">
-                    <el-select size="mini" v-model="filter.type" placeholder="术语类型" clearable>
-                        <el-option v-for="it in termTypes" :label="it.name" :value="it.name" :key="it.id"></el-option>
-                    </el-select>
-                </el-form-item>-->
                 <el-form-item>
                     <el-button size="mini" @click="filterDatas">确认</el-button>
                     <router-link to="/admin/LT-YXSYKWH-TJYXSYJTZS" style="margin:0 10px">
@@ -38,35 +30,34 @@
                         :show-overflow-tooltip="true">
                 </el-table-column>
                 <el-table-column
-                        prop="conceptNameAndType"
-                        label="医学标准术语">
-                </el-table-column>
-                <el-table-column
-                        prop="source"
-                        label="静态知识来源">
+                        prop="libName"
+                        label="标准术语">
                 </el-table-column>
-                <!--<el-table-column
-                        prop="conceptType"
-                        label="术语类型"
-                        width="140">
-                </el-table-column>-->
                 <el-table-column
                         prop="title"
-                        label="标题名称"
+                        label="关联标题"
                         width="240">
                 </el-table-column>
+                <el-table-column
+                        label="状态">
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.isDeleted=='N'">启用中</span>
+                        <span v-if="scope.row.isDeleted=='Y'" class="delete">已删除</span>
+                    </template>
+                </el-table-column>
                 <el-table-column
                         prop="modifier"
                         label="操作人"
                         width="80">
                 </el-table-column>
-
                 <el-table-column
                         label="操作" width="120">
                     <template slot-scope="scope">
-                        <el-button type="text" size="small" @click="toEditProduct(scope.row)">修改</el-button>
+                        <el-button v-if="scope.row.isDeleted=='Y'" type="text" size="small" class="is-disabled">修改</el-button>
+                        <el-button v-if="scope.row.isDeleted=='N'" type="text" size="small" @click="toEditProduct(scope.row)">修改</el-button>
                         <span style="margin:0 3px;">|</span>
-                        <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row)">删除</el-button>
+                        <el-button v-if="scope.row.isDeleted=='Y'" type="text" size="small" @click="showReuseDialog(scope.row)">恢复</el-button>
+                        <el-button v-if="scope.row.isDeleted=='N'" type="text" size="small" class="delete" @click="showDelDialog(scope.row)">删除</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -85,13 +76,11 @@
 
 <script>
   import api from '@api/icss.js';
-  import utils from '@api/utils.js';
 
   export default {
     name: 'MedicinePrompt',
     data: function () {
       return {
-        termTypes:[],
         list: [],
         cacheData: {},
         currentPage: 1,
@@ -107,29 +96,8 @@
     },
     created() {
       this.getDataList();
-      this.getTermTypes();
     },
     methods: {
-      getTermTypes(){
-        api.getAllType().then((res)=>{
-          if(res.data.code=='0'){
-            this.termTypes = res.data.data.records;
-          }
-        }).catch((error)=>{
-          console.log('获取术语类型失败');
-        });
-      },
-      /*async getTermTypes(){
-        let types = localStorage.getItem('termTypes');
-        if(!types){
-          types = await api.getAllType();
-          if(types.data.code=='0'){
-            this.termTypes = types.data.data.records;
-          }
-        }else{
-          this.termTypes = JSON.parse(types).records;
-        }
-      },*/
       toEditProduct(row){
         this.$router.push({
           name:'AddMedicinePrompt',
@@ -153,10 +121,6 @@
           console.log(error);
         });
       },
-      getDetailList(id) {
-        const param = {'id': id,};
-        this.$router.push({name:'PromptDetail', params:{id: id}})
-      },
       getFilterItems() {
         const param = {
           conceptName:this.filter.term,
@@ -196,7 +160,21 @@
       },
       showDelDialog(row){
         this.showConfirmDialog('是否删除该静态知识?',()=>{
-          api.delConceptInfo({id:row.id}).then((res)=>{
+          api.delConceptInfo({conceptId:[row.conceptId],status:'Y'}).then((res)=>{
+            if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
+              this.getDataList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      },
+      showReuseDialog(row){
+        this.showConfirmDialog('是否重新启用该条数据?',()=>{
+          api.delConceptInfo({conceptId:[row.conceptId],status:"N"}).then((res)=>{
             if(res.data.code=='0'){
               this.warning(res.data.msg||'操作成功','success');
               this.getDataList();

+ 2 - 1
src/components/icss/PubIndeptTag.vue

@@ -506,7 +506,8 @@
     .changeTips {
         position: absolute;
         left: 220px;
-        min-width: 300px;
+        // min-width: 300px;
+        width: 200%;
         color: #ea7777;
         font-size: 12px;
     }

+ 302 - 150
src/components/icss/PubTagGroup.vue

@@ -1,5 +1,8 @@
 <template>
-  <div class="PubTagGroupWrapper">
+  <div
+    class="PubTagGroupWrapper"
+    @click="closeNameLis(1)"
+  >
     <el-form
       class="groups"
       :rules="rules"
@@ -46,45 +49,85 @@
         </el-select>
       </el-form-item>
       <el-form-item
-        label="性别:"
-        prop="region7"
+        v-show="(form.region1 == 1 && form.region2 ==4) || (form.region1 == 4) || (form.region1 == 5)"
+        :label="(form.region1 == 5)?'是否当化验推送项':(form.region1 == 4)?'是否当查体推送项':'是否为症状'"
+        prop="region12"
       >
-        <span class="changeTips">改变性别后,标签明细将会恢复到默认状态</span>
+        <span
+          v-if="form.region1 == 4"
+          class="changeTips changeTipsName"
+        >当为查体推送项时,标签系统名称需要检索医学标准术语内容并与之相对应,才可保证系统正常使用,如果未对应上可能造成系统显示异常!如果在搜索中没有可以先在医学标准术语中建立相关信息!</span>
+        <span
+          v-else-if="form.region1 == 5"
+          class="changeTips changeTipsName"
+        >当为化验推送项时,标签系统名称需要检索医学标准术语内容并与之相对应,才可保证系统正常使用,如果未对应上可能造成系统显示异常!如果在搜索中没有可以先在医学标准术语中建立相关信息!</span>
+        <span
+          v-else
+          class="changeTips changeTipsName"
+        >当为症状时,标签系统名称需要与医学标准术语内容相对应;不为症状时可以不用相互对应;</span>
         <el-select
-          v-model="form.region7"
-          :disabled="!!editData.id || !form.region1 || form.region2 == 11"
-          @change="(e)=>readyChangeSelect(e,3)"
+          v-model="form.region12"
+          @change="sendData"
         >
           <el-option
-            label="通用"
-            value="3"
+            label=""
+            value="0"
           ></el-option>
           <el-option
-            label="男"
+            label="不是"
             value="1"
           ></el-option>
-          <el-option
-            label="女"
-            value="2"
-          ></el-option>
         </el-select>
       </el-form-item>
       <el-form-item
         label="标签系统名称:"
         prop="region3"
       >
-        <el-input
+        <div @click.stop style="display:inline-block;">
+          <el-input
+            v-model="form.region3"
+            :disabled="!form.region1"
+            maxLength="30"
+            placeholder="请输入标签系统名称"
+            @change="sendData"
+            @focus="focusSystemName"
+          ></el-input>
+          <ul
+            class="systemNames"
+            v-if="systemNameShow"
+          >
+            <li
+              v-for="item in systemNameLis"
+              class="ellipsis"
+              :key="item.conceptId"
+              @click="pushSystemName(item.name)"
+            >{{item.name}}</li>
+          </ul>
+        </div>
+        <!-- <el-autocomplete
           v-model="form.region3"
-          :disabled="!form.region1"
           maxLength="30"
+          :fetch-suggestions="querySearchAsync"
           placeholder="请输入标签系统名称"
-          @change="sendData"
-        ></el-input>
+          @select="handleSelect"
+        ></el-autocomplete> -->
+        <span
+          v-if="form.region1 == 5 || form.region1 == 4"
+          class="changeTips changeTipsName"
+        >标签系统名称需要与医学标准术语内容相对应,如果没有可以先在医学标准术语中建立相关信息!未建立相关信息可能会影响系统使用!</span>
+        <span
+          v-if="form.region2 == 4"
+          class="changeTips changeTipsName"
+        >当为症状时,标签系统名称需要与医学标准术语内容相对应,如果没有可以先在医学标准术语中建立相关信息!未建立相关信息可能会影响系统使用!</span>
       </el-form-item>
       <el-form-item
         label="标签界面名称:"
         prop="region4"
       >
+        <span
+          v-if="form.region1 == 5 || form.region2 == 4 || form.region1 == 4"
+          class="changeTips changeTipsName"
+        >为在界面上检索不受影响,标签界面名称应与标签系统名称和医学标准术语内容相对应,未建立相关信息可能会影响系统使用!</span>
         <el-input
           v-model="form.region4"
           :disabled="!form.region1"
@@ -93,6 +136,30 @@
           @change="sendData"
         ></el-input>
       </el-form-item>
+      <el-form-item
+        label="性别:"
+        prop="region7"
+      >
+        <span class="changeTips">改变性别后,标签明细将会恢复到默认状态</span>
+        <el-select
+          v-model="form.region7"
+          :disabled="!!editData.id || !form.region1 || form.region2 == 11"
+          @change="(e)=>readyChangeSelect(e,3)"
+        >
+          <el-option
+            label="通用"
+            value="3"
+          ></el-option>
+          <el-option
+            label="男"
+            value="1"
+          ></el-option>
+          <el-option
+            label="女"
+            value="2"
+          ></el-option>
+        </el-select>
+      </el-form-item>
       <!-- <el-form-item
         label="选择项之间链接:"
         prop="region5"
@@ -123,25 +190,6 @@
           ></el-option>
         </el-select>
       </el-form-item> -->
-      <el-form-item
-        v-if="form.region1 == 1 && form.region2 ==4"
-        label="是否为症状"
-        prop="region12"
-      >
-        <el-select
-          v-model="form.region12"
-          @change="sendData"
-        >
-          <el-option
-            label="是"
-            value="0"
-          ></el-option>
-          <el-option
-            label="不是"
-            value="1"
-          ></el-option>
-        </el-select>
-      </el-form-item>
       <el-form-item
         label="年龄:"
         prop="region8"
@@ -158,7 +206,7 @@
       <el-form-item
         prop="region9"
         class="ages maxAges"
-      > 
+      >
         <el-input
           v-model.number="form.region9"
           :disabled="!form.region1 || form.region2 == 11"
@@ -167,16 +215,43 @@
           @input="sendData"
         ></el-input>
       </el-form-item>
-      <el-form-item class="verticalMiddle" label="选择子项时是否复制主项标签:" prop="region10" v-if="form.region2 == 6">
-        <el-select v-model="form.region10" :disabled="!form.region1 || form.region2 == 11">
-          <el-option label="不可以" value="0"></el-option>
-          <el-option label="可以" value="1"></el-option>
+      <el-form-item
+        class="verticalMiddle"
+        label="选择子项时是否复制主项标签:"
+        prop="region10"
+        v-if="form.region2 == 6"
+      >
+        <el-select
+          v-model="form.region10"
+          :disabled="!form.region1 || form.region2 == 11"
+        >
+          <el-option
+            label="不可以"
+            value="0"
+          ></el-option>
+          <el-option
+            label="可以"
+            value="1"
+          ></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="是否显示加号:" prop="region11" v-if="form.region2 == 2 || form.region2 == 3">
-        <el-select v-model="form.region11" :disabled="!form.region1 || form.region2 == 11">
-          <el-option label="显示" value="1"></el-option>
-          <el-option label="不显示" value="0"></el-option>
+      <el-form-item
+        label="是否显示加号:"
+        prop="region11"
+        v-if="form.region2 == 2 || form.region2 == 3"
+      >
+        <el-select
+          v-model="form.region11"
+          :disabled="!form.region1 || form.region2 == 11"
+        >
+          <el-option
+            label="显示"
+            value="1"
+          ></el-option>
+          <el-option
+            label="不显示"
+            value="0"
+          ></el-option>
         </el-select>
       </el-form-item>
     </el-form>
@@ -208,18 +283,18 @@ import utils from '@api/utils.js';
 
 
 export default {
-  props:['editData'],
+  props: ['editData'],
   data() {
     var validatePass1 = (rule, value, callback) => {
-        this.validateSystomName(value,callback,1)
+      this.validateSystomName(value, callback, 1)
     };
     var validatePass2 = (rule, value, callback) => {
-        const editData = this.$props.editData;
-        if(editData.id && value == editData.tagName){ //修改系统名称没变就不再校验
-          callback();
-        }else{
-          this.validateSystomName(value,callback,2)
-        }
+      const editData = this.$props.editData;
+      if (editData.id && value == editData.tagName) { //修改系统名称没变就不再校验
+        callback();
+      } else {
+        this.validateSystomName(value, callback, 2)
+      }
     };
     return {
       form: {
@@ -234,23 +309,23 @@ export default {
         region9: '200',         //最大年龄
         region10: '1',        //是否复制主标签
         region11: '0',       //是否复制当前模块
-        region12:'1',        //是否为症状
-        tagPool:[],          //标签池数据
-        order:[],            //排序方式
-        tipLis:[],           //提示列表
+        region12: '1',        //是否为症状//是否为化验推送//是否为查体推送    
+        tagPool: [],          //标签池数据
+        order: [],            //排序方式
+        tipLis: [],           //提示列表
       },
       labelTypesMaps: {       //// 归属和填写单类型限制
-        '1':['2','3','4'],  //推送类型暂时不用
-        '3':['2','4','6'],
-        '4':['2','3'],
-        '5':['7'],
-        '6':['9'],
+        '1': ['2', '3', '4'],  //推送类型暂时不用
+        '3': ['2', '4', '6'],
+        '4': ['2', '3'],
+        '5': ['7'],
+        '6': ['9'],
         // '7':['9'],
-        '8':['9'],
-        '9':['9'],
-        '21':['9'],
-        '22':['9'],
-        '10':['9']
+        '8': ['9'],
+        '9': ['9'],
+        '21': ['9'],
+        '22': ['9'],
+        '10': ['9']
       },
       rules: {
         region1: [
@@ -286,7 +361,7 @@ export default {
           { required: true, message: '是否复制当前模块', trigger: 'change' }
         ],
         region12: [
-          { required: true, message: '是否为症状', trigger: 'change' }
+          { required: true, message: '请选择', trigger: 'change' }
         ],
       },
       tmpSex: '通用',
@@ -296,8 +371,10 @@ export default {
       labelTypes: [],
       labelTypesList: [],
       tagTypes: [],        //标签池数据
-      type:'',
-      systom:null,      //标签系统名称存在与否
+      type: '',
+      systom: null,      //标签系统名称存在与否
+      systemNameShow: false,//系统名称列表显示
+      systemNameLis: [],//系统名称列表
     }
   },
   computed: {
@@ -310,13 +387,16 @@ export default {
     newSign() {
       return this.form.region2;
     },
+    newName() {
+      return this.form.region3;
+    },
   },
   mounted() {
     const editData = this.$props.editData;
-    if(editData.id){
-      const trans = utils.transformKeys(editData,2); //(2是标签组类型)
+    if (editData.id) {
+      const trans = utils.transformKeys(editData, 2); //(2是标签组类型)
       // console.log('editData1', editData)
-      this.form = Object.assign({},this.form,trans);
+      this.form = Object.assign({}, this.form, trans);
     }
     this.$emit('submitForm', 'groups', false);
     this.getDropList();
@@ -338,8 +418,62 @@ export default {
         this.searchTagList()
       }
     },
+    newName(nextVal, prevVal) {
+      if (nextVal != prevVal && (this.form.region12 == 0)) {
+        this.focusSystemName()
+      }
+    },
   },
   methods: {
+    sendData() {
+      this.$emit('changeVal', this.form, false)
+    },
+    closeNameLis(flg) {
+      if (flg == 1) {
+        this.systemNameShow = false
+      } else if (flg == 2) {
+        if (this.systemNameLis.length > 0) {
+          this.systemNameShow = true
+        } else {
+          this.systemNameShow = false
+        }
+      }
+    },
+    focusSystemName() {
+      if (this.form.region3.trim() == '') {
+        this.systemNameShow = false
+        this.systemNameLis = []
+        return
+      }
+      if (this.form.region12 == 0) {
+        let tmpArr = [];
+        if (this.form.region1 == 1 && this.form.region2 == 4) {//症状
+          tmpArr = [1]
+        } else if (this.form.region1 == 4) {//查体
+          tmpArr = [33]
+        } else if (this.form.region1 == 5) {//化验
+          tmpArr = [12]
+        }
+        let params = {
+          "libType": tmpArr,
+          "name": this.form.region3
+        }
+        api.indexByLexicon(params).then((res) => {
+          if (res.data.code === '0') {
+            this.systemNameLis = res.data.data
+            if (res.data.data.length > 0) {
+              this.systemNameShow = true
+            } else {
+              this.systemNameShow = false
+            }
+          }
+        })
+      }
+    },
+    pushSystemName(val) {
+      this.form.region3 = val
+      this.systemNameShow = false
+    },
     getDropList() {
       return api.getDropList().then((res) => {
         if (res.data.code === '0') {
@@ -355,48 +489,45 @@ export default {
     },
     searchTagList() {
       const editData = this.$props.editData;
-      if(editData.id){
+      if (editData.id) {
         return;
       }
       let region1 = this.form.region1, region2 = this.form.region2;
-      let paramFst = !!region2 ? api.getGroupParams(region2): {};
+      let paramFst = !!region2 ? api.getGroupParams(region2) : {};
       let paramSec = {
         "type": region1,
         "sexType": this.form.region7,
-        "tagName":'',
+        "tagName": '',
         "notIds": [],
       }
       // console.log(paramFst,paramSec,7787)
-      let params = Object.assign({},paramFst,paramSec)
+      let params = Object.assign({}, paramFst, paramSec)
       api.searchTagList(params).then((res) => {
         if (res.data.code === '0') {
           this.form.tagPool = res.data.data
         }
       })
     },
-    validateSystomName(name,callback,flg) {
-      if(flg == 1){
+    validateSystomName(name, callback, flg) {
+      if (flg == 1) {
         let tmpVal = this.form.region4
-        if(tmpVal.trim() == ''){
+        if (tmpVal.trim() == '') {
           callback(new Error('标签界面名称不能为空'));
-        }else{
+        } else {
           this.form.region4 = tmpVal.trim()
           callback();
         }
-      }else if(flg == 2){
+      } else if (flg == 2) {
         let tmpVal = this.form.region3
-        if(tmpVal.trim() == ''){
+        if (tmpVal.trim() == '') {
           callback(new Error('标签系统名称不能为空'));
-        }else{
+        } else {
           this.form.region3 = tmpVal.trim()
           callback();
         }
       }
     },
-    sendData() {
-      this.$emit('changeVal', this.form, false)
-    },
-    changeType(type){
+    changeType(type) {
       this.$emit('changeVal', this.form, false)
       this.$emit('changeType', type, false)
     },
@@ -404,12 +535,12 @@ export default {
       this.$emit('changeVal', this.form, false)
       this.$emit('changeSex', data, false)
     },
-    readyChangeSelect(tmpData,type) {
-      if(type === 1) {
+    readyChangeSelect(tmpData, type) {
+      if (type === 1) {
         this.form.region2 = '';
         this.labelTypes = this.labelTypesList.filter(item => this.labelTypesMaps[tmpData].indexOf(item.val) > -1)
       }
-      if(type === 2) {
+      if (type === 2) {
         this.initForm()
       }
       this.changeSex(tmpData);
@@ -470,6 +601,8 @@ export default {
     },
     initForm() {
       this.form.region12 = '1'
+      this.form.region14 = '1'
+      this.form.region15 = '1'
       this.form.region10 = '1'
       this.form.region11 = '0'
     }
@@ -480,74 +613,93 @@ export default {
 .PubTagGroupWrapper {
   margin-top: 60px;
   .groups {
-  background-color: #fff;
-  padding: 20px;
-  margin: 20px 20px -20px 20px;
-  .el-form-item__content,
-  .el-input__inner {
-    height: 30px;
-    line-height: 30px;
-    width: 200px;
-  }
-  .el-form-item {
-    margin-bottom: 20px;
-  }
-  .el-form-item__error {
-    top: 28px;
-  }
-  .el-form-item__label {
-    line-height: 30px;
-    text-align: left;
-  }
-  .el-input__icon {
-    line-height: 30px;
-  }
-  .verticalMiddle .el-form-item__content {
-    position: relative;
-    top: 16px;
-  }
-  .maxAges {
-    margin-left: -125px;
-  }
-  .ages {
-    display: inline-block;
-    .el-form-item__content {
-      width: auto;
+    background-color: #fff;
+    padding: 20px;
+    margin: 20px 20px -20px 20px;
+    .el-form-item__content,
+    .el-input__inner {
+      height: 30px;
+      line-height: 30px;
+      width: 200px;
+    }
+    .el-form-item {
+      margin-bottom: 20px;
+    }
+    .el-form-item__error {
+      top: 28px;
     }
-    .el-input {
+    .el-form-item__label {
+      line-height: 30px;
+      text-align: left;
+    }
+    .el-input__icon {
+      line-height: 30px;
+    }
+    .verticalMiddle .el-form-item__content {
+      position: relative;
+      top: 16px;
+    }
+    .maxAges {
+      margin-left: -125px;
+    }
+    .ages {
       display: inline-block;
-      width: auto;
-      .el-input__inner {
-        width: 60px;
-        padding: 0 5px;
-        margin-right: 25px;
-        text-align: center;
+      .el-form-item__content {
+        width: auto;
       }
+      .el-input {
+        display: inline-block;
+        width: auto;
+        .el-input__inner {
+          width: 60px;
+          padding: 0 5px;
+          margin-right: 25px;
+          text-align: center;
+        }
 
-      .el-input__inner::-webkit-outer-spin-button,
-      .el-input__inner::-webkit-inner-spin-button {
-        -webkit-appearance: none;
-      }
+        .el-input__inner::-webkit-outer-spin-button,
+        .el-input__inner::-webkit-inner-spin-button {
+          -webkit-appearance: none;
+        }
 
-      .el-input__inner[type="number"] {
-        -moz-appearance: textfield;
+        .el-input__inner[type="number"] {
+          -moz-appearance: textfield;
+        }
       }
     }
+    .el-message-box__btns .el-button--default {
+      color: #606266 !important;
+    }
+    .cancelColor {
+      color: #22ccc8 !important;
+    }
+    .changeTips {
+      position: absolute;
+      left: 220px;
+      // min-width: 300px;
+      color: #22ccc8;
+      font-size: 12px;
+    }
+    .changeTipsName {
+      line-height: 15px;
+    }
   }
-  .el-message-box__btns .el-button--default {
-    color: #606266 !important;
-  }
-  .cancelColor {
-    color: #22ccc8 !important;
-  }
-  .changeTips {
+  .systemNames {
+    background-color: #fff;
     position: absolute;
-    left: 220px;
-    min-width: 300px;
-    color: #22ccc8;
-    font-size: 12px;
+    z-index: 999;
+    width: 100%;
+    border: 1px solid #c0c4cc;
+    box-sizing: border-box;
+    max-height: 185px;
+    overflow: auto;
+    li {
+      padding: 0 15px;
+    }
+    li:hover {
+      background-color: #f5f7fa;
+    }
   }
 }
-}
 </style>
 

+ 3 - 3
src/components/icss/PubTemplateGroup.vue

@@ -52,8 +52,8 @@
           <el-option
             v-for="item in sonLis"
             :label="item.name"
-            :value="item.id+''"
-            :key="item.id"
+            :value="item.conceptId+''"
+            :key="item.conceptId"
             v-if="!!item.name"
           ></el-option>
         </el-select>
@@ -352,7 +352,7 @@ export default {
   .changeTips {
     position: absolute;
     left: 220px;
-    min-width: 300px;
+    // min-width: 300px;
     color: #22ccc8;
     font-size: 12px;
   }

+ 84 - 11
src/components/icss/SymptomTagGroup.vue

@@ -1,5 +1,5 @@
 <template>
-    <div class="symptomTagGroupWrapper clearfix">
+    <div class="symptomTagGroupWrapper commomSymptom clearfix">
     <div class="bottomPartLeft">
       <p class="poolTitle">标签池</p>
       <div class="pool">
@@ -31,7 +31,7 @@
     </div>
     <div class="bottomPartRight ">
       <p class="poolTitle">操作界面:</p>
-      <ul class="tagList operationPool">
+      <ul class="tagList operationPool" :class="(type == 1 && isSymp == 0)?'':'operationPools'">
             <li class = "tagItem"
                 v-for="(item) in rightTagsList2" 
                 :key='item.id'
@@ -47,26 +47,31 @@
                     </el-input>
                 </div>
                 <p v-if="item.tagName" class="tagName  ellipsis" :title="'[ '+item.tagName+' ]'">{{item.tagName}} </p>
-                <div class="attributeBox">
+                <div class="attributeBox" v-if="item.symptomType === 1 || item.symptomType === 2">
                     <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" v-if="type == 1 && isSymp == 0"> 
-        <div class="mainButton">
+    <div class="buttonBox"> 
+        <div class="mainButton" v-if="type == 1 && isSymp == 0">
             <el-button type="primary" @click="mainSymptom">跟主症状</el-button>
         </div>
-        <div class="followButton">
+        <div class="followButton" v-if="type == 1 && isSymp == 0">
             <el-button type="primary" @click="followSymptom">跟伴随症状</el-button>
         </div>
+        <div class="bottomPartMid bottomPartMidss fl" :class="(type == 1 && isSymp == 0)?'':'bottomPartMids'">
+            <p><span class="el-icon-arrow-up" @click="toggleTopDownList(1)"></span></p>
+            <p><span class="el-icon-arrow-down" @click="toggleTopDownList(2)"></span></p>
+        </div>
     </div>
   </div>
 </template>
 <script>
 import api from '@api/icss.js';
 import utils from '@api/utils.js';
+import { constants } from 'fs';
 
 export default {
     name: "SymptomTagGroup",
@@ -170,12 +175,22 @@ export default {
             }
         },
         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);
+            if(tag.type == 'input'){
+              return;
+            }
+            let tmpArr = [];
+            tmpArr.push(tag);
+            if (this.selectRightTagsList.length > 0 && tag.id == this.selectRightTagsList[0].id) {
+              this.selectRightTagsList = this.selectRightTagsList.filter(item => item.id !== tag.id)
+            }else{
+              this.selectRightTagsList = tmpArr;
             }
+            // 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++) {
@@ -194,6 +209,52 @@ export default {
             // return utils.filterArr(this.selectRightTagsList,item,2)
             return this.isHasTag(item, this.selectRightTagsList)
         },
+        toggleTopDownList(type){
+          if(this.selectRightTagsList.length == 0 || this.rightTagsList2.length == 0){
+            return
+          }
+          const tmpRightSelect = JSON.parse(JSON.stringify(this.selectRightTagsList))
+          const tmpRightLis = JSON.parse(JSON.stringify(this.rightTagsList2))
+          const numLen = tmpRightLis.length
+          const numId = tmpRightSelect[0].id
+          if(type == 1){
+            for(let i = 0;i < tmpRightLis.length;i++){
+              if(numId === tmpRightLis[i].id){//选中的是第几个
+                if(i == 1){//第一个不能往上移动
+                  return;
+                }else{//先把这个元素和后面的输入框从数组中删除,再添加到数组里
+                  let tmp1 = tmpRightLis[i]
+                  let tmp2 = tmpRightLis[i+1]
+                  tmpRightLis.splice(i,1)
+                  tmpRightLis.splice(i,1)
+                  tmpRightLis.splice(i-2,0,tmp1)
+                  tmpRightLis.splice(i-1,0,tmp2)
+                  this.rightTagsList2 = [...tmpRightLis]
+                  this.$emit('changeActionData',this.rightTagsList2, false);
+                  return
+                }
+              }
+            }
+          }else if(type == 2){
+            for(let i = 0;i < tmpRightLis.length;i++){
+              if(numId === tmpRightLis[i].id){
+                if(i == numLen-1){
+                  return;
+                }else{
+                  let tmp1 = tmpRightLis[i]
+                  let tmp2 = tmpRightLis[i+1]
+                  tmpRightLis.splice(i,1)
+                  tmpRightLis.splice(i,1)
+                  tmpRightLis.splice(i+2,0,tmp1)
+                  tmpRightLis.splice(i+3,0,tmp2)
+                  this.rightTagsList2 = [...tmpRightLis]
+                  this.$emit('changeActionData',this.rightTagsList2, false);
+                  return
+                }
+              }
+            }
+          }
+        },
         toLeftList() {
             // if(!this.searchVal) {
             //     this.leftTagsList = this.searchTagList()
@@ -320,6 +381,17 @@ export default {
 
 <style lang="less" >
 @import '../../less/common.less';
+.commomSymptom {
+  .tagList.operationPools {
+    width: 100%;
+  }
+  div.bottomPartMids {
+    margin-left: 20px;
+  }
+  div.bottomPartMidss {
+    margin-top: 30px;
+  }
+}
 .symptomTagGroupWrapper {
     .bottomPartLeft {
         width: 30%;
@@ -398,6 +470,7 @@ export default {
     .buttonBox {
         width: 10%;
         float: left;
+        margin-top: 30px;
     }
     .followButton {
         margin-top: 20px;

+ 2 - 2
src/components/icss/TemplateMaintenance.vue

@@ -19,7 +19,7 @@
                 </el-form-item>
                 <el-form-item label="属于:">
                     <el-select size="mini" v-model="filter.ownTo" placeholder="属于" clearable>
-                        <el-option v-if="!!item.name" v-for="item in AdscriptionsOwnTo" :label="item.name" :value="item.id" :key="item.id" ></el-option>
+                        <el-option v-if="!!item.name" v-for="item in AdscriptionsOwnTo" :label="item.name" :value="item.conceptId" :key="item.conceptId" ></el-option>
                     </el-select>
                 </el-form-item>
                 <el-form-item>
@@ -232,7 +232,7 @@
         // })
         Promise.all([
           api.getModuleInfoOne({moduleId:row.id}),
-          api.getModuleDetailInfo({moduleId:row.id})
+          api.getModuleDetailInfo({moduleId:row.id,type:row.type})
         ]).then((data)=>{
           let data0 = data[0].data;
           let data1 = data[1].data;

+ 36 - 12
src/components/register/Register.vue

@@ -14,7 +14,11 @@
                      
                 <!-- </div> -->
                 <div v-if="flag" class="title-box clearfix"> <h3 class="login-title fl">注册</h3> <h4 class="num fr" @click="toLogin">登录</h4></div>
-                <div v-else class="title-box clearfix"> <h3 class="login-title fl">其他信息</h3> <h4 class="num fr num2">2/2</h4></div>
+                <div v-else class="title-box clearfix">
+                  <!-- 不需要返回按钮 -->
+                  <!-- <span class="back-prev fl"><i class="el-icon-back" @click="backPrev"></i></span>-->
+                  <h3 class="login-title fl">其他信息</h3> <h4 class="num fr num2">2/2</h4>
+                  </div>
                 <form>
                     <div class="main" v-show="flag">
                         <!-- <p>手机号</p> -->
@@ -136,6 +140,9 @@
           path: '/'
         });
       },
+      backPrev() {
+        this.flag = true;
+      },
       CalcuMD5(password){
         // password = password.toUpperCase();
         password = md5(password);
@@ -155,7 +162,8 @@
         if (contactReg.test(this.contact)) {
           /*this.$message({
             message: '联系人只能输入中文',
-            type: 'warning'
+            type: 'warning',
+            showClose: true,
           });*/
           this.imgCodeErr = true;
           this.contactErrText = "联系人只能输入中文";
@@ -180,11 +188,13 @@
               if ((that.picTime--) <= 0) {
                 this.$message({
                   message: '图形验证码已过期',
-                  type: 'warning'
+                  type: 'warning',
+                  showClose: true,
                 });
                 that.picCode = '';
                 that.picTime = 600//图形验证码过期时间10分钟;
                 window.clearInterval(that.picTimer);
+                this.picTimer = null
                 that.getPicCode();//过期刷新验证码
               }
             }, 1000);
@@ -228,7 +238,8 @@
           if (!reg.test(this.phone)) {
             // this.$message({
             //   message: '手机格式不正确',
-            //   type: 'warning'
+            //   type: 'warning',
+            // showClose: true,
 			// });
 			this.phoneErrText = '手机号格式有误'
           
@@ -243,7 +254,8 @@
               }else{
                 this.$message({
                   message: res.data.msg,
-                  type: 'warning'
+                  type: 'warning',
+                  showClose: true,
                 });
                 this.phone = "";
               }
@@ -252,7 +264,8 @@
         }else{
           /*this.$message({
             message: '手机号不能为空',
-            type: 'warning'
+            type: 'warning',
+            showClose: true,
           });*/
         }
       },
@@ -263,7 +276,8 @@
           this.phoneErrText = "手机号不能为空";
           /*this.$message({
             message: '手机号不能为空',
-            type: 'warning'
+            type: 'warning',
+            showClose: true,
           });*/
         }else if(!this.psw.trim()){
           this.imgCodeErr = true;
@@ -283,7 +297,8 @@
 
               this.$message({
                 message: '验证码发送成功',
-                type: 'success'
+                type: 'success',
+                showClose: true,
               });
 
               //按钮倒计时
@@ -303,11 +318,13 @@
                 if ((that.msgCodeTime--) <= 0) {
                   this.$message({
                     message: '短信验证码已过期,请重新获取',
-                    type: 'warning'
+                    type: 'warning',
+                    showClose: true,
                   });
                   that.msgCode = '';
                   that.msgCodeTime = 180;
                   window.clearInterval(that.msgCodeTimer);
+                  that.msgCodeTimer = null;
                 }
               }, 1000);
 
@@ -316,7 +333,8 @@
               console.log(res.data);
               this.$message({
                 message: res.data.msg,
-                type: 'warning'
+                type: 'warning',
+                showClose: true,
               });
               // return
             }
@@ -375,6 +393,10 @@
         })
       },
       toNext() {
+        clearInterval(this.msgCodeTimer);
+        clearInterval(this.picTimer);
+        this.picTimer = null;
+        this.msgCodeTimer = null;
         this.flag = false;
       },
       checkEmail() {
@@ -419,7 +441,8 @@
           if (+res.data.code == 0) {
             this.$message({
               message: '恭喜您,注册成功!',
-              type: 'success'
+              type: 'success',
+              showClose: true,
             });
             //注册成功,跳转登录
             this.$router.push({path: '/'})
@@ -427,7 +450,8 @@
             this.submitCor = true;//注册失败,按钮变灰
             this.$message({
               message: res.data.msg,
-              type: 'warning'
+              type: 'warning',
+              showClose: true,
             });
           }
         }).catch((err) => {

+ 3 - 0
src/components/register/register.less

@@ -32,6 +32,9 @@
   font-size: 12px; //默认字体
   color: #424243; //默认颜色
   box-sizing: border-box;
+  .back-prev {
+    font-size: 16px;
+  }
   h3 {
     text-align: center;
     font-size: 20px;

+ 24 - 6
src/routes.js

@@ -71,8 +71,17 @@ import ChronicDiseaseManage from '@components/icss/ChronicDiseaseManage.vue'; //
 import ChronicDiseaseManageAdd from '@components/icss/ChronicDiseaseManageAdd.vue'; //慢病管理评估维护 -- 添加
 import ChemicalAndCommonMapping from '@components/icss/ChemicalAndCommonMapping.vue'; //化验大小项与公表维护
 import AddChemicalAndCommonMapping from '@components/icss/AddChemicalAndCommonMapping.vue'  //化验大小项与公表维护--添加关联
-import ChronicAndIndexRelation from '@components/icss/ChronicAndIndexRelation.vue'  //医学术语--慢病指标值关联维护
-import AddChronicAndIndexRelation from '@components/icss/AddChronicAndIndexRelation.vue'  //医学术语--添加慢病指标值关联
+import ChronicAndIndexRelation from '@components/icss/ChronicAndIndexRelation.vue'  //医学数据--慢病指标值关联维护
+import AddChronicAndIndexRelation from '@components/icss/AddChronicAndIndexRelation.vue'  //医学数据--添加慢病指标值关联
+import DisAndScaleRelation from '@components/icss/DisAndScaleRelation.vue'  //医学数据--量表关联维护
+import AddDisAndScaleRelation from '@components/icss/AddDisAndScaleRelation.vue'  //医学数据--添加量表关联
+import AssaySon from '@components/icss/AssaySon.vue'  //医学数据--化验子项维护
+import AddAssaySon from '@components/icss/AddAssaySon.vue'  //医学数据--化验子项维护-添加修改
+import ConceptRelation from '@components/icss/ConceptRelation.vue'  //医学数据--术语关联维护
+import AddConceptRelation from '@components/icss/AddConceptRelation.vue'  //医学数据--术语关联维护添加修改
+
+
+
 import MedicalMultRelation from '@components/icss/MedicalMultRelation.vue'  //医学术语--医学术语多层关联维护
 import AddMedicalMultRelation from '@components/icss/AddMedicalMultRelation.vue' //医学术语--添加医学术语多层关联维护
 import MedicalType from '@components/icss/MedicalType.vue'//医学术语维护-类型维护
@@ -185,7 +194,8 @@ export default [
       {path:'LT-YXSJWH-CJXXWH',component:CommonSymptom,name:'CommonSymptom'},  //常见症状维护
       {path:'LT-YXSJWH-TJCJZZ',component:AddCommonSymptom,name:'AddCommonSymptom'},  //常见症状维护--添加
       {path:'LT-YXSJWH-TJBM',component:AddSimilarName,name:'AddSimilarName'},     //别名维护-添加/修改
-      {path:'LT-YXSJWH-MZSMWH',component:DisclaimerInformation,name:'DisclaimerInformation'},     //免责声明
+      // {path:'LT-YXSJWH-MZSMWH',component:DisclaimerInformation,name:'DisclaimerInformation'},     //免责声明
+      {path:'LT-YXSJKWH-MZSMWH',component:DisclaimerInformation,name:'DisclaimerInformation'},     //免责声明
       {path:'LT-YXSJWH-MZSMXQ',component:DiscInfoDetail,name:'DiscInfoDetail'},     //免责声明-详情
       {path:'LT-YXSJWH-TJMZSM',component:AddDisclInfo,name:'AddDisclInfo'},     //免责声明-添加/修改
       {path:'LT-YXSJWH-MBWH',component:TemplateMaintenance,name:'TemplateMaintenance'},     //模板维护
@@ -207,15 +217,23 @@ export default [
       {path:'LT-YXSYKWH-TJYXSYXX',component:AddMedicalInfo,name:'AddMedicalInfo'},  //医学术语维护-信息维护(属性维护) -- 添加
       {path:'LT-YXSJWH-ZDBQWH',component:DiagnosisList,name:'DiagnosisList'},  //诊断标签维护 -- 列表显示
       {path:'LT-YXSJWH-ZDBQTJ',component:DiagnosisTemplate,name:'DiagnosisTemplate'},  //诊断标签维护 -- 添加
-      {path:'LT-YXSJWH-LBJGWH',component:ChronicDiseaseStructureList,name:'ChronicDiseaseStructureList'},  //量表结构维护 -- 列表
+      {path:'LT-YXSYKWH-LBJGWH',component:ChronicDiseaseStructureList,name:'ChronicDiseaseStructureList'},  //量表结构维护 -- 列表
       {path:'LT-YXSJWH-LBJGTJ',component:ChronicDiseaseAdd,name:'ChronicDiseaseAdd'},  //量表结构维护 -- 添加
       {path:'LT-YXSJWH-MBGLYPG',component:ChronicDiseaseManage,name:'ChronicDiseaseManage'},  //慢病管理评估维护 -- 列表
       {path:'LT-YXSJWH-MBGLYTJ',component:ChronicDiseaseManageAdd,name:'ChronicDiseaseManageAdd'},  //慢病管理评估维护 -- 添加
       {path:'LT-YXSJWH-HYDXXYGBXDY',component:ChemicalAndCommonMapping,name:'ChemicalAndCommonMapping'},  //化验大小项与公表维护
       {path:'LT-YXSJWH-TJHYDXXYGBXDY',component:AddChemicalAndCommonMapping,name:'AddChemicalAndCommonMapping'},  //化验大小项与公表维护--添加关联
       {path:'LT-YXSYKWH-YXSYLXWH',component:MedicalType,name:'MedicalType'},     //医学术语--类型维护
-      {path:'LT-YXSYKWH-MBZBZGLWH',component:ChronicAndIndexRelation,name:'ChronicAndIndexRelation'},     //医学术语--慢病指标值关联维护
-      {path:'LT-YXSYKWH-TJMBZBZGL',component:AddChronicAndIndexRelation,name:'AddChronicAndIndexRelation'},     //医学术语--慢病指标值关联维护
+      {path:'LT-YXSJWH-MBZBZGLWH',component:ChronicAndIndexRelation,name:'ChronicAndIndexRelation'},     //医学数据--慢病指标值关联维护
+      {path:'LT-YXSJWH-TJMBZBZGL',component:AddChronicAndIndexRelation,name:'AddChronicAndIndexRelation'},     //医学数据--慢病指标值关联维护
+      {path:'LT-YXSJWH-LBGLWH',component:DisAndScaleRelation,name:'DisAndScaleRelation'},     //医学数据--慢病指标值关联维护
+      {path:'LT-YXSJWH-TJLBGL',component:AddDisAndScaleRelation,name:'AddDisAndScaleRelation'},     //医学数据--慢病指标值关联维护
+      {path:'LT-YXSYKWH-HYZXWH',component:AssaySon,name:'AssaySon'},     //医学数据--化验子项维护
+      {path:'LT-YXSYKWH-TJHYZX',component:AddAssaySon,name:'AddAssaySon'},     //医学数据--化验子项添加修改   
+      {path:'LT-YXSYKWH-YXSYGLWH',component:ConceptRelation,name:'ConceptRelation'},     //医学数据--医学术语关联维护   
+      // {path:'LT-YXSYKWH-YXSYLXWH',component:ConceptRelation,name:'ConceptRelation'},     //医学数据--医学术语关联维护   
+      {path:'LT-YXSYKWH-TJYXSYGL',component:AddConceptRelation,name:'AddConceptRelation'},     //医学数据--医学术语关联维护-添加修改   
+
       {path:'LT-YXSYKWH-YXSYDCGLWH',component:MedicalMultRelation,name:'MedicalMultRelation'},   //医学术语--医学术语多层关联维护
       {path:'LT-YXSYKWH-TJYXSYDCGL',component:AddMedicalMultRelation,name:'AddMedicalMultRelation'},   //医学术语--添加医学术语多层关联
     ]