Browse Source

Merge remote-tracking branch 'origin/master' into referMaster

zhouna 5 years ago
parent
commit
5ef70543b8
50 changed files with 2881 additions and 688 deletions
  1. 9 4
      package-lock.json
  2. 21 12
      src/api/config.js
  3. 9 0
      src/api/diagBase.js
  4. 3 6
      src/api/icss.js
  5. 6 0
      src/api/index.js
  6. 9 0
      src/api/medicalStatistics.js
  7. 8 6
      src/api/utils.js
  8. 98 1
      src/components/common/HomePage.vue
  9. 792 203
      src/components/diagBase/AddDiagBase.vue
  10. 13 3
      src/components/diagBase/DiagBase.vue
  11. 434 0
      src/components/diagBase/DisFeatureItem.vue
  12. 339 0
      src/components/diagBase/DisFormulaItem.vue
  13. 52 0
      src/components/diagBase/Textarea.vue
  14. 269 236
      src/components/icss/AddChemicalAndCommonMapping.vue
  15. 15 16
      src/components/icss/AddChronicAndIndexRelation.vue
  16. 26 16
      src/components/icss/AddConceptRelation.vue
  17. 1 1
      src/components/icss/AddIndeptLabel.vue
  18. 41 12
      src/components/icss/AddMedicalMultRelation.vue
  19. 102 10
      src/components/icss/AddMedicalName.vue
  20. 12 11
      src/components/icss/AddMedicinePrompt.vue
  21. 29 9
      src/components/icss/AddVersion.vue
  22. 3 1
      src/components/icss/AssaySon.vue
  23. 21 3
      src/components/icss/BloodPressTagGroup.vue
  24. 68 13
      src/components/icss/ConceptRelation.vue
  25. 2 1
      src/components/icss/IndeptLabel.vue
  26. 21 3
      src/components/icss/InspactTagGroup.vue
  27. 8 7
      src/components/icss/LabelGroup.vue
  28. 15 11
      src/components/icss/MedicalMultRelation.vue
  29. 15 15
      src/components/icss/MedicineInfoPg.vue
  30. 37 5
      src/components/icss/MedicinePrompt.vue
  31. 11 0
      src/components/icss/NoiseTemplate.vue
  32. 9 3
      src/components/icss/PubIndeptTag.vue
  33. 8 2
      src/components/icss/PubTagGroup.vue
  34. 27 8
      src/components/icss/PubTagPartDetail.vue
  35. 5 5
      src/components/icss/SingleSelect.vue
  36. 4 0
      src/components/icss/SymptomPush.vue
  37. 22 3
      src/components/icss/SymptomTagGroup.vue
  38. 1 1
      src/components/icss/TemplateMaintenance.vue
  39. 15 8
      src/components/icss/VersionDesc.vue
  40. 48 15
      src/components/icss/VersionInfo.vue
  41. 146 0
      src/components/medicalStatistics/MedicalStatistics.vue
  42. 1 0
      src/components/preTreat/AddCombinQuestion.vue
  43. 1 0
      src/components/preTreat/AddSimpleQuestion.vue
  44. 23 12
      src/components/preTreat/CombinQuestion.vue
  45. 12 7
      src/components/preTreat/PubIndeptQa.vue
  46. 48 14
      src/components/preTreat/SimpleQuestion.vue
  47. BIN
      src/images/new.png
  48. 15 2
      src/less/common.less
  49. 5 1
      src/routes.js
  50. 2 2
      vue.config.js

+ 9 - 4
package-lock.json

@@ -4818,7 +4818,8 @@
         "ansi-regex": {
           "version": "2.1.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "aproba": {
           "version": "1.2.0",
@@ -5233,7 +5234,8 @@
         "safe-buffer": {
           "version": "5.1.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "safer-buffer": {
           "version": "2.1.2",
@@ -5289,6 +5291,7 @@
           "version": "3.0.1",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "ansi-regex": "^2.0.0"
           }
@@ -5332,12 +5335,14 @@
         "wrappy": {
           "version": "1.0.2",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "yallist": {
           "version": "3.0.2",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         }
       }
     },

+ 21 - 12
src/api/config.js

