Przeglądaj źródła

合并术语库优化代码
Squashed commit of the following:

commit f22d1696ff132969ad0ca4ed65e5990a8ce7c09c
Author: liucf <liucf@zjlantone.com>
Date: Fri May 17 15:08:04 2019 +0800

化验子项和术语关联维护联调完成

commit 4e0ca46985b6835a252cde585e928b570e011d7a
Author: liucf <liucf@zjlantone.com>
Date: Wed May 15 16:53:37 2019 +0800

医学术语枚举获取;免责声明接口调整

commit 3522504bbf0b0184581dddf0a0a5df825a150d18
Author: liucf <liucf@zjlantone.com>
Date: Wed May 15 10:33:39 2019 +0800

化验子项,术语关联维护

commit 169e6da63ea0da5047c3eab6bab8646917c1013e
Author: liucf <liucf@zjlantone.com>
Date: Tue May 14 10:06:38 2019 +0800

合并dev分支

commit 42d9caa7ccf59a8620a7978219f85addf90b6088
Author: liucf <liucf@zjlantone.com>
Date: Tue May 14 10:02:21 2019 +0800

修改文案

commit 1c888406cf9074c8306750347cf8418fba1db0b4
Author: liucf <liucf@zjlantone.com>
Date: Mon May 13 17:16:57 2019 +0800

合并dev分支

commit cef77de3efd6a8a94d354ee68981bce29880dc41
Author: liucf <liucf@zjlantone.com>
Date: Wed May 8 15:55:24 2019 +0800

合并

commit 0e4c4baade1f149d57a0073f6709064344221587
Author: liucf <liucf@zjlantone.com>
Date: Tue Apr 23 16:54:19 2019 +0800

添加别名页面归属处理

# Conflicts:
# src/api/config.js
# src/components/common/Banner.vue
# src/components/forgetPassword/FindPassword.vue
# src/components/forgetPassword/findPassword.less
# src/components/icss/AddMedicalName.vue
# src/components/icss/ChronicDiseaseAdd.vue
# src/components/icss/ChronicDiseaseStructureList.vue
# src/components/icss/CommonTemplate.vue
# src/components/icss/PubTagGroup.vue
# src/components/login/login.less
# src/components/register/Register.vue
# src/components/register/register.less

liucf 6 lat temu
rodzic
commit
805323d1e7

+ 9 - 0
src/App.vue

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

+ 17 - 7
src/api/config.js

