Browse Source

Merge branch 'dev' into independentTag

# Conflicts:
#	src/api/config.js
#	src/components/icss/AddIndeptLabel.vue
zhouna 6 years ago
parent
commit
4251a392b7
35 changed files with 2394 additions and 426 deletions
  1. 26 9
      src/api/config.js
  2. 48 2
      src/api/icss.js
  3. 38 7
      src/api/utils.js
  4. 3 3
      src/components/common/Crumbs.vue
  5. 27 12
      src/components/icss/AddCommonSymptom.vue
  6. 1 1
      src/components/icss/AddDeptInfo.vue
  7. 22 6
      src/components/icss/AddIndeptLabel.vue
  8. 222 0
      src/components/icss/AddMedicalName.vue
  9. 151 0
      src/components/icss/AddMedicalRelation.vue
  10. 14 10
      src/components/icss/AddPhysicalExamTemp.vue
  11. 52 18
      src/components/icss/AddSimilarName.vue
  12. 137 0
      src/components/icss/AddVersion.vue
  13. 9 21
      src/components/icss/CommonSymptom.vue
  14. 254 126
      src/components/icss/CommonTemplate.vue
  15. 1 1
      src/components/icss/IndeptLabel.vue
  16. 2 2
      src/components/icss/LabelGroup.vue
  17. 246 0
      src/components/icss/MedicalName.vue
  18. 240 0
      src/components/icss/MedicalRelation.vue
  19. 8 1
      src/components/icss/NoiseTemplate.vue
  20. 7 21
      src/components/icss/PhysicalExamTemplate.vue
  21. 14 4
      src/components/icss/PubIndeptTag.vue
  22. 32 0
      src/components/icss/PubTagGroup.vue
  23. 103 38
      src/components/icss/PubTagPartDetail.vue
  24. 19 56
      src/components/icss/PubTemplateGroup.vue
  25. 2 5
      src/components/icss/SimilarName.vue
  26. 26 2
      src/components/icss/SingleSelect.vue
  27. 1 1
      src/components/icss/SymptomTagGroup.vue
  28. 22 32
      src/components/icss/TemplateMaintenance.vue
  29. 36 47
      src/components/icss/TemplateMaintenanceWrap.vue
  30. 282 0
      src/components/icss/VersionDesc.vue
  31. 58 0
      src/components/icss/VersionDetail.vue
  32. 148 0
      src/components/icss/VersionInfo.vue
  33. 125 0
      src/js/Convert_Pinyin.js
  34. 4 0
      src/less/admin.less
  35. 14 1
      src/routes.js

+ 26 - 9
src/api/config.js