@@ -15,6 +15,8 @@ export default {
     'getSmsWithResetPassword': '/api/user/userver/getSmsWithResetPassword',
     'resetPassword': '/api/user/user/resetPassword',
     'getAccessdMenu': '/api/user/user/getUserOrgMenu',  //获取左侧菜单项
+    'getVersionInner':'api/knowledgeman/versionInfo/getVersionInfoInner',  //获取内部版本信息
+    'getVersionOuter':'api/knowledgeman/versionInfo/getVersionInfoOuter',  //获取外部版本信息
     'getUserEnumsData': '/api/user/getUserEnumsData',   //获取用户枚举数据
     'getDiagbotManEnumsData':'/api/diagbotman/getDiagbotManEnumsData',      //获取产品枚举类型
     /* 朗通后台相关接口 */
@@ -137,16 +139,17 @@ export default {
     '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', //版本信息-修改版本说明
-    'getVersionDetlInfo': 'api/icssman/versionDetail/getDetailById', //版本信息-版本说明列表获取
+    // 'versionInfo': 'api/icssman/versionInfo/getVersionInfoAlls', //版本信息
+    'versionInfo': 'api/knowledgeman/versionInfo/getVersionInfoAlls', //版本信息
+    'addVersInfo': 'api/knowledgeman/versionInfo/saveVersionInfoAlls', //版本信息-添加
+    'updateVersInfo': 'api/knowledgeman/versionInfo/updateVersionInfoAlls', //版本信息-修改
+    'delVersionInfo': 'api/knowledgeman/versionDetail/cancelVersionDetails', //版本信息-删除版本说明
+    'addVersionInfo': 'api/knowledgeman/versionDetail/addVersionDetails', //版本信息-添加版本说明
+    'modiVersionInfo': 'api/knowledgeman/versionDetail/updateVersionDetails', //版本信息-修改版本说明
+    'getVersionDetlInfo': 'api/knowledgeman/versionDetail/getDetailById', //版本信息-版本说明列表获取
     'promptServer':'/api/knowledgeman/file/uploadImage',    //静态知识富文本图片上传
     /**************医学术语维护****************/
-    'getKnowledgeEnums':'api/knowledgeman/getKlmEnumsData', //术语库枚举
+    'getKnowledgeEnums':'/api/knowledgeman/getKlmEnumsData', //术语库枚举
 	  'saveConceptInfo':'/api/knowledgeman/conceptDetail/insertOrUpdate',   //保存术语静态知识
     'delConceptInfo':'/api/knowledgeman/conceptDetail/delete',   //删除术语静态知识
     'knowledgeName': 'api/knowledgeman/concept/getAllInformation', //医学术语-命名维护
@@ -173,12 +176,12 @@ export default {
     'getAllConcept':'/api/knowledgeman/conceptDetail/index',   //医学术语--获取所有概念(标准术语)
     'getAllBodypart': '/api/knowledgeman/bodypart/getAllBodypart',  //医学术语--获取所有部位
     'getAllDepts': '/api/knowledgeman/medical/getAllDepts',  //医学术语--获取所有科室
-    'getLisMappingPage': '/api/icssman/lisMapping/getLisMappingPage', //医学数据-化验大小项与公表项维护-列表
-    'saveLisMapping': '/api/icssman/lisMapping/saveLisMapping',  //医学数据-化验大小项与公表项维护-新增
-    'delLisMappingById': '/api/icssman/lisMapping/delLisMappingById',  //医学数据-化验大小项与公表项维护-单个删除
+    'getLisMappingPage': '/api/knowledgeman/lisMapping/getLisMappingPage', //医学数据-化验大小项与公表项维护-列表
+    'saveLisMapping': '/api/knowledgeman/lisMapping/saveLisMapping',  //医学数据-化验大小项与公表项维护-新增
+    'delLisMappingById': '/api/knowledgeman/lisMapping/delLisMappingById',  //医学数据-化验大小项与公表项维护-单个删除
     'delLisMappingByIds': '/api/icssman/lisMapping/delLisMappingByIds', //医学数据-化验大小项与公表项维护-批量删除
     'modifyLisMapping': '/api/icssman/lisMapping/modifyLisMapping',  //医学数据-化验大小项与公表项维护-修改
-    'hasLisMapping': '/api/icssman/lisMapping/hasLisMapping',  //医学数据-化验大小项与公表项维护-化验公表项映射是否已存在
+    'hasLisMapping': '/api/knowledgeman/lisMapping/hasLisMapping',  //医学数据-化验大小项与公表项维护-化验公表项映射是否已存在
     'getTypeList': 'api/knowledgeman/lexicon/getLexiconList', //术语类型-列表
     'addType': 'api/knowledgeman/lexicon/addLexicon', //术语类型-添加
     'getAllLisConcept':'api/knowledgeman/concept/getAllLisConcept',  //医学数据-化验大小项与公表项维护-获取所有化验公表项
@@ -214,6 +217,7 @@ export default {
     'relationContactDetail': 'api/knowledgeman/multContact/relationContactDetail', //知识库标准化-医学术语多层关联维护-详情
     'addMultRelation': 'api/knowledgeman/multContact/addRelation', //知识库标准化-医学术语多层关联维护-添加或者编辑
     'reloadLib': 'api/knowledgeman/reload/createFile', //术语命名-加载词库
+    'getDeptList': '/api/knowledgeman/concept/getConceptListByType', //术语命名-诊断-科室
 	  /*********预问诊相关接口**********/
 	  'questionList':'/api/precman/questionInfo_prec/page',     //预问诊-填写单列表
     'questionAdd':'/api/precman/questionInfo_prec/saveOrUpdate',      //预问诊-填写单添加
@@ -241,6 +245,11 @@ export default {
      'diagBaseUpdateNeo': '/api/knowledgeman/diagnose/updateNeo', //诊断依据--更新图谱
      'diagBaseVerifyAllData': '/api/knowledgeman/diagnose/verifyAllData', //诊断依据--校验所有数据
      'diagBaseVerifyData': '/api/knowledgeman/diagnose/verifyData', //诊断依据--校验数据
+     'tempSaveOrUpate':'/api/knowledgeman/diagnose/tempSaveOrUpate', //诊断依据-临时保存
+     'diagBaseSearch':'/api/knowledgeman/diagnose/search', //诊断依据-搜索标准词或者关联词
+     'getUniqueNameWithList': '/api/knowledgeman/lisMapping/getUniqueNameWithList', //医学数据-查找化验公表名
+      /*********数据统计  *********/
+      'statisticsCount': '/api/bi/statistics/count', //诊断依据--校验数据
 
   },
 	menuIconList: { //菜单对应图标

+ 9 - 0
src/api/diagBase.js

@@ -53,5 +53,14 @@ export default {
     },
     diagBaseVerifyData(param){ //诊断依据--校验数据
         return axios.post(urls.diagBaseVerifyData, param)
+    },
+    getUniqueNameWithList(param) { //诊断依据--获取公表项
+        return axios.post(urls.getUniqueNameWithList, param)
+    },
+    tempSaveOrUpate(param) { //诊断依据-临时保存
+        return axios.post(urls.tempSaveOrUpate, param)
+    },
+    diagBaseSearch(param) { //诊断依据-临时保存
+        return axios.post(urls.diagBaseSearch, param)
     }
 }

+ 3 - 6
src/api/icss.js

@@ -319,12 +319,6 @@ export default {
     delLisMappingById(param) {  //医学数据-化验大小项与公表项维护-单个删除
         return axios.post(urls.delLisMappingById, param)
     },
-    delLisMappingByIds(param) {  //医学数据-化验大小项与公表项维护-批量删除
-        return axios.post(urls.delLisMappingByIds, param)
-    },
-    modifyLisMapping(param) {  //医学数据-化验大小项与公表项维护-修改
-        return axios.post(urls.modifyLisMapping, param)
-    },
     hasLisMapping(param) {  //医学数据-化验大小项与公表项维护-化验公表项映射是否已存在
         return axios.post(urls.hasLisMapping, param)
     },
@@ -421,4 +415,7 @@ export default {
     reloadLib() {    //医学术语命名维护-加载词库
         return axios.post(urls.reloadLib)
     },
+    getDeptList(param) {    //医学术语命名维护-添加-获取科室
+        return axios.post(urls.getDeptList,param)
+    },
 }

+ 6 - 0
src/api/index.js

@@ -102,6 +102,12 @@ export default {
   getAccessdMenu() {
     return axios.post(urls.getAccessdMenu);
   },
+  getVersionInner(){
+    return axios.post(urls.getVersionInner);
+  },
+  getVersionOuter(){
+    return axios.post(urls.getVersionOuter);
+  },
   getUserEnumsData() {
     return axios.post(urls.getUserEnumsData);
   }

+ 9 - 0
src/api/medicalStatistics.js

@@ -0,0 +1,9 @@
+import axios from 'axios';
+import config from './config.js';
+const urls = config.urls;
+
+export default {
+    statisticsCount() {
+        return axios.post(urls.statisticsCount)
+    }
+}

+ 8 - 6
src/api/utils.js

@@ -138,14 +138,16 @@ export default {
         mapping.formPosition = 0;
         mapping.exclusionType = 0;
         mapping.symptomType = dataArr[i].symptomType
-        if(dataArr[i].type === 'input') {
-          if(dataArr[i].text) { //过滤掉输入框未输入内容项
-            mapping.text = dataArr[i].text
+        if(dataArr[i].type){
+          if(dataArr[i].type === 'input') {
+            if(dataArr[i].text) { //过滤掉输入框未输入内容项
+              mapping.text = dataArr[i].text
+              tmpArr.push(mapping)
+            }
+          } else {
+            mapping.sonQuestion = dataArr[i].id
             tmpArr.push(mapping)
           }
-        } else {
-          mapping.sonQuestion = dataArr[i].id
-          tmpArr.push(mapping)
         }
       } else if(type == 11) {    //推送症状类型(添加症状)
         mapping.formPosition = 0;

+ 98 - 1
src/components/common/HomePage.vue

@@ -8,6 +8,13 @@
             </div>
                  <lt-menu v-if="menuWrappers&&menuWrappers.length" v-bind:role="getRole"
                  v-bind:data="menuWrappers"></lt-menu>
+            <div class="version">
+                <p>
+                    <span>版本信息:</span>
+                    <a href="javascript:void(0)" @click="showVersion">{{versionName}}</a>
+                    <i v-if="isNewV"><img src="../../images/new.png" alt=""/></i>
+                </p>
+            </div>
         </el-aside>
         <el-container>
             <el-header class="clearfix">
@@ -26,6 +33,13 @@
               <router-view v-if="ok" v-on:status-change="changeStatus"></router-view>
             </el-main>
         </el-container>
+        <el-dialog
+                title="版本信息"
+                :visible.sync="versionVisible"
+                width="50%"
+                class="version-info">
+            <div v-html="versionInfo"></div>
+        </el-dialog>
     </el-container>
 </template>
 
@@ -35,7 +49,7 @@
   import api from '@api/index.js';
   import userApi from '@api/user.js';
   import Console from '@components/user/Console.vue';
-
+  import newIcon from '../../images/new.png';
   export default {
     name: 'homepage',
     components: {
@@ -51,6 +65,11 @@
         authStatus: null,
         authStatusName:'',
         ok:false,           //是否已获取到菜单
+        versionName:'',
+        versionVisible:false,
+        versionInfo:'',
+        isNewV:false,
+        version:null,       //版本信息接口返回的数据
       }
     },
     computed: {
@@ -69,6 +88,7 @@
             }
             if(to.path=='/'){       // 退出时清空菜单
               this.menuWrappers=[];
+              this.isNewV = false;
             }
         }
     },
@@ -91,11 +111,50 @@
               const url = this.getRole=='user'?'/user/YH-KZT':'/admin/LT-KZT';
               this.$router.push({path:url});
             }
+            this.getVersionInfo();
           }
         }).catch((error) => {
           console.log(error);
         });
       },
+      isNewVersion(){           //判断是否为新版
+
+      },
+      getVersionInfo(){
+        const getInfo = this.getRole=='user'?api.getVersionOuter:api.getVersionInner;
+        getInfo().then((res)=>{
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.fillVersionInfo(data);
+          }else{
+            this.$message(res.data.msg);
+          }
+        });
+      },
+      fillVersionInfo(data){
+        //进入时获取版本信息,如版本时间与localStorage中不一致或者一致但localStorage中未被点过,
+        // 则要显示更新图标
+        let htl = data.refreshTime?'<h3>当前版本:'+data.name+'<span>'+data.refreshTime.substr(0,10)+'</span></h3>':'<h3>当前版本:'+data.name+'</h3>';
+        let prags = data.detail||[];
+        this.versionName = data.name;
+        const versionTime = JSON.parse(localStorage.getItem('versionInfo-'+this.userLoginDTO.username));
+        if(!versionTime||(data.refreshTime===versionTime.date&&!versionTime.showed)){
+          this.isNewV = true;
+        }else{
+          this.isNewV = false
+        }
+        for(let i=0;i<prags.length;i++){
+            htl += '<p>'+prags[i].title+'</p><p>'+prags[i].description+'</p>';
+        }
+        this.versionInfo = htl;
+        this.version = {date:data.refreshTime};
+      },
+      showVersion(){
+        this.versionVisible = true;
+        this.version.showed = true;
+        this.isNewV = false;
+        localStorage.setItem('versionInfo-'+this.userLoginDTO.username,JSON.stringify(this.version));
+      },
       /*redirectPage(){
         const url = this.getRole=='user'?'/user':'/admin';
         this.$router.push({path:url});
@@ -143,9 +202,47 @@
     .admin .username{
         cursor: pointer;
     }
+    .version-info h3{
+        font-size: 14px;
+        margin-bottom: 20px;
+        span{
+            float: right;
+            font-weight: normal;
+        }
+    }
 </style>
 <style lang="less" scoped>
     @import '../../less/common.less';
+    .el-menu-vertical-demo.el-menu{
+        height: calc(100% - 120px);
+        overflow-y: auto;
+    }
+    .version{
+        position: fixed;
+        bottom: 0;
+        width: @aside-width;
+        min-width: 270px;
+        font-size: 12px;
+        /*text-indent: 50px;*/
+        text-align: center;
+        height:54px;
+        line-height: 54px;
+        background: #fff;
+        i{
+            display: inline-block;
+            width: 20px;
+            height: 16px;
+            img{
+                vertical-align: text-top;
+            }
+        }
+    }
+    .user .version a{
+        color: @userBase;
+    }
+    .admin .version a{
+        color: @adminBase;
+    }
     .user .logo {
         background: @userBase;
 

File diff suppressed because it is too large
+ 792 - 203
src/components/diagBase/AddDiagBase.vue


+ 13 - 3
src/components/diagBase/DiagBase.vue

@@ -47,8 +47,8 @@
                     :resizable = "false"
                     label="校验数据">
                     <template slot-scope="scope" >
-                        <span :class="scope.row.hasQuestion == '0' ? '': 'hsaQuestion'">
-                            {{scope.row.hasQuestion == '0' ? "无问题词" : "有问题词"}}
+                        <span :class="scope.row.hasQuestion == '0' ? '': scope.row.hasQuestion == '1'? 'hsaQuestion' :scope.row.hasQuestion == '2'?'hasTemp':''">
+                            {{scope.row.hasQuestion == "0" ? "无问题词" : scope.row.hasQuestion == "1"? "有问题词":scope.row.hasQuestion == "2"?"暂存数据":""}}
                         </span>
                     </template>
                 </el-table-column>
@@ -123,6 +123,7 @@ export default {
         }
     },
     created() {
+      
         this.$nextTick(()=>{
           this.getDropList()
           this.getDataList()
@@ -155,7 +156,9 @@ export default {
         },
         getDataList(isTurnPage) {
             const param = this.getFilterItems(isTurnPage);
-            this.searched = true;
+            setTimeout(()=>{
+              this.searched = true;
+            },0)
             api.diagBasePage(param).then((res) => {
                 this.list = res.data.data.records
                 this.total = res.data.data.total;
@@ -183,6 +186,7 @@ export default {
             loading.close();
             const {code,data,msg} = res.data;
             if(code === '0') {
+              this.warning('校验完成','success')
               this.currentPage = 1;
                this.pageSize = 10,
                this.filter.disName = '',
@@ -301,6 +305,9 @@ export default {
 
 <style lang="less">
     @import "../../less/admin.less";
+    .el-form--inline .el-form-item__content {
+      vertical-align: text-bottom;
+    }
     .delete{
        color: red;
     }
@@ -313,4 +320,7 @@ export default {
     .hsaQuestion {
         color: red;
     }
+    .hasTemp{
+      color: blue;
+    }
 </style>

+ 434 - 0
src/components/diagBase/DisFeatureItem.vue

@@ -0,0 +1,434 @@
+<template>
+    <tr> 
+                    <td class="FeatureSort" >{{index+1}}</td>
+                    <td class="FeatureType" >
+                        <el-select size="mini" :class="{selectType: item.typeNull}" v-model.trim="item.type" placeholder="标签类型" @change="clickItem(index,'FeatureType')">
+                            <el-option v-for="item in featureTypeList" :label="item.name" :value="item.key" :key="item.key"></el-option>
+                        </el-select>
+                    </td>
+                    <td class="FeatureNumber" :class="{borderRed:item.verifyCode||item.codeNull}"  @click.self="clickItemBox" >
+                        <el-tooltip :disabled="!item.verifyCode&&!item.codeNull&&!item.codeError" class="item" effect="dark" :content="item.verifyCode||item.codeNull||item.codeError" placement="top">
+                            <el-input class="groupTextarea" 
+                                ref="textarea"
+                                type="textarea"  
+                                :autosize="{ minRows: 1}"
+                                :class="{colorRed: item.codeError}" 
+                                :title="item.code" 
+                                v-model.trim="item.code"
+                                 @input="handleInp(index,$event,'FeatureNumber')"  
+                                 @focus="clickItem(index,'FeatureNumber')">
+                            </el-input>
+                        </el-tooltip>
+                    </td>
+                    <td class="FeatureStand" :class="{borderRed:item.verifyStandard||item.standardNull}"    @click.self="clickItemBox">
+                        <el-tooltip  :disabled="!item.verifyStandard&&!item.standardNull" class="item" effect="dark" :content="item.verifyStandard||item.standardNull" placement="top">
+                            <el-input class="groupTextarea" 
+                                ref="textarea" 
+                                type="textarea"
+                                :autosize="{ minRows: 1}"
+                                :title="item.standard" 
+                                v-model.trim="item.standard" 
+                                @input="handleInp(index,$event,'FeatureStand',item.type)"   
+                                @focus="clickItem(index,'FeatureStand')">
+                            </el-input>
+                        </el-tooltip>    
+                        <div  class="searchItemBox">
+                            <ul 
+                                class="searchItemList"
+                                v-if="showDiagList&&index === searchIndex && searchFiled ==='FeatureStand' && searchResultList.length > 0"
+                            >
+                                <li v-for="(item, ind) in searchResultList" 
+                                    class="diagItem ellipsis"
+                                    :key="ind"
+                                    :title="item"
+                                    @click="selectSearchItem(index,item,'FeatureStand')"
+                                > 
+                                    {{item}}
+                                </li>
+
+                            </ul>  
+                        </div> 
+                          
+                    </td>
+                    <td class="FeatureRelate"  :class="{borderRed:item.verifyRelation|| item.relationNull}"  @click.self="clickItemBox">
+                        <el-tooltip :disabled="!item.verifyRelation&&!item.relationNull"  class="item" effect="dark" :content="item.verifyRelation||item.relationNull" placement="top">
+                            <el-input class="groupTextarea" 
+                                ref="textarea"
+                                type="textarea"
+                                :autosize="{ minRows: 1}"
+                                :title="item.relation" 
+                                v-model.trim="item.relation" 
+                                @input="handleInp(index,$event,'FeatureRelate',item.type)"  
+                                @focus="clickItem(index,'FeatureRelate')">
+                            </el-input>
+                           
+                        </el-tooltip> 
+                        <div class="searchItemBox">
+                             <ul 
+                                class="searchItemList"
+                                v-if="showDiagList&&index === searchIndex && searchFiled ==='FeatureRelate' && searchResultList.length > 0"
+                            >  
+                                <li v-for="(item, ind) in searchResultList" 
+                                    class="diagItem ellipsis"  
+                                    :key="ind"
+                                    :title="item"
+                                    @click="selectSearchItem(index,item,'FeatureRelate')"
+                                > 
+                                    {{item}}
+                                </li>
+
+                            </ul>
+                        </div>
+                        
+                    </td>
+                     <td class="FeatureuniqueName inpDisabled"  :class="{borderRed:item.uniqueName===null ||item.verifyUnique}" >
+                        <el-tooltip :disabled="!item.verifyUnique"  class="item" effect="dark" :content="item.verifyUnique" placement="top">
+                            <el-input class="groupTextarea inpDisabled"  
+                                ref="textarea"
+                                type="textarea"
+                                :readonly = true
+                                :autosize="{ minRows: 1}"
+                                :title="item.uniqueName" 
+                                v-model.trim="item.uniqueName" 
+                                >
+                            </el-input>
+                            
+                        </el-tooltip> 
+                    </td>
+                    <td class="FeatureResult" :class="{inpDisabled:item.type!=3,borderRed:item.verifyResult,}" @click.self="clickItemBox">
+                        <el-tooltip :disabled="!item.verifyResult"  class="item" effect="dark" :content="item.verifyResult" placement="top">
+                            <el-input class="groupTextarea"
+                                ref="textarea"
+                                type="textarea"  
+                                :autosize="{ minRows: 1}"
+                                :readonly="item.type!=3"  
+                                :class="{inpDisabled:item.type!=3}"  
+                                :title="item.midResult" 
+                                v-model.trim="item.midResult" 
+                                @input="handleInp(index,$event,'FeatureResult')"
+                                @focus="clickItem(index,'FeatureResult')">
+                            </el-input>
+                        </el-tooltip> 
+                    </td>
+                    <td class="FeatureOpera">
+                        <el-button type="text" size="small" class="delete" @click="addItem(index, 1)"><div class="btnOpera">+</div></el-button>
+                        <el-button v-if="index !=0" type="text" size="small" class="delete" @click="delItem(index, 1)"><div class="btnOpera">-</div></el-button>
+                    </td>
+                </tr>
+</template>
+<script>
+export default {
+    props:['item', 'index','featureTypeList','showDiagList','searchIndex',
+            'searchFiled', 'searchResultList'],
+    data() {
+        return {
+            timer: undefined
+        }
+    },
+    mounted(){
+        this.$nextTick(()=>{
+            if(Array.isArray(this.$refs.textarea)) {
+                for(let i=0; i <this.$refs.textarea.length; i++) {
+                    this.$refs.textarea[i].resizeTextarea()
+                } 
+            }else {
+                this.$refs.textarea&&this.$refs.textarea.resizeTextarea()
+            }
+            
+        })
+       
+   },
+    methods: {
+        handleInp(index,e,type,itemType) {
+            clearTimeout(this.timer)
+            let timer = setTimeout(()=>{
+                clearTimeout(this.timer);
+                this.$emit('handleInp',{index,e,type,itemType})
+            }, 100)
+            this.timer = timer
+        },
+        clickItem(index, type) {
+             this.$emit('clickItem',{index, type})
+        },
+        addItem(index, type) {
+          this.$emit('addItem',{index, type}) 
+        },
+        delItem(index, type) {
+          this.$emit('delItem',{index, type}) 
+        },
+        selectSearchItem(index, item, searchType) {
+            this.$emit('selectSearchItem',{index, item, searchType}) 
+        },
+        clickItemBox(e) {
+            e.target.children[0].focus()
+        },
+    }
+}
+</script>
+<style lang="less" scoped>
+    @import '../../less/common.less';
+        table,tr,td {
+            list-style: none;
+        }
+        .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;
+            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;
+            background: #fff;
+            width: 162px;
+            max-height: 150px;
+            border: 1px solid #a9a9a9;
+            left: 138px;
+            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;
+        }
+        .addDiagName {
+            position: relative;
+        }
+        .symptomList {
+            position: relative;
+            background-color: #fff;
+             padding: 0px 20px 100px 20px;
+             margin: 0px 20px 40px 20px;
+             min-height: 400px;
+        }
+        
+        .diagTable {
+            width: 100%;
+            border-collapse: collapse;
+            margin-bottom: 20px;
+            tr {
+                td {
+                    /deep/textarea::-webkit-scrollbar{
+                        display: none;
+                    }
+                    position: relative;
+                    border: 1px solid #a9a9a9;
+                    text-align: center;
+                }
+                .FormulaOpera, .FeatureOpera{
+                    background: #fff;
+                    border: none;
+                    text-align: left;
+                    padding-left: 30px;
+                }
+                /deep/.el-textarea__inner {
+                    width: 100%;
+                    line-height: 20px;
+                    resize:none;
+                    border: none;
+                    border-radius: 0;
+                    text-align: center;
+                }
+            }
+            .selectedContent {
+                width: 25%;
+            }
+            .selectedContentGroup {
+                width: 55%;
+            }
+            .selectedContentOpera {
+                width: 20%;
+            }
+        }
+        .groupInput {
+            text-align: center;
+            color: #606266;
+            width: 80%;
+        }
+        .groupTextarea {
+             text-align: center;
+            color: #606266;
+            width: 100%;
+        }
+        .btn {
+            position: absolute;
+            background-color: #fff;
+            width: 100%;
+            margin: 20px 0;
+            height: 40px;
+            bottom: 0px;
+            right: 0px;
+            .btnBox {
+                position: absolute;
+                right: 0px;
+                
+            }
+            .el-button {
+                margin-right: 20px;
+               
+            }
+        }
+        .tableTitle{
+            background: rgba(239,243,249,1);
+            height: 40px;
+        }
+        .require::after{
+            content:"*";
+            color: red;
+        }
+        .borderRed {
+            border: 3px solid red !important;
+            box-sizing: border-box !important;
+        }
+        .colorRed {
+            color: red;
+        }
+        .FeatureSort {
+            width: 5%;
+        }
+        .FeatureType {
+            width: 7%;
+            padding: 0 5px;
+        }
+        .FeatureNumber {
+            width: 8%;
+        }
+        .FeatureStand {
+            width: 20%;
+        }
+        .FeatureRelate {
+            width: 30%;
+        }
+        .FeatureuniqueName {
+            width: 10%;
+        }
+        .FeatureResult {
+            width: 10%;
+        } 
+        .FeatureOpera{
+            width: 10%;
+        } 
+        .FormulaSort{
+            width: 5%;
+        } 
+        .FormulaType{
+            width: 7%;
+            padding: 0 5px;
+        } 
+        .FormulaNumber{
+            width: 78%;
+        } 
+        .FormulaOpera{
+            width: 10%;
+        }
+        .btnOpera {
+            width:16px;
+            height:16px;
+            background:rgba(176,190,197,1);
+            border-radius: 50%;
+            color: #fff;
+            line-height: 16px;
+            text-align: center;
+        }
+        /deep/.el-input--mini .el-input__inner {
+            width: 80px;
+        }
+        /deep/ .is-disabled {
+                    background: #ECECEC;
+                    color: #AAAAAA;
+                    border: none;
+                }
+        .selectType {
+            input {
+                border: 3px solid red;
+            }
+            input:hover {
+                border: 3px solid red;
+            }
+        }
+        .moduleTitle {
+            margin: 0 0 10px 0;
+            font-weight: 600;
+        }
+        .inpDisabled{
+            background: #ECECEC;
+            cursor: not-allowed;
+            textarea {
+                background: #ECECEC;
+                color: #AAAAAA;
+                border: none;
+                cursor: not-allowed;
+                height: 100%;
+            }
+            
+        }
+        .inpTips {
+            font-size: 14px;
+            color: red;
+            margin-bottom: 10px;
+        }
+        #upFile{
+            display: none
+        }
+        .disableDiv {
+            background: rgb(236, 236, 236);
+            box-sizing: border-box;
+            cursor: not-allowed;
+            font-size: 14px;
+            line-height: 20px;
+            padding: 5px 0;
+            min-height: 30px;
+        }
+        .searchItemBox{
+            position: relative;
+            bottom: 0px;
+        }
+        .searchItemList {
+            position: absolute;
+            border: 1px solid #a9a9a9;
+            box-sizing: border-box;
+            top: 4px;
+            z-index: 2;
+            width: 100%;
+            max-height: 150px;
+            overflow: auto; 
+            background: #fff;
+            margin: 0 0 20px 0;
+        }   
+    
+</style>

+ 339 - 0
src/components/diagBase/DisFormulaItem.vue

@@ -0,0 +1,339 @@
+<template>
+    <tr> 
+                    <td class="FormulaSort">{{index +1}}</td>
+                    <td class="FormulaType">
+                        <el-select size="mini" :class="{selectType: item.verifyType}" v-model.trim="item.type" placeholder="标签类型"  @change="clickItem(index,'FormulaType')">
+                            <el-option v-for="item in formulaTypeList" :label="item.name" :value="item.key" :key="item.key"></el-option>
+                        </el-select>
+                    </td>
+                    <td class="FormulaNumber" :class="{borderRed:item.verifyFormula}">
+                        <el-tooltip :disabled="!item.verifyFormula"  class="item" effect="dark" :content="item.verifyFormula" placement="top">
+                            <el-input class="groupTextarea"
+                                ref="textarea"
+                                type="textarea"  
+                                :readonly="!item.type"
+                                :autosize="{ minRows: 1}"
+                                :class="{borderRed:item.verifyFormula,inpDisabled:!item.type}"
+                                :title="item.formula" 
+                                v-model.trim="item.formula" 
+                                @input="handleInp(index,$event,'FormulaNumber',item.type)"
+                                @focus="clickItem(index,'FormulaNumber')">
+                            </el-input>
+                        </el-tooltip> 
+                    </td>
+                   <td class="FeatureOpera">
+                        <el-button type="text" size="small" class="delete" @click="addItem(index, 2)"><div class="btnOpera">+</div></el-button>
+                        <el-button v-if="index !=0" type="text" size="small" class="delete" @click="delItem(index, 2)"><div class="btnOpera">-</div></el-button>
+                    </td>
+                </tr>
+</template>
+<script>
+export default {
+    props:['item', 'index','formulaTypeList'],
+    data() {
+        return {
+            timer: undefined
+        }
+    },
+    mounted(){
+        this.$nextTick(()=>{
+            if(Array.isArray(this.$refs.textarea)) {
+                for(let i=0; i <this.$refs.textarea.length; i++) {
+                    this.$refs.textarea[i].resizeTextarea()
+                } 
+            }else {
+                this.$refs.textarea&&this.$refs.textarea.resizeTextarea()
+            }
+            
+        })
+       
+   },
+    methods: {
+        handleInp(index,e,type,itemType) {
+             clearTimeout(this.timer)
+            let timer = setTimeout(()=>{
+                clearTimeout(this.timer);
+                this.$emit('handleInp',{index,e,type,itemType})
+            }, 100)
+            this.timer = timer
+        },
+        clickItem(index, type) {
+             this.$emit('clickItem',{index, type})
+        },
+        addItem(index, type) {
+          this.$emit('addItem',{index, type}) 
+        },
+        delItem(index, type) {
+          this.$emit('delItem',{index, type}) 
+        }
+        
+    }
+}
+</script>
+<style lang="less" scoped>
+    @import '../../less/common.less';
+        table,tr,td {
+            list-style: none;
+        }
+        .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;
+            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;
+            background: #fff;
+            width: 162px;
+            max-height: 150px;
+            border: 1px solid #a9a9a9;
+            left: 138px;
+            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;
+        }
+        .addDiagName {
+            position: relative;
+        }
+        .symptomList {
+            position: relative;
+            background-color: #fff;
+             padding: 0px 20px 100px 20px;
+             margin: 0px 20px 40px 20px;
+             min-height: 400px;
+        }
+        
+        .diagTable {
+            width: 100%;
+            border-collapse: collapse;
+            margin-bottom: 20px;
+            tr {
+                td {
+                    /deep/textarea::-webkit-scrollbar{
+                        display: none;
+                    }
+                    position: relative;
+                    border: 1px solid #a9a9a9;
+                    text-align: center;
+                }
+                .FormulaOpera, .FeatureOpera{
+                    background: #fff;
+                    border: none;
+                    text-align: left;
+                    padding-left: 30px;
+                }
+                /deep/.el-textarea__inner {
+                    width: 100%;
+                    line-height: 20px;
+                    resize:none;
+                    border: none;
+                    border-radius: 0;
+                    text-align: center;
+                }
+            }
+            .selectedContent {
+                width: 25%;
+            }
+            .selectedContentGroup {
+                width: 55%;
+            }
+            .selectedContentOpera {
+                width: 20%;
+            }
+        }
+        .groupInput {
+            text-align: center;
+            color: #606266;
+            width: 80%;
+        }
+        .groupTextarea {
+             text-align: center;
+            color: #606266;
+            width: 100%;
+        }
+        .btn {
+            position: absolute;
+            background-color: #fff;
+            width: 100%;
+            margin: 20px 0;
+            height: 40px;
+            bottom: 0px;
+            right: 0px;
+            .btnBox {
+                position: absolute;
+                right: 0px;
+                
+            }
+            .el-button {
+                margin-right: 20px;
+               
+            }
+        }
+        .tableTitle{
+            background: rgba(239,243,249,1);
+            height: 40px;
+        }
+        .require::after{
+            content:"*";
+            color: red;
+        }
+        .borderRed {
+            border: 3px solid red !important;
+            box-sizing: border-box !important;
+        }
+        .colorRed {
+            color: red;
+        }
+        .FeatureSort {
+            width: 5%;
+        }
+        .FeatureType {
+            width: 7%;
+            padding: 0 5px;
+        }
+        .FeatureNumber {
+            width: 8%;
+        }
+        .FeatureStand {
+            width: 20%;
+        }
+        .FeatureRelate {
+            width: 30%;
+        }
+        .FeatureuniqueName {
+            width: 10%;
+        }
+        .FeatureResult {
+            width: 10%;
+        } 
+        .FeatureOpera{
+            width: 10%;
+        } 
+        .FormulaSort{
+            width: 5%;
+        } 
+        .FormulaType{
+            width: 7%;
+            padding: 0 5px;
+        } 
+        .FormulaNumber{
+            width: 78%;
+        } 
+        .FormulaOpera{
+            width: 10%;
+        }
+        .btnOpera {
+            width:16px;
+            height:16px;
+            background:rgba(176,190,197,1);
+            border-radius: 50%;
+            color: #fff;
+            line-height: 16px;
+            text-align: center;
+        }
+        /deep/.el-input--mini .el-input__inner {
+            width: 80px;
+        }
+        /deep/ .is-disabled {
+                    background: #ECECEC;
+                    color: #AAAAAA;
+                    border: none;
+                }
+        .selectType {
+            input {
+                border: 3px solid red;
+            }
+            input:hover {
+                border: 3px solid red;
+            }
+        }
+        .moduleTitle {
+            margin: 0 0 10px 0;
+            font-weight: 600;
+        }
+        .inpDisabled{
+            background: #ECECEC;
+            cursor: not-allowed;
+            textarea {
+                background: #ECECEC;
+                color: #AAAAAA;
+                border: none;
+                cursor: not-allowed;
+                height: 100%;
+            }
+            
+        }
+        .inpTips {
+            font-size: 14px;
+            color: red;
+            margin-bottom: 10px;
+        }
+        #upFile{
+            display: none
+        }
+        .disableDiv {
+            background: rgb(236, 236, 236);
+            box-sizing: border-box;
+            cursor: not-allowed;
+            font-size: 14px;
+            line-height: 20px;
+            padding: 5px 0;
+            min-height: 30px;
+        }
+        .searchItemBox{
+            position: relative;
+            bottom: 0px;
+        }
+        .searchItemList {
+            position: absolute;
+            border: 1px solid #a9a9a9;
+            box-sizing: border-box;
+            top: 4px;
+            z-index: 2;
+            width: 100%;
+            max-height: 150px;
+            overflow: auto; 
+            background: #fff;
+            margin: 0 0 20px 0;
+        }   
+    
+</style>

+ 52 - 0
src/components/diagBase/Textarea.vue

@@ -0,0 +1,52 @@
+<template>
+    <div 
+        :contenteditable="readonly"
+        :title="value"
+        class="textarea"
+        :class="{borderRed: borderRed, disableDiv:!readonly}"
+        @input="handInput"
+        @blur="handleBlur"
+    >   
+        {{value}}
+    </div>
+</template>
+<script>
+export default {
+    name: 'Textarea',
+    props: ['readonly','value','borderRed'],
+    data() {
+        return {
+
+        }
+    },
+    methods: {
+        handInput(e) {
+           this.$emit("handleInp",e.target.innerText.replace(/\s+/g,""))
+        },
+        handleFocus() {
+
+        },
+        handleBlur() {
+            console.log('blur')
+        }
+    }
+}
+</script>
+<style scoped lang='less'>
+    .textarea{
+        outline: none;
+    }
+    .borderRed {
+        border: 3px solid red ;
+        box-sizing: border-box;
+    }
+    .disableDiv {
+        background: rgb(236, 236, 236);
+        box-sizing: border-box;
+        cursor: not-allowed;
+        font-size: 14px;
+        line-height: 20px;
+        padding: 5px 0;
+        min-height: 30px;
+    }
+</style>

+ 269 - 236
src/components/icss/AddChemicalAndCommonMapping.vue

@@ -3,61 +3,42 @@
         <!-- <div class="groupTitle"><i
                 class="el-icon-back"
                 @click="back"
-        ></i> 化验大小项与公表项对应维护--添加关联</div> -->
+        ></i> 化验大小项与公表项对应维护-添加关联</div> -->
         <crumbs
-                title="化验大小项与公表项对应维护--添加关联"
+                title="化验大小项与公表项对应维护-添加关联"
                 class="topBack"
                 :param="$route.params"
                 linkTo="ChemicalAndCommonMapping"
         ></crumbs>
         <div class="AddChemicalAndCommonMappingBox clearfix">
             <div class="titleBox clearfix">
+                <p class="title">关联化验项</p>
                 <p class="title">关联公表项</p>
-                <p class="title">关联化验项</p> 
             </div>
-            <div class="rightBox">
-                <div class="itemLabel">
-                    <label  class="itemLabelName">选择公表项:</label>
-                    <input class="searchInput"  @focus="focuInput" type="text" v-model = "uniqueText"> 
-                    <span class="searchName" @click="searchMealItem(3)">搜索</span>
-                    <ul class="itemList uniqueNameList" ref="uniqueNameList">
-                      <li 
-                        v-for="item in uniqueNameList" 
-                        class="mealNameItem ellipsis"
-                        :title="item.conceptName"
-                        @click="selectUniqueName(item)"
-                        :key="item.conceptName">
-                        {{item.conceptName}}
-                      </li>
-                    </ul>
-                </div>
-                <div class="itemLabel">
-                    <label  class="itemLabelName isRequired">已选择公表项:</label>
-                    <span class="selectItemName">{{form.uniqueName}}</span>
-                </div>
-            </div>
-            
-            <div class="midBox">
-                <img class="midLogo" src="../../images/relation.png" alt="">
-                <p class="midTitle">相互关联</p>
-            </div>
-            <div class="leftBox clearfix" >
-                
+           
+
+
+              <div class="leftBox clearfix" >
+
                 <div class="itemLabel clearfix">
-                    <label class="itemLabelName">选择化验大项:</label> 
-                    <input class="searchInput" @focus="focuInput" type="text" v-model = "mealText"> 
+                    <label class="itemLabelName">选择化验大项:</label>
+                    <input class="searchInput" @focus="focuInput" type="text" v-model = "mealText">
                     <span class="searchName" @click="searchMealItem(1)">搜索</span>
-                    <ul class="itemList mealNameList" ref="mealNameList">
-                      <li 
-                        v-for="item in mealNameList" 
-                        class="mealNameItem ellipsis"
-                        :title="item.name"
-                        @click="selectMealName(item)"
-                        :key="item.id">
-                        {{item.name}}
-                      </li>
+                    <ul
+                            v-if="showMealNameList&&mealNameList.length >0"
+                            class="itemList mealNameList"
+                            ref="mealNameList"
+                    >
+                        <li
+                                v-for="item in mealNameList"
+                                class="mealNameItem ellipsis"
+                                :title="item.conceptName"
+                                @click="selectMealName(item)"
+                                :key="item.conceptId">
+                            {{item.conceptName}}
+                        </li>
                     </ul>
-                    
+
                 </div>
                 <div class="itemLabel clearfix">
                     <label  class="itemLabelName isRequired">已选择化验大项:</label>
@@ -65,17 +46,21 @@
                 </div>
                 <div class="itemLabel clearfix">
                     <label  class="itemLabelName">选择化验小项:</label>
-                    <input class="searchInput"  @focus="focuInput" type="text" v-model = "itemText"> 
+                    <input class="searchInput"  @focus="focuInput" type="text" v-model = "itemText">
                     <span class="searchName" @click="searchMealItem(2)">搜索</span>
-                    <ul class="itemList itemNameList" ref="itemNameList">
-                      <li 
-                        v-for="item in itemNameList" 
-                        class="mealNameItem ellipsis"
-                        :title="item.name+'-'+item.tagName"
-                        @click="selectItemName(item)"
-                        :key="item.id">
-                        {{item.name}}-{{item.tagName}}
-                      </li>
+                    <ul
+                            v-if="showItemNameList&&itemNameList.length >0"
+                            class="itemList itemNameList"
+                            ref="itemNameList"
+                    >
+                        <li
+                                v-for="item in itemNameList"
+                                class="mealNameItem ellipsis"
+                                :title="item.conceptName"
+                                @click="selectItemName(item)"
+                                :key="item.conceptId">
+                            {{item.conceptName}}
+                        </li>
                     </ul>
                 </div>
                 <div class="itemLabel">
@@ -83,165 +68,214 @@
                     <span class="selectItemName">{{form.itemName}}</span>
                 </div>
             </div>
+            <div class="midBox">
+                <img class="midLogo" src="../../images/relation.png" alt="">
+                <p class="midTitle">相互关联</p>
+            </div>
+             <div class="rightBox">
+                <div class="itemLabel">
+                    <label  class="itemLabelName">选择公表项:</label>
+                    <input class="searchInput"  @focus="focuInput" type="text" v-model = "uniqueText">
+                    <span class="searchName" @click="searchMealItem(3)">搜索</span>
+                    <ul
+                            v-if="showUniqueNameList&&uniqueNameList.length >0"
+                            class="itemList uniqueNameList"
+                            ref="uniqueNameList"
+                    >
+                        <li
+                                v-for="item in uniqueNameList"
+                                class="mealNameItem ellipsis"
+                                :title="item.conceptName"
+                                @click="selectUniqueName(item)"
+                                :key="item.conceptName">
+                            {{item.conceptName}}
+                        </li>
+                    </ul>
+                </div>
+                <div class="itemLabel">
+                    <label  class="itemLabelName isRequired">已选择公表项:</label>
+                    <span class="selectItemName">{{form.uniqueName}}</span>
+                </div>
+            </div>
         </div>
-       <div class="btn">
-           <!-- <span class="sumbit" @click="submitForm">建立关联</span> -->
-           <el-button
-                type="primary"
-                :disabled = 'saveDisable'
-                @click="submitForm"
+        <div class="btn">
+            <!-- <span class="sumbit" @click="submitForm">建立关联</span> -->
+            <el-button
+                    type="primary"
+                    :disabled = 'saveDisable'
+                    @click="submitForm"
             >建立关联</el-button>
-        </div> 
+        </div>
     </div>
-    
+
 </template>
 <script>
-import api from '@api/icss.js';
+  import api from '@api/icss.js';
 
-export default {
+  export default {
     name: 'AddChemicalAndCommonMapping',
     data() {
-        return {
-            mealText: '', //化验大项搜索文字内容
-            itemText: '',   //化验小项搜索文字内容
-            uniqueText: '',     //公表项搜索文字内容
-            isEdit: false,
-            mealNameList:[],
-            itemNameList: [],
-            uniqueNameList:[],
-            form: {
-                mealName: '', //大项名称
-                itemName: '',   //小项名称
-                uniqueName: '',    //公表名称,必填
-            },
-            saveDisable: false  //保存按钮禁止点击
-            
-        }
+      return {
+        mealText: '', //化验大项搜索文字内容
+        itemText: '',   //化验小项搜索文字内容
+        uniqueText: '',     //公表项搜索文字内容
+        isEdit: false,
+        mealNameList:[],
+        itemNameList: [],
+        uniqueNameList:[],
+        showMealNameList: false,
+        showItemNameList: false,
+        showUniqueNameList: false,
+        form: {
+          mealName: '', //大项名称
+          mealId: '', //大项Id
+          itemName: '',   //小项名称
+          itemId: '',     //小项Id
+          uniqueName: '',    //公表名称,必填
+          uniqueId:'' //公表项Id
+        },
+        saveDisable: false  //保存按钮禁止点击
+
+      }
     },
     created() {
-        //修改(不需要)
-        // const { isEdit, data } = this.$route.params
-        // if(isEdit) {
-        //     this.isEdit = isEdit;
-        //     this.form.mealName = data.mealName
-        //     this.form.itemName = data.itemName
-        //     this.form.uniqueName = data.uniqueName
-        // }
+      //修改(不需要)
+      // const { isEdit, data } = this.$route.params
+      // if(isEdit) {
+      //     this.isEdit = isEdit;
+      //     this.form.mealName = data.mealName
+      //     this.form.itemName = data.itemName
+      //     this.form.uniqueName = data.uniqueName
+      // }
     },
     methods: {
-        close() {
-            this.mealNameList = [];
-            this.itemNameList =[];
-            this.uniqueNameList = [];
-            this.$refs['mealNameList'].style.display='none';
-            this.$refs['itemNameList'].style.display='none';
-            this.$refs['uniqueNameList'].style.display='none';
-        },
-        searchMealItem(type) {
-            if( type == '1' || type == '2') {
-                this.getTagList(type)
-            } else if ( type == '3') {
-                this.getAllLisConcept()
-            }
-            
-        },
-        getTagList(type) {
-            let param = {}
+      close() {
+        this.mealNameList = [];
+        this.itemNameList =[];
+        this.uniqueNameList = [];
+        this.showSearchList()
+      },
+      searchMealItem(type) {
+        if( type == '1' || type == '2') {
+          this.getTagList(type)
+        } else if ( type == '3') {
+          this.getAllLisConcept()
+        }
+
+      },
+      getTagList(type) {
+        let param = {
+          relationPosition: 3
+        }
+        if (type == 1) {
+          param.name = this.mealText
+          param.typeId = 12
+        } else if (type == 2) {
+          param.name = this.itemText
+          param.typeId = 13
+        }
+        if(!param.name) {
+          return
+        }
+        api.getConceptInfoAssay(param).then((res) => {
+          if (res.data.code === '0') {
             if (type == 1) {
-                param.name = this.mealText
-                param.tagType = [7]
-                param.type = 5
+              this.mealNameList = res.data.data
+              this.showSearchList('showMealNameList')
             } else if (type == 2) {
-                param.name = this.itemText
-                param.tagType = [1]
-                param.type = 5
-            }
-            api.searchTagList(param).then((res) => {
-                if (res.data.code === '0') {
-                     if (type == 1) {
-                        this.mealNameList = res.data.data
-                        if(this.mealNameList.length > 0){ this.$refs['mealNameList'].style.display='block' }
-                        if(this.itemNameList.length > 0) { this.$refs['itemNameList'].style.display='none' }
-                        if(this.uniqueNameList.length > 0){this.$refs['uniqueNameList'].style.display='none'}
-                    } else if (type == 2) {
-                       
-                        this.itemNameList = res.data.data
-                        if(this.itemNameList.length > 0) { this.$refs['itemNameList'].style.display='block' }
-                        if(this.uniqueNameList.length > 0){this.$refs['uniqueNameList'].style.display='none'}
-                        if(this.mealNameList.length > 0){ this.$refs['mealNameList'].style.display='none' }
-                    }
-                }
-            })
-            
-        },
-        getAllLisConcept() {
-            const param = {
-                conceptName: this.uniqueText
+
+              this.itemNameList = res.data.data
+              this.showSearchList('showItemNameList')
             }
-            api.getAllLisConcept(param).then((res) => {
-                if(res.data.code === '0') {
-                    this.uniqueNameList = res.data.data
-                    if(this.uniqueNameList.length > 0){this.$refs['uniqueNameList'].style.display='block'}
-                    if(this.itemNameList.length > 0) { this.$refs['itemNameList'].style.display='none' }
-                    if(this.mealNameList.length > 0){ this.$refs['mealNameList'].style.display='none' }
-                }
-            })
-        },
-        focuInput() {
-            this.$refs['mealNameList'].style.display='none'
-            this.$refs['itemNameList'].style.display='none'
-            this.$refs['uniqueNameList'].style.display='none'
-        },
-        selectMealName(item) {
-            this.form.mealName = item.name
-            this.$refs['mealNameList'].style.display='none'
-            this.mealText = ''
-            this.mealNameList = []
-        },
-        selectItemName(item) {
-             this.form.itemName = item.name
-            this.$refs['itemNameList'].style.display='none'
-            this.itemText = ''
-            this.itemNameList = []
-        },
-        selectUniqueName(item) {
-            this.form.uniqueName = item.conceptName
-            let nameArr = item.conceptName.split('--');
-            this.form.mealName = nameArr[0]
-            this.form.itemName = nameArr[1]
-            this.$refs['uniqueNameList'].style.display='none'
-            this.uniqueText = ''
-            this.uniqueNameList = []
-        },
-        initForm() {
-            this.form.mealName = ''
-            this.form.itemName = ''
-            this.form.uniqueName = ''
-        },
-        submitForm() {
-        const { mealName, itemName, uniqueName } = this.form
-        if (!mealName || !uniqueName) {
-            this.warning('请填写相关数据')
-            return
+          }
+        })
+
+      },
+      getAllLisConcept() {
+        const param = {
+          conceptName: this.uniqueText
+        }
+        if(!param.conceptName) {
+          return
+        }
+        api.getAllLisConcept(param).then((res) => {
+          if(res.data.code === '0') {
+            this.uniqueNameList = res.data.data
+            this.showSearchList('showUniqueNameList')
+          }
+        })
+      },
+      focuInput() {
+        this.showSearchList()
+      },
+      showSearchList(type) {
+        this.showMealNameList = false
+        this.showItemNameList = false
+        this.showUniqueNameList = false
+        if(type === 'showMealNameList') {
+          this.showMealNameList = true
+        } else if (type === 'showItemNameList') {
+          this.showItemNameList = true
+        } else if (type === 'showUniqueNameList'){
+          this.showUniqueNameList = true
+        }
+      },
+      selectMealName(item) {
+        this.form.mealName = item.conceptName
+        this.form.mealId = item.conceptId
+        // this.$refs['mealNameList'].style.display='none'
+        this.mealText = ''
+        this.mealNameList = []
+      },
+      selectItemName(item) {
+        this.form.itemName = item.conceptName
+        this.form.itemId = item.conceptId
+        this.itemText = ''
+        this.itemNameList = []
+      },
+      selectUniqueName(item) {
+        this.form.uniqueName = item.conceptName
+        this.form.uniqueId = item.conceptId
+        //搜索公表项自动填充大小项(目前暂时不需要)
+        // let nameArr = item.conceptName.split('--');
+        // this.form.mealName = nameArr[0]
+        // this.form.itemName = nameArr[1]
+        // this.$refs['uniqueNameList'].style.display='none'
+        this.uniqueText = ''
+        this.uniqueNameList = []
+      },
+      initForm() {
+        this.form.mealName = ''
+        this.form.mealId = ''
+        this.form.itemName = ''
+        this.form.itemId = ''
+        this.form.uniqueName = ''
+        this.form.uniqueId = ''
+      },
+      submitForm() {
+        const { itemId, mealId, uniqueId } = this.form
+        if (!mealId || !uniqueId) {
+          this.warning('请填写相关数据')
+          return
         }
         //通过必填验证,提交保存
         const param = {
-            "itemName": itemName,
-            "mealName": mealName,
-            "uniqueName": uniqueName
+          "itemId": itemId,
+          "mealId": mealId,
+          "uniqueId": uniqueId
         }
         this.showSaveDialog(param);
       },
       saveLisMapping(param, msg, type) {
         api.saveLisMapping(param).then((res) => {
-            if (res.data.code === '0') {
+          if (res.data.code === '0') {
             this.warning(res.data.msg || msg, type);
             // this.$router.push({name: 'ChemicalAndCommonMapping'});
             this.initForm();
-            } else {
-                this.warning(res.data.msg)
-            }
-            this.saveDisable = false
+          } else {
+            this.warning(res.data.msg)
+          }
+          this.saveDisable = false
         })
       },
       showSaveDialog(param) {
@@ -249,18 +283,18 @@ export default {
         //   if(this.isEdit) {
         //       this.saveLisMapping(param)
         //   } else {
-            this.saveDisable = true  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
-            api.hasLisMapping(param).then((res) => {
-                if (!res.data.data) {
-                    this.saveLisMapping(param, '关联建立成功', 'success' )
-                } else {
-                    this.showConfirmDialog('该关联已存在是否替换旧的关系信息', () => {
-                        this.saveLisMapping(param, '关联建立成功', 'success' )
-                    });
-                }
-            }).catch((err) => {
-                this.warning(err);
-            })
+        this.saveDisable = true  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+        api.hasLisMapping(param).then((res) => {
+          if (!res.data.data) {
+            this.saveLisMapping(param, '关联建立成功', 'success' )
+          } else {
+            this.showConfirmDialog('该关联已存在是否替换旧的关系信息', () => {
+              this.saveLisMapping(param, '关联建立成功', 'success' )
+            });
+          }
+        }).catch((err) => {
+          this.warning(err);
+        })
 
         //   }
       },
@@ -274,8 +308,8 @@ export default {
         }).then(() => {
           resolve();
         }).catch(() => {
-            this.saveDisable = false
-            this.warning('建立失败','error')
+          this.saveDisable = false
+          this.warning('建立失败','error')
         });
       },
       warning(msg, type) {
@@ -287,10 +321,10 @@ export default {
       },
 
     }
-}
+  }
 </script>
 <style lang="less">
-.AddChemicalAndCommonMappingWrapper {
+    .AddChemicalAndCommonMappingWrapper {
     .AddChemicalAndCommonMappingBox {
         min-width: 940px;
     }
@@ -299,16 +333,16 @@ export default {
         top: 0;
     }
     // .groupTitle {
-    //     width: calc(100% - 50px);
-    //     height: 40px;
-    //     background: #fff;
-    //     padding: 0 20px 0 30px;
-    //     margin-bottom: 20px;
-    //     line-height: 40px;
-    //     position: relative;
-    //     z-index: 5;
-            
-    // }
+       //     width: calc(100% - 50px);
+       //     height: 40px;
+       //     background: #fff;
+       //     padding: 0 20px 0 30px;
+       //     margin-bottom: 20px;
+       //     line-height: 40px;
+       //     position: relative;
+       //     z-index: 5;
+
+       // }
     .titleBox {
         padding:  0 0 10px 0px;
     }
@@ -325,7 +359,7 @@ export default {
     .leftBox , .midBox, .rightBox{
         width: 40%;
         float: left;
-        height: 200px;
+        min-height: 200px;
         font-size: 14px;
     }
     .midBox {
@@ -346,7 +380,7 @@ export default {
     }
     .itemLabel {
         width: 100%;
-        height: 50px;
+        min-height: 50px;
         line-height: 50px;
         position: relative;
     }
@@ -371,7 +405,7 @@ export default {
         border: 1px solid #a9a9a9;
         margin: 8px 0 0 0;
     }
-    
+
     .searchName {
         text-align: center;
         border-left: none;
@@ -381,7 +415,6 @@ export default {
     }
     .itemList {
         position: absolute;
-        display: none;
         background: #fff;
         width: 162px;
         max-height: 150px;
@@ -408,37 +441,37 @@ export default {
         width: calc(100% - 160px);
     }
     .btn {
-         position: relative;
-            background-color: #fff;
-            margin: 0px 20px;
-            padding: 20px;
-            min-width: 960px;
-            height: 80px;
-            .el-button {
-                position: absolute;
-                right: 80px;
-                top: 20px;
-            }
+        position: relative;
+        background-color: #fff;
+        margin: 0px 20px;
+        padding: 20px;
+        min-width: 960px;
+        height: 80px;
+    .el-button {
+        position: absolute;
+        right: 80px;
+        top: 20px;
+    }
     }
     .sumbit {
         position: absolute;
         display: inline-block;
         width: 80px;
         height: 30px;
-        line-height: 30px;  
+        line-height: 30px;
         border: 1px solid #a9a9a9;
         text-align: center;
         right: 100px;
     }
-}
-.confirmRealation {
+    }
+    .confirmRealation {
     .cancelButton{
         border: 1px solid #a9a9a9;
-        span {
-            color: #606266;
-        }
-    }  
-    
+    span {
+        color: #606266;
+    }
+    }
 
-}
+
+    }
 </style>

+ 15 - 16
src/components/icss/AddChronicAndIndexRelation.vue

@@ -15,7 +15,7 @@
             <el-form-item  class="addDepartFormItem"  v-if="!isEdit" label="选择慢病标准术语(概念ID):" prop="department">
                 <input class="searchInput"  @focus="focuInput" type="text" v-model = "searchDiagVal"> 
                 <span class="searchName" @click="searchDiag">搜索</span>
-                <ul class="itemList diagList" ref="diagList">
+                <ul v-if="showDiagList&&diagList.length > 0" class="itemList diagList" ref="diagList">
                     <li 
                     v-for="item in diagList" 
                     class="diagItem ellipsis"
@@ -35,7 +35,7 @@
                     <label class="screenIndexLabel">选择化验指标公表项内容(概念ID):</label>
                     <input class="searchInput"  @focus="focuInput" type="text" v-model = "searchIndexVal"> 
                     <span class="searchName" @click="searchIndex">搜索</span>
-                    <ul class="itemList indexList" ref="indexList">
+                    <ul v-if="showIndexList&&indexList.length > 0" class="itemList indexList" ref="indexList">
                         <li 
                         v-for="item in indexList" 
                         class="diagItem ellipsis"
@@ -90,7 +90,9 @@
             searchDiagVal: '',
             searchIndexVal: '',
             isEdit: false,
-            saveDisable: false 
+            saveDisable: false,
+            showDiagList: false,
+            showIndexList: false
         }
     },
     created(){
@@ -123,38 +125,38 @@
         close() {
             this.diagList = [];
             this.indexList = [];
-            if(this.diagList.length>0){this.$refs['diagList'].style.display = 'none';}
-            if(this.indexList.length>0){this.$refs['indexList'].style.display = 'none';}
         },
         back(){
             this.$router.go(-1);
         },
         searchDiag() {
+            if(!this.searchDiagVal.trim()) {
+                return
+            }
             const param = {
                 "diseaseName": this.searchDiagVal,
             }
             api.queryIndexConfigDiseaseNames(param).then((res)=>{
                if(res.data.code === '0') {
                    this.diagList = res.data.data
-                   if(this.diagList.length>0) {this.$refs['diagList'].style.display = 'block'}
-                   if(this.indexList.length>0) {this.$refs['indexList'].style.display = 'none'}
+                   this.showDiagList = true
                 }
             })
         },
         selectDiag(item) {
             this.form.diseaseId = item.diseaseId
             this.form.diseaseName = item.diseaseName
-            this.$refs['diagList'].style.display='none'
             this.searchDiagVal = ''
             this.diagList=[]
         },
         focuInput() {
-          if(this.$refs){
-            this.$refs['diagList'].style.display='none';
-            this.$refs['indexList'].style.display='none';
-          }
+            this.showDiagList = false
+            this.showIndexList = false
         },
         searchIndex() {
+             if(!this.searchIndexVal.trim()) {
+                return
+            }
              const param = {
                 conceptName: this.searchIndexVal,
                 excludedConceptNames:  this.selectedIndexMap
@@ -170,8 +172,7 @@
                     //     {conceptName : '糖化血红蛋白'},
                     //     {conceptName : '血常规'},
                     // ]
-                   if(this.indexList.length > 0){this.$refs['indexList'].style.display='block'}
-                   if(this.diagList.length>0) {this.$refs['diagList'].style.display = 'none'}
+                    this.showIndexList = true
                 }
             })
         },
@@ -179,7 +180,6 @@
             this.selectedIndexList.push({indexUnique: item.conceptName, conceptId: item.conceptId, indexDesc:''})
             this.selectedIndexMap.push(item.conceptName)
             this.indexList = []
-            this.$refs['indexList'].style.display='none'
         },
         delSelectedIndex(selectedItem, index) {
             this.selectedIndexMap = this.selectedIndexMap.filter((item) => {return item != selectedItem.indexUnique})
@@ -295,7 +295,6 @@
         }
         .itemList {
             position: absolute;
-            display: none;
             background: #fff;
             width: 162px;
             max-height: 150px;

+ 26 - 16
src/components/icss/AddConceptRelation.vue

@@ -31,7 +31,7 @@
     <div class="bottomPartLeft fl">
       <p class="assayTitle">关联标准术语</p>
       <p class="symptomPoolTitle">术语搜索</p>
-      <el-form>
+      <!-- <el-form>
         <el-form-item label="类型:">
           <el-select v-model="type" placeholder="请选择" size="small">
           <el-option 
@@ -42,7 +42,7 @@
           </el-option>
         </el-select>
       </el-form-item>
-    </el-form>
+          </el-form> -->
 
     <div class="symptomPool">
       <el-input
@@ -127,11 +127,16 @@ export default {
       type:null,
       typeList:[],
       nodeList:[],
-      saveDisable: false  //保存按钮禁止点击
+      saveDisable: false,  //保存按钮禁止点击
+      conceptType:'',
+      searchType:''
     }
   },
         created(){
-          const { isEdit, data } = this.$route.params;
+          const { isEdit, data , filter} = this.$route.params;
+          const typeL = filter.type.toString().split('101');
+          this.conceptType = typeL[0];
+          this.searchType = typeL[1];
           if(isEdit) {
             this.titleText = '修改';
             this.isEdit = isEdit;
@@ -143,6 +148,7 @@ export default {
           let typeList = JSON.parse(localStorage.getItem("knowledgeEnumsData"));
           // this.typeList = typeList.lexiconTypeEnum;
           this.typeList = typeList.concatLexiconTypeEnum; //7-8 RGB
+          this.getTagList();//获取标签池内容
         },
         watch: {
           searchTagVal(newVal, preVal) {
@@ -164,16 +170,18 @@ export default {
             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
-           }
-       })
+            const param = {
+              "name": this.searchDiagVal,
+              "relationId": 17,
+              "relationPosition": 1,
+              "typeId":this.conceptType,
+              "relationTypeId":this.searchType //9-19新增
+            }
+            api.getConceptInfoAssay(param).then((res)=>{
+             if(res.data.code === '0') {
+               this.conceptList = res.data.data
+             }
+         })
         },
         selectDiag(item) {
           this.form.conceptId = item.conceptId;
@@ -192,7 +200,8 @@ export default {
               "name": this.searchTagVal,
               "relationId": 17,
               "relationPosition": 2,
-              "typeId": this.type, //选中类型的id
+              // "typeId": this.type, //选中类型的id
+              "typeId": this.searchType, //选中类型的id
               "relationConceptId":this.form.conceptId,
               "excludedConceptIds":notIds
             }
@@ -321,7 +330,8 @@ export default {
         const param ={
           "conceptId": this.form.conceptId,
           "nodeList": this.nodeList,
-          "sonRelationId": 17
+          "sonRelationId": 17,
+          "sonTypeId":this.searchType //9-20新增
         }
         this.showConfirmDialog('是否建立该关联?', () => {
           this.saveDisable = true;  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求

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

@@ -173,7 +173,7 @@
             "labelSuffix":this.dataPub.suffix,                                 //后缀
             "minValue": this.dataPub.minNormalVal,        //化验最小正常值
             "maxValue": this.dataPub.maxNormalVal,         //化验最大正常值
-            "specFlag": this.dataPub.specFlag,  //标记状态(0:没有标记,1:主诉高亮,2:诱因记录)
+            "specFlag": this.dataPub.specFlag,  //标记状态(0:没有标记,1:主诉高亮,2:诱因记录, 4:生命体征
             "questionDetails": this.options,
             "questionMappings": [],      //映射关系,
             "formulaCode": isEdit?data.formulaCode : ''

+ 41 - 12
src/components/icss/AddMedicalMultRelation.vue

@@ -30,9 +30,14 @@
             :data="list"
             :props="defaultProps"
             node-key="conceptId"
-            default-expand-all
-            :expand-on-click-node="false">
-            <span class="custom-tree-node" slot-scope="{ node, data }">
+            draggable
+            :allow-drag="allowDrag"
+            :allow-drop="allowDrop"
+            :expand-on-click-node="true"
+            :default-expanded-keys="defaultExpandedArr"
+            @node-click = "handleNodeClick"
+          >
+            <span class="custom-tree-node" slot-scope="{ node, data }" >
                 <span class="custom-tree-node-name ellipsis" :class="{colorGray: data.isDeletedConcept == 'Y'}" :title="node.label">{{ node.label }}</span>
                 <span class="btn-box">
                   <el-button
@@ -113,7 +118,7 @@ import api from '@api/icss.js';
       ];
 
       return{
-        minTitle:'医学术语多层关联维护-添加',
+        minTitle:'分诊人体图数据维护-添加',
         list: JSON.parse(JSON.stringify(data)),
         defaultProps: {
           children: 'nodeList',
@@ -127,7 +132,8 @@ import api from '@api/icss.js';
         isEdit: false,  //是否为修改
         relationConceptId: '', //关联父类ID
         level: 0, //层级(修改时只能显示三级)
-        saveDisable: false  //保存按钮禁止点击
+        saveDisable: false,  //保存按钮禁止点击
+        defaultExpandedArr: []
       }
     },
     created(){
@@ -135,9 +141,10 @@ import api from '@api/icss.js';
       if(isEdit) {
           // console.log('dataa', data)
           this.isEdit = isEdit
-          this.minTitle = '医学术语多层关联维护-修改'
+          this.minTitle = '分诊人体图数据维护-修改'
           const item = JSON.parse(JSON.stringify(data))
           item.level = 0
+          item.isExpanded = false
           item.nodeList = this.IteraNodeList(item.nodeList, [], 1)
           this.list[0] = item
       }
@@ -153,6 +160,27 @@ import api from '@api/icss.js';
       }
     },
     methods:{
+       allowDrop(draggingNode, dropNode, type) {
+        if(draggingNode.data.parentConceptName !== dropNode.data.parentConceptName){
+          return false
+        }else{
+          return type !== 'inner'
+        }
+      },
+      allowDrag(draggingNode) {
+        return draggingNode.data.level != 0;//一级不可拖动
+      },
+      handleNodeClick(data) {
+          if(data.nodeList.length > 0) {
+            if(!data.isExpanded) {
+              this.defaultExpandedArr.push(data.conceptId)
+            } else {
+              this.defaultExpandedArr = this.defaultExpandedArr.filter(item => item !== data.conceptId)
+            }
+            this.$set(data, 'isExpanded', !data.isExpanded);
+          }
+      
+      },
       addConcept(e) {
         this.addLevel = 0;
         this.openSearch(e);
@@ -174,7 +202,7 @@ import api from '@api/icss.js';
         api.addMultRelation(param).then((res) => {
           const { data } = res
           if(data.code == '0') {
-            this.message(res.data.msg||'术语建立成功','success');
+            this.message(res.data.msg||'术语关系建立成功','success');
             setTimeout(() => {
               //返回带搜索条件的首页
               this.$router.push({name:'MedicalMultRelation',params:Object.assign({},this.$route.params,{currentPage:1})});
@@ -190,10 +218,10 @@ import api from '@api/icss.js';
         for(let i = 0; i <nodeList.length; i++) {
           let newChild;
           if(type == '0') { //添加的时候保存所有的id列表
-            newChild = {conceptId: nodeList[i].conceptId, relationId: 17,nodeList:[]}
+            newChild = {conceptId: nodeList[i].conceptId, relationId: 17,nodeList:[],sonRelationId: 17, isExpanded:false}
           } else if(type == '1') {  //修改的时候添加层级
             const item = JSON.parse(JSON.stringify(nodeList[i]))
-            newChild = Object.assign(item, {level:  level, nodeList: []})
+            newChild = Object.assign(item, {level:  level, nodeList: [],sonRelationId: 17, isExpanded:false})
           } else if(type == '2') { //移除节点的时候同时移除节点(搜索时排除的id列表)
             newChild = nodeList[i].conceptId
           }
@@ -222,8 +250,9 @@ import api from '@api/icss.js';
           "excludedConceptIds": this.excludedConceptIds,
           "relationId": 17,
           "relationPosition": 1,
+          "typeId": this.addLevel === 0 ? 52 : this.addLevel === 1 ? 3 : 1
         }
-        if(this.addLevel == '1') {
+        if(this.addLevel > 0) {
           param.relationPosition = 2
           param.relationConceptId = this.relationConceptId
         }
@@ -241,7 +270,7 @@ import api from '@api/icss.js';
           this.list = JSON.parse(JSON.stringify(this.list))
         }else {
           const data = this.operaList
-          const newChild = Object.assign({}, item,  {nodeList: [], level: data.level+1, conceptId: item.conceptId, conceptNameType: item.conceptNameType, relationId: 17});
+          const newChild = Object.assign({}, item,  {nodeList: [], level: data.level+1, conceptId: item.conceptId, conceptNameType: item.conceptNameType, relationId: 17,sonRelationId: 17});
           // const newChild = { id: id++, label: 'nodeList', level: data.level+1, children: [] };
           if (!data.nodeList) {
           this.$set(data, 'nodeList', []);
@@ -261,7 +290,7 @@ import api from '@api/icss.js';
         this.$refs['conceptSearch'].style.display = "none";
       },
       append(data, e) {
-          this.addLevel = 1;
+          this.addLevel = data.level+1;
           this.relationConceptId = data.conceptId
           this.operaList = data;
           this.openSearch(e);

+ 102 - 10
src/components/icss/AddMedicalName.vue

@@ -182,6 +182,16 @@
                 @input="inputAge"
               ></el-input>
             </el-form-item>
+            <el-form-item label="科室:" v-if="dioType" class="marT">
+                <el-select v-model="dept">
+                    <el-option v-for="(it,i) in deptList" :label="it.name" :value="it.name"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="归属类型:" v-if="dioType" class="marT">
+                <el-select v-model="dioType">
+                    <el-option v-for="(it,i) in dioTypeList" :label="it.name" :value="it.val"></el-option>
+                </el-select>
+            </el-form-item>
           </el-form> 
         </div>
         <div class="btn">
@@ -243,7 +253,11 @@ import pinyin from '../../js/Convert_Pinyin.js';
         unfit:false, //点确认时是否弹提示,
         saveDisable: false,  //保存按钮禁止点击
         options:[],
-        copy:null
+        copy:null,
+        dioTypeList:[],//更多信息-类型
+        dioType:'', //默认展示一类
+        deptList:[], //更多信息-科室
+        dept:'',  //默认展示全科
       }
     },
     created(){
@@ -263,9 +277,41 @@ import pinyin from '../../js/Convert_Pinyin.js';
         if(newVal && newVal != preVal){
           this.changeState(newVal);
         }
-      }
+      },
     },
     methods:{
+      // 诊断类型下--更多信息-类型
+      getDioType(flag){
+        api.getknowledgeList().then((res)=>{
+          const data = res.data;
+          if(data.code==0){
+            this.dioTypeList = data.data[2];
+            // 修改时无需赋值
+            if(!flag){
+              this.dioType = this.dioTypeList[0].val;
+            } 
+          }
+        })
+      },
+      // 诊断类型下--更多信息-科室
+      getDdeptList(conptId){
+        api.getDeptList({"type":1}).then((res)=>{
+          const data = res.data;
+          if(data.code==0){
+            this.deptList = data.data;
+            if(!conptId){
+              this.dept = "全科"; //默认展示全科
+            }else{
+              // 科室id转成name显示
+              this.deptList.map((v,i)=>{
+                if(v.conceptId==conptId){
+                  this.dept = v.name;
+                }
+              })
+            }
+          }
+        })
+      },
       changeState(val){
         let tmpAllwords = JSON.parse(JSON.stringify(this.synonymous));
         for(let i = 0;i < tmpAllwords.length;i++){
@@ -299,6 +345,13 @@ import pinyin from '../../js/Convert_Pinyin.js';
               this.showMore = result.data.isHasCommon;
               this.maxAge = result.data.maxAge;
               this.minAge = result.data.minAge;
+              const type = result.data.type;
+              if(type == '诊断'){
+                this.dioType = result.data.classify || "Ⅰ"; //类型,默认展示Ⅰ类
+                const deptConptId = result.data.deptId;
+                this.getDioType(true);
+                this.getDdeptList(deptConptId);
+              } 
               // this.sexType = result.data.sexType;
               let sexType = result.data.sexType;
               this.sex.map((v,i)=>{
@@ -543,15 +596,40 @@ import pinyin from '../../js/Convert_Pinyin.js';
               sexCode = v.value;
             }
           })
-          params = {
-            'name':this.data.name,
-            'type':this.data.type,
-            'detailList':detailList,
-            'conceptId':this.copy?'':this.id,//复制当新增,把id置空
-            'sexType':sexCode,
-            'maxAge':this.maxAge,
-            'minAge':this.minAge
+          
+          if(this.dioType){
+            const deptList = this.deptList;
+            let conptId = null;
+            for(let i in deptList){
+              if(deptList[i].name == this.dept){
+                conptId = deptList[i].conceptId;
+              }
+            }
+            params = {
+              "addCptDiseaseExtVO": {
+                "classify": this.dioType,
+                "deptId": conptId
+              },
+              'name':this.data.name,
+              'type':this.data.type,
+              'detailList':detailList,
+              'conceptId':this.copy?'':this.id,//复制当新增,把id置空
+              'sexType':sexCode,
+              'maxAge':this.maxAge,
+              'minAge':this.minAge
+            }
+          }else{
+            params = {
+              'name':this.data.name,
+              'type':this.data.type,
+              'detailList':detailList,
+              'conceptId':this.copy?'':this.id,//复制当新增,把id置空
+              'sexType':sexCode,
+              'maxAge':this.maxAge,
+              'minAge':this.minAge
+            }
           }
+          
         }else{
           params = {
             'name':this.data.name,
@@ -589,6 +667,13 @@ import pinyin from '../../js/Convert_Pinyin.js';
             this.showMore = v.isHasCommon;
           }
         })
+        if(e == '诊断'){
+          this.getDioType();
+          this.getDdeptList();
+        }else{
+          this.dioType = '';
+          this.dept = '';
+        } 
       }
     }
   }
@@ -602,6 +687,10 @@ import pinyin from '../../js/Convert_Pinyin.js';
      text-align: right;
      margin-left: 0;
    }
+   /deep/ .moreInfo .el-form-item .el-form-item__label {
+     width: 85px;
+     text-align: left;
+   }
    // 饿了么分组下拉
     .el-scrollbar{
      .el-select-dropdown__list{
@@ -728,4 +817,7 @@ import pinyin from '../../js/Convert_Pinyin.js';
       margin: 0 35px;
      }
    }
+  /deep/ .marT{
+    margin-top: 20px;
+  }
 </style>

+ 12 - 11
src/components/icss/AddMedicinePrompt.vue

@@ -70,10 +70,6 @@
         title:'添加',
         termTypes:[],
         terms:[],              //术语列表
-        editData:{
-          selectedTerm:'',
-          prags:[]
-        },
         form:{
           conceptId:'',             //术语id
           isTip:0,                 //是否要覆盖,0不覆盖,1覆盖
@@ -111,7 +107,7 @@
         this.isEdit = isEdit;
         this.isCopy = isCopy;
         this.title = isEdit?'编辑':(isCopy?'复制':'添加');
-        this.changeWord(data);
+        isEdit&&this.changeWord(data);
         //this.form.selectedTerm = data;
         //this.form.selectedTermName = data.libName;
         //this.form.conceptId = data.conceptId;
@@ -149,9 +145,9 @@
             return ;
           }
           temp = Object.assign(this.form.prags[i-1]);
-          temp.orderNo = temp.orderNo+1;
+          //temp.orderNo = temp.orderNo+1;
           it = Object.assign(this.form.prags[i]);
-          it.orderNo = it.orderNo-1;
+          //it.orderNo = it.orderNo-1;
           this.form.prags.splice(i-1,2,it,temp);
         }else{
           if(i===this.form.prags.length-1){
@@ -159,9 +155,9 @@
             return ;
           }
           temp = Object.assign(this.form.prags[i+1]);
-          temp.orderNo = temp.orderNo-1;
+          //temp.orderNo = temp.orderNo-1;
           it = Object.assign(this.form.prags[i]);
-          it.orderNo = it.orderNo+1;
+          //it.orderNo = it.orderNo+1;
           this.form.prags.splice(i,2,temp,it);
         }
       },
@@ -170,9 +166,13 @@
           title:'',
           content:'',
           isReason:0,
-          orderNo:i+1,
           position:[],
           text:''});
+        //添加段落光标自动落到新增的段落中
+        setTimeout(()=>{
+          //console.log(this.$refs.subForm[i+1].$el.getElementsByClassName("el-input__inner")[0]);
+          this.$refs.subForm[i+1].$el.getElementsByClassName("el-input__inner")[0].focus()
+        })
         /*this.form.prags.push({
           title:'',
           content:'',
@@ -235,10 +235,11 @@
         }
         //通过必填验证,提交保存
         const item=this.form.prags;
-        const param =item.map((it)=>{
+        const param =item.map((it,i)=>{
           return Object.assign({},it,{
                                         position:typeof it.position=='string'?it.position:it.position.join(","),
                                         conceptId:this.form.conceptId,
+                                        orderNo:i,
                                         content:it.content.replace(new RegExp(config.imgHost,'g'),'{imageUrlPrefix}')});
         });
         this.showSaveDialog(param,'是否保存该静态知识?');

+ 29 - 9
src/components/icss/AddVersion.vue

@@ -4,9 +4,22 @@
     <div class="contents">
       <div class="content">
         <!-- <el-form ref="form" :label-position="labelPosition" label-width="95px" class="add-admin-form" :model="form" :rules="rules"> -->
-        <el-form ref="form" :label-position="labelPosition" label-width="95px" class="add-version-form" :model="form" :rules="rules">
+        <el-form ref="form" :label-position="labelPosition" label-width="108px" class="add-version-form" :model="form" :rules="rules">
+          <el-form-item label="版本号归属:" prop="productType">
+            <el-select v-model="form.productType" 
+                      placeholder="请选择" 
+                      size="small"
+                      :disabled="id && !copy?true:false">
+              <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-item label="版本号:" prop="name" class="version-num">
-              <el-input v-model="form.name" placeholder="请输入版本号" maxlength="21"></el-input>
+              <el-input v-model="form.name" placeholder="请输入版本号" maxlength="31"></el-input>
           </el-form-item>
           <el-form-item label="版本时间:" prop="refreshTime">
             <el-date-picker
@@ -41,12 +54,12 @@
         if (!value) {
           return callback(new Error('请输入版本号'));
         }
-        if (value.length > 20) {
-           this.form.name = value.substr(0, 20);
+        if (value.length > 30) {
+           this.form.name = value.substr(0, 30);
            this.$message({
              showClose: true,
              type: 'warning',
-             message: '版本号已超过最大限制20字'
+             message: '版本号已超过最大限制30字'
            })
         }
         callback();
@@ -71,14 +84,16 @@
         form:{
           name:'',
           refreshTime:'',
-          remark:''
+          remark:'',
+          productType:null
         },
         id:null,
         rules:{
           name:[{ required: true, validator: titleVaild, trigger: [ 'change'] },
                 { required: true, message: '请输入版本号',trigger: ['blur', 'change'] }],
           remark:{ required: false, validator: remarkVaild, trigger: [ 'change'] },
-          refreshTime:{ required: true, message: '请选择时间', trigger: ['blur', 'change'] }
+          refreshTime:{ required: true, message: '请选择时间', trigger: ['blur', 'change'] },
+          productType:{ required: true, message: '请选择版本号归属', trigger: ['blur', 'change'] },
         },
         pickerOptions1:{
           disabledDate(time) {
@@ -86,7 +101,8 @@
           },
         },
         copy:null,
-        saveDisable: false  //保存按钮禁止点击
+        saveDisable: false,  //保存按钮禁止点击
+        typeList:[]
       }
     },
     created(){
@@ -97,10 +113,13 @@
         this.form.name = info.name;
         this.form.refreshTime = info.refreshTime;
         this.form.remark = info.remark;
+        this.form.productType = info.productType && !this.copy?info.productType:null;
         this.title = this.copy?"版本信息维护-复制版本信息":"版本信息维护-修改版本信息";
         // this.getList();
         this.list = info.detail;
       }
+      let typeList = JSON.parse(localStorage.getItem("knowledgeEnumsData"));
+      this.typeList = typeList.productTypeEnum;
     },
     methods:{
       /*getList(){
@@ -173,7 +192,8 @@
                     message:"添加成功",
                     type:'success'
                   })
-                  this.$router.push({path: 'LT-YXSJWH-BBXXWH'});
+                  // this.$router.push({path: 'LT-GBBXXWH-BBXXWH'});
+                  this.$router.push({name: 'VersionInfo'});
                 }else{
                   this.$message({
                     message:res.data.msg,

+ 3 - 1
src/components/icss/AssaySon.vue

@@ -143,7 +143,9 @@
         modifyRelation(row) {
             const param = {
                 conceptId: row.conceptId,
-                relationId:18
+                // relationId:18
+                relationIds:[18], //9-23后台修改
+                typeIds:[13]
             }
             api.getAssaySonDetail(param).then((res) => {
                 if(res.data.code == '0') {

+ 21 - 3
src/components/icss/BloodPressTagGroup.vue

@@ -68,7 +68,7 @@
           </div>
           <p
             v-if="item.tagName"
-            class="tagName  ellipsis"
+            :class="['tagName','ellipsis',{'redWordTip':isRed(item.sexType)}]"
             :title="'[ '+item.tagName+' ]'"
           >{{item.tagName}} </p>
         </li>
@@ -99,6 +99,10 @@ export default {
       default: () => [],
       type: Array
     },
+    isEditOrCopy: {
+        default: false,
+        type: Boolean
+    },
   },
   data() {
     return {
@@ -148,14 +152,14 @@ export default {
     },
     sexType(newVal, preVal) {
       if (newVal != preVal) {
-        if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
+        this.searchTagList();
+        if (JSON.stringify(newVal) != JSON.stringify(preVal)&&!this.isEditOrCopy) {
           this.leftTagsList = [];
           this.selectLeftTagsList = [];
           this.rightTagsList = [];
           this.rightTagsList2 = [];
           this.selectRightTagsList = [];
           this.searchVal = '';
-          this.searchTagList();
         }
       }
     },
@@ -163,6 +167,17 @@ export default {
 
   },
   methods: {
+    isRed(sexType){
+      if(this.sexType == 3){
+        return false;
+      }else if(this.sexType != 3&&sexType == 3){
+        return false;
+      }else if(this.sexType != 3&&this.sexType == sexType){
+        return false;
+      }else{
+        return true;
+      }
+    },
     selectLeftTag(tag, index, e) {
 
       const hasTag = this.isHasTag(tag, this.selectLeftTagsList)
@@ -358,6 +373,9 @@ export default {
 
 <style lang="less" scoped>
 @import "../../less/common.less";
+.redWordTip {
+    color: red;
+}
 .symptomTagGroupWrapper {
   .arrowWrap {
     position: absolute;

+ 68 - 13
src/components/icss/ConceptRelation.vue

@@ -11,6 +11,14 @@
                 </el-form-item>
             </el-form>
         </crumbs>
+        <div class="tab">
+          <span v-for="it in typeList" 
+                :key="it.key" 
+                :class="{'curr':it.key==filter.type}"
+                @click="toggTab(it)">
+            {{it.name}}
+          </span>
+        </div>
         <div class="contents">
             <el-table
                 :data="list"
@@ -89,14 +97,19 @@ export default {
           list: [],
           searched: false,
           filter:{
-            conceptName:''
+            conceptName:'',
+            type:'' 
           },
           currentPage: 1,
           pageSize: 10,
           total: 0,
+          typeList:[]
         }
     },
     created() {
+      let typeList = JSON.parse(localStorage.getItem("knowledgeEnumsData"));
+      this.typeList = typeList.relationModelTypeEnum;
+      this.filter.type = this.typeList[0].key;//默认展示科室,请置于第一位
       const that = this;
       //返回时避免参数未赋值就获取列表
       setTimeout(function(){
@@ -118,6 +131,13 @@ export default {
     })
   },
     methods: {
+        toggTab(item){
+          // bug2348 搜索后切换tab时清空搜索条件
+          this.filter.conceptName = '';
+          this.filter.type = item.key;
+          this.currentPage = 1;
+          this.getDataList();
+        },
         getDataList(isTurnPage) {
             const param = this.getFilterItems(isTurnPage);
             this.searched = true;
@@ -136,18 +156,23 @@ export default {
           const pam = this.searched ? {
             currentPage: this.currentPage,
             filter: this.filter
-          } : {currentPage: this.currentPage};
+          } : {currentPage: this.currentPage,filter:Object.assign(this.filter,{conceptName:''})};
           this.$router.push({name:'AddConceptRelation',params:pam})
         },
         modifyRelation(row) {
+          const typeL = this.filter.type.toString().split('101');
+          const typeId = [];
+          typeId[0] = +typeL[1];
             const param = {
               "conceptId": row.conceptId,
-              "relationId":17
+              // "relationId":17
+              "relationIds":[17],//9-20新增
+              "typeIds":typeId
             }
           const pam = this.searched ? {
             currentPage: this.currentPage,
             filter: this.filter
-          } : {currentPage: this.currentPage};
+          } : {currentPage: this.currentPage,filter:Object.assign(this.filter,{conceptName:''})};
             api.getConceptRelationDet(param).then((res) => {
               if(res.data.code=='0'){
                 const { data } = res.data;
@@ -167,14 +192,14 @@ export default {
         getFilterItems(isTurnPage) {
           //翻页时筛选条件没点确定则清空
           if(isTurnPage&&!this.searched){
-            this.filter={
-              conceptName:''
-            };
+            this.filter.conceptName='';
           };
             const param = {
                 current: this.currentPage,
                 size: this.pageSize,
-                name:this.filter.conceptName
+                name:this.filter.conceptName,
+                relationId:17,
+                relationModelTypeCode:this.filter.type
             };
             return param;
         },
@@ -201,18 +226,20 @@ export default {
         },
         showDelDialog(row){
           this.showConfirmDialog('是否删除该关联?',()=>{
+            const typeL = this.filter.type.toString().split('101');
+            const typeId = [];
+            typeId[0] = +typeL[1];
             const param = {
               "conceptId": row.conceptId,
-              "isDeleted": row.isDeleted=== 'N'?'Y':'N',
-              "relationId": 17
+              // "isDeleted": row.isDeleted=== 'N'?'Y':'N',
+              "relationIds":[17],//9-20新增
+              "typeIds":typeId
             }
             api.delConceptRelation(param).then((res)=>{
               if(res.data.code=='0'){
                 if(!this.searched){
                   //未点确认时清空搜索条件
-                  this.filter={
-                    conceptName:''
-                  };
+                  this.filter.conceptName='';
                 }
                 if(this.list.length==1){
                   //当前在最后一页且只有一条数据时,删除后跳到前一页
@@ -235,6 +262,34 @@ export default {
 
 <style lang="less">
     @import "../../less/admin.less";
+    .tab{
+      background:#fff;
+      padding: 5px 0;
+      position: relative;
+      top:40px;
+      span{
+        display: inline-block;
+        // width:145px;
+        padding: 0 20px;
+        height: 45px;
+        line-height: 45px;
+        text-align: center;
+        // border: 1px solid #ccc;
+        margin-right: 5px;
+        cursor: pointer;
+      }
+      .curr{
+        color: #48C5D7;
+        &:after{
+          content: '';
+          width:50px;
+          height: 2px;
+          background:#48C5D7;
+          display: block;
+          margin: 0 auto;
+        }
+      }
+    }
     .delete{
        color: red;
     }

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

@@ -267,7 +267,8 @@
       warning(msg,type){
         this.$message({
           showClose: true,
-          message:msg,
+          dangerouslyUseHTMLString: true,
+          message:'<p>'+msg+'</p>',
           type:type||'warning'
         })
       },

+ 21 - 3
src/components/icss/InspactTagGroup.vue

@@ -38,7 +38,7 @@
                 :style="getStyle2(item)?styles:null"
                 @click='selectRightTag(item)'
             >   
-                <p v-if="item.tagName" class="tagName">{{item.tagName}} </p>
+                <p v-if="item.tagName" :class="['tagName',{'redWordTip':isRed(item.sexType)}]">{{item.tagName}} </p>
             </li>
         </ul>
     </div>
@@ -67,6 +67,10 @@ export default {
             default: '',
             type: String
         },
+        isEditOrCopy: {
+            default: false,
+            type: Boolean
+        },
         options: {
             default: () => [],
             type: Array
@@ -107,14 +111,14 @@ export default {
         },
         sexType(newVal, preVal) {
             if (newVal != preVal) {
-                if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
+                this.searchTagList();
+                if (JSON.stringify(newVal) != JSON.stringify(preVal)&&!this.isEditOrCopy) {
                     this.leftTagsList = [];
                     this.selectLeftTagsList = [];
                     this.rightTagsList = [];
                     this.rightTagsList2 = [];
                     this.selectRightTagsList = [];
                     this.searchVal = '';
-                     this.searchTagList();
                 }
             }
         },
@@ -122,6 +126,17 @@ export default {
         
     },
     methods: {
+        isRed(sexType){
+            if(this.sexType == 3){
+                return false;
+            }else if(this.sexType != 3&&sexType == 3){
+                return false;
+            }else if(this.sexType != 3&&this.sexType == sexType){
+                return false;
+            }else{
+                return true;
+            }
+        },
         toggleTopDownList(type){
           if(this.selectRightTagsList.length == 0 || this.rightTagsList.length == 0){
             return
@@ -263,6 +278,9 @@ export default {
 
 <style lang="less" >
 @import '../../less/common.less';
+.redWordTip {
+    color: red;
+}
 .symptomTagGroupWrapper {
   .operationPools {
     width: 100% !important;

+ 8 - 7
src/components/icss/LabelGroup.vue

@@ -137,12 +137,12 @@ export default {
         
     },
   watch: {
-    'filter': {
-      handler: function () {
-        this.searched = false;
-      },
-      deep: true
-    }
+      'filter': {
+        handler: function () {
+          this.searched = false;
+        },
+        deep: true
+      }
   },
   beforeRouteEnter(to, from, next) {
     next(vm => {
@@ -267,7 +267,8 @@ export default {
         warning(msg,type){
           this.$message({
             showClose: true,
-            message:msg,
+            dangerouslyUseHTMLString: true,
+            message:'<p>'+msg+'</p>',
             type:type||'warning'
           })
         },

+ 15 - 11
src/components/icss/MedicalMultRelation.vue

@@ -1,13 +1,13 @@
 <template>
     <div>
-        <crumbs title="医学术语多层关联维护" minWidth="995px">
+        <crumbs title="分诊人体图数据维护" minWidth="995px">
             <el-form :inline="true" class="demo-form-inline">
-                <el-form-item label="标准术语名词:">
+                <el-form-item label="医学标准术语:">
                     <el-input size="mini" v-model="filter.term" placeholder="输入术语"></el-input>
                 </el-form-item>
                 <el-form-item>
                     <el-button size="mini" @click="filterDatas">确认</el-button>
-                    <el-button size="mini" type="warning" style="margin:0 10px"  @click="addMedicalMultR">添加</el-button>
+                    <!-- <el-button size="mini" type="warning" style="margin:0 10px"  @click="addMedicalMultR">添加</el-button> -->
                 </el-form-item>
             </el-form>
         </crumbs>
@@ -52,9 +52,9 @@
                 <el-table-column
                         label="操作" width="160">
                     <template slot-scope="scope">
-                        <el-button type="text" size="small" :disabled="scope.row.isDeleted != 'N'" @click="toEditProduct(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>
+                        <el-button type="text" size="small" @click="toEditProduct(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>
@@ -129,7 +129,8 @@
       toEditProduct(row){
         const param = {
           conceptId: row.conceptId,
-          relationId: 17
+          relationIds: [17,17],
+          typeIds: [3,1]
         };
         const pam = this.searched ? {
           currentPage: this.currentPage,
@@ -190,8 +191,10 @@
           name: this.filter.term,
           current: this.currentPage,
           size: this.pageSize,
-          type:this.filter.type,
-          isDeleted:this.isState
+          type: this.filter.type,
+          isDeleted: this.isState,
+          relationId: 17,
+          startTypeIds: [52]
         };
         return param;
       },
@@ -229,8 +232,9 @@
         }*/
         const param = {
           conceptId:item.conceptId,
-          isDeleted:item.isDeleted === 'N'?'Y':'N',
-          relationId: 17
+          // isDeleted:item.isDeleted === 'N'?'Y':'N',
+          relationIds: [17,17],
+          typeIds: [3,1]
         }
         let waringTxt = '是否删除该关系,可能对现有系统造成影响'
         this.showConfirmDialog(waringTxt,()=>{

+ 15 - 15
src/components/icss/MedicineInfoPg.vue

@@ -1,20 +1,20 @@
 <template>
     <el-form :rules="rules" :model="data" ref="form" class="sub-form">
         <!--<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">
-                <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-form-item label="是否属于诊断依据:" prop="isReason" label-width="160px">
             <el-select v-model="data.isReason" placeholder="请选择">
                 <el-option label="否" :value="0"></el-option>
                 <el-option label="是" :value="1"></el-option>
             </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="标题名称:" prop="title" label-width="160px">
             <el-input v-model="data.title"></el-input>
         </el-form-item>
+        <el-form-item label="显示位置:" prop="position" label-width="160px">
+            <el-checkbox-group v-model="data.position">
+                <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="content" label-width="160px">
             <quillEditor v-model="data.content"
                          :options="editorOption"
@@ -22,8 +22,8 @@
                          ref="quillEditor"></quillEditor>
         </el-form-item>
         <div class="order-btn">
-            <a v-if="index!==0" class="order-up" @click="reOrder(1)">上升</a>
-            <a v-if="index!==total-1" class="order-down" @click="reOrder(0)">下降</a>
+            <a v-if="index!==0" :class="index===total-1?'order-spc':'order-up'" @click="reOrder(1)">上升</a>
+            <a v-if="index!==total-1" :class="index===0?'order-spc':'order-down'" @click="reOrder(0)">下降</a>
         </div>
         <el-form-item label-width="130px">
             <el-button @click="addEmit">添加段落</el-button>
@@ -99,9 +99,9 @@
         },
         positions:[],               //位置列表
         rules:{
-          isReason: [
-            { required: true, message: '请选择是否属于诊断', trigger: 'change' }
-          ],
+          // isReason: [
+          //   { required: true, message: '请选择是否属于诊断', trigger: 'change' }
+          // ],
           position: [
             { required: true, message: '请选择显示位置', trigger: 'change' }
           ],
@@ -169,7 +169,7 @@
     }
     .order-btn{
         position:absolute;
-        top:40px;
+        top:-22px;
         right:50px;
         a{
             display: block;
@@ -181,8 +181,8 @@
             cursor: pointer;
             font-size: 12px;
         }
-        .order-up{
-
+        .order-spc{
+            margin-top: 28px;
         }
     }
     /**富文本编辑器样式修改***/

+ 37 - 5
src/components/icss/MedicinePrompt.vue

@@ -2,9 +2,19 @@
     <div>
         <crumbs title="医学术语静态知识维护">
             <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="标准术语归属:">
+                    <el-select size="mini" v-model="filter.libType" placeholder="标准术语归属" clearable>
+                        <el-option v-for="item in typeList" :label="item.name" :value="item.key" :key="item.key"></el-option>
+                    </el-select>
+                </el-form-item>
                 <el-form-item label="标准术语:">
                     <el-input size="mini" v-model="filter.term" placeholder="标准术语" clearable></el-input>
                 </el-form-item>
+                <el-form-item label="状态:">
+                    <el-select size="mini" v-model="filter.status" placeholder="状态" clearable>
+                        <el-option v-for="item in stateList" :label="item.name" :value="item.id" :key="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" style="margin:0 10px" @click="addMedicalPrompt">添加静态知识</el-button>
@@ -28,9 +38,14 @@
                         :show-overflow-tooltip="true">
                 </el-table-column>
                 <el-table-column
-                        prop="nameType"
+                        prop="libName"
                         label="标准术语">
                 </el-table-column>
+                <el-table-column
+                        prop="type"
+                        label="标准术语归属"
+                        width="120">
+                </el-table-column>
                 <el-table-column
                         prop="title"
                         label="关联标题"
@@ -89,10 +104,17 @@
         total: 0,
         linkIn:[],
         pays:[],
+        typeList:[],
+        stateList:[
+          {id:'N',name:'启用中'},
+          {id:'Y',name:'已删除'},
+        ],
         searched: false,
         filter: {
           term: '',
-          title:''
+          title:'',
+          status:'',
+          libType:'',
         }
       }
     },
@@ -102,6 +124,8 @@
       setTimeout(function(){
         that.getDataList();
       });
+      const enums = JSON.parse(localStorage.getItem('knowledgeEnumsData'));
+      this.typeList = enums.conceptDetailLexiconTypeEnum;
     },
     watch: {
       'filter': {
@@ -137,9 +161,13 @@
         })
       },
       toCopyProduct(row){
+        const pam = this.searched ? {
+          currentPage: this.currentPage,
+          filter: this.filter
+        } : {currentPage: this.currentPage};
         this.$router.push({
           name:'AddMedicinePrompt',
-          params: {data:row,isCopy:true}
+          params: Object.assign(pam, {data:row,isCopy:true})
         })
       },
       filterDatas(){
@@ -163,7 +191,9 @@
       clearFilter(){
         this.filter={
           term: '',
-          title:''
+          title:'',
+          status:'',
+          libType:'',
         };
       },
       getFilterItems(isTurnPage) {
@@ -175,7 +205,9 @@
           conceptName:this.filter.term,
           title:this.filter.title,
           current: this.currentPage,
-          size: this.pageSize
+          size: this.pageSize,
+          status:this.filter.status,
+          libType:this.filter.libType,
         };
         return param;
       },

+ 11 - 0
src/components/icss/NoiseTemplate.vue

@@ -21,6 +21,7 @@
         :pool="dataPub.tagPool"
         :type="dataPub.region1"
         :sign="dataPub.region2"
+        :isEditOrCopy="isEditOrCopy"
         :order="dataPub.order"
         :sexType="dataPub.region7"
         :tipLis="dataPub.tipLis"
@@ -32,6 +33,7 @@
       <SymptomTagGroup 
         v-if="dataPub.region2 == 4" 
         :pool="dataPub.tagPool" 
+        :isEditOrCopy="isEditOrCopy"
         :type="dataPub.region1"
         :isSymp="dataPub.region12"
         :sexType="dataPub.region7"
@@ -42,6 +44,7 @@
       <InspactTagGroup 
         v-if="dataPub.region2 == 7" 
         :pool="dataPub.tagPool" 
+        :isEditOrCopy="isEditOrCopy"
         :type="dataPub.region1"
         :sexType="dataPub.region7"
         :options="editData.questionMapping"
@@ -51,6 +54,7 @@
       <BloodPressTagGroup 
         v-if="dataPub.region2 == 3" 
         :pool="dataPub.tagPool" 
+        :isEditOrCopy="isEditOrCopy"
         :type="dataPub.region1"
         :sexType="dataPub.region7"
         :options="editData.questionMapping"
@@ -60,6 +64,7 @@
       <SymptomPush
         v-if="dataPub.region2 == 11" 
         :pool="dataPub.tagPool" 
+        :isEditOrCopy="isEditOrCopy"
         :type="dataPub.region1"
         :sexType="dataPub.region7"
         :options="editData.questionMapping"
@@ -181,6 +186,11 @@ export default {
       this.sendIds = arr
     },
     submitForm() {       // 调用子组件的方法验证公用部分
+      if(document.querySelectorAll('.redWordTip')[0]){
+        // this.warning('当前数据有误是不可保存!')
+        this.showConfirmDialog('当前数据有误是不可保存!');
+        return
+      }
       this.$refs.submitForm.submitForm('groups');
     },
     validatePass() {      //验证成功回调,调取接口
@@ -225,6 +235,7 @@ export default {
           "joint": this.dataPub.region5,               //标签间的连接符
           // "subType": this.dataPub.region6,   	         //0:可以,1:不可以(当项目检索)
           "sexType": this.dataPub.region7,             //1:男,2:女,3:通用
+          "specFlag": this.dataPub.specFlag,           //生命体征
           "ageBegin": this.dataPub.region8,       		 //最小年龄
           "ageEnd": this.dataPub.region9,              //最大年龄
           "textGenerate": this.form.currentOrder,      //成文顺序 默认0

+ 9 - 3
src/components/icss/PubIndeptTag.vue

@@ -223,10 +223,10 @@
                 label="性别:"
                 prop="region7"
             >
-                <span class="changeTips">改变性别后,标签明细将会恢复到默认状态</span>
+                <!-- <span class="changeTips">改变性别后,标签明细将会恢复到默认状态</span> -->
                 <el-select
                         v-model="form.region7"
-                        :disabled="isEditOrCopy || !form.region1 || form.region2 == '99'"
+                        :disabled="!form.region1 || form.region2 == '99'"
                         @change="(e)=>readyChangeSelect(e,3)"
                 >
                     <el-option
@@ -304,6 +304,12 @@
               ></el-input>
             </el-form-item>
           </div>
+           <el-form-item v-if="form.region1 == 4">
+            <span>
+                <el-checkbox v-model="form.specFlag"  label="是否为生命体征" true-label="4" false-label="0"  @change="sendData"></el-checkbox>
+            </span>
+                
+          </el-form-item>
           
         </el-form>
     </div>
@@ -494,7 +500,7 @@
             this.labelTypesList = res.data.data[6];
             this.form.tipLis = res.data.data[6];
             if(this.isEditOrCopy && (this.form.region2=='1'||this.form.region2=='2')) {
-              this.labelTypes = this.labelTypesList.filter(item => (item.val=='1'||item.val=='2'));
+              this.labelTypes = this.labelTypesList.filter(item => this.labelTypesMaps[this.form.region1].indexOf(item.val) > -1).filter(item => (item.val=='1'||item.val=='2'));
             } else {
               this.labelTypes = this.labelTypesList;
             }

+ 8 - 2
src/components/icss/PubTagGroup.vue

@@ -144,10 +144,10 @@
         label="性别:"
         prop="region7"
       >
-        <span class="changeTips">改变性别后,标签明细将会恢复到默认状态</span>
+        <span class="changeTips" v-if="!isEditOrCopy">改变性别后,标签明细将会恢复到默认状态</span>
+          <!-- :disabled="isEditOrCopy || !form.region1 || form.region2 == 11 || form.region1 == 6||form.region1 == 7||form.region1 == 8||form.region1 == 9||form.region1 == 10" -->
         <el-select
           v-model="form.region7"
-          :disabled="isEditOrCopy || !form.region1 || form.region2 == 11 || form.region1 == 6||form.region1 == 7||form.region1 == 8||form.region1 == 9||form.region1 == 10"
           @change="(e)=>readyChangeSelect(e,3)"
         >
           <el-option
@@ -258,6 +258,11 @@
           ></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item v-if="form.region1 == 4">
+          <span>
+              <el-checkbox v-model="form.specFlag"  label="是否为生命体征" true-label="4" false-label="0"  @change="sendData"></el-checkbox>
+          </span>
+      </el-form-item>
     </el-form>
   </div>
 </template>
@@ -317,6 +322,7 @@ export default {
         tagPool: [],          //标签池数据
         order: [],            //排序方式
         tipLis: [],           //提示列表
+        specFlag: '0'       //生命体征
       },
       labelTypesMaps: {       //// 归属和填写单类型限制
         '1': ['2', '3', '4'],  //推送类型暂时不用

+ 27 - 8
src/components/icss/PubTagPartDetail.vue

@@ -46,7 +46,7 @@
           @click="selectPart(0)"
           v-else
         >
-          <span class="hzx ellipsis" v-for="item in poolDetailList[0][0].questionDetailList" :title="'[ '+item.name+' ]'" v-show="choose == 'multiple'" :key="item.id">{{item.name}}</span>
+          <span :class="['hzx','ellipsis',{'redWordTip':isRed(poolDetailList[0][0].sexType)}]" v-for="item in poolDetailList[0][0].questionDetailList" :title="'[ '+item.name+' ]'" v-show="choose == 'multiple'" :key="item.id">{{item.name}}</span>
         </div>
         <div class="onlyBottom pubList">
           <ul class="clearfix">
@@ -59,20 +59,20 @@
             >
               <ul v-if="choose == 'single'">
                 <template v-for="item in poolDetailList[n]">
-                  <li class="partDetail ellipsis" v-for="part in item.questionDetailList" :title="'[ '+item.name+' ]'" :key="part.id">
+                  <li :class="['partDetail','ellipsis',{'redWordTip':isRed(item.sexType)}]" v-for="part in item.questionDetailList" :title="'[ '+item.name+' ]'" :key="part.id">
                     {{part.name}}
                   </li>
                 </template>
               </ul>
               <ul v-else>
                 <template v-if="n == 1">
-                  <li class="partDetail ellipsis" v-for="item in poolDetailList[n][0].questionDetailList" :style="getStyleR(item.id)?styleR:null" :title="'[ '+item.name+' ]'" :key="item.id">
-                    [ {{item.name}} ]
+                  <li :class="['partDetail','ellipsis',{'redWordTip':isRed(poolDetailList[n][0].sexType)}]" v-for="item in poolDetailList[n][0].questionDetailList" :style="getStyleR(item.id)?styleR:null" :title="'[ '+item.name+' ]'" :key="item.id">
+                    [ {{item.name}}{{poolDetailList[n][0].sexType}} ]
                   </li>
                 </template>
                 <template  v-if="n == 2 || n == 3 || n == 4 || n == 5">
-                  <li class="partDetail ellipsis" v-for="item in poolDetailList[n]" :style="getStyleR(item.id)?styleR:null" :title="'[ '+item.tagName+' ]'" :key="item.tagName" @click="selectTagOne($event,item.id,n)">
-                    [ {{item.tagName}} ]
+                  <li :class="['partDetail','ellipsis',{'redWordTip':isRed(item.sexType)}]" v-for="item in poolDetailList[n]" :style="getStyleR(item.id)?styleR:null" :title="'[ '+item.tagName+' ]'" :key="item.tagName" @click="selectTagOne($event,item.id,n)">
+                    [ {{item.tagName}}{{item.sexType}} ]
                   </li>
                 </template>
               </ul>
@@ -129,6 +129,10 @@ export default {
       default: 'single',      //multiple 多选 single 单选
       type: String
     },
+    isEditOrCopy: {
+        default: false,
+        type: Boolean
+    },
     options: {
         default: () => [],
         type: Array
@@ -236,7 +240,8 @@ export default {
     },
     sexType(newVal, preVal) {
       if (newVal != preVal) {
-        if (JSON.stringify(newVal) != JSON.stringify(preVal) && this.tmpNum != 1) {
+        this.searchTagList()
+        if (JSON.stringify(newVal) != JSON.stringify(preVal) && this.tmpNum != 1&&!this.isEditOrCopy) {
           this.clearData()
         }
       }
@@ -260,6 +265,17 @@ export default {
     }
   },
   methods: {
+    isRed(sexType){
+      if(this.sexType == 3){
+        return false;
+      }else if(this.sexType != 3&&sexType == 3){
+        return false;
+      }else if(this.sexType != 3&&this.sexType == sexType){
+        return false;
+      }else{
+        return true;
+      }
+    },
     clearData(){
         this.poolDetailList = [[{questionDetailList:[]}],[{questionDetailList:[]}],[],[],[],[]]
         this.poolDetailListTips = [[],[],[],[],[],[]]
@@ -518,7 +534,7 @@ export default {
             this.selectArr.map((flg,idx)=>{         //判断右侧有没有选中
               if(flg){    //有选中
                 if(idx == 0 || idx == 1){
-                  if(tmpArr.length > 1){
+                  if(tmpArr.length > 1){ //选中超过两个标签不能添加到0,1位置
                     this.$message({
                       showClose: true,
                       message: '添加的数据有误',
@@ -619,6 +635,9 @@ export default {
 </script>
 <style lang="less">
 @import "../../less/common.less";
+.redWordTip {
+    color: red;
+}
 .bottomPart {
   box-sizing: border-box;
   padding-right: 100px;

+ 5 - 5
src/components/icss/SingleSelect.vue

@@ -210,11 +210,11 @@
             }
         },
         sexType(newVal, preVal) {
-            if (newVal != preVal) {
-                if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
-                    this.rows = [{name:'',defaultSelect:'',isBan:'',isNone:'',isError:''},{name:'',defaultSelect:'',isBan:'',isNone:'',isError:''},{name:'',defaultSelect:'',isBan:'',isNone:'',isError:''},{name:'',defaultSelect:'',isBan:'',isNone:'',isError:''}];
-                }
-            }
+            // if (newVal != preVal) {
+            //     if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
+            //         this.rows = [{name:'',defaultSelect:'',isBan:'',isNone:'',isError:''},{name:'',defaultSelect:'',isBan:'',isNone:'',isError:''},{name:'',defaultSelect:'',isBan:'',isNone:'',isError:''},{name:'',defaultSelect:'',isBan:'',isNone:'',isError:''}];
+            //     }
+            // }
         },
       },
       methods:{

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

@@ -80,6 +80,10 @@ export default {
             default: '',
             type: String
         },
+        isEditOrCopy: {
+            default: false,
+            type: Boolean
+        },
         sexType: {
             default: '',
             type: String

+ 22 - 3
src/components/icss/SymptomTagGroup.vue

@@ -46,7 +46,7 @@
                     >
                     </el-input>
                 </div>
-                <p v-if="item.tagName" class="tagName  ellipsis" :title="'[ '+item.tagName+' ]'">{{item.tagName}} </p>
+                <p v-if="item.tagName" :class="['tagName','ellipsis',{'redWordTip':isRed(item.sexType)}]" :title="'[ '+item.tagName+' ]'">{{item.tagName}} </p>
                 <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>
@@ -92,6 +92,10 @@ export default {
             default: '',
             type: String
         },
+        isEditOrCopy: {
+            default: false,
+            type: Boolean
+        },
         options: {
             default: () => [],
             type: Array
@@ -151,7 +155,8 @@ export default {
         },
         sexType(newVal, preVal) {
             if (newVal != preVal) {
-                if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
+                this.searchTagList()
+                if (JSON.stringify(newVal) != JSON.stringify(preVal)&&!this.isEditOrCopy) {
                     this.leftTagsList = [];
                     this.selectLeftTagsList = [];
                     this.rightTagsList = [];
@@ -166,6 +171,17 @@ export default {
         
     },
     methods: {
+        isRed(sexType){
+        if(this.sexType == 3){
+            return false;
+        }else if(this.sexType != 3&&sexType == 3){
+            return false;
+        }else if(this.sexType != 3&&this.sexType == sexType){
+            return false;
+        }else{
+            return true;
+        }
+        },
         selectLeftTag(tag, index, e) {
             const hasTag = this.isHasTag(tag, this.selectLeftTagsList)
             if (hasTag) {
@@ -365,7 +381,7 @@ export default {
         closeTagAttribute(tag) {
             this.rightTagsList2 = this.rightTagsList2.filter((item) =>{
                     if(item.id === tag.id) {
-                        item.symptomType = 3
+                        item.symptomType = 0
                     }
                     return item
                 })
@@ -377,6 +393,9 @@ export default {
 
 <style lang="less" >
 @import '../../less/common.less';
+.redWordTip {
+    color: red;
+}
 .commomSymptom {
   .tagList.operationPools {
     width: 100%;

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

@@ -177,7 +177,7 @@
       next(vm => {
         //const pm = to.param;
         const flt = to.params.filter;
-        vm.currentPage = to.params.currentPage;
+        vm.currentPage = to.params.currentPage||1;
         vm.deptAndDisInfo = JSON.parse(localStorage.getItem('deptDis')||null);
         if(flt){
           vm.filter.templateType = flt.templateType;

+ 15 - 8
src/components/icss/VersionDesc.vue

@@ -30,7 +30,7 @@
             <template slot-scope="scope">
                 <el-button type="text" size="small" @click="toEditDesc(scope.row,scope.$index)">修改</el-button>
                 <span style="margin:0 3px;">|</span>
-                <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row,scope.row.id)">删除</el-button>
+                <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row,scope.row.id,scope.$index)">删除</el-button>
             </template>
         </el-table-column>
         <el-table-column
@@ -56,7 +56,7 @@
             <p v-if="showDesc" v-html="form.description" class="cont">{{form.description}}</p>
             <el-input v-else type="textarea" :rows="3" placeholder="请输入内容" v-model="form.description" maxlength="501" @keydown.native="contentInp"></el-input>
           </el-form-item>
-          <el-button class="disclButn1" size="small" type="primary" @click="comfirn('form')">确定</el-button>
+          <el-button class="disclButn1" size="small" type="primary" :disabled="confirmDisable" @click="comfirn('form')">确定</el-button>
           <!-- <el-button class="disclButn can" size="small" type="primary" @click="cancel">取消</el-button> -->
       </el-form>
     </div>
@@ -116,7 +116,8 @@
         modiId:null,
         showDesc:false,
         tip:true,
-        modiIndex:null
+        modiIndex:null,
+        confirmDisable: false
       }
     },
     created(){
@@ -175,6 +176,7 @@
         this.$refs[form].validate((valid) => {
           if (valid) {
               // 修改--直接调修改接口;复制--新增
+            this.confirmDisable = true
             if(this.modiId){//修改
               if(!this.isCopy){
                 const param = {
@@ -183,6 +185,7 @@
                   detailId:this.modiId
                 }
                 api.modiVersionInfo(param).then((res)=>{
+                   this.confirmDisable = false
                   if(res.data.code==0){
                     this.$message({
                       message:"修改成功",
@@ -195,6 +198,7 @@
                         this.list[i].description=this.form.description;
                       }
                     }*/
+                   
                     this.reset();
                   }else{
                     this.$message({
@@ -221,7 +225,7 @@
                 description: this.form.description,
                 title: this.form.title,
               }
-              if(!this.isCopy){
+              if(!this.isCopy && this.versionId){
                 const params = {
                   versionDetail: [
                     item
@@ -229,6 +233,7 @@
                   versionInfoId: this.versionId
                 }
                 api.addVersionInfo(params).then((res)=>{
+                   this.confirmDisable = false
                   if(res.data.code==0){
                     this.$message({
                       message:"添加成功",
@@ -245,6 +250,7 @@
                   }
                 })
               }else{//仅添加到本地list
+                this.confirmDisable = false
                 if(this.modiIndex !==null){
                   this.list[this.modiIndex].description = this.form.description;
                   this.list[this.modiIndex].title = this.form.title;
@@ -298,9 +304,10 @@
           resolve();
         }).catch(() => {});
       },
-      showDelDialog(item,id){
+      showDelDialog(item,id,index){
+        console.log('cancel',item,id,index)
         this.showConfirmDialog('是否删除该版本说明?',()=>{
-          if(!this.isCopy){
+          if(!this.isCopy&&id){
             api.delVersionInfo({id}).then((res)=>{
               if(res.data.code=='0'){
                 this.warning(res.data.msg||'操作成功','success');
@@ -322,8 +329,8 @@
             for(let i in newList){
               if(id && newList[i].id==id){
                 this.list.splice(i,1);
-              }else if(newList[i].title == item.title && newList[i].description == item.description){//新增的没有id
-                this.list.splice(i,1);
+              }else {//新增的没有id
+                this.list.splice(index,1);
               }
             }
             this.$emit('func',this.list);

+ 48 - 15
src/components/icss/VersionInfo.vue

@@ -2,16 +2,26 @@
     <div>
         <crumbs title="版本信息维护">
             <el-form :inline="true" class="demo-form-inline">
-                <el-form-item label="查询版本号:">
-                    <el-input size="mini" v-model="filter.name" placeholder="输入版本号"></el-input>
-                </el-form-item>
-                <el-form-item>
-                    <el-button size="mini" @click="filterDatas">确认</el-button>
-                    <!-- <router-link to="/admin/LT-YXSJWH-TJBBXX" style="margin:0 10px">
-                        <el-button size="mini" type="warning">添加版本信息</el-button>
-                    </router-link> -->
-                    <el-button size="mini" type="warning" style="margin:0 10px" @click="addVersion">添加版本信息</el-button>
-                </el-form-item>
+              <el-form-item label="版本号归属:">
+                <el-select v-model="filter.type" placeholder="请选择" size="mini" clearable>
+                  <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-item label="查询版本号:">
+                  <el-input size="mini" v-model="filter.name" placeholder="输入版本号"></el-input>
+              </el-form-item>
+              <el-form-item>
+                  <el-button size="mini" @click="filterDatas">确认</el-button>
+                  <!-- <router-link to="/admin/LT-YXSJWH-TJBBXX" style="margin:0 10px">
+                      <el-button size="mini" type="warning">添加版本信息</el-button>
+                  </router-link> -->
+                  <el-button size="mini" type="warning" style="margin:0 10px" @click="addVersion">添加版本信息</el-button>
+              </el-form-item>
             </el-form>
         </crumbs>
         <div class="contents">
@@ -38,6 +48,12 @@
                         prop="refreshTime"
                         label="版本时间">
                 </el-table-column>
+                <el-table-column
+                        label="版本号归属">
+                    <template slot-scope="scope">
+                      <span>{{getProdType(scope.row)}}</span>
+                    </template>
+                </el-table-column>
                 <el-table-column
                         prop="modifierid"
                         label="操作人">
@@ -45,9 +61,10 @@
                 <el-table-column
                         label="操作">
                     <template slot-scope="scope">
-                        <el-button type="text" size="small" :class="{forbid:scope.row.id != canModiId}" @click="scope.row.id ==canModiId?toEditVersion(scope.row,false):''">修改</el-button>
+                        <!-- <el-button type="text" size="small" :class="{forbid:scope.row.id != canModiId}" @click="scope.row.id ==canModiId?toEditVersion(scope.row,false):''">修改</el-button> -->
+                        <el-button type="text" size="small" :class="{forbid:scope.row.status != 1}" @click="scope.row.status == 1?toEditVersion(scope.row,false):''">修改</el-button>
                         <span style="margin:0 3px;">|</span>
-                        <el-button type="text" size="small" :class="{forbid:scope.row.id != canModiId}" @click="scope.row.id ==canModiId?toEditVersion(scope.row,true):''">复制</el-button>
+                        <el-button type="text" size="small" :class="{forbid:scope.row.status != 1}" @click="scope.row.status ==1?toEditVersion(scope.row,true):''">复制</el-button>
                     </template>
                 </el-table-column>
                 <el-table-column
@@ -84,14 +101,18 @@
         total: 0,
         searched: false,
         filter: {
-          name: ''
+          name: '',
+          type:null
         },
         canModiId:null, //标识列表中的第一个可修改和复制项,区分分页和搜索
-        flag:true
+        flag:true,
+        typeList:[]
       }
     },
     created() {
       this.getDataList();
+      let typeList = JSON.parse(localStorage.getItem("knowledgeEnumsData"));
+      this.typeList = typeList.productTypeEnum;
     },
     watch: {
       'filter': {
@@ -108,6 +129,16 @@
       })
     },
     methods: {
+      getProdType(item){
+        let name = "";
+        let type = item.productType;
+        for(let i in this.typeList){
+          if(this.typeList[i].key == type){
+            name = this.typeList[i].name;
+          }
+        }
+        return name;
+      },
       addVersion(){
         // 添加版本信息
         const pam = this.searched ? {
@@ -160,11 +191,13 @@
         //翻页时筛选条件没点确定则清空
         if(isTurnPage&&!this.searched){
           this.filter.name='';
+          this.filter.type = null;
         };
         const param = {
           name: this.filter.name,
           current: this.currentPage,
-          size: this.pageSize
+          size: this.pageSize,
+          productType:this.filter.type?this.filter.type:0
         };
         return param;
       },

+ 146 - 0
src/components/medicalStatistics/MedicalStatistics.vue

@@ -0,0 +1,146 @@
+<template>
+    <div>
+        <crumbs title="数据统计" style="min-width: 980px">
+        </crumbs>
+        <div class="contents">
+            <div class="contentBox">
+                <div class="headerBox">
+                    <span v-show="updateTime">当前数据更新时间:{{updateTime}}</span>
+                    <el-button
+                        class="btn"
+                        size="mini"
+                        type="warning"
+                        @click="updateData">
+                        更新数据
+                    </el-button>
+                </div>
+                
+                <el-table
+                :data="list"
+                :span-method="objectSpanMethod"
+                border
+                style="width: 100%">
+              
+                   
+                    <el-table-column
+                        :resizable = "false"
+                        prop="moduleName"
+                        width="180">
+                        
+                    </el-table-column>
+                    <el-table-column
+                        :resizable = "false"
+                        label="朗通医疗医学数据"
+                        prop="itemName"
+                        >
+                    </el-table-column>
+                
+                    <el-table-column
+                        :resizable = "false"
+                        prop="count"
+                        label="数量">
+                    </el-table-column>
+                </el-table>
+
+            </div>
+            
+        </div>
+    </div>
+</template>
+<script>
+import api from '@api/medicalStatistics.js';
+export default {
+    name: 'MedicalStatistics',
+    data() {
+        return {
+           list: [],
+           updateTime: undefined
+        }
+    },
+    created() {
+        this.getStatisticsCount()
+    },
+    methods: {
+        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+            if (columnIndex === 0) {
+                if (row.flag) {
+                    return {
+                    rowspan: row.rowspan,
+                    colspan: 1
+                    };
+                } else {
+                    return {
+                    rowspan: 0,
+                    colspan: 0
+                    };
+                }
+            }
+            
+        },
+        updateData() {
+            this.getStatisticsCount()
+        },
+        getStatisticsCount(){
+           
+            return api.statisticsCount().then((res)=>{
+                
+                if(+res.data.code === 0) {
+                    const data = res.data.data
+                     this.list = []
+                    for(let dataItem in data) {
+                        if(data[dataItem].items) {
+                            data[dataItem].items[0].flag = true
+                            data[dataItem].items[0].rowspan =   data[dataItem].items.length
+                            this.list = [...this.list, ...data[dataItem].items]
+                        }
+                        
+                    }
+                    this.updateTime = data.gmtOperate
+                } else {
+                    this.warning(res.data.msg)
+                }
+                })
+        },
+        warning(msg,type){
+            this.$message({
+                showClose: true,
+                message:msg,
+                type:type||'warning'
+            })
+        }
+    }
+}
+</script>
+<style scoped lang="less">
+/deep/.el-table_1_column_1_column_2.is-leaf{
+    display: none;
+}
+/deep/.el-table_1_column_1_column_3.is-leaf{
+    display: none;
+}
+/deep/.el-table {
+    min-width: 500px;
+}
+/deep/.el-table th {
+    background: rgba(239,243,249,1);
+}
+.contentBox {
+    background: #fff;
+    padding: 80px 70px 30px;
+    position: relative;
+}
+.headerBox {
+    position: absolute;
+    text-align: right;
+    height: 50px;
+    line-height: 50px;
+    top: 0;
+    right: 0;
+    width: 100%;
+}
+.btn {
+    margin: 0 50px;
+    height: 40px;
+}
+
+</style>

+ 1 - 0
src/components/preTreat/AddCombinQuestion.vue

@@ -11,6 +11,7 @@
                 @changeType="changeType"
                 @validatePass="validatePass"
                 qaType="2"
+                :isCopy ='$route.params.isCopy'
                 :isEdit="$route.params.isEdit"
                 :editData="editData"
                 ref="submitForm"

+ 1 - 0
src/components/preTreat/AddSimpleQuestion.vue

@@ -10,6 +10,7 @@
                 @changeVal="changeVal"
                 @validatePass="validatePass"
                 qaType="1"
+                :isCopy ='$route.params.isCopy'
                 :editData="editData"
                 ref="submitForm"
         ></PubIndeptQa>

+ 23 - 12
src/components/preTreat/CombinQuestion.vue

@@ -1,6 +1,6 @@
 <template>
     <div>
-        <crumbs title="组合填写单维护">
+        <crumbs title="组合填写单维护" class="simpleQ-crumb">
             <el-form :inline="true" class="demo-form-inline">
                 <el-form-item label="归属:">
                     <el-select size="mini" v-model="filter.tagAdscription"  placeholder="归属" clearable>
@@ -15,13 +15,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-input size="mini" v-model="filter.name" 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="addIndeptTag">添加组合填写单</el-button>
                 </el-form-item>
             </el-form>
         </crumbs>
-        <div class="contents">
+        <div class="contents simpleQ-contents">
             <el-table
                     :data="list"
                     border
@@ -44,6 +47,11 @@
                         prop="tagName"
                         label="填写单系统名称">
                 </el-table-column>
+                <el-table-column
+                        :resizable = "false"
+                        prop="name"
+                        label="填写单医生界面名称">
+                </el-table-column>
                 <el-table-column
                         :resizable = "false"
                         prop="typeCn"
@@ -103,6 +111,7 @@
           tagType: [], //标签类型
           tagAdscription: '', //标签归属
           tagSysName: '', //标签系统名称
+          name:'',          //界面名称
         },
         currentPage: 1,
         pageSize: 10,
@@ -194,21 +203,27 @@
       getFilterItems(isTurnPage) {
         //翻页时筛选条件没点确定则清空
         if(isTurnPage&&!this.searched){
-          this.filter = {
-            tagType: [], //标签类型
-            tagAdscription: '', //标签归属
-            tagSysName: '', //标签系统名称
-          }
+          this.clearfilter();
         };
         let param = {
           tagTypeList: this.filter.tagType[0] ? this.filter.tagType: [4,6],
           current: this.currentPage,
+          callType:2,
           size: this.pageSize,
           type: this.filter.tagAdscription,
           tagName: this.filter.tagSysName,
+          name:this.filter.name,          //界面名称
         };
         return param;
       },
+      clearfilter(){
+        this.filter={
+          tagType: [], //标签类型
+          tagAdscription: '', //标签归属
+          tagSysName: '', //标签系统名称
+          name:'',          //界面名称
+        };
+      },
       indexMethod(index) {
         return ((this.currentPage - 1) * this.pageSize) + index + 1;
       },
@@ -240,11 +255,7 @@
             if(res.data.code=='0'){
               if(!this.searched){
                 //未点确认时清空搜索条件
-                this.filter={
-                  tagType: [], //标签类型
-                  tagAdscription: '', //标签归属
-                  tagSysName: '', //标签系统名称
-                };
+                this.clearfilter();
               }
               if(this.list.length==1){
                 //当前在最后一页且只有一条数据时,删除后跳到前一页

+ 12 - 7
src/components/preTreat/PubIndeptQa.vue

@@ -108,7 +108,7 @@
                 </span>
                 <span
                  class = "flagBox"
-                  v-if="qaType =='1' &&form.region1=='1'&&form.region2=='1'"
+                  v-if="qaType =='1' &&form.region1=='1'&&form.region2=='9'"
                 >
                    <el-checkbox v-model="form.specFlag" label="拼接到主诉" true-label="1" false-label="0"  @change="sendData"></el-checkbox>
                 </span>
@@ -175,7 +175,7 @@
                 ></el-input>
             </el-form-item>
             <el-form-item label="填写单图片内容:"
-                          v-if="qaType==1&&form.region2!=4"
+                          v-if="qaType==1&&form.region2&&form.region2!=4&&form.region2!=9"
                           prop="region13">
                 <el-upload
                         :class="form.region13?'upload-hide':''"
@@ -227,7 +227,7 @@
 // 补充内容(val:52):单选(val:1)、多选(val:2)、多列填写(val:3)、输入框(val:6)、数字输入框(val:7)、文本域(val:5)
 
   export default {
-    props:['editData','qaType','isEdit'],      //qaType:独立1/组合2填写单
+    props:['editData','qaType','isEdit','isCopy'],      //qaType:独立1/组合2填写单
     data() {
       var validatePass1 = (rule, value, callback) => {
         this.validateSystomName(value,callback,1)
@@ -304,10 +304,10 @@
         showFileList:false,
         uploadUrl:config.urls.uploadImg,        //图片上传地址
         labelTypesMaps: {       // 归属和填写单类型限制
-          '1':['1','2','3','5','6','7','8'], //症状情况
-          '51':['1','2','3','4','5','6','7'],    //诊疗情况
-          '3':['1','2','3','5','6','7'],         //其他史
-          '52':['1','2','3','5','6','7']            //补充内容
+          '1':['1','2','3','5','6','7','8','9'], //症状情况
+          '51':['1','2','3','4','5','6','7','9'],    //诊疗情况
+          '3':['1','2','3','5','6','7','9'],         //其他史
+          '52':['1','2','3','5','6','7','9']            //补充内容
         },
         combinLabelMaps:{
           '1':['4'], //症状情况
@@ -372,6 +372,11 @@
       if(editData.id){
         const trans = utils.transPretreatKeys(editData,this.qaType==1);
         this.form = Object.assign({},this.form,trans);
+        if(this.isCopy){            //复制时系统名称界面名称置空
+          this.form.region3='';
+          this.form.region4='';
+          this.form.region5='';
+        }
         const imgUrl = trans.region13;
         if(imgUrl){
           this.imgList = [{name:'',url:imgUrl.replace('{imageUrlPrefix}',config.imgHost)}];

+ 48 - 14
src/components/preTreat/SimpleQuestion.vue

@@ -1,6 +1,6 @@
 <template>
     <div>
-        <crumbs title="独立填写单维护">
+        <crumbs title="独立填写单维护" class="simpleQ-crumb">
             <el-form :inline="true" class="demo-form-inline">
                 <el-form-item label="归属:">
                     <el-select size="mini" v-model="filter.tagAdscription"  placeholder="归属" clearable>
@@ -12,6 +12,12 @@
                         <el-option v-for="item in tagTypes" :label="item.name" :value="item.val" :key="item.id"></el-option>
                     </el-select>
                 </el-form-item>
+                <el-form-item label="归属组合项:">
+                    <el-input size="mini" v-model="filter.combinationName" placeholder="归属组合项" clearable></el-input>
+                </el-form-item>
+                <el-form-item label="填写单界面名称:">
+                    <el-input size="mini" v-model="filter.name" placeholder="填写单界面名称" clearable></el-input>
+                </el-form-item>
                 <el-form-item label="填写单系统名称:">
                     <el-input size="mini" v-model="filter.tagSysName" placeholder="填写单系统名称" clearable></el-input>
                 </el-form-item>
@@ -21,7 +27,7 @@
                 </el-form-item>
             </el-form>
         </crumbs>
-        <div class="contents">
+        <div class="contents simpleQ-contents">
             <el-table
                     :data="list"
                     border
@@ -44,6 +50,11 @@
                         prop="tagName"
                         label="填写单系统名称">
                 </el-table-column>
+                <el-table-column
+                        :resizable = "false"
+                        prop="name"
+                        label="填写单界面名称">
+                </el-table-column>
                 <el-table-column
                         :resizable = "false"
                         prop="typeCn"
@@ -55,6 +66,11 @@
                         prop="tagTypeCn"
                         label="类型">
                 </el-table-column>
+                <el-table-column
+                        :resizable = "false"
+                        prop="combinationName"
+                        label="归属组合项">
+                </el-table-column>
                 <el-table-column
                         :resizable = "false"
                         prop="modifier"
@@ -104,6 +120,8 @@
           controlType: [],
           tagAdscription: '', //标签归属
           tagSysName: '', //标签系统名称
+          combinationName:'',//归属组合项
+          name:'',      //填写单界面名称
         },
         currentPage: 1,
         pageSize: 10,
@@ -214,22 +232,30 @@
         //     this.getDataList();
         // }
       },
+      clearFilter(){
+        this.filter = {
+          tagType: [], //标签类型
+          controlType: [],
+          tagAdscription: '', //标签归属
+          tagSysName: '', //标签系统名称
+          combinationName:'',//归属组合项
+          name:'',      //填写单界面名称
+        }
+      },
       getFilterItems(isTurnPage) {
         //翻页时筛选条件没点确定则清空
         if(isTurnPage&&!this.searched){
-          this.filter = {
-            tagType: [], //标签类型
-            controlType: [],
-            tagAdscription: '', //标签归属
-            tagSysName: '', //标签系统名称
-          }
+          this.clearFilter();
         };
         const param = {
           tagTypeList: [1],
+          callType:1,
           current: this.currentPage,
           size: this.pageSize,
           type: this.filter.tagAdscription,
           tagName: this.filter.tagSysName,
+          combinationName:this.filter.combinationName,
+          name:this.filter.name,
           controlTypeList: this.filter.controlType[0] ? this.filter.controlType: []
         };
         return param;
@@ -265,12 +291,7 @@
             if(res.data.code=='0'){
               if(!this.searched){
                 //未点确认时清空搜索条件
-                this.filter={
-                    tagType: [], //标签类型
-                    controlType: [],
-                    tagAdscription: '', //标签归属
-                    tagSysName: '', //标签系统名称
-                };
+                this.clearFilter();
               }
               if(this.list.length==1){
                 //当前在最后一页且只有一条数据时,删除后跳到前一页
@@ -305,4 +326,17 @@
     .el-select .el-input .el-icon-circle-close{
         float:left;
     }
+    .container.simpleQ-crumb{
+        height:90px!important;
+    }
+    .simpleQ-crumb .contents{
+        max-width: 870px;
+        text-align: right;
+    }
+    .contents.simpleQ-contents{
+        padding-top:120px;
+    }
+    .simpleQ-crumb .el-form--inline .el-form-item{
+        margin-bottom: 0;
+    }
 </style>

BIN
src/images/new.png


+ 15 - 2
src/less/common.less

@@ -50,7 +50,7 @@
     color: #fff;
     height: @header-height;
     padding-top: 8px;
-    margin-bottom: 20px;
+    /*margin-bottom: 20px;*/
     box-sizing: border-box;
   }
 }
@@ -94,6 +94,19 @@
 } 
 
 /*element-ui 样式覆盖*/
+.el-dialog__header{
+  border-bottom: 1px #f0f0f0 solid;
+  padding: 10px 20px;
+  .el-dialog__headerbtn{
+    top: 14px;
+  }
+}
+.el-dialog__body{
+  padding: 20px 20px 30px;
+}
+.el-dialog__title{
+  font-size: 14px;
+}
 .demo-form-inline .el-input--mini .el-input__inner{
   width: 100px;
 }
@@ -108,7 +121,7 @@
 
 .el-form--inline .el-form-item__label {
   font-size: 12px;
-  vertical-align: text-bottom;
+  vertical-align: text-bottom;      /*chrome错位bug*/
   padding: 0;
 }
 

+ 5 - 1
src/routes.js

@@ -98,6 +98,9 @@ import AddDiagBase from '@components/diagBase/AddDiagBase.vue';  //诊断依据-
 
 import QuestionWords from '@components/diagBase/QuestionWords.vue';
 
+//医学数据统计
+import MedicalStatistics from '@components/medicalStatistics/MedicalStatistics.vue';
+
 export default [
   {
     path: '/',
@@ -221,7 +224,7 @@ export default [
       {path:'LT-YXSJWH-TSXXXQ',component:PromptDetail,name:'PromptDetail'},         //提示信息维护详情
       {path:'LT-YXSYKWH-YXSYJTZSWH',component:MedicinePrompt,name:'MedicinePrompt'},         //医学术语提示信息维护
       {path:'LT-YXSYKWH-TJYXSYJTZS',component:AddMedicinePrompt,name:'AddMedicinePrompt'},         //医学术语提示信息维护添加
-	    {path:'LT-YXSJWH-BBXXWH',component:VersionInfo,name:'VersionInfo'},     //版本信息
+	    {path:'LT-GBBXXWH-BBXXWH',component:VersionInfo,name:'VersionInfo'},     //版本信息
       {path:'LT-YXSJWH-BBXXXQ',component:VersionDetail,name:'VersionDetail'},     //版本信息-详情
       {path:'LT-YXSJWH-TJBBXX',component:AddVersion,name:'AddVersion'},     //版本信息-添加/修改
       {path:'LT-YXSYKWH-YXSYMMWH',component:MedicalName,name:'MedicalName'},     //医学术语--命名维护
@@ -262,6 +265,7 @@ export default [
       {path:'LT-ZDYJWH-ZDYJSJWH',component:DiagBase,name:'DiagBase'},  //诊断依据-诊断依据维护
       {path:'LT-ZDYJWH-TJZDYJSJ',component:AddDiagBase,name:'AddDiagBase'},  //诊断依据-添加诊断依据
       {path:'LT-ZDYJWH-WTCSJWH',component:QuestionWords,name:'QuestionWords'},  //问题列表
+      {path:'LT-SJTJ-YXSJTJ',component:MedicalStatistics,name:'MedicalStatistics'},  //问题列表
 
     ]
   }

+ 2 - 2
vue.config.js

@@ -1,7 +1,7 @@
 const path = require('path');
 // const proxy_path = 'http://192.168.2.236:80';
-// const proxy_path = 'http://192.168.2.241:88';
-const proxy_path = 'http://192.168.2.236:88';
+const proxy_path = 'http://192.168.2.241:88';
+// const proxy_path = 'http://192.168.2.236:88';
 // const proxy_path = 'http://192.168.3.101:5050';
 // const proxy_path = 'http://192.168.3.117:5050';//周铁刚
 // const proxy_path = 'http://192.168.3.115:5050';