瀏覽代碼

Merge remote-tracking branch 'origin/dev' into test

# Conflicts:
#	src/components/icss/AddChronicAndIndexRelation.vue
#	src/components/icss/AddMedicinePrompt.vue
#	src/components/icss/CommonTemplate.vue
#	src/components/icss/PubTagGroup.vue
#	src/components/icss/VersionDesc.vue
zhouna 6 年之前
父節點
當前提交
73ba20dd23
共有 47 個文件被更改,包括 3719 次插入1020 次删除
  1. 9 0
      src/App.vue
  2. 41 21
      src/api/config.js
  3. 64 2
      src/api/icss.js
  4. 1 1
      src/components/common/HomePage.vue
  5. 7 1
      src/components/common/Menu.vue
  6. 359 0
      src/components/icss/AddAssaySon.vue
  7. 2 0
      src/components/icss/AddChemicalAndCommonMapping.vue
  8. 21 21
      src/components/icss/AddChronicAndIndexRelation.vue
  9. 504 0
      src/components/icss/AddConceptRelation.vue
  10. 4 4
      src/components/icss/AddDisclInfo.vue
  11. 61 60
      src/components/icss/AddIndeptLabel.vue
  12. 377 0
      src/components/icss/AddMedicalMultRelation.vue
  13. 217 63
      src/components/icss/AddMedicalName.vue
  14. 11 8
      src/components/icss/AddMedicalRelation.vue
  15. 52 80
      src/components/icss/AddMedicinePrompt.vue
  16. 3 3
      src/components/icss/AddPhysicalExamTemp.vue
  17. 16 4
      src/components/icss/AddVersion.vue
  18. 202 0
      src/components/icss/AssaySon.vue
  19. 406 312
      src/components/icss/BloodPressTagGroup.vue
  20. 20 5
      src/components/icss/ChronicAndIndexRelation.vue
  21. 17 20
      src/components/icss/ChronicDiseaseAdd.vue
  22. 53 25
      src/components/icss/ChronicDiseaseStructureList.vue
  23. 26 10
      src/components/icss/CommonTemplate.vue
  24. 200 0
      src/components/icss/ConceptRelation.vue
  25. 1 1
      src/components/icss/DiagnosisPubTag.vue
  26. 1 1
      src/components/icss/DiscInfoDetail.vue
  27. 10 1
      src/components/icss/IndeptLabel.vue
  28. 10 1
      src/components/icss/LabelGroup.vue
  29. 268 0
      src/components/icss/MedicalMultRelation.vue
  30. 6 6
      src/components/icss/MedicalName.vue
  31. 10 6
      src/components/icss/MedicalRelation.vue
  32. 30 17
      src/components/icss/MedicineInfoPg.vue
  33. 31 53
      src/components/icss/MedicinePrompt.vue
  34. 64 64
      src/components/icss/NoiseTemplate.vue
  35. 24 7
      src/components/icss/PhysicalExamTemplate.vue
  36. 154 35
      src/components/icss/PubIndeptTag.vue
  37. 307 152
      src/components/icss/PubTagGroup.vue
  38. 3 3
      src/components/icss/PubTemplateGroup.vue
  39. 1 1
      src/components/icss/SingleSelect.vue
  40. 84 11
      src/components/icss/SymptomTagGroup.vue
  41. 2 2
      src/components/icss/TemplateMaintenance.vue
  42. 7 7
      src/components/icss/VersionDesc.vue
  43. 9 3
      src/components/icss/VersionInfo.vue
  44. 二進制
      src/images/close-icon.png
  45. 1 0
      src/less/common.less
  46. 21 7
      src/routes.js
  47. 2 2
      vue.config.js

+ 9 - 0
src/App.vue

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

+ 41 - 21
src/api/config.js