@@ -114,12 +114,12 @@ export default {
     'addCommonSymptom': 'api/icssman/questionUsual/addQuestionUsual',  //常见科室症状维护--添加科室症状
     'getCommonSymptomById': 'api/icssman/questionUsual/getQuestionUsualByDept', //常见科室症状维护--修改、详情
     'delCommonSymptom': 'api/icssman/questionUsual/deleteQuestionUsual',  //常见科室症状维护--删除科室症状
-    'discInformation': 'api/icssman/disclaimerInformation/getDisclaimerInformations', //免责声明
-    'addDiscInformation': 'api/icssman/disclaimerInformation/addDisclaimerInformations', //免责声明-新增
-    'modifDiscInformation': 'api/icssman/disclaimerInformation/updateDisclaimerInformations', //免责声明-修改
-    'delDiscInformation': 'api/icssman/disclaimerInformation/cancelDisclaimerInformations', //免责声明-删除
-    'closeInformation': 'api/icssman/disclaimerInformation/endDisclaimerInformations', //免责声明-停用
-    'openInformation': 'api/icssman/disclaimerInformation/startDisclaimerInformations', //免责声明-启用
+    'discInformation': 'api/knowledgeman/disclaimerInformation/getDisclaimerInformations', //免责声明
+    'addDiscInformation': 'api/knowledgeman/disclaimerInformation/addDisclaimerInformations', //免责声明-新增
+    'modifDiscInformation': 'api/knowledgeman/disclaimerInformation/updateDisclaimerInformations', //免责声明-修改
+    'delDiscInformation': 'api/knowledgeman/disclaimerInformation/cancelDisclaimerInformations', //免责声明-删除
+    'closeInformation': 'api/knowledgeman/disclaimerInformation/endDisclaimerInformations', //免责声明-停用
+    'openInformation': 'api/knowledgeman/disclaimerInformation/startDisclaimerInformations', //免责声明-启用
     'getQuestionInfos': 'api/icssman/moduleInfo/getQuestionInfos', //模板维护标签池数据获取
     'saveModuleInfo': 'api/icssman/moduleInfo/saveModuleInfo', //模板维护新增
     'updateModuleInfo': 'api/icssman/moduleInfo/updateModuleInfo', //模板维护修改
@@ -145,6 +145,7 @@ export default {
     'getVersionDetlInfo': 'api/icssman/versionDetail/getDetailById', //版本信息-版本说明列表获取
     'promptServer':'/api/icssman/file/uploadImage',    //静态知识
     /**************医学术语维护****************/
+    'getKnowledgeEnums':'api/knowledgeman/getKlmEnumsData', //术语库枚举
 	'saveConceptInfo':'/api/knowledgeman/libraryDetail/addLibraryDetail',   //保存术语静态知识
     'delConceptInfo':'/api/knowledgeman/libraryDetail/removeLibraryDetail',   //删除术语静态知识
     'knowledgeName': 'api/knowledgeman/concept/getAllInformation', //医学术语-命名维护
@@ -195,7 +196,16 @@ export default {
     'searchKnowledgeLis': 'api/knowledgeman/scaleContent/index', //量表结构检索
     'getknowledgeList': 'api/knowledgeman/dictionaryInfo/getList', //量表结构字典信息
     'getModuleType': 'api/icssman/moduleInfo/getModuleType',  //模板维护 -- 类型筛选
-    'indexByLexicon': 'api/knowledgeman/commonconcept/indexByLexicon',  //知识库标准化-根据名称和术语库词性类型搜索
+	'indexByLexicon': 'api/knowledgeman/commonconcept/indexByLexicon',  //知识库标准化-根据名称和术语库词性类型搜索
+    'getAssaySon': 'api/knowledgeman/lisSonContact/lisSonContactList',  //化验子项维护
+    'getAssaySonDetail': 'api/knowledgeman/lisSonContact/relationContactDetail',  //化验子项维护-详情
+    'getConceptInfoAssay': '/api/knowledgeman/concept/getAllForRelation',  //化验子项维护-搜索术语
+    'addAssaySon': 'api/knowledgeman/lisSonContact/addRelation',  //化验子项维护-添加
+    'delAssaySon': 'api/knowledgeman/lisSonContact/removeRelationContact',  //化验子项维护-删除/恢复
+    'getConceptRelation': 'api/knowledgeman/relationContact/relationContactList',  //术语关联维护
+    'getConceptRelationDet': 'api/knowledgeman/relationContact/relationContactDetail',  //术语关联维护-详情
+    'addConceptRelation': 'api/knowledgeman/relationContact/addRelation',  //术语关联维护-添加
+    'delConceptRelation': 'api/knowledgeman/relationContact/removeRelationContact',  //术语关联维护-删除/恢复
 	},
 	menuIconList: { //菜单对应图标
 		'YH-KZT': 'el-icon-menu',

+ 32 - 0
src/api/icss.js

@@ -258,6 +258,7 @@ export default {
     },
     addRelationConcept(param) {//关系维护-添加
         return axios.post(urls.addRelationConcept, param)
+        // return axios.post('http://192.168.3.101:5050/api/knowledgeman/relation/addRelationInfo', param)
     },
     RelationUpload(param) {//关系维护-导入
         return axios.post(urls.RelationUpload, param)
@@ -282,6 +283,7 @@ export default {
     },
     getAllConcept(param) {  //医学术语--获取所有概念(标准术语)
         return axios.post(urls.getAllConcept, param)
+        // return axios.post('http://192.168.3.101:5050/api/knowledgeman/concept/getAllConcept', param)
     },
     getAllBodypart(param) {
         return axios.post(urls.getAllBodypart, param)
@@ -365,4 +367,34 @@ export default {
     deleteScale(param) {
         return axios.post(urls.deleteScale, param)    //量表结构 -- 删除
     },
+    getKnowledgeEnums(){ //医学术语库枚举
+        return axios.post(urls.getKnowledgeEnums)
+    },
+    getAssaySon(param) {
+        return axios.post(urls.getAssaySon, param)    //化验子项-列表
+    },
+    getAssaySonDetail(param) {
+        return axios.post(urls.getAssaySonDetail, param)    //化验子项-详情
+    },
+    getConceptInfoAssay(param) {
+        return axios.post(urls.getConceptInfoAssay, param)    //化验子项-搜索术语
+    },
+    addAssaySon(param) {
+        return axios.post(urls.addAssaySon, param)    //化验子项-添加
+    },
+    delAssaySon(param) {
+        return axios.post(urls.delAssaySon, param)    //化验子项-删除/恢复
+    },
+    getConceptRelation(param) {
+        return axios.post(urls.getConceptRelation, param)    //术语关联-列表
+    },
+    getConceptRelationDet(param) {
+        return axios.post(urls.getConceptRelationDet, param)    //术语关联-详情
+    },
+    addConceptRelation(param) {
+        return axios.post(urls.addConceptRelation, param)    //术语关联-添加
+    },
+    delConceptRelation(param) {
+        return axios.post(urls.delConceptRelation, param)    //术语关联-删除/恢复
+    },
 }

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

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

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

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

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

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

+ 162 - 22
src/components/icss/AddMedicalName.vue

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

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

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

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

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

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

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

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

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

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

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

+ 11 - 1
src/routes.js

@@ -76,6 +76,10 @@ import ChronicAndIndexRelation from '@components/icss/ChronicAndIndexRelation.vu
 import AddChronicAndIndexRelation from '@components/icss/AddChronicAndIndexRelation.vue'  //医学数据--添加慢病指标值关联
 import DisAndScaleRelation from '@components/icss/DisAndScaleRelation.vue'  //医学数据--量表关联维护
 import AddDisAndScaleRelation from '@components/icss/AddDisAndScaleRelation.vue'  //医学数据--添加量表关联
+import AssaySon from '@components/icss/AssaySon.vue'  //医学数据--化验子项维护
+import AddAssaySon from '@components/icss/AddAssaySon.vue'  //医学数据--化验子项维护-添加修改
+import ConceptRelation from '@components/icss/ConceptRelation.vue'  //医学数据--术语关联维护
+import AddConceptRelation from '@components/icss/AddConceptRelation.vue'  //医学数据--术语关联维护添加修改
 
 
 
@@ -189,7 +193,8 @@ export default [
       {path:'LT-YXSJWH-CJXXWH',component:CommonSymptom,name:'CommonSymptom'},  //常见症状维护
       {path:'LT-YXSJWH-TJCJZZ',component:AddCommonSymptom,name:'AddCommonSymptom'},  //常见症状维护--添加
       {path:'LT-YXSJWH-TJBM',component:AddSimilarName,name:'AddSimilarName'},     //别名维护-添加/修改
-      {path:'LT-YXSJWH-MZSMWH',component:DisclaimerInformation,name:'DisclaimerInformation'},     //免责声明
+      // {path:'LT-YXSJWH-MZSMWH',component:DisclaimerInformation,name:'DisclaimerInformation'},     //免责声明
+      {path:'LT-YXSJKWH-MZSMWH',component:DisclaimerInformation,name:'DisclaimerInformation'},     //免责声明
       {path:'LT-YXSJWH-MZSMXQ',component:DiscInfoDetail,name:'DiscInfoDetail'},     //免责声明-详情
       {path:'LT-YXSJWH-TJMZSM',component:AddDisclInfo,name:'AddDisclInfo'},     //免责声明-添加/修改
       {path:'LT-YXSJWH-MBWH',component:TemplateMaintenance,name:'TemplateMaintenance'},     //模板维护
@@ -222,6 +227,11 @@ export default [
       {path:'LT-YXSJWH-TJMBZBZGL',component:AddChronicAndIndexRelation,name:'AddChronicAndIndexRelation'},     //医学数据--慢病指标值关联维护
       {path:'LT-YXSJWH-LBGLWH',component:DisAndScaleRelation,name:'DisAndScaleRelation'},     //医学数据--慢病指标值关联维护
       {path:'LT-YXSJWH-TJLBGL',component:AddDisAndScaleRelation,name:'AddDisAndScaleRelation'},     //医学数据--慢病指标值关联维护
+      {path:'LT-YXSYKWH-HYZXWH',component:AssaySon,name:'AssaySon'},     //医学数据--化验子项维护
+      {path:'LT-YXSYKWH-TJHYZX',component:AddAssaySon,name:'AddAssaySon'},     //医学数据--化验子项添加修改   
+      {path:'LT-YXSYKWH-YXSYGLWH',component:ConceptRelation,name:'ConceptRelation'},     //医学数据--医学术语关联维护   
+      // {path:'LT-YXSYKWH-YXSYLXWH',component:ConceptRelation,name:'ConceptRelation'},     //医学数据--医学术语关联维护   
+      {path:'LT-YXSYKWH-TJYXSYGL',component:AddConceptRelation,name:'AddConceptRelation'},     //医学数据--医学术语关联维护-添加修改   
     ]
   }
 ]