@@ -104,7 +104,8 @@ export default {
     'delSimilarName': 'api/icssman/retrieval/delRetrievalsByQuesId', //别名维护-删除
     'similarNameDetl': 'api/icssman/retrieval/getRetrievalsByTag', //别名维护-详情
     'addSimilarName': 'api/icssman/retrieval/addTagRetrieval', //别名维护-添加、修改
-    'searchLable': 'api/icssman/questionInfo/index', //标签检索
+    // 'searchLable': 'api/icssman/questionInfo/index', //标签检索
+    'searchLable': 'api/icssman/questionInfo/indexRev', //标签检索--过滤别名?
     'uploadFile': 'api/icssman/retrieval/retrievalExcelIm', //别名维护-导入
     'commonSymptomList': 'api/icssman/questionUsual/getDeptInfos', //常见症状维护-常见症状列表
     'getDepartmentList':'api/icssman/questionUsual/getDeptName', //常见症状维护-科室列表
@@ -118,9 +119,13 @@ export default {
     'delDiscInformation': 'api/icssman/disclaimerInformation/cancelDisclaimerInformations', //免责声明-删除
     'closeInformation': 'api/icssman/disclaimerInformation/endDisclaimerInformations', //免责声明-停用
     'openInformation': 'api/icssman/disclaimerInformation/startDisclaimerInformations', //免责声明-启用
-    'updateModuleInfo': 'api/icssman/moduleInfo/updateModuleInfo', //模板维护系统修改保存
+    'getQuestionInfos': 'api/icssman/moduleInfo/getQuestionInfos', //模板维护标签池数据获取
+    'saveModuleInfo': 'api/icssman/moduleInfo/saveModuleInfo', //模板维护新增
+    'updateModuleInfo': 'api/icssman/moduleInfo/updateModuleInfo', //模板维护修改
     'getModuleInfoList': 'api/icssman/moduleInfo/getModuleInfoList', //模板维护系统列表
-    'getModuleInfoOne': 'api/icssman/moduleInfo/getModuleInfoOne', //模板维护系统修改获取单个模板信息
+    'getModuleInfoSub': 'api/icssman/moduleInfo/getModuleInfo', //获取子模板列表
+    'getModuleInfoOne': 'api/icssman/moduleInfo/getModuleInfoOne', //模板维护系统修改获取单个模板信息上部分信息
+    'getModuleDetailInfo': 'api/icssman/moduleInfo/getModuleDetailInfo', //模板维护系统修改获取单个模板右侧信息
     'delTemplate': 'api/icssman/moduleInfo/delete', //模板维护系统删除单个模板信息
     'getPhysicalExamTempList': 'api/icssman/deptVital/getDeptVitalPage', //查体模板列表
     'getPhysicalExamTempDepartList':'api/icssman/deptVital/getDeptShortList_create' , //查体模板科室列表--新增
@@ -130,9 +135,21 @@ export default {
     'getConceptKnowledgeList':'/api/knowledgeman/Knowledge/getAllKnowledge', //  术语静态知识列表
     'getConceptKnowledge':'/api/knowledgeman/Knowledge/getConceptKnowledge',//术语静态知识查询
     'getConceptInfo':'/api/knowledgeman/concept/getConceptInfo', //  搜索术语
-    'saveConceptInfo':'/api/knowledgeman/Knowledge/upsertConceptKnowledge',   //保存术语静态知识
-    'delConceptInfo':'/api/knowledgeman/Knowledge/removeConceptKnowledge',   //删除术语静态知识,
-    'getAllType':'/api/knowledgeman/type/getAllType',//术语类型获取
+    'getAllConcept':'/api/knowledgeman/concept/getAllConcept', //  术语列表
+    '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', //版本信息-版本说明列表获取
+    /**************医学术语维护****************/
+	'saveConceptInfo':'/api/knowledgeman/Knowledge/upsertConceptKnowledge',   //保存术语静态知识
+    'delConceptInfo':'/api/knowledgeman/Knowledge/removeConceptKnowledge',   //删除术语静态知识
+    // 'knowledgeName': 'api/knowledgeman/medical/getAllMedicalInfo', //医学术语--命名维护
+    'knowledgeName': 'api/knowledgeman/concept/getAllInformation', //医学术语--命名维护
+    'knowledgeUpload': 'api/knowledgeman/concept/importTermExcel', //医学术语--命名维护-导入
+    'allKnowledgeType': 'api/knowledgeman/type/getAllType', //医学术语--类型列表
 	},
 	menuIconList: { //菜单对应图标
 		'YH-KZT': 'el-icon-menu',
@@ -155,9 +172,9 @@ export default {
   },
   groupParams:[
     {controlType:[1,2],tagType:[1],notTagType:[8]},     //多列多选(杂音/初为)     notTagType为文字标签剔除
-    {controlType:[1,2,6,7],tagType:[1,2],notTagType:[8]},  //多项统一横铺标签(血压)
-    {controlType:[1,2,5,6,7],tagType:[1,2],notTagType:[8]},  //症状详细(症状尾巴)
-    {controlType:[0,2],tagType:[1,4],notTagType:[8]}, //组合项标签(既往史)
+    {controlType:[0,1,2,5,6],tagType:[1,2],notTagType:[8]},  //多项统一横铺标签(血压)
+    {controlType:[0,1,2,5,6],tagType:[1,2],notTagType:[8]},  //症状详细(症状尾巴)
+    {controlType:[1,2],tagType:[1,2,3,4,10],notTagType:[8]}, //组合项标签(既往史)
     {controlType:[1,6],tagType:[],notTagType:[8]},    //化验组合
     {controlType:[1,2,99],tagType:[],notTagType:[8]},   //症状推送类型(添加症状)
   ]

+ 48 - 2
src/api/icss.js

@@ -132,6 +132,9 @@ export default {
     addCommonSymptom(param) {
         return axios.post(urls.addCommonSymptom, param)
     },
+    getCommonSymptomById(param) {
+        return axios.post(urls.getCommonSymptomById, param)
+    },
     delCommonSymptom(param) {
         return axios.post(urls.delCommonSymptom, param)
     },
@@ -153,15 +156,27 @@ export default {
     openInformation(param) {//免责声明-停用
         return axios.post(urls.openInformation, param)
     },
-    updateModuleInfo(param) {//模板维护系统修改保存
+    updateModuleInfo(param) {//模板维护系统修改
         return axios.post(urls.updateModuleInfo, param)
     },
+    saveModuleInfo(param) {//模板维护系统新增
+        return axios.post(urls.saveModuleInfo, param)
+    },
     getModuleInfoList(param) {//模板维护系统列表
         return axios.post(urls.getModuleInfoList, param)
     },
-    getModuleInfoOne(param) {//模板维护系统修改获取单个模板信息
+    getModuleInfoSub(param) {//获取子模板列表
+        return axios.post(urls.getModuleInfoSub, param)
+    },
+    getQuestionInfos(param) {//获取模板维护标签池数据
+        return axios.post(urls.getQuestionInfos, param)
+    },
+    getModuleInfoOne(param) {//模板维护系统修改获取单个模板信息顶部信息
         return axios.post(urls.getModuleInfoOne, param)
     },
+    getModuleDetailInfo(param) {//模板维护系统修改获取单个模板信息右侧信息
+        return axios.post(urls.getModuleDetailInfo, param)
+    },
     delTemplate(param) {//模板维护系统删除单个模板信息
         return axios.post(urls.delTemplate, param)
     },
@@ -180,4 +195,35 @@ export default {
     delPhysicalExamTemp(param) {
         return axios.post(urls.delPhysicalExamTemp, param)
     },
+    versionInfo(param) {//版本信息
+      return axios.post(urls.versionInfo, param)
+    },
+    addVersInfo(param) {//版本信息-添加
+      return axios.post(urls.addVersInfo, param)
+    },
+    updateVersInfo(param) {//版本信息-修改
+      return axios.post(urls.updateVersInfo, param)
+    },
+    delVersionInfo(param) {//版本信息-删除说明
+      return axios.post(urls.delVersionInfo, param)
+    },
+    addVersionInfo(param) {//版本信息-添加说明
+      return axios.post(urls.addVersionInfo, param)
+    },
+    modiVersionInfo(param) {//版本信息-修改说明
+      return axios.post(urls.modiVersionInfo, param)
+    },
+    getVersionDetlInfo(param) {//版本信息-版本说明列表
+      return axios.post(urls.getVersionDetlInfo, param)
+    },
+    // 医学术语维护
+    knowledgeName(param) {//命名维护
+        return axios.post(urls.knowledgeName, param)
+    },
+    allKnowledgeType(param) {//命名维护
+        return axios.post(urls.allKnowledgeType, param)
+    },
+    knowledgeUpload(param) {//命名维护--导入
+        return axios.post(urls.knowledgeUpload, param)
+    },
 }

+ 38 - 7
src/api/utils.js

@@ -64,12 +64,12 @@ export default {
   filterArr(arr,val,type,des){  //数组剔除指定元素 
     if(type == 1){
       if(des){
-        return arr.filter(item => item.id != val)
+        return arr.filter(item => item.id != val)  //判断id
       }else{
-        return arr.filter(item => item != val)
+        return arr.filter(item => item != val)    //判断值
       }
     }else{
-      let tmp = arr.filter(item => JSON.stringify(item) == JSON.stringify(val))
+      let tmp = arr.filter(item => JSON.stringify(item) == JSON.stringify(val))   //判读是否存在
       if(JSON.stringify(tmp) == '[]'){
         return false;
       }else{
@@ -87,6 +87,7 @@ export default {
     // console.log(dataArr,type)
     let tmpArr = [];
     for(let i = 0;i < dataArr.length;i++){
+      let tmpData = dataArr[i];
       let mapping = {
         "sonQuestion": "",
         "position": 0,               //默认值,传0
@@ -99,7 +100,6 @@ export default {
           "id": "",
           "questionMappings": []
       }
-      let tmpData = dataArr[i];
   
       if(type == 6 && tmpData.length > 0){//既往史
         let sonMappingArr=[]; 
@@ -108,15 +108,20 @@ export default {
           if(i == 0){
             mapping.formPosition = 1;
             mapping.exclusionType = 1;
+            mapping.sonQuestion = tmpData[j];
+          }else if(i == 1){
+            mapping.formPosition = 0;
+            mapping.exclusionType = 0;
+            mapping.sonQuestion = tmpData[j];
           }else{
             mapping.formPosition = 0;
             mapping.exclusionType = 0;
+            sonMappingObj.sonQuestion = tmpData[j];    //{sonQuestion:18}
+            sonQuestionMap.questionMappings = sonMappingArr;    //{id:"",[{sonQuestion:18},{sonQuestion:18}]}
+            mapping.questionMappingSon = sonQuestionMap;
           }
-          sonMappingObj.sonQuestion = tmpData[j];    //{sonQuestion:18}
           sonMappingArr.push(sonMappingObj);         //[{sonQuestion:18},{sonQuestion:19}]
           
-          sonQuestionMap.questionMappings = sonMappingArr;    //{id:"",[{sonQuestion:18},{sonQuestion:18}]}
-          mapping.questionMappingSon = sonQuestionMap;
         }
         tmpArr.push(mapping)
       }else if(type == 2 && tmpData.length > 0){//杂音
@@ -191,6 +196,7 @@ export default {
       "ageEnd": 'region9',              //最大年龄
       "copyType":'region10',          //是否复制主标签  
       "showAdd":'region11',           //是否复制当前模块
+      "itemType": 'region12',
       "labelPrefix":'prefix',                                 //前缀
       "labelSuffix":'suffix',                                 //后缀
       "maxValue":'maxNormalVal',                                 //前缀
@@ -204,6 +210,31 @@ export default {
       obj[maps[it]] = typeof data[it]=='number'?data[it]+'':data[it];
     }
     return obj;
+  },
+  /**
+   * 模板数据提交转化函数
+   */
+  orderTemplateData(data){
+    let tmpArr = [];
+    for(let i =0;i<data.length;i++){
+      let obj={
+        "flag": '',
+        "questionId": '',
+        "relationModule": '',
+        "text": ""
+      };
+      if(data[i].type == 'sub'){      //这是子模板
+        obj.relationModule = parseInt(data[i].id)
+      }else if(data[i].type == 'input'){     //这个是输入框文字
+        if(data[i].text){   //去掉空输入框
+          obj.text = data[i].text
+        }
+      }else{    //这个是标签
+        obj.questionId = data[i].id
+      }
+      tmpArr.push(obj)
+    }
+    return tmpArr;
   }
 }
 

+ 3 - 3
src/components/common/Crumbs.vue

@@ -1,5 +1,5 @@
 <template>
-    <div class="container clearfix">
+    <div class="container clearfix" :style="{'minWidth':minWidth?minWidth:'980px'}">
         <img v-if="linkTo" class="return-btn fl" src="../../images/return.png" alt="返回按钮" @click="goBack">
         <h4 class="fl">{{title}}</h4>
         <div class="contents fr">
@@ -11,7 +11,7 @@
 <script>
   export default {
     name: 'crumbs',
-    props: ['title','linkTo'],
+    props: ['title','linkTo','minWidth'],//minWidth-有些头部选项比较多,最小宽度需要调整
     data: function () {
       return {}
     },
@@ -38,7 +38,7 @@
         line-height: 40px;
         position: absolute;
         z-index: 5;
-        min-width: 980px;
+        // min-width: 980px;
     }
 
     .return-btn{

+ 27 - 12
src/components/icss/AddCommonSymptom.vue

@@ -4,21 +4,21 @@
         <div class="groupTitle"><i
             class="el-icon-back"
             @click="back"
-        ></i> 常见症状维护系统--添加科室常见症状</div>
+        ></i> 常见症状维护系统--{{titleText}}</div>
         <el-form :model="form" ref="ruleForm" :rules="rules" class="addDepartForm">
             <el-form-item label="选择科室" prop="department">
-                <el-select v-model="form.department" placeholder="请添加科室" @change="changeDept" class="selectDepart">
+                <el-select :disabled="isEdit || isDetail" v-model="form.department" placeholder="请添加科室" @change="changeDept" class="selectDepart">
                     <el-option v-for="item in departList" :key="item.id" :label="item.name" :value="item.id"></el-option>
                 </el-select>
             </el-form-item>
              <el-form-item label="选择类型" prop="type">
-                <el-select v-model="form.type" placeholder="请选择类型"  @change="changeType" class="selectDepart">
+                <el-select :disabled="isEdit || isDetail" v-model="form.type" placeholder="请选择类型"  @change="changeType" class="selectDepart">
                     <el-option v-for="item in typeList" :key="item.type" :label="item.typeName" :value="item.type"></el-option>
                 </el-select>
             </el-form-item>
         </el-form>
         <div class="symptomList">
-            <div class="bottomPartLeft fl">
+            <div class="bottomPartLeft fl" v-if="!isDetail">
                 
                 <p class="symptomPoolTitle">症状池</p>
                 <div class="symptomPool">
@@ -45,7 +45,7 @@
                 </div>
 
             </div>
-            <div class="bottomPartMid fl">
+            <div class="bottomPartMid fl" v-if="!isDetail">
                 <p><span class="el-icon-arrow-right" @click="toRightList"></span></p>
                 <p><span class="el-icon-arrow-left" @click="toLeftList"></span></p>
             </div>
@@ -56,14 +56,14 @@
                             v-for="(item,index) in rightTagsList" 
                             :key='item.id'
                             :style="index === selectRightTagIndex?styles:null"
-                            @click='selectRightTag(index)'
+                            @click='isDetail ? "":selectRightTag(index)'
                         >   
                             <p v-if="item.tagName" class="tagName  ellipsis" :title="'[ '+item.tagName+' ]'">{{item.tagName}} </p>
                         </li>
                     </ul>
 
             </div>
-            <div class="bottomPartMid fl">
+            <div class="bottomPartMid fl" v-if="!isDetail">
                 <p><span class="el-icon-arrow-up" @click="toUp"></span></p>
                 <p><span class="el-icon-arrow-down" @click="toDown"></span></p>
             </div>
@@ -93,9 +93,12 @@
                 department: '',
                 type:''
             },
+            titleText: '添加科室常见症状',
             departList: [],
             typeList:[],
             searchVal: '',
+            isEdit: false,
+            isDetail: false,
             leftTagsList:[],
             rightTagsList:[],
             selectLeftTagsList: [],
@@ -108,7 +111,19 @@
     created(){
         const { isEdit, isDetail, data } = this.$route.params;
         if(isEdit || isDetail) {
+            if(isEdit) {
+                this.titleText = '修改科室常见症状'
+            } else {
+                this.titleText = '科室常见症状详情'
+            }
             this.isEdit = isEdit
+            this.isDetail = isDetail
+            this.rightTagsList = data.data
+            this.departList.push({name: data.name, id: data.id})
+            this.typeList.push({typeName: data.typeName, type: data.type})
+            this.form.department =data.id
+            this.form.type =data.type
+            this.getSymptomList()
             
         } else {
             this.getDepartmentList()
@@ -152,7 +167,6 @@
             })
         },
         changeDept() {
-            console.log('asdasfdgag',this.departList)
             this.form.type = ''
             this.typeList = this.departList.filter(item => this.form.department == item.id)[0].typeDTOList
             this.clearData()
@@ -181,15 +195,16 @@
         toRightList(){
             this.rightTagsList.push(...this.selectLeftTagsList);
             this.selectLeftTagsList = [];
-            this.selectRightTagsList = [];
+            this.selectRightTagIndex = -1;
             this.getSymptomList()
         },
         toLeftList(){
-            for(let i = 0; i < this.selectRightTagsList.length; i++) {
-                this.rightTagsList = this.rightTagsList.filter(item => item.id !== this.selectRightTagsList[i].id)
+            if(this.selectRightTagIndex == -1) {
+                return
             }
+            this.rightTagsList.splice(this.selectRightTagIndex, 1)
             this.selectLeftTagsList = [];
-            this.selectRightTagsList = [];
+            this.selectRightTagIndex = -1;
             this.getSymptomList()
 
         },

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

@@ -6,7 +6,7 @@
         <div class="contents">
             <el-form ref="form" :label-position="labelPosition" :model="form" :rules="rules" label-width="100px" class="add-admin-form">
                 <el-form-item label="科室名称:" prop="name">
-                    <el-input v-model="form.name" placeholder="请输入科室名称"></el-input>
+                    <el-input v-model="form.name" placeholder="请输入科室名称" maxlength="30"></el-input>
                 </el-form-item>
                 <el-form-item label="描述:" prop="remark">
                     <el-input type="textarea" :rows="3" placeholder="请输入科室描述" v-model="form.remark" maxlength="1024"></el-input>

+ 22 - 6
src/components/icss/AddIndeptLabel.vue

@@ -91,13 +91,22 @@
       },
       validatePass() {      //验证成功回调,调取接口
         //仍需验证标签明细是否选择
+        let isNull = true
+        let options2 = []
         const opts = this.options;
-        if (this.itemsTypes.includes(+this.dataPub.region2)&&opts.length==0) {
-          this.$message({
-            message: '至少填一个选项',
-            type: 'warning'
-          });
-          return;
+        for (let i = 0; i < this.options.length; i++) {
+          if(this.options[i].name.trim() != '') {
+            isNull = false
+            options2.push(this.options[i])
+          }
+        }
+        this.options = options2;
+        if(this.itemsTypes.includes(+this.dataPub.region2)&&isNull) {
+            this.$message({
+              message: '至少填一个选项',
+              type: 'warning'
+            });
+            return;
         }
         let flag=true;
         if(opts[0].code){
@@ -116,6 +125,13 @@
           });
           return;
         }
+        if(this.dataPub.region8 > this.dataPub.region9) {
+          this.$message({
+            message: '最小年龄不能大于最大年龄',
+            type: 'warning'
+          });
+          return;
+        }
         const {isEdit,data} = this.$route.params;
         let param = {
           "questionWrapper": {

+ 222 - 0
src/components/icss/AddMedicalName.vue

@@ -0,0 +1,222 @@
+<template>
+  <div>
+    <crumbs :title="minTitle" linkTo="/admin/LT-YXSYKWH-YXSYMMWH"></crumbs>
+    <div class="contents">
+      <div class="content">
+        <h3>添加术语:</h3>
+        <p class="titl">标准术语:</p>
+        <table class="deptbox">
+          <tr>
+            <td class="ind">序号</td>
+            <td>标准词</td>
+            <td>类型</td>
+            <td class="desc">说明</td>
+          </tr>
+          <tr>
+            <td class="ind">1</td>
+            <td>
+              <el-input v-model="data.name" placeholder="请输入术语" maxlength="30" size="small"></el-input>
+            </td>
+            <td>
+              <el-select v-if="!id" v-model="data.type" filterable placeholder="请选择" size="small">
+                <el-option
+                  v-for="item in typeList"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.name">
+                </el-option>
+              </el-select>
+              <span v-else>{{data.type}}</span>
+            </td>
+            <td class="desc">
+              <el-input v-model="data.mark" placeholder="请输入术语说明" maxlength="120" size="small"></el-input>
+            </td>
+          </tr>
+        </table>
+        <p class="titl">同义词:</p>
+        <table class="deptbox">
+          <tr>
+            <td class="ind">序号</td>
+            <td>术语</td>
+            <td>类型</td>
+            <td class="desc">说明</td>
+            <td v-if="id">操作</td>
+          </tr>
+          <tr v-for="(item,index) in synonymous">
+            <td class="ind">{{index+1}}</td>
+            <td>
+              <el-input v-model="item.term" placeholder="请输入术语" maxlength="30" size="small"></el-input>
+            </td>
+            <td>
+              <!-- <el-select v-model="item.type" clearable placeholder="请选择">
+                <el-option
+                  v-for="item in data.typeList"
+                  :key="item.key"
+                  :label="item.name"
+                  :value="item.key">
+                </el-option>
+              </el-select> -->
+              {{data.type}}
+            </td>
+            <td class="desc">
+              <el-input v-model="item.mark" placeholder="请输入术语说明" maxlength="120" size="small"></el-input>
+            </td>
+            <td v-if="id">
+              <span @click="deleLine(index)" class="delete">删除</span>
+            </td>
+          </tr>
+          <tr @click="addSpan">
+            <td :colspan="colspan" class="addSpan">+</td>
+          </tr>
+        </table>
+        <div class="btn">
+          <el-button
+            type="primary"
+            @click="comfirn"
+          >确 定</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+import api from '@api/icss.js';
+  export default {
+    name:'AddMedicalName',
+    data(){
+      return{
+        minTitle:'医学术语命名维护-添加',
+        data:{
+          name:'',
+          type:'',
+          mark:'', 
+          type:''
+        },
+        typeList:[],
+        id:null,
+        synonymous:[//同义词
+            {
+              term:'',
+              id:1,
+              type:'',
+              mark:''
+            },
+            {
+              term:'',
+              id:2,
+              type:'',
+              mark:''
+            },
+            {
+              term:'',
+              id:3,
+              type:'',
+              mark:''
+            },
+          ],
+        colspan:4,
+        currentPage:1,
+        pageSize:10
+      }
+    },
+    created(){
+      this.getTypeList();
+      const info = this.$route.params.info;
+      if(info){
+        this.minTitle = '医学术语命名维护-修改';
+        this.id = info.id;
+        this.data.name = info.name;
+        this.data.type = info.type;
+        this.data.remark = info.remark;
+        this.colspan = 5;
+      }
+    },
+    methods:{
+      getTypeList(){
+        const param = {
+          current: this.currentPage,
+          size: this.pageSize
+        }
+        api.allKnowledgeType(param).then((res)=>{
+          const data = res.data;
+          if(data.code==0){
+            this.typeList = data.data.records;
+          }else{
+            console.log(res.msg);
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      handleInput(){//限制输入类型
+
+      },
+      addSpan(){
+        // let index = this.synIndex;
+        // index++
+        let singleSpan = {
+          // index:index,
+          term:'',
+          id:null,
+          type:'',
+          mark:''
+        }
+        this.synonymous.push(singleSpan);
+        // this.synIndex = index;
+      },
+      deleLine(index){
+        this.synonymous.splice(index,1);
+        // console.log(123,index,this.synonymous);
+      },
+      comfirn(){
+
+      }
+    }
+  }
+</script>
+<style lang="less" scoped>
+   @import "../../less/admin.less";
+  .content{
+    background: #fff;
+    padding: 20px 20px 30px;
+    color: #545455;
+  }
+  .titl{
+    margin: 25px 0 10px;
+  }
+  .deptbox{
+    // width: 100%;
+    background: #fff;
+    padding: 20px 10px 30px;
+    font-size: 14px;
+    text-align: left;
+    border-collapse: collapse;
+    >tr{
+      height: 30px;
+      text-align: center;
+      td{
+        width: 135px;
+        border: 1px solid #666;
+        padding:5px;
+      }
+      input{
+        border:none;
+        width: 100%;
+      }
+      .ind{
+        width: 55px;
+      }
+      .desc{
+        width: 280px;
+      }
+    }
+    .addSpan{
+      text-align: center;
+      cursor: pointer;
+    } 
+  }
+  .btn {
+    text-align: right;
+    margin-top: 20px;
+  }
+</style>

+ 151 - 0
src/components/icss/AddMedicalRelation.vue

@@ -0,0 +1,151 @@
+<template>
+  <div>
+    <crumbs title="医学术语关系-添加" linkTo="/admin/LT-YXSYKWH-YXSYGXWH"></crumbs>
+    <div class="contents">
+      <div class="content">
+        <p>明细</p>
+        <div class="search">
+          <span>起始术语搜索:</span>
+          <el-input size="small" v-model="firstInput" placeholder="输入术语"></el-input>
+        </div>
+        <div class="search">
+          <span>终点术语搜索:</span>
+          <el-input size="small" v-model="endInput" placeholder="输入术语"></el-input>
+        </div>
+        <table class="deptbox">
+          <tr>
+            <td>起始术语</td>
+            <td>类型</td>
+            <td>关系</td>
+            <td>终点术语</td>
+            <td>类型</td>
+          </tr>
+          <tr>
+            <td>
+              <span>起始术语</span>
+            </td>
+            <td>
+              <el-select v-model="data.firstType" clearable placeholder="请选择" size="mini">
+                <el-option
+                  v-for="item in data.typeList"
+                  :key="item.key"
+                  :label="item.name"
+                  :value="item.key">
+                </el-option>
+              </el-select>
+            </td>
+            <td>
+              <el-select v-model="data.relation" clearable placeholder="请选择" size="mini">
+                <el-option
+                  v-for="item in data.typeList"
+                  :key="item.key"
+                  :label="item.name"
+                  :value="item.key">
+                </el-option>
+              </el-select>
+            </td>
+            <td>
+              <span>终点术语</span>
+            </td>
+            <td>
+              <el-select v-model="data.endType" clearable placeholder="请选择" size="mini">
+                <el-option
+                  v-for="item in data.typeList"
+                  :key="item.key"
+                  :label="item.name"
+                  :value="item.key">
+                </el-option>
+              </el-select>
+            </td>
+          </tr>
+        </table>
+        <div class="btn">
+          <el-button
+            type="primary"
+            @click="comfirn"
+          >确 定</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+  export default {
+    name:'AddMedicalRelation',
+    data(){
+      return{
+        data:{
+          type:'',
+          typeList:[
+            {
+              name:'类型1',
+              id:1,
+              key:1
+            },
+            {
+              name:'类型2',
+              id:2,
+              key:2
+            },
+            {
+              name:'类型3',
+              id:3,
+              key:3
+            },
+          ]
+        },
+        firstInput:'',
+        endInput:'',
+        relation:'',
+        firstType:'',
+        endType:''
+      }
+    },
+    methods:{
+      comfirn(){
+
+      }
+    }
+  }
+</script>
+<style lang="less" scoped>
+  @import "../../less/admin.less";
+  .content{
+    background: #fff;
+    padding: 20px 20px 30px;
+    color: #545455;
+    .search{
+      width: 185px;
+      display: inline-block;
+      margin: 20px 255px 25px 0;
+      .el-input--small{
+        margin-top: 8px;
+      }
+    }
+  }
+  .deptbox{
+    // width: 100%;
+    background: #fff;
+    padding: 20px 10px 30px;
+    font-size: 14px;
+    text-align: left;
+    border-collapse: collapse;
+    >tr{
+      height: 30px;
+      text-align: center;
+      td{
+        width: 135px;
+        border: 1px solid #666;
+        padding:5px;
+      }
+      input{
+        border:none;
+        width: 100%;
+      }
+    } 
+  }
+  .btn {
+    text-align: right;
+    margin-top: 20px;
+  }
+</style>

+ 14 - 10
src/components/icss/AddPhysicalExamTemp.vue

@@ -4,7 +4,7 @@
         <div class="groupTitle"><i
             class="el-icon-back"
             @click="back"
-        ></i> 查体模板维护系统--添加模板</div>
+        ></i> 查体模板维护系统--{{titleText}}</div>
         <el-form :model="form" ref="ruleForm" :rules="rules" class="addDepartForm">
             <el-form-item label="模板归属:"  >
                <span>查体</span>
@@ -49,8 +49,8 @@
             </div>
             <div class="bottomPartRight fl">
                 <p class="symptomPoolTitle">查体模板: 
-                    <span class="el-icon-arrow-right arrowIcon" @click="toDown"></span>
-                    <span class="el-icon-arrow-left arrowIcon" @click="toUp"></span> 
+                    <span v-if="!isDetail" class="el-icon-arrow-right arrowIcon" @click="toDown"></span>
+                    <span v-if="!isDetail" class="el-icon-arrow-left arrowIcon" @click="toUp"></span> 
                 </p>
                 <ul class="tagList operationPool">
                         <li class = "tagItem fl"
@@ -89,6 +89,7 @@
             form: {
                 department: '',
             },
+            titleText: '添加模板',
             departList: [],
             searchVal: '',
             leftTagsList:[],
@@ -105,6 +106,11 @@
     created(){
         const { isEdit, isDetail, data } = this.$route.params;
         if(isEdit || isDetail) {
+            if(isEdit) {
+                this.titleText = '修改模板'
+            } else {
+                this.titleText = '模板详情'
+            }
             const { id, name } = data
             this.isEdit = isEdit
             this.isDetail = isDetail
@@ -159,7 +165,6 @@
             return RightTagListIds
         },
         changeDepart(){
-            console.log(this.form.department)
             this.getTagList()
         },
         selectLeftTag(tag, index, e) {
@@ -176,16 +181,16 @@
         toRightList(){
             this.rightTagsList.push(...this.selectLeftTagsList);
             this.selectLeftTagsList = [];
-            this.selectRightTagsList = [];
+            this.selectRightTagIndex = -1;
             this.getTagList()
-            console.log('rightTagsList', this.rightTagsList)
         },
         toLeftList(){
-            for(let i = 0; i < this.selectRightTagsList.length; i++) {
-                this.rightTagsList = this.rightTagsList.filter(item => item.id !== this.selectRightTagsList[i].id)
+            if(this.selectRightTagIndex == -1) {
+                return
             }
+            this.rightTagsList.splice(this.selectRightTagIndex, 1)
             this.selectLeftTagsList = [];
-            this.selectRightTagsList = [];
+            this.selectRightTagIndex = -1;
             this.getTagList()
 
         },
@@ -250,7 +255,6 @@
             }
             this.showConfirmDialog('是否保存该模板?', () => {
                 api.savePhysicalExamTemp(param).then((res) => {
-                console.log('resssss', res)
                 if (res.data.code  === '0') {
                     this.warning(res.data.msg || '保存成功', 'success','1000')
                     setTimeout(() => {

+ 52 - 18
src/components/icss/AddSimilarName.vue

@@ -21,14 +21,21 @@
             <td>拼音</td>
           </tr>
           <tr v-if="flag" v-for="item in selfName">
-           <!--  <td class="desc">{{item.retrievalName}}</td>
-            <td>{{item.retrievalSpell}}</td> -->
-            <td><input type="text" name="" v-model="item.retrievalName"></td>
-            <td><input type="text" name="" v-model="item.retrievalSpell"></td>
+           <!-- 本体名字不能修改 3-15 -->
+            <td>
+              <!-- <input type="text" name="" v-model="item.retrievalName" maxlength="30" @input="handleInput"> -->
+              <p>{{item.retrievalName}}</p>
+            </td>
+            <td>
+              <input type="text" name="" v-model="item.retrievalSpell" maxlength="30" @input="handlePinyin">
+            </td>
           </tr>
           <tr v-if="!flag" v-for="(i,index) in selfEmpty">
-            <td><input type="text" name="" v-model="selfEmpty[index].retrievalName"></td>
-            <td><input type="text" name="" v-model="selfEmpty[index].retrievalSpell"></td>
+            <td>
+              <!-- <input type="text" name="" v-model="selfEmpty[index].retrievalName" maxlength="30" @input="handleInput"> -->
+              <p>{{i.retrievalName}}</p>
+            </td>
+            <td><input type="text" name="" v-model="i.retrievalSpell" maxlength="30" @input="handlePinyin"></td>
           </tr>
         </table>
         <p class="subtitle">别名添加:</p>
@@ -38,12 +45,12 @@
             <td>拼音</td>
           </tr>
           <tr v-if="retrievalNames.length>0" v-for="it in retrievalNames">
-            <td><input type="text" name="" v-model="it.retrievalName"></td>
-            <td><input type="text" name="" v-model="it.retrievalSpell"></td>
+            <td><input type="text" name="" v-model="it.retrievalName" maxlength="30" @input="handleInput"></td>
+            <td><input type="text" name="" v-model="it.retrievalSpell" maxlength="30" @input="handlePinyin"></td>
           </tr>
           <tr v-for="(i,index) in retrievalEmpty">
-            <td><input type="text" name="" v-model="retrievalEmpty[index].retrievalName"></td>
-            <td><input type="text" name="" v-model="retrievalEmpty[index].retrievalSpell"></td>
+            <td><input type="text" name="" v-model="retrievalEmpty[index].retrievalName" maxlength="30" @input="handleInput" @blur="handleBlur(index,2)"></td>
+            <td><input type="text" name="" v-model="retrievalEmpty[index].retrievalSpell" maxlength="30" @input="handlePinyin"></td>
           </tr>
           <tr @click="addSpan(2)">
             <td colspan="2" class="addSpan">+</td>
@@ -56,12 +63,12 @@
             <td>拼音</td>
           </tr>
           <tr v-if="retrievalSonNames.length>0" v-for="v in retrievalSonNames">
-            <td><input type="text" name="" v-model="v.retrievalName"></td>
-            <td><input type="text" name="" v-model="v.retrievalSpell"></td>
+            <td><input type="text" name="" v-model="v.retrievalName" maxlength="30" @input="handleInput"></td>
+            <td><input type="text" name="" v-model="v.retrievalSpell" maxlength="30" @input="handlePinyin"></td>
           </tr>
           <tr v-for="(k,index) in sonEmpty">
-            <td><input type="text" name="" v-model="sonEmpty[index].retrievalName"></td>
-            <td><input type="text" name="" v-model="sonEmpty[index].retrievalSpell"></td>
+            <td><input type="text" name="" v-model="sonEmpty[index].retrievalName" maxlength="30" @input="handleInput" @blur="handleBlur(index,3)"></td>
+            <td><input type="text" name="" v-model="sonEmpty[index].retrievalSpell" maxlength="30" @input="handlePinyin"></td>
           </tr>
           <tr @click="addSpan(3)">
             <td colspan="2" class="addSpan">+</td>
@@ -79,6 +86,7 @@
 </template>
 <script type="text/javascript">
   import api from '@api/icss.js';
+  import pinyin from '../../js/Convert_Pinyin.js'
   export default{
     name:'AddSimilarName',
     data(){
@@ -175,9 +183,17 @@
         const {selfName,selfEmpty,retrievalNames,retrievalEmpty,retrievalSonNames,sonEmpty} = this;
         let dataList = [];
         if(this.flag){ //修改
+          if(!selfName[0].retrievalSpell){
+            this.$message.error("本体拼音不能为空");
+            return
+          }
           dataList = selfName.concat(retrievalNames,retrievalEmpty,retrievalSonNames,sonEmpty);
           this.toast = "修改成功";
         }else{
+          if(!selfEmpty[0].retrievalSpell){
+            this.$message.error("本体拼音不能为空");
+            return
+          }
           dataList = selfEmpty.concat(retrievalNames,retrievalEmpty,retrievalSonNames,sonEmpty);
           this.toast = "添加成功";
         }
@@ -200,8 +216,8 @@
             });
             this.$router.push({path:'LT-YXSJWH-BMWH'});
           }else{
-            console.log(result.msg);
-            this.$message.error(result.msg);
+            // console.log(result.msg);
+            this.$message.error("标签和拼音不能为空");
           }
         })
       },
@@ -212,7 +228,7 @@
         }
         api.searchLable(param).then((res)=>{
           const result = res.data;
-          console.log(123,result);
+          // console.log(123,result);
           if(result.code==0){
             this.searchDatas = result.data;
             if(result.data.length>0){
@@ -229,10 +245,28 @@
         this.id = item.id;
         this.showFlag = false;
         this.searchStr = "";
+        this.selfEmpty[0].retrievalName = this.name;
+        this.selfEmpty[0].retrievalSpell = pinyin.getCamelChars(this.name);
+        // console.log("标签拼音:",pinyin.getCamelChars(this.name));
       },
       close(){
         this.showFlag = false;
-        this.searchStr = "";
+        // this.searchStr = "";
+      },
+      handleInput(e){//名字只能输入中文、英文和数字
+        e.target.value = e.target.value.replace(/[^0-9a-zA-Z\u4e00-\u9fa5]/g,'');
+      },
+      handlePinyin(e){//只能输入英文
+        e.target.value = e.target.value.replace(/[^a-zA-Z]/g,'');
+      },
+      handleBlur(index,flag){
+        if(flag==2){//别名
+          let current = this.retrievalEmpty[index];
+          current.retrievalSpell = pinyin.getCamelChars(current.retrievalName);
+        }else if(flag==3){//子项
+          let sonCurrent = this.sonEmpty[index];
+          sonCurrent.retrievalSpell = pinyin.getCamelChars(sonCurrent.retrievalName);
+        }  
       }
     },
     watch:{

+ 137 - 0
src/components/icss/AddVersion.vue

@@ -0,0 +1,137 @@
+<template>
+  <div>
+    <crumbs :title="title" linkTo="/admin/LT-YXSJWH-BBXXWH"></crumbs>
+    <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-item label="版本号:" prop="name">
+              <el-input v-model="form.name" placeholder="请输入版本号" maxlength="120"></el-input>
+          </el-form-item>
+          <el-form-item label="版本时间:" prop="refreshTime">
+            <el-date-picker
+              v-model="form.refreshTime"
+              type="date"
+              placeholder="选择日期"
+              :picker-options="pickerOptions1"
+              value-format="yyyy-MM-dd"
+              :clearable='false'>
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="版本备注:" prop="remark" class="discDesc">
+              <el-input type="textarea" :rows="3" placeholder="请输入版本备注" v-model="form.remark" maxlength="120"></el-input>
+          </el-form-item>
+          <el-form-item label="版本说明:" v-if="list.length>0">
+          </el-form-item>
+        </el-form>
+        <VersionDesc v-if="id" :detail="list" :versionId="id" :isFirst="isFirst"/>
+        <el-button class="disclButn" size="small" type="primary" @click="comfirn">确定</el-button>
+      </div>    
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+  import api from '@api/icss.js';
+  import VersionDesc from './VersionDesc.vue';
+  export default {
+    name:'AddVersion',
+    data(){
+      return{
+        // data:{},
+        list:[],
+        labelPosition:'left',
+        isFirst:false,
+        title:'版本信息维护-添加版本信息',
+        form:{
+          name:'',
+          refreshTime:'',
+          remark:''
+        },
+        id:null,
+        rules:{
+          name:{ required: true, message: '请输入版本号', trigger: ['blur', 'change'] },
+          refreshTime:{ required: true, message: '请选择时间', trigger: ['blur', 'change'] }
+        },
+        pickerOptions1:{
+          disabledDate(time) {
+            return time.getTime() < Date.now();
+          },
+        }
+      }
+    },
+    created(){
+      let info = this.$route.params.info;
+      if(info){
+        this.id = info.id;
+        this.form.name = info.name;
+        this.form.refreshTime = info.refreshTime;
+        this.form.remark = info.remark;
+        this.title = "版本信息维护-修改版本信息";
+        this.isFirst = true;
+        this.getList();
+      }
+    },
+    methods:{
+      getList(){
+        api.getVersionDetlInfo({id:this.id}).then((res)=>{
+          const result = res.data;
+          if(result.code==0){
+            this.list = result.data;
+          }else{
+            this.$message.error(result.msg);
+          }
+        })
+      },
+      comfirn(){
+        if(this.id){//修改
+          const param = Object.assign({},this.form,{id:this.id})
+          api.updateVersInfo(param).then((res)=>{
+            if(res.data.code==0){
+              this.$message({
+                message:"修改成功",
+                type:'success'
+              })
+              this.$router.push({path: 'LT-YXSJWH-BBXXWH'});
+            }else{
+              this.$message.error(res.data.msg);
+            }
+          })
+        }else{//添加
+          api.addVersInfo(this.form).then((res)=>{
+            if(res.data.code==0){
+              this.$message({
+                message:"添加成功",
+                type:'success'
+              })
+              this.$router.push({path: 'LT-YXSJWH-BBXXWH'});
+            }else{
+              this.$message.error(res.data.msg);
+            }
+          })
+        }
+      },
+    },
+    components:{
+      VersionDesc
+    }
+  }
+</script>
+<style lang="less" scoped>
+  @import "../../less/admin.less";
+  .content{
+    background: #fff;
+    // padding: 20px 20px 30px;
+    padding: 20px 20px 50px;
+    color: #545455;
+    min-width: 980px;
+    position: relative;
+    .discDesc{
+      margin-bottom: 20px;
+    }
+    .disclButn{
+      position: absolute;
+      right: 80px;
+      bottom: 0px;
+    }
+  }
+
+</style>

+ 9 - 21
src/components/icss/CommonSymptom.vue

@@ -102,15 +102,20 @@
     },
     methods: {
       toEditProduct(row){
-        const param = {
+       
+        this.getCommonSymptomById('isEdit',row)
+
+      },
+      getCommonSymptomById(type, row) {
+         const param = {
             "deptId": row.id,
             "type": row.type
         }
         api.getCommonSymptomById(param).then((res)=>{
             const {code,data,msg} = res.data;
             if(code=='0'){
-                const item = Object.assign({},row,data);
-                this.$router.push({name:'AddCommonSymptom',params:{isEdit:true,data:item}});
+                const item = Object.assign({},row,{data: data});
+                this.$router.push({name:'AddCommonSymptom',params:{[type]:true,data:item}});
             }else{
                 this.$message({
                 message: msg,
@@ -118,7 +123,6 @@
                 });
             }
         });
-
       },
       filterDatas(){
         this.currentPage = 1;
@@ -131,7 +135,6 @@
         // };
         api.commonSymptomList(param).then((res) => {
           if (res.data.code == '0') {
-            console.log('commonSymptomList', res)
             const data = res.data.data;
             this.list = data.records;
             this.total = data.total;
@@ -141,22 +144,7 @@
         });
       },
       getDetailList(row) {
-        const param = {
-            "deptId": row.id,
-            "type": row.type
-        }
-        api.getCommonSymptomById(param).then((res)=>{
-            const {code,data,msg} = res.data;
-            if(code=='0'){
-                const item = Object.assign({},row,data);
-                this.$router.push({name:'AddCommonSymptom',params:{isEdit:true,data:item}});
-            }else{
-                this.$message({
-                message: msg,
-                type: 'warning'
-                });
-            }
-        });
+         this.getCommonSymptomById('isDetail',row)
       },
       getFilterItems() {
         const param = {

+ 254 - 126
src/components/icss/CommonTemplate.vue

@@ -38,53 +38,64 @@
     </div>
     <div class="bottomPartRight bottomPartRightTemplate">
       <p class="poolTitle">模板内容:</p>
-      <el-form
-        class="subTemplate"
-        ref="groups"
-        :model="form"
-      >
-        <el-form-item
-          label="选择归属:"
-          prop="region"
-          size="mini"
-        >
-          <el-select
-            v-model="form.region"
-            placeholder="请选择模板归属"
+      <div class="arrowWrap" style="float:right;marginRight:10px" v-if="type != 1 && type != 2">
+        <i class="el-icon-arrow-left arrowWrapPub" @click="moveTag(0)"></i>
+        <i class="el-icon-arrow-right arrowWrapPub" @click="moveTag(1)"></i>
+      </div>
+      <div class="formWrap" v-if="type == 1 || type == 2">
+          <el-form
+            class="subTemplate"
+            :model="form"
           >
-            <el-option
-              v-for="item in Adscriptions"
-              :label="item.name"
-              :value="item.val"
-              :key="item.id"
-            ></el-option>
-          </el-select>
-          <el-button size="mini">添加</el-button>
-          <el-button size="mini">删除子模板</el-button>
-          <el-button size="mini">插入输入栏</el-button>
-
-          <el-button icon="el-icon-arrow-left" class="changeOrder changeOrderPub"></el-button>
-          <el-button icon="el-icon-arrow-right" class="changeOrderPub"></el-button>
-        </el-form-item>
-      </el-form>
+            <el-form-item
+              label="添加子模板:"
+              prop="region"
+              size="mini"
+            >
+              <el-select
+                v-model="form.region"
+                placeholder="请选择子模板"
+              >
+                <el-option
+                  v-for="item in Adscriptions"
+                  :label="item.name"
+                  :value="item.id"
+                  :key="item.id"
+                ></el-option>
+              </el-select>
+              <el-button size="mini" @click="addDomTemplate(0,'submitForm')">添加</el-button>
+              <el-button size="mini" @click="delSubTemplate">删除子模板</el-button>
+              <el-button size="mini" @click="addDomTemplate(1)">插入输入栏</el-button>
+            </el-form-item>
+          </el-form>
+        <div class="arrowWrap">
+          <i class="el-icon-arrow-left arrowWrapPub" @click="moveTag(0)"></i>
+          <i class="el-icon-arrow-right arrowWrapPub" @click="moveTag(1)"></i>
+        </div>
+      </div>
       <ul class="tagList operationPool templateTagLists">
         <li
           class="tagItem operationItem"
-          v-for="(item) in rightTagsList2"
-          :key='item.id'
+          v-for="(item,idx) in rightTagsList"
+          :key='item.name'
+          @click='selectRightTag(item,idx)'
           :style="getStyle2(item)?styles:null"
-          @click='selectRightTag(item)'
         >
-          <div class="inputBox">
-            <el-input
-              v-if="item.type === 'input'"
-              placeholder=""
-              v-model="item.text"
-            >
-            </el-input>
+          <div class="inputBox" v-if="item.type === 'input'">
+              <el-input
+                placeholder=""
+                v-model="item.text"
+                @change="updataData"
+              >
+              </el-input>
           </div>
           <p
-            v-if="item.tagName"
+            v-if="item.type === 'sub'"
+            class="tagName  ellipsis"
+            :title="'[ '+item.tagName+' ]'"
+          >{{item.tagName}}</p>
+          <p
+            v-if="item.type !== 'input' && item.type !== 'sub'"
             class="tagName  ellipsis"
             :title="'[ '+item.tagName+' ]'"
           >{{item.tagName}} </p>
@@ -107,61 +118,80 @@ export default {
       default: '',
       type: String
     },
-    sexType: {
-      default: '',
-      type: String
-    },
     options: {
-      default: () => [],
-      type: Array
+      default: () => {},
+      type: Object
     },
   },
   data() {
     return {
-      Adscriptions: [
-        { name: '添加病情变化', val: '1', id: '001' },
-        { name: '病程变化', val: '2', id: '002' },
-        { name: '添加其他症状', val: '3', id: '003' },
-      ],
-      form: {
-        region: '1',    //归属
+      Adscriptions: [],     //子模板列表
+      form: {region: ''},    //当前子模板
+      addTag:{
+        text:'',              //输入框内容为空
+        id:'',                //id可以用index做id
+        type:'input',        //sub 子模板
       },
+      subTmpList:[],     //子模板的id用于去重
       leftTagsList: [],
       selectLeftTagsList: [],
       rightTagsList: [],
-      rightTagsList2: [],
       selectRightTagsList: [],
+      selectRightTagsListIndex: [],
       searchVal: '',
       styles: {
         background: '#eae7e7'
       },
     }
   },
+  destroyed: function () {
+    this.searchVal = ''
+  },
   mounted() {
-    this.rightTagsList2 = this.options
-    let newArr = []
-    for (let i = 0; i < this.rightTagsList2.length; i++) {
-      if (this.rightTagsList2[i].tagType == 8) {
-        newArr.push({ text: this.rightTagsList2[i].tagName, type: 'input', id: i + ',,,' })
-      } else {
-        if (i === 0) {
-          newArr.push({ text: '', type: 'input', id: i + ',,,' })
-        }
-        newArr.push(this.rightTagsList2[i])
-        if (!this.rightTagsList2[i + 1] || this.rightTagsList2[i + 1] && this.rightTagsList2[i + 1].tagType != 8) {
-          newArr.push({ text: '', type: 'input', id: i + ',,,,' })
+    this.$nextTick(()=>{
+      if(this.options.id){
+        if(this.options && this.options.data && this.options.data.length>0){
+          let reviewList = this.options.data
+          let tmpSubTmpList = this.subTmpList.slice(0)
+          for(let m = 0;m < reviewList.length;m++){
+            if(reviewList[m].relationModule != null){      //这是子模板,修改有子模板需要记录去重
+              reviewList[m].id = reviewList[m].relationModule + 'sub'
+              reviewList[m].tagName = reviewList[m].relationModuleName
+              reviewList[m].type = 'sub'
+              tmpSubTmpList.push(reviewList[m].relationModule)     
+              this.subTmpList = tmpSubTmpList
+            }else if(reviewList[m].tagType == 8){     //这个是输入框文字
+              reviewList[m].id = m+'1001001001'
+              reviewList[m].type = 'input'
+              reviewList[m].text = reviewList[m].tagName
+            }else{    //这个是标签
+              reviewList[m].id = reviewList[m].questionId
+            }
+          }
+          this.rightTagsList = reviewList
         }
+        this.$emit('changeActionData', this.rightTagsList, false);
+        this.getSubTemplate()
+      }else{
+        this.getSubTemplate()
       }
-    }
-    this.rightTagsList2 = newArr
-    this.$emit('changeActionData', this.rightTagsList2, false);
-    this.searchTagList()
-    // this.leftTagsList = this.pool
-    // console.log('TAGPOOL', this.pool)
+      this.searchTagList()
+    })
   },
   watch: {
-    pool(newVal, preVal) {
-      this.leftTagsList = newVal
+    type(newVal, preVal) {
+      this.searchTagList()       //重新获取标签池数据
+      if(newVal != preVal){
+        this.form = {region: ''}  
+        this.subTmpList = []     //子模板的id用于去重
+        this.leftTagsList = []
+        this.selectLeftTagsList = []
+        this.rightTagsList = []
+        this.selectRightTagsList = []
+        this.selectRightTagsListIndex = []
+        this.searchVal = ''
+        this.getSubTemplate()      //重新获取子模板
+      }
     },
     searchVal(newVal, preVal) {
       if (newVal.trim() == '') {
@@ -172,6 +202,92 @@ export default {
     },
   },
   methods: {
+    updataData(){
+      this.$emit('changeActionData', this.rightTagsList, false);
+    },
+    addDomTemplate(sign,dom){
+      let tmpArr1 = this.rightTagsList.slice(0);
+      let tmpArr2 = this.selectRightTagsListIndex.slice(0);
+      let tmpArr3 = this.subTmpList.slice(0),tmpRegion = this.form.region;
+      let tmpArr4 = this.Adscriptions.filter(item => item.id == tmpRegion);
+      let tmpTag = Object.assign({},this.addTag);     //深度复制obj
+      if(sign == 0){         //添加子模板
+        if(tmpArr4.length == 0){
+          this.$message({
+            message:'请选择子模板',
+            type:'warning'
+          })
+          return false;
+        }
+        tmpTag.type = 'sub'
+        tmpArr3.push(tmpRegion)
+        tmpTag.tagName = tmpArr4[0].name
+        tmpTag.id = tmpArr4[0].id + 'sub'
+        this.subTmpList = tmpArr3  //记录子模板id 
+        this.form.region = ''
+        this.getSubTemplate()
+      }else{     //添加输入框
+        tmpTag.type = 'input'
+      }
+      tmpArr1.push(tmpTag);
+      for(let i =0; i < tmpArr1.length; i++){    //循环右侧所有数据
+        if(tmpArr1[i].type == 'input'){
+          tmpArr1[i].id = i + '1001001001'     //给添加的子模板或者输入框加上id
+        }
+      }
+      this.rightTagsList = tmpArr1;
+      this.$emit('changeActionData', this.rightTagsList, false);
+    },
+    moveTag(dir){
+      let tmpArr1 = this.rightTagsList.slice(0);
+      let tmpArr2 = this.selectRightTagsListIndex.slice(0);
+      let tmpArr3 = this.selectRightTagsList.slice(0);
+      if(dir == 0){     //往左
+        for(let i = 0;i < tmpArr3.length;i++){     //删除选中的元素
+          let tmpId = tmpArr3[i].id
+          tmpArr1 = tmpArr1.filter(item => item.id !== tmpId)
+        }
+        let tmpArr = tmpArr1.slice(0)
+        for(let k = 0;k < tmpArr2.length;k++){     //选中元素的index
+          let tmpIdx = tmpArr2[k]-1
+          tmpArr.splice(tmpIdx,0,tmpArr3[k])
+          if(tmpArr2[k] == 0){
+            return
+          }
+          tmpArr2[k] = (tmpArr2[k]-1)
+        }
+        this.selectRightTagsListIndex = tmpArr2
+        this.rightTagsList = tmpArr
+      }else{     //往右
+        for(let i = 0;i < tmpArr3.length;i++){     //删除选中的元素
+          let tmpId = tmpArr3[i].id
+          tmpArr1 = tmpArr1.filter(item => item.id !== tmpId)
+        }
+        let tmpArr = tmpArr1.slice(0)
+        for(let k = 0;k < tmpArr2.length;k++){     //选中元素的index
+          let tmpIdx = tmpArr2[k]+1
+          tmpArr.splice(tmpIdx,0,tmpArr3[k])
+          if(tmpArr2[k] == tmpArr1.length){
+            return
+          }
+          tmpArr2[k] = (tmpArr2[k]+1)
+        }
+        this.selectRightTagsListIndex = tmpArr2
+        this.rightTagsList = tmpArr
+      }
+      this.$emit('changeActionData', this.rightTagsList, false);
+    },
+    delSubTemplate(){   //删除子模板
+      if (this.selectRightTagsList.length>0 && this.selectRightTagsList[0].type === 'sub') {    //删除子模板,输入框或者标签就不变
+        this.rightTagsList = this.rightTagsList.filter(item => item.id !== this.selectRightTagsList[0].id)
+        this.subTmpList = this.subTmpList.filter(item => item.id !== this.selectRightTagsList[0].id)  //选中的子模板id去掉
+      }
+      this.selectLeftTagsList = []
+      this.selectRightTagsList = []
+      this.selectRightTagsListIndex = []
+      this.$emit('changeActionData', this.rightTagsList, false);
+      this.getSubTemplate()
+    },
     selectLeftTag(tag, index, e) {
       const hasTag = this.isHasTag(tag, this.selectLeftTagsList)
       if (hasTag) {
@@ -180,12 +296,19 @@ export default {
         this.selectLeftTagsList.push(tag);
       }
     },
-    selectRightTag(tag) {
-      const hasTag = this.isHasTag(tag, this.selectRightTagsList)
+    selectRightTag(tag,idx) {
+      const hasTag = this.isHasTag(tag, this.selectRightTagsList);
+      let tmpArr = this.selectRightTagsListIndex;
+      let tmpArr1 = this.selectRightTagsList.slice(0);
       if (hasTag) {
-        this.selectRightTagsList = this.selectRightTagsList.filter(item => item.id !== tag.id)
+        this.selectRightTagsList = this.selectRightTagsList.filter(item => item.tagName !== tag.name)
+        tmpArr = tmpArr.filter(item => item !== idx)
+        this.selectRightTagsListIndex = tmpArr
       } else {
-        this.selectRightTagsList.push(tag);
+        tmpArr1[0] = tag;
+        tmpArr[0]=idx;
+        this.selectRightTagsList = tmpArr1;
+        this.selectRightTagsListIndex = tmpArr;
       }
     },
     isHasTag(item, arr) {
@@ -203,70 +326,58 @@ export default {
       return this.isHasTag(item, this.selectRightTagsList)
     },
     toLeftList() {
-      for (let i = 0; i < this.selectRightTagsList.length; i++) {
-        this.rightTagsList = this.rightTagsList.filter(item => item.id !== this.selectRightTagsList[i].id)
-      }
-      for (let i = 0; i < this.selectRightTagsList.length; i++) {//每次往回移时同时删掉下面输入框
-        if (this.selectRightTagsList[i].type !== 'input') {
-          for (let j = 0; j < this.rightTagsList2.length; j++) {
-            if (this.selectRightTagsList[i].id === this.rightTagsList2[j].id) {
-              if (this.rightTagsList2.length === 3) {
-                this.rightTagsList2 = []
-              } else {
-                this.rightTagsList2.splice(j, 2)
-              }
-            }
-          }
+      if (this.selectRightTagsList.length>0 && this.selectRightTagsList[0].type !== 'sub') {    //往左的是子模板不变或者输入框,是输入框或者标签就删除
+        for (let i = 0; i < this.selectRightTagsList.length; i++) {
+          this.rightTagsList = this.rightTagsList.filter(item => item.id !== this.selectRightTagsList[0].id)
         }
+        this.searchTagList()
+        this.$emit('changeActionData', this.rightTagsList, false);
       }
       this.selectLeftTagsList = []
       this.selectRightTagsList = []
-      this.searchTagList()
-      this.$emit('changeActionData', this.rightTagsList2, false);
+      this.selectRightTagsListIndex = []
     },
     toRightList() {
       this.rightTagsList.push(...this.selectLeftTagsList);
-      let textItem = { text: '', type: 'input' }
-      for (let i = 0; i < this.selectLeftTagsList.length; i++) { //选中标签每个前后加入输入框
-        if (this.rightTagsList2.length === 0) {
-          let textItem1 = JSON.parse(JSON.stringify(textItem))
-          textItem1.id = this.selectLeftTagsList[i].id + ',,'
-          this.rightTagsList2.push(textItem1)
-        }
-        this.rightTagsList2.push(this.selectLeftTagsList[i]);
-        let textItem2 = JSON.parse(JSON.stringify(textItem))
-        textItem2.id = this.selectLeftTagsList[i].id + ','
-        this.rightTagsList2.push(JSON.parse(JSON.stringify(textItem2)))
-      }
-
       for (let i = 0; i < this.rightTagsList.length; i++) {
         this.leftTagsList = this.leftTagsList.filter(item => item.id !== this.rightTagsList[i].id)
       }
       this.selectLeftTagsList = []
       this.selectRightTagsList = []
-      this.$emit('changeActionData', this.rightTagsList2, false);
+      this.selectRightTagsListIndex = []
+      this.$emit('changeActionData', this.rightTagsList, false);
     },
     searchTagList() {
       let notIds = []
-      for (let i = 0; i < this.rightTagsList.length; i++) {
-        if (typeof this.rightTagsList2[i].id === 'number') {
-          notIds.push(this.rightTagsList2[i].id)
+      let tmpArr = this.rightTagsList.slice();
+      for (let i = 0; i < tmpArr.length; i++) {
+        if(tmpArr[i].type != 'sub' && tmpArr[i].type != 'input'){
+          notIds.push(tmpArr[i].id)
         }
       }
       let param = {
         "tagName": this.searchVal,
-        "type": this.type || '',
-        "notIds": notIds,
+        "type": this.type == 4?3:1,
+        "noIds": notIds,
       }
-      api.searchTagList(param).then((res) => {
+      api.getQuestionInfos(param).then((res) => {
         if (res.data.code === '0') {
           this.leftTagsList = res.data.data
           this.selectLeftTagsList = []
           this.selectRightTagsList = []
         }
       })
-    }
-
+    },
+    getSubTemplate() {
+      let param = {
+        noIds:this.subTmpList
+      }
+      api.getModuleInfoSub(param).then((res) => {
+        if (res.data.code === '0') {
+          this.Adscriptions = res.data.data
+        }
+      })
+    },
   }
 }
 </script>
@@ -281,6 +392,7 @@ export default {
   .poolTitle {
     box-sizing: border-box;
     margin-bottom: 20px;
+    display: inline-block;
   }
   .inputBox {
     width: 100px;
@@ -337,15 +449,36 @@ export default {
   .bottomPartRight {
     float: left;
     width: 60%;
-    .changeOrder {
-      margin-left: 20px;
+      .arrowWrap {
+        float: right;
+        background-color: #fff;
+        padding-top: 1px;
+        margin-right: 10px;
+        .arrowWrapPub[data-v-2db8be7a] {
+          border: 1px solid @adminBase;
+          height: 23px;
+          width: 40px;
+          text-align: center;
+          background: #fff;
+          line-height: 23px;
+          border-radius: 3px;
+          margin-left: 10px;
+        }
+      }
+    .formWrap {
+      position: relative;
+      height: 30px;
+      .subTemplate {
+        width: 470px;
+        float: left;
+      }
     }
   }
   .templateTagList {
     height: 450px;
   }
   .templateTagLists {
-    height: 468px;
+    height: 462px;
     width: 98%;
   }
   button {
@@ -357,6 +490,7 @@ export default {
     margin: 0 5px 10px 0;
     text-align: center;
     float: left;
+    height: 40px;
     p {
       padding: 5px 0;
     }
@@ -369,13 +503,10 @@ export default {
 <style lang="less">
 @import "../../less/common.less";
 .bottomPartRightTemplate {
-  .subTemplate {
-    // display: inline-block;
-  }
   .el-form-item__content {
     .el-input__inner {
-      height: 30px;
-      line-height:30px;
+      height: 28px;
+      line-height:28px;
       border-radius:5px;
       font-size: 14px;
     }
@@ -385,9 +516,6 @@ export default {
     .el-button--mini[data-v-2db8be7a], .el-button--mini.is-round[data-v-2db8be7a] {
       padding: 5px 8px 4px;
     }
-    .el-button--mini[data-v-2db8be7a].changeOrderPub, .el-button--mini.is-round[data-v-2db8be7a].changeOrderPub {
-      padding: 5px 12px;
-    }
     .el-button:hover {
         color: @adminBase;
         border-color: @adminBase;

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

@@ -161,7 +161,7 @@
         this.$router.push({path:'LT-YXSJWH-TJDLBQ'})
       },
       modifyIndeptTag(row) {
-        api.detailsTag({id:row.id,sexType:row.sexType,age:row.age}).then((res)=>{
+        api.detailsTag({id:row.id}).then((res)=>{
           const {code,data,msg} = res.data;
           if(code=='0'){
             const item = Object.assign({},row,data);

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

@@ -168,11 +168,11 @@ export default {
             this.$router.push({path:'LT-YXSJWH-TJBQZ'})
         },
         modifyTagGroup(row) {
-            api.detailsTag({id:row.id,sexType:row.sexType,age:row.age}).then((res)=>{
+            api.detailsTag({id:row.id}).then((res)=>{
                 const {code,data,msg} = res.data;
                 if(code=='0'){
                     const item = Object.assign({},row,data);
-                    console.log('item', item)
+                    // console.log('item', item)
                     this.$router.push({name:'AddLabelGroup',params:{isEdit:true,data:item}});
                 }else{
                     this.$message({

+ 246 - 0
src/components/icss/MedicalName.vue

@@ -0,0 +1,246 @@
+<template>
+    <div>
+        <crumbs title="医学术语命名维护">
+            <el-form :inline="true" class="demo-form-inline">
+                <el-form-item label="术语:">
+                    <el-input size="mini" v-model="filter.term" placeholder="输入术语"></el-input>
+                </el-form-item>
+                <el-form-item label="术语类型:">
+                  <el-select v-model="filter.type" clearable filterable placeholder="请选择" size="mini">
+                    <el-option
+                      v-for="item in typeList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.name">
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+                <el-form-item>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                    <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-TJYXSY" style="margin:0 10px">
+                        <el-button size="mini" type="warning">添加术语</el-button>
+                    </router-link>
+                </el-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table :data="list"
+                      border
+                      style="width: 100%">
+                <el-table-column
+                        type="index"
+                        :index="indexMethod"
+                        label="编号"
+                        width="60">
+                </el-table-column>
+                <el-table-column
+                        prop="gmtCreated"
+                        label="操作时间"
+                        :show-overflow-tooltip="true">
+                </el-table-column>
+                <el-table-column
+                        prop="name"
+                        label="医学标准术语"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="synonymous"
+                        label="其他术语"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="modifier"
+                        label="操作人">
+                </el-table-column>
+                
+                <el-table-column
+                        label="操作" width="160">
+                    <template slot-scope="scope">
+                        <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="delete" @click="showDelDialog(scope.row.questionId)">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <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>
+</template>
+
+<script>
+  import api from '@api/icss.js';
+  export default {
+    name: 'MedicalName',
+    data: function () {
+      return {
+        list: [],
+        cacheData: {},
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        filter: {
+          term:'',
+          type:''
+        },
+        typeList:[]
+      }
+    },
+    created() {
+      this.getDataList();
+      this.getTypeList();
+    },
+    methods: {
+      toEditProduct(row){
+        this.$router.push({
+          name:'AddMedicalName',
+          params: {info:row}
+        })
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList() {
+        const param = this.getFilterItems();
+        // const param = {
+        //   current: this.currentPage,
+        //   size: this.pageSize
+        // }
+        api.knowledgeName(param).then((res) => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.list = data.records;
+            this.cacheData[param.current] = data.records;
+            this.total = data.total;
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      getTypeList(){
+        const param = {
+          current: this.currentPage,
+          size: this.pageSize
+        }
+        api.allKnowledgeType(param).then((res)=>{
+          const data = res.data;
+          if(data.code==0){
+            this.typeList = data.data.records;
+          }else{
+            console.log(res.msg);
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      getDetailList(id) {
+        const param = {'id': id,};
+        // this.$router.push({name:'DeptInfoDetail', params:{id: id}})
+      },
+      getFilterItems() {
+        const param = {
+          term: this.filter.term,
+          current: this.currentPage,
+          size: this.pageSize,
+          type:this.filter.type
+        };
+        return param;
+      },
+      indexMethod(index) {
+        return ((this.currentPage - 1) * this.pageSize) + index + 1;
+      },
+      currentChange(next) {
+        this.currentPage = next;
+        if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+          this.list = this.cacheData[next];
+        } else {
+          this.getDataList();
+        }
+      },
+      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(id){
+        this.showConfirmDialog('删除该标准词,可能造成相关联的医学信息、术语关系、医学静态知识等信息全部删除,是否删除?',()=>{
+          api.delSimilarName({questionId:id}).then((res)=>{
+            if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
+              this.getDataList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      },
+      uploadClick(){
+        let inp = document.getElementById("upFile");
+        inp.click();
+      },
+      uploadFile(e){
+        let fileInfo = e.target.files[0];
+        e.preventDefault();
+        let formData = new FormData();
+        formData.append('uploadfile', fileInfo);
+        console.log(123,fileInfo,formData);
+        const header = {
+          headers:{
+            'Content-Type': 'multipart/form-data'
+          }
+        }
+        /*api.knowledgeUpload(formData,header).then((res)=>{
+          if(res.data.code==0){
+            this.$message({
+              message: '上传成功',
+              type: 'success',
+            });
+          }else{
+            this.$message.error(res.data.msg);
+          }
+        })
+        this.getDataList();
+        //解决上传相同文件不触发change
+        let inp = document.getElementById("upFile");
+        inp.value = "";
+        */
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+    @import "../../less/admin.less";
+    .delete{
+        color: red;
+    }
+    .el-table .cell{
+      overflow: hidden;
+      white-space: nowrap;
+    }
+    #upFile{
+      display: none !important;
+    }
+</style>

+ 240 - 0
src/components/icss/MedicalRelation.vue

@@ -0,0 +1,240 @@
+<template>
+    <div>
+        <crumbs title="医学术语关系维护" :minWidth="titleWidth">
+            <el-form :inline="true" class="demo-form-inline">
+              <el-form-item label="术语总条数:">
+                  <span>{{total}}条</span>
+              </el-form-item>
+              <el-form-item label="术语关系:">
+                <el-select v-model="type" clearable placeholder="请选择" size="mini">
+                  <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.proName" placeholder="输入术语"></el-input>
+              </el-form-item>
+              <el-form-item label="终点术语:">
+                  <el-input size="mini" v-model="filter.proName" placeholder="输入术语"></el-input>
+              </el-form-item>
+              <el-form-item>
+                  <el-button size="mini" @click="filterDatas">确认</el-button>
+                  <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>
+                  </router-link>
+              </el-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table :data="list"
+                      border
+                      style="width: 100%">
+                <el-table-column
+                        type="index"
+                        :index="indexMethod"
+                        label="编号"
+                        width="60">
+                </el-table-column>
+                <el-table-column
+                        prop="gmtOperate"
+                        label="操作时间"
+                        :show-overflow-tooltip="true">
+                </el-table-column>
+                <el-table-column
+                        prop="questionName"
+                        label="关系明细"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="operatorName"
+                        label="操作人">
+                </el-table-column>
+                
+                <el-table-column
+                        label="操作" width="160">
+                    <template slot-scope="scope">
+                        <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row.questionId)">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <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>
+</template>
+
+<script>
+  import api from '@api/icss.js';
+  export default {
+    name: 'MedicalRelation',
+    data: function () {
+      return {
+        list: [],
+        cacheData: {},
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        filter: {
+          proName: ''
+        },
+        type:'',
+        typeList:[
+          {
+            name:'类型1',
+            id:1,
+            key:1
+          },
+          {
+            name:'类型2',
+            id:2,
+            key:2
+          },
+          {
+            name:'类型3',
+            id:3,
+            key:3
+          },
+        ],
+        titleWidth:'1060px' //头部最小宽度
+      }
+    },
+    created() {
+      this.getDataList();
+    },
+    methods: {
+      toEditProduct(row){
+        // this.$router.push({
+        //   name:'AddSimilarName',
+        //   params: {id:row.questionId,name:row.questionName}
+        // })
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList() {
+        const param = this.getFilterItems();
+        /*api.similarName(param).then((res) => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.list = data.records;
+            this.cacheData[param.current] = data.records;
+            this.total = data.total;
+          }
+        }).catch((error) => {
+          console.log(error);
+        });*/
+      },
+      getDetailList(id) {
+        const param = {'id': id,};
+        // this.$router.push({name:'DeptInfoDetail', params:{id: id}})
+      },
+      getFilterItems() {
+        const param = {
+          questionName: this.filter.proName,
+          current: this.currentPage,
+          size: this.pageSize
+        };
+        return param;
+      },
+      indexMethod(index) {
+        return ((this.currentPage - 1) * this.pageSize) + index + 1;
+      },
+      currentChange(next) {
+        this.currentPage = next;
+        if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+          this.list = this.cacheData[next];
+        } else {
+          this.getDataList();
+        }
+      },
+      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(id){
+        this.showConfirmDialog('是否删除该关系?可能对现有系统造成影响',()=>{
+          api.delSimilarName({questionId:id}).then((res)=>{
+            if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
+              this.getDataList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      },
+      uploadClick(){
+        let inp = document.getElementById("upFile");
+        inp.click();
+      },
+      uploadFile(e){
+        let fileInfo = e.target.files[0];
+        e.preventDefault();
+        let formData = new FormData();
+        formData.append('uploadfile', fileInfo);
+        console.log(123,fileInfo,formData);
+        const header = {
+          headers:{
+            'Content-Type': 'multipart/form-data'
+          }
+        }
+        /*api.uploadFile(formData,header).then((res)=>{
+          if(res.data.code==0){
+            this.$message({
+              message: '上传成功',
+              type: 'success',
+            });
+          }else{
+            this.$message.error(res.data.msg);
+          }
+        })
+        this.getDataList();*/
+        /*//解决上传相同文件不触发change
+        let inp = document.getElementById("upFile");
+        inp.value = "";
+        */
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+    @import "../../less/admin.less";
+    .delete{
+        color: red;
+    }
+    .el-table .cell{
+      overflow: hidden;
+      white-space: nowrap;
+    }
+    #upFile{
+      display: none !important;
+    }
+</style>

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

@@ -160,7 +160,6 @@ export default {
       // console.log(type)
     },
     changeActionData(arr) {          //标签明细右侧数据id
-    console.log(44254165456)
       this.sendIds = arr
     },
     submitForm() {       // 调用子组件的方法验证公用部分
@@ -176,6 +175,13 @@ export default {
         });
         return;
       }
+      if(this.dataPub.region8 > this.dataPub.region9) {
+          this.$message({
+            message: '最小年龄不能大于最大年龄',
+            type: 'warning'
+          });
+          return;
+      }
       let detailLis = utils.dataRecombination(this.sendIds, this.dataPub.region2)
       let param = {
         "questionWrapper": {
@@ -194,6 +200,7 @@ export default {
           "textGenerate": this.form.currentOrder,      //成文顺序 默认0
           "copyType": this.dataPub.region10,           //是否复制
           "showAdd": this.dataPub.region11,            //是否显示加号血压
+          "itemType" :this.dataPub.region12,
           "showInfo": 0,
           "questionDetails": [],
           "questionMappings": detailLis       //映射关系,

+ 7 - 21
src/components/icss/PhysicalExamTemplate.vue

@@ -97,12 +97,15 @@
     },
     methods: {
       toEditProduct(row){
-        api.getPhysicalExamTempByDepId({deptId:row.id}).then((res)=>{
+        this.getPhysicalExamTempByDepId('isEdit', row)
+      },
+      getPhysicalExamTempByDepId(type, row) {
+        const param = {'deptId': row.id,};
+        api.getPhysicalExamTempByDepId(param).then((res)=>{
             const {code,data,msg} = res.data;
             if(code=='0'){
                 const item = Object.assign({},row,data);
-                console.log('item', item)
-                this.$router.push({name:'AddPhysicalExamTemp',params:{isEdit:true,data:item}});
+                this.$router.push({name:'AddPhysicalExamTemp',params:{[type]:true,data:item}});
             }else{
                 this.$message({
                 message: msg,
@@ -111,10 +114,6 @@
             }
         });
 
-        // this.$router.push({
-        //   name:'AddPhysicalExamTemp',
-        //   params: {info:row}
-        // })
       },
       filterDatas(){
         this.currentPage = 1;
@@ -127,7 +126,6 @@
         // };
         api.getPhysicalExamTempList(param).then((res) => {
           if (res.data.code == '0') {
-            console.log('PhysicalExamTempList', res)
             const data = res.data.data;
             this.list = data.records;
             this.total = data.total;
@@ -137,19 +135,7 @@
         });
       },
       getDetailList(row) {
-        const param = {'deptId': row.id,};
-        api.getPhysicalExamTempByDepId(param).then((res)=>{
-            const {code,data,msg} = res.data;
-            if(code=='0'){
-                const item = Object.assign({},row,data);
-                this.$router.push({name:'AddPhysicalExamTemp',params:{isDetail:true,data:item}});
-            }else{
-                this.$message({
-                message: msg,
-                type: 'warning'
-                });
-            }
-        });
+         this.getPhysicalExamTempByDepId('isDetail', row)
       },
       getFilterItems() {
         const param = {

+ 14 - 4
src/components/icss/PubIndeptTag.vue

@@ -97,7 +97,7 @@
                     label="标签前后缀:"
                     class="fix-inp"
                     prop="region12"
-                    v-if="form.region2==6 || form.region2==7"
+                    v-if="form.region2==5 ||form.region2==6 || form.region2==7 "
             >
                 <el-col :span="10">
                 <el-input v-model="form.prefix"
@@ -219,7 +219,7 @@
 
 // 查体(val:4):输入框(val:6)、数字键盘(val:7)、单选(val:1)、多选(val:2)、
 
-// 化验(val:5):化验输入框(val:6)、化验单选(val:1)
+// 化验(val:5):化验数字键盘(val:7)、化验单选(val:1)
 
   export default {
     props:['editData'],
@@ -234,7 +234,7 @@
           region3: '',      //系统名称
           region4: '',      //界面名称
           region5: '',      //选项之间的链接
-          region6: '1',      //是否可以检索
+          region6: '0',      //是否可以检索
           region7: '3',       //性别
           region8: '0',          //最小年龄
           region9: '200',         //最大年龄
@@ -250,7 +250,7 @@
           '1':['1','2','5','6','7','99'],
           '3':['1','2','5','6','7'],
           '4':['1','2','6','7'],
-          '5':['1','6']
+          '5':['1','7']
         },
         rules: {
           region1: [
@@ -366,6 +366,10 @@
           this.form.region2 = '';
           this.labelTypes = this.labelTypesList.filter(item => this.labelTypesMaps[tmpData].indexOf(item.val) > -1)
           
+        }
+        if(type === 2) {
+          this.initForm()
+          
         }
         //console.log(tmpData)
         this.changeSex(tmpData);
@@ -387,6 +391,12 @@
           type: type || 'warning'
         })
       },
+      initForm() {
+        this.form.prefix = ''
+        this.form.suffix = ''
+        this.form.minNormalVal = ''
+        this.form.maxNormalVal = ''
+      },
     }
   }
 </script>

+ 32 - 0
src/components/icss/PubTagGroup.vue

@@ -123,6 +123,25 @@
           ></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item
+        v-if="form.region1 == 1 && form.region2 ==4"
+        label="是否为症状"
+        prop="region12"
+      >
+        <el-select
+          v-model="form.region12"
+          @change="sendData"
+        >
+          <el-option
+            label="是"
+            value="0"
+          ></el-option>
+          <el-option
+            label="不是"
+            value="1"
+          ></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item
         label="年龄:"
         prop="region8"
@@ -212,6 +231,7 @@ export default {
         region9: '200',         //最大年龄
         region10: '0',        //是否复制主标签
         region11: '0',       //是否复制当前模块
+        region12:'1',        //是否为症状
         tagPool:[],          //标签池数据
         order:[],            //排序方式
         tipLis:[],           //提示列表
@@ -258,6 +278,9 @@ export default {
         region11: [
           { required: true, message: '是否复制当前模块', trigger: 'change' }
         ],
+        region12: [
+          { required: true, message: '是否为症状', trigger: 'change' }
+        ],
       },
       tmpSex: '通用',
       tmpOwn: '',
@@ -371,6 +394,9 @@ export default {
         this.form.region2 = '';
         this.labelTypes = this.labelTypesList.filter(item => this.labelTypesMaps[tmpData].indexOf(item.val) > -1)
       }
+      if(type === 2) {
+        this.initForm()
+      }
       this.changeSex(tmpData);
       // if(type == 3){
       //   this.form.region7 = this.tmpSex;
@@ -427,6 +453,12 @@ export default {
         type: type || 'warning'
       })
     },
+    initForm() {
+      this.form.region12 = '0'
+      this.form.region10 = '0'
+      this.form.region11 = '0'
+
+    }
   }
 }
 </script>

+ 103 - 38
src/components/icss/PubTagPartDetail.vue

@@ -46,7 +46,7 @@
           @click="selectPart(0)"
           v-else
         >
-          <span class="hzx ellipsis" v-for="item in poolDetailList[0]" :title="'[ '+item.name+' ]'" v-show="choose == 'multiple'" :key="item.id">{{item.name}}</span>
+          <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>
         </div>
         <div class="onlyBottom pubList">
           <ul class="clearfix">
@@ -65,11 +65,16 @@
                 </template>
               </ul>
               <ul v-else>
-                <template>
-                  <li class="partDetail ellipsis" v-for="item in poolDetailList[n]" :style="getStyleR(item.id)?styleR:null" :title="'[ '+item.name+' ]'" :key="item.id" @click="selectTagOne($event,item.id,n)">
+                <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.name">
                     [ {{item.name}} ]
                   </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>
+                </template>
               </ul>
             </li>
           </ul>
@@ -78,13 +83,14 @@
       <div class="partWaring">
         <ul>
           <li v-for="i in 5" :key="i">
-            <template v-for="item in poolDetailListTips[i]" v-show="poolDetailListTips[i].length > 0">
-              <p class="partDetail tipsWrap" :key="item.type">
+            <template v-for="item in poolDetailListTips[i]" v-if="poolDetailListTips[i].length > 0">
+              <p class="partDetail tipsWrap" :key="item.type" v-if="currentTipLis.length>0">
                 <template v-for="section in currentTipLis">
                   <span v-if="item.type == section.val" :title="section.name" :key="section.val">{{section.name}}</span>         
                 </template>
               </p>        
-              <p class="partDetail tipsWrap" :title="item.name" :key="item.type+'--'">{{item.name}}</p> 
+              <p class="partDetail tipsWrap" :title="item.join" :key="item.join+'--'" v-if="!!item.join">标签之间链接{{item.join}}</p> 
+              <p class="partDetail tipsWrap" :title="item.name" :key="item.type+'--'" v-if="!!item.name">{{item.name}}</p> 
             </template>
           </li>
         </ul> 
@@ -128,9 +134,13 @@ export default {
         type: Array
     }
   },
+
+  destroyed:function(){
+    this.searchVal = ''
+  },
   data() {
     return {
-      poolDetailList: [[],[],[],[],[],[]],     //默认6个部分
+      poolDetailList: [[{questionDetailList:[]}],[{questionDetailList:[]}],[],[],[],[]],     //默认6个部分
       poolDetailListTips: [[],[],[],[],[],[]],     //6个部分对应的提示
       poolDetailListIds: [[],[],[],[],[],[]],     //6个部分对应的id
       poolDetailListAll:[],    //默认6个部分转化为一维数组
@@ -152,27 +162,70 @@ export default {
   mounted(){
     this.$nextTick(()=>{
       let tagList = this.options;
+      this.currentTipLis = this.tipLis
       if(tagList.length > 0){
         let tmpArr = [[],[],[],[],[],[]];
         this.tmpNum = 1
-        if(tagList[0].formPosition == 1){
-          tagList.map((val,idx)=>{
-            if(this.sign == 2) {     //杂音修改
-                tmpArr[idx].push(val)
-            }else{       //既往史修改
-              tmpArr[idx] = val.questionMapping
-            }
-          })
-        }else{
-          tagList.map((val,idx)=>{
-            if(this.sign == 2) {     //杂音修改
-                tmpArr[idx+1].push(val)
-            }else{       //既往史修改
-              tmpArr[idx+1] = val.questionMapping
+        if(this.sign == 2){//杂音修改
+          if(tagList[0].formPosition == 1){
+            tagList.map((val,idx)=>{
+              tmpArr[idx].push(val)
+            })
+          }else{
+            tagList.map((val,idx)=>{
+              tmpArr[idx+1].push(val)
+            })
+          }
+        }else{       //既往史修改
+            let sticArr = [{questionDetailList:[]}];
+            if(tagList.length > 1){     //至少两条数据
+              if(tagList[0].formPosition == 1 && tagList[1].tagType != 1){  //第一条为互斥项,第二条不是伴无  13...
+                tagList.map((val,idx)=>{
+                  if(idx == 0){
+                    tmpArr[idx].push(val)
+                  }else {
+                    tmpArr[1].push(sticArr)
+                    tmpArr[idx+1] = val.questionMapping
+                  }
+                })
+              }else if(tagList[0].formPosition == 1 && tagList[1].tagType == 1){   //第一条为互斥项,第二条是伴无  12...
+                tagList.map((val,idx)=>{
+                    if(idx < 2){
+                      tmpArr[idx].push(val)
+                    }else{
+                      tmpArr[idx] = val.questionMapping
+                    }
+                })
+              }else if(tagList[0].formPosition != 1 && tagList[0].tagType == 1){   //第一条是伴无  2...
+                tagList.map((val,idx)=>{
+                    if(idx == 0){
+                      tmpArr[0].push(sticArr)
+                      tmpArr[1].push(val)
+                    }else if(idx > 0){
+                      tmpArr[idx+1] = val.questionMapping
+                    }
+                })
+              }else{  //第一条不是互斥项,第二条不是伴无  3...
+                tagList.map((val,idx)=>{
+                  if(idx > 1){
+                    tmpArr[idx] = val.questionMapping
+                  }
+                })
+              }
+            }else{       //有且只有一条
+              if(tagList[0].formPosition == 1){  //第一条为互斥项
+                tmpArr[0].push(tagList[0])
+                tmpArr[1].push(sticArr)
+              }else if(tagList[0].formPosition != 1 && tagList[0].tagType == 1){   //第一条是伴无 
+                tmpArr[0].push(sticArr)
+                tmpArr[1].push(tagList[0])
+              }else{     //既不是互斥也不是伴无
+                tmpArr[0].push(sticArr)
+                tmpArr[1].push(sticArr)
+                tmpArr[2] = tagList[0].questionMapping
+              }
             }
-          })
-        }
-        
+          }
         this.poolDetailList = tmpArr
         this.poolDetailListAll = Array.prototype.concat.apply([],this.poolDetailList);     //二维转一维
         this.searchTagList()
@@ -184,11 +237,6 @@ export default {
     pool(newVal, preVal) {
       this.currentPool = newVal
     },
-    tipLis(newVal, preVal) {
-      if (JSON.stringify(newVal) != JSON.stringify(preVal)) {
-        this.currentTipLis = newVal
-      }
-    },
     sexType(newVal, preVal) {
       if (newVal != preVal) {
         if (JSON.stringify(newVal) != JSON.stringify(preVal) && this.tmpNum != 1) {
@@ -196,6 +244,11 @@ export default {
         }
       }
     },
+    tipLis(newVal, preVal) {
+      if (newVal != preVal) {
+        this.currentTipLis = newVal
+      }
+    },
     sign(newVal, preVal) {
       if (JSON.stringify(newVal) != JSON.stringify(preVal) && this.tmpNum != 1) {
         this.clearData()
@@ -274,7 +327,11 @@ export default {
       }else if((this.choose == 'multiple') && (utils.filterArr(this.selectArr,true,2) && this.poolDetailList[this.activePart].length > 0) || (this.multipleItem.length > 0)){
         if(this.activePart != -1){
           let tmparr = this.poolDetailList;
-          tmparr[this.activePart] = []
+          if(this.activePart == 0 || this.activePart == 1){
+            tmparr[this.activePart] = [{questionDetailList:[]}]
+          }else{
+            tmparr[this.activePart] = []
+          }
           this.poolDetailList = tmparr;
           this.poolDetailListAll = Array.prototype.concat.apply([],this.poolDetailList);     //二维转一维
           this.searchTagList();
@@ -306,9 +363,14 @@ export default {
             if(!utils.filterArr(poolDetailListTips[i],tmpLi.controlType,2)){
               objTmp.type = tmpLi.controlType
               objTmp.name = tmpLi.name
-              poolDetailListTips[i].push(objTmp)
+              objTmp.join = tmpLi.joint
+              if(tmpLi.controlType){
+                poolDetailListTips[i].push(objTmp)
+              }
+            }
+            if(tmpLi.id){
+              poolDetailListIds[i].push(tmpLi.id)
             }
-            poolDetailListIds[i].push(tmpLi.id)
           }
         }
       }
@@ -330,7 +392,7 @@ export default {
       let ids = [];
       this.currentLis = []
       this.poolDetailListAll.map((value)=>{
-        ids.push(value.id)
+        if(value.id){ids.push(value.id)}
       })
       this.notIds = ids;
       
@@ -417,9 +479,7 @@ export default {
     getRightListDes(){
       let idStr = this.currentLis.join(',');
       let param = {
-        // "age": 0,
         "ids": idStr,
-        // "sexType": 3
       }
       api.detailsTagList(param).then((res) => {        //右侧展开内容
         if (res.data.code === '0') {
@@ -446,7 +506,7 @@ export default {
                 if(num == 6){
                   for(let i = 1;i < this.poolDetailList.length;i++){
                     let ids = [];
-                    if(this.poolDetailList[i].length == 0){      //判断part里面是不是有数据,没有直接添加
+                    if(this.poolDetailList[i].length == 0 || (this.poolDetailList[i].length > 0 && !this.poolDetailList[i].id)){      //判断part里面是不是有数据,没有直接添加
                       this.poolDetailList[i] = tmpArr;
                       this.poolDetailListAll = Array.prototype.concat.apply([],this.poolDetailList);
                       this.searchTagList();
@@ -464,16 +524,21 @@ export default {
             this.currentLis.map((id)=>{
               tmpArr.push(res.data.data[id]);
             })
+            // console.log(tmpArr,'多选既往史')
             this.selectArr.map((flg,idx)=>{         //判断右侧有没有选中
               if(flg){    //有选中
-                this.poolDetailList[idx] = (this.poolDetailList[idx]).concat(tmpArr);
+                if(idx == 0 || idx == 1){
+                  this.poolDetailList[idx] = tmpArr;
+                }else{
+                  this.poolDetailList[idx] = (this.poolDetailList[idx]).concat(tmpArr);
+                }
                 this.poolDetailListAll = Array.prototype.concat.apply([],this.poolDetailList);     //二维转一维
                 this.searchTagList();
                 this.getPoolDetailListTips();
               }else{
                 ++num;
                 if(num == 6){
-                  for(let i = 1;i < this.poolDetailList.length;i++){
+                  for(let i = 2;i < this.poolDetailList.length;i++){
                     let ids = [];
                     if(this.poolDetailList[i].length == 0){      //判断part里面是不是有数据,没有直接添加
                       this.poolDetailList[i] = tmpArr;

+ 19 - 56
src/components/icss/PubTemplateGroup.vue

@@ -12,17 +12,17 @@
         prop="region1"
       >
         <span class="changeTips">改变归属后,模板明细将会恢复到默认状态</span>
-          <!-- :disabled="!!editData.id" -->
         <el-select
+          :disabled="!!editData.id"
           v-model="form.region1"
           placeholder="请选择模板归属"
-          @change="readyChangeSelect"
+          @change="sendData"
         >
           <el-option
             v-for="item in Adscriptions"
             :label="item.name"
-            :value="item.val"
-            :key="item.id"
+            :value="item.key+''"
+            :key="item.key"
           ></el-option>
         </el-select>
       </el-form-item>
@@ -32,10 +32,9 @@
       >
         <el-input
           v-model="form.region2"
-          :disabled="!form.region1"
+          :disabled="!!editData.id"
           maxLength="120"
           placeholder="请输入模板名称"
-          @change="sendData"
         ></el-input>
       </el-form-item>
     </el-form>
@@ -43,6 +42,7 @@
 </template>
 <script>
 import api from '@api/icss.js';
+import utils from '@api/utils.js';
 
 /**
  * 归属type
@@ -53,26 +53,12 @@ import api from '@api/icss.js';
 export default {
   props:['editData'],
   data() {
-    var validatePass2 = (rule, value, callback) => {
-        const editData = this.$props.editData;
-        if(editData.id && value == editData.tagName){ //修改系统名称没变就不再校验
-          callback();    
-        }else{
-          this.validateSystomName(value,callback)
-        }
-    };
     return {
-      Adscriptions:[
-        {name:'主诉模板',val:'1',id:'1001'},
-        {name:'现病史模板',val:'2',id:'1002'},
-        {name:'现病史空模板',val:'3',id:'1003'},
-        {name:'其他史模板',val:'4',id:'1004'},
-        {name:'嵌套模板',val:'5',id:'1005'},
-        {name:'慢病模板',val:'6',id:'1006'},
-      ],
+      Adscriptions:[],
       form: {
-        region1: '1',    //归属
+        region1: '',    //归属
         region2: '',     //模板名称
+        tagPool:[],      //标签池
       },
       rules: {
         region1: [
@@ -80,52 +66,29 @@ export default {
         ],
         region2: [
           { required: true, message: '请输入模板名称', trigger: 'change' },
-          { validator: validatePass2, trigger: 'blur' },
+          // { validator: validatePass2, trigger: 'blur' },
         ],
       },
     }
   },
-  computed: {
-    newType() {
-      return this.form.region1;
-    },
+  beforeMount:function(){
+    let templateOwn = localStorage.getItem('icssEnumsData') ? JSON.parse(localStorage.getItem('icssEnumsData')).moduleTypeEnum : []
+    this.Adscriptions = templateOwn;
   },
   mounted() {
     const editData = this.$props.editData;
     if(editData.id){      //修改
-      const trans = utils.transformKeys(editData,2);
-      this.form = Object.assign({},this.form,trans);
+      // const trans = utils.transformKeys(editData,2);
+      this.form = Object.assign({},this.form,editData);
+      this.form.region1 = (editData.type+'')
+      this.form.region2 = editData.name
     }
     this.$emit('changeVal', this.form, false)
-  },
-  watch: {
-    newType(nextVal, prevVal) {
-      
-    },
+    // this.searchTagList()
   },
   methods:{
     sendData(val){
-      console.log(val)
-    },
-    readyChangeSelect(val){
-      console.log(val)
-    },
-    validateSystomName(name,callback) {         //判断模板名称是否存在
-      if(this.form.region2.trim() == ''){ return }
-      let param = {
-        "existName": this.form.region2,     
-        "type": this.form.region1,
-        "notTagType":[8],        //去掉文字标签查重
-      }
-      api.validateSystomName(param).then((res) => {
-        if (res.data.code === '0') {
-          if(res.data.data && res.data.data.length != 0){
-            callback(new Error('该系统名称已存在'));
-          }else{
-            callback();
-          }
-        }
-      })
+      this.$emit('changeVal', this.form, false)
     },
     submitForm(formName) {
       this.$refs[formName].validate((valid) => {

+ 2 - 5
src/components/icss/SimilarName.vue

@@ -3,7 +3,7 @@
         <crumbs title="别名维护系统">
             <el-form :inline="true" class="demo-form-inline">
                 <el-form-item label="标签名称:">
-                    <el-input size="mini" v-model="filter.proName" placeholder="标签名称"></el-input>
+                    <el-input size="mini" v-model="filter.proName" placeholder="标签名称" clearable></el-input>
                 </el-form-item>
                 <el-form-item>
                     <el-button size="mini" @click="filterDatas">确认</el-button>
@@ -93,8 +93,6 @@
 
 <script>
   import api from '@api/icss.js';
-  import utils from '@api/utils.js';
-  import axios from 'axios';
   export default {
     name: 'SimilarName',
     data: function () {
@@ -231,10 +229,9 @@
           }
         })
         this.getDataList();
-        /*//解决上传相同文件不触发change
+        //解决上传相同文件不触发change
         let inp = document.getElementById("upFile");
         inp.value = "";
-        */
       }
     }
   }

+ 26 - 2
src/components/icss/SingleSelect.vue

@@ -21,6 +21,8 @@
                     <el-input v-model="rows[i].name"
                               v-bind:class="{select:focusOn==i}"
                               @focus="selectRow(i)"
+                              ref = "inputName"
+                              @input="HandleInputName(i, rows[i].name)"
                               @blur="emitValues"></el-input>
                     <el-tag type="info" size="mini" v-if="showTag(it)">{{showTag(it)}}</el-tag>
                 </el-col>
@@ -81,6 +83,7 @@
 </style>
 <script>
   import utils from '@api/utils.js';
+  import Vue from 'vue';
     export default {
       props:['type','options','ascription','sexType'],
       data(){
@@ -96,6 +99,12 @@
           const arr = options.map((it)=>{
             return {name:it.name,defaultSelect:it.defaultSelect=='1'?true:false,isBan:it.code==1?true:'',isNone:it.code==2?true:'',isError:it.abnormal==1?true:''};
           });
+          const arrLen = arr.length;
+          if(arrLen < 4) {
+            for (let i = 0; i < 4 - arrLen; i++) {
+              arr.push({name:'',defaultSelect:'',isBan:'',isNone:'',isError:''})
+            }
+          }
           this.rows = arr;
           const items = utils.simpleOptionData(this.rows);
           this.$emit('pushValues',items);
@@ -170,18 +179,33 @@
           if(typeof i =='number'&&this.focusOn == -1){
             this.$message({
               message: '请先选择要操作的行',
-              type: 'warning'
+              type: 'warning',
+              showClose: true,
             });
             return;
           }
           const items = utils.simpleOptionData(this.rows);
           this.$emit('pushValues',items);
         },
+        HandleInputName(i, name) {
+          if(name.length > 30) {
+            Vue.set(this.rows[i], 'name', this.rows[i].name.slice(0, 30))
+            this.$refs.inputName[i].currentValue = this.rows[i].namebvcx
+            this.$message({
+              message: '最多输入30个字',
+              type: 'warning',
+              showClose: true,
+            });
+            return
+          }
+          
+        },
         delRow(){
           if(this.focusOn==-1){
             this.$message({
               message: '请先选择要删除的行',
-              type: 'warning'
+              type: 'warning',
+              showClose: true,
             });
             return;
           }

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

@@ -54,7 +54,7 @@
             </li>
         </ul>
     </div>
-    <div class="buttonBox">
+    <div class="buttonBox" v-if="type == 1"> 
         <div class="mainButton">
             <el-button type="primary" @click="mainSymptom">跟主症状</el-button>
         </div>

+ 22 - 32
src/components/icss/TemplateMaintenance.vue

@@ -3,8 +3,8 @@
         <crumbs title="模板维护" style="min-width: 980px">
             <el-form :inline="true" class="demo-form-inline">
                 <el-form-item label="模板归属:">
-                    <el-select size="mini" v-model="filter.tagAdscription" @change="getValue"  placeholder="模板归属" clearable>
-                        <el-option v-for="item in Adscriptions" :label="item.name" :value="item.val" :key="item.id" ></el-option>
+                    <el-select size="mini" v-model="filter.tagAdscription" placeholder="模板归属" clearable>
+                        <el-option v-for="item in Adscriptions" :label="item.name" :value="item.key" :key="item.key" ></el-option>
                     </el-select>
                 </el-form-item>
                 <el-form-item>
@@ -43,7 +43,7 @@
                 </el-table-column>
                 <el-table-column
                         :resizable = "false"
-                        prop="modifier"
+                        prop="userName"
                         label="操作人">
                 </el-table-column>
                 <el-table-column
@@ -100,20 +100,16 @@
 
     },
     methods: {
-      getValue(val) {
-        console.log('changeVal', val, this.filter.tagAdscription)
-      },
       getDropList() {
+        let templateOwn = localStorage.getItem('icssEnumsData') ? JSON.parse(localStorage.getItem('icssEnumsData')).moduleTypeEnum : []
+        this.Adscriptions = templateOwn;
         return api.getDropList().then((res) =>{
-          console.log('dropList-标签归属列表', res)
           if(res.data.code === '0') {
-            this.Adscriptions = res.data.data[1];
             this.tagTypes =  res.data.data[6];
             for (var i = 0; i < this.tagTypes.length; i++) {
               this.tagTypesList.push(this.tagTypes[i].val)
             }
           }
-
         })
       },
       getDataList() {
@@ -131,11 +127,9 @@
                 list[i].typeCn = this.Adscriptions[z].name
               }
             }
-
           }
           this.list = list;
           this.total = res.data.data.total;
-          console.log('tagGroup-列表',res)
         })
       },
       filterDatas() {
@@ -146,36 +140,32 @@
         this.$router.push({path:'LT-YXSJWH-TJMBWH'})
       },
       modifyIndeptTag(row) {
-        // api.detailsTag({id:row.id,sexType:row.sexType,age:row.age}).then((res)=>{
-        //   const {code,data,msg} = res.data;
-        //   if(code=='0'){
-        //     const item = Object.assign({},row,data);
-        //     this.$router.push({name:'AddIndeptLabel',params:{isEdit:true,data:item}});
-        //   }else{
-        //     this.$message({
-        //       message: msg,
-        //       type: 'warning'
-        //     });
-        //   }
-        // });
-        console.log(row)
+        Promise.all([
+          api.getModuleInfoOne({moduleId:row.id}),
+          api.getModuleDetailInfo({moduleId:row.id})
+        ]).then((data)=>{
+          let data0 = data[0].data;
+          let data1 = data[1].data;
+          let allData = {},topMsg={},rightMsg={};
+          if(data0.code == 0){
+            topMsg = Object.assign({},data0.data);
+          }
+          if(data1.code == 0){
+            rightMsg = Object.assign({},data1);
+          }
+          allData = Object.assign({},topMsg,rightMsg)
+          this.$router.push({name:'TemplateMaintenanceWrap',params:{isEdit:true,data:allData}});
+        })
       },
       currentChange(next) {
         this.currentPage = next;
         this.getDataList();
-        // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
-        //     this.list = this.cacheData[next];
-        // } else {
-        //     this.getDataList();
-        // }
       },
       getFilterItems() {
         const param = {
-          // tagTypeList: [1],
           current: this.currentPage,
           size: this.pageSize,
           type: this.filter.tagAdscription,
-          // tagName: this.filter.tagSysName
         };
         return param;
       },
@@ -199,7 +189,7 @@
       },
       showDelDialog(id){
         this.showConfirmDialog('是否删除该标签?',()=>{
-          api.deleteTagGroup({ids:id}).then((res)=>{
+          api.delTemplate({ids:id}).then((res)=>{
             if(res.data.code=='0'){
               this.getDataList();
               this.warning(res.data.msg || '操作成功','success');

+ 36 - 47
src/components/icss/TemplateMaintenanceWrap.vue

@@ -7,16 +7,15 @@
     <PubTemplateGroup
       :editData="editData"
       @changeVal="changeVal"
-      @changeType="changeType"
       @validatePass="validatePass"
       ref="submitForm"
     ></PubTemplateGroup>
     <div class="main">
       <CommonTemplate
-        v-if="dataPub.region1 == 1" 
+        v-if="dataPub.region1"
         :pool="dataPub.tagPool"
         :type="dataPub.region1"
-        :options="editData.questionMapping"
+        :options="editData"
          @changeActionData="changeActionData"
       >
       </CommonTemplate>
@@ -45,15 +44,7 @@ export default {
       txt:'模板维护--添加模板',
       dataPub: {},                    //公用组件传的值都在这
       editData:{},                    //编辑数据
-      form: {
-        currentOrder: '0',            //标签成文顺序
-      },
-      rules: {
-        currentOrder: [
-          { required: true, message: '选择标签成文顺序', trigger: 'change' }
-        ]
-      },
-      sendIds: [[], [], [], [], [], []],           //标签明细右侧操作数据
+      sendIds: [],           //标签明细右侧操作数据
     }
   },
   beforeMount:function(){
@@ -67,14 +58,7 @@ export default {
   methods: {
     back() { this.$router.go(-1) },
     changeVal(val) {    //子组件数据改变传递到父组件
-      this.dataPub = val
-      // console.log('公用组件传的值都在这', val)
-    },
-    changeSex(sex) {       //性别改变,清空标签明细
-      // console.log(sex)
-    },
-    changeType(type) {        //填写单类型改变,标签明细左侧更新,右侧清空
-      // console.log(type)
+      this.dataPub = val    // console.log('公用组件传的值都在这', val)
     },
     changeActionData(arr) {          //标签明细右侧数据id
       this.sendIds = arr
@@ -84,47 +68,50 @@ export default {
     },
     validatePass() {      //验证成功回调,调取接口
       //仍需验证标签明细是否选择
-      let type = this.dataPub.region1;
-      if (JSON.stringify(this.sendIds) == '[[],[],[],[],[],[]]' && type != 6 && type != 7 && type != 8) {
+      let type = this.dataPub.region1,name=this.dataPub.region2;
+      let detailLis = utils.orderTemplateData(this.sendIds)
+      console.log(detailLis)
+      if (JSON.stringify(this.sendIds) == '[]' || !detailLis) {
         this.$message({
-          message: '请选择标签明细',
+          message: '请选择模板内容',
           type: 'warning'
         });
         return;
       }
-      let detailLis = utils.dataRecombination(this.sendIds, this.dataPub.region2)
       let param = {
-        "questionWrapper": {
-          "controlType": 0,                            //控件类型(0:默认值 1:下拉单选 2:下拉多选 6:文本框 7:数字键盘文本框 99:联合推送)
-          "id": this.editData.id || '',                //新增id空
-          "type": this.dataPub.region1,                //标签归属
-          // "itemType":0,                                //0:是症状,1:不是症状
-          "tagType": this.dataPub.region2,             //标签类型
-          "tagName": this.dataPub.region3,             //系统名称
-          "name": this.dataPub.region4,                //界面名称
-          "joint": this.dataPub.region5,               //标签间的连接符
-          "subType": this.dataPub.region6,   	         //0:可以,1:不可以(当项目检索)
-          "sexType": this.dataPub.region7,             //1:男,2:女,3:通用
-          "ageBegin": this.dataPub.region8,       		 //最小年龄
-          "ageEnd": this.dataPub.region9,              //最大年龄
-          "textGenerate": this.form.currentOrder,      //成文顺序 默认0
-          "copyType": this.dataPub.region10,           //是否复制
-          "showAdd": this.dataPub.region11,            //是否显示加号血压
-          "showInfo": 0,
-          "questionDetails": [],
-          "questionMappings": detailLis       //映射关系,
-        }
+        "modelDetils": detailLis,
+        "name": name,
+        "type": type,
+        "textType": type,
+        "id":this.editData.id || ''
       }
+      // console.log(param,'保存模板的参数')
       this.showDelDialog(param)
     },
     showDelDialog(param) {
-      this.showConfirmDialog('是否保存该标签组?', () => {
-        api.saveOrUpdate(param).then((res) => {
+      this.showConfirmDialog('是否保存该模板?', () => {
+        if(this.editData.id){
+          api.updateModuleInfo(param).then((res) => {
+            if (res.data.code === '0') {
+              this.warning(res.data.msg || '修改成功', 'success','1000')
+              setTimeout(() => {
+                this.$router.push({
+                  path:'/admin/LT-YXSJWH-MBWH'
+                })
+              }, 1000);
+            } else {
+              this.warning(res.data.msg)
+            }
+          }).catch((err) => {
+            this.warning(err);
+          })
+        }else{
+          api.saveModuleInfo(param).then((res) => {
           if (res.data.code === '0') {
             this.warning(res.data.msg || '保存成功', 'success','1000')
             setTimeout(() => {
               this.$router.push({
-                path:'/admin/LT-YXSJWH-BQZWH'
+                path:'/admin/LT-YXSJWH-MBWH'
               })
             }, 1000);
           } else {
@@ -133,6 +120,8 @@ export default {
         }).catch((err) => {
           this.warning(err);
         })
+        }
+        
       });
     },
     showConfirmDialog(msg, resolve) {

+ 282 - 0
src/components/icss/VersionDesc.vue

@@ -0,0 +1,282 @@
+<template>
+  <div class="version-desc">
+    <el-table v-if="list.length>0" 
+              :data="list"
+              border
+              style="width: 100%">
+        <el-table-column
+                type="index"
+                :index="indexMethod"
+                label="编号"
+                width="60">
+        </el-table-column>
+        <el-table-column
+                prop="gmtCreate"
+                label="建立时间"
+                :show-overflow-tooltip="true">
+        </el-table-column>
+        <el-table-column
+                prop="modifierid"
+                label="操作人">
+        </el-table-column>
+        <el-table-column v-if="isFirst"
+                label="操作">
+            <template slot-scope="scope">
+                <el-button type="text" size="small" @click="toEditDesc(scope.row)">修改</el-button>
+                <span style="margin:0 3px;">|</span>
+                <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row.id)">删除</el-button>
+            </template>
+        </el-table-column>
+        <el-table-column
+                label="详情">
+            <template slot-scope="scope">
+                <el-button type="text" size="small" @click="getDetail(scope.row)">明细</el-button>
+            </template>
+        </el-table-column>
+    </el-table>
+    <el-button v-if="isFirst" class="disclButn" size="small" type="primary" @click="addDesc">+ 添加说明</el-button>
+    <div class="boxMark" v-if="showBox">
+        <el-form ref="form" :model="form" :rules="showDesc?{}:rules" label-width="65px" class="add-desc-form">
+          <p class="top">
+            {{minTitle}}
+            <img src="../../images/close.png" height="12" width="12" @click="cancel">
+          </p>
+          <el-form-item label="标题:" prop="title">
+            <p v-if="showDesc" class="cont">{{form.title}}</p>
+            <el-input v-else v-model="form.title" placeholder="请输入标题" maxlength="30"></el-input>
+          </el-form-item>
+          <el-form-item label="内容:" prop="description" class="discDesc">
+            <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="1024"></el-input>
+          </el-form-item>
+          <el-button class="disclButn" size="small" type="primary" @click="comfirn">确定</el-button>
+          <!-- <el-button class="disclButn can" size="small" type="primary" @click="cancel">取消</el-button> -->
+      </el-form>
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+  import api from '@api/icss.js';
+  export default {
+    name:'VersionDesc',
+    data(){
+      const titleVaild = (rule, value, callback) => {
+        if (!value) {
+          return callback(new Error('请输入标题'));
+        }
+        if (value.length > 30) {
+           this.form.name = value.substr(0, 120);
+           this.$message({
+             showClose: true,
+             type: 'warning',
+             message: '已超过最大字数限制'
+           })
+        }
+        callback();
+      };
+      return{
+        list:[],//版本说明列表
+        form:{
+          title:'',
+          description:''
+        },
+        rules: {
+          title:[
+            { required: true, validator: titleVaild, trigger: ['blur', 'change'] },
+            { required: true, message: '请输入标题', trigger: ['blur', 'change'] }
+          ],
+          description:[
+            { required: true, message: '请输入内容', trigger: ['blur', 'change'] }
+          ]
+        },
+        minTitle:'',
+        showBox:false,
+        modiId:null,
+        showDesc:false
+      }
+    },
+    created(){
+      if(this.versionId){
+        this.getList();
+      }
+    },
+    props:['detail','versionId','isFirst'],
+    methods:{
+      getList(){
+        api.getVersionDetlInfo({id:this.versionId}).then((res)=>{
+          const result = res.data;
+          if(result.code==0){
+            this.list = result.data;
+          }else{
+            this.$message.error(result.msg);
+          }
+        })
+      },
+      indexMethod(index) {
+        // return ((1 - 1) * 10) + index + 1;
+        return index + 1;
+      },
+      toEditDesc(item){//修改备注
+        console.log(124,item);
+        this.minTitle='修改说明';
+        this.showBox = true;
+        this.form.title = item.title;
+        this.form.description = item.description;
+        this.modiId = item.id;
+      },
+      addDesc(){//添加备注
+        this.minTitle='添加说明';
+        this.showBox = true;
+      },
+      comfirn(){//记得清空modiId
+        if(this.modiId){//修改
+          const param = {
+            title:this.form.title,
+            description:this.form.description,
+            detailId:this.modiId
+          }
+          api.modiVersionInfo(param).then((res)=>{
+            if(res.data.code==0){
+              this.$message({
+                message:"添加成功",
+                type:'success'
+              })
+              this.getList();
+            }else{
+              this.$message.error(res.data.msg);
+            }
+          })
+        }else if(this.showDesc){//明细
+
+        }else{//添加
+          const params = {
+            versionDetail: [
+              {
+                description: this.form.description,
+                title: this.form.title,
+              }
+            ],
+            versionInfoId: this.versionId
+          }
+          api.addVersionInfo(params).then((res)=>{
+            if(res.data.code==0){
+              this.$message({
+                message:"添加成功",
+                type:'success'
+              })
+              this.getList();
+            }else{
+              this.$message.error(res.data.msg);
+            }
+          })
+        }
+        this.reset();
+      },
+      reset(){//关闭弹窗复原数据
+        this.showBox = false;
+        this.showDesc = false;
+        this.form.title = "";
+        this.form.description = "";
+        this.modiId = null;
+        this.minTitle= "";
+      },
+      cancel(){
+        this.reset();
+      },
+      getDetail(item){//明细
+        this.minTitle='说明明细';
+        this.showDesc = true;
+        this.showBox = true;
+        this.form.title = item.title;
+        this.form.description = item.description;
+      },
+      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(id){
+        this.showConfirmDialog('是否删除该版本说明?',()=>{
+          api.delVersionInfo({id}).then((res)=>{
+            if(res.data.code=='0'){
+              this.warning(res.data.msg||'操作成功','success');
+              this.getList();
+            }else{
+              this.warning(res.data.msg);
+            }
+          }).catch((error)=>{
+            this.warning(error);
+          })
+        });
+      },
+    }
+  }
+</script>
+<style lang="less" >
+  @import "../../less/admin.less";
+  .disclButn{
+    margin: 30px 0 10px;
+  }
+  .boxMark{
+    position: fixed;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    text-align: center;
+    // background: #808080;
+    background-color:rgba(0,0,0,0.3);
+    z-index: 1001;
+  }
+  // .el-form{
+  .add-desc-form{
+    width: 680px;
+    position: absolute;
+    top: 15%;
+    left: 50%;
+    // margin-top: -143px;
+    margin-left: -340px;
+    background: #fff;
+    padding: 20px;
+    max-height: 660px;
+    overflow-y: auto;
+  }
+  .top{
+    font-size: 15px;
+    font-weight: bold;
+    color: #545455;
+    text-align: left;
+    // padding-bottom: 10px;
+    margin-bottom: 15px;
+    // border-bottom: 1px solid #C9C9C9;
+    position: relative;
+    img{
+      position: absolute;
+      right: 5px;
+    }
+  }
+  .can,.can:hover{
+    background: #9B9B9B;
+    border-color: #9B9B9B;
+  }
+  .cont{
+    text-align: left;
+  }
+  .version-desc .el-table__body-wrapper{
+    max-height: 340px;
+    overflow-y: auto;
+  }
+  .version-desc .el-table th{
+    padding: 0px;
+  }
+</style>

+ 58 - 0
src/components/icss/VersionDetail.vue

@@ -0,0 +1,58 @@
+<template>
+  <div>
+    <crumbs title="版本信息维护-明细" linkTo="/admin/LT-YXSJWH-BBXXWH"></crumbs>
+    <div class="contents">
+      <div class="content">
+        <el-form ref="form" :label-position="labelPosition" label-width="85px" class="add-admin-form">
+          <el-form-item label="版本号:">
+              <p>{{data.name}}</p>
+          </el-form-item>
+          <el-form-item label="版本时间:">
+              <p>{{data.refreshTime}}</p>
+          </el-form-item>
+          <el-form-item label="版本备注:">
+              <p>{{data.remark}}</p>
+          </el-form-item>
+          <el-form-item label="版本说明:" v-if="list.length>0">
+              <!-- <p>{{data.remark}}</p> -->
+          </el-form-item>
+        </el-form>
+        <!-- 只有第一条可修改,内部的说明也是 -->
+        <VersionDesc :detail="list" :versionId="data.id" :isFirst="isFirst"/>
+      </div>    
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+  import api from '@api/icss.js';
+  import VersionDesc from './VersionDesc.vue';
+  export default {
+    name:'VersionDetail',
+    data(){
+      return{
+        data:{},
+        list:[],
+        labelPosition:'left',
+        isFirst:null
+      }
+    },
+    created(){
+      const info = this.$route.params.info;
+      this.data = info;
+      this.list = info.detail?info.detail:[];
+      this.isFirst = this.$route.params.isFirst;
+    },
+    components:{
+      VersionDesc
+    }
+  }
+</script>
+<style lang="less" scoped>
+  @import "../../less/admin.less";
+  .content{
+    background: #fff;
+    padding: 20px 20px 30px;
+    color: #545455;
+    min-width: 980px;
+  }
+</style>

+ 148 - 0
src/components/icss/VersionInfo.vue

@@ -0,0 +1,148 @@
+<template>
+    <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-form-item>
+            </el-form>
+        </crumbs>
+        <div class="contents">
+            <el-table :data="list"
+                      border
+                      style="width: 100%">
+                <el-table-column
+                        type="index"
+                        :index="indexMethod"
+                        label="编号"
+                        width="60">
+                </el-table-column>
+                <el-table-column
+                        prop="gmtCreate"
+                        label="操作时间"
+                        :show-overflow-tooltip="true">
+                </el-table-column>
+                <el-table-column
+                        prop="name"
+                        label="版本号">
+                </el-table-column>
+                <el-table-column
+                        prop="refreshTime"
+                        label="版本时间">
+                </el-table-column>
+                <el-table-column
+                        prop="modifierid"
+                        label="操作人">
+                </el-table-column>
+                <el-table-column
+                        label="操作">
+                    <template slot-scope="scope">
+                        <el-button type="text" size="small" :class="{forbid:scope.row.id !=list[0].id}" @click="scope.row.id ==list[0].id?toEditVersion(scope.row):''">修改</el-button>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                        label="详情">
+                    <template slot-scope="scope">
+                        <el-button type="text" size="small" @click="getDetail(scope.row)">详情</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <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>
+</template>
+
+<script>
+  import api from '@api/icss.js';
+
+  export default {
+    name: 'VersionInfo',
+    data: function () {
+      return {
+        list: [],
+        cacheData: {},
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        filter: {
+          name: ''
+        }
+      }
+    },
+    created() {
+      this.getDataList();
+    },
+    methods: {
+      toEditVersion(row){
+        this.$router.push({
+          name:'AddVersion',
+          params: {info:row}
+        })
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList() {
+        const param = this.getFilterItems();
+        api.versionInfo(param).then((res) => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.list = data.records;
+            this.cacheData[param.current] = data.records;
+            this.total = data.total;
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      getDetail(item) {
+        let isFirst = item.id==this.list[0].id?true:false;
+        this.$router.push({name:'VersionDetail', params:{info:item,isFirst}});
+      },
+      getFilterItems() {
+        const param = {
+          name: this.filter.name,
+          current: this.currentPage,
+          size: this.pageSize
+        };
+        return param;
+      },
+      indexMethod(index) {
+        return ((this.currentPage - 1) * this.pageSize) + index + 1;
+      },
+      currentChange(next) {
+        this.currentPage = next;
+        if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+          this.list = this.cacheData[next];
+        } else {
+          this.getDataList();
+        }
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+    @import "../../less/admin.less";
+    .delete{
+      color: red !important;
+    }
+    .forbid{
+      color: #BFBFBF !important;
+    }
+</style>

File diff suppressed because it is too large
+ 125 - 0
src/js/Convert_Pinyin.js


+ 4 - 0
src/less/admin.less

@@ -163,4 +163,8 @@
 }
 .el-pagination{
   min-width: 980px;
+}
+.el-tooltip__popper {
+  max-width: 900px;
+  line-height: 180%;
 }

+ 14 - 1
src/routes.js

@@ -54,6 +54,13 @@ import AddPhysicalExamTemp from '@components/icss/AddPhysicalExamTemp.vue'  //
 
 import TemplateMaintenance from '@components/icss/TemplateMaintenance.vue'//模板维护列表
 import TemplateMaintenanceWrap from '@components/icss/TemplateMaintenanceWrap.vue'//模板维护添加修改
+import VersionInfo from '@components/icss/VersionInfo.vue'//版本信息
+import VersionDetail from '@components/icss/VersionDetail.vue'//版本信息-详情
+import AddVersion from '@components/icss/AddVersion.vue'//版本信息-添加/修改
+import MedicalName from '@components/icss/MedicalName.vue'//医学术语维护-命名维护
+import AddMedicalName from '@components/icss/AddMedicalName.vue'//医学术语维护-命名维护/添加修改
+import MedicalRelation from '@components/icss/MedicalRelation.vue'//医学术语维护-关系维护
+import AddMedicalRelation from '@components/icss/AddMedicalRelation.vue'//医学术语维护-关系维护-添加
 export default [
   {
     path: '/',
@@ -174,7 +181,13 @@ 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-YXSJWH-BBXXXQ',component:VersionDetail,name:'VersionDetail'},     //版本信息-详情
+      {path:'LT-YXSJWH-TJBBXX',component:AddVersion,name:'AddVersion'},     //版本信息-添加/修改
+      {path:'LT-YXSYKWH-YXSYMMWH',component:MedicalName,name:'MedicalName'},     //医学术语--命名维护
+      {path:'LT-YXSYKWH-TJYXSY',component:AddMedicalName,name:'AddMedicalName'},     //医学术语--命名维护
+      {path:'LT-YXSYKWH-YXSYGXWH',component:MedicalRelation,name:'MedicalRelation'},     //医学术语--关系维护
+      {path:'LT-YXSYKWH-TJYXSYGX',component:AddMedicalRelation,name:'AddMedicalRelation'},     //医学术语--关系维护-添加
 
     ]
   }