@@ -114,12 +114,12 @@ export default {
     'addCommonSymptom': 'api/icssman/questionUsual/addQuestionUsual',  //常见科室症状维护--添加科室症状
     'getCommonSymptomById': 'api/icssman/questionUsual/getQuestionUsualByDept', //常见科室症状维护--修改、详情
     'delCommonSymptom': 'api/icssman/questionUsual/deleteQuestionUsual',  //常见科室症状维护--删除科室症状
-    'discInformation': 'api/icssman/disclaimerInformation/getDisclaimerInformations', //免责声明
-    'addDiscInformation': 'api/icssman/disclaimerInformation/addDisclaimerInformations', //免责声明-新增
-    'modifDiscInformation': 'api/icssman/disclaimerInformation/updateDisclaimerInformations', //免责声明-修改
-    'delDiscInformation': 'api/icssman/disclaimerInformation/cancelDisclaimerInformations', //免责声明-删除
-    'closeInformation': 'api/icssman/disclaimerInformation/endDisclaimerInformations', //免责声明-停用
-    'openInformation': 'api/icssman/disclaimerInformation/startDisclaimerInformations', //免责声明-启用
+    'discInformation': 'api/knowledgeman/disclaimerInformation/getDisclaimerInformations', //免责声明
+    'addDiscInformation': 'api/knowledgeman/disclaimerInformation/addDisclaimerInformations', //免责声明-新增
+    'modifDiscInformation': 'api/knowledgeman/disclaimerInformation/updateDisclaimerInformations', //免责声明-修改
+    'delDiscInformation': 'api/knowledgeman/disclaimerInformation/cancelDisclaimerInformations', //免责声明-删除
+    'closeInformation': 'api/knowledgeman/disclaimerInformation/endDisclaimerInformations', //免责声明-停用
+    'openInformation': 'api/knowledgeman/disclaimerInformation/startDisclaimerInformations', //免责声明-启用
     'getQuestionInfos': 'api/icssman/moduleInfo/getQuestionInfos', //模板维护标签池数据获取
     'saveModuleInfo': 'api/icssman/moduleInfo/saveModuleInfo', //模板维护新增
     'updateModuleInfo': 'api/icssman/moduleInfo/updateModuleInfo', //模板维护修改
@@ -128,13 +128,14 @@ export default {
     'getModuleInfoOne': 'api/icssman/moduleInfo/getModuleInfoOne', //模板维护系统修改获取单个模板信息上部分信息
     'getModuleDetailInfo': 'api/icssman/moduleInfo/getModuleDetailInfo', //模板维护系统修改获取单个模板右侧信息
     'delTemplate': 'api/icssman/moduleInfo/delete', //模板维护系统删除单个模板信息
+    'getDeptShortListSearh': 'api/icssman//deptVital/getDeptShortList_Searh', //查体模板--科室下拉
     'getPhysicalExamTempList': 'api/icssman/deptVital/getDeptVitalPage', //查体模板列表
     'getPhysicalExamTempDepartList':'api/icssman/deptVital/getDeptShortList_create' , //查体模板科室列表--新增
     'getPhysicalExamTempByDepId':'api/icssman/deptVital/getModuleByDeptId', //通过科室id获取查体模板
     'savePhysicalExamTemp':'api/icssman/deptVital/saveDeptVitals',//保存查体模板
     'delPhysicalExamTemp':'api/icssman/deptVital/delAllDeptVitalList',//删除查体模板
-    'getConceptKnowledgeList':'/api/knowledgeman/libraryDetail/getLibraryDetailList', //  术语静态知识列表
-    'getConceptKnowledge':'/api/knowledgeman/Knowledge/getConceptKnowledge',//术语静态知识查询
+    'getConceptKnowledgeList':'/api/knowledgeman/conceptDetail/page', //  术语静态知识列表
+    'getConceptKnowledge':'/api/knowledgeman/conceptDetail/getByConceptId',//术语静态知识详情
     'getConceptInfo':'/api/knowledgeman/concept/getConceptInfo', //  搜索术语
     'versionInfo': 'api/icssman/versionInfo/getVersionInfoAlls', //版本信息
     'addVersInfo': 'api/icssman/versionInfo/saveVersionInfoAlls', //版本信息-添加
@@ -143,10 +144,11 @@ export default {
     'addVersionInfo': 'api/icssman/versionDetail/addVersionDetails', //版本信息-添加版本说明
     'modiVersionInfo': 'api/icssman/versionDetail/updateVersionDetails', //版本信息-修改版本说明
     'getVersionDetlInfo': 'api/icssman/versionDetail/getDetailById', //版本信息-版本说明列表获取
-    'promptServer':'/api/icssman/file/uploadImage',    //静态知识
+    'promptServer':'/api/knowledgeman/file/uploadImage',    //静态知识富文本图片上传
     /**************医学术语维护****************/
-	'saveConceptInfo':'/api/knowledgeman/libraryDetail/addLibraryDetail',   //保存术语静态知识
-    'delConceptInfo':'/api/knowledgeman/libraryDetail/removeLibraryDetail',   //删除术语静态知识
+    'getKnowledgeEnums':'api/knowledgeman/getKlmEnumsData', //术语库枚举
+	  'saveConceptInfo':'/api/knowledgeman/conceptDetail/insertOrUpdate',   //保存术语静态知识
+    'delConceptInfo':'/api/knowledgeman/conceptDetail/delete',   //删除术语静态知识
     'knowledgeName': 'api/knowledgeman/concept/getAllInformation', //医学术语-命名维护
     'knowledgeUpload': 'api/knowledgeman/concept/conceptInfoExcelIm', //医学术语-命名维护-导入
     'allKnowledgeType': 'api/knowledgeman/lexicon/getAllLexicon', //医学术语-类型列表
@@ -156,9 +158,10 @@ export default {
     'knowledgeRelation': 'api/knowledgeman/relation/getRelationInfoList', //医学术语-关系维护
     'delKnowledgeRelation': 'api/knowledgeman/relation/removeRelationInfo', //医学术语-关系维护-删除
     'getAllRelationType': 'api/knowledgeman/lexiconRelationship/getAllLexiconRelationship', //医学术语-关系维护-关系下拉
+    'searchRelationConcept': 'api/knowledgeman/concept/getAllConcept', //医学术语-关系维护-搜索
     'addRelationConcept': 'api/knowledgeman/relation/addRelationInfo', //医学术语-关系维护-添加
     'RelationUpload': 'api/knowledgeman/relation/relationInfoExcelIm', //医学术语-关系维护-导入
-    'scaleContentStructure': 'api/icssman/scaleContent/list',  //量表结构维护 -- 列表
+    'scaleContentStructure': 'api/knowledgeman/scaleContent/page',  //量表结构维护 -- 列表
     'getAllDeptAndDisInfo': 'api/icssman/moduleInfo/getAllDeptAndDisInfo',  //模板维护-获取科室和疾病所有信息
     'queryEvaluationModulePages': 'api/icssman/evaluationModuleMapping/queryEvaluationModulePages',  //慢病管理评估维护 -- 列表
     'getMedicalInfoList': '/api/knowledgeman/medical/getMedicalInfoList', //医学术语--属性维护--属性列表
@@ -167,7 +170,7 @@ export default {
     'addMedicalInfo': '/api/knowledgeman/medical/addMedicalInfo', //医学术语--属性维护--术语医学属性添加或者编辑
     'removeMedicalInfo': '/api/knowledgeman/medical/removeMedicalInfo', //医学术语--属性维护--术语医学属性删除
     'getAllLexiconRelationship':'/api/knowledgeman/lexicon/getAllLexicon', //医学术语--获取所有关系类型
-    'getAllConcept':'/api/knowledgeman/concept/getAllConcept',   //医学术语--获取所有概念(标准术语)
+    'getAllConcept':'/api/knowledgeman/conceptDetail/index',   //医学术语--获取所有概念(标准术语)
     'getAllBodypart': '/api/knowledgeman/bodypart/getAllBodypart',  //医学术语--获取所有部位
     'getAllDepts': '/api/knowledgeman/medical/getAllDepts',  //医学术语--获取所有科室
     'getLisMappingPage': '/api/icssman/lisMapping/getLisMappingPage', //医学数据-化验大小项与公表项维护-列表
@@ -179,19 +182,36 @@ export default {
     'getTypeList': 'api/knowledgeman/lexicon/getLexiconList', //术语类型-列表
     'addType': 'api/knowledgeman/lexicon/addLexicon', //术语类型-添加
     'getAllLisConcept':'api/knowledgeman/concept/getAllLisConcept',  //医学数据-化验大小项与公表项维护-获取所有化验公表项
-    'queryIndexConfigPages':'api/icssman/indexConfig/queryIndexConfigPages',  //医学数据-慢病指标值关联维护-列表
-    'getIndexConfigLists':'api/icssman/indexConfig/getIndexConfigLists',  //医学数据-慢病指标值关联维护-获取慢病指标值关联
-    'cancelIndexConfigAlls':'api/icssman/indexConfig/cancelIndexConfigAlls',  //医学数据-慢病指标值关联维护-删除慢病指标值关联
-    'saveIndexConfigLists':'api/icssman/indexConfig/saveIndexConfigLists',  //医学数据-慢病指标值关联维护-添加关联
-    'updateIndexConfigList':'api/icssman/indexConfig/updateIndexConfigList',  //医学数据-慢病指标值关联维护-修改关联
-    'queryIndexConfigDiseaseNames':'api/icssman/indexConfig/queryIndexConfigDiseaseNames',  //医学数据-慢病指标值关联维护-慢病指标疾病标签查询
+    'queryIndexConfigPages':'api/knowledgeman/indexConfig/queryIndexConfigPages',  //医学数据-慢病指标值关联维护-列表
+    'getIndexConfigLists':'api/knowledgeman/indexConfig/getIndexConfigLists',  //医学数据-慢病指标值关联维护-获取慢病指标值关联
+    'cancelIndexConfigAlls':'api/knowledgeman/indexConfig/cancelIndexConfigAlls',  //医学数据-慢病指标值关联维护-删除慢病指标值关联
+    'saveIndexConfigLists':'api/knowledgeman/indexConfig/saveIndexConfigLists',  //医学数据-慢病指标值关联维护-添加关联
+    'updateIndexConfigList':'api/knowledgeman/indexConfig/updateIndexConfigList',  //医学数据-慢病指标值关联维护-修改关联
+    'queryIndexConfigDiseaseNames':'api/knowledgeman/indexConfig/queryIndexConfigDiseaseNames',  //医学数据-慢病指标值关联维护-慢病指标疾病标签查询
     'getDisScaleAllInfo':'api/icssman/disScale/getDisScaleAllInfo',  //医学数据-诊断量表关联维护-列表
     'addDisScaleInfo':'api/icssman/disScale/addDisScaleInfo',  //医学数据-诊断量表关联维护-添加和修改
     'getDisScaleByDisId':'api/icssman/disScale/getDisScaleByDisId',  //医学数据-诊断量表关联维护-根据诊断id获取诊断量表关联信息(修改回读用)
     'delDisScaleInfo':'api/icssman/disScale/delDisScaleInfo',  //医学数据-诊断量表关联维护-删除
-    'insertOrUpdate': 'api/icssman/scaleContent/insertOrUpdate',  //量表结构维护 -- 添加或者更新
-    'deleteScale': 'api/icssman/scaleContent/delete',  //量表结构维护 -- 删除
+    'insertOrUpdate': 'api/knowledgeman/scaleContent/insertOrUpdate',  //量表结构维护 -- 添加或者更新
+    'rebuildOrUpdate': 'api/knowledgeman/scaleContent/getByConceptId',  //量表结构维护 -- 添加或者更新
+    'deleteScale': 'api/knowledgeman/scaleContent/delete',  //量表结构维护 -- 删除
+    'searchKnowledgeLis': 'api/knowledgeman/scaleContent/index', //量表结构检索
+    'getknowledgeList': 'api/knowledgeman/dictionaryInfo/getList', //量表结构字典信息
     'getModuleType': 'api/icssman/moduleInfo/getModuleType',  //模板维护 -- 类型筛选
+	'indexByLexicon': 'api/knowledgeman/commonconcept/indexByLexicon',  //知识库标准化-根据名称和术语库词性类型搜索
+    'getAssaySon': 'api/knowledgeman/lisSonContact/lisSonContactList',  //化验子项维护
+    'getAssaySonDetail': 'api/knowledgeman/lisSonContact/relationContactDetail',  //化验子项维护-详情
+    'getConceptInfoAssay': '/api/knowledgeman/concept/getAllForRelation',  //化验子项维护-搜索术语
+    'addAssaySon': 'api/knowledgeman/lisSonContact/addRelation',  //化验子项维护-添加
+    'delAssaySon': 'api/knowledgeman/lisSonContact/removeRelationContact',  //化验子项维护-删除/恢复
+    'getConceptRelation': 'api/knowledgeman/relationContact/relationContactList',  //术语关联维护
+    'getConceptRelationDet': 'api/knowledgeman/relationContact/relationContactDetail',  //术语关联维护-详情
+    'addConceptRelation': 'api/knowledgeman/relationContact/addRelation',  //术语关联维护-添加
+    'delConceptRelation': 'api/knowledgeman/relationContact/removeRelationContact',  //术语关联维护-删除/恢复
+    'multContactList': 'api/knowledgeman/multContact/multContactList', //知识库标准化-医学术语多层关联维护-列表
+    'removeRelationContact': 'api/knowledgeman/multContact/removeRelationContact', //知识库标准化-医学术语多层关联维护-删除或者恢复
+    'relationContactDetail': 'api/knowledgeman/multContact/relationContactDetail', //知识库标准化-医学术语多层关联维护-详情
+    'addMultRelation': 'api/knowledgeman/multContact/addRelation', //知识库标准化-医学术语多层关联维护-添加或者编辑
 	},
 	menuIconList: { //菜单对应图标
 		'YH-KZT': 'el-icon-menu',

+ 64 - 2
src/api/icss.js

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

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

@@ -132,7 +132,7 @@
     .user .logo {
         background: @userBase;
 
-    p {;
+    p {
         font-size: 16px;
         line-height: normal
     }

+ 7 - 1
src/components/common/Menu.vue

@@ -38,4 +38,10 @@
     methods: {
     }
   }
-</script>
+</script>
+
+<style lang="less" scoped>
+  .el-menu-vertical-demo {
+    min-width: 300px;
+  }
+</style>

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

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

+ 2 - 0
src/components/icss/AddChemicalAndCommonMapping.vue

@@ -149,9 +149,11 @@ export default {
             if (type == 1) {
                 param.tagName = this.mealText
                 param.tagType = [7]
+                param.type = 5
             } else if (type == 2) {
                 param.tagName = this.itemText
                 param.tagType = [1]
+                param.type = 5
             }
             api.searchTagList(param).then((res) => {
                 if (res.data.code === '0') {

+ 21 - 21
src/components/icss/AddChronicAndIndexRelation.vue

@@ -8,10 +8,10 @@
         <crumbs
           :title="'慢病指标值关联维护-'+titleText"
           class="topBack"
-          linkTo="/admin/LT-YXSJWH-MBZBZGLWH"
+          linkTo="/admin/LT-YXSYKWH-MBZBZGLWH"
         ></crumbs>
         <el-form :model="form" ref="ruleForm"  class="addDepartForm">
-            <el-form-item  class="addDepartFormItem"  v-if="!isEdit" label="选择诊断标签:" prop="department">
+            <el-form-item  class="addDepartFormItem"  v-if="!isEdit" label="选择慢病标准术语(概念ID):" prop="department">
                 <input class="searchInput"  @focus="focuInput" type="text" v-model = "searchDiagVal"> 
                 <span class="searchName" @click="searchDiag">搜索</span>
                 <ul class="itemList diagList" ref="diagList">
@@ -25,13 +25,13 @@
                     </li>
                 </ul>
             </el-form-item>
-             <el-form-item class="isRequired" label="已选择诊断:" prop="type">
+             <el-form-item class="isRequired" label="已选择慢病标准术语:" prop="type">
                 {{form.diseaseName}}
             </el-form-item>
         </el-form>
         <div class="symptomList">
             <div class="screenIndex clearfix">
-                    <label class="screenIndexLabel">选择指标项内容:</label>
+                    <label class="screenIndexLabel">选择化验指标公表项内容(概念ID):</label>
                     <input class="searchInput"  @focus="focuInput" type="text" v-model = "searchIndexVal"> 
                     <span class="searchName" @click="searchIndex">搜索</span>
                     <ul class="itemList indexList" ref="indexList">
@@ -40,7 +40,7 @@
                         class="diagItem ellipsis"
                         :title="item.conceptName"
                         @click="selectIndex(item)"
-                        :key="item.conceptName">
+                        :key="item.conceptId">
                         {{item.conceptName}}
                         </li>
                     </ul>
@@ -49,12 +49,12 @@
                 
                 <tr>
                     <td class="selectedContent">已选择内容</td>
-                    <td class="selectedContentGrop">已选内容分组(只可输入数字,相同数字归为一组展示)</td>
+                    <td class="selectedContentGroup">已选内容分组(只可输入数字,相同数字归为一组展示)</td>
                     <td class="selectedContentOpera">操作</td>
                 </tr>
                 <tr v-for="(item, index) in selectedIndexList" :key="item.indexUnique"> 
                     <td class="selectedContent ">{{item.indexUnique}}</td>
-                    <td class="selectedContentGrop"><input class="groupInput"  v-model="item.indexDesc"  @input="handleInp(index,$event)"></td>
+                    <td class="selectedContentGroup"><input class="groupInput" type="text" v-model="item.indexDesc" @input="handleInp(index,$event)"></td>
                     <td class="selectedContentOpera"><el-button type="text" size="small" class="delete" @click="delSelectedIndex(item, index)">删除</el-button></td>
                 </tr>
             </table>
@@ -120,8 +120,8 @@
         close() {
             this.diagList = [];
             this.indexList = [];
-            this.$refs['diagList'].style.display = 'none';
-            this.$refs['indexList'].style.display = 'none';
+            if(this.diagList.length>0){this.$refs['diagList'].style.display = 'none';}
+            if(this.indexList.length>0){this.$refs['indexList'].style.display = 'none';}
         },
         back(){
             this.$router.go(-1);
@@ -172,7 +172,7 @@
             })
         },
         selectIndex(item) {
-            this.selectedIndexList.push({indexUnique: item.conceptName, indexDesc:''})
+            this.selectedIndexList.push({indexUnique: item.conceptName, conceptId: item.conceptId, indexDesc:''})
             this.selectedIndexMap.push(item.conceptName)
             this.indexList = []
             this.$refs['indexList'].style.display='none'
@@ -181,12 +181,6 @@
             this.selectedIndexMap = this.selectedIndexMap.filter((item) => {return item != selectedItem.indexUnique})
             this.selectedIndexList.splice(index, 1)
         },
-        handleInp(index,e) {
-            const value =  e.target.value;
-            const item = this.selectedIndexList[index].indexDesc;
-            e.target.value = value.replace(/[^\d]/g,'');
-            this.selectedIndexList[index].indexDesc = item.replace(/[^\d]/g,'');
-        },
         submitForm(formName) {
             if(!this.form.diseaseId) {
                 this.warning('请选择诊断')
@@ -220,7 +214,7 @@
                     this.warning(res.data.msg || '关联成功', 'success','1000')
                     setTimeout(() => {
                     this.$router.push({
-                        path:'/admin/LT-YXSJWH-MBZBZGLWH'
+                        path:'/admin/LT-YXSYKWH-MBZBZGLWH'
                     })
                     }, 1000);
                 } else {
@@ -247,6 +241,12 @@
                 duration:time || '3000'
             })
         },
+        handleInp(index,e){ //分组不能输入负数
+            const value =  e.target.value;
+            const item = this.selectedIndexList[index].indexDesc;
+            e.target.value = value.replace(/[^\d]/g,'');
+            this.selectedIndexList[index].indexDesc = item.replace(/[^\d]/g,'');
+        }
     }
   }
 </script>
@@ -292,8 +292,8 @@
             width: 162px;
             max-height: 150px;
             border: 1px solid #a9a9a9;
-            left: 110px;
-            top: 35px;
+            left: 209px;
+            top: 37px;
             z-index: 2;
             overflow-y: auto;
         }
@@ -342,7 +342,7 @@
             .selectedContent {
                 width: 25%;
             }
-            .selectedContentGrop {
+            .selectedContentGroup {
                 width: 55%;
             }
             .selectedContentOpera {
@@ -355,7 +355,7 @@
             position: relative;
         }
         .indexList {
-            left: 112px;
+            left: 239px;
         }
         .groupInput {
             text-align: center;

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

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

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

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

+ 61 - 60
src/components/icss/AddIndeptLabel.vue

@@ -149,6 +149,7 @@
             "textGenerate": this.form.currentOrder,      //成文顺序 默认0
             "copyType": this.dataPub.region2 == 6 ? this.dataPub.region10 : (this.dataPub.region2 == 3 ? this.dataPub.region11 : ''),                               //是否复制
             "showAdd": 0,                                //是否显示加号血压
+            "itemType" :this.dataPub.region12,    
             "showInfo": 0,
             "labelPrefix":this.dataPub.prefix,                                 //前缀
             "labelSuffix":this.dataPub.suffix,                                 //后缀
@@ -162,7 +163,7 @@
         this.showSaveDialog(param);
       },
       showSaveDialog(param) {
-        /*this.showConfirmDialog('是否保存该标签?', () => {
+        this.showConfirmDialog('是否保存该标签?', () => {
           api.saveOrUpdate(param).then((res) => {
             if (res.data.code === '0') {
               this.warning(res.data.msg || '保存成功', 'success');
@@ -173,65 +174,65 @@
           }).catch((err) => {
             this.warning(err);
           })
-        });*/
-        const h = this.$createElement;
-        const {isEdit} = this.$route.params;
-      const addMsg = h('div',{style:'padding-bottom:10px'},[
-            h('p',{style:'font-size:15px;margin-bottom:10px'},'是否保存该标签?')
-          ])
-      const modMsg = h('div',{style:'padding-bottom:10px'},[
-            h('p',{style:'font-size:15px;margin-bottom:10px'},'是否保存该标签?'),
-            h('span',{style:'color:red;font-size:12px'},'若标签系统名称已经改变,请去别名维护中修改相关信息'),
-          ])
-        this.$msgbox({
-          title:'提示',
-          message:isEdit?modMsg:addMsg,
-          showCancelButton: true,
-          distinguishCancelAndClose:true,
-          confirmButtonText: '确认并前往别名维护',
-          cancelButtonText:'确认',
-          // type: 'warning',
-          cancelButtonClass:'toast-cancel'
-        }).then(()=>{
-          api.saveOrUpdate(param).then((res) => {
-            if (res.data.code === '0') {
-              this.warning(res.data.msg || '保存成功', 'success');
-              // 判断是否已有别名--有(修改),无(新增)
-              const item = {'questionId':param.questionWrapper.id,'questionName':param.questionWrapper.tagName};
-              api.similarNameDetl(item).then((res)=>{
-                if(res.data.code=='0'){
-                  this.$router.push({
-                    name:'AddSimilarName',
-                    params: {id:param.questionWrapper.id,name:param.questionWrapper.tagName}
-                  })
-                }else{
-                  this.$router.push({
-                    name:'AddSimilarName',
-                    params: {}
-                  })
-                }
-              })  
-            } else {
-              this.warning(res.data.msg)
-            }
-          }).catch((err) => {
-            this.warning(err);
-          })
-        }).catch((action)=>{
-          // action :cancel--取消,close--关闭
-          if(action=='cancel'){
-            api.saveOrUpdate(param).then((res) => {
-              if (res.data.code === '0') {
-                this.warning(res.data.msg || '保存成功', 'success');
-                this.$router.push("/admin/LT-YXSJWH-DLLXBQWH");
-              } else {
-                this.warning(res.data.msg)
-              }
-            }).catch((err) => {
-              this.warning(err);
-            })
-          }
-        })
+        });
+      //   const h = this.$createElement;
+      //   const {isEdit} = this.$route.params;
+      // const addMsg = h('div',{style:'padding-bottom:10px'},[
+      //       h('p',{style:'font-size:15px;margin-bottom:10px'},'是否保存该标签?')
+      //     ])
+      // const modMsg = h('div',{style:'padding-bottom:10px'},[
+      //       h('p',{style:'font-size:15px;margin-bottom:10px'},'是否保存该标签?'),
+      //       h('span',{style:'color:red;font-size:12px'},'若标签系统名称已经改变,请去别名维护中修改相关信息'),
+      //     ])
+      //   this.$msgbox({
+      //     title:'提示',
+      //     message:isEdit?modMsg:addMsg,
+      //     showCancelButton: true,
+      //     distinguishCancelAndClose:true,
+      //     confirmButtonText: '确认并前往别名维护',
+      //     cancelButtonText:'确认',
+      //     // type: 'warning',
+      //     cancelButtonClass:'toast-cancel'
+      //   }).then(()=>{
+      //     api.saveOrUpdate(param).then((res) => {
+      //       if (res.data.code === '0') {
+      //         this.warning(res.data.msg || '保存成功', 'success');
+      //         // 判断是否已有别名--有(修改),无(新增)
+      //         const item = {'questionId':param.questionWrapper.id,'questionName':param.questionWrapper.tagName};
+      //         api.similarNameDetl(item).then((res)=>{
+      //           if(res.data.code=='0'){
+      //             this.$router.push({
+      //               name:'AddSimilarName',
+      //               params: {id:param.questionWrapper.id,name:param.questionWrapper.tagName}
+      //             })
+      //           }else{
+      //             this.$router.push({
+      //               name:'AddSimilarName',
+      //               params: {}
+      //             })
+      //           }
+      //         })  
+      //       } else {
+      //         this.warning(res.data.msg)
+      //       }
+      //     }).catch((err) => {
+      //       this.warning(err);
+      //     })
+      //   }).catch((action)=>{
+      //     // action :cancel--取消,close--关闭
+      //     if(action=='cancel'){
+      //       api.saveOrUpdate(param).then((res) => {
+      //         if (res.data.code === '0') {
+      //           this.warning(res.data.msg || '保存成功', 'success');
+      //           this.$router.push("/admin/LT-YXSJWH-DLLXBQWH");
+      //         } else {
+      //           this.warning(res.data.msg)
+      //         }
+      //       }).catch((err) => {
+      //         this.warning(err);
+      //       })
+      //     }
+      //   })
       },
       showConfirmDialog(msg, resolve) {
         this.$alert(msg, '提示', {

+ 377 - 0
src/components/icss/AddMedicalMultRelation.vue

@@ -0,0 +1,377 @@
+<template>
+  <div class="addMedicalMultRelationWrapper">
+    <crumbs :title="minTitle" linkTo="/admin/LT-YXSYKWH-YXSYDCGLWH"></crumbs>
+    <div class="contents">
+      <div class="content">
+        <div class="addBtn" v-if="list.length == 0">
+          <el-button
+            @click="addConcept"
+          >+ 新 增</el-button>
+        </div>
+
+        <div class="conceptSearch" ref="conceptSearch">
+          <h4  class="conceptTitle">术语(概念ID)搜索</h4>
+          <img class="closeSearch" src="../../images/close-icon.png" @click="closeSearch" alt="">
+          <input v-model="conceptText" type="text" ref="conceptInput" class="searchText" placeholder="请输入关键词搜索">
+          <!-- <span class="searchName" @click="searchConcept">搜索</span> -->
+          <ul class="conceptList" ref="conceptList">
+            <li 
+              v-for="item in conceptList" 
+              class="conceptItem ellipsis"
+              :title="item.conceptNameType"
+              @click="selectConcept(item)"
+              :key="item.conceptId">
+              {{item.conceptNameType}}
+            </li>
+          </ul>
+        </div>
+        <div class="tree">
+          <el-tree
+            :data="list"
+            :props="defaultProps"
+            node-key="conceptId"
+            default-expand-all
+            :expand-on-click-node="false">
+            <span class="custom-tree-node" slot-scope="{ node, data }">
+                <span class="custom-tree-node-name ellipsis" :title="node.label">{{ node.label }}</span>
+                <span class="btn-box">
+                  <el-button
+                      class="btn-add fl"
+                      v-if="data.level < 2"
+                      type="text"
+                      size="mini"
+                      @click="(e) => append(data, e)">
+                      + 增加
+                  </el-button>
+                  <el-button
+                      class="btn-del fr"
+                      v-if="!isEdit|| isEdit&&data.level != 0"
+                      type="text"
+                      size="mini"
+                      @click="() => remove(node, data)">
+                      删除
+                  </el-button>
+                </span>
+            </span>
+          </el-tree>
+        </div>
+        
+        <div class="btn">
+          <el-button
+            type="primary"
+            @click="confirm"
+          >确 定</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script type="text/javascript">
+import api from '@api/icss.js';
+  export default {
+    name:'AddMedicalName',
+    data(){
+      const data = [
+        // {
+        //   id: 1,
+        //   label: '一级 1',
+        //   children: [{
+        //     id: 4,
+        //     label: '二级 1-1',
+        //     children: [{
+        //       id: 9,
+        //       label: '三级 1-1-1'
+        //     }, {
+        //       id: 10,
+        //       label: '三级 1-1-2'
+        //     }]
+        //   }]
+        // }, 
+        // {
+        //   id: 2,
+        //   label: '一级 2',
+        //   children: [{
+        //     id: 5,
+        //     label: '二级 2-1'
+        //   }, {
+        //     id: 6,
+        //     label: '二级 2-2'
+        //   }]
+        // }, 
+        // {
+        //   id: 3,
+        //   label: '一级 3',
+        //   children: [{
+        //     id: 7,
+        //     label: '二级 3-1'
+        //   }, {
+        //     id: 8,
+        //     label: '二级 3-2'
+        //   }]
+        // }
+      ];
+
+      return{
+        minTitle:'医学术语多层关联维护-添加',
+        list: JSON.parse(JSON.stringify(data)),
+        defaultProps: {
+          children: 'nodeList',
+          label: 'conceptNameType'
+        },
+        conceptText: '',
+        conceptList: [], //概念列表
+        addLevel: 0,  //添加级别
+        excludedConceptIds:[],
+        operaList: [],
+        isEdit: false,  //是否为修改
+        relationConceptId: '', //关联父类ID
+        level: 0, //层级(修改时只能显示三级)
+      }
+    },
+    created(){
+      const { isEdit, data } = this.$route.params
+      if(isEdit) {
+          // console.log('dataa', data)
+          this.isEdit = isEdit
+          this.minTitle = '医学术语多层关联维护-修改'
+          const item = JSON.parse(JSON.stringify(data))
+          item.level = 0
+          item.nodeList = this.IteraNodeList(item.nodeList, [], 1)
+          this.list[0] = item
+      }
+    },
+    watch:{
+      conceptText(nextVal, prevVal) {
+        if(!nextVal.trim()) {
+          this.conceptList = []
+        }
+        if(nextVal.trim() &&nextVal != prevVal) {
+          this.searchConcept()
+        }
+      }
+    },
+    methods:{
+      addConcept(e) {
+        this.addLevel = 0;
+        this.openSearch(e);
+      },
+      confirm() { 
+        if(!this.list[0] || this.list[0].nodeList.length == 0) {
+          this.message('请输入数据信息');
+          return
+        }
+        const param = {
+          conceptId: this.list[0].conceptId,
+          sonRelationId: 17,
+          isOrderBy: 1
+        }
+        const nodeListResult = []
+        this.IteraNodeList(this.list[0].nodeList, nodeListResult, 0)
+        param.nodeList = nodeListResult
+        api.addMultRelation(param).then((res) => {
+          const { data } = res
+          if(data.code == '0') {
+            this.message(res.data.msg||'术语建立成功','success');
+            setTimeout(() => {
+              this.$router.push({name:'MedicalMultRelation'});
+            }, 2000);
+          } else {
+            this.message(data.msg);
+          }
+        })
+      },
+      IteraNodeList(nodeList,  nodeListResult, type, level = 1) {
+        this.level= this.level + 1
+        for(let i = 0; i <nodeList.length; i++) {
+          let newChild;
+          if(type == '0') { //添加的时候保存所有的id列表
+            newChild = {conceptId: nodeList[i].conceptId, relationId: 17,nodeList:[]}
+          } else if(type == '1') {  //修改的时候添加层级
+            const item = JSON.parse(JSON.stringify(nodeList[i]))
+            newChild = Object.assign(item, {level:  level, nodeList: []})
+          } else if(type == '2') { //移除节点的时候同时移除节点(搜索时排除的id列表)
+            newChild = nodeList[i].conceptId
+          }
+          if(this.level === 3) {
+            return
+          }
+          if(nodeList[i].nodeList &&nodeList[i].nodeList.length > 0) {
+            if(type == '0' || type =='1') {
+              this.IteraNodeList(nodeList[i].nodeList,  newChild.nodeList, type, level+1)
+            } else if(type == '2') {
+              this.IteraNodeList(nodeList[i].nodeList,  nodeListResult, type, level+1)
+            }
+            
+          }
+          nodeListResult.push(newChild)
+        }
+        return nodeListResult
+      },
+      searchConcept() {
+        let  excludedConceptIds = [];
+        if(this.list[0]) {
+          excludedConceptIds.push(this.list[0].conceptId)
+          this.excludedConceptIds = this.IteraNodeList(this.list[0].nodeList,excludedConceptIds, 2)
+        }
+        
+        const param = {
+          "name": this.conceptText,
+          "excludedConceptIds": this.excludedConceptIds,
+          "relationId": 17,
+          "relationPosition": 1,
+        }
+        if(this.addLevel == '1') {
+          param.relationPosition = 2
+          param.relationConceptId = this.relationConceptId
+        }
+        
+        api.getConceptInfoAssay(param).then((res) => {
+          const { data } = res
+          if(data.code == '0') {
+            this.conceptList = data.data
+          }
+        })
+      },
+      selectConcept(item) {
+        if(this.addLevel == 0) {
+          this.list.push(Object.assign({}, item,  {nodeList: [], level: 0, conceptId: item.conceptId, conceptNameType: item.conceptNameType, sonRelationId: 17}))
+          this.list = JSON.parse(JSON.stringify(this.list))
+        }else {
+          const data = this.operaList
+          const newChild = Object.assign({}, item,  {nodeList: [], level: data.level+1, conceptId: item.conceptId, conceptNameType: item.conceptNameType, relationId: 17});
+          // const newChild = { id: id++, label: 'nodeList', level: data.level+1, children: [] };
+          if (!data.nodeList) {
+          this.$set(data, 'nodeList', []);
+          }
+          data.nodeList.push(newChild);
+        }
+        this.conceptList = [];
+        this.closeSearch();
+      },
+      openSearch(e) {
+        this.$refs['conceptSearch'].style.top=  e.pageY - 120 + 'px';
+        this.$refs['conceptSearch'].style.display= 'block'
+        this.$refs['conceptInput'].focus();
+      },
+      closeSearch() {
+        this.conceptText = ''
+        this.$refs['conceptSearch'].style.display = "none";
+      },
+      append(data, e) {
+          this.addLevel = 1;
+          this.relationConceptId = data.conceptId
+          this.operaList = data;
+          this.openSearch(e);
+
+          // const newChild = { id: id++, label: 'testtest', level: data.level+1, nodeList: [] };
+          // if (!data.nodeList) {
+          // this.$set(data, 'nodeList', []);
+          // }
+          // data.nodeList.push(newChild);
+      },
+
+      remove(node, data) {
+          const parent = node.parent;
+          const nodeList = parent.data.nodeList || parent.data;
+          const index = nodeList.findIndex(d => d.conceptId === data.conceptId);
+          nodeList.splice(index, 1);
+      },
+      message(msg,type){
+        this.$message({
+          showClose: true,
+          message:msg,
+          type:type||'warning'
+        })
+      },
+      
+    }
+  }
+</script>
+<style lang="less" scoped>
+@import "../../less/admin.less";
+.addMedicalMultRelationWrapper {
+  height: calc(100% - 70px);
+}
+.tree {
+  margin-bottom: 230px;
+}
+.contents {
+  height: 100%;
+}
+.btn-box {
+  position: absolute;
+  left: 350px;
+}
+.btn-del {
+  color: #8F8F8F;
+}
+.addBtn {
+  width: 66px;
+  order: 1px solid #21CBC7;
+  border-radius: 2px;
+}
+.conceptSearch {
+  position: absolute;
+  left: 560px;
+  width: 301px;
+  height: 300px;
+  display: none;
+  background: #fff;
+  border: 1px solid #ccc;
+  text-align: center;
+  z-index: 2;
+}
+.conceptTitle {
+  width: 100%;
+  text-align: center;
+  padding: 20px 0;
+}
+.searchText {
+  padding: 0 15px;
+  width: 191px;
+  height: 34px;
+}
+.conceptList {
+  width: 221px;
+  height: 170px;
+  margin: -2px auto 0;
+  border: 2px solid #E1DFDF;
+  overflow: hidden;
+  overflow-y: auto;
+}
+.conceptItem {
+  height: 34px;
+  line-height: 34px;
+  text-align: left;
+  padding: 0 15px;
+  cursor: pointer;
+}
+.conceptItem:hover {
+  background: #f5f7fa;
+}
+.closeSearch {
+  position: absolute;
+  width: 30px;
+  right: 0;
+  top: 0;
+}
+.delete {
+  cursor: pointer;
+}
+.content{
+  background: #fff;
+  padding: 20px 20px 30px;
+  color: #545455;
+ 
+}
+
+.btn {
+  text-align: right;
+  margin-top: 20px;
+}
+.custom-tree-node-name {
+  display: inline-block;
+  width: 270px;
+}
+  
+</style>

+ 217 - 63
src/components/icss/AddMedicalName.vue

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

+ 11 - 8
src/components/icss/AddMedicalRelation.vue

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

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

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

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

@@ -112,12 +112,12 @@
             } else {
                 this.titleText = '模板详情'
             }
-            const { id, name } = data
+            const { deptId, name } = data
             this.isEdit = isEdit
             this.isDetail = isDetail
             this.rightTagsList = data.vitals
-            this.departList.push({ id, name, val:id })
-            this.form.department = id
+            this.departList.push({ id:deptId, name, val:deptId })
+            this.form.department = deptId
             
         } else {
             this.getDepartmentList()

+ 16 - 4
src/components/icss/AddVersion.vue

@@ -6,7 +6,7 @@
         <!-- <el-form ref="form" :label-position="labelPosition" label-width="95px" class="add-admin-form" :model="form" :rules="rules"> -->
         <el-form ref="form" :label-position="labelPosition" label-width="95px" class="add-version-form" :model="form" :rules="rules">
           <el-form-item label="版本号:" prop="name" class="version-num">
-              <el-input v-model="form.name" placeholder="请输入版本号" maxlength="20"></el-input>
+              <el-input v-model="form.name" placeholder="请输入版本号" maxlength="21"></el-input>
           </el-form-item>
           <el-form-item label="版本时间:" prop="refreshTime">
             <el-date-picker
@@ -19,7 +19,7 @@
             </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-input type="textarea" :rows="3" placeholder="请输入版本备注" v-model="form.remark" maxlength="121"></el-input>
           </el-form-item>
           <el-form-item label="版本说明:" v-if="list&&list.length>0">
           </el-form-item>
@@ -42,12 +42,23 @@
         if (!value) {
           return callback(new Error('请输入版本号'));
         }
-        if (value.length >= 20) {
+        if (value.length > 20) {
            this.form.name = value.substr(0, 20);
            this.$message({
              showClose: true,
              type: 'warning',
-             message: '已超过最大字数限制'
+             message: '版本号已超过最大限制20字'
+           })
+        }
+        callback();
+      };
+      const remarkVaild = (rule, value, callback) => {
+        if (value.length > 120) {
+           this.form.remark = value.substr(0, 120);
+           this.$message({
+             showClose: true,
+             type: 'warning',
+             message: '版本备注已超过最大限制120字'
            })
         }
         callback();
@@ -67,6 +78,7 @@
         rules:{
           name:[{ required: true, validator: titleVaild, trigger: [ 'change'] },
                 { required: true, message: '请输入版本号',trigger: ['blur', 'change'] }],
+          remark:{ required: false, validator: remarkVaild, trigger: [ 'change'] },
           refreshTime:{ required: true, message: '请选择时间', trigger: ['blur', 'change'] }
         },
         pickerOptions1:{

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

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

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

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

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

@@ -35,6 +35,16 @@
                     label="慢病名称"
                     show-overflow-tooltip>
                 </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    label="状态"
+                    show-overflow-tooltip>
+                    <template slot-scope="scope">
+                        <span :class="scope.row.state == 'N'?'':'delete'">
+                            {{scope.row.state == 'N'?'启用中':'已删除'}}
+                        </span>
+                    </template>
+                </el-table-column>
                 <el-table-column
                     :resizable = "false"
                     prop="modifier"
@@ -45,9 +55,9 @@
                     prop="operate"
                     label="操作">
                     <template slot-scope="scope">
-                        <el-button  @click="modifyRelation(scope.row)" type="text" size="small">修改</el-button>
+                        <el-button  :disabled="scope.row.state != 'N'" @click="modifyRelation(scope.row)" type="text" size="small">修改</el-button>
                         <span style="margin:0 3px;">|</span>
-                        <el-button @click="showDelDialog(scope.row)" class="delete" type="text" size="small">删除</el-button>
+                        <el-button type="text" size="small" :class="scope.row.state == 'N'?'delete':'review'" @click="showDelDialog(scope.row)">{{scope.row.state == 'N'?'删除':'恢复'}}</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -165,9 +175,11 @@ export default {
         },
         showDelDialog(row){
           const param = {
-              diseaseId:row.diseaseId
+              diseaseId:row.diseaseId,
+              state:row.state === 'N'?'Y':'N',
           }
-          this.showConfirmDialog('是否删除该关联?',()=>{
+          let warntTxt = row.state === 'N' ? '是否删除该关联?': '是否恢复该关联?'
+          this.showConfirmDialog(warntTxt,()=>{
             api.cancelIndexConfigAlls(param).then((res)=>{
               if(res.data.code=='0'){
                 this.getDataList();
@@ -185,7 +197,7 @@ export default {
 </script>
 
 
-<style lang="less">
+<style lang="less" scoped>
     @import "../../less/admin.less";
     .delete{
        color: red;
@@ -193,6 +205,9 @@ export default {
     .delete:hover {
         color: red;
     } 
+    .review{
+      color: #22ccc8;
+    }
     .pagination {
         min-width: 1010px;
     }

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

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

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

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

+ 26 - 10
src/components/icss/CommonTemplate.vue

@@ -562,25 +562,41 @@ export default {
     searchTagList() {
       let notIds = []
       let tmpArr = this.rightTagsList.slice();
+      let tmpTypeSin = this.getTextType(this.type)
       for (let i = 0; i < tmpArr.length; i++) {
         if(tmpArr[i].type != 'sub' && tmpArr[i].type != 'input'){
           notIds.push(tmpArr[i].id)
         }
       }
-      
       let param = {
         "tagName": this.searchVal,
-        "type": this.getTextType(this.type),
+        "type": tmpTypeSin,
         "notIds": notIds,
-        "notTagType": this.type == 3?[3,8,10]:(this.type==4?[4,8,10]:(this.type==2 || this.type==22 || this.type==322?[4,8,10]:[3,4,8,10]))//查体没有症状尾巴有血压,其他史有症状尾巴无血压
+        "notTagType": this.type == 3?[3,8,10]:(this.type==4?[4,8,10]:(this.type==2 || this.type==22 || this.type==32 || this.type==322?[4,8,10]:[3,4,8,10]))//查体没有症状尾巴有血压,其他史有症状尾巴无血压
+      }
+      let params = {
+        "notIds": notIds,
+        "tagName": this.searchVal,
+        "type": tmpTypeSin
+      }
+
+      if(tmpTypeSin == 6){
+        api.getQuestionInfos(params).then((res) => {
+          if (res.data.code === '0') {
+            this.leftTagsList = res.data.data
+            this.selectLeftTagsList = []
+            this.selectRightTagsList = []
+          }
+        })
+      }else{
+        api.searchTagList(param).then((res) => {
+          if (res.data.code === '0') {``
+            this.leftTagsList = res.data.data
+            this.selectLeftTagsList = []
+            this.selectRightTagsList = []
+          }
+        })
       }
-      api.searchTagList(param).then((res) => {
-        if (res.data.code === '0') {
-          this.leftTagsList = res.data.data
-          this.selectLeftTagsList = []
-          this.selectRightTagsList = []
-        }
-      })
     },
     getSubTemplate() {
       let param = {

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

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

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

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

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

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

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

@@ -54,6 +54,15 @@
                         prop="tagName"
                         label="标签系统名称">
                 </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    label="标签名称是否存在于标准术语中">
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.itemType == 0">
+                            {{scope.row.exist ? "已存在" : "未存在"}}
+                        </span>
+                    </template>
+                </el-table-column>
                 <el-table-column
                         :resizable = "false"
                         prop="modifier"
@@ -195,7 +204,7 @@
           size: this.pageSize,
           type: this.filter.tagAdscription,
           tagName: this.filter.tagSysName,
-          controlTypeList: this.filter.controlType
+          controlTypeList: this.filter.controlType[0] ? this.filter.controlType: []
         };
         return param;
       },

+ 10 - 1
src/components/icss/LabelGroup.vue

@@ -54,6 +54,15 @@
                     prop="tagName"
                     label="标签系统名称">
                 </el-table-column>
+                <el-table-column
+                    :resizable = "false"
+                    label="标签名称是否存在于标准术语中">
+                    <template slot-scope="scope" >
+                        <span v-if="scope.row.itemType == 0">
+                            {{scope.row.exist ? "已存在" : "未存在"}}
+                        </span>
+                    </template>
+                </el-table-column>
                 <el-table-column
                     :resizable = "false"
                     prop="modifier"
@@ -125,7 +134,7 @@ export default {
     },
     methods: {
         getValue(val) {
-            console.log('changeVal', val, this.filter.tagAdscription)
+            // console.log('changeVal', val, this.filter.tagAdscription)
         },
         getDropList() {
             return api.getDropList().then((res) =>{

+ 268 - 0
src/components/icss/MedicalMultRelation.vue

@@ -0,0 +1,268 @@
+<template>
+    <div>
+        <crumbs title="医学术语多层关联维护" minWidth="995px">
+            <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>
+                    <el-button size="mini" @click="filterDatas">确认</el-button>
+                    <router-link to="/admin/LT-YXSYKWH-TJYXSYDCGL" 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="operTime"
+                        label="操作时间"
+                        :show-overflow-tooltip="true">
+                </el-table-column>
+                <el-table-column
+                        prop="libNameType"
+                        label="医学标准术语"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column
+                        prop="otherNames"
+                        label="一级关联标准术语"
+                        show-overflow-tooltip>
+                </el-table-column>
+                <!-- <el-table-column
+                        label="状态">
+                        <template slot-scope="scope">
+                          <span :class="scope.row.isDeleted == 'N'?'':'delete'">
+                            {{scope.row.isDeleted == 'N'?'启用中':'已删除'}}
+                          </span>
+                        </template>
+                </el-table-column> -->
+                <el-table-column
+                        prop="operName"
+                        label="操作人">
+                </el-table-column>
+                
+                <el-table-column
+                        label="操作" width="160">
+                    <template slot-scope="scope">
+                        <el-button type="text" size="small" :disabled="scope.row.isDeleted != 'N'" @click="toEditProduct(scope.row)">修改</el-button>
+                        <span style="margin:0 3px;">|</span>
+                        <el-button type="text" size="small" :class="scope.row.isDeleted == 'N'?'delete':'review'" @click="showDelDialog(scope.row)">{{scope.row.isDeleted == 'N'?'删除':'恢复'}}</el-button>
+                    </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: [],
+        stateSelect:[
+          {id:'N',name:'启用中'},
+          {id:'Y',name:'已删除'},
+        ],
+        isState:'',
+        cacheData: {},
+        currentPage: 1,
+        pageSize: 10,
+        total: 0,
+        filter: {
+          term:'',
+          type:''
+        },
+        typeList:[]
+      }
+    },
+    created() {
+      this.getDataList();
+      this.getTypeList();
+    },
+    methods: {
+      toEditProduct(row){
+        const param = {
+          conceptId: row.conceptId,
+          relationId: 17
+        }
+        api.relationContactDetail(param).then((res) => {
+          const {code,data,msg} = res.data;
+          if(code=='0'){
+              const item = Object.assign({},row,data);
+              this.$router.push({name:'AddMedicalMultRelation',params:{isEdit:true,data:item}});
+          }else{
+              this.$message({
+              message: msg,
+              type: 'warning'
+              });
+          }
+        })
+      },
+      filterDatas(){
+        this.currentPage = 1;
+        this.getDataList();
+      },
+      getDataList() {
+        const param = this.getFilterItems();
+        api.multContactList(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(){
+        api.allKnowledgeType({'name':''}).then((res)=>{
+          const data = res.data;
+          if(data.code==0){
+            this.typeList = data.data;
+          }else{
+            console.log(res.msg);
+          }
+        }).catch((error) => {
+          console.log(error);
+        });
+      },
+      /*getDetailList(id) {
+        this.$router.push({name:'DeptInfoDetail', params:{id: id}})
+      },*/
+      getFilterItems() {
+        const param = {
+          name: this.filter.term,
+          current: this.currentPage,
+          size: this.pageSize,
+          type:this.filter.type,
+          isDeleted:this.isState
+        };
+        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(item){
+        /*const param = {
+          term:item.term,
+          type:item.type,
+          id:item.id
+        }*/
+        const param = {
+          conceptId:item.conceptId,
+          isDeleted:item.isDeleted === 'N'?'Y':'N',
+          relationId: 17
+        }
+        let waringTxt = '是否删除该关系,可能对现有系统造成影响'
+        this.showConfirmDialog(waringTxt,()=>{
+          api.removeRelationContact(param).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);
+        const header = {
+          headers:{
+            'Content-Type': 'multipart/form-data'
+          }
+        }
+        api.knowledgeUpload(formData,header).then((res)=>{
+          if(res.data.code==0){
+            this.$message({
+              message: '上传成功',
+              type: 'success',
+            });
+            this.getDataList();
+          }else{
+            this.$message({
+              dangerouslyUseHTMLString: true,
+              message:res.data.msg,
+              type:'warning'
+            });
+          }
+        })
+        
+        //解决上传相同文件不触发change
+        let inp = document.getElementById("upFile");
+        inp.value = "";   
+      },
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+    @import "../../less/admin.less";
+    .delete{
+        color: red;
+    }
+    .review{
+      color: #22ccc8;
+    }
+    .el-table .cell{
+      overflow: hidden;
+      white-space: nowrap;
+    }
+    #upFile{
+      display: none !important;
+    }
+</style>

+ 6 - 6
src/components/icss/MedicalName.vue

@@ -115,7 +115,7 @@
           {id:'Y',name:'已删除'},
         ],
         isState:'',
-        cacheData: {},
+        cacheData: {}, //因为删除和恢复要及时更新,所以不做缓存
         currentPage: 1,
         pageSize: 10,
         total: 0,
@@ -148,7 +148,7 @@
           if (res.data.code == '0') {
             const data = res.data.data;
             this.list = data.records;
-            this.cacheData[param.current] = data.records;
+            // this.cacheData[param.current] = data.records;
             this.total = data.total;
           }
         }).catch((error) => {
@@ -185,11 +185,11 @@
       },
       currentChange(next) {
         this.currentPage = next;
-        if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
-          this.list = this.cacheData[next];
-        } else {
+        // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+        //   this.list = this.cacheData[next];
+        // } else {
           this.getDataList();
-        }
+        // }
       },
       warning(msg,type){
         this.$message({

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

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

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

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

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

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

+ 64 - 64
src/components/icss/NoiseTemplate.vue

@@ -220,7 +220,7 @@ export default {
       this.showDelDialog(param)
     },
     showDelDialog(param) {
-      /*this.showConfirmDialog('是否保存该标签组?', () => {
+      this.showConfirmDialog('是否保存该标签组?', () => {
         api.saveOrUpdate(param).then((res) => {
           if (res.data.code === '0') {
             this.warning(res.data.msg || '保存成功', 'success','1000')
@@ -235,69 +235,69 @@ export default {
         }).catch((err) => {
           this.warning(err);
         })
-      });*/
-      const h = this.$createElement;
-      const {isEdit} = this.$route.params;
-      const addMsg = h('div',{style:'padding-bottom:10px'},[
-            h('p',{style:'font-size:15px;margin-bottom:10px'},'是否保存该标签组?')
-          ])
-      const modMsg = h('div',{style:'padding-bottom:10px'},[
-            h('p',{style:'font-size:15px;margin-bottom:10px'},'是否保存该标签组?'),
-            h('span',{style:'color:red;font-size:12px'},'若标签系统名称已经改变,请去别名维护中修改相关信息'),
-          ])
-      this.$msgbox({
-        title:'提示',
-        message:isEdit?modMsg:addMsg,
-        showCancelButton: true,
-        distinguishCancelAndClose:true,
-        confirmButtonText: '确认并前往别名维护',
-        cancelButtonText:'确认',
-        // type: 'warning',
-        cancelButtonClass:'toast-cancel'
-      }).then(()=>{
-        api.saveOrUpdate(param).then((res) => {
-          if (res.data.code === '0') {
-            this.warning(res.data.msg || '保存成功', 'success');
-            // 判断是否已有别名--有(修改),无(新增)
-            const item = {'questionId':param.questionWrapper.id,'questionName':param.questionWrapper.tagName};
-            api.similarNameDetl(item).then((res)=>{
-              if(res.data.code=='0'){
-                this.$router.push({
-                  name:'AddSimilarName',
-                  params: {id:param.questionWrapper.id,name:param.questionWrapper.tagName}
-                })
-              }else{
-                this.$router.push({
-                  name:'AddSimilarName',
-                  params: {}
-                })
-              }
-            })
-          } else {
-            this.warning(res.data.msg)
-          }
-        }).catch((err) => {
-          this.warning(err);
-        })
-      }).catch((action)=>{
-        // action :cancel--取消,close--关闭
-        if(action=='cancel'){
-          api.saveOrUpdate(param).then((res) => {
-            if (res.data.code === '0') {
-              this.warning(res.data.msg || '保存成功', 'success');
-              setTimeout(() => {
-                this.$router.push({
-                  path:'/admin/LT-YXSJWH-BQZWH'
-                })
-              }, 1000);
-            } else {
-              this.warning(res.data.msg)
-            }
-          }).catch((err) => {
-            this.warning(err);
-          })
-        }
-      })
+      });
+      // const h = this.$createElement;
+      // const {isEdit} = this.$route.params;
+      // const addMsg = h('div',{style:'padding-bottom:10px'},[
+      //       h('p',{style:'font-size:15px;margin-bottom:10px'},'是否保存该标签组?')
+      //     ])
+      // const modMsg = h('div',{style:'padding-bottom:10px'},[
+      //       h('p',{style:'font-size:15px;margin-bottom:10px'},'是否保存该标签组?'),
+      //       h('span',{style:'color:red;font-size:12px'},'若标签系统名称已经改变,请去别名维护中修改相关信息'),
+      //     ])
+      // this.$msgbox({
+      //   title:'提示',
+      //   message:isEdit?modMsg:addMsg,
+      //   showCancelButton: true,
+      //   distinguishCancelAndClose:true,
+      //   confirmButtonText: '确认并前往别名维护',
+      //   cancelButtonText:'确认',
+      //   // type: 'warning',
+      //   cancelButtonClass:'toast-cancel'
+      // }).then(()=>{
+      //   api.saveOrUpdate(param).then((res) => {
+      //     if (res.data.code === '0') {
+      //       this.warning(res.data.msg || '保存成功', 'success');
+      //       // 判断是否已有别名--有(修改),无(新增)
+      //       const item = {'questionId':param.questionWrapper.id,'questionName':param.questionWrapper.tagName};
+      //       api.similarNameDetl(item).then((res)=>{
+      //         if(res.data.code=='0'){
+      //           this.$router.push({
+      //             name:'AddSimilarName',
+      //             params: {id:param.questionWrapper.id,name:param.questionWrapper.tagName}
+      //           })
+      //         }else{
+      //           this.$router.push({
+      //             name:'AddSimilarName',
+      //             params: {}
+      //           })
+      //         }
+      //       })
+      //     } else {
+      //       this.warning(res.data.msg)
+      //     }
+      //   }).catch((err) => {
+      //     this.warning(err);
+      //   })
+      // }).catch((action)=>{
+      //   // action :cancel--取消,close--关闭
+      //   if(action=='cancel'){
+      //     api.saveOrUpdate(param).then((res) => {
+      //       if (res.data.code === '0') {
+      //         this.warning(res.data.msg || '保存成功', 'success');
+      //         setTimeout(() => {
+      //           this.$router.push({
+      //             path:'/admin/LT-YXSJWH-BQZWH'
+      //           })
+      //         }, 1000);
+      //       } else {
+      //         this.warning(res.data.msg)
+      //       }
+      //     }).catch((err) => {
+      //       this.warning(err);
+      //     })
+      //   }
+      // })
     },
     showConfirmDialog(msg, resolve) {
       this.$alert(msg, '提示', {

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

@@ -3,7 +3,14 @@
         <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-select v-model="filter.deptId" clearable placeholder="请选择" size="mini">
+                    <el-option
+                      v-for="item in deptList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id">
+                    </el-option>
+                  </el-select>
                 </el-form-item>
                 <el-form-item>
                     <el-button size="mini" @click="filterDatas">确认</el-button>
@@ -48,7 +55,7 @@
                     <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.id)">删除</el-button>
+                        <el-button type="text" size="small" class="delete" @click="showDelDialog(scope.row.deptId)">删除</el-button>
                     </template>
                 </el-table-column>
                 <el-table-column
@@ -82,17 +89,19 @@
       return {
         list: [], //常见症状列表
         cacheData: {},
+        deptList: [], //科室下拉列表
         currentPage: 1,
         pageSize: 10,
         total: 0,
         linkIn:[],
         pays:[],
         filter: {
-          proName: ''
+          deptId: ''
         }
       }
     },
     created() {
+      this.getDeptShortListSearh()
       this.getDataList();
     },
     methods: {
@@ -100,7 +109,7 @@
         this.getPhysicalExamTempByDepId('isEdit', row)
       },
       getPhysicalExamTempByDepId(type, row) {
-        const param = {'deptId': row.id,};
+        const param = {'deptId': row.deptId,};
         api.getPhysicalExamTempByDepId(param).then((res)=>{
             const {code,data,msg} = res.data;
             if(code=='0'){
@@ -119,6 +128,14 @@
         this.currentPage = 1;
         this.getDataList();
       },
+      getDeptShortListSearh() {
+        api.getDeptShortListSearh().then((res) => {
+          const { data } = res
+          if(data.code == 0) {
+            this.deptList = data.data
+          }
+        })
+      },
       getDataList() {
         const param = this.getFilterItems();
         // const param = {
@@ -139,7 +156,7 @@
       },
       getFilterItems() {
         const param = {
-          deptName: this.filter.proName,
+          deptId: this.filter.deptId,
           current: this.currentPage,
           size: this.pageSize
         };
@@ -171,9 +188,9 @@
           resolve();
         }).catch(() => {});
       },
-      showDelDialog(id){
+      showDelDialog(deptId){
         this.showConfirmDialog('是否删除该科室查体模板?',()=>{
-          api.delPhysicalExamTemp({'deptId':id}).then((res)=>{
+          api.delPhysicalExamTemp({'deptId':deptId}).then((res)=>{
             if(res.data.code=='0'){
               this.warning(res.data.msg||'操作成功','success');
               this.getDataList();

+ 154 - 35
src/components/icss/PubIndeptTag.vue

@@ -1,5 +1,7 @@
 <template>
-    <div class="PubTagGroupWrapper">
+    <div class="PubTagGroupWrapper"
+         @click="closeNameLis(1)"
+    >
         <el-form
                 class="groups"
                 :rules="rules"
@@ -45,41 +47,69 @@
                     ></el-option>
                 </el-select>
             </el-form-item>
-             <el-form-item
-                    label="性别:"
-                    prop="region7"
+            <el-form-item
+              v-show="form.region1 == 4 "
+              :label="'当为查体推送项时,需要检索标准术语'"
+              prop="region12"
             >
-                <span class="changeTips">改变性别后,标签明细将会恢复到默认状态</span>
-                <el-select
-                        v-model="form.region7"
-                        :disabled="!!editData.id || !form.region1 || form.region2 == '99'"
-                        @change="(e)=>readyChangeSelect(e,3)"
-                >
-                    <el-option
-                            label="通用"
-                            value="3"
-                    ></el-option>
-                    <el-option
-                            label="男"
-                            value="1"
-                    ></el-option>
-                    <el-option
-                            label="女"
-                            value="2"
-                    ></el-option>
-                </el-select>
+              <span
+                v-if="form.region1 == 4"
+                class="changeTips changeTipsName"
+              >当为查体推送项时,标签系统名称需要检索医学标准术语内容并与之相对应,才可保证系统正常使用,如果未对应上可能造成系统显示异常!如果在搜索中没有可以先在医学标准术语中建立相关信息!</span>
+              <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="region3"
             >
-                <el-input
+
+
+            <div @click.stop style="display:inline-block;">
+              <el-input
+                v-model="form.region3"
+                :disabled="!form.region1"
+                maxLength="30"
+                placeholder="请输入标签系统名称"
+                @change="sendData"
+                @focus="focusSystemName"
+              ></el-input>
+              <ul
+                class="systemNames"
+                v-if="systemNameShow"
+              >
+                <li
+                  v-for="item in systemNameLis"
+                  class="ellipsis"
+                  :key="item.conceptId"
+                  @click="pushSystemName(item.name)"
+                >{{item.name}}</li>
+              </ul>
+            </div>
+
+                <!-- <el-input
                         :disabled="!form.region1"
                         v-model="form.region3"
                         maxLength="30"
                         placeholder="请输入标签系统名称"
                         @change="sendData"
-                ></el-input>
+                ></el-input> -->
+                 <span
+                  v-if="form.region1 == 4"
+                  class="changeTips changeTipsName"
+                >标签系统名称需要与医学标准术语内容相对应,如果没有可以先在医学标准术语中建立相关信息!未建立相关信息可能会影响系统使用!当为查体推送项时标签系统名称应当检索医学术语库内容;</span>
             </el-form-item>
             <el-form-item
                     label="标签界面名称:"
@@ -92,6 +122,10 @@
                         placeholder="请输入标签界面名称"
                         @change="sendData"
                 ></el-input>
+                <span
+                  v-if="form.region1 == 4"
+                  class="changeTips changeTipsName"
+                >为在界面上检索不受影响,标签界面名称应与标签系统名称和医学标准术语内容相对应, 未建立相关信息可能会影响系统使用!</span>
             </el-form-item>
             <el-form-item
                     label="标签前后缀:"
@@ -148,7 +182,30 @@
                     ></el-option>
                 </el-select>
             </el-form-item> -->
-           
+            <el-form-item
+                label="性别:"
+                prop="region7"
+            >
+                <span class="changeTips">改变性别后,标签明细将会恢复到默认状态</span>
+                <el-select
+                        v-model="form.region7"
+                        :disabled="!!editData.id || !form.region1 || form.region2 == '99'"
+                        @change="(e)=>readyChangeSelect(e,3)"
+                >
+                    <el-option
+                            label="通用"
+                            value="3"
+                    ></el-option>
+                    <el-option
+                            label="男"
+                            value="1"
+                    ></el-option>
+                    <el-option
+                            label="女"
+                            value="2"
+                    ></el-option>
+                </el-select>
+            </el-form-item>
             <el-form-item
                     label="年龄:"
                     prop="region8"
@@ -264,11 +321,12 @@
           region9: '200',         //最大年龄
           minNormalVal: '',       //化验正常值最小值
           maxNormalVal: '',       //化验正常值最大值
-          region12:'',
+          region12: '1',        //是否为查体推送   
           region13:'',
           prefix:'',            //前缀
           suffix:'',            //后缀
           tipLis:[],           //提示列表
+          isNeedSearch: false, //是否需要查询(系统名称)
         },
         labelTypesMaps: {       //// 归属和填写单类型限制
           '1':['1','2','5','6','7','11'], //联合推送暂时不用
@@ -303,12 +361,15 @@
           region9: [
             { required: true, message: '请输入最大年龄', trigger: 'change' }
           ],
-           minNormalVal: [
-            { required: true, message: '请输入正常值范围', trigger: 'change' }
+          region12: [
+            { required: true, message: '请选择是否为查体', trigger: 'change' }
           ],
-          maxNormalVal: [
-            { required: true, message: '请输入正常值范围', trigger: 'change' }
-          ]
+          // minNormalVal: [
+          //   { required: true, message: '请输入正常值范围', trigger: 'change' }
+          // ],
+          // maxNormalVal: [
+          //   { required: true, message: '请输入正常值范围', trigger: 'change' }
+          // ]
           
         },
         tmpSex: '通用',
@@ -318,6 +379,7 @@
         AdscriptionsList:[],
         labelTypes: [],
         labelTypesList: [],
+        systemNameShow: false,//系统名称列表显示
         type:'',
         systom:null,      //标签系统名称存在与否
       }
@@ -332,6 +394,9 @@
       newSign() {
         return this.form.region2;
       },
+      newName() {
+        return this.form.region3;
+      },
     },
     mounted() {
       
@@ -351,7 +416,12 @@
     watch: {
       newSex(nextVal, prevVal) {
         this.tmpSex = prevVal;
-      }
+      },
+      newName(nextVal, prevVal) {
+        if (this.isNeedSearch && nextVal != prevVal && (this.form.region12 == 0)) {
+          this.focusSystemName()
+        }
+      },
     },
     methods: {
       getDropList() {
@@ -418,6 +488,54 @@
           }
         });
       },
+      focusSystemName() {
+        this.isNeedSearch = true
+        if (this.form.region3.trim() == '') {
+          this.systemNameShow = false
+          this.systemNameLis = []
+          return
+        }
+        if (this.form.region12 == 0) {
+          let tmpArr = [];
+          if (this.form.region1 == 1 && this.form.region2 == 4) {//症状
+            tmpArr = [1]
+          } else if (this.form.region1 == 4) {//查体
+            tmpArr = [33]
+          } else if (this.form.region1 == 5) {//化验
+            tmpArr = [12]
+          }
+          let params = {
+            "libType": tmpArr,
+            "name": this.form.region3
+          }
+          api.indexByLexicon(params).then((res) => {
+            if (res.data.code === '0') {
+              this.systemNameLis = res.data.data
+              if (res.data.data.length > 0) {
+                this.systemNameShow = true
+              } else {
+                this.systemNameShow = false
+              }
+            }
+          })
+        }
+      },
+      pushSystemName(val) {
+        this.form.region3 = val
+        this.systemNameShow = false
+        this.isNeedSearch = false
+      },
+      closeNameLis(flg) {
+        if (flg == 1) {
+          this.systemNameShow = false
+        } else if (flg == 2) {
+          if (this.systemNameLis.length > 0) {
+            this.systemNameShow = true
+          } else {
+            this.systemNameShow = false
+          }
+        }
+      },
       warning(msg, type) {
         this.$message({
           showClose: true,
@@ -431,6 +549,7 @@
         this.form.minNormalVal = ''
         this.form.maxNormalVal = ''
         this.form.region5 = ''
+        this.form.region12 = '1'
       },
     }
   }
@@ -443,7 +562,6 @@
             width: 40px;
             padding: 0 5px;
         }
-
     }
     .PubTagGroupWrapper .fix-inp .el-col .el-input__inner{
         width: 100%;
@@ -506,7 +624,8 @@
     .changeTips {
         position: absolute;
         left: 220px;
-        min-width: 300px;
+        // min-width: 300px;
+        width: 200%;
         color: #ea7777;
         font-size: 12px;
     }

+ 307 - 152
src/components/icss/PubTagGroup.vue

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

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

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

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

@@ -12,7 +12,7 @@
                     <el-checkbox-button v-if=" !(ascription == 5 && type == 1 || type == 11)" :label="i" :disabled="rows[i].isNone || hasError==i||focusOn==-1">同“伴”类型</el-checkbox-button>
                 </el-checkbox-group>
                 <el-checkbox-group size="small" v-for="(it,i) in rows" v-if="focusOn==i||(focusOn==-1&&i==0)" :key="4+i" v-model="rows[i].isError" @change="emitValues(i,'hasError',rows[i].isError)">
-                    <el-checkbox-button v-if="ascription==5 && (type == 1 || type != 11)" :label="i" :disabled="hasDefault==i||hasBan==i ||hasNone==i ||(hasError!=-1&&hasError==i)||focusOn==-1">标记异常选项</el-checkbox-button>
+                    <el-checkbox-button v-if="ascription==5 && (type == 1 || type != 11)" :label="i" :disabled="hasDefault==i||hasBan==i ||hasNone==i ||focusOn==-1">标记异常选项</el-checkbox-button>
                 </el-checkbox-group>
                  <span v-if="type == 11" class="tip">可输入中文全角括号"()", 当作可输入内容的占位符</span>
                 <el-button type="danger" size="small" class="del" @click="delRow">删除</el-button>

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

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

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

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

+ 7 - 7
src/components/icss/VersionDesc.vue

@@ -50,11 +50,11 @@
           </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-input v-else v-model="form.title" placeholder="请输入标题" maxlength="31"></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="500" @keydown.native="contentInp"></el-input>
+            <el-input v-else type="textarea" :rows="3" placeholder="请输入内容" v-model="form.description" maxlength="501" @keydown.native="contentInp"></el-input>
           </el-form-item>
           <el-button class="disclButn1" size="small" type="primary" @click="comfirn('form')">确定</el-button>
           <!-- <el-button class="disclButn can" size="small" type="primary" @click="cancel">取消</el-button> -->
@@ -71,26 +71,26 @@
         if (!value) {
           return callback(new Error('请输入标题'));
         }
-        if (value.length >= 30) {
+        if (value.length > 30) {
            this.form.title = value.substr(0, 30);
            this.$message({
              showClose: true,
              type: 'warning',
-             message: '已超过最大字数限制'
+             message: '标题已超过最大限制30字'
            })
         }
         callback();
       };
       const descVaild = (rule,value,callback) => {
         if(!value){
-          return callback(new Error('请输入标题'));
+          return callback(new Error('请输入内容'));
         }
-        if (value.length >= 500) {
+        if (value.length > 500) {
            this.form.description = value.substr(0, 500);
            this.$message({
              showClose: true,
              type: 'warning',
-             message: '已超过最大字数限制'
+             message: '内容已超过最大限制500字'
            })
         }
         callback();

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

@@ -45,9 +45,9 @@
                 <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,false):''">修改</el-button>
+                        <el-button type="text" size="small" :class="{forbid:scope.row.id != canModiId}" @click="scope.row.id ==canModiId?toEditVersion(scope.row,false):''">修改</el-button>
                         <span style="margin:0 3px;">|</span>
-                        <el-button type="text" size="small" :class="{forbid:scope.row.id !=list[0].id}" @click="scope.row.id ==list[0].id?toEditVersion(scope.row,true):''">复制</el-button>
+                        <el-button type="text" size="small" :class="{forbid:scope.row.id != canModiId}" @click="scope.row.id ==canModiId?toEditVersion(scope.row,true):''">复制</el-button>
                     </template>
                 </el-table-column>
                 <el-table-column
@@ -84,7 +84,9 @@
         total: 0,
         filter: {
           name: ''
-        }
+        },
+        canModiId:null, //标识列表中的第一个可修改和复制项,区分分页和搜索
+        flag:true
       }
     },
     created() {
@@ -116,6 +118,10 @@
             this.list = data.records;
             this.cacheData[param.current] = data.records;
             this.total = data.total;
+            if(this.flag){
+              this.canModiId = this.list[0].id;
+            }
+            this.flag = false;
           }
         }).catch((error) => {
           console.log(error);

二進制
src/images/close-icon.png


+ 1 - 0
src/less/common.less

@@ -43,6 +43,7 @@
   height: 100%;
   .logo {
     width: 100%;
+    min-width: 300px;
     text-align: center;
     color: #fff;
     height: @header-height;

+ 21 - 7
src/routes.js

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

+ 2 - 2
vue.config.js

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