Przeglądaj źródła

医院后端移植v5.04

morphone1995 4 lat temu
rodzic
commit
930a0911c8
33 zmienionych plików z 10895 dodań i 330 usunięć
  1. 274 0
      src/api/cdss.js
  2. 357 204
      src/api/config.js
  3. 1 1
      src/api/index.js
  4. 856 0
      src/components/cdssManage/AddMedicinePrompt.vue
  5. 482 0
      src/components/cdssManage/ChronicDiseaseAdd.vue
  6. 321 0
      src/components/cdssManage/ChronicDiseaseStructureList.vue
  7. 340 0
      src/components/cdssManage/MedicalTerm.vue
  8. 268 0
      src/components/cdssManage/MedicineInfoPg.vue
  9. 412 0
      src/components/cdssManage/MedicinePrompt.vue
  10. 104 0
      src/components/cdssManage/correlation/Correlation.vue
  11. 415 0
      src/components/cdssManage/dept/AddDept.vue
  12. 467 0
      src/components/cdssManage/dept/DeptManage.vue
  13. 432 0
      src/components/cdssManage/disease/AddDisease.vue
  14. 445 0
      src/components/cdssManage/disease/Disease.vue
  15. 427 0
      src/components/cdssManage/drug/AddDrug.vue
  16. 456 0
      src/components/cdssManage/drug/DrugManage.vue
  17. 405 0
      src/components/cdssManage/fusion/AddFusion.vue
  18. 453 0
      src/components/cdssManage/fusion/Fusion.vue
  19. 13 0
      src/components/cdssManage/hospital/AddHospitai.vue
  20. 13 0
      src/components/cdssManage/hospital/Hospital.vue
  21. 13 0
      src/components/cdssManage/hospitalUser/AddHospitalUser.vue
  22. 13 0
      src/components/cdssManage/hospitalUser/HospitalUser.vue
  23. 469 0
      src/components/cdssManage/lis/AddLis.vue
  24. 460 0
      src/components/cdssManage/lis/Lis.vue
  25. 405 0
      src/components/cdssManage/operation/AddOperation.vue
  26. 459 0
      src/components/cdssManage/operation/Operation.vue
  27. 405 0
      src/components/cdssManage/pacs/AddPacs.vue
  28. 454 0
      src/components/cdssManage/pacs/Pacs.vue
  29. 644 0
      src/components/cdssManage/plan/AddPlan.vue
  30. 438 0
      src/components/cdssManage/plan/Plan.vue
  31. 0 0
      src/components/cdssManage/version/version.vue
  32. 23 0
      src/less/admin.less
  33. 171 125
      src/routes.js

+ 274 - 0
src/api/cdss.js

@@ -0,0 +1,274 @@
+import axios from 'axios';
+import config from '@api/config.js';
+const urls = config.urls;
+export default {
+  getTremList(param) {
+    return axios.post(urls.getConceptKnowledgeCDSS, param);
+  },
+  getAllConcept(param) {
+    //医学术语--获取所有概念(标准术语)
+    return axios.post(urls.getAllConceptCDSS, param);
+  },
+  saveTermPrompts(param) {
+    return axios.post(urls.saveConceptInfoCDSS, param);
+  },
+
+  delLisMappingById(param) {
+    //医学数据-化验大小项与公表项维护-单个删除
+    return axios.post(urls.delLisMappingByIdCDSS, param);
+  },
+  getConceptInfoAssay(param) {
+    return axios.post(urls.getConceptInfoAssayCDSS, param); //化验子项-搜索术语
+  },
+  getAllLisConcept(param) {
+    //医学数据-化验大小项与公表项维护-获取所有化验公表项
+    return axios.post(urls.getAllLisConceptCDSS, param);
+  },
+  saveLisMapping(param) {
+    //医学数据-化验大小项与公表项维护-新增
+    return axios.post(urls.saveLisMappingCDSS, param);
+  },
+  hasLisMapping(param) {
+    //医学数据-化验大小项与公表项维护-化验公表项映射是否已存在
+    return axios.post(urls.hasLisMappingCDSS, param);
+  },
+  delConceptInfo(param) {
+    return axios.post(urls.delConceptInfoCDSS, param);
+  },
+  getConceptKnowledgeList(param) {
+    return axios.post(urls.getConceptKnowledgeListCDSS, param);
+  },
+
+
+
+
+  retrievalSearch(param) {
+    // 术语搜索
+    return axios.post(urls.retrievalSearchCDSS, param);
+  },
+  getLisMappingPage(param) {
+    //诊断列表-列表
+    return axios.post(urls.getLisMappingPageCDSS, param);
+  },
+  diseaseIsExistRecord(param) {
+    return axios.post(urls.diseaseIsExistRecordCDSS, param);
+  },
+  saveOrUpdateDiseaseRecord(param) {
+    return axios.post(urls.saveOrUpdateDiseaseRecordCDSS, param);
+  },
+  deleteDiseaseRecord(param) {
+    return axios.post(urls.deleteDiseaseRecordCDSS, param);
+  },
+  exportDiseaseRecord(param) {
+    return axios.post(urls.exportDiseaseRecordCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  importDiseaseRecord(param) {
+    return axios.post(urls.importDiseaseRecordCDSS, param);
+  },
+
+
+
+  getLisPage(param) {
+    //检验列表-列表
+    return axios.post(urls.getLisPageCDSS, param);
+  },
+  lisIsExistRecord(param) {
+    return axios.post(urls.lisIsExistRecordCDSS, param);
+  },
+  saveOrUpdateLisRecord(param) {
+    return axios.post(urls.saveOrUpdateLisRecordCDSS, param);
+  },
+  deleteLisRecord(param) {
+    return axios.post(urls.deleteLisRecordCDSS, param);
+  },
+  exportLisRecord(param) {
+    return axios.post(urls.exportLisRecordCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  importLisRecord(param) {
+    return axios.post(urls.importLisRecordCDSS, param);
+  },
+  getpacsPage(param) {
+    //检查列表-列表
+    return axios.post(urls.getpacsPageCDSS, param);
+  },
+  pacsIsExistRecord(param) {
+    return axios.post(urls.pacsIsExistRecordCDSS, param);
+  },
+  saveOrUpdatePacsRecord(param) {
+    return axios.post(urls.saveOrUpdatePacsRecordCDSS, param);
+  },
+  deletePacsRecord(param) {
+    return axios.post(urls.deletePacsRecordCDSS, param);
+  },
+  exportPacsRecord(param) {
+    return axios.post(urls.exportPacsRecordCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  importPacsRecord(param) {
+    return axios.post(urls.importPacsRecordCDSS, param);
+  },
+  getDrugPage(param) {
+    //药品列表-列表
+    return axios.post(urls.getDrugPageCDSS, param);
+  },
+  drugIsExistRecord(param) {
+    return axios.post(urls.drugIsExistRecordCDSS, param);
+  },
+  saveOrUpdateDrugRecord(param) {
+    return axios.post(urls.saveOrUpdateDrugRecordCDSS, param);
+  },
+  deleteDrugRecord(param) {
+    return axios.post(urls.deleteDrugRecordCDSS, param);
+  },
+  exportDrugRecord(param) {
+    return axios.post(urls.exportDrugRecordCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  importDrugRecord(param) {
+    return axios.post(urls.importDrugRecordCDSS, param);
+  },
+  getOperationPage(param) {
+    //手术/操作列表-列表
+    return axios.post(urls.getOperationPageCDSS, param);
+  },
+  operationIsExistRecord(param) {
+    return axios.post(urls.operationIsExistRecordCDSS, param);
+  },
+  saveOrUpdateOperationRecord(param) {
+    return axios.post(urls.saveOrUpdateOperationRecordCDSS, param);
+  },
+  deleteOperationRecord(param) {
+    return axios.post(urls.deleteOperationRecordCDSS, param);
+  },
+  exportOperationRecord(param) {
+    return axios.post(urls.exportOperationRecordCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  importOperationRecord(param) {
+    return axios.post(urls.importOperationRecordCDSS, param);
+  },
+  getFusionPage(param) {
+    //输血列表-列表
+    return axios.post(urls.getFusionPageCDSS, param);
+  },
+  fusionIsExistRecord(param) {
+    return axios.post(urls.fusionIsExistRecordCDSS, param);
+  },
+  saveOrUpdateFusionRecord(param) {
+    return axios.post(urls.saveOrUpdateFusionRecordCDSS, param);
+  },
+  deleteFusionRecord(param) {
+    return axios.post(urls.deleteFusionRecordCDSS, param);
+  },
+  exportFusionRecord(param) {
+    return axios.post(urls.exportFusionRecordCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  importFusionRecord(param) {
+    return axios.post(urls.importFusionRecordCDSS, param);
+  },
+  getDeptPage(param) {
+    //科室列表-列表
+    return axios.post(urls.getDeptPageCDSS, param);
+  },
+  deptIsExistRecord(param) {
+    return axios.post(urls.deptIsExistRecordCDSS, param);
+  },
+  saveOrUpdateDeptRecord(param) {
+    return axios.post(urls.saveOrUpdateDeptRecordCDSS, param);
+  },
+  deleteDeptRecord(param) {
+    return axios.post(urls.deleteDeptRecordCDSS, param);
+  },
+  exportDeptRecord(param) {
+    return axios.post(urls.exportDeptRecordCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  importDeptRecord(param) {
+    return axios.post(urls.importDeptRecordCDSS, param);
+  },
+  exportDeptModule(param) {
+    return axios.post(urls.exportDeptModuleCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+
+  exportDiseaseModule(param) {
+    return axios.post(urls.exportDiseaseModuleCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  exportLisModule(param) {
+    return axios.post(urls.exportLisModuleCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  exportPacsModule(param) {
+    return axios.post(urls.exportPacsModuleCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  exportDrugModule(param) {
+    return axios.post(urls.exportDrugModuleCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  exportOperationModule(param) {
+    return axios.post(urls.exportOperationModuleCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+  exportFusionModule(param) {
+    return axios.post(urls.exportFusionModuleCDSS, param, {
+      responseType: 'blob',
+    });
+  },
+
+
+
+  getHospitalInfo(param) {
+    return axios.post(urls.getHospitalInfoCDSS, param);
+  },
+  saveHospitalInfoRecord(param) {
+    return axios.post(urls.saveHospitalInfoRecordCDSS, param);
+  },
+
+
+  getPlanInfoPages(param) {
+    //分页获取方案配置信息
+    return axios.post(urls.getPlanInfoPagesCDSS, param);
+  },
+  getDefaultPlans(param) {
+    return axios.post(urls.getDefaultPlansCDSS, param);
+  },
+  savePlanInfoDatas(param) {
+    return axios.post(urls.savePlanInfoDatasCDSS, param);
+  },
+  cancelPlanDatas(param) {
+    return axios.post(urls.cancelPlanDatasCDSS, param);
+  },
+  getPlanInfoIds(param) {
+    return axios.post(urls.getPlanInfoIdsCDSS, param);
+  },
+  revStopPlans(param) {
+    return axios.post(urls.revStopPlansCDSS, param);
+  },
+
+
+
+  getMappingListPageCDSS(param) {
+    return axios.post(urls.getMappingListPageCDSS, param);
+  },
+  modifyConnectStatusCDSS(param) {
+    return axios.post(urls.modifyConnectStatusCDSS, param);
+  },
+};

+ 357 - 204
src/api/config.js

@@ -2,8 +2,8 @@
 const testUrl = ''
 
 export default {
-  host:'http://192.168.2.241:5050',
-  imgHost:'http://192.168.2.121:82',      //富文本编辑器图片回传地址
+  host: 'http://192.168.2.241:5050',
+  imgHost: 'http://192.168.2.121:82',      //富文本编辑器图片回传地址
   // imgHost:'http://192.168.2.241:82',      //富文本编辑器图片回传地址
   delayTime: 500,
   urls: {
@@ -19,17 +19,17 @@ export default {
     'registry': '/api/user/user/registry',
     'getSmsWithResetPassword': '/api/user/userver/getSmsWithResetPassword',
     'resetPassword': '/api/user/user/resetPassword',
-    'getAccessdMenu': testUrl+'/api/user/user/getUserOrgMenu',  //获取左侧菜单项
-    'getVersionInner':testUrl+'api/knowledgeman/versionInfo/getVersionInfoInner',  //获取内部版本信息
-    'getVersionOuter':'api/knowledgeman/versionInfo/getVersionInfoOuter',  //获取外部版本信息
+    'getAccessdMenu': testUrl + '/api/user/user/getUserOrgMenu',  //获取左侧菜单项
+    'getVersionInner': testUrl + 'api/knowledgeman/versionInfo/getVersionInfoInner',  //获取内部版本信息
+    'getVersionOuter': 'api/knowledgeman/versionInfo/getVersionInfoOuter',  //获取外部版本信息
     'getUserEnumsData': '/api/user/getUserEnumsData',   //获取用户枚举数据
-    'getDiagbotManEnumsData':'/api/diagbotman/getDiagbotManEnumsData',      //获取产品枚举类型
-    'saveUserOper':'/api/diagbotman/optInfo/save',    //保存用户记录
+    'getDiagbotManEnumsData': '/api/diagbotman/getDiagbotManEnumsData',      //获取产品枚举类型
+    'saveUserOper': '/api/diagbotman/optInfo/save',    //保存用户记录
     /* 朗通后台相关接口 */
     'getUserAuthenticationStatus': '/api/user/userAuthentication/getUserAuthenticationStatus',         //获取用户认证状态
-		'getPersonInfo':'/api/user/user/getPersonInfo',
-		'updatePersonInfo':'/api/user/user/updatePersonInfo',
-		'midifyPassword':'/api/user/user/midifyPassword',
+    'getPersonInfo': '/api/user/user/getPersonInfo',
+    'updatePersonInfo': '/api/user/user/updatePersonInfo',
+    'midifyPassword': '/api/user/user/midifyPassword',
     'queryUserInfo': '/api/user/userInfo/queryUserInformation', //注册用户
     'exportUserInfo': '/api/user/report/exportUserInfo', //导出用户信息
     'exportKema': '/api/user/report/exportKema', //导出认证中用户
@@ -37,11 +37,11 @@ export default {
     'renewalsInfos': '/api/diagbotman/userRenewals/renewalsInfos', // 续费列表
     'modifyOpeningTime': '/api/diagbotman/productOrder/modifyOpeningTime', //确定续费
     'deleteRenewalsInfos': '/api/diagbotman/userRenewals/cancelRenewalsInfos', //取消续费
-    'getOrganizationInfo':'/api/user/userInfo/queryMechanismInformation',//获取机构信息
-    'addOrganization':'/api/user/userInfo/addOrganization',//添加机构信息
-    'modifineOrganization':'/api/user/userInfo/updateOrganizations',//修改机构信息
-		'getuserAuthenticationInfo' : '/api/user/userAuthentication/getuserAuthenticationInfo',
-		'userAuthentication':'/api/user/userAuthentication/userAuthentication',   //用户认证
+    'getOrganizationInfo': '/api/user/userInfo/queryMechanismInformation',//获取机构信息
+    'addOrganization': '/api/user/userInfo/addOrganization',//添加机构信息
+    'modifineOrganization': '/api/user/userInfo/updateOrganizations',//修改机构信息
+    'getuserAuthenticationInfo': '/api/user/userAuthentication/getuserAuthenticationInfo',
+    'userAuthentication': '/api/user/userAuthentication/userAuthentication',   //用户认证
     'waitExamOrderCou': '/api/diagbotman/productOrder/waitExamOrderCou',
     'waitAuthen': '/api/user/userAuthentication/waitAuthen',
     'getAllProductOrder': '/api/diagbotman/productOrder/getAllProductOrder',  //获取产品线列表
@@ -50,23 +50,23 @@ export default {
     'getOrgList': '/api/user/userInfo/findOrganization',      //获取未绑定超管的机构列表
     'exportProductOrderInfo': '/api/diagbotman/reporExcel/exportProductOrderInfo',  //导出产品线列表
     'exportAdminInfo': '/api/user/report/exportUserInfo',         //导出超管信息
-    'auditUserInfoAll':'/api/user/userInfo/auditUserInfoAllNopass',     //超管审核不通过
-    'auditUserInfoAllPass':'/api/user/userInfo/auditUserInfoAllPass',     //超管审核通过
-    'getAuthenticated':'/api/user/userInfo/queryVerifiedUserOrganizationProduct',  //已认证超管信息    //获取已认证超管信息
-    'getProductLinesManage':'/api/diagbotman/diagLantoneProduct/selectProduct',  //产品线管理列表,
-    'delProductLine':'/api/diagbotman/diagLantoneProduct/deleteProduct',  //产品线删除
-    'updateServiceStatus':'/api/diagbotman/diagLantoneProduct/updateServiceStatus',    //产品线启用停用
-    'exportAuthedAdmin':'/api/user/report/exportVerified',   //导出已认证超管
-    'delSuperAdmin':'/api/user/userInfo/updateDeleted',     //删除已认证超管
-    'updateUserInfoAll':'/api/user/userInfo/updateUserInfo',  //修改超管
-    'startAndendByuserId':'/api/diagbotman/productOrder/startAndendByuserId',    //已认证超管展开-启用停用
-    'delInformationAvailable':'/api/diagbotman/productOrder/delInformationAvailable',   //已认证超管展开-删除
-    'auditProductStatus':'/api/diagbotman/diagOrderDetails/auditStatus',   //产品线审核
-    'addProductLine':'/api/diagbotman/diagLantoneProduct/addProducts',    //添加产品线
-    'editProductLine':'/api/diagbotman/diagLantoneProduct/updateProduct',       //修改产品线
-    'getProductDetail':'/api/diagbotman/diagLantoneProduct/opendedProduct',    //产品线详情
-    'contineBuy':'/api/diagbotman/productOrder/modifyOpeningTime',    //已认证超管-续费
-    'proDetails':'/api/diagbotman/diagOrderDetails/getAllOrderDetials',      //产品申请-详情
+    'auditUserInfoAll': '/api/user/userInfo/auditUserInfoAllNopass',     //超管审核不通过
+    'auditUserInfoAllPass': '/api/user/userInfo/auditUserInfoAllPass',     //超管审核通过
+    'getAuthenticated': '/api/user/userInfo/queryVerifiedUserOrganizationProduct',  //已认证超管信息    //获取已认证超管信息
+    'getProductLinesManage': '/api/diagbotman/diagLantoneProduct/selectProduct',  //产品线管理列表,
+    'delProductLine': '/api/diagbotman/diagLantoneProduct/deleteProduct',  //产品线删除
+    'updateServiceStatus': '/api/diagbotman/diagLantoneProduct/updateServiceStatus',    //产品线启用停用
+    'exportAuthedAdmin': '/api/user/report/exportVerified',   //导出已认证超管
+    'delSuperAdmin': '/api/user/userInfo/updateDeleted',     //删除已认证超管
+    'updateUserInfoAll': '/api/user/userInfo/updateUserInfo',  //修改超管
+    'startAndendByuserId': '/api/diagbotman/productOrder/startAndendByuserId',    //已认证超管展开-启用停用
+    'delInformationAvailable': '/api/diagbotman/productOrder/delInformationAvailable',   //已认证超管展开-删除
+    'auditProductStatus': '/api/diagbotman/diagOrderDetails/auditStatus',   //产品线审核
+    'addProductLine': '/api/diagbotman/diagLantoneProduct/addProducts',    //添加产品线
+    'editProductLine': '/api/diagbotman/diagLantoneProduct/updateProduct',       //修改产品线
+    'getProductDetail': '/api/diagbotman/diagLantoneProduct/opendedProduct',    //产品线详情
+    'contineBuy': '/api/diagbotman/productOrder/modifyOpeningTime',    //已认证超管-续费
+    'proDetails': '/api/diagbotman/diagOrderDetails/getAllOrderDetials',      //产品申请-详情
     /* 用户后台相关接口 */
     'getTrialProduct': '/api/diagbotman/morServices/showProductInfo',//更多服务
     'exportOrganizeInfo': '/api/user/report/exportOrganization',//导出机构信息
@@ -96,7 +96,7 @@ export default {
     'getTagList': 'api/icssman/questionInfo/list', //标签列表
     'searchTagList': 'api/icssman/questionInfo/index', //标签池检索
     'detailsTagList': 'api/icssman/questionInfo/getByIds', //根据多个标签ID返回标签内容
-    'detailsTag':'api/icssman/questionInfo/getById',      //根据标签ID返回标签内容
+    'detailsTag': 'api/icssman/questionInfo/getById',      //根据标签ID返回标签内容
     'getDeptInfo': 'api/icssman/deptInfo/getDeptInfo', //科室维护
     'getDeptInfoDetials': 'api/icssman/deptInfo/getDeptInfoDetials', //科室维护-详情
     'deleteDeptInfo': 'api/icssman/deptInfo/deleteDeptInfo', //科室维护-删除
@@ -104,12 +104,12 @@ export default {
     'modifDeptInfo': 'api/icssman/deptInfo/updateDeptInfo', //科室维护-修改
     'saveOrUpdate': 'api/icssman/questionInfo/saveOrUpdate', //添加标签保存
     'deleteTagGroup': 'api/icssman/questionInfo/delete', //删除标签组
-    'getPromptList':'api/icssman/introduceInfo/getIntroducePage',//提示信息列表
-    'addPromptInfo':'api/icssman/introduceInfo/saveIntroduce',//新增提示信息
-    'delPromptInfo':'api/icssman/introduceInfo/deleteRecord',//删除提示信息
-    'PromptInfoDetail':'api/icssman/introduceInfo/getIntroduceById',//提示信息详情
-    'getIcssEnumsData':'api/icssman/getIcssEnumsData',//icss枚举
-	  'similarName': 'api/icssman/retrieval/retrievalList', //别名维护
+    'getPromptList': 'api/icssman/introduceInfo/getIntroducePage',//提示信息列表
+    'addPromptInfo': 'api/icssman/introduceInfo/saveIntroduce',//新增提示信息
+    'delPromptInfo': 'api/icssman/introduceInfo/deleteRecord',//删除提示信息
+    'PromptInfoDetail': 'api/icssman/introduceInfo/getIntroduceById',//提示信息详情
+    'getIcssEnumsData': 'api/icssman/getIcssEnumsData',//icss枚举
+    'similarName': 'api/icssman/retrieval/retrievalList', //别名维护
     'delSimilarName': 'api/icssman/retrieval/delRetrievalsByQuesId', //别名维护-删除
     'similarNameDetl': 'api/icssman/retrieval/getRetrievalsByTag', //别名维护-详情
     'addSimilarName': 'api/icssman/retrieval/addTagRetrieval', //别名维护-添加、修改
@@ -117,8 +117,8 @@ export default {
     'searchLable': 'api/icssman/questionInfo/indexRev', //标签检索--过滤别名?
     'uploadFile': 'api/icssman/retrieval/retrievalExcelIm', //别名维护-导入
     'commonSymptomList': 'api/icssman/questionUsual/getDeptInfos', //常见症状维护-常见症状列表
-    'getDepartmentList':'api/icssman/questionUsual/getDeptName', //常见症状维护-科室列表
-    'getSymptomList':'api/icssman/questionUsual/getQuestionInfo', //常见科室症状维护--获取症状列表
+    'getDepartmentList': 'api/icssman/questionUsual/getDeptName', //常见症状维护-科室列表
+    'getSymptomList': 'api/icssman/questionUsual/getQuestionInfo', //常见科室症状维护--获取症状列表
     'addCommonSymptom': 'api/icssman/questionUsual/addQuestionUsual',  //常见科室症状维护--添加科室症状
     'getCommonSymptomById': 'api/icssman/questionUsual/getQuestionUsualByDept', //常见科室症状维护--修改、详情
     'delCommonSymptom': 'api/icssman/questionUsual/deleteQuestionUsual',  //常见科室症状维护--删除科室症状
@@ -138,13 +138,13 @@ export default {
     '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/conceptDetail/page', //  术语静态知识列表
-    'getConceptKnowledge':'/api/knowledgeman/conceptDetail/getByConceptId',//术语静态知识详情
-    'getConceptInfo':'/api/knowledgeman/concept/getConceptInfo', //  搜索术语
+    '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/conceptDetail/page', //  术语静态知识列表
+    'getConceptKnowledge': '/api/knowledgeman/conceptDetail/getByConceptId',//术语静态知识详情
+    'getConceptInfo': '/api/knowledgeman/concept/getConceptInfo', //  搜索术语
     // 'versionInfo': 'api/icssman/versionInfo/getVersionInfoAlls', //版本信息
     'versionInfo': 'api/knowledgeman/versionInfo/getVersionInfoAlls', //版本信息
     'addVersInfo': 'api/knowledgeman/versionInfo/saveVersionInfoAlls', //版本信息-添加
@@ -153,11 +153,11 @@ export default {
     'addVersionInfo': 'api/knowledgeman/versionDetail/addVersionDetails', //版本信息-添加版本说明
     'modiVersionInfo': 'api/knowledgeman/versionDetail/updateVersionDetails', //版本信息-修改版本说明
     'getVersionDetlInfo': 'api/knowledgeman/versionDetail/getDetailById', //版本信息-版本说明列表获取
-    'promptServer':'/api/knowledgeman/file/uploadImage',    //静态知识富文本图片上传
+    'promptServer': '/api/knowledgeman/file/uploadImage',    //静态知识富文本图片上传
     /**************医学术语维护****************/
-    'getKnowledgeEnums':testUrl+'/api/knowledgeman/getKlmEnumsData', //术语库枚举
-	  'saveConceptInfo':'/api/knowledgeman/conceptDetail/insertOrUpdate',   //保存术语静态知识
-    'delConceptInfo':'/api/knowledgeman/conceptDetail/delete',   //删除术语静态知识
+    'getKnowledgeEnums': testUrl + '/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', //医学术语-类型列表
@@ -179,8 +179,8 @@ export default {
     'getMedicalInfoDetail': '/api/knowledgeman/medical/getMedicalInfoDetail', //医学术语--属性维护--属性详情
     'addMedicalInfo': '/api/knowledgeman/medical/addMedicalInfo', //医学术语--属性维护--术语医学属性添加或者编辑
     'removeMedicalInfo': '/api/knowledgeman/medical/removeMedicalInfo', //医学术语--属性维护--术语医学属性删除
-    'getAllLexiconRelationship':'/api/knowledgeman/lexicon/getAllLexicon', //医学术语--获取所有关系类型
-    'getAllConcept':'/api/knowledgeman/conceptDetail/index',   //医学术语--获取所有概念(标准术语)
+    'getAllLexiconRelationship': '/api/knowledgeman/lexicon/getAllLexicon', //医学术语--获取所有关系类型
+    'getAllConcept': '/api/knowledgeman/conceptDetail/index',   //医学术语--获取所有概念(标准术语)
     'getAllBodypart': '/api/knowledgeman/bodypart/getAllBodypart',  //医学术语--获取所有部位
     'getAllDepts': '/api/knowledgeman/medical/getAllDepts',  //医学术语--获取所有科室
     'getLisMappingPage': '/api/knowledgeman/lisMapping/getLisMappingPage', //医学数据-化验大小项与公表项维护-列表
@@ -191,25 +191,25 @@ export default {
     'hasLisMapping': '/api/knowledgeman/lisMapping/hasLisMapping',  //医学数据-化验大小项与公表项维护-化验公表项映射是否已存在
     'getTypeList': 'api/knowledgeman/lexicon/getLexiconList', //术语类型-列表
     'addType': 'api/knowledgeman/lexicon/addLexicon', //术语类型-添加
-    'getAllLisConcept':'api/knowledgeman/concept/getAllLisConcept',  //医学数据-化验大小项与公表项维护-获取所有化验公表项
-    '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',  //医学数据-诊断量表关联维护-删除
+    'getAllLisConcept': 'api/knowledgeman/concept/getAllLisConcept',  //医学数据-化验大小项与公表项维护-获取所有化验公表项
+    '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/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': testUrl+'/'+'api/icssman/questionInfo/indexByLexicon',  //知识库标准化-根据名称和术语库词性类型搜索
-    'indexByLexiconStandWord':'api/knowledgeman/commonconcept/indexByLexicon',  //知识库标准化-根据名称搜索
+    'indexByLexicon': testUrl + '/' + 'api/icssman/questionInfo/indexByLexicon',  //知识库标准化-根据名称和术语库词性类型搜索
+    'indexByLexiconStandWord': 'api/knowledgeman/commonconcept/indexByLexicon',  //知识库标准化-根据名称搜索
     'getAssaySon': 'api/knowledgeman/lisSonContact/lisSonContactList',  //化验子项维护
     'getAssaySonDetail': 'api/knowledgeman/lisSonContact/relationContactDetail',  //化验子项维护-详情
     'getConceptInfoAssay': '/api/knowledgeman/concept/getAllForRelation',  //化验子项维护-搜索术语
@@ -233,149 +233,302 @@ export default {
     'assistCheckPacsAddPacsRelation': '/api/knowledgeman/pacsSonContact/addPacsRelation', //医学术语维护-辅检子项维护-添加或编辑
     'assistCheckGetPacsContactDetail': '/api/knowledgeman/pacsSonContact/getPacsContactDetail', //医学术语维护-辅检子项维护-详情
     'assistCheckRemoveRelationPacs': '/api/knowledgeman/pacsSonContact/removeRelationPacs', //医学术语维护-辅检子项维护-删除或恢复
-    
 
-	  /*********预问诊相关接口**********/
-	  'questionList':testUrl+'/api/precman/questionInfo_prec/page',     //预问诊-填写单列表
-    'questionAdd':testUrl+'/api/precman/questionInfo_prec/saveOrUpdate',      //预问诊-填写单添加
-    'questionSearch':testUrl+'/api/precman/questionInfo_prec/index',    //预问诊-填写单检索
-    'preTypeList':testUrl+'/api/precman/dictionaryInfo_prec/getList',   //类型枚举
-    'questionDel':'/api/precman/questionInfo_prec/delete',      //删除
-    'uploadImg':'/api/precman/file_prec/uploadImage',       //图片上传
-    'fileDel':'/api/precman/file_prec/deleteRemoteFile',          //图片删除
-    'questionDetail':testUrl+'/api/precman/questionInfo_prec/getById',                //填写单详情
-    'moduleList':testUrl+'/api/precman/moduleInfo_prec/getModuleInfoList',        //模板列表
-    'addModule':'/api/precman/moduleInfo_prec/saveOrUpdateModuleInfo',        //模板添加
-    'delModule':'/api/precman/moduleInfo_prec/delete',        //模板删除
-    'moduleDetail':'/api/precman/moduleInfo_prec/getModuleInfoOne',    //模板详情
-    'deptList':testUrl+'/api/precman/moduleInfo_prec/getAllDeptAndDisInfo',    //模板-科室列表
-    'getPrecModuleType':testUrl+'/api/precman/moduleInfo_prec/getModuleType',     //获取未创建的模板类型
-    'getByIds':'/api/prec/questionInfo/getByIds',// 获取多个问题
-    'getBySubQuestionId':testUrl+'/api/precman/questionInfo_prec/getBySubQuestionId',// 获取是否被关联
-     /*********诊断依据*********/
-     'exportDiagnosticAll': '/api/knowledgeman/diagnose/exportDiagnosticAll', //诊断依据--导出诊断依据
-     'exportDiagnosticBasis': '/api/knowledgeman/diagnose/exportDiagnosticBasis', //诊断依据--导出诊断依据问题
-     'importDiagnosticBasis': '/api/knowledgeman/diagnose/importDiagnosticBasis', //诊断依据--导入诊断依据数据
-     'queryQuestionPage': '/api/knowledgeman/diagnoseQuestion/queryQuestionPage', //诊断依据--问题词分页查询
-     'diagBaseDelete': '/api/knowledgeman/diagnose/delete', //诊断依据--删除
-     'diagBaseGetDetail': '/api/knowledgeman/diagnose/getDetail', //诊断依据--获取详情
-     'diagBaseIndex': '/api/knowledgeman/diagnose/index', //诊断依据--诊断检索
-     'diagBasePage': '/api/knowledgeman/diagnose/page', //诊断依据--分页
-     'diagBaseUpdateNeo': '/api/knowledgeman/diagnose/updateNeo', //诊断依据--更新图谱
-     'diagBaseVerifyAllData': '/api/knowledgeman/diagnose/verifyAllData', //诊断依据--校验所有数据
-     'diagBaseVerifyData': '/api/knowledgeman/diagnose/verifyData', //诊断依据--校验数据
-     'tempSaveOrUpate':'/api/knowledgeman/diagnose/tempSaveOrUpate', //诊断依据-临时保存
-     'diagBaseSearch':'/api/knowledgeman/diagnose/search', //诊断依据-搜索标准词或者关联词
-     'getUniqueNameWithList': '/api/knowledgeman/lisMapping/getUniqueNameWithList', //医学数据-查找化验公表名
-      /*********数据统计  *********/
-      'statisticsCount': '/api/bi/statistics/count', //诊断依据--校验数据
-      /*********安全管理  *********/
-      'tokenList': '/api/mrqcman/mrqcToken/list',  // 令牌列表
-      'tokenSaveOrUpdate': '/api/mrqcman/mrqcToken/saveOrUpdate', // 令牌新增或修改
-      'tokenDetails': '/api/mrqcman/mrqcToken/getById', // 令牌明细
-      'tokenDelete': '/api/mrqcman/mrqcToken/delete', // 令牌删除
-      'tokenAnalysis': '/api/mrqcman/mrqcToken/analysis', //解析
-      'rulesList':'/api/knowledgeman/rulePub/pageRulePub',
-      'ruleDetail':'/api/knowledgeman/rulePub/getRulePub',
-      'ruleApplyDetail':'/api/knowledgeman/ruleApp/getRuleApp',
-      'rulesApplyList':'/api/knowledgeman/ruleApp/pageRuleApp',
-      'addRule':'/api/knowledgeman/rulePub/saveRulePub',
-      'ruleTypesList':'/api/knowledgeman/rulePub/pageRulePub',
-      'addRuleApply':'/api/knowledgeman/ruleApp/saveRuleApp',
-      'ruleApplyDelete':'/api/knowledgeman/ruleApp/removeRuleApp',
-      'ruleDelete':'/api/knowledgeman/rulePub/removeRulePub',
 
-      'getRecord':'/api/mrman/arRechome/getAllList',//病历管理
-      'getRecordDetail':'/api/mrman/arRechome/getBABLContent',//病历管理--病历详情
-      'saveRecord':'/api/mrman/arRechome/saveBABLContent',  //保存病例
-      'getTypes':'/api/mrman/getMrEnumsData',//枚举类型
-      'getFieldList':"/api/mrman/qc/qcQuestionInfo/page",    //获取字段映射列表
-      'getFieldDetail':'/api/mrman/qc/qcQuestionInfo/getById',//获取标签详情
-      'addFieldMatch':"/api/mrman/qc/qcQuestionInfo/saveOrUpdate",    //添加字段映射
-      'getQcTypes':"/api/mrman/qc/dictionaryInfo/getList",    //添加字段映射
-      'delFieldMatch':"/api/mrman/qc/qcQuestionInfo/delete",    //删除字段映射  
-      'getQCTemplist':'/api/mrman/qc/qcModuleInfo/page', // 获取模板列表
-      'saveOrUpdateQCTemp':'/api/mrman/qc/qcModuleInfo/saveOrUpdateModuleInfo', //新增或修改模板
-      'delQCTemp':'/api/mrman/qc/qcModuleInfo/delete', //删除模板
-      'getQCTempDetail':'/api/mrman/qc/qcModuleInfo/getById', //获取模板详情
-      'getQCName':'/api/mrman/qc/qcQuestionInfo/index', //获取字段名称
-      'getQcFlawList':'/api/mrman/qcCasesEntry/indexCaseEntry',   //获取缺陷列表
-      'getModuleTypeList':'/api/mrman/qc/qcModuleInfo/index', //获取模块类型列表
-      'getRecordInpList':'/api/mrman/qcInputcases/getAllInputcases',//获取全部病历录入
-      'removeRecordInpById':'/api/mrman/qcInputcases/cancelById',//删除病历录入
-      'addRecordInp':'/api/mrman/qcInputcases/saveOrUpdata', //保存和修改全部病历录入 
-      'getRecordInpModule':'/api/mrman/qcCases/getAll', //获取全部模块及条目
-      'getRecordInpModuleByHospital':'/api/mrman/qcCases/getAllByHospital', //获取全部模块及条目根据医院名称
-      'getRecordHopitalList':'/api/mrman/qcHospitalInfo/getHospitalInfoAll',//获取医院信息 
-      'getRecordCases':'/api/mrman/qcCases/getCases', //获取全部模块
-      'getRecordIremList': '/api/mrman/qcCasesEntry/getAll', //获取病例条目列表
-      'addRecordItem':'/api/mrman/casesEntryHospital/insertByHospital', //添加病例条目
-      'getRecordByHospital':'/api/mrman/casesEntryHospital/getAllByHospital', //获取指定医院的病例条目 
-      'updateRecordByHospital':'/api/mrman/casesEntryHospital/updateByHospital', //更新指定医院的病例条目 
-      'delRecordItem':'/api/mrman/qcCasesEntry/deleteQcCasesEntry', //删除病例条目
-      'getRecordItemDetail':'/api/mrman/qcCasesEntry/getUpdateInfo', //获取病例详情
-      'getInputcasesDetial':'/api/mrman/qcInputcases/getInputcasesDetial', //获取标注病例详情
-      'gethospitalModuleList': '/api/mrman/qcMode/getModes', //获取医院数据模块
-      'getQcTypeList': '/api/mrman/qc/qcType/page', //获取质控类型列表
-      'addQcType': '/api/mrman/qc/qcType/saveOrUpdate', //新增质控类型
-      'delQcType': '/api/mrman/qc/qcType/delete', //删除质控类型
-      'getQcTypeItem': '/api/mrman/qc/qcType/getEntryByHospital', //获取质控条目
-      'getQcTypeDetail':'/api/mrman/qc/qcType/getById', //获取质控类型明细
-      'getQcEntryTypeList': '/api/mrman/qc/qcEntryType/page', //质控条目与质控类型关系--分页列表
-      'getQcEntryTypeDetail': '/api/mrman/qc/qcEntryType/getById', //质控条目与质控类型关系--根据entryId和医院id返回内容
-      'getQcEntryTypeByHospital': '/api/mrman/qc/qcEntryType/getTypeByHospital', //质控条目与质控类型关系--根据医院获取质控类型列表
-      'getQcEntryTypeIndex': '/api/mrman/qc/qcEntryType/index', //质控条目与质控类型关系--根据医院和条目检索未被选择的质控类型
-      'saveQcEntryType': '/api/mrman/qc/qcEntryType/saveOrUpdate', //质控条目与质控类型关系--保存
-      'getStdList':'/api/mrman/stdBehospitalInfo/getSthospitalInfoPage' ,//标准病例列表
-      'delStdRecord':'/api/mrman/stdBehospitalInfo/clearSthospitalInfo',//删除标准病例
-      'updateStdRecord':'/api/mrman/stdBehospitalInfo/updataSthospitalInfo',//更新标准病例
-      'findStdRecord':'/api/mrman/stdBehospitalInfo/findSthospitalInfo',//查找标准病例
-      'getStdDeptList':'/api/mrman/medBehospitalInfo/findhospitalDept', //获取科室列表
-      'getTestItems':'/api/mrman/stdBehospitalInfo/getStatistic',     //获取病例条目统计
-      'addTask':'/api/mrman/stdMissionDetail/addMissionDetail',   //添加任务
-      'getTaskList':'/api/mrman/stdMissionInfo/getMissionInfoPage',   //获取任务列表
-      'delTask':'/api/mrman/stdMissionInfo/clearMissionInfo',   //获取任务列表
-      'editTask':'/api/mrman/stdMissionInfo/getMissionInfoPage',   //获取任务列表
-      'getTaskDetailList':'/api/mrman/stdMissionDetail/getMissionDetailPage',   //获取任务详情列表
-      'getTaskDetail':'/api/mrman/stdMissionDetail/getMissionDetailPage',   //获取单个任务详情
-      'editTaskDetail':'/api/mrman/stdMissionDetail/updateMissionDetail',   //任务详情修改
-      'delTaskDetail':'/api/mrman/stdMissionDetail/clearMissionDetail',     //任务详情删除
-      'autoTest':'/api/mrman/stdBehospitalInfo/analyze',  //自动化测试
-      'saveDefaultModuleInfo': '/api/mrman/qc/qcModuleInfo/saveDefaultModuleInfo',  //模板列表首页
-      'ControModuleInfo': '/api/mrman/qc/qcType/ControModuleInfo',  //指控类型列表首页
-      
+    /*********预问诊相关接口**********/
+    'questionList': testUrl + '/api/precman/questionInfo_prec/page',     //预问诊-填写单列表
+    'questionAdd': testUrl + '/api/precman/questionInfo_prec/saveOrUpdate',      //预问诊-填写单添加
+    'questionSearch': testUrl + '/api/precman/questionInfo_prec/index',    //预问诊-填写单检索
+    'preTypeList': testUrl + '/api/precman/dictionaryInfo_prec/getList',   //类型枚举
+    'questionDel': '/api/precman/questionInfo_prec/delete',      //删除
+    'uploadImg': '/api/precman/file_prec/uploadImage',       //图片上传
+    'fileDel': '/api/precman/file_prec/deleteRemoteFile',          //图片删除
+    'questionDetail': testUrl + '/api/precman/questionInfo_prec/getById',                //填写单详情
+    'moduleList': testUrl + '/api/precman/moduleInfo_prec/getModuleInfoList',        //模板列表
+    'addModule': '/api/precman/moduleInfo_prec/saveOrUpdateModuleInfo',        //模板添加
+    'delModule': '/api/precman/moduleInfo_prec/delete',        //模板删除
+    'moduleDetail': '/api/precman/moduleInfo_prec/getModuleInfoOne',    //模板详情
+    'deptList': testUrl + '/api/precman/moduleInfo_prec/getAllDeptAndDisInfo',    //模板-科室列表
+    'getPrecModuleType': testUrl + '/api/precman/moduleInfo_prec/getModuleType',     //获取未创建的模板类型
+    'getByIds': '/api/prec/questionInfo/getByIds',// 获取多个问题
+    'getBySubQuestionId': testUrl + '/api/precman/questionInfo_prec/getBySubQuestionId',// 获取是否被关联
+    /*********诊断依据*********/
+    'exportDiagnosticAll': '/api/knowledgeman/diagnose/exportDiagnosticAll', //诊断依据--导出诊断依据
+    'exportDiagnosticBasis': '/api/knowledgeman/diagnose/exportDiagnosticBasis', //诊断依据--导出诊断依据问题
+    'importDiagnosticBasis': '/api/knowledgeman/diagnose/importDiagnosticBasis', //诊断依据--导入诊断依据数据
+    'queryQuestionPage': '/api/knowledgeman/diagnoseQuestion/queryQuestionPage', //诊断依据--问题词分页查询
+    'diagBaseDelete': '/api/knowledgeman/diagnose/delete', //诊断依据--删除
+    'diagBaseGetDetail': '/api/knowledgeman/diagnose/getDetail', //诊断依据--获取详情
+    'diagBaseIndex': '/api/knowledgeman/diagnose/index', //诊断依据--诊断检索
+    'diagBasePage': '/api/knowledgeman/diagnose/page', //诊断依据--分页
+    'diagBaseUpdateNeo': '/api/knowledgeman/diagnose/updateNeo', //诊断依据--更新图谱
+    'diagBaseVerifyAllData': '/api/knowledgeman/diagnose/verifyAllData', //诊断依据--校验所有数据
+    'diagBaseVerifyData': '/api/knowledgeman/diagnose/verifyData', //诊断依据--校验数据
+    'tempSaveOrUpate': '/api/knowledgeman/diagnose/tempSaveOrUpate', //诊断依据-临时保存
+    'diagBaseSearch': '/api/knowledgeman/diagnose/search', //诊断依据-搜索标准词或者关联词
+    'getUniqueNameWithList': '/api/knowledgeman/lisMapping/getUniqueNameWithList', //医学数据-查找化验公表名
+    /*********数据统计  *********/
+    'statisticsCount': '/api/bi/statistics/count', //诊断依据--校验数据
+    /*********安全管理  *********/
+    'tokenList': '/api/mrqcman/mrqcToken/list',  // 令牌列表
+    'tokenSaveOrUpdate': '/api/mrqcman/mrqcToken/saveOrUpdate', // 令牌新增或修改
+    'tokenDetails': '/api/mrqcman/mrqcToken/getById', // 令牌明细
+    'tokenDelete': '/api/mrqcman/mrqcToken/delete', // 令牌删除
+    'tokenAnalysis': '/api/mrqcman/mrqcToken/analysis', //解析
+    'rulesList': '/api/knowledgeman/rulePub/pageRulePub',
+    'ruleDetail': '/api/knowledgeman/rulePub/getRulePub',
+    'ruleApplyDetail': '/api/knowledgeman/ruleApp/getRuleApp',
+    'rulesApplyList': '/api/knowledgeman/ruleApp/pageRuleApp',
+    'addRule': '/api/knowledgeman/rulePub/saveRulePub',
+    'ruleTypesList': '/api/knowledgeman/rulePub/pageRulePub',
+    'addRuleApply': '/api/knowledgeman/ruleApp/saveRuleApp',
+    'ruleApplyDelete': '/api/knowledgeman/ruleApp/removeRuleApp',
+    'ruleDelete': '/api/knowledgeman/rulePub/removeRulePub',
+
+    'getRecord': '/api/mrman/arRechome/getAllList',//病历管理
+    'getRecordDetail': '/api/mrman/arRechome/getBABLContent',//病历管理--病历详情
+    'saveRecord': '/api/mrman/arRechome/saveBABLContent',  //保存病例
+    'getTypes': '/api/mrman/getMrEnumsData',//枚举类型
+    'getFieldList': "/api/mrman/qc/qcQuestionInfo/page",    //获取字段映射列表
+    'getFieldDetail': '/api/mrman/qc/qcQuestionInfo/getById',//获取标签详情
+    'addFieldMatch': "/api/mrman/qc/qcQuestionInfo/saveOrUpdate",    //添加字段映射
+    'getQcTypes': "/api/mrman/qc/dictionaryInfo/getList",    //添加字段映射
+    'delFieldMatch': "/api/mrman/qc/qcQuestionInfo/delete",    //删除字段映射  
+    'getQCTemplist': '/api/mrman/qc/qcModuleInfo/page', // 获取模板列表
+    'saveOrUpdateQCTemp': '/api/mrman/qc/qcModuleInfo/saveOrUpdateModuleInfo', //新增或修改模板
+    'delQCTemp': '/api/mrman/qc/qcModuleInfo/delete', //删除模板
+    'getQCTempDetail': '/api/mrman/qc/qcModuleInfo/getById', //获取模板详情
+    'getQCName': '/api/mrman/qc/qcQuestionInfo/index', //获取字段名称
+    'getQcFlawList': '/api/mrman/qcCasesEntry/indexCaseEntry',   //获取缺陷列表
+    'getModuleTypeList': '/api/mrman/qc/qcModuleInfo/index', //获取模块类型列表
+    'getRecordInpList': '/api/mrman/qcInputcases/getAllInputcases',//获取全部病历录入
+    'removeRecordInpById': '/api/mrman/qcInputcases/cancelById',//删除病历录入
+    'addRecordInp': '/api/mrman/qcInputcases/saveOrUpdata', //保存和修改全部病历录入 
+    'getRecordInpModule': '/api/mrman/qcCases/getAll', //获取全部模块及条目
+    'getRecordInpModuleByHospital': '/api/mrman/qcCases/getAllByHospital', //获取全部模块及条目根据医院名称
+    'getRecordHopitalList': '/api/mrman/qcHospitalInfo/getHospitalInfoAll',//获取医院信息 
+    'getRecordCases': '/api/mrman/qcCases/getCases', //获取全部模块
+    'getRecordIremList': '/api/mrman/qcCasesEntry/getAll', //获取病例条目列表
+    'addRecordItem': '/api/mrman/casesEntryHospital/insertByHospital', //添加病例条目
+    'getRecordByHospital': '/api/mrman/casesEntryHospital/getAllByHospital', //获取指定医院的病例条目 
+    'updateRecordByHospital': '/api/mrman/casesEntryHospital/updateByHospital', //更新指定医院的病例条目 
+    'delRecordItem': '/api/mrman/qcCasesEntry/deleteQcCasesEntry', //删除病例条目
+    'getRecordItemDetail': '/api/mrman/qcCasesEntry/getUpdateInfo', //获取病例详情
+    'getInputcasesDetial': '/api/mrman/qcInputcases/getInputcasesDetial', //获取标注病例详情
+    'gethospitalModuleList': '/api/mrman/qcMode/getModes', //获取医院数据模块
+    'getQcTypeList': '/api/mrman/qc/qcType/page', //获取质控类型列表
+    'addQcType': '/api/mrman/qc/qcType/saveOrUpdate', //新增质控类型
+    'delQcType': '/api/mrman/qc/qcType/delete', //删除质控类型
+    'getQcTypeItem': '/api/mrman/qc/qcType/getEntryByHospital', //获取质控条目
+    'getQcTypeDetail': '/api/mrman/qc/qcType/getById', //获取质控类型明细
+    'getQcEntryTypeList': '/api/mrman/qc/qcEntryType/page', //质控条目与质控类型关系--分页列表
+    'getQcEntryTypeDetail': '/api/mrman/qc/qcEntryType/getById', //质控条目与质控类型关系--根据entryId和医院id返回内容
+    'getQcEntryTypeByHospital': '/api/mrman/qc/qcEntryType/getTypeByHospital', //质控条目与质控类型关系--根据医院获取质控类型列表
+    'getQcEntryTypeIndex': '/api/mrman/qc/qcEntryType/index', //质控条目与质控类型关系--根据医院和条目检索未被选择的质控类型
+    'saveQcEntryType': '/api/mrman/qc/qcEntryType/saveOrUpdate', //质控条目与质控类型关系--保存
+    'getStdList': '/api/mrman/stdBehospitalInfo/getSthospitalInfoPage',//标准病例列表
+    'delStdRecord': '/api/mrman/stdBehospitalInfo/clearSthospitalInfo',//删除标准病例
+    'updateStdRecord': '/api/mrman/stdBehospitalInfo/updataSthospitalInfo',//更新标准病例
+    'findStdRecord': '/api/mrman/stdBehospitalInfo/findSthospitalInfo',//查找标准病例
+    'getStdDeptList': '/api/mrman/medBehospitalInfo/findhospitalDept', //获取科室列表
+    'getTestItems': '/api/mrman/stdBehospitalInfo/getStatistic',     //获取病例条目统计
+    'addTask': '/api/mrman/stdMissionDetail/addMissionDetail',   //添加任务
+    'getTaskList': '/api/mrman/stdMissionInfo/getMissionInfoPage',   //获取任务列表
+    'delTask': '/api/mrman/stdMissionInfo/clearMissionInfo',   //获取任务列表
+    'editTask': '/api/mrman/stdMissionInfo/getMissionInfoPage',   //获取任务列表
+    'getTaskDetailList': '/api/mrman/stdMissionDetail/getMissionDetailPage',   //获取任务详情列表
+    'getTaskDetail': '/api/mrman/stdMissionDetail/getMissionDetailPage',   //获取单个任务详情
+    'editTaskDetail': '/api/mrman/stdMissionDetail/updateMissionDetail',   //任务详情修改
+    'delTaskDetail': '/api/mrman/stdMissionDetail/clearMissionDetail',     //任务详情删除
+    'autoTest': '/api/mrman/stdBehospitalInfo/analyze',  //自动化测试
+    'saveDefaultModuleInfo': '/api/mrman/qc/qcModuleInfo/saveDefaultModuleInfo',  //模板列表首页
+    'ControModuleInfo': '/api/mrman/qc/qcType/ControModuleInfo',  //指控类型列表首页
+
+
+
+
+
+    // 'promptServer': '/sys/file/uploadImage',    //静态知识富文本图片上传
+    // 'midifyPassword': '/sys/user/midifyPassword',    //修改密码
+    'delConceptInfoCDSS': '/api/cdssman/graph/conceptInfo/changeStatus',   //静态知识启用禁用
+    'getConceptKnowledgeListCDSS': '/api/cdssman/graph/conceptInfo/getPage', //  术语静态知识列表
+    'getConceptKnowledgeCDSS': '/api/cdssman/graph/conceptInfo/getRecordById',//术语静态知识详情
+    'isExistCDSS': '/api/cdssman/graph/conceptInfo/isExist',// 静态知识是否存在
+    'saveConceptInfoCDSS': '/api/cdssman/graph/conceptInfo/saveOrUpdateRecord',   //保存术语静态知识
+    'getAllConceptCDSS': '/api/cdssman/graph/conceptInfo/staticKnowledgeIndexWithoutInfo',   //医学术语检索-新增静态知识
+    // 'delLisMappingByIdCDSS': '/api/knowledgeman/lisMapping/delLisMappingById',  //医学数据-化验大小项与公表项维护-单个删除
+    // 'getConceptInfoAssayCDSS': '/api/knowledgeman/concept/getAllForRelation',  //化验子项维护-搜索术语
+    // 'getAllLisConceptCDSS': 'api/knowledgeman/concept/getAllLisConcept',  //医学数据-化验大小项与公表项维护-获取所有化验公表项
+    // 'hasLisMappingCDSS': '/api/knowledgeman/lisMapping/hasLisMapping',  //医学数据-化验大小项与公表项维护-化验公表项映射是否已存在
+
+
+    'getMappingListPageCDSS': '/api/cdssman/hospitalInfo/getMappingListPage',  //获取术语映射统计列表
+
+
+
+    'retrievalSearchCDSS': '/api/cdssman/demo/retrieval/index',   //术语检索
+    'getLisMappingPageCDSS': '/api/cdssman/tran/diseaseConfig/getPage', //诊断列表
+    'diseaseIsExistRecordCDSS': '/api/cdssman/tran/diseaseConfig/isExistRecord',   //诊断-映射关系是否已存在
+    'saveOrUpdateDiseaseRecordCDSS': '/api/cdssman/tran/diseaseConfig/saveOrUpdateRecord',   //诊断-保存或修改映射关系
+    'deleteDiseaseRecordCDSS': '/api/cdssman/tran/diseaseConfig/deleteRecord',   //诊断-删除映射关系
+    'exportDiseaseRecordCDSS': '/api/cdssman/tran/diseaseConfig/exportExcel',   //诊断-数据导出
+    'importDiseaseRecordCDSS': '/api/cdssman/tran/diseaseConfig/importExcel',   //诊断-数据导入
+    'exportDiseaseModuleCDSS': '/api/cdssman/tran/diseaseConfig/exportExcelModule',   //诊断-数据导入模板导出
+
+    'getLisPageCDSS': '/api/cdssman/tran/lisConfig/getPage',   //检验列表
+    'lisIsExistRecordCDSS': '/api/cdssman/tran/lisConfig/isExistRecord',   //检验-映射关系是否已存在
+    'saveOrUpdateLisRecordCDSS': '/api/cdssman/tran/lisConfig/saveOrUpdateRecord',   //检验-保存或修改映射关系
+    'deleteLisRecordCDSS': '/api/cdssman/tran/lisConfig/deleteRecord',   //检验-删除映射关系
+    'exportLisRecordCDSS': '/api/cdssman/tran/lisConfig/exportExcel',   //检验-数据导出
+    'importLisRecordCDSS': '/api/cdssman/tran/lisConfig/importExcel',   //检验-数据导入
+    'exportLisModuleCDSS': '/api/cdssman/tran/lisConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getpacsPageCDSS': '/api/cdssman/tran/pacsConfig/getPage',   //检查列表
+    'pacsIsExistRecordCDSS': '/api/cdssman/tran/pacsConfig/isExistRecord',   //检查-映射关系是否已存在
+    'saveOrUpdatePacsRecordCDSS': '/api/cdssman/tran/pacsConfig/saveOrUpdateRecord',   //检查-保存或修改映射关系
+    'deletePacsRecordCDSS': '/api/cdssman/tran/pacsConfig/deleteRecord',   //检查-删除映射关系
+    'exportPacsRecordCDSS': '/api/cdssman/tran/pacsConfig/exportExcel',   //检查-数据导出
+    'importPacsRecordCDSS': '/api/cdssman/tran/pacsConfig/importExcel',   //检查-数据导入
+    'exportPacsModuleCDSS': '/api/cdssman/tran/pacsConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getDrugPageCDSS': '/api/cdssman/tran/drugConfig/getPage',   //药品列表
+    'drugIsExistRecordCDSS': '/api/cdssman/tran/drugConfig/isExistRecord',   //药品-映射关系是否已存在
+    'saveOrUpdateDrugRecordCDSS': '/api/cdssman/tran/drugConfig/saveOrUpdateRecord',   //药品-保存或修改映射关系
+    'deleteDrugRecordCDSS': '/api/cdssman/tran/drugConfig/deleteRecord',   //药品-删除映射关系
+    'exportDrugRecordCDSS': '/api/cdssman/tran/drugConfig/exportExcel',   //药品-数据导出
+    'importDrugRecordCDSS': '/api/cdssman/tran/drugConfig/importExcel',   //药品-数据导入
+    'exportDrugModuleCDSS': '/api/cdssman/tran/drugConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getOperationPageCDSS': '/api/cdssman/tran/operationConfig/getPage',   //手术/操作列表
+    'operationIsExistRecordCDSS': '/api/cdssman/tran/operationConfig/isExistRecord',   //手术/操作-映射关系是否已存在
+    'saveOrUpdateOperationRecordCDSS': '/api/cdssman/tran/operationConfig/saveOrUpdateRecord',   //手术/操作-保存或修改映射关系
+    'deleteOperationRecordCDSS': '/api/cdssman/tran/operationConfig/deleteRecord',   //手术/操作-删除映射关系
+    'exportOperationRecordCDSS': '/api/cdssman/tran/operationConfig/exportExcel',   //手术/操作-数据导出
+    'importOperationRecordCDSS': '/api/cdssman/tran/operationConfig/importExcel',   //手术/操作-数据导入
+    'exportOperationModuleCDSS': '/api/cdssman/tran/operationConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getFusionPageCDSS': '/api/cdssman/tran/transfusionConfig/getPage',   //输血列表
+    'fusionIsExistRecordCDSS': '/api/cdssman/tran/transfusionConfig/isExistRecord',   //输血-映射关系是否已存在
+    'saveOrUpdateFusionRecordCDSS': '/api/cdssman/tran/transfusionConfig/saveOrUpdateRecord',   //输血-保存或修改映射关系
+    'deleteFusionRecordCDSS': '/api/cdssman/tran/transfusionConfig/deleteRecord',   //输血-删除映射关系
+    'exportFusionRecordCDSS': '/api/cdssman/tran/transfusionConfig/exportExcel',   //输血-数据导出
+    'importFusionRecordCDSS': '/api/cdssman/tran/transfusionConfig/importExcel',   //输血-数据导入
+    'exportFusionModuleCDSS': '/api/cdssman/tran/transfusionConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getDeptPageCDSS': '/api/cdssman/tran/deptConfig/getPage',   //科室列表
+    'deptIsExistRecordCDSS': '/api/cdssman/tran/deptConfig/isExistRecord',   //科室-映射关系是否已存在
+    'saveOrUpdateDeptRecordCDSS': '/api/cdssman/tran/deptConfig/saveOrUpdateRecord',   //科室-保存或修改映射关系
+    'deleteDeptRecordCDSS': '/api/cdssman/tran/deptConfig/deleteRecord',   //科室-删除映射关系
+    'exportDeptRecordCDSS': '/api/cdssman/tran/deptConfig/exportExcel',   //科室-数据导出
+    'importDeptRecordCDSS': '/api/cdssman/tran/deptConfig/importExcel',   //科室-数据导入
+    'exportDeptModuleCDSS': '/api/cdssman/tran/deptConfig/exportExcelModule',   //科室-数据导入模板导出
+
+
+
+    'modifyConnectStatusCDSS': '/api/cdssman/hospitalInfo/modifyConnectStatus',   //医院信息——修改医院信息 
+
+
+    // 'getHospitalInfoCDSS': '/tran/hospitalInfo/getHospitalInfo',   //医院信息——获取医院信息
+    // 'saveHospitalInfoRecordCDSS': '/tran/hospitalInfo/saveRecord',   //医院信息——修改医院信息
+
+    // 'cancelPlanDatas': '/sys/plan/cancelPlanDatas',   //删除方案配置信息
+    // 'getDefaultPlans': '/sys/plan/getDefaultPlans',   //获取默认方案配置
+    // 'getPlanInfoIds': '/sys/plan/getPlanInfoIds',   //根据方案id获取配置信息
+    // 'getPlanInfoPages': '/sys/plan/getPlanInfoPages',   //分页获取方案配置信息
+    // 'getSysPlanInfoDatas': '/sys/plan/getSysPlanInfoDatas',   //根据医院获取方案配置信息
+    // 'revStopPlans': '/sys/plan/revStopPlans',   //停用启用方案配置
+    // 'savePlanInfoDatas': '/sys/plan/savePlanInfoDatas',   //保存更新方案配置信息
+
+
   },
-	menuIconList: { //菜单对应图标
-		'YH-KZT': 'el-icon-menu',
-		'YH-GDFW': 'el-icon-service',
-		'YH-JGZX': 'el-icon-goods',
-		'LT-KHZX': 'el-icon-document',
-		'LT-KZT': 'el-icon-edit-outline',
-		'LT-DDXT': 'el-icon-setting',
-		'LT-CPXGL': 'el-icon-upload',
-		'LT-GRZX': 'el-icon-news'
+  menuIconList: { //菜单对应图标
+    'YH-KZT': 'el-icon-menu',
+    'YH-GDFW': 'el-icon-service',
+    'YH-JGZX': 'el-icon-goods',
+    'LT-KHZX': 'el-icon-document',
+    'LT-KZT': 'el-icon-edit-outline',
+    'LT-DDXT': 'el-icon-setting',
+    'LT-CPXGL': 'el-icon-upload',
+    'LT-GRZX': 'el-icon-news'
   },
   labelTypesMaps: {       //// 归属和填写单类型限制
-    '1':['2','3','4','11'],
-    '3':['2','4','6'],
-    '4':['2','3'],
-    '5':['7'],
-    '6':['9'],
-    '7':['9'],
-    '8':['9']
+    '1': ['2', '3', '4', '11'],
+    '3': ['2', '4', '6'],
+    '4': ['2', '3'],
+    '5': ['7'],
+    '6': ['9'],
+    '7': ['9'],
+    '8': ['9']
   },
-  groupParams:[
-    {controlType:[0,1,2],tagType:[1]},     //多列多选(杂音/初为)     notTagType为文字标签剔除
-    {controlType:[0,1,2,5,6,7,8],tagType:[1]},  //多项统一横铺标签(血压)
-    {controlType:[0,1,2,5,6,7,8,11],tagType:[1,2,3]},  //症状详细(症状尾巴)
-    {controlType:[0,1,2],tagType:[1,4]}, //组合项标签(既往史)
-    {controlType:[0,1,6],tagType:[1]},    //化验组合
-    {controlType:[0,1,2,99],tagType:[1]},   //症状推送类型(添加症状)
+  groupParams: [
+    { controlType: [0, 1, 2], tagType: [1] },     //多列多选(杂音/初为)     notTagType为文字标签剔除
+    { controlType: [0, 1, 2, 5, 6, 7, 8], tagType: [1] },  //多项统一横铺标签(血压)
+    { controlType: [0, 1, 2, 5, 6, 7, 8, 11], tagType: [1, 2, 3] },  //症状详细(症状尾巴)
+    { controlType: [0, 1, 2], tagType: [1, 4] }, //组合项标签(既往史)
+    { controlType: [0, 1, 6], tagType: [1] },    //化验组合
+    { controlType: [0, 1, 2, 99], tagType: [1] },   //症状推送类型(添加症状)
   ],
-  msg:{
-    imgTip:'无法上传图片,图片大小不可超过2M'
+  msg: {
+    imgTip: '无法上传图片,图片大小不可超过2M'
   },
-  pageSizeArr:[10,50,100,500,1000,5000],         //分页每页显示条数选项
-  pageSize:10,      //初始每页显示条数
-  pageLayout:"total,sizes,prev, pager, next, jumper",        //分页组件成分
+  pageSizeArr: [10, 50, 100, 500, 1000, 5000],         //分页每页显示条数选项
+  pageSize: 10,      //初始每页显示条数
+  pageLayout: "total,sizes,prev, pager, next, jumper",        //分页组件成分
+  drugForm: [
+    // { "name": "","val": "0"},
+    { "name": "注射剂", "val": "1" },
+    { "name": "片剂", "val": "2" },
+    { "name": "缓释片", "val": "3" },
+    { "name": "胶囊剂", "val": "4" },
+    { "name": "滴丸剂", "val": "5" },
+  ],
+  contentTypes: [
+    {
+      "name": "静态信息",
+      "key": 1
+    },
+    {
+      "name": "注意事项",
+      "key": 2
+    },
+    {
+      "name": "临床路径",
+      "key": 3
+    },
+    {
+      "name": "一般治疗",
+      "key": 4
+    },
+
+  ],
+  emData: [
+    {
+      "name": "诊断",
+      "key": 1
+    },
+    {
+      "name": "检验套餐",
+      "key": 3
+    },
+    {
+      "name": "检验细项",
+      "key": 4
+    },
+    {
+      "name": "检查",
+      "key": 5
+    },
+    {
+      "name": "药品",
+      "key": 2
+    },
+    {
+      "name": "手术和操作",
+      "key": 6
+    },
+    // {
+    //     "name":"科室",
+    //     "key":18
+    // },
+  ],
 }

+ 1 - 1
src/api/index.js

@@ -3,7 +3,7 @@ import config from './config.js';
 
 axios.default.timeout = 500000;
 axios.defaults.headers.post['Content-Type'] = "application/json;charset=utf-8";
-// axios.defaults.baseURL = 'http://192.168.2.236';
+axios.defaults.baseURL = 'http://192.168.2.236';
 // axios.defaults.baseURL = 'http://192.168.2.241';
 // axios.defaults.baseURL = 'http://192.168.3.117:5050';
 

+ 856 - 0
src/components/cdssManage/AddMedicinePrompt.vue

@@ -0,0 +1,856 @@
+<template>
+  <el-scrollbar style="height: 100%" ref="elscrollbar" id="message-container">
+    <div class="NoiseTemplateWrapper TemplateWrapper knowledgeWrapper">
+      <crumbs
+        :title="'医学术语静态知识维护-'+title"
+        class="topBack"
+        :param="$route.params"
+        linkTo="MedicinePromptCDSS"
+      ></crumbs>
+      <div class="info-container">
+        <el-form :rules="rules" :model="form" label-width="160px" ref="groups">
+          <el-form-item v-if="!isEdit" label="选择标准术语:" prop="selectedTerm">
+            <el-select
+              v-model="form.selectedTerm"
+              filterable
+              remote
+              clearable
+              :loading="showDrop"
+              loading-text="加载中..."
+              @change="changeWord"
+              @visible-change="handleVisible"
+              value-key="conceptId"
+              @clear="handleClear"
+              ref="termName"
+              placeholder="搜索"
+              :remote-method="searchTerms"
+            >
+              <el-option
+                v-for="(term,idx) in terms"
+                :key="idx"
+                :label="term.name+(term.typeName?'('+term.typeName+')':'')"
+                :value="term"
+                :title="term.name+(term.typeName?'('+term.typeName+')':'')"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="已选择标准术语:" label-width="160px">{{form.selectedTermName}}</el-form-item>
+          <el-form-item
+            v-if="form.selectedTerm&&(form.typeId==1||form.typeId==3||form.typeId==4||form.typeId==5)"
+            :label="titleChange"
+            prop="titleChange"
+            label-width="160px"
+          >
+            <el-input v-model="form.titleChange"></el-input>
+          </el-form-item>
+          <p class="line"></p>
+          <InfoParagraph
+            v-for="(f,i) in form.prags"
+            v-if="!upload"
+            :key="(i+1)*10000 + showType"
+            :data="f"
+            :index="i"
+            :total="form.prags.length"
+            :isEdit="isEdit"
+            ref="subForm"
+            @add="addParagraph(i)"
+            @del="delParagraph"
+            @reOrder="reOrder"
+            :showType="showType"
+          ></InfoParagraph>
+          <el-form-item v-if="upload" label="标题名称:" prop="fileTitle" label-width="160px">
+            <el-input v-model="form.fileTitle"></el-input>
+          </el-form-item>
+          <el-form-item
+            v-if="upload"
+            label="上传文件:"
+            ref="upload"
+            prop="fileList"
+            label-width="160px"
+          >
+            <el-upload
+              @mouseenter.native="handleMouseenter"
+              @mouseleave.native="handleMouseleave"
+              class="upload-demo"
+              :action="config.urls.promptServer"
+              name="upfile"
+              :multiple="false"
+              :limit="1"
+              :on-preview="handlePreview"
+              :on-remove="handleRemove"
+              :before-upload="handleBeforeUpLoad"
+              :before-remove="beforeRemove"
+              :on-change="handleChange"
+              :on-success="handleSuccess"
+              :show-file-list="showFileList"
+              :file-list="form.fileList"
+            >
+              <el-button size="small" type="primary" v-if="showUpLoad">点击上传</el-button>
+              <!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
+            </el-upload>
+            <span class="tipInfo" v-show="isShowTip">{{form.fileList[0]&&form.fileList[0].name}}</span>
+            <!-- <el-button size="small" type="primary" >点击上传</el-button> -->
+          </el-form-item>
+          <el-form-item label-width="160px">
+            <div class="uploadInfo" v-if="isSuccessUpload===1">文件上传中,请稍等...</div>
+          </el-form-item>
+        </el-form>
+        <div class="btn">
+          <el-button type="primary" :disabled="saveDisable" @click="submitForm">确 定</el-button>
+        </div>
+      </div>
+    </div>
+  </el-scrollbar>
+</template>
+<script>
+/**
+ *
+ */
+import api from '@api/cdss.js';
+import InfoParagraph from './MedicineInfoPg';
+import config from '@api/config';
+
+export default {
+  name: 'AddMedicinePrompt',
+  components: {
+    InfoParagraph
+  },
+  data() {
+    return {
+      isFixedTop: true,
+      isEdit: false,
+      isCopy: false,
+      title: '添加',
+      termTypes: [],
+      terms: [], //术语列表
+      form: {
+        conceptId: '', //术语id
+        isTip: 0, //是否要覆盖,0不覆盖,1覆盖
+        selectedTerm: '', //术语标签
+        termType: '',
+        typeId: '',
+        selectedTermName: '',
+        selectedTermType: '',
+        // titleChange: '',
+        fileList: [],
+        name: '',
+        prags: [
+          {
+            //单个段落相关
+            title: '',
+            content: '',
+            isReason: 0,
+            orderNo: 0,
+            position: [],
+            text: ''
+          }
+        ],
+        fileTitle: '',
+        titleChange: ''
+      },
+      rules: {
+        selectedTerm: [
+          { required: true, message: '请选择术语标签', trigger: 'change' }
+        ],
+        fileTitle: [
+          { required: true, message: '请输入标题名称', trigger: 'change' },
+          {
+            validator: (rule, value, callback) => {
+              if (value.length > 30) {
+                callback(new Error('标题名称不能超过30字'));
+              } else {
+                callback();
+              }
+            },
+            trigger: 'change'
+          }
+        ],
+        fileList: [
+          { required: true, message: '请上传文件', trigger: 'change' }
+        ],
+        titleChange: [{ max: 30, message: '标题最多30字', trigger: 'change' }]
+      },
+      saveDisable: false, //保存按钮禁止点击
+      showDrop: false, //下拉框显示文字bug1774
+      config: config,
+      showUpLoad: true,
+      showFileList: false,
+      upload: false,
+      showConfirm: true,
+      isSuccessUpload: 0, //是否上传成功  0: 不在上传  1: 上传过程中  2: 上传成功
+      isShowTip: false,
+      showType: -1, // 1 诊断  2  药品   3检验套餐 4检验细项  5检查 6手术和操作
+      editCount: -1, // 页面会否被编辑 >0被编辑   =0 未编辑
+      startCount: -1,
+      isSaveSuccess: false // 是否保存成功
+    };
+  },
+  watch: {
+    showType: {
+      handler(newVal, oldVal) {
+        // console.log('newVal============', newVal, 'oldVal============', oldVal);
+        if (newVal !== oldVal) {
+          this.form.prags = this.form.prags.map(item => {
+            return { ...item, position: [] };
+          });
+        }
+      }
+    },
+    form: {
+      handler(newName, oldName) {
+        this.editCount++;
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  created: function() {
+    const { isEdit, data, isCopy } = this.$route.params;
+    if (isEdit || isCopy) {
+      this.showType = data.type; // 编辑页确认显示类型
+      this.isEdit = isEdit;
+      this.isCopy = isCopy;
+      this.title = isEdit ? '修改' : isCopy ? '复制' : '添加';
+      isEdit && this.changeWord(data);
+      api
+        .getTremList({ id: data.id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            if (this.form.typeId === 82 || this.form.typeId === 83) {
+              // console.log('data',data)
+              this.form.fileList =
+                data &&
+                data.map(it => {
+                  return JSON.parse(it.content);
+                });
+              this.showFileList = true;
+              this.showUpLoad = false;
+            } else {
+              this.conceptId = data.id;
+              this.form.typeId = data.type;
+              this.form.name = data.name;
+              this.form.titleChange =
+                data.type == 1
+                  ? data.clinicalPathwayName
+                  : data.type == 3 || data.type == 4 || data.type == 5
+                  ? data.noticeName
+                  : '';
+              this.form.selectedTermName =
+                data.name + (data.typeName ? '(' + data.typeName + ')' : '');
+              this.form.selectedTerm =
+                data.name + (data.typeName ? '(' + data.typeName + ')' : '');
+              this.form.prags =
+                data &&
+                data.details.map(it => {
+                  return {
+                    title: it.title,
+                    position: this.mapStringToNum(it.contentType),
+                    content: it.content.replace(
+                      /{imageUrlPrefix}/g,
+                      config.imgHost
+                    ),
+                    // isReason:it.isReason,
+                    text: it.text,
+                    disabled: true
+                  };
+                });
+            }
+          }
+        })
+        .catch(error => {
+          if (error.code === '900010001') {
+            return false;
+          }
+          console.log(error);
+        });
+    }
+    setTimeout(() => {
+      this.startCount = this.editCount;
+    }, 500);
+  },
+  mounted() {},
+  beforeRouteLeave(to, from, next) {
+    // if (this.isSuccessUpload === 1) {
+    //   this.$confirm('文件正在上传,是否确定返回?', '提示', {
+    //     confirmButtonText: '确定',
+    //     cancelButtonText: '取消',
+    //     cancelButtonClass: 'cancel',
+    //     type: 'warning'
+    //   })
+    //     .then(() => {
+    //       next();
+    //     })
+    //     .catch(() => {});
+    //   //  this.warning('还有未保存的文件,是否确定返回?');
+    // } else if (this.isSuccessUpload === 2) {
+    //   this.$confirm('还有未保存的文件,是否确定返回?', '提示', {
+    //     confirmButtonText: '确定',
+    //     cancelButtonText: '取消',
+    //     cancelButtonClass: 'cancel',
+    //     type: 'warning'
+    //   })
+    //     .then(() => {
+    //       next();
+    //     })
+    //     .catch(() => {});
+    // } else {
+    //   next();
+    // }
+
+    if (this.startCount !== this.editCount && !this.isSaveSuccess) {
+      this.$confirm('还有未保存的内容,确定要退出当前页面吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'leaveBtn',
+        customClass: 'leaveBox',
+        type: 'warning'
+      })
+        .then(() => {
+          next();
+        })
+        .catch(() => {});
+    } else {
+      next();
+    }
+  },
+  methods: {
+    handleClear() {
+      this.form.selectedTermName = '';
+      this.form.selectedTerm = '';
+      this.form.titleChange = '';
+      // console.log('处理清空的操作');
+    },
+
+    handleMouseenter() {
+      if (this.form.fileList.length !== 0) {
+        this.isShowTip = true;
+      }
+    },
+    handleMouseleave() {
+      this.isShowTip = false;
+    },
+    changeWord(newVal) {
+      // console.log(newVal, '选中');
+      this.showType = newVal.type || -1;
+      const name = newVal.name;
+      const typeName = newVal.typeName;
+      const type = newVal.type;
+      this.form.selectedTermName =
+        name + (typeName ? '(' + typeName + ')' : '');
+      this.form.selectedTerm = name + (typeName ? '(' + typeName + ')' : '');
+      this.form.name = name;
+      this.form.fileList = [];
+      this.showFileList = false;
+      this.form.typeId = type || '';
+      this.showUpLoad = true;
+      this.titleChange =
+        type == 1
+          ? '临床路径标题:'
+          : type == 3 || type == 4 || type == 5
+          ? '注意事项标题:'
+          : '';
+      this.form.fileTitle = '';
+      if (newVal.typeId === 82 || newVal.typeId === 83) {
+        this.upload = true;
+        this.form.fileTitle = newVal.title;
+      } else {
+        this.upload = false;
+      }
+    },
+    handleVisible(flag) {
+      if (!flag) {
+        this.terms = [];
+      }
+    },
+    reOrder(isUp, i) {
+      // isUp: 1 上升    0 下降
+      let div = this.$refs['elscrollbar'].$refs['wrap'];
+      let temp = {},
+        it = {};
+      if (isUp === 1) {
+        if (i === 0) {
+          this.warning('已经是第一个,不能再升啦!');
+          return;
+        }
+        temp = Object.assign(this.form.prags[i - 1]);
+        it = Object.assign(this.form.prags[i]);
+        this.form.prags.splice(i - 1, 2, it, temp);
+        this.$nextTick(() => {
+          div.scrollTop = this.$refs.subForm[i-1].$el.offsetTop -48;
+        });
+      } else {
+        if (i === this.form.prags.length - 1) {
+          this.warning('已经是最后一个,不能再降啦!');
+          return;
+        }
+        temp = Object.assign(this.form.prags[i + 1]);
+        it = Object.assign(this.form.prags[i]);
+        this.form.prags.splice(i, 2, temp, it);
+      }
+    },
+    addParagraph(i) {
+      this.form.prags.splice(i + 1, 0, {
+        title: '',
+        content: '',
+        isReason: 0,
+        position: [],
+        text: ''
+      });
+      //添加段落光标自动落到新增的段落中
+      setTimeout(() => {
+        this.$refs.subForm[i + 1].$el
+          .getElementsByClassName('el-input__inner')[0]
+          .focus();
+      });
+    },
+    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) {
+      if (!query.trim()) {
+        this.form.terms = [];
+        return;
+      }
+      //搜索术语列表
+      this.showDrop = true;
+      api.getAllConcept({ inputStr: query.trim(), types: [0] }).then(res => {
+        this.showDrop = false;
+        if (res.data.code === '0') {
+          this.terms = res.data.data;
+        } else {
+          this.warning('数据获取失败');
+        }
+      });
+    },
+    mapStringToNum(str) {
+      return str.split(',').map(it => {
+        return +it;
+      });
+    },
+
+    // 额外的表单检验
+    formVal() {
+      let positiontemp = this.form.prags.map(item => {
+        return [...item.position];
+      });
+      let positionArr = positiontemp.reduce(function(a, b) {
+        return a.concat(b);
+      }); // 所有被选中的值集合
+      // console.log(positionArr, 'positionArr');
+      // console.log(this.showType, '当前页的显示类型');
+      let isVisFlag = positionArr.some(item => item === 2);
+      let isDiagFlag = positionArr.some(item => item === 3);
+      // console.log(isVisFlag, 'isVisFlag');
+      if (
+        (this.showType == 3 || this.showType == 4 || this.showType == 5) &&
+        isVisFlag
+      ) {
+        //若医学术语为检验/检查,且内容类型选择了注意事项,此时“注意事项标题”是必填项
+        this.$refs.groups.clearValidate();
+        this.rules.titleChange.push({
+          required: true,
+          message: '请输入注意事项标题',
+          trigger: 'change'
+        });
+        this.$refs.groups.validateField('titleChange');
+        this.rules.titleChange = this.rules.titleChange.slice(0, 1);
+
+        if (this.form.titleChange.trim() !== '') {
+          // console.log('内容不为空');
+          return true;
+        } else {
+          var div = this.$refs['elscrollbar'].$refs['wrap'];
+          this.$nextTick(() => {
+            div.scrollTop = 0;
+          });
+          return false;
+        }
+        // return;
+      } else if (isDiagFlag && this.showType == 1) {
+        // 若医学术语为诊断,且内容类型选择了临床路径,此时“临床路径标题”是必填项
+        this.$refs.groups.clearValidate();
+        this.rules.titleChange.push({
+          required: true,
+          message: '请输入临床路径标题',
+          trigger: 'change'
+        });
+        this.$refs.groups.validateField('titleChange');
+        this.rules.titleChange = this.rules.titleChange.slice(0, 1);
+
+        if (this.form.titleChange.trim() !== '') {
+          // console.log('内容不为空');
+          return true;
+        } else {
+          var div = this.$refs['elscrollbar'].$refs['wrap'];
+          this.$nextTick(() => {
+            div.scrollTop = 0;
+          });
+          return false;
+        }
+      }
+    },
+
+    submitForm() {
+      if (this.isSuccessUpload === 1) {
+        this.warning('文件上传中,请稍等');
+        return;
+      }
+      let flagVal = this.formVal(); // 额外的表单校验
+      if (flagVal === false) return;
+      //验证外层表单
+      let goOn = true,
+        it = null;
+      let outIsVia = true; // 外层验证是否通过
+      this.$refs.groups.validate(valid => {
+        if (!valid) {
+          goOn = false;
+          outIsVia = false;
+          return false;
+        }
+      });
+      //验证段落表单
+      let viewHeight = 0; // 定位到表单校验的高度
+      let viewHeightArr = []; // 表单校验出错高度的所有数组
+      if (this.form.typeId !== 82 && this.form.typeId !== 83) {
+        for (let i = 0; i < this.$refs.subForm.length; i++) {
+          it = this.$refs.subForm[i];
+          viewHeight += it.$el.offsetHeight;
+          it.$refs.form.validate(valid => {
+            if (!valid) {
+              goOn = false;
+              viewHeightArr.push(viewHeight);
+            }
+          });
+        }
+      }
+      // console.log(viewHeightArr,'viewHeightArr');
+      if (!goOn) {
+        var div = this.$refs['elscrollbar'].$refs['wrap'];
+        if (outIsVia) {
+          // 外层校验通过,跳转至下层校验具体位置
+          this.$nextTick(() => {
+            div.scrollTop = +viewHeightArr[0] - 150;
+          });
+        } else {
+          // 外层校验没通过,页面滚动到顶部
+          this.$nextTick(() => {
+            div.scrollTop = 0;
+          });
+        }
+        return;
+      }
+      //通过必填验证,提交保存
+      const item = this.form.prags;
+      let param = [];
+      if (this.form.typeId === 82 || this.form.typeId === 83) {
+        if (this.form.fileList.length === 0) {
+          this.warning('文件未上传,不存储数据');
+          return;
+        }
+        param.push(
+          Object.assign(
+            {},
+            {
+              position: this.form.typeId === 82 ? '8' : '9',
+              conceptId: this.form.conceptId,
+              title: this.form.fileTitle,
+              orderNo: 0,
+              content: JSON.stringify(this.form.fileList[0])
+            }
+          )
+        );
+      } else {
+        let data = this.form.prags,
+          tempArr = [],
+          paramsAll = {},
+          types = this.form.typeId;
+        for (let i = 0; i < data.length; i++) {
+          let obj = {};
+          obj.content = data[i].content;
+          obj.text = data[i].text;
+          obj.conceptId = data[i].conceptId;
+          obj.orderNo = i;
+          obj.title = data[i].title;
+          obj.contentType = data[i].position.join(',');
+          tempArr.push(obj);
+        }
+        paramsAll.clinicalPathwayName = types == 1 ? this.form.titleChange : '';
+        paramsAll.id = this.conceptId;
+        paramsAll.name = this.form.name;
+        paramsAll.noticeName =
+          types == 3 || types == 4 || types == 5 ? this.form.titleChange : '';
+        paramsAll.type = this.form.typeId;
+        paramsAll.details = tempArr;
+        param = paramsAll;
+      }
+      // this.showSaveDialog(param,'是否'+(this.isEdit?'修改':'保存')+'该静态知识?');
+
+      if (!this.isEdit) {
+        // 新增页面
+        this.saveDisable = true;
+        this.sendSaveOrEdit(param);
+        return;
+      }
+      this.showSaveDialog(
+        param,
+        '<div><p style="color: #333333">确定保存修改内容?</p><p style="color: #D70A25">保存后将覆盖原有数据,且原有数据无法恢复。</p></div>'
+      );
+    },
+    showSaveDialog(param, msg) {
+      this.showConfirmDialog(msg, () => {
+        this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+        this.sendSaveOrEdit(param);
+      });
+    },
+
+    //保存编辑 接口
+    sendSaveOrEdit(param) {
+      api
+        .saveTermPrompts(param)
+        .then(res => {
+          if (res.data.code === '0') {
+            this.isSuccessUpload = 0; // 修改文件上传状态为0
+            this.warning(res.data.msg || '保存成功', 'success');
+            this.isSaveSuccess = true; // 保存成功,可正常退出
+            //返回带搜索条件的首页
+            this.$router.push({
+              name: 'MedicinePromptCDSS',
+              params: Object.assign({}, this.$route.params, {
+                currentPage: 1
+              })
+            });
+          } else {
+            this.warning(res.data.msg);
+          }
+          this.saveDisable = false;
+        })
+        .catch(err => {
+          if (err.code === '900010001') {
+            return false;
+          }
+          this.saveDisable = false;
+          this.warning(err);
+        });
+    },
+
+    // 弹出窗
+    showConfirmDialog(msg, resolve) {
+      this.$confirm(msg, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'cancel',
+        confirmButtonClass: 'confirmBtn',
+        dangerouslyUseHTMLString: true,
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    handleChange(file, fileList) {
+      // if(fileList&&fileList[0]&&fileList[0].response&&fileList[0].response.code==='0'){
+      //   this.showUpLoad = false
+      //   this.showFileList = true
+      // }else{
+      //    this.showUpLoad = true
+      //    this.showFileList = false
+      // }
+      // console.log(fileList,this.form.fileList,'aa')
+    },
+    handleSuccess(response, file, fileList) {
+      if (response.code == '0') {
+        this.showFileList = true;
+        this.form.fileList = [];
+        this.form.fileList.push({
+          name: response.data.title,
+          url: response.data.url,
+          size: response.data.size
+        });
+        this.showUpLoad = false;
+        if (!this.form.fileTitle) {
+          this.form.fileTitle = response.data.title;
+        }
+        this.isSuccessUpload = 2; // 上传成功状态
+        this.$refs.upload && this.$refs.upload.clearValidate(); // 清除校验
+      } else {
+        this.warning(response.msg || '上传失败');
+        // this.form.fileList = []
+        this.showUpLoad = true;
+        this.showFileList = false;
+        this.form.fileList = [];
+      }
+    },
+    handleRemove(file, fileList) {
+      this.showUpLoad = true;
+      this.form.fileList = [];
+      this.isSuccessUpload = 0;
+    },
+    handleBeforeUpLoad(file) {
+      // 上传过程中   上传按钮 隐藏
+      this.isSuccessUpload = 1; // 上传过程中
+      this.showFileList = true; // 新增 进度条  显示
+      this.$refs.upload && this.$refs.upload.clearValidate(); // 清除校验
+
+      this.showUpLoad = false;
+      if (file.size / 1024 / 1024 >= 500) {
+        this.warning('文件上传失败,超出大小限制500MB');
+        this.form.fileList = [];
+        this.showConfirm = false;
+        return false;
+      } else {
+        this.showConfirm = true;
+      }
+    },
+    handlePreview(file) {},
+    beforeRemove(file, fileList) {
+      if (this.showConfirm) {
+        return this.$confirm(`确定移除 ${file.name}?`, '', {
+          cancelButtonClass: 'cacelBtn'
+        });
+      }
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+@import '../../less/common.less';
+.cell .el-button.delete:focus {
+  color: red !important;
+}
+
+.topBack {
+  top: 0;
+}
+.info-container {
+  background: #fff;
+  padding: 20px;
+  margin: 70px 20px -20px 20px;
+  .el-input__inner {
+    width: 200px;
+  }
+  .el-form-item__label {
+    text-align: left;
+  }
+  .add-prg .el-form-item {
+    margin-bottom: 20px;
+  }
+  .el-form-item {
+    margin-bottom: 8px !important;
+  }
+}
+// .cancel span {
+//   color: #22ccc8;
+// }
+.line {
+  border-top: 1px #dcdfe6 solid;
+  margin-bottom: 25px;
+  margin-top: 25px;
+}
+.NoiseTemplateWrapper .info-container .el-input__inner {
+  width: 250px;
+}
+// .NoiseTemplateWrapper .el-select .el-input .el-icon-circle-close{
+//     display: inherit!important;
+// }
+.cacelBtn {
+  color: #22ccc8 !important;
+}
+.upload-demo {
+  width: 300px;
+  /deep/.el-upload-list__item .el-icon-close-tip {
+    display: none !important;
+  }
+
+  /deep/.el-upload-list__item .el-upload-list__item-name {
+    max-width: 250px;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+  }
+  /deep/ .focusing {
+    // border: 1px solid transparent !important;
+    outline: transparent !important;
+  }
+}
+.uploadInfo {
+  margin-top: -20px;
+  color: #606266;
+}
+.tipInfo {
+  position: absolute;
+  // position: relative;
+  line-height: 24px;
+  top: -56px;
+  left: 20px;
+  // background-color: transparent;
+  // color: #606266;
+  padding: 3px 10px;
+  border-radius: 4px;
+  margin: 100px auto;
+  background-color: #4d4d4d;
+  text-align: center;
+  color: #fff;
+  font-size: 14px;
+}
+.tipInfo:before {
+  content: '';
+  display: block;
+  position: absolute;
+  // bottom: 9px;
+  top: -10px;
+  left: 18px;
+  border-bottom: 6px solid #4d4d4d;
+  border-top: 6px solid transparent;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  // border-right: 6px solid #4D4D4D;
+}
+.btn {
+  text-align: right;
+  padding-right: 20px;
+}
+.el-message-box {
+  /deep/ .el-icon-warning {
+    background-color: transparent !important;
+    // display: none;
+  }
+  /deep/ .el-message-box__message {
+    margin: 24px 0px;
+  }
+  // /deep/ .confirmBtn {
+  //   // position: relative;
+  //   // right: 240px !important;
+  //   // top: 0px;
+  //   background-color: #fff !important;
+  //   span {
+  //     color: #48c5d7 !important;
+  //   }
+  // }
+  /deep/ .cancel {
+    background-color: #d7d7d7;
+    border-color: transparent !important;
+    span {
+      color: #fff;
+    }
+  }
+}
+</style>
+

+ 482 - 0
src/components/cdssManage/ChronicDiseaseAdd.vue

@@ -0,0 +1,482 @@
+<template>
+  <div>
+    <crumbs
+      :title="minTitle"
+      class="topBack"
+      :param="$route.params"
+      linkTo="ChronicDiseaseStructureList"
+    ></crumbs>
+    <div class="ChronicDiseaseAddWrap" @click="close">
+      <div class="ChronicDisease">
+        <p class="ChronicDiseaseTop" v-if="!editData.isEdit">
+          <span>选择量表术语:</span>
+          <input
+            type="text"
+            v-model="region"
+            @click.stop
+          >
+          <i @click.stop="searchTagList">搜索</i>
+          <ul v-if="showLis">
+            <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>
+          <i>{{selectName}}</i>
+        </p>
+      </div>
+      <div class="ChronicDiseaseDetail">
+        <div class="ChronicDiseaseLeft">
+          <h4>操作栏:</h4>
+          <div class="parts" v-for="(item,idx) in parts" :class="selectLeftPart.id == item.id?'selectDom':null" :key="item.id" @click="selectPart(item,1)">
+            {{item.name}}
+          </div>
+        </div>
+        <div class="bottomPartMid fl">
+          <p><span
+              class="el-icon-arrow-right"
+              @click="toRightPool"
+            ></span></p>
+          <p><span
+              class="el-icon-arrow-left"
+              @click="toLeftPool"
+            ></span></p>
+        </div>
+        <div class="ChronicDiseaseRight">
+          <h4>内容池:</h4>
+          <div class="contentWrap">
+            <div class="contentDetail clearfix" v-for="(item,idx) in contentPool" :class="selectRightPart.order == item.order?'selectDom':null" :key="item.order" @click="selectPart(item,2)">
+              <span>{{item.name}}:</span>
+              <div class="contentDetails">
+                <quillEditor v-model="item.content" :options="editorOption" v-if="item.val == 0" class="ql-editor"></quillEditor>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="bottomPartMid upAndDown">
+          <p><span
+              class="el-icon-arrow-up"
+              @click="movePool(1)"
+            ></span></p>
+          <p><span
+              class="el-icon-arrow-down"
+              @click="movePool(2)"
+            ></span></p>
+        </div>
+        <div class="btn">
+          <el-button
+            type="primary"
+            :disabled = 'saveDisable'
+            @click="submitForm"
+          >确 定</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import api from '@api/cdss.js';
+import 'quill/dist/quill.core.css'
+import 'quill/dist/quill.snow.css'
+import 'quill/dist/quill.bubble.css'
+import {quillEditor, Quill} from 'vue-quill-editor'
+import {container, ImageExtend, QuillWatch} from 'quill-image-extend-module';
+Quill.register('modules/ImageExtend', ImageExtend);
+/**
+ * 归属type
+ * 1:主诉模板 2:现病史模板 3:现病史空模板 4 : 其他史模板 5:嵌套模板 6:慢病模板
+ */
+export default {
+  data() {
+    return {
+      editorOption: {
+        modules: {
+          toolbar: {
+            container: container
+          }
+        }
+      },
+      region: '',    //量表标签
+      selectName:'',
+      selectId:'',
+      AdscriptionsType: [],
+      editData: {},
+      minTitle:'量表维护-添加量表结构',
+      showLis:false,
+      parts:[],
+      selectLeftPart:{},//左侧选中
+      selectRightPart:{},//右侧选中
+      contentPool:[], //内容池
+      saveDisable: false  //保存按钮禁止点击
+    }
+  },
+  beforeMount:function(){
+    let tmpPart = localStorage.getItem('DiseaseManage')
+    this.parts = JSON.parse(tmpPart)
+  },
+  mounted() {
+    let tmpEditData = this.$route.params
+    if (tmpEditData.isEdit) {      //修改
+      this.editData = tmpEditData
+      this.minTitle='量表维护-修改量表结构'
+      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?'文本模块':'推送模块'
+      }
+      this.contentPool = tmpScale
+    }
+    this.$emit('changeVal', this.form, false)
+  },
+  methods: {
+    toRightPool() {
+      let tmpLeft = JSON.parse(JSON.stringify(this.selectLeftPart))
+      let tmpPool = JSON.parse(JSON.stringify(this.contentPool))
+      if(JSON.stringify(tmpLeft) == '{}'){
+        return
+      }
+      if(tmpLeft.val == 1){
+        for(let i = 0;i < tmpPool.length;i++){
+          if(tmpPool[i].val == 1){
+            // this.$message({
+            //   message: '推送模块只能添加一次',
+            //   type: 'warning'
+            // });
+            return
+          }
+        }
+      }
+      tmpPool.push(tmpLeft)
+      this.selectLeftPart = {}
+      for(let i = 0;i < tmpPool.length;i++){
+        tmpPool[i].order = i+1
+      }
+      this.contentPool = tmpPool
+    },
+    toLeftPool() {
+      let tmpRight = JSON.parse(JSON.stringify(this.selectRightPart))
+      let tmpPool = JSON.parse(JSON.stringify(this.contentPool))
+      if(JSON.stringify(tmpRight) == '{}'){
+        return
+      }
+      tmpPool = tmpPool.filter((item)=>item.order != tmpRight.order)
+      for(let i = 0;i < tmpPool.length;i++){
+        tmpPool[i].order = i+1
+      }
+      this.contentPool = tmpPool
+      this.selectRightPart = {}
+    },
+    movePool(dir) {
+      let tmpRight = JSON.parse(JSON.stringify(this.selectRightPart))
+      let tmpPool = JSON.parse(JSON.stringify(this.contentPool))
+      if((dir == 1 && tmpRight.order == 1) || (dir == 2 && tmpRight.order == tmpPool.length)){
+        return
+      }
+      if(JSON.stringify(tmpRight) == '{}'){
+        return
+      }
+      tmpPool = tmpPool.filter((item)=>item.order != tmpRight.order)
+      if(dir == 1){
+        tmpPool.splice(tmpRight.order-2,0,tmpRight)
+        for(let i = 0;i < tmpPool.length;i++){
+          tmpPool[i].order = i+1
+        }
+      }else if(dir == 2){
+        tmpPool.splice(tmpRight.order,0,tmpRight)
+        for(let i = 0;i < tmpPool.length;i++){
+          tmpPool[i].order = i+1
+        }
+      }
+      this.selectRightPart = tmpRight
+      this.contentPool = tmpPool
+    },
+    selectPart(part,dir){
+      if(dir == 1){
+        if(this.selectLeftPart.val == part.val){
+          this.selectLeftPart = {}
+        }else{
+          this.selectLeftPart = part
+        }
+      }else if(dir == 2){
+        if(this.selectRightPart.order == part.order){
+          this.selectRightPart = {}
+        }else{
+          this.selectRightPart = part
+        }
+      }
+    },
+    close(){
+      this.showLis = false
+    },
+    selectLis(id,name){
+      this.selectName = name
+      this.selectId = id
+    },
+    searchTagList() {
+      if(this.region.trim() == ''){
+        return
+      }
+      api.searchKnowledgeLis({name: this.region}).then((res) => {
+        if (res.data.code === '0') {
+          let result = res.data.data
+          this.AdscriptionsType = result
+          this.showLis = this.AdscriptionsType.length > 0
+          if(result.length == 0){
+            this.$message({
+              message: '暂无搜索结果',
+              type: 'warning'
+            });
+          }
+        }
+      })
+    },
+    getParams(){
+      let tmpParams = []
+      let tmpPool = JSON.parse(JSON.stringify(this.contentPool))
+      for(let i = 0;i < tmpPool.length;i++){
+        if(tmpPool[i].val == 0 && !tmpPool[i].content){
+
+        }else{
+          let tmpObj = {
+            "content": "",
+            "orderNo": '',
+            "type": ''
+          }
+          tmpObj.content = tmpPool[i].content || ''
+          tmpObj.orderNo = tmpPool[i].order
+          tmpObj.type = tmpPool[i].val
+          tmpParams.push(tmpObj)
+        }
+      }
+      return {
+        "content": tmpParams,
+        "conceptId": this.selectId
+      }
+    },
+    submitForm() {
+      if(this.selectName == ''){
+        this.$message({
+          message: '请选择量表标签',
+          type: 'warning'
+        });
+        return
+      }
+      let param = this.getParams();
+      if(param.content.length == 0){
+        this.$message({
+          message: '请添加内容池内容',
+          type: 'warning'
+        });
+        return
+      }
+      this.showConfirmDialog('是否保存该量表结构?', () => {
+        this.saveDisable = true  //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+        api.insertOrUpdate(param).then((res) => {
+          if (res.data.code === '0') {
+            this.warning(res.data.msg || '保存成功', 'success');
+            setTimeout(() => {
+              this.$router.push({
+                name:'ChronicDiseaseStructureList',
+                params: Object.assign({}, this.$route.params, {currentPage: 1})
+              })
+            }, 1000);
+          }
+          this.saveDisable = false
+        })
+
+      })
+    },
+    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'
+      })
+    },
+  },
+  components:{
+    quillEditor
+  }
+}
+</script>
+<style lang="less">
+.contentDetails{
+  .quill-editor .ql-toolbar.ql-snow .ql-formats  .ql-image,
+  .quill-editor .ql-toolbar.ql-snow .ql-formats  .ql-video,
+  .quill-editor .ql-toolbar.ql-snow .ql-formats  .ql-link{
+    display: none;
+  }
+}
+</style>
+
+<style lang="less" scoped>
+@import "../../less/common.less";
+.topBack {
+  top: 0;
+}
+.btn {
+  text-align: right;
+  margin-top: 20px;
+}
+.ChronicDiseaseAddWrap {
+  margin: 20px;
+  box-sizing: border-box;
+  background-color: #fff;
+  color: #606266;
+  .ChronicDisease {
+    border-bottom: 1px solid #c0c4cc;
+    padding: 20px;
+    margin-top: 60px;
+    span {
+      width: 160px;
+      display: inline-block;
+    }
+    .ChronicDiseaseTop {
+      input {
+        width: 221px;
+        height: 34px;
+        line-height: 34px;
+        padding-left: 7px;
+        padding-right: 56px;
+        box-sizing: border-box;
+      }
+      i {
+        display: inline-block;
+        width: 56px;
+        height: 34px;
+        line-height: 32px;
+        border-left: 1px solid @icssBorder;
+        position: relative;
+        left: -57px;
+        vertical-align: middle;
+        text-align: center;
+        cursor: pointer;
+      }
+      ul {
+        width: 219px;
+        margin-left: 160px;
+        border: 1px solid @icssBorder;
+        background: #fff;
+        max-height: 200px;
+        overflow-y: auto;
+        height: auto;
+        position: absolute;
+        z-index: 9999;
+        li {
+          border: 1px solid #fff;
+          padding-left: 7px;
+          height: 27px;
+          line-height: 27px;
+          overflow: hidden;
+          white-space: nowrap;
+          text-overflow: ellipsis;
+        }
+        li:hover {
+          background: #f5f7fa;
+        }
+      }
+    }
+    .ChronicDiseaseBtm {
+      margin: 25px 0 10px 0;
+    }
+  }
+  .ChronicDiseaseDetail {
+    padding: 20px;
+    overflow: hidden;
+    position: relative;
+    h4 {
+      margin-bottom: 10px;
+    }
+    .bottomPartMid {
+      width: 80px;
+      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;
+        }
+      }
+    }
+    .upAndDown {
+      position: absolute;
+      right: 0;
+      top: 0;
+    }
+    .ChronicDiseaseLeft {
+      float: left;
+      .parts {
+        height: 40px;
+        line-height: 40px;
+        width: 160px;
+        text-align: center;
+        font-size: 14px;
+        margin: 20px 0;
+        background-color: #EFEFEF;
+        border: 1px solid @icssBorder;
+        color: #333;
+        cursor: pointer;
+      }
+    }
+  }
+  .ChronicDiseaseRight {
+    padding-right: 50px;
+    .contentWrap {
+      color: #333;
+      min-width: 400px;
+      min-height: 500px;
+      max-height: 600px;
+      border: 1px solid @icssBorder;
+      background: #fff;
+      overflow-y: auto;
+      .contentDetail {
+        border: 1px solid #fff;
+        padding: 5px;
+        padding-left: 80px;
+        box-sizing: border-box;
+        margin: 5px;
+        position: relative;
+        span {
+          width: 80px;
+          display: inline-block;
+          position: absolute;
+          top: 12px;
+          left: 0px;
+          text-align: right;
+        }
+        .contentDetails {
+          float: left;
+          min-height: 40px;
+          width: 100%;
+          box-sizing: border-box;
+          background-color: #EFEFEF;
+        }
+      }
+    }
+  }
+  .selectDom {
+    border: 1px solid @adminBase !important;
+  }
+}
+</style>
+

+ 321 - 0
src/components/cdssManage/ChronicDiseaseStructureList.vue

@@ -0,0 +1,321 @@
+<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="filter.tagSysName" placeholder="量表名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.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>
+        </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="编号" :resizable="false" width="60"></el-table-column>
+        <el-table-column :resizable="false" prop="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column :resizable="false" 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" label="操作人"></el-table-column>
+        <el-table-column :resizable="false" label="操作">
+          <template slot-scope="scope">
+            <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
+              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>
+    <div class="pagination pagepage">
+      <el-pagination
+        :current-page.sync="currentPage"
+        @current-change="currentChange"
+        background
+        :page-size="pageSize"
+        :page-sizes="pageSizeArr"
+        @size-change="handleSizeChange"
+        :layout="pageLayout"
+        :total="total"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/cdss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'TemplateMaintenance',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 'N', name: '启用中' },
+        { id: 'Y', name: '已删除' }
+      ],
+
+      tagTypes: [],
+      AdscriptionsType: [],
+      AdscriptionsOwnTo: [],
+      tagTypesList: [],
+      searched: false,
+      filter: {
+        isState: '',
+        tagType: [], //标签类型
+        tagSysName: '' //标签系统名称
+      },
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0
+    };
+  },
+  created() {
+    this.getDropList().then(() => {
+      this.getDataList();
+    });
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage = to.params.currentPage;
+    });
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    getDropList() {
+      let templateType = localStorage.getItem('icssEnumsData')
+        ? JSON.parse(localStorage.getItem('icssEnumsData')).moduleInfoTypeEnum
+        : [];
+      this.AdscriptionsType = templateType;
+      return api.getknowledgeList().then(res => {
+        if (res.data.code === '0') {
+          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)
+          // }
+        }
+      });
+    },
+    getDataList(isTurnPage) {
+      const param = this.getFilterItems(isTurnPage);
+      this.searched = true;
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api.scaleContentStructure(param).then(res => {
+        loading.close();
+        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;
+        //     }
+        //   }
+        // }
+        this.list = list;
+        this.total = res.data.data.total;
+        if (this.inCurrentPage !== undefined) {
+          this.currentPage = this.inCurrentPage;
+          this.inCurrentPage = undefined;
+        }
+      });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList();
+    },
+    addIndeptTag() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'ChronicDiseaseAdd', params: pam });
+    },
+    modifyIndeptTag(row) {
+      api.rebuildOrUpdate({ conceptId: row.conceptId }).then(res => {
+        const { code, data, msg } = res.data;
+        if (code == '0') {
+          const pam = this.searched
+            ? {
+                currentPage: this.currentPage,
+                pageSize: this.pageSize,
+                filter: this.filter
+              }
+            : { currentPage: this.currentPage, pageSize: this.pageSize };
+          this.$router.push({
+            name: 'ChronicDiseaseAdd',
+            params: Object.assign(pam, { isEdit: true, data: data, row: row })
+          });
+        } else {
+          this.$message({
+            message: msg,
+            type: 'warning'
+          });
+        }
+      });
+    },
+    currentChange(next) {
+      this.currentPage = next;
+      this.getDataList(true);
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        name: this.filter.tagSysName.trim(),
+        status: this.filter.isState
+      };
+      return param;
+    },
+    indexMethod(index) {
+      return (this.currentPage - 1) * this.pageSize + index + 1;
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    clearFilter() {
+      this.filter = {
+        isState: '',
+        tagType: [], //标签类型
+        tagSysName: '' //标签系统名称
+      };
+    },
+    showDelDialog(item) {
+      let tmpArr = [];
+      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') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (item.isDeleted !== 'N') {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.isState !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              if (err.code === '900010001') {
+                return false;
+              }
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            if (error.code === '900010001') {
+              return false;
+            }
+            this.warning(error);
+          });
+      });
+    }
+  }
+};
+</script>
+
+
+<style lang="less" scoped>
+.delete {
+  color: red;
+}
+.cell .el-button.delete:active {
+  color: red !important;
+}
+.delete:hover {
+  color: red;
+}
+</style>

+ 340 - 0
src/components/cdssManage/MedicalTerm.vue

@@ -0,0 +1,340 @@
+<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="filter.name" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+          <!-- <el-button size="mini" type="warning" @click="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="name" label="医院名称" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="connect" label="术语关联">
+          <template slot-scope="scope">
+            <el-switch
+              v-model="scope.row.connect"
+              @change="handleStatusChange(scope.row)"
+              :active-value="1"
+              :inactive-value="0"
+              active-color="#4BC4D7"
+              inactive-color="#BBBBBB"
+            ></el-switch>
+            <span class="titlwSwitchStatus">{{scope.row.connect === 1 ? '开' : '关'}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column :resizable="false" prop="diseaseNum" label="诊断关联">
+          <template slot-scope="scope">
+            <span
+              class="relation"
+              @click="goRelationPage('Disease',scope.row)"
+            >{{scope.row.diseaseNum}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column :resizable="false" prop="lisNum" label="检验关联">
+          <template slot-scope="scope">
+            <span class="relation" @click="goRelationPage('Lis',scope.row)">{{scope.row.lisNum}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column :resizable="false" prop="pacsNum" label="检查关联">
+          <template slot-scope="scope">
+            <span class="relation" @click="goRelationPage('Pacs',scope.row)">{{scope.row.pacsNum}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column :resizable="false" prop="drugNum" label="药品关联">
+          <template slot-scope="scope">
+            <span
+              class="relation"
+              @click="goRelationPage('DrugManage',scope.row)"
+            >{{scope.row.drugNum}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column :resizable="false" prop="operationNum" label="手术/操作关联">
+          <template slot-scope="scope">
+            <span
+              class="relation"
+              @click="goRelationPage('Operation',scope.row)"
+            >{{scope.row.operationNum}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column :resizable="false" prop="transfusionNum" label="输血关联">
+          <template slot-scope="scope">
+            <span
+              class="relation"
+              @click="goRelationPage('Fusion',scope.row)"
+            >{{scope.row.transfusionNum}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column :resizable="false" prop="deptNum" label="科室关联">
+          <template slot-scope="scope">
+            <span
+              class="relation"
+              @click="goRelationPage('DeptManage',scope.row)"
+            >{{scope.row.deptNum}}</span>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination">
+        <el-pagination
+          :current-page.sync="currentPage"
+          @current-change="currentChange"
+          background
+          :page-size="pageSize"
+          :page-sizes="pageSizeArr"
+          @size-change="handleSizeChange"
+          :layout="pageLayout"
+          :total="total"
+        ></el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/cdss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'Plan',
+  data: function() {
+    return {
+      list: [],
+      searched: false,
+      filter: {
+        name: '' //标准诊断名称
+      },
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0
+    };
+  },
+  created() {
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    // 非首页 编辑页返回 设置 this.currentPage
+    if (Object.keys(this.$route.params).length !== 0) {
+      this.currentPage = this.$route.params.currentPage;
+    }
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage = to.params.currentPage;
+    });
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+
+    // 获取列表数据
+    async getDataList(isTurnPage) {
+      let params = await this.getFilterItems(isTurnPage);
+      this.searched = true;
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api.getMappingListPageCDSS(params).then(res => {
+        loading.close();
+        if (res.data.code === '0') {
+          this.list = res.data.data && res.data.data.records;
+        }
+        this.total = res.data.data && res.data.data.total;
+        if (this.inCurrentPage !== undefined) {
+          this.currentPage = this.inCurrentPage;
+          this.inCurrentPage = undefined;
+        }
+      });
+    },
+
+    // 处理列表请求数据参数
+    async getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        name: this.filter.name.trim()
+      };
+      return param;
+    },
+
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList();
+    },
+
+    // 页面跳转
+    goRelationPage(from, row) {
+      const item = Object.assign({}, row);
+      // const pam = this.searched
+      //   ? {
+      //       currentPage: this.currentPage,
+      //       pageSize: this.pageSize,
+      //       filter: this.filter
+      //     }
+      //   : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: from,
+        // params: Object.assign(pam, { from, data: item })
+        params: { data: { ...item } }
+      });
+    },
+
+    currentChange(next) {
+      this.currentPage = next;
+      this.getDataList(true);
+    },
+    // 清空搜索参数
+    clearFilter() {
+      this.filter = {
+        name: ''
+      };
+    },
+
+    indexMethod(index) {
+      return (this.currentPage - 1) * this.pageSize + index + 1;
+    },
+
+    // 医院关联处理
+    handleStatusChange(row) {
+      console.log(row, '=状态');
+      this.$confirm(`确定要关闭${row.name}的术语关联吗?`, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      })
+        .then(() => {
+          api
+            .modifyConnectStatusCDSS({
+              connect: row.connect,
+              id: row.hospitalId
+            })
+            .then(res => {
+              if (res.data.code === '0') {
+                this.getDataList();
+                this.$message({
+                  type: 'success',
+                  message: '操作成功!'
+                });
+              }
+            });
+        })
+        .catch(() => {
+          this.getDataList();
+          this.$message({
+            type: 'info',
+            message: '已取消'
+          });
+        });
+    }
+  }
+};
+</script>
+
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+.delete {
+  color: red;
+}
+.delete:hover {
+  color: red;
+}
+.pagination {
+  min-width: 1010px;
+}
+.disable {
+  border-color: transparent;
+}
+.el-message-box {
+  /deep/.cancelBtn {
+    background-color: #d7d7d7;
+    border-color: transparent;
+  }
+  /deep/ .delBtn {
+    background-color: #ff545b !important;
+    border-color: transparent !important;
+  }
+  /deep/ .confirmBtn2 {
+    position: relative;
+    right: 0px !important;
+  }
+}
+.exportBoxL {
+  /deep/ .el-message-box__btns {
+    margin-top: 20px;
+  }
+  /deep/ .el-message-box__message {
+    text-align: left;
+  }
+  /deep/ .el-message-box__btns {
+    // text-align: center;
+    margin-bottom: 24px;
+  }
+  /deep/ .leftbtn {
+    margin-right: 46px;
+    background-color: #d7d7d7;
+    border-color: transparent;
+  }
+  /deep/ .cancelSureL {
+    // text-align: center;
+    display: none;
+  }
+  /deep/ .sureL {
+    float: right;
+  }
+}
+.contents {
+  .is-plain {
+    color: #dad7d7;
+  }
+  .is-plain:hover {
+    color: #dad7d7;
+  }
+}
+
+.el-table__row {
+  /deep/ .is-disabled {
+    border-color: transparent !important;
+  }
+}
+.relation {
+  color: #009dd9;
+  cursor: pointer;
+}
+.titlwSwitchStatus {
+  margin-left: 16px;
+}
+</style>

+ 268 - 0
src/components/cdssManage/MedicineInfoPg.vue

@@ -0,0 +1,268 @@
+<template>
+  <el-form
+    :rules="rules"
+    :model="data"
+    ref="form"
+    class="sub-form"
+    :validate-on-rule-change="false"
+  >
+    <!--<el-input v-model="form.orderNo" :value="index" type="hidden"></el-input>-->
+    <!-- <el-form-item label="是否属于诊断依据:" prop="isReason" label-width="160px">
+            <el-select v-model="data.isReason" placeholder="请选择">
+                <el-option label="否" :value="0"></el-option>
+                <el-option label="是" :value="1"></el-option>
+            </el-select>
+    </el-form-item>-->
+    <el-form-item label="段落标题:" prop="title" label-width="160px">
+      <el-input v-model="data.title"></el-input>
+    </el-form-item>
+    <el-form-item label="内容类型:" prop="position" label-width="160px">
+      <el-checkbox-group v-model="data.position">
+        <el-checkbox v-for="it in positions" :key="it.key" :label="it.key">{{it.name}}</el-checkbox>
+      </el-checkbox-group>
+    </el-form-item>
+    <el-form-item label="内容" prop="content" label-width="160px" ref="editor">
+      <quillEditor
+        v-model="data.content"
+        :options="editorOption"
+        class="ql-editor"
+        ref="quillEditor"
+      ></quillEditor>
+    </el-form-item>
+    <div class="order-btn">
+      <a v-if="index!==0" :class="index===total-1?'order-spc':'order-up'" @click="reOrder(1)">上升</a>
+      <a v-if="index!==total-1" :class="index===0?'order-spc':'order-down'" @click="reOrder(0)">下降</a>
+    </div>
+    <el-form-item label-width="160px" class="btns">
+      <el-button @click="addEmit">添加段落</el-button>
+      <el-button @click="delEmit" type="info">删除本段落</el-button>
+    </el-form-item>
+  </el-form>
+</template>
+
+<script>
+import 'quill/dist/quill.core.css';
+import 'quill/dist/quill.snow.css';
+import 'quill/dist/quill.bubble.css';
+import { quillEditor, Quill } from 'vue-quill-editor';
+import config from '@api/config';
+import { container, ImageExtend, QuillWatch } from 'quill-image-extend-module';
+Quill.register('modules/ImageExtend', ImageExtend);
+export default {
+  props: ['data', 'index', 'isEdit', 'total', 'showType'],
+  name: 'MedicineInfoParagraph',
+  components: {
+    quillEditor
+  },
+  data() {
+    return {
+      toolbars: [
+        [
+          ['bold', 'underline', 'strike'],
+          [{ list: 'ordered' }, { list: 'bullet' }],
+          [{ script: 'sub' }, { script: 'super' }],
+          [{ color: [] }, { background: [] }],
+          [{ align: [] }],
+          ['image']
+        ]
+      ],
+      toolbarMode: 0,
+      editorOption: {
+        modules: {
+          ImageExtend: {
+            loading: true,
+            name: 'upfile',
+            size: 1,
+            sizeError: () => {
+              this.$message({
+                showClose: true,
+                message: '请上传 1M 以内的图片!',
+                type: 'warning'
+              });
+            },
+            action: config.urls.promptServer,
+            response: res => {
+              if (res.code == '0') {
+                return config.imgHost + res.data.url;
+              } else {
+                this.$message({
+                  showClose: true,
+                  message: res.msg,
+                  type: 'warning'
+                });
+              }
+            }
+          },
+          toolbar: {
+            container: container,
+            handlers: {
+              image: function() {
+                QuillWatch.emit(this.quill.id);
+              }
+            }
+          }
+        }
+      },
+      form: {
+        position: [],
+        orderNo: 0
+      },
+      positions: [], //位置列表
+      rules: {
+       
+      }
+    };
+  },
+  watch: {
+    'data.content': function() {
+      if (this.data.content !== '') {
+        this.$refs.editor && this.$refs.editor.clearValidate(); // 清除校验
+      }
+      if (this.data.content === ''){
+        // console.log('内容为空');
+        this.$refs['form'].validateField('content') // 手动校验
+      }
+      this.data.text = this.$refs.quillEditor.quill.root.innerText;
+    }
+  },
+  created() {
+    // console.log(this.showType, 'showType','需要显示的类型');
+    this.editorOption.modules.toolbar.container = this.toolbars[
+      this.toolbarMode
+    ];
+    this.renderPositions();
+    if (this.isEdit) {
+      setTimeout(() => {
+        this.rules = {         
+          position: [
+            { required: true, message: '请选择内容类型', trigger: 'change' }
+          ],
+          title: [
+            { required: true, message: '请输入段落标题', trigger: 'change' },
+            { max: 30, message: '标题名称不能超过30字', trigger: 'change' }
+           
+          ],
+          content: [
+            { required: true, message: '请输入段落内容', trigger: 'change' }
+          ]
+        };
+      }, 100);
+    }else{
+      this.rules = {         
+          position: [
+            { required: true, message: '请选择内容类型', trigger: 'change' }
+          ],
+          title: [
+            { required: true, message: '请输入段落标题', trigger: 'change' },
+            { max: 30, message: '标题名称不能超过30字', trigger: 'change' }
+           
+          ],
+          content: [
+            { required: true, message: '请输入段落内容', trigger: 'change' }
+          ]
+        };
+    }
+  },
+  mounted() {},
+  methods: {
+    reOrder(i) {
+      this.$emit('reOrder', i, this.index);
+    },
+    addEmit() {
+      this.$emit('add');
+    },
+    delEmit() {
+      this.$emit('del', this.index);
+    },
+    // 渲染内容类型
+    renderPositions() {
+      //显示位置枚举列表
+      const pos = localStorage.getItem('knowledgeEnumsData');
+      let positions = config.contentTypes;
+      if (this.showType == 1) {
+        // 诊断
+        this.positions = positions.filter(item => item.key !== 2);
+      } else if (
+        this.showType == 3 ||
+        this.showType == 4 ||
+        this.showType == 5
+      ) {
+        // 检验/检查
+        this.positions = positions.filter(item => {
+          return item.key <= 2;
+        });
+      } else if (this.showType == 2 || this.showType == 6) {
+        // 药品/手术
+        this.positions = positions.filter(item => item.key === 1);
+      } else {
+        this.positions = positions;
+      }
+    }
+
+    /*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:'',
+                                        content:content});
+        this.$emit("change",this.index,data);
+      }*/
+  }
+};
+</script>
+
+<style lang="less" scoped>
+
+.quill-editor.ql-editor {
+  padding-left: 0 !important;
+}
+.is-error .el-form-item__error {
+  top: auto;
+}
+.sub-form {
+  position: relative;
+}
+.order-btn {
+  position: absolute;
+  top: 12px;
+  right: 0;
+  a {
+    margin-bottom: 20px;
+    border: 1px solid #22ccc8;
+    color: #22ccc8;
+    padding: 5px 10px;
+    border-radius: 4px;
+    cursor: pointer;
+    font-size: 12px;
+  }
+  .order-spc {
+    margin-top: 28px;
+  }
+  .order-down {
+    margin-left: 20px;
+  }
+}
+/**富文本编辑器样式修改***/
+.ql-snow .ql-picker.ql-size .ql-picker-label::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item::before,
+.ql-snow .ql-picker.ql-header .ql-picker-label::before,it
+.ql-editor,.quill-editor{
+  padding-top: 0px !important;
+  margin-top: -8px;
+  min-height: 48px;
+  p{
+    padding-top: 8px;
+  }
+}
+.ql-editor.ql-blank::before{
+  padding-top: 0px
+}
+.btns{
+  margin-top: 20px;
+}
+</style>

+ 412 - 0
src/components/cdssManage/MedicinePrompt.vue

@@ -0,0 +1,412 @@
+<template>
+  <div>
+    <crumbs title="医学术语静态知识维护">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="术语分类:" class="selectMedicine">
+          <el-select size="mini" v-model="filter.libType" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in typeList"
+              :label="item.name"
+              :value="item.key"
+              :key="item.key"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="标准术语:">
+          <el-input size="mini" maxlength="50" v-model="filter.term" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:" class="selectMedicine">
+          <el-select size="mini" v-model="filter.status" placeholder="请选择" clearable>
+            <el-option v-for="item in stateList" :label="item.name" :value="item.id" :key="item.id"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item class="dododo">
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+          <el-button
+            size="mini"
+            type="warning"
+            style="margin:0 10px"
+            @click="addMedicalPrompt"
+          >添加静态知识</el-button>
+        </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="gmtModified" label="操作时间" width="180" ></el-table-column>
+        <el-table-column prop="name" label="标准术语" :show-overflow-tooltip="true"></el-table-column>
+        <el-table-column prop="typeName" label="术语分类" width="120"></el-table-column>
+        <el-table-column prop="title" label="内容概览" width="240" :show-overflow-tooltip="true"></el-table-column>
+        <el-table-column label="状态" width="160">
+          <template slot-scope="scope">
+            <span v-if="scope.row.status===1">启用</span>
+            <span v-if="scope.row.status===0">禁用</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" width="140">
+          <template slot-scope="scope">
+            <el-button v-if="scope.row.status===0" type="text" size="small" class="is-disabled">修改</el-button>
+            <el-button
+              v-if="scope.row.status===1"
+              type="text"
+              size="small"
+              @click="toEditProduct(scope.row)"
+            >修改</el-button>
+            <!-- <span style="margin:0 3px;">|</span>
+                        <el-button v-if="scope.row.isDeleted=='Y' || scope.row.typeId === 82 || scope.row.typeId === 83" type="text" size="small" class="is-disabled">复制</el-button>
+            <el-button v-if="scope.row.isDeleted=='N'&&scope.row.typeId !== 82 && scope.row.typeId !== 83" type="text" size="small" @click="toCopyProduct(scope.row)">复制</el-button>-->
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              v-if="scope.row.status===0"
+              type="text"
+              size="small"
+              @click="showReuseDialog(scope.row)"
+            >启用</el-button>
+            <el-button
+              v-if="scope.row.status===1"
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row)"
+            >禁用</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        :current-page.sync="currentPage"
+        @current-change="currentChange"
+        background
+        :page-size="pageSize"
+        class="pagepage pagepage"
+        :page-sizes="pageSizeArr"
+        @size-change="handleSizeChange"
+        :layout="pageLayout"
+        :total="total"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/cdss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'MedicinePrompt',
+  data: function() {
+    return {
+      list: [],
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      linkIn: [],
+      pays: [],
+      typeList: [],
+      stateList: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      searched: false,
+      filter: {
+        term: '',
+        title: '',
+        status: '',
+        libType: ''
+      }
+    };
+  },
+  created() {
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.typeList = config.emData;
+    // 非首页 编辑页返回 设置 this.currentPage
+    if (Object.keys(this.$route.params).length !== 0) {
+      this.currentPage = this.$route.params.currentPage;
+    }
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage = to.params.currentPage;
+    });
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addMedicalPrompt() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddMedicinePromptCDSS', params: pam });
+    },
+    toEditProduct(row) {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddMedicinePromptCDSS',
+        params: Object.assign(pam, { data: row, isEdit: true })
+      });
+    },
+    toCopyProduct(row) {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddMedicinePrompt',
+        params: Object.assign(pam, { data: row, isCopy: true })
+      });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList();
+    },
+    getDataList(isTurnPage) {
+      const param = this.getFilterItems(isTurnPage);
+      this.searched = true;
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .getConceptKnowledgeList(param)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            // 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-手术和操作
+            let temp = [
+              '',
+              '诊断',
+              '药品',
+              '检验套餐',
+              '检验细项',
+              '检查',
+              '手术和操作'
+            ];
+            this.list = data.records = data.records.filter(item => {
+              item.typeName = temp[item.type];
+              return item;
+            });
+            this.cacheData[param.current] = data.records;
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          }
+        })
+        .catch(error => {
+          if (error.code === '900010001') {
+            return false;
+          }
+          console.log(error);
+        });
+    },
+    clearFilter() {
+      this.filter = {
+        term: '',
+        title: '',
+        status: '',
+        libType: ''
+      };
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        name: this.filter.term.trim(),
+        title: this.filter.title,
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        status: this.filter.status,
+        type: this.filter.libType
+      };
+      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(true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve, type) {
+      let showInfo = '启用';
+      let btnNameClass = 'confirmBtn1';
+      if (type === 'Del') {
+        showInfo = '禁用';
+        btnNameClass = 'delBtn';
+      }
+
+      this.$confirm(msg, '提示', {
+        confirmButtonText: showInfo,
+        cancelButtonText: '取消',
+        cancelButtonClass: 'cancelBtn',
+        confirmButtonClass: btnNameClass,
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    showDelDialog(row) {
+      this.showConfirmDialog(
+        '确定禁用该静态知识?',
+        () => {
+          api
+            .delConceptInfo({ id: row.id, status: 0 })
+            .then(res => {
+              if (res.data.code == '0') {
+                if (!this.searched) {
+                  //未点确认时清空搜索条件
+                  this.clearFilter();
+                }
+                this.warning(res.data.msg || '操作成功', 'success');
+                this.getDataList();
+              } else {
+                this.warning(res.data.msg);
+              }
+            })
+            .catch(error => {
+              if (error.code === '900010001') {
+                return false;
+              }
+              this.warning(error);
+            });
+        },
+        'Del'
+      );
+    },
+    showReuseDialog(row) {
+      this.showConfirmDialog(
+        '确定启用该静态知识?',
+        () => {
+          api
+            .delConceptInfo({ id: row.id, status: 1 })
+            .then(res => {
+              if (res.data.code == '0') {
+                this.currentPage = 1; //恢复数据跳转到筛选条件下首页
+                this.warning(res.data.msg || '操作成功', 'success');
+                this.getDataList();
+              } else {
+                this.warning(res.data.msg);
+              }
+            })
+            .catch(error => {
+              if (error.code === '900010001') {
+                return false;
+              }
+              this.warning(error);
+            });
+        },
+        'Reuse'
+      );
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+.status-span {
+  font-size: 12px;
+  margin-right: 10px;
+  color: unset;
+}
+.dododo {
+  margin-top: 1px !important;
+}
+.pagepage {
+  .el-input.el-input--mini.el-input--suffix input {
+    height: 28px;
+    line-height: 28px;
+  }
+  .el-pagination__sizes {
+    margin-right: 20px !important;
+  }
+}
+.el-message-box {
+  /deep/ .cancelBtn {
+    background-color: #d7d7d7;
+    border-color: transparent;
+  }
+  /deep/ .delBtn {
+    background-color: #ff545b !important;
+    border-color: transparent !important;
+  }
+  /deep/ .confirmBtn1 {
+    position: relative;
+    right: 0px !important;
+  }
+}
+
+.selectMedicine {
+  /deep/ .el-input__suffix-inner {
+    position: relative;
+    top: -1px;
+  }
+  /deep/ .el-icon-circle-close {
+    position: relative;
+    top: -2px;
+  }
+}
+
+body {
+  .el-tooltip__popper{
+    max-width: 400px;
+  }
+}
+</style>

+ 104 - 0
src/components/cdssManage/correlation/Correlation.vue

@@ -0,0 +1,104 @@
+<template>
+  <div class="importDisWrapper clearfix">
+    <crumbs title="关联维护设置" class="topBack" style="min-width: 980px"></crumbs>
+    <div class="importDisBox">
+      <el-form ref="form" :model="form" label-width="120px">
+        <el-form-item label="术语关联:">
+          <el-switch
+            v-if="showInfo"
+            v-model="form.value"
+            active-color="#4BC4D7"
+            inactive-color="#BBBBBB"
+            @change="handleChange($event,form.value)"
+            :disabled="disabled"
+          ></el-switch>
+          <span class="showInfo">{{showInfo}}</span>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/icss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+export default {
+  data() {
+    return {
+      form: {
+        value: true
+      },
+      hospitalId: '',
+      disabled: false,
+      showInfo: ''
+    };
+  },
+  created() {
+    this.getHospital();
+  },
+  methods: {
+    // 关联
+    handleChange($event, isCorre) {
+      this.showInfo = $event ? '开' : '关';
+      this.disabled = true;
+      let params = {
+        id: this.hospitalId,
+        connect: $event ? 1 : 0 //0-不对接,1-对接
+      };
+      api
+        .saveHospitalInfoRecord(params)
+        .then(res => {
+          if (res.data.code === '0') {
+            this.$message({
+              showClose: true,
+              message: '操作成功!',
+              type: 'success'
+            });
+            setTimeout(() => {
+              this.disabled = false;
+            }, 1500);
+          }
+        })
+        .catch(err => {
+          if (err.code === '900010001') {
+            return false;
+          }
+          this.$message({
+            showClose: true,
+            message: '操作失败!',
+            type: 'error'
+          });
+          this.disabled = false;
+        });
+    },
+
+    // 获取医院信息
+    getHospital() {
+      api.getHospitalInfo().then(res => {
+        this.hospitalId = res.data.data.id;
+        this.showInfo = res.data.data.connect === 1 ? '开' : '关';
+        this.form.value = res.data.data.connect === 1 ? true : false;
+      });
+    }
+  }
+};
+</script>
+
+<style  lang="less" scoped>
+.importDisWrapper {
+  min-width: 940px;
+  color: #606266;
+  .topBack {
+    top: 0;
+  }
+  .importDisBox {
+    padding: 80px 60px 120px 60px;
+    margin: 70px 20px 0 20px;
+    background: #fff;
+  }
+  .showInfo {
+    margin-left: 10px;
+  }
+}
+</style>

+ 415 - 0
src/components/cdssManage/dept/AddDept.vue

@@ -0,0 +1,415 @@
+<template>
+  <div class="AddChemicalAndCommonMappingWrapper clearfix">
+    <crumbs
+      :title="isEdit ? '科室关联维护--修改关联 | '+ hospitaiName : '科室关联维护--添加关联 | '+ hospitaiName"
+      class="topBack"
+      :param="$route.params"
+      linkTo="DeptManage"
+    ></crumbs>
+    <el-form
+      :model="form"
+      :rules="rules"
+      label-position="right"
+      label-width="120px"
+      ref="relationForm"
+    >
+      <div class="AddChemicalAndCommonMappingBox clearfix">
+        <div class="titleBox clearfix">
+          <p class="title">医院术语</p>
+          <p class="title">标准术语</p>
+        </div>
+        <div class="leftBox clearfix">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="科室名称:" prop="hisName">
+                <el-input v-model="form.hisName" clearable style="minWidth: 240px"></el-input>
+              </el-form-item>
+              <el-form-item label="科室名称预览:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.hisName}}</span>
+              </el-form-item>
+              <el-form-item label="科室编码:" prop="hisCode">
+                <el-input v-model="form.hisCode" clearable style="minWidth: 240px"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+        <div class="midBox">
+          <img class="midLogo" src="../../../images/relation.png" alt />
+          <p class="midTitle">相互关联</p>
+        </div>
+        <div class="rightBox">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="科室名称:" prop="searchText">
+                <el-select
+                  style="width:100%; minWidth: 240px"
+                  v-model="form.searchText"
+                  filterable
+                  remote
+                  clearable
+                  :loading="showDrop"
+                  loading-text="加载中..."
+                  @change="changeWord"
+                  @visible-change="handleVisible"
+                  placeholder="搜索"
+                  :remote-method="searchTerms"
+                  reserve-keyword
+                >
+                  <el-option
+                    v-for="(item,idx) in uniqueNameList"
+                    :key="idx"
+                    :label="item"
+                    :value="item"
+                    :title="item"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="科室名称预览:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.searchText}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+      </div>
+      <div class="btn">
+        <el-form-item>
+          <el-button type="primary" :disabled="saveDisable" @click="submitForm">确定</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+  </div>
+</template>
+<script>
+import api from '@api/cdss.js';
+export default {
+  name: 'AddDept',
+  data() {
+    return {
+      isEdit: false,
+      hospitaiName: '',
+      editId: '',
+      uniqueNameList: [],
+      form: {
+        searchText: '', //搜索字段
+        hisName: '',
+        hisCode: ''
+      },
+      rules: {
+        hisName: [
+          { required: true, message: '请输入科室名称', trigger: 'change' },
+          { max: 80, message: '科室名称最多80字', trigger: 'change' }
+        ],
+        hisCode: [{ max: 80, message: '科室编码最多80字', trigger: 'change' }],
+        searchText: [
+          { required: true, message: '请选择科室名称', trigger: 'change' }
+        ]
+      },
+      saveDisable: false, //保存按钮禁止点击
+      showDrop: false, //下拉框显示文字
+      searchInfo: '',
+      hospitalId: ''
+    };
+  },
+  created() {
+    //修改
+    const { isEdit, data, hospitaiName } = this.$route.params;
+    // console.log(data, 'data');
+    this.hospitalId = data && data.hospitalId;
+    this.hospitaiName = hospitaiName;
+    if (isEdit) {
+      this.isEdit = isEdit;
+      this.editId = data.id;
+      this.form.hisName = data.hisName;
+      this.form.searchText = data.uniqueName;
+      this.form.hisCode = data.hisCode;
+    }
+  },
+  methods: {
+    // 搜索列表
+    searchTerms(query) {
+      if (!query) {
+        this.uniqueNameList = [];
+        return;
+      }
+      this.searchInfo = query;
+      this.showDrop = true;
+      let params = {
+        type: 7, //科室
+        inputStr: query,
+        sex: 3,
+        age: 0
+      };
+      api.retrievalSearch(params).then(res => {
+        this.showDrop = false;
+        if (res.data.code === '0') {
+          this.uniqueNameList = res.data.data.deptNames;
+        }
+      });
+    },
+    changeWord(newVal) {
+      console.log(newVal);
+    },
+    handleVisible(flag) {
+      if (!flag) {
+        this.uniqueNameList = [];
+      }
+    },
+
+    // 初始化表单数据
+    initForm() {
+      this.form.hisName = '';
+      this.form.searchText = '';
+    },
+
+    // 建立关联-参数处理
+    submitForm() {
+      this.$refs.relationForm.validate(valid => {
+        if (valid) {
+          const { searchText, hisName, hisCode } = this.form;
+          let params = {
+            hisName: hisName,
+            uniqueName: searchText,
+            hisCode: hisCode,
+            hospitalId: this.hospitalId
+          };
+          this.showSaveDialog(params);
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 建立关联-映射关系是否已存在
+    showSaveDialog(params) {
+      this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+      api
+        .deptIsExistRecord(params)
+        .then(res => {
+          if (!res.data.data) {
+            // 不存在,创建新的关联
+            // 如果是编辑时,需要携带id
+            if (this.isEdit) {
+              params = { ...params, id: this.editId };
+            }
+            this.saveLisMapping(params, '保存成功', 'success');
+          } else {
+            // 已存在,提示修改
+            this.warning('该条关联已存在,无法添加');
+            this.saveDisable = false;
+          }
+        })
+        .catch(err => {
+          if (err.code === '900010001') {
+            return false;
+          }
+          this.warning(err);
+        });
+    },
+
+    // 映射关系不存在-建立关联
+    saveLisMapping(params, msg, type) {
+      api.saveOrUpdateDeptRecord(params).then(res => {
+        if (res.data.code === '0') {
+          this.warning(res.data.msg || msg, type);
+          this.initForm();
+          this.$router.push({
+            name: 'DeptManage',
+            params: Object.assign({}, this.$route.params, {
+              currentPage: 1
+            })
+          });
+        } else {
+          this.warning(res.data.msg);
+        }
+        this.saveDisable = false;
+      });
+    },
+    // 关联已存在模态框
+    showConfirmDialog(msg, resolve) {
+      this.$confirm(msg, '提示', {
+        customClass: 'confirmRealation',
+        confirmButtonText: '是',
+        cancelButtonText: '否',
+        cancelButtonClass: 'cancelButton',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {
+          this.saveDisable = false;
+          this.warning('建立失败', 'error');
+        });
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.AddChemicalAndCommonMappingWrapper {
+  .AddChemicalAndCommonMappingBox {
+    min-width: 940px;
+  }
+  color: #606266;
+  .topBack {
+    top: 0;
+  }
+  .titleBox {
+    padding: 0 0 10px 0px;
+  }
+  .title {
+    width: 50%;
+    float: left;
+    font-size: 14px;
+  }
+  .AddChemicalAndCommonMappingBox {
+    padding: 20px 30px 20px 30px;
+    margin: 70px 20px 0 20px;
+    background: #fff;
+  }
+  .leftBox,
+  .midBox,
+  .rightBox {
+    width: 40%;
+    float: left;
+    min-height: 200px;
+    font-size: 14px;
+  }
+  .midBox {
+    width: 6%;
+    padding: 50px 0 0 0;
+    text-align: center;
+  }
+  .midTitle {
+    width: 40px;
+    margin: 0 auto;
+  }
+  .midLogo {
+    margin: 0 auto;
+  }
+  .leftBox,
+  .rightBox {
+    border: 1px solid #dcdfe6;
+    padding: 20px 20px;
+  }
+  .itemLabel {
+    width: 100%;
+    min-height: 50px;
+    line-height: 50px;
+    position: relative;
+  }
+  .itemLabelName,
+  .searchInput,
+  .searchName {
+    float: left;
+    color: #606266;
+  }
+  .itemLabelName {
+    width: 150px;
+  }
+  .isRequired::before {
+    content: '*';
+    color: red;
+  }
+  .searchInput,
+  .mealNameItem {
+    padding: 0 5px;
+  }
+  .searchInput,
+  .searchName {
+    display: inline-block;
+    height: 32px;
+    line-height: 32px;
+    border: 1px solid #a9a9a9;
+    margin: 8px 0 0 0;
+  }
+
+  .searchName {
+    text-align: center;
+    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: 150px;
+    top: 42px;
+    z-index: 2;
+    overflow-y: auto;
+  }
+  .itemList {
+    width: calc(100% - 131px);
+  }
+  .mealNameItem {
+    height: 30px;
+    line-height: 30px;
+    font-size: 14px;
+    cursor: pointer;
+  }
+  .mealNameItem:hover {
+    background: #f5f7fa;
+  }
+  // .selectItemName {
+  //   padding-left: 4px;
+  //   display: inline-block;
+  //   margin-top: 8px;
+  //   // width: calc(100% - 160px);s
+  //   line-height: 24px;
+  //   overflow: hidden;
+  //   word-wrap: break-word;
+  //   word-break: break-all;
+  // }
+  .previewInfo {
+    padding-left: 4px;
+    display: inline-block;
+    margin-top: 8px;
+    // width: calc(100% - 160px);s
+    line-height: 24px;
+    overflow: hidden;
+    word-wrap: break-word;
+    word-break: break-all;
+  }
+  .btn {
+    position: relative;
+    background-color: #fff;
+    margin: 0px 20px;
+    padding: 20px;
+    min-width: 960px;
+    height: 80px;
+    .el-button {
+      position: absolute;
+      right: 80px;
+      top: 20px;
+    }
+  }
+  .sumbit {
+    position: absolute;
+    display: inline-block;
+    width: 80px;
+    height: 30px;
+    line-height: 30px;
+    border: 1px solid #a9a9a9;
+    text-align: center;
+    right: 100px;
+  }
+}
+.confirmRealation {
+  .cancelButton {
+    border: 1px solid #a9a9a9;
+    span {
+      color: #606266;
+    }
+  }
+}
+</style>

+ 467 - 0
src/components/cdssManage/dept/DeptManage.vue

@@ -0,0 +1,467 @@
+<template>
+  <div>
+    <crumbs :title="title + hospitaiName" linkTo="MedicalTermCDSS" style="min-width: 1300px">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item>
+          <el-button type="text" class="downTemplate" @click="exportModule">导入模板下载</el-button>
+          <input
+            type="file"
+            name="uploadfile "
+            id="upFile"
+            @change="uploadFile($event)"
+            accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+          />
+          <el-button size="mini" @click="importPage">{{uploadInfo}}</el-button>
+          <el-button size="mini" @click="exportData">导出</el-button>
+        </el-form-item>
+        <el-form-item label="医院科室名称:">
+          <el-input size="mini" v-model="filter.hisName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="标准科室名称:">
+          <el-input size="mini" v-model="filter.uniqueName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item class="dododo">
+          <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="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column :resizable="false" prop="hisCode" label="医院科室编码" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="hisName" label="医院科室名称" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="uniqueName" label="标准科室名称" show-overflow-tooltip></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">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              @click="showDelDialog(scope.row.id)"
+              class="delete"
+              type="text"
+              size="small"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination pagepage">
+        <el-pagination
+          :current-page.sync="currentPage"
+          @current-change="currentChange"
+          background
+          :page-size="pageSize"
+          :page-sizes="pageSizeArr"
+          @size-change="handleSizeChange"
+          :layout="pageLayout"
+          :total="total"
+        ></el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/cdss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'DeptManage',
+  data: function() {
+    return {
+      list: [],
+      searched: false,
+      filter: {
+        hisName: '', // 医院诊断名称
+        uniqueName: '' //标准诊断名称
+      },
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      fileName: '',
+      formData: {},
+      headers: {},
+      uploadInfo: '导入',
+      title: '科室关联维护 | ',
+      hospitaiName: '',
+      hospitalId: ''
+    };
+  },
+  created() {
+    const { data } = this.$route.params;
+    this.hospitaiName = (data && data.name) || '';
+    this.hospitalId = data && data.hospitalId;
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    // 非首页 编辑页返回 设置 this.currentPage
+    if (Object.keys(this.$route.params).length !== 0) {
+      this.currentPage = this.$route.params.currentPage;
+    }
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage = to.params.currentPage;
+    });
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+
+    // 获取列表数据
+    getDataList(isTurnPage) {
+      const params = this.getFilterItems(isTurnPage);
+      this.searched = true;
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api.getDeptPage(params).then(res => {
+        loading.close();
+        if (res.data.code === '0') {
+          this.list = res.data.data && res.data.data.records;
+        }
+        this.total = res.data.data && res.data.data.total;
+        if (this.inCurrentPage !== undefined) {
+          this.currentPage = this.inCurrentPage;
+          this.inCurrentPage = undefined;
+        }
+      });
+    },
+
+    // 处理列表请求数据参数
+    getFilterItems(isTurnPage) {
+      const { data } = this.$route.params;
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        hisName: this.filter.hisName.trim(),
+        uniqueName: this.filter.uniqueName.trim(),
+        uniqueCode: '',
+        hospitalId: data && data.hospitalId
+      };
+      return param;
+    },
+
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList();
+    },
+    addRelation() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddDept',
+        params: Object.assign(pam, {
+          isEdit: false,
+          data: { hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    // 修改诊断关联-跳转至编辑页面
+    modifyRelation(row) {
+      const item = Object.assign({}, row);
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddDept',
+        params: Object.assign(pam, {
+          isEdit: true,
+          data: {...item, hospitalId: this.hospitalId},
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    currentChange(next) {
+      this.currentPage = next;
+      this.getDataList(true);
+      // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+      //     this.list = this.cacheData[next];
+      // } else {
+      //     this.getDataList();
+      // }
+    },
+    // 清空搜索参数
+    clearFilter() {
+      this.filter = {
+        hisName: '',
+        uniqueName: ''
+      };
+    },
+
+    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.$confirm(msg, '提示', {
+        confirmButtonText: '删除',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'cancelBtn',
+        confirmButtonClass: 'confirmC',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    // 删除关联
+    showDelDialog(id) {
+      this.showConfirmDialog('是否删除该关联?', () => {
+        api
+          .deleteDeptRecord({ id: id })
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (this.list.length == 1) {
+                //当前在最后一页且只有一条数据时,删除后跳到前一页
+                this.currentPage =
+                  this.currentPage === 1 ? 1 : this.currentPage - 1;
+              }
+              this.getDataList();
+              this.warning(res.data.msg || '操作成功', 'success');
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            if (error.code === '900010001') {
+              return false;
+            }
+            this.warning(error);
+          });
+      });
+    },
+
+    // 导出数据
+    exportData() {
+      this.$confirm('确定要导出全部科室关联数据吗?', '', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'leftbtn',
+        customClass: 'exportBox6',
+        title: '提示',
+        type: 'warning'
+        // beforeClose: (action, instance, done) => {
+        //   if (action === 'confirm') {
+        //     // instance.confirmButtonLoading = true;
+        //     // instance.confirmButtonText = '导出中...';
+        //     done()
+        //     api.exportDeptRecord().then(res => {
+        //       if (res.status === 200) {
+        //         setTimeout(() => {
+        //           utils.downloadExportedData(res.data, '科室关联数据.xls');
+        //           // done();
+        //         }, 1500);
+        //       }
+        //     });
+        //   } else {
+        //     done();
+        //   }
+        // }
+      })
+        .then(() => {
+          api.exportDeptRecord().then(res => {
+            if (res.status === 200) {
+              this.$message({ message: '导出成功', type: 'success' });
+              utils.downloadExportedData(res.data, '科室关联数据.xls');
+            }
+          });
+        })
+        .catch(() => {});
+    },
+
+    // 导入模板
+    exportModule() {
+      api.exportDeptModule().then(res => {
+        if (res.status === 200) {
+          setTimeout(() => {
+            utils.downloadExportedData(res.data, '科室导入模板.xls');
+          }, 1500);
+        }
+      });
+    },
+
+    // 点击导入
+    importPage() {
+      let inp = document.getElementById('upFile');
+      inp.click();
+    },
+    // 导入数据
+    uploadFile(e) {
+      let fileInfo = e.target.files[0];
+      // this.fileName = e.target.files[0].name; // 表单同步显示
+      e.preventDefault();
+      let formData = new FormData();
+      formData.append('file', fileInfo);
+      const header = {
+        headers: {
+          'Content-Type': 'multipart/form-data'
+        }
+      };
+      this.uploadInfo = '导入中...';
+      api.importDeptRecord(formData, header).then(res => {
+        // console.log('导入文件结果', '===================', res);
+        if (res.data.code === '00000001') {
+          this.$confirm(`数据存在异常,导入失败,请修改后再试`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else if (res.data === '' && res.status === 200) {
+          this.$confirm(`导入成功`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else {
+          this.$confirm(`${res.data.msg}`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        }
+      });
+      //解决上传相同文件不触发change
+      let inp = document.getElementById('upFile');
+      inp.value = '';
+    }
+  }
+};
+</script>
+
+
+<style lang="less" scoped>
+@import '../../../less/admin.less';
+.delete {
+  color: red;
+}
+.delete:hover {
+  color: red;
+}
+.pagination {
+  min-width: 1010px;
+}
+.downTemplate {
+  margin-right: 8px;
+  span {
+    color: #02a7f0;
+  }
+}
+#upFile {
+  display: none;
+}
+.el-message-box {
+  /deep/.cancelBtn {
+    background-color: #d7d7d7;
+    border-color: transparent;
+  }
+  /deep/.confirmC {
+    background-color: #ff545b !important;
+    border-color: transparent !important;
+  }
+  /deep/.el-message-box__header {
+    border-bottom: 1px solid #dcdfe6;
+  }
+}
+.exportBox6 {
+  /deep/ .el-message-box__btns {
+    margin-top: 20px;
+  }
+  /deep/ .el-message-box__message {
+    // text-align: center;
+  }
+  /deep/.leftbtn {
+    background-color: #d7d7d7;
+    border-color: transparent !important;
+  }
+  /deep/ .el-message-box__header {
+    border-bottom: 1px solid #dcdfe6;
+  }
+}
+.exportConfirm {
+  .cancelSure {
+    display: none;
+  }
+}
+</style>

+ 432 - 0
src/components/cdssManage/disease/AddDisease.vue

@@ -0,0 +1,432 @@
+<template>
+  <div class="AddChemicalAndCommonMappingWrapper clearfix">
+    <crumbs
+      :title="isEdit ? '诊断关联维护--修改关联 | '+ hospitaiName : '诊断关联维护--添加关联 | ' + hospitaiName"
+      class="topBack"
+      :param="$route.params"
+      linkTo="Disease"
+    ></crumbs>
+    <el-form
+      :model="form"
+      :rules="rules"
+      label-position="right"
+      label-width="120px"
+      ref="relationForm"
+    >
+      <div class="AddChemicalAndCommonMappingBox clearfix">
+        <div class="titleBox clearfix">
+          <p class="title">医院术语</p>
+          <p class="title">标准术语</p>
+        </div>
+        <div class="leftBox clearfix">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="诊断名称:" prop="hisName">
+                <el-input v-model="form.hisName" clearable style="minWidth: 240px"></el-input>
+              </el-form-item>
+              <el-form-item label="诊断名称预览:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.hisName}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+        <div class="midBox">
+          <img class="midLogo" src="../../../images/relation.png" alt />
+          <p class="midTitle">相互关联</p>
+        </div>
+        <div class="rightBox">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="诊断名称:" prop="searchText">
+                <el-select
+                  style="width:100%;minWidth: 240px"
+                  v-model="form.searchText"
+                  filterable
+                  remote
+                  clearable
+                  :loading="showDrop"
+                  loading-text="加载中..."
+                  @change="changeWord"
+                  @focus="handleFocus"
+                  @visible-change="handleVisible"
+                  placeholder="搜索"
+                  :remote-method="searchTerms"
+                  reserve-keyword
+                >
+                  <el-option
+                    v-for="item in uniqueNameList"
+                    :key="item.icd10Code"
+                    :label="item.name"
+                    :value="item"
+                    :title="item.name"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="诊断名称预览:">
+                <!-- <span class="previewInfo">{{!isEdit ? form.searchText.name : form.searchText}}</span> -->
+                <span class="previewInfo" style="minWidth: 240px">{{form.searchText}}</span>
+              </el-form-item>
+              <el-form-item label="ICD编码:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.icdCode}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+      </div>
+      <div class="btn">
+        <el-form-item>
+          <el-button type="primary" :disabled="saveDisable" @click="submitForm">确定</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+  </div>
+</template>
+<script>
+import api from '@api/cdss.js';
+export default {
+  name: 'AddDisease',
+  data() {
+    return {
+      isEdit: false,
+      hospitaiName: '',
+      editId: '',
+      uniqueNameList: [],
+      form: {
+        searchText: '', //搜索字段
+        hisName: '',
+        icdCode: ''
+      },
+
+      rules: {
+        hisName: [
+          { required: true, message: '请输入诊断名称', trigger: 'change' },
+          { max: 80, message: '诊断名称最多80字', trigger: 'change' }
+        ],
+        searchText: [
+          { required: true, message: '请选择诊断名称', trigger: 'change' }
+        ]
+      },
+      saveDisable: false, //保存按钮禁止点击
+      showDrop: false, //下拉框显示文字
+      hospitalId: ''
+    };
+  },
+  created() {
+    //修改
+    const { isEdit, data, hospitaiName } = this.$route.params;
+    // console.log(data, 'data===================');
+    this.hospitalId = data && data.hospitalId;
+    this.hospitaiName = hospitaiName;
+    if (isEdit) {
+      this.isEdit = isEdit;
+      this.editId = data.id;
+      this.form.hisName = data.hisName;
+      this.form.searchText = data.uniqueName;
+      this.form.icdCode = data.icdCode;
+    }
+  },
+  methods: {
+    // 搜索列表
+    searchTerms(query) {
+      if (!query) {
+        this.uniqueNameList = [];
+        return;
+      }
+      this.showDrop = true;
+      let params = {
+        type: 4, //诊断
+        inputStr: query,
+        sex: 3,
+        age: 0
+      };
+      api.retrievalSearch(params).then(res => {
+        this.showDrop = false;
+        if (res.data.code === '0') {
+          this.uniqueNameList = res.data.data.diseaseNames;
+        }
+      });
+    },
+    changeWord(newValue) {
+      this.form.searchText = newValue.name;
+      this.form.icdCode = newValue.icd10Code;
+    },
+
+    handleVisible(flag) {
+      if (!flag) {
+        this.uniqueNameList = [];
+      }
+    },
+    // 获取焦点
+    handleFocus() {},
+
+    // 初始化表单数据
+    initForm() {
+      this.form.hisName = '';
+      this.form.searchText = '';
+      this.form.icdCode = '';
+    },
+
+    // 建立关联-参数处理
+    submitForm() {
+      this.$refs.relationForm.validate(valid => {
+        if (valid) {
+          const { searchText, hisName, icdCode } = this.form;
+          let params = {
+            hisName: hisName,
+            uniqueName: searchText,
+            icdCode: icdCode,
+            hospitalId: this.hospitalId
+          };
+          this.showSaveDialog(params);
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 建立关联-映射关系是否已存在
+    showSaveDialog(params) {
+      this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+      api
+        .diseaseIsExistRecord(params)
+        .then(res => {
+          if (!res.data.data) {
+            // 不存在,创建新的关联
+            // 如果是编辑时,需要携带id
+            if (this.isEdit) {
+              params = { ...params, id: this.editId };
+            }
+            this.saveLisMapping(params, '保存成功', 'success');
+          } else {
+            // 已存在,提示修改
+            this.warning('该条关联已存在,无法添加');
+            this.saveDisable = false;
+          }
+        })
+        .catch(err => {
+          if (err.code === '900010001') {
+            return false;
+          }
+          this.warning(err);
+        });
+    },
+
+    // 映射关系不存在-建立关联
+    saveLisMapping(params, msg, type) {
+      api.saveOrUpdateDiseaseRecord(params).then(res => {
+        if (res.data.code === '0') {
+          this.warning(res.data.msg || msg, type);
+          this.initForm();
+          this.$router.push({
+            name: 'Disease',
+            params: Object.assign({}, this.$route.params, {
+              currentPage: 1
+            })
+          });
+        } else {
+          this.warning(res.data.msg);
+        }
+        this.saveDisable = false;
+      });
+    },
+    // 关联已存在模态框
+    showConfirmDialog(msg, resolve) {
+      this.$confirm(msg, '提示', {
+        customClass: 'confirmRealation',
+        confirmButtonText: '是',
+        cancelButtonText: '否',
+        cancelButtonClass: 'cancelButton',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {
+          this.saveDisable = false;
+          this.warning('建立失败', 'error');
+        });
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.AddChemicalAndCommonMappingWrapper {
+  .AddChemicalAndCommonMappingBox {
+    min-width: 940px;
+  }
+  color: #606266;
+  .topBack {
+    top: 0;
+  }
+  .titleBox {
+    padding: 0 0 10px 0px;
+  }
+  .title {
+    width: 50%;
+    float: left;
+    font-size: 14px;
+  }
+  .AddChemicalAndCommonMappingBox {
+    padding: 20px 30px 20px 30px;
+    margin: 70px 20px 0 20px;
+    background: #fff;
+  }
+  .leftBox,
+  .midBox,
+  .rightBox {
+    width: 40%;
+    float: left;
+    min-height: 200px;
+    font-size: 14px;
+  }
+  .midBox {
+    width: 6%;
+    padding: 50px 0 0 0;
+    text-align: center;
+  }
+  .midTitle {
+    width: 40px;
+    margin: 0 auto;
+  }
+  .midLogo {
+    margin: 0 auto;
+  }
+  .leftBox,
+  .rightBox {
+    border: 1px solid #dcdfe6;
+    padding: 20px 20px;
+  }
+  .itemLabel {
+    width: 100%;
+    min-height: 50px;
+    line-height: 50px;
+    position: relative;
+  }
+  .itemLabelName,
+  .searchInput,
+  .searchName {
+    float: left;
+    color: #606266;
+  }
+  .itemLabelName {
+    width: 150px;
+  }
+  .isRequired::before {
+    content: '*';
+    color: red;
+  }
+  .searchInput,
+  .mealNameItem {
+    padding: 0 5px;
+  }
+  .searchInput,
+  .searchName {
+    display: inline-block;
+    height: 32px;
+    line-height: 32px;
+    border: 1px solid #a9a9a9;
+    margin: 8px 0 0 0;
+  }
+
+  .searchName {
+    text-align: center;
+    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: 150px;
+    top: 42px;
+    z-index: 2;
+    overflow-y: auto;
+  }
+  .itemList {
+    width: calc(100% - 131px);
+  }
+  .mealNameItem {
+    height: 30px;
+    line-height: 30px;
+    font-size: 14px;
+    cursor: pointer;
+  }
+  .mealNameItem:hover {
+    background: #f5f7fa;
+  }
+  // .selectItemName {
+  //   padding-left: 4px;
+  //   display: inline-block;
+  //   margin-top: 8px;
+  //   // width: calc(100% - 160px);s
+  //   line-height: 24px;
+  //   overflow: hidden;
+  //   word-wrap: break-word;
+  //   word-break: break-all;
+  // }
+  .previewInfo {
+    padding-left: 4px;
+    display: inline-block;
+    margin-top: 8px;
+    // width: calc(100% - 160px);s
+    line-height: 24px;
+    overflow: hidden;
+    word-wrap: break-word;
+    word-break: break-all;
+  }
+  .btn {
+    position: relative;
+    background-color: #fff;
+    margin: 0px 20px;
+    padding: 20px;
+    min-width: 960px;
+    height: 80px;
+    .el-button {
+      position: absolute;
+      right: 80px;
+      top: 20px;
+    }
+  }
+  .sumbit {
+    position: absolute;
+    display: inline-block;
+    width: 80px;
+    height: 30px;
+    line-height: 30px;
+    border: 1px solid #a9a9a9;
+    text-align: center;
+    right: 100px;
+  }
+}
+.confirmRealation {
+  .cancelButton {
+    border: 1px solid #a9a9a9;
+    span {
+      color: #606266;
+    }
+  }
+}
+// body {
+//   .el-select-dropdown {
+//     /deep/ .el-select-dropdown__item {
+//       span {
+//         color: #333;
+//       }
+//     }
+//     ul {
+//       max-width: 200px;
+//     }
+//   }
+// }
+</style>

+ 445 - 0
src/components/cdssManage/disease/Disease.vue

@@ -0,0 +1,445 @@
+<template>
+  <div>
+    <crumbs :title="title + hospitaiName" linkTo="MedicalTermCDSS" style="min-width: 1300px">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item>
+          <el-button type="text" class="downTemplate" @click="exportModule">导入模板下载</el-button>
+          <input
+            type="file"
+            name="uploadfile "
+            id="upFile"
+            @change="uploadFile($event)"
+            accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+          />
+          <el-button size="mini" @click="importPage">{{uploadInfo}}</el-button>
+          <el-button size="mini" @click="exportData">导出</el-button>
+        </el-form-item>
+        <el-form-item label="医院诊断名称:">
+          <el-input size="mini" v-model="filter.hisName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="标准诊断名称:">
+          <el-input size="mini" v-model="filter.uniqueName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item class="dododo">
+          <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="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column :resizable="false" prop="hisName" label="医院诊断名称" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="icdCode" label="ICD-10编码" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="uniqueName" label="标准诊断名称" show-overflow-tooltip></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">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              @click="showDelDialog(scope.row.id)"
+              class="delete"
+              type="text"
+              size="small"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination pagepage">
+        <el-pagination
+          :current-page.sync="currentPage"
+          @current-change="currentChange"
+          background
+          :page-size="pageSize"
+          :page-sizes="pageSizeArr"
+          @size-change="handleSizeChange"
+          :layout="pageLayout"
+          :total="total"
+        ></el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/cdss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'Disease', //化验大小项和公表维护
+  data: function() {
+    return {
+      list: [],
+      searched: false,
+      filter: {
+        hisName: '', // 医院诊断名称
+        uniqueName: '' //标准诊断名称
+      },
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      uploadInfo: '导入',
+      title: '诊断关联维护 | ',
+      hospitaiName: '',
+      hospitalId: ''
+    };
+  },
+  created() {
+    const { data } = this.$route.params;
+    this.hospitaiName = (data && data.name) || '';
+    this.hospitalId = data && data.hospitalId;
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    // 非首页 编辑页返回 设置 this.currentPage
+    if (Object.keys(this.$route.params).length !== 0) {
+      this.currentPage = this.$route.params.currentPage;
+    }
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage = to.params.currentPage;
+    });
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+
+    // 获取列表数据
+    getDataList(isTurnPage) {
+      const params = this.getFilterItems(isTurnPage);
+      this.searched = true;
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api.getLisMappingPage(params).then(res => {
+        loading.close();
+        if (res.data.code === '0') {
+          this.list = res.data.data && res.data.data.records;
+        }
+        this.total = res.data.data && res.data.data.total;
+        if (this.inCurrentPage !== undefined) {
+          this.currentPage = this.inCurrentPage;
+          this.inCurrentPage = undefined;
+        }
+      });
+    },
+
+    // 处理列表请求数据参数
+    getFilterItems(isTurnPage) {
+      const { data } = this.$route.params;
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        hisName: this.filter.hisName.trim(),
+        uniqueName: this.filter.uniqueName.trim(),
+        icdCode: '',
+        hospitalId: data && data.hospitalId
+      };
+      return param;
+    },
+
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList();
+    },
+    addRelation() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddDisease',
+        params: Object.assign(pam, {
+          isEdit: false,
+          data: { hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    // 修改诊断关联-跳转至编辑页面
+    modifyRelation(row) {
+      const item = Object.assign({}, row);
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddDisease',
+        params: Object.assign(pam, {
+          isEdit: true,
+          data: {...item, hospitalId: this.hospitalId},
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    currentChange(next) {
+      this.currentPage = next;
+      this.getDataList(true);
+      // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+      //     this.list = this.cacheData[next];
+      // } else {
+      //     this.getDataList();
+      // }
+    },
+    // 清空搜索参数
+    clearFilter() {
+      this.filter = {
+        hisName: '',
+        uniqueName: ''
+      };
+    },
+
+    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.$confirm(msg, '提示', {
+        confirmButtonText: '删除',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'cancelBtn1',
+        confirmButtonClass: 'confirmC1',
+        type: 'warning',
+        customClass: 'cdssMessage'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    // 删除关联
+    showDelDialog(id) {
+      this.showConfirmDialog('是否删除该关联?', () => {
+        api
+          .deleteDiseaseRecord({ id: id })
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (this.list.length == 1) {
+                //当前在最后一页且只有一条数据时,删除后跳到前一页
+                this.currentPage =
+                  this.currentPage === 1 ? 1 : this.currentPage - 1;
+              }
+              this.getDataList();
+              this.warning(res.data.msg || '操作成功', 'success');
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            if (error.code === '900010001') {
+              return false;
+            }
+            this.warning(error);
+          });
+      });
+    },
+
+    // 导出数据
+    exportData() {
+      this.$confirm('确定要导出全部诊断关联数据吗?', '', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'leftbtn',
+        customClass: 'exportBox',
+        title: '提示',
+        type: 'warning'
+      })
+        .then(() => {
+          api.exportDiseaseRecord({ hospitalId: this.hospitalId }).then(res => {
+            if (res.status === 200) {
+              this.$message({ message: '导出成功', type: 'success' });
+              utils.downloadExportedData(res.data, '诊断关联数据.xls');
+            }
+          });
+        })
+        .catch(() => {
+          // this.$message({ message: '导出失败', type: 'waring' });
+        });
+    },
+
+    // 导入模板
+    exportModule() {
+      api.exportDiseaseModule().then(res => {
+        if (res.status === 200) {
+          setTimeout(() => {
+            utils.downloadExportedData(res.data, '诊断导入模板.xls');
+          }, 1500);
+        }
+      });
+    },
+
+    // 点击导入
+    importPage() {
+      let inp = document.getElementById('upFile');
+      inp.click();
+    },
+    // 导入数据
+    uploadFile(e) {
+      let fileInfo = e.target.files[0];
+      e.preventDefault();
+      let formData = new FormData();
+      formData.append('file', fileInfo);
+      formData.append('hospitalId', this.hospitalId);
+      const header = {
+        headers: {
+          'Content-Type': 'multipart/form-data'
+        }
+      };
+      this.uploadInfo = '导入中...';
+      api.importDiseaseRecord(formData, header).then(res => {
+        if (res.data.code === '00000001') {
+          this.$confirm(`数据存在异常,导入失败,请修改后再试`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else if (res.data === '' && res.status === 200) {
+          this.$confirm(`导入成功`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else {
+          this.$confirm(`${res.data.msg}`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        }
+      });
+      //解决上传相同文件不触发change
+      let inp = document.getElementById('upFile');
+      inp.value = '';
+    }
+  }
+};
+</script>
+
+<style lang="less">
+@import '../../../less/admin.less';
+</style>
+
+<style lang="less" scoped>
+.delete {
+  color: red;
+}
+.delete:hover {
+  color: red;
+}
+.pagination {
+  min-width: 1010px;
+}
+.downTemplate {
+  margin-right: 8px;
+  span {
+    color: #02a7f0;
+  }
+}
+#upFile {
+  display: none !important;
+}
+.cdssMessage {
+  /deep/.el-message-box__btns {
+    .cancelBtn1 {
+      background-color: #d7d7d7 !important;
+      border-color: transparent !important;
+    }
+    .confirmC1 {
+      background-color: #ff545b !important;
+      border-color: transparent !important;
+    }
+  }
+}
+.exportBox {
+  /deep/ .el-message-box__btns {
+    margin-top: 20px;
+  }
+  /deep/ .el-message-box__message {
+    // text-align: center;
+  }
+  /deep/.leftbtn {
+    background-color: #d7d7d7;
+    border-color: transparent !important;
+  }
+  /deep/ .el-message-box__header {
+    border-bottom: 1px solid #dcdfe6;
+  }
+}
+</style>

+ 427 - 0
src/components/cdssManage/drug/AddDrug.vue

@@ -0,0 +1,427 @@
+<template>
+  <div class="AddChemicalAndCommonMappingWrapper clearfix">
+    <crumbs
+      :title="isEdit ? '药品关联维护--修改关联 | '+ hospitaiName : '药品关联维护--添加关联 | ' + hospitaiName"
+      class="topBack"
+      :param="$route.params"
+      linkTo="DrugManage"
+    ></crumbs>
+    <el-form
+      :model="form"
+      :rules="rules"
+      label-position="right"
+      label-width="120px"
+      ref="relationForm"
+    >
+      <div class="AddChemicalAndCommonMappingBox clearfix">
+        <div class="titleBox clearfix">
+          <p class="title">医院术语</p>
+          <p class="title">标准术语</p>
+        </div>
+        <div class="leftBox clearfix">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="药品名称:" prop="hisName">
+                <el-input v-model="form.hisName" clearable style="minWidth: 240px"></el-input>
+              </el-form-item>
+              <el-form-item label="药品名称预览:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.hisName}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+        <div class="midBox">
+          <img class="midLogo" src="../../../images/relation.png" alt />
+          <p class="midTitle">相互关联</p>
+        </div>
+        <div class="rightBox">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="药品名称:" prop="searchText">
+                <el-select
+                  style="width:100%;minWidth: 240px"
+                  v-model="form.searchText"
+                  filterable
+                  remote
+                  clearable
+                  :loading="showDrop"
+                  loading-text="加载中..."
+                  @change="changeWord"
+                  @focus="handleFocus"
+                  @visible-change="handleVisible"
+                  placeholder="搜索"
+                  :remote-method="searchTerms"
+                  reserve-keyword
+                >
+                  <el-option
+                    v-for="(item,idx) in uniqueNameList"
+                    :key="idx"
+                    :label="item.name"
+                    :value="item.name"
+                    :title="item.name"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="药品名称预览:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.searchText}}</span>
+              </el-form-item>
+              <el-form-item label="药品剂型:">
+                <el-select
+                  v-model="form.form"
+                  placeholder="请选择"
+                  clearable
+                  style="width:100%;minWidth: 240px"
+                >
+                  <el-option
+                    v-for="item in drugForm"
+                    :key="item.value"
+                    :label="item.name"
+                    :value="item.name"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+      </div>
+      <div class="btn">
+        <el-form-item>
+          <el-button type="primary" :disabled="saveDisable" @click="submitForm">确定</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+  </div>
+</template>
+<script>
+import api from '@api/cdss.js';
+import config from '@api/config';
+export default {
+  name: 'AddDrug',
+  data() {
+    return {
+      isEdit: false,
+      hospitaiName: '',
+      editId: '',
+      uniqueNameList: [],
+      form: {
+        searchText: '', //搜索字段
+        hisName: '',
+        form: ''
+      },
+      rules: {
+        hisName: [
+          { required: true, message: '请输入药品名称', trigger: 'change' },
+          { max: 80, message: '药品名称最多80字', trigger: 'change' }
+        ],
+        searchText: [
+          { required: true, message: '请选择药品名称', trigger: 'change' }
+        ]
+      },
+      saveDisable: false, //保存按钮禁止点击
+      showDrop: false, //下拉框显示文字
+      drugForm: config.drugForm,
+      hospitalId: ''
+    };
+  },
+  created() {
+    //修改
+    const { isEdit, data, hospitaiName } = this.$route.params;
+    this.hospitaiName = hospitaiName;
+    this.hospitalId = data && data.hospitalId;
+    if (isEdit) {
+      this.isEdit = isEdit;
+      this.editId = data.id;
+      this.form.hisName = data.hisName;
+      this.form.searchText = data.uniqueName;
+      this.form.form = data.form;
+    }
+  },
+  methods: {
+    // 搜索列表
+    searchTerms(query) {
+      if (!query) {
+        this.uniqueNameList = [];
+        return;
+      }
+      this.showDrop = true;
+      let params = {
+        type: 5, //药品
+        inputStr: query,
+        sex: 3,
+        age: 0
+      };
+      api.retrievalSearch(params).then(res => {
+        this.showDrop = false;
+        if (res.data.code === '0') {
+          this.uniqueNameList = res.data.data.drugNames;
+        }
+      });
+    },
+    changeWord() {},
+    // 获取焦点
+    handleFocus() {},
+
+    handleVisible(flag) {
+      if (!flag) {
+        this.uniqueNameList = [];
+      }
+    },
+
+    // 初始化表单数据
+    initForm() {
+      this.form.hisName = '';
+      this.form.searchText = '';
+    },
+
+    // 建立关联-参数处理
+    submitForm() {
+      this.$refs.relationForm.validate(valid => {
+        if (valid) {
+          const { searchText, hisName, form } = this.form;
+          let params = {
+            hisName: hisName,
+            uniqueName: searchText,
+            form: form,
+            hospitalId: this.hospitalId
+          };
+          this.showSaveDialog(params);
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 建立关联-映射关系是否已存在
+    showSaveDialog(params) {
+      this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+      api
+        .drugIsExistRecord(params)
+        .then(res => {
+          if (!res.data.data) {
+            // 不存在,创建新的关联
+            // 如果是编辑时,需要携带id
+            if (this.isEdit) {
+              params = { ...params, id: this.editId };
+            }
+            this.saveLisMapping(params, '保存成功', 'success');
+          } else {
+            // 已存在,提示修改
+            this.warning('该条关联已存在,无法添加');
+            this.saveDisable = false;
+          }
+        })
+        .catch(err => {
+          if (err.code === '900010001') {
+            return false;
+          }
+          this.warning(err);
+        });
+    },
+
+    // 映射关系不存在-建立关联
+    saveLisMapping(params, msg, type) {
+      api.saveOrUpdateDrugRecord(params).then(res => {
+        if (res.data.code === '0') {
+          this.warning(res.data.msg || msg, type);
+          this.initForm();
+          this.$router.push({
+            name: 'DrugManage',
+            params: Object.assign({}, this.$route.params, {
+              currentPage: 1
+            })
+          });
+        } else {
+          this.warning(res.data.msg);
+        }
+        this.saveDisable = false;
+      });
+    },
+    // 关联已存在模态框
+    showConfirmDialog(msg, resolve) {
+      this.$confirm(msg, '提示', {
+        customClass: 'confirmRealation',
+        confirmButtonText: '是',
+        cancelButtonText: '否',
+        cancelButtonClass: 'cancelButton',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {
+          this.saveDisable = false;
+          this.warning('建立失败', 'error');
+        });
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.AddChemicalAndCommonMappingWrapper {
+  .AddChemicalAndCommonMappingBox {
+    min-width: 940px;
+  }
+  color: #606266;
+  .topBack {
+    top: 0;
+  }
+  .titleBox {
+    padding: 0 0 10px 0px;
+  }
+  .title {
+    width: 50%;
+    float: left;
+    font-size: 14px;
+  }
+  .AddChemicalAndCommonMappingBox {
+    padding: 20px 30px 20px 30px;
+    margin: 70px 20px 0 20px;
+    background: #fff;
+  }
+  .leftBox,
+  .midBox,
+  .rightBox {
+    width: 40%;
+    float: left;
+    min-height: 200px;
+    font-size: 14px;
+  }
+  .midBox {
+    width: 6%;
+    padding: 50px 0 0 0;
+    text-align: center;
+  }
+  .midTitle {
+    width: 40px;
+    margin: 0 auto;
+  }
+  .midLogo {
+    margin: 0 auto;
+  }
+  .leftBox,
+  .rightBox {
+    border: 1px solid #dcdfe6;
+    padding: 20px 20px;
+  }
+  .itemLabel {
+    width: 100%;
+    min-height: 50px;
+    line-height: 50px;
+    position: relative;
+  }
+  .itemLabelName,
+  .searchInput,
+  .searchName {
+    float: left;
+    color: #606266;
+  }
+  .itemLabelName {
+    width: 150px;
+  }
+  .isRequired::before {
+    content: '*';
+    color: red;
+  }
+  .searchInput,
+  .mealNameItem {
+    padding: 0 5px;
+  }
+  .searchInput,
+  .searchName {
+    display: inline-block;
+    height: 32px;
+    line-height: 32px;
+    border: 1px solid #a9a9a9;
+    margin: 8px 0 0 0;
+  }
+
+  .searchName {
+    text-align: center;
+    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: 150px;
+    top: 42px;
+    z-index: 2;
+    overflow-y: auto;
+  }
+  .itemList {
+    width: calc(100% - 131px);
+  }
+  .mealNameItem {
+    height: 30px;
+    line-height: 30px;
+    font-size: 14px;
+    cursor: pointer;
+  }
+  .mealNameItem:hover {
+    background: #f5f7fa;
+  }
+  // .selectItemName {
+  //   padding-left: 4px;
+  //   display: inline-block;
+  //   margin-top: 8px;
+  //   // width: calc(100% - 160px);s
+  //   line-height: 24px;
+  //   overflow: hidden;
+  //   word-wrap: break-word;
+  //   word-break: break-all;
+  // }
+  .previewInfo {
+    padding-left: 4px;
+    display: inline-block;
+    margin-top: 8px;
+    // width: calc(100% - 160px);s
+    line-height: 24px;
+    overflow: hidden;
+    word-wrap: break-word;
+    word-break: break-all;
+  }
+  .btn {
+    position: relative;
+    background-color: #fff;
+    margin: 0px 20px;
+    padding: 20px;
+    min-width: 960px;
+    height: 80px;
+    .el-button {
+      position: absolute;
+      right: 80px;
+      top: 20px;
+    }
+  }
+  .sumbit {
+    position: absolute;
+    display: inline-block;
+    width: 80px;
+    height: 30px;
+    line-height: 30px;
+    border: 1px solid #a9a9a9;
+    text-align: center;
+    right: 100px;
+  }
+}
+.confirmRealation {
+  .cancelButton {
+    border: 1px solid #a9a9a9;
+    span {
+      color: #606266;
+    }
+  }
+}
+</style>

+ 456 - 0
src/components/cdssManage/drug/DrugManage.vue

@@ -0,0 +1,456 @@
+<template>
+  <div>
+    <crumbs :title="title + hospitaiName" linkTo="MedicalTermCDSS" style="min-width: 1300px">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item>
+          <el-button type="text" class="downTemplate" @click="exportModule">导入模板下载</el-button>
+          <input
+            type="file"
+            name="uploadfile "
+            id="upFile"
+            @change="uploadFile($event)"
+            accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+          />
+          <el-button size="mini" @click="importPage">{{uploadInfo}}</el-button>
+          <el-button size="mini" @click="exportData">导出</el-button>
+        </el-form-item>
+        <el-form-item label="医院药品名称:">
+          <el-input size="mini" v-model="filter.hisName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="标准药品名称:">
+          <el-input size="mini" v-model="filter.uniqueName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item class="dododo">
+          <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="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column :resizable="false" prop="hisName" label="医院药品名称" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="uniqueName" label="标准药品名称" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="form" label="药品剂型" show-overflow-tooltip></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">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              @click="showDelDialog(scope.row.id)"
+              class="delete"
+              type="text"
+              size="small"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination pagepage">
+        <el-pagination
+          :current-page.sync="currentPage"
+          @current-change="currentChange"
+          background
+          :page-size="pageSize"
+          :page-sizes="pageSizeArr"
+          @size-change="handleSizeChange"
+          :layout="pageLayout"
+          :total="total"
+        ></el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/cdss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'DrugManage', //化验大小项和公表维护
+  data: function() {
+    return {
+      list: [],
+      searched: false,
+      filter: {
+        hisName: '', // 医院诊断名称
+        uniqueName: '' //标准诊断名称
+      },
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      uploadInfo: '导入',
+      title: '药品关联维护 | ',
+      hospitaiName: '',
+      hospitalId: ''
+    };
+  },
+  created() {
+    const { data } = this.$route.params;
+    this.hospitaiName = (data && data.name) || '';
+    this.hospitalId = data && data.hospitalId;
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    // 非首页 编辑页返回 设置 this.currentPage
+    if (Object.keys(this.$route.params).length !== 0) {
+      this.currentPage = this.$route.params.currentPage;
+    }
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage = to.params.currentPage;
+    });
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+
+    // 获取列表数据
+    getDataList(isTurnPage) {
+      const params = this.getFilterItems(isTurnPage);
+      this.searched = true;
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api.getDrugPage(params).then(res => {
+        loading.close();
+        if (res.data.code === '0') {
+          this.list = res.data.data && res.data.data.records;
+        }
+        this.total = res.data.data && res.data.data.total;
+        if (this.inCurrentPage !== undefined) {
+          this.currentPage = this.inCurrentPage;
+          this.inCurrentPage = undefined;
+        }
+      });
+    },
+
+    // 处理列表请求数据参数
+    getFilterItems(isTurnPage) {
+      const { data } = this.$route.params;
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        hisName: this.filter.hisName.trim(),
+        uniqueName: this.filter.uniqueName.trim(),
+        uniqueCode: '',
+        hospitalId: data && data.hospitalId
+      };
+      return param;
+    },
+
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList();
+    },
+    addRelation() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddDrug',
+        params: Object.assign(pam, {
+          isEdit: false,
+          data: { hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    // 修改诊断关联-跳转至编辑页面
+    modifyRelation(row) {
+      const item = Object.assign({}, row);
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddDrug',
+        params: Object.assign(pam, {
+          isEdit: true,
+          data: { ...item, hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    currentChange(next) {
+      this.currentPage = next;
+      this.getDataList(true);
+      // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+      //     this.list = this.cacheData[next];
+      // } else {
+      //     this.getDataList();
+      // }
+    },
+    // 清空搜索参数
+    clearFilter() {
+      this.filter = {
+        hisName: '',
+        uniqueName: ''
+      };
+    },
+
+    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.$confirm(msg, '提示', {
+        confirmButtonText: '删除',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'cancelBtn',
+        confirmButtonClass: 'confirmC',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    // 删除关联
+    showDelDialog(id) {
+      this.showConfirmDialog('是否删除该关联?', () => {
+        api
+          .deleteDrugRecord({ id: id })
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (this.list.length == 1) {
+                //当前在最后一页且只有一条数据时,删除后跳到前一页
+                this.currentPage =
+                  this.currentPage === 1 ? 1 : this.currentPage - 1;
+              }
+              this.getDataList();
+              this.warning(res.data.msg || '操作成功', 'success');
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            if (error.code === '900010001') {
+              return false;
+            }
+            this.warning(error);
+          });
+      });
+    },
+
+    // 导出数据
+    exportData() {
+      this.$confirm('确定要导出全部药品关联数据吗?', '', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'leftbtn',
+        customClass: 'exportBox6',
+        title: '提示',
+        type: 'warning'
+        // beforeClose: (action, instance, done) => {
+        //   if (action === 'confirm') {
+        //     // instance.confirmButtonLoading = true;
+        //     instance.confirmButtonText = '导出中...';
+        //     api.exportDrugRecord().then(res => {
+        //       if (res.status === 200) {
+        //         setTimeout(() => {
+        //           utils.downloadExportedData(res.data, '药品关联数据.xls');
+        //           done();
+        //         }, 1500);
+        //       }
+        //     });
+        //   } else {
+        //     done();
+        //   }
+        // }
+      })
+        .then(() => {
+          api.exportDrugRecord().then(res => {
+            if (res.status === 200) {
+              this.$message({ message: '导出成功', type: 'success' });
+              utils.downloadExportedData(res.data, '药品关联数据.xls');
+            }
+          });
+        })
+        .catch(() => {
+          // this.$message({ message: '导出失败', type: 'waring' });
+        });
+    },
+
+    // 导入模板
+    exportModule() {
+      api.exportDrugModule().then(res => {
+        if (res.status === 200) {
+          setTimeout(() => {
+            utils.downloadExportedData(res.data, '药品导入模板.xls');
+          }, 1500);
+        }
+      });
+    },
+
+    // 点击导入
+    importPage() {
+      let inp = document.getElementById('upFile');
+      inp.click();
+    },
+    // 导入数据
+    uploadFile(e) {
+      let fileInfo = e.target.files[0];
+      e.preventDefault();
+      let formData = new FormData();
+      formData.append('file', fileInfo);
+      const header = {
+        headers: {
+          'Content-Type': 'multipart/form-data'
+        }
+      };
+      this.uploadInfo = '导入中...';
+      api.importDrugRecord(formData, header).then(res => {
+        // console.log(res, '======================res导入结果');
+        if (res.data.code === '00000001') {
+          this.$confirm(`数据存在异常,导入失败,请修改后再试`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else if (res.data === '' && res.status === 200) {
+          this.$confirm(`导入成功`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else {
+          this.$confirm(`${res.data.msg}`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        }
+      });
+      //解决上传相同文件不触发change
+      let inp = document.getElementById('upFile');
+      inp.value = '';
+    }
+  }
+};
+</script>
+
+
+<style lang="less" scoped>
+@import '../../../less/admin.less';
+.delete {
+  color: red;
+}
+.delete:hover {
+  color: red;
+}
+.pagination {
+  min-width: 1010px;
+}
+.downTemplate {
+  margin-right: 8px;
+  span {
+    color: #02a7f0;
+  }
+}
+#upFile {
+  display: none !important;
+}
+.el-message-box {
+  /deep/.cancelBtn {
+    background-color: #d7d7d7;
+    border-color: transparent;
+  }
+  /deep/.confirmC {
+    background-color: #ff545b !important;
+    border-color: transparent !important;
+  }
+}
+.exportBox6 {
+  /deep/ .el-message-box__btns {
+    margin-top: 20px;
+  }
+  /deep/ .el-message-box__message {
+    // text-align: center;
+  }
+  /deep/.leftbtn {
+    background-color: #d7d7d7;
+    border-color: transparent !important;
+  }
+  /deep/ .el-message-box__header {
+    border-bottom: 1px solid #dcdfe6;
+  }
+}
+</style>

+ 405 - 0
src/components/cdssManage/fusion/AddFusion.vue

@@ -0,0 +1,405 @@
+<template>
+  <div class="AddChemicalAndCommonMappingWrapper clearfix">
+    <crumbs
+      :title="isEdit ? '输血关联维护--修改关联 | ' + hospitaiName : '输血关联维护--添加关联 | ' + hospitaiName"
+      class="topBack"
+      :param="$route.params"
+      linkTo="Fusion"
+    ></crumbs>
+    <el-form
+      :model="form"
+      :rules="rules"
+      label-position="right"
+      label-width="120px"
+      ref="relationForm"
+    >
+      <div class="AddChemicalAndCommonMappingBox clearfix">
+        <div class="titleBox clearfix">
+          <p class="title">医院术语</p>
+          <p class="title">标准术语</p>
+        </div>
+        <div class="leftBox clearfix">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="输血类型:" prop="hisName">
+                <el-input v-model="form.hisName" clearable style="minWidth: 240px"></el-input>
+              </el-form-item>
+              <el-form-item label="输血类型预览:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.hisName}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+        <div class="midBox">
+          <img class="midLogo" src="../../../images/relation.png" alt />
+          <p class="midTitle">相互关联</p>
+        </div>
+        <div class="rightBox">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="输血类型:" prop="searchText">
+                <el-select
+                  style="width:100%;minWidth: 240px"
+                  v-model="form.searchText"
+                  filterable
+                  remote
+                  clearable
+                  :loading="showDrop"
+                  loading-text="加载中..."
+                  @change="changeWord"
+                  @focus="handleFocus"
+                  @visible-change="handleVisible"
+                  placeholder="搜索"
+                  :remote-method="searchTerms"
+                  reserve-keyword
+                >
+                  <el-option
+                    v-for="(item,idx) in uniqueNameList"
+                    :key="idx"
+                    :label="item"
+                    :value="item"
+                    :title="item"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="输血类型预览:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.searchText}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+      </div>
+      <div class="btn">
+        <el-form-item>
+          <el-button type="primary" :disabled="saveDisable" @click="submitForm">确定</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+  </div>
+</template>
+<script>
+import api from '@api/cdss.js';
+export default {
+  name: 'AddFusion',
+  data() {
+    return {
+      isEdit: false,
+      hospitaiName: '',
+      editId: '',
+      uniqueNameList: [],
+      form: {
+        searchText: '', //搜索字段
+        hisName: ''
+      },
+      rules: {
+        hisName: [
+          { required: true, message: '请输入输血类型', trigger: 'change' },
+          { max: 80, message: '输血类型最多80字', trigger: 'change' }
+        ],
+        searchText: [
+          { required: true, message: '请选择输血类型', trigger: 'change' }
+        ]
+      },
+      saveDisable: false, //保存按钮禁止点击
+      showDrop: false, //下拉框显示文字
+      hospitalId: ''
+    };
+  },
+  created() {
+    //修改
+    const { isEdit, data, hospitaiName } = this.$route.params;
+    this.hospitaiName = hospitaiName;
+    this.hospitalId = data && data.hospitalId;
+    if (isEdit) {
+      this.isEdit = isEdit;
+      this.editId = data.id;
+      this.form.hisName = data.hisName;
+      this.form.searchText = data.uniqueName;
+    }
+  },
+  methods: {
+    // 搜索列表
+    searchTerms(query) {
+      if (!query) {
+        this.uniqueNameList = [];
+        return;
+      }
+      this.showDrop = true;
+      let params = {
+        type: 8, //输血
+        inputStr: query,
+        sex: 3,
+        age: 0
+      };
+      api.retrievalSearch(params).then(res => {
+        this.showDrop = false;
+        if (res.data.code === '0') {
+          this.uniqueNameList = res.data.data.transfusionNames;
+        }
+      });
+    },
+    changeWord() {},
+    // 获取焦点
+    handleFocus() {},
+    handleVisible(flag) {
+      if (!flag) {
+        this.uniqueNameList = [];
+      }
+    },
+    // 初始化表单数据
+    initForm() {
+      this.form.hisName = '';
+      this.form.searchText = '';
+    },
+
+    // 建立关联-参数处理
+    submitForm() {
+      this.$refs.relationForm.validate(valid => {
+        if (valid) {
+          const { searchText, hisName } = this.form;
+          let params = {
+            hisName: hisName,
+            uniqueName: searchText,
+            hospitalId: this.hospitalId
+          };
+          this.showSaveDialog(params);
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 建立关联-映射关系是否已存在
+    showSaveDialog(params) {
+      this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+      api
+        .fusionIsExistRecord(params)
+        .then(res => {
+          if (!res.data.data) {
+            // 不存在,创建新的关联
+            // 如果是编辑时,需要携带id
+            if (this.isEdit) {
+              params = { ...params, id: this.editId };
+            }
+            this.saveLisMapping(params, '保存成功', 'success');
+          } else {
+            // 已存在,提示修改
+            this.warning('该条关联已存在,无法添加');
+            this.saveDisable = false;
+          }
+        })
+        .catch(err => {
+          if (err.code === '900010001') {
+            return false;
+          }
+          this.warning(err);
+        });
+    },
+
+    // 映射关系不存在-建立关联
+    saveLisMapping(params, msg, type) {
+      api.saveOrUpdateFusionRecord(params).then(res => {
+        if (res.data.code === '0') {
+          this.warning(res.data.msg || msg, type);
+          this.initForm();
+          this.$router.push({
+            name: 'Fusion',
+            params: Object.assign({}, this.$route.params, {
+              currentPage: 1
+            })
+          });
+        } else {
+          this.warning(res.data.msg);
+        }
+        this.saveDisable = false;
+      });
+    },
+    // 关联已存在模态框
+    showConfirmDialog(msg, resolve) {
+      this.$confirm(msg, '提示', {
+        customClass: 'confirmRealation',
+        confirmButtonText: '是',
+        cancelButtonText: '否',
+        cancelButtonClass: 'cancelButton',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {
+          this.saveDisable = false;
+          this.warning('建立失败', 'error');
+        });
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.AddChemicalAndCommonMappingWrapper {
+  .AddChemicalAndCommonMappingBox {
+    min-width: 940px;
+  }
+  color: #606266;
+  .topBack {
+    top: 0;
+  }
+  .titleBox {
+    padding: 0 0 10px 0px;
+  }
+  .title {
+    width: 50%;
+    float: left;
+    font-size: 14px;
+  }
+  .AddChemicalAndCommonMappingBox {
+    padding: 20px 30px 20px 30px;
+    margin: 70px 20px 0 20px;
+    background: #fff;
+  }
+  .leftBox,
+  .midBox,
+  .rightBox {
+    width: 40%;
+    float: left;
+    min-height: 200px;
+    font-size: 14px;
+  }
+  .midBox {
+    width: 6%;
+    padding: 50px 0 0 0;
+    text-align: center;
+  }
+  .midTitle {
+    width: 40px;
+    margin: 0 auto;
+  }
+  .midLogo {
+    margin: 0 auto;
+  }
+  .leftBox,
+  .rightBox {
+    border: 1px solid #dcdfe6;
+    padding: 20px 20px;
+  }
+  .itemLabel {
+    width: 100%;
+    min-height: 50px;
+    line-height: 50px;
+    position: relative;
+  }
+  .itemLabelName,
+  .searchInput,
+  .searchName {
+    float: left;
+    color: #606266;
+  }
+  .itemLabelName {
+    width: 150px;
+  }
+  .isRequired::before {
+    content: '*';
+    color: red;
+  }
+  .searchInput,
+  .mealNameItem {
+    padding: 0 5px;
+  }
+  .searchInput,
+  .searchName {
+    display: inline-block;
+    height: 32px;
+    line-height: 32px;
+    border: 1px solid #a9a9a9;
+    margin: 8px 0 0 0;
+  }
+
+  .searchName {
+    text-align: center;
+    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: 150px;
+    top: 42px;
+    z-index: 2;
+    overflow-y: auto;
+  }
+  .itemList {
+    width: calc(100% - 131px);
+  }
+  .mealNameItem {
+    height: 30px;
+    line-height: 30px;
+    font-size: 14px;
+    cursor: pointer;
+  }
+  .mealNameItem:hover {
+    background: #f5f7fa;
+  }
+  // .selectItemName {
+  //   padding-left: 4px;
+  //   display: inline-block;
+  //   margin-top: 8px;
+  //   // width: calc(100% - 160px);s
+  //   line-height: 24px;
+  //   overflow: hidden;
+  //   word-wrap: break-word;
+  //   word-break: break-all;
+  // }
+  .previewInfo {
+    padding-left: 4px;
+    display: inline-block;
+    margin-top: 8px;
+    // width: calc(100% - 160px);s
+    line-height: 24px;
+    overflow: hidden;
+    word-wrap: break-word;
+    word-break: break-all;
+  }
+  .btn {
+    position: relative;
+    background-color: #fff;
+    margin: 0px 20px;
+    padding: 20px;
+    min-width: 960px;
+    height: 80px;
+    .el-button {
+      position: absolute;
+      right: 80px;
+      top: 20px;
+    }
+  }
+  .sumbit {
+    position: absolute;
+    display: inline-block;
+    width: 80px;
+    height: 30px;
+    line-height: 30px;
+    border: 1px solid #a9a9a9;
+    text-align: center;
+    right: 100px;
+  }
+}
+.confirmRealation {
+  .cancelButton {
+    border: 1px solid #a9a9a9;
+    span {
+      color: #606266;
+    }
+  }
+}
+</style>

+ 453 - 0
src/components/cdssManage/fusion/Fusion.vue

@@ -0,0 +1,453 @@
+<template>
+  <div>
+    <crumbs :title="title + hospitaiName" linkTo="MedicalTermCDSS" style="min-width:1300px">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item>
+          <el-button type="text" class="downTemplate" @click="exportModule">导入模板下载</el-button>
+          <input
+            type="file"
+            name="uploadfile "
+            id="upFile"
+            @change="uploadFile($event)"
+            accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+          />
+          <el-button size="mini" @click="importPage">{{uploadInfo}}</el-button>
+          <el-button size="mini" @click="exportData">导出</el-button>
+        </el-form-item>
+        <el-form-item label="医院输血类型:">
+          <el-input size="mini" v-model="filter.hisName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="标准输血术语:">
+          <el-input size="mini" v-model="filter.uniqueName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item class="dododo">
+          <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="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column :resizable="false" prop="hisName" label="医院输血类型" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="uniqueName" label="标准输血类型" show-overflow-tooltip></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">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              @click="showDelDialog(scope.row.id)"
+              class="delete"
+              type="text"
+              size="small"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination pagepage">
+        <el-pagination
+          :current-page.sync="currentPage"
+          @current-change="currentChange"
+          background
+          :page-size="pageSize"
+          :page-sizes="pageSizeArr"
+          @size-change="handleSizeChange"
+          :layout="pageLayout"
+          :total="total"
+        ></el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/cdss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'Fusion', //化验大小项和公表维护
+  data: function() {
+    return {
+      list: [],
+      searched: false,
+      filter: {
+        hisName: '', // 医院诊断名称
+        uniqueName: '' //标准诊断名称
+      },
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      uploadInfo: '导入',
+      title: '输血关联维护 | ',
+      hospitaiName: '',
+      hospitalId: ''
+    };
+  },
+  created() {
+    const { data } = this.$route.params;
+    this.hospitaiName = (data && data.name) || '';
+    this.hospitalId = data && data.hospitalId;
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    // 非首页 编辑页返回 设置 this.currentPage
+    if (Object.keys(this.$route.params).length !== 0) {
+      this.currentPage = this.$route.params.currentPage;
+    }
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage = to.params.currentPage;
+    });
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+
+    // 获取列表数据
+    getDataList(isTurnPage) {
+      const params = this.getFilterItems(isTurnPage);
+      this.searched = true;
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api.getFusionPage(params).then(res => {
+        loading.close();
+        if (res.data.code === '0') {
+          this.list = res.data.data && res.data.data.records;
+        }
+        this.total = res.data.data && res.data.data.total;
+        if (this.inCurrentPage !== undefined) {
+          this.currentPage = this.inCurrentPage;
+          this.inCurrentPage = undefined;
+        }
+      });
+    },
+
+    // 处理列表请求数据参数
+    getFilterItems(isTurnPage) {
+      const { data } = this.$route.params;
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        hisName: this.filter.hisName.trim(),
+        uniqueName: this.filter.uniqueName.trim(),
+        uniqueCode: '',
+        hospitalId: data && data.hospitalId
+      };
+      return param;
+    },
+
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList();
+    },
+    addRelation() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddFusion',
+        params: Object.assign(pam, {
+          isEdit: false,
+          data: { hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    // 修改诊断关联-跳转至编辑页面
+    modifyRelation(row) {
+      const item = Object.assign({}, row);
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddFusion',
+        params: Object.assign(pam, {
+          isEdit: true,
+          data: { ...item, hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    currentChange(next) {
+      this.currentPage = next;
+      this.getDataList(true);
+      // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+      //     this.list = this.cacheData[next];
+      // } else {
+      //     this.getDataList();
+      // }
+    },
+    // 清空搜索参数
+    clearFilter() {
+      this.filter = {
+        hisName: '',
+        uniqueName: ''
+      };
+    },
+
+    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.$confirm(msg, '提示', {
+        confirmButtonText: '删除',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'cancelBtn',
+        confirmButtonClass: 'confirmC',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    // 删除关联
+    showDelDialog(id) {
+      this.showConfirmDialog('是否删除该关联?', () => {
+        api
+          .deleteFusionRecord({ id: id })
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (this.list.length == 1) {
+                //当前在最后一页且只有一条数据时,删除后跳到前一页
+                this.currentPage =
+                  this.currentPage === 1 ? 1 : this.currentPage - 1;
+              }
+              this.getDataList();
+              this.warning(res.data.msg || '操作成功', 'success');
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            if (error.code === '900010001') {
+              return false;
+            }
+            this.warning(error);
+          });
+      });
+    },
+
+    // 导出数据
+    exportData() {
+      this.$confirm('确定要导出全部输血关联数据吗?', '', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'leftbtn',
+        customClass: 'exportBox6',
+        title: '提示',
+        type: 'warning'
+        // beforeClose: (action, instance, done) => {
+        //   if (action === 'confirm') {
+        //     // instance.confirmButtonLoading = true;
+        //     instance.confirmButtonText = '导出中...';
+        //     api.exportFusionRecord().then(res => {
+        //       if (res.status === 200) {
+        //         setTimeout(() => {
+        //           utils.downloadExportedData(res.data, '输血关联数据.xls');
+        //           done();
+        //         }, 1500);
+        //       }
+        //     });
+        //   } else {
+        //     done();
+        //   }
+        // }
+      })
+        .then(() => {
+          api.exportFusionRecord().then(res => {
+            if (res.status === 200) {
+              this.$message({ message: '导出成功', type: 'success' });
+              utils.downloadExportedData(res.data, '输血关联数据.xls');
+            }
+          });
+        })
+        .catch(() => {
+          // this.$message({ message: '导出失败', type: 'waring' });
+        });
+    },
+    // 导入模板
+    exportModule() {
+      api.exportFusionModule().then(res => {
+        if (res.status === 200) {
+          setTimeout(() => {
+            utils.downloadExportedData(res.data, '输血导入模板.xls');
+          }, 1500);
+        }
+      });
+    },
+
+    // 点击导入
+    importPage() {
+      let inp = document.getElementById('upFile');
+      inp.click();
+    },
+    // 导入数据
+    uploadFile(e) {
+      let fileInfo = e.target.files[0];
+      e.preventDefault();
+      let formData = new FormData();
+      formData.append('file', fileInfo);
+      const header = {
+        headers: {
+          'Content-Type': 'multipart/form-data'
+        }
+      };
+      this.uploadInfo = '导入中...';
+      api.importFusionRecord(formData, header).then(res => {
+        if (res.data.code === '00000001') {
+          this.$confirm(`数据存在异常,导入失败,请修改后再试`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else if (res.data === '' && res.status === 200) {
+          this.$confirm(`导入成功`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else {
+          this.$confirm(`${res.data.msg}`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        }
+      });
+      //解决上传相同文件不触发change
+      let inp = document.getElementById('upFile');
+      inp.value = '';
+    }
+  }
+};
+</script>
+
+
+<style lang="less" scoped>
+@import '../../../less/admin.less';
+.delete {
+  color: red;
+}
+.delete:hover {
+  color: red;
+}
+.pagination {
+  min-width: 1010px;
+}
+.downTemplate {
+  margin-right: 8px;
+  span {
+    color: #02a7f0;
+  }
+}
+#upFile {
+  display: none !important;
+}
+.el-message-box {
+  /deep/.cancelBtn {
+    background-color: #d7d7d7;
+    border-color: transparent;
+  }
+  /deep/.confirmC {
+    background-color: #ff545b !important;
+    border-color: transparent !important;
+  }
+}
+.exportBox6 {
+  /deep/ .el-message-box__btns {
+    margin-top: 20px;
+  }
+  /deep/ .el-message-box__message {
+    // text-align: center;
+  }
+  /deep/.leftbtn {
+    background-color: #d7d7d7;
+    border-color: transparent !important;
+  }
+  /deep/ .el-message-box__header {
+    border-bottom: 1px solid #dcdfe6;
+  }
+}
+</style>

+ 13 - 0
src/components/cdssManage/hospital/AddHospitai.vue

@@ -0,0 +1,13 @@
+<template>
+  <div>vue</div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>

+ 13 - 0
src/components/cdssManage/hospital/Hospital.vue

@@ -0,0 +1,13 @@
+<template>
+  <div>vue</div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>

+ 13 - 0
src/components/cdssManage/hospitalUser/AddHospitalUser.vue

@@ -0,0 +1,13 @@
+<template>
+  <div>vue</div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>

+ 13 - 0
src/components/cdssManage/hospitalUser/HospitalUser.vue

@@ -0,0 +1,13 @@
+<template>
+  <div>vue</div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>

+ 469 - 0
src/components/cdssManage/lis/AddLis.vue

@@ -0,0 +1,469 @@
+<template>
+  <div class="AddChemicalAndCommonMappingWrapper clearfix">
+    <crumbs
+      :title="isEdit ? '检验关联维护--修改关联 | '+ hospitaiName : '检验关联维护--添加关联 | ' + hospitaiName"
+      class="topBack"
+      :param="$route.params"
+      linkTo="Lis"
+    ></crumbs>
+    <el-form
+      :model="form"
+      :rules="rules"
+      label-position="right"
+      label-width="140px"
+      ref="relationForm"
+    >
+      <div class="AddChemicalAndCommonMappingBox clearfix">
+        <div class="titleBox clearfix">
+          <p class="title">医院术语</p>
+          <p class="title">标准术语</p>
+        </div>
+        <div class="leftBox clearfix">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="检验套餐:" prop="hisName">
+                <el-input v-model="form.hisName" clearable style="minWidth: 240px"></el-input>
+              </el-form-item>
+              <el-form-item label="检验套餐预览:" style="marginTop: 24px">
+                <span class="previewInfo1" style="minWidth: 240px">{{form.hisName}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="检验细项:" prop="hisDetailName">
+                <el-input v-model="form.hisDetailName" clearable style="minWidth: 240px"></el-input>
+              </el-form-item>
+              <el-form-item label="检验细项预览:">
+                <span class="previewInfo1" style="minWidth: 240px">{{form.hisDetailName}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+        <div class="midBox">
+          <img class="midLogo" src="../../../images/relation.png" alt />
+          <p class="midTitle">相互关联</p>
+        </div>
+        <div class="rightBox">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="检验标准术语:" prop="searchText">
+                <el-select
+                  style="width:100%; minWidth: 240px"
+                  v-model="form.searchText"
+                  filterable
+                  remote
+                  clearable
+                  :loading="showDrop"
+                  loading-text="加载中..."
+                  @change="changeWord"
+                  @focus="handleFocus"
+                  @visible-change="handleVisible"
+                  @clear="handleClear"
+                  placeholder="搜索"
+                  :remote-method="searchTerms"
+                  reserve-keyword
+                >
+                  <el-option
+                    v-for="(item,idx) in uniqueNameList"
+                    :key="idx"
+                    :label="searchType === 2 ? `${item.uniqueName}(${item.name})` : item"
+                    :value="searchType === 2 ? `${item.uniqueName}(${item.name})` : item"
+                    :title="searchType === 2 ? `${item.uniqueName}(${item.name})` : item"
+                    @click.native="handleChoose(searchType === 2 ? item.uniqueName : item)"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="检验标准术语预览:">
+                <span class="previewInfo1" style="minWidth: 240px">{{form.searchTextPre}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+      </div>
+      <div class="btn">
+        <el-form-item>
+          <el-button type="primary" :disabled="saveDisable" @click="submitForm">确定</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+  </div>
+</template>
+<script>
+import api from '@api/cdss.js';
+export default {
+  name: 'AddLis',
+  data() {
+    return {
+      isEdit: false,
+      hospitaiName: '',
+      editId: '',
+      uniqueNameList: [],
+      form: {
+        searchText: '', //搜索字段
+        searchTextPre: '', //术语预览
+        hisName: '',
+        hisDetailName: ''
+      },
+      rules: {
+        hisName: [
+          { required: true, message: '请输入检验套餐', trigger: 'change' },
+          { max: 80, message: '检验套餐最多80字', trigger: 'change' }
+        ],
+        hisDetailName: [
+          { max: 80, message: '检验细项最多80字', trigger: 'change' }
+        ],
+        searchText: [
+          { required: true, message: '请选择检验标准术语', trigger: 'change' }
+        ]
+      },
+      saveDisable: false, //保存按钮禁止点击
+      showDrop: false, //下拉框显示文字
+      searchType: 2, // 1:套餐   2: 细项
+      hospitalId: ''
+      // queryText: ''
+    };
+  },
+  created() {
+    //修改
+    const { isEdit, data, hospitaiName } = this.$route.params;
+    this.hospitaiName = hospitaiName;
+    this.hospitalId = data && data.hospitalId;
+    if (isEdit) {
+      this.isEdit = isEdit;
+      this.editId = data.id;
+      this.form.hisName = data.hisName;
+      this.form.searchText = data.uniqueName;
+      this.form.hisDetailName = data.hisDetailName;
+      this.form.searchTextPre = data.uniqueName;
+    }
+    if (isEdit && data.hisName !== '' && data.hisDetailName === '') {
+      this.searchType = 1;
+      // console.log('改变searchType为1');
+    }
+  },
+  methods: {
+    // 搜索列表
+    searchTerms(query) {
+      // this.queryText = query;
+      if (!query) {
+        this.uniqueNameList = [];
+        return;
+      }
+      const { hisName, hisDetailName } = this.form;
+      let type = 2; // 1-化验大项、2-化验小项
+      if (hisName !== '' && hisDetailName === '') {
+        type = 1;
+      }
+      this.searchType = type;
+      this.showDrop = true;
+      let params = {
+        type: type,
+        inputStr: query,
+        sex: 3,
+        age: 0
+      };
+      api.retrievalSearch(params).then(res => {
+        this.showDrop = false;
+        if (res.data.code === '0') {
+          this.uniqueNameList =
+            type === 1 ? res.data.data.lisNames : res.data.data.lisDetailNames;
+        }
+      });
+    },
+    changeWord() {},
+    // 获取焦点
+    handleFocus() {},
+    handleVisible(flag) {
+      if (!flag) {
+        this.uniqueNameList = [];
+      }
+    },
+    handleClear() {
+      this.form.searchTextPre = '';
+    },
+    handleChoose(val) {
+      // console.log('点击选中option', val);
+      this.form.searchTextPre = val;
+      this.form.searchText = val;
+    },
+
+    // 初始化表单数据
+    initForm() {
+      this.form.hisName = '';
+      this.form.hisDetailName = '';
+      this.form.searchText = '';
+    },
+
+    // 建立关联-参数处理
+    submitForm() {
+      console.log(this.searchType, 'searchType');
+
+      this.$refs.relationForm.validate(valid => {
+        if (valid) {
+          const { searchText, hisName, hisDetailName } = this.form;
+          // 当标准术语是套餐时,细项必须为空
+          if (this.searchType === 1 && hisDetailName !== '') {
+            this.warning('医院术语与标准术语类型不匹配,请修改');
+            return;
+          }
+
+          // 当标准术语是细项时,医院术语套餐和细项均不能为空
+          if (this.searchType === 2) {
+            if (hisName === '') {
+              this.warning('医院术语与标准术语类型不匹配,请修改');
+              return;
+            } else if (hisDetailName === '') {
+              this.warning('医院术语与标准术语类型不匹配,请修改');
+              return;
+            }
+          }
+
+          let params = {
+            hisName: hisName,
+            uniqueName: searchText,
+            hisDetailName: hisDetailName,
+            hospitalId: this.hospitalId
+          };
+          this.showSaveDialog(params);
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 建立关联-映射关系是否已存在
+    showSaveDialog(params) {
+      this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+      api
+        .lisIsExistRecord(params)
+        .then(res => {
+          if (!res.data.data) {
+            // 不存在,创建新的关联
+            // 如果是编辑时,需要携带id
+            if (this.isEdit) {
+              params = { ...params, id: this.editId };
+            }
+            this.saveLisMapping(params, '保存成功', 'success');
+          } else {
+            // 已存在,提示修改
+            this.warning('该条关联已存在,无法添加');
+            this.saveDisable = false;
+          }
+        })
+        .catch(err => {
+          if (err.code === '900010001') {
+            return false;
+          }
+          this.warning(err);
+        });
+    },
+
+    // 映射关系不存在-建立关联
+    saveLisMapping(params, msg, type) {
+      api.saveOrUpdateLisRecord(params).then(res => {
+        if (res.data.code === '0') {
+          this.warning(res.data.msg || msg, type);
+          this.initForm();
+          this.$router.push({
+            name: 'Lis',
+            params: Object.assign({}, this.$route.params, {
+              currentPage: 1
+            })
+          });
+        } else {
+          this.warning(res.data.msg);
+        }
+        this.saveDisable = false;
+      });
+    },
+    // 关联已存在模态框
+    showConfirmDialog(msg, resolve) {
+      this.$confirm(msg, '提示', {
+        customClass: 'confirmRealation',
+        confirmButtonText: '是',
+        cancelButtonText: '否',
+        cancelButtonClass: 'cancelButton',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {
+          this.saveDisable = false;
+          this.warning('建立失败', 'error');
+        });
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.AddChemicalAndCommonMappingWrapper {
+  .AddChemicalAndCommonMappingBox {
+    min-width: 940px;
+  }
+  color: #606266;
+  .topBack {
+    top: 0;
+  }
+  .titleBox {
+    padding: 0 0 10px 0px;
+  }
+  .title {
+    width: 50%;
+    float: left;
+    font-size: 14px;
+  }
+  .AddChemicalAndCommonMappingBox {
+    padding: 20px 30px 20px 30px;
+    margin: 70px 20px 0 20px;
+    background: #fff;
+  }
+  .leftBox,
+  .midBox,
+  .rightBox {
+    width: 40%;
+    float: left;
+    min-height: 200px;
+    font-size: 14px;
+  }
+  .midBox {
+    width: 6%;
+    padding: 50px 0 0 0;
+    text-align: center;
+  }
+  .midTitle {
+    width: 40px;
+    margin: 0 auto;
+  }
+  .midLogo {
+    margin: 0 auto;
+  }
+  .leftBox,
+  .rightBox {
+    border: 1px solid #dcdfe6;
+    padding: 20px 20px;
+  }
+  .itemLabel {
+    width: 100%;
+    min-height: 50px;
+    line-height: 50px;
+    position: relative;
+  }
+  .itemLabelName,
+  .searchInput,
+  .searchName {
+    float: left;
+    color: #606266;
+  }
+  .itemLabelName {
+    width: 150px;
+  }
+  .isRequired::before {
+    content: '*';
+    color: red;
+  }
+  .searchInput,
+  .mealNameItem {
+    padding: 0 5px;
+  }
+  .searchInput,
+  .searchName {
+    display: inline-block;
+    height: 32px;
+    line-height: 32px;
+    border: 1px solid #a9a9a9;
+    margin: 8px 0 0 0;
+  }
+
+  .searchName {
+    text-align: center;
+    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: 150px;
+    top: 42px;
+    z-index: 2;
+    overflow-y: auto;
+  }
+  .itemList {
+    width: calc(100% - 131px);
+  }
+  .mealNameItem {
+    height: 30px;
+    line-height: 30px;
+    font-size: 14px;
+    cursor: pointer;
+  }
+  .mealNameItem:hover {
+    background: #f5f7fa;
+  }
+  // .selectItemName {
+  //   padding-left: 4px;
+  //   display: inline-block;
+  //   margin-top: 8px;
+  //   // width: calc(100% - 160px);s
+  //   line-height: 24px;
+  //   overflow: hidden;
+  //   word-wrap: break-word;
+  //   word-break: break-all;
+  // }
+  .previewInfo1 {
+    padding-left: 4px;
+    display: inline-block;
+    margin-top: 8px;
+    // width: calc(100% - 160px);s
+    line-height: 22px;
+    min-height: 22px;
+    overflow: hidden;
+    word-wrap: break-word;
+    word-break: break-all;
+  }
+  .btn {
+    position: relative;
+    background-color: #fff;
+    margin: 0px 20px;
+    padding: 20px;
+    min-width: 960px;
+    height: 80px;
+    .el-button {
+      position: absolute;
+      right: 80px;
+      top: 20px;
+    }
+  }
+  .sumbit {
+    position: absolute;
+    display: inline-block;
+    width: 80px;
+    height: 30px;
+    line-height: 30px;
+    border: 1px solid #a9a9a9;
+    text-align: center;
+    right: 100px;
+  }
+}
+.confirmRealation {
+  .cancelButton {
+    border: 1px solid #a9a9a9;
+    span {
+      color: #606266;
+    }
+  }
+}
+</style>

+ 460 - 0
src/components/cdssManage/lis/Lis.vue

@@ -0,0 +1,460 @@
+<template>
+  <div>
+    <crumbs :title="title + hospitaiName" linkTo="MedicalTermCDSS" style="min-width: 1300px">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item>
+          <el-button type="text" class="downTemplate" @click="exportModule">导入模板下载</el-button>
+          <input
+            type="file"
+            name="uploadfile "
+            id="upFile"
+            @change="uploadFile($event)"
+            accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+          />
+          <el-button size="mini" @click="importPage">{{uploadInfo}}</el-button>
+          <el-button size="mini" @click="exportData">导出</el-button>
+        </el-form-item>
+        <el-form-item label="检验套餐:">
+          <el-input size="mini" v-model="filter.hisName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="检验细项:">
+          <el-input size="mini" v-model="filter.hisDetailName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="标准检验项:">
+          <el-input size="mini" v-model="filter.uniqueName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item class="dododo">
+          <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="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column :resizable="false" prop="hisName" label="检验套餐" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="hisDetailName" label="检验细项" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="uniqueName" label="标准检验项" show-overflow-tooltip></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">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              @click="showDelDialog(scope.row.id)"
+              class="delete"
+              type="text"
+              size="small"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination pagepage">
+        <el-pagination
+          :current-page.sync="currentPage"
+          @current-change="currentChange"
+          background
+          :page-size="pageSize"
+          :page-sizes="pageSizeArr"
+          @size-change="handleSizeChange"
+          :layout="pageLayout"
+          :total="total"
+        ></el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/cdss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'Lis', //化验大小项和公表维护
+  data: function() {
+    return {
+      list: [],
+      searched: false,
+      filter: {
+        hisName: '', // 检验套餐
+        hisDetailName: '', //检验细项
+        uniqueName: '' //标准检验项
+      },
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      uploadInfo: '导入',
+      title: '检验关联维护 | ',
+      hospitaiName: '',
+      hospitalId: ''
+    };
+  },
+  created() {
+    const { data } = this.$route.params;
+    this.hospitaiName = (data && data.name) || '';
+    this.hospitalId = data && data.hospitalId;
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    // 非首页 编辑页返回 设置 this.currentPage
+    if (Object.keys(this.$route.params).length !== 0) {
+      this.currentPage = this.$route.params.currentPage;
+    }
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage = to.params.currentPage;
+    });
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+
+    // 获取列表数据
+    getDataList(isTurnPage) {
+      const params = this.getFilterItems(isTurnPage);
+      this.searched = true;
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api.getLisPage(params).then(res => {
+        loading.close();
+        if (res.data.code === '0') {
+          this.list = res.data.data && res.data.data.records;
+        }
+        this.total = res.data.data && res.data.data.total;
+        if (this.inCurrentPage !== undefined) {
+          this.currentPage = this.inCurrentPage;
+          this.inCurrentPage = undefined;
+        }
+      });
+    },
+
+    // 处理列表请求数据参数
+    getFilterItems(isTurnPage) {
+      const { data } = this.$route.params;
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        hisName: this.filter.hisName.trim(),
+        uniqueName: this.filter.uniqueName.trim(),
+        uniqueCode: '',
+        hisDetailName: this.filter.hisDetailName.trim(),
+        hospitalId: data && data.hospitalId
+      };
+      return param;
+    },
+
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList();
+    },
+    addRelation() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddLis',
+        params: Object.assign(pam, {
+          isEdit: false,
+          data: { hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    // 修改诊断关联-跳转至编辑页面
+    modifyRelation(row) {
+      const item = Object.assign({}, row);
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddLis',
+        params: Object.assign(pam, {
+          isEdit: true,
+          data: { ...item, hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    currentChange(next) {
+      this.currentPage = next;
+      this.getDataList(true);
+      // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+      //     this.list = this.cacheData[next];
+      // } else {
+      //     this.getDataList();
+      // }
+    },
+    // 清空搜索参数
+    clearFilter() {
+      this.filter = {
+        hisName: '',
+        uniqueName: '',
+        hisDetailName: ''
+      };
+    },
+
+    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.$confirm(msg, '提示', {
+        confirmButtonText: '删除',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'cancelBtn',
+        confirmButtonClass: 'confirmC',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    // 删除关联
+    showDelDialog(id) {
+      this.showConfirmDialog('是否删除该关联?', () => {
+        api
+          .deleteLisRecord({ id: id })
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (this.list.length == 1) {
+                //当前在最后一页且只有一条数据时,删除后跳到前一页
+                this.currentPage =
+                  this.currentPage === 1 ? 1 : this.currentPage - 1;
+              }
+              this.getDataList();
+              this.warning(res.data.msg || '操作成功', 'success');
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            if (error.code === '900010001') {
+              return false;
+            }
+            this.warning(error);
+          });
+      });
+    },
+
+    // 导出数据
+    exportData() {
+      this.$confirm('确定要导出全部检验关联数据吗?', '', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'leftbtn',
+        customClass: 'exportBox6',
+        title: '提示',
+        type: 'warning'
+        // beforeClose: (action, instance, done) => {
+        //   if (action === 'confirm') {
+        //     // instance.confirmButtonLoading = true;
+        //     instance.confirmButtonText = '导出中...';
+        //     api.exportLisRecord().then(res => {
+        //       if (res.status === 200) {
+        //         setTimeout(() => {
+        //           utils.downloadExportedData(res.data, '检验数据.xls');
+        //           done();
+        //         }, 1500);
+        //       }
+        //     });
+        //   } else {
+        //     done();
+        //   }
+        // }
+      })
+        .then(() => {
+          api.exportLisRecord().then(res => {
+            if (res.status === 200) {
+              this.$message({ message: '导出成功', type: 'success' });
+              utils.downloadExportedData(res.data, '检验数据.xls');
+            }
+          });
+        })
+        .catch(() => {
+          // this.$message({ message: '导出失败', type: 'waring' });
+        });
+    },
+    // 导入模板
+    exportModule() {
+      api.exportLisModule().then(res => {
+        if (res.status === 200) {
+          setTimeout(() => {
+            utils.downloadExportedData(res.data, '检验导入模板.xls');
+          }, 1500);
+        }
+      });
+    },
+
+    // 点击导入
+    importPage() {
+      let inp = document.getElementById('upFile');
+      inp.click();
+    },
+    // 导入数据
+    uploadFile(e) {
+      let fileInfo = e.target.files[0];
+      e.preventDefault();
+      let formData = new FormData();
+      formData.append('file', fileInfo);
+      const header = {
+        headers: {
+          'Content-Type': 'multipart/form-data'
+        }
+      };
+      this.uploadInfo = '导入中...';
+      api.importLisRecord(formData, header).then(res => {
+        if (res.data.code === '00000001') {
+          this.$confirm(`数据存在异常,导入失败,请修改后再试`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else if (res.data === '' && res.status === 200) {
+          this.$confirm(`导入成功`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else {
+          this.$confirm(`${res.data.msg}`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        }
+      });
+      //解决上传相同文件不触发change
+      let inp = document.getElementById('upFile');
+      inp.value = '';
+    }
+  }
+};
+</script>
+
+
+<style lang="less" scoped>
+@import '../../../less/admin.less';
+.delete {
+  color: red;
+}
+.delete:hover {
+  color: red;
+}
+.pagination {
+  min-width: 1010px;
+}
+.downTemplate {
+  margin-right: 8px;
+  span {
+    color: #02a7f0;
+  }
+}
+#upFile {
+  display: none !important;
+}
+.el-message-box {
+  /deep/.cancelBtn {
+    background-color: #d7d7d7;
+    border-color: transparent;
+  }
+  /deep/.confirmC {
+    background-color: #ff545b !important;
+    border-color: transparent !important;
+  }
+}
+.exportBox6 {
+  /deep/ .el-message-box__btns {
+    margin-top: 20px;
+  }
+  /deep/ .el-message-box__message {
+    // text-align: center;
+  }
+  /deep/.leftbtn {
+    background-color: #d7d7d7;
+    border-color: transparent !important;
+  }
+  /deep/ .el-message-box__header {
+    border-bottom: 1px solid #dcdfe6;
+  }
+}
+</style>

+ 405 - 0
src/components/cdssManage/operation/AddOperation.vue

@@ -0,0 +1,405 @@
+<template>
+  <div class="AddChemicalAndCommonMappingWrapper clearfix">
+    <crumbs
+      :title="isEdit ? '手术/操作关联维护--修改关联 | ' +hospitaiName : '手术/操作关联维护--添加关联 | ' + hospitaiName"
+      class="topBack"
+      :param="$route.params"
+      linkTo="Operation"
+    ></crumbs>
+    <el-form
+      :model="form"
+      :rules="rules"
+      label-position="right"
+      label-width="160px"
+      ref="relationForm"
+    >
+      <div class="AddChemicalAndCommonMappingBox clearfix">
+        <div class="titleBox clearfix">
+          <p class="title">医院术语</p>
+          <p class="title">标准术语</p>
+        </div>
+        <div class="leftBox clearfix">
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="手术/操作名称:" prop="hisName">
+                <el-input v-model="form.hisName" clearable style="minWidth: 240px"></el-input>
+              </el-form-item>
+              <el-form-item label="手术/操作名称预览:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.hisName}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+        <div class="midBox">
+          <img class="midLogo" src="../../../images/relation.png" alt />
+          <p class="midTitle">相互关联</p>
+        </div>
+        <div class="rightBox">
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="手术/操作名称:" prop="searchText">
+                <el-select
+                  style="width:100%;minWidth: 240px"
+                  v-model="form.searchText"
+                  filterable
+                  remote
+                  clearable
+                  :loading="showDrop"
+                  loading-text="加载中..."
+                  @change="changeWord"
+                  @focus="handleFocus"
+                  @visible-change="handleVisible"
+                  placeholder="搜索"
+                  :remote-method="searchTerms"
+                  reserve-keyword
+                >
+                  <el-option
+                    v-for="(item,idx) in uniqueNameList"
+                    :key="idx"
+                    :label="item.name"
+                    :value="item.name"
+                    :title="item.name"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="手术/操作名称预览:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.searchText}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+      </div>
+      <div class="btn">
+        <el-form-item>
+          <el-button type="primary" :disabled="saveDisable" @click="submitForm">确定</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+  </div>
+</template>
+<script>
+import api from '@api/cdss.js';
+export default {
+  name: 'AddOperation',
+  data() {
+    return {
+      isEdit: false,
+      hospitaiName: '',
+      editId: '',
+      uniqueNameList: [],
+      form: {
+        searchText: '', //搜索字段
+        hisName: ''
+      },
+      rules: {
+        hisName: [
+          { required: true, message: '请输入手术/操作名称', trigger: 'change' },
+          { max: 80, message: '手术/操作名称最多80字', trigger: 'change' }
+        ],
+        searchText: [
+          { required: true, message: '请选择手术/操作名称', trigger: 'change' }
+        ]
+      },
+      saveDisable: false, //保存按钮禁止点击
+      showDrop: false, //下拉框显示文字
+      hospitalId: ''
+    };
+  },
+  created() {
+    //修改
+    const { isEdit, data, hospitaiName } = this.$route.params;
+    this.hospitaiName = hospitaiName;
+    this.hospitalId = data && data.hospitalId;
+    if (isEdit) {
+      this.isEdit = isEdit;
+      this.editId = data.id;
+      this.form.hisName = data.hisName;
+      this.form.searchText = data.uniqueName;
+    }
+  },
+  methods: {
+    // 搜索列表
+    searchTerms(query) {
+      if (!query) {
+        this.uniqueNameList = [];
+        return;
+      }
+      this.showDrop = true;
+      let params = {
+        type: 6, //手术和操作
+        inputStr: query,
+        sex: 3,
+        age: 0
+      };
+      api.retrievalSearch(params).then(res => {
+        this.showDrop = false;
+        if (res.data.code === '0') {
+          this.uniqueNameList = res.data.data.operationNames;
+        }
+      });
+    },
+    changeWord() {},
+    // 获取焦点
+    handleFocus() {},
+    handleVisible(flag) {
+      if (!flag) {
+        this.uniqueNameList = [];
+      }
+    },
+    // 初始化表单数据
+    initForm() {
+      this.form.hisName = '';
+      this.form.searchText = '';
+    },
+
+    // 建立关联-参数处理
+    submitForm() {
+      this.$refs.relationForm.validate(valid => {
+        if (valid) {
+          const { searchText, hisName } = this.form;
+          let params = {
+            hisName: hisName,
+            uniqueName: searchText,
+            hospitalId: this.hospitalId
+          };
+          this.showSaveDialog(params);
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 建立关联-映射关系是否已存在
+    showSaveDialog(params) {
+      this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+      api
+        .operationIsExistRecord(params)
+        .then(res => {
+          if (!res.data.data) {
+            // 不存在,创建新的关联
+            // 如果是编辑时,需要携带id
+            if (this.isEdit) {
+              params = { ...params, id: this.editId };
+            }
+            this.saveLisMapping(params, '保存成功', 'success');
+          } else {
+            // 已存在,提示修改
+            this.warning('该条关联已存在,无法添加');
+            this.saveDisable = false;
+          }
+        })
+        .catch(err => {
+          if (err.code === '900010001') {
+            return false;
+          }
+          this.warning(err);
+        });
+    },
+
+    // 映射关系不存在-建立关联
+    saveLisMapping(params, msg, type) {
+      api.saveOrUpdateOperationRecord(params).then(res => {
+        if (res.data.code === '0') {
+          this.warning(res.data.msg || msg, type);
+          this.initForm();
+          this.$router.push({
+            name: 'Operation',
+            params: Object.assign({}, this.$route.params, {
+              currentPage: 1
+            })
+          });
+        } else {
+          this.warning(res.data.msg);
+        }
+        this.saveDisable = false;
+      });
+    },
+    // 关联已存在模态框
+    showConfirmDialog(msg, resolve) {
+      this.$confirm(msg, '提示', {
+        customClass: 'confirmRealation',
+        confirmButtonText: '是',
+        cancelButtonText: '否',
+        cancelButtonClass: 'cancelButton',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {
+          this.saveDisable = false;
+          this.warning('建立失败', 'error');
+        });
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.AddChemicalAndCommonMappingWrapper {
+  .AddChemicalAndCommonMappingBox {
+    min-width: 940px;
+  }
+  color: #606266;
+  .topBack {
+    top: 0;
+  }
+  .titleBox {
+    padding: 0 0 10px 0px;
+  }
+  .title {
+    width: 50%;
+    float: left;
+    font-size: 14px;
+  }
+  .AddChemicalAndCommonMappingBox {
+    padding: 20px 30px 20px 30px;
+    margin: 70px 20px 0 20px;
+    background: #fff;
+  }
+  .leftBox,
+  .midBox,
+  .rightBox {
+    width: 40%;
+    float: left;
+    min-height: 200px;
+    font-size: 14px;
+  }
+  .midBox {
+    width: 6%;
+    padding: 50px 0 0 0;
+    text-align: center;
+  }
+  .midTitle {
+    width: 40px;
+    margin: 0 auto;
+  }
+  .midLogo {
+    margin: 0 auto;
+  }
+  .leftBox,
+  .rightBox {
+    border: 1px solid #dcdfe6;
+    padding: 20px 20px;
+  }
+  .itemLabel {
+    width: 100%;
+    min-height: 50px;
+    line-height: 50px;
+    position: relative;
+  }
+  .itemLabelName,
+  .searchInput,
+  .searchName {
+    float: left;
+    color: #606266;
+  }
+  .itemLabelName {
+    width: 150px;
+  }
+  .isRequired::before {
+    content: '*';
+    color: red;
+  }
+  .searchInput,
+  .mealNameItem {
+    padding: 0 5px;
+  }
+  .searchInput,
+  .searchName {
+    display: inline-block;
+    height: 32px;
+    line-height: 32px;
+    border: 1px solid #a9a9a9;
+    margin: 8px 0 0 0;
+  }
+
+  .searchName {
+    text-align: center;
+    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: 150px;
+    top: 42px;
+    z-index: 2;
+    overflow-y: auto;
+  }
+  .itemList {
+    width: calc(100% - 131px);
+  }
+  .mealNameItem {
+    height: 30px;
+    line-height: 30px;
+    font-size: 14px;
+    cursor: pointer;
+  }
+  .mealNameItem:hover {
+    background: #f5f7fa;
+  }
+  // .selectItemName {
+  //   padding-left: 4px;
+  //   display: inline-block;
+  //   margin-top: 8px;
+  //   // width: calc(100% - 160px);s
+  //   line-height: 24px;
+  //   overflow: hidden;
+  //   word-wrap: break-word;
+  //   word-break: break-all;
+  // }
+  .previewInfo {
+    padding-left: 4px;
+    display: inline-block;
+    margin-top: 8px;
+    // width: calc(100% - 160px);s
+    line-height: 24px;
+    overflow: hidden;
+    word-wrap: break-word;
+    word-break: break-all;
+  }
+  .btn {
+    position: relative;
+    background-color: #fff;
+    margin: 0px 20px;
+    padding: 20px;
+    min-width: 960px;
+    height: 80px;
+    .el-button {
+      position: absolute;
+      right: 80px;
+      top: 20px;
+    }
+  }
+  .sumbit {
+    position: absolute;
+    display: inline-block;
+    width: 80px;
+    height: 30px;
+    line-height: 30px;
+    border: 1px solid #a9a9a9;
+    text-align: center;
+    right: 100px;
+  }
+}
+.confirmRealation {
+  .cancelButton {
+    border: 1px solid #a9a9a9;
+    span {
+      color: #606266;
+    }
+  }
+}
+</style>

+ 459 - 0
src/components/cdssManage/operation/Operation.vue

@@ -0,0 +1,459 @@
+<template>
+  <div>
+    <crumbs :title="title + hospitaiName" linkTo="MedicalTermCDSS" style="min-width: 1300px">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item>
+          <el-button type="text" class="downTemplate" @click="exportModule">导入模板下载</el-button>
+          <input
+            type="file"
+            name="uploadfile "
+            id="upFile"
+            @change="uploadFile($event)"
+            accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+          />
+          <el-button size="mini" @click="importPage">{{uploadInfo}}</el-button>
+          <el-button size="mini" @click="exportData">导出</el-button>
+        </el-form-item>
+        <el-form-item label="医院手术/操作名称:">
+          <el-input size="mini" v-model="filter.hisName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="标准手术/操作名称:">
+          <el-input size="mini" v-model="filter.uniqueName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item class="dododo">
+          <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="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column :resizable="false" prop="hisName" label="医院手术/操作名称" show-overflow-tooltip></el-table-column>
+        <el-table-column
+          :resizable="false"
+          prop="uniqueName"
+          label="标准手术/操作名称"
+          show-overflow-tooltip
+        ></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">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              @click="showDelDialog(scope.row.id)"
+              class="delete"
+              type="text"
+              size="small"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination pagepage">
+        <el-pagination
+          :current-page.sync="currentPage"
+          @current-change="currentChange"
+          background
+          :page-size="pageSize"
+          :page-sizes="pageSizeArr"
+          @size-change="handleSizeChange"
+          :layout="pageLayout"
+          :total="total"
+        ></el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/cdss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'Operation', //化验大小项和公表维护
+  data: function() {
+    return {
+      list: [],
+      searched: false,
+      filter: {
+        hisName: '', // 医院诊断名称
+        uniqueName: '' //标准诊断名称
+      },
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      uploadInfo: '导入',
+      title: '手术/操作关联维护 | ',
+      hospitaiName: '',
+      hospitalId: ''
+    };
+  },
+  created() {
+    const { data } = this.$route.params;
+    this.hospitaiName = (data && data.name) || '';
+    this.hospitalId = data && data.hospitalId;
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    // 非首页 编辑页返回 设置 this.currentPage
+    if (Object.keys(this.$route.params).length !== 0) {
+      this.currentPage = this.$route.params.currentPage;
+    }
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage = to.params.currentPage;
+    });
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+
+    // 获取列表数据
+    getDataList(isTurnPage) {
+      const params = this.getFilterItems(isTurnPage);
+      this.searched = true;
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api.getOperationPage(params).then(res => {
+        loading.close();
+        if (res.data.code === '0') {
+          this.list = res.data.data && res.data.data.records;
+        }
+        this.total = res.data.data && res.data.data.total;
+        if (this.inCurrentPage !== undefined) {
+          this.currentPage = this.inCurrentPage;
+          this.inCurrentPage = undefined;
+        }
+      });
+    },
+
+    // 处理列表请求数据参数
+    getFilterItems(isTurnPage) {
+      const { data } = this.$route.params;
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        hisName: this.filter.hisName.trim(),
+        uniqueName: this.filter.uniqueName.trim(),
+        uniqueCode: '',
+        hospitalId: data && data.hospitalId
+      };
+      return param;
+    },
+
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList();
+    },
+    addRelation() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddOperation',
+        params: Object.assign(pam, {
+          isEdit: false,
+          data: { hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    // 修改诊断关联-跳转至编辑页面
+    modifyRelation(row) {
+      const item = Object.assign({}, row);
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddOperation',
+        params: Object.assign(pam, {
+          isEdit: true,
+          data: { ...item, hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    currentChange(next) {
+      this.currentPage = next;
+      this.getDataList(true);
+      // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+      //     this.list = this.cacheData[next];
+      // } else {
+      //     this.getDataList();
+      // }
+    },
+    // 清空搜索参数
+    clearFilter() {
+      this.filter = {
+        hisName: '',
+        uniqueName: ''
+      };
+    },
+
+    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.$confirm(msg, '提示', {
+        confirmButtonText: '删除',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'cancelBtn',
+        confirmButtonClass: 'confirmC',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    // 删除关联
+    showDelDialog(id) {
+      this.showConfirmDialog('是否删除该关联?', () => {
+        api
+          .deleteOperationRecord({ id: id })
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (this.list.length == 1) {
+                //当前在最后一页且只有一条数据时,删除后跳到前一页
+                this.currentPage =
+                  this.currentPage === 1 ? 1 : this.currentPage - 1;
+              }
+              this.getDataList();
+              this.warning(res.data.msg || '操作成功', 'success');
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            if (error.code === '900010001') {
+              return false;
+            }
+            this.warning(error);
+          });
+      });
+    },
+
+    // 导出数据
+    exportData() {
+      this.$confirm('确定要导出全部手术/操作关联数据吗?', '', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'leftbtn',
+        customClass: 'exportBox6',
+        title: '提示',
+        type: 'warning'
+        // beforeClose: (action, instance, done) => {
+        //   if (action === 'confirm') {
+        //     // instance.confirmButtonLoading = true;
+        //     instance.confirmButtonText = '导出中...';
+        //     api.exportOperationRecord().then(res => {
+        //       if (res.status === 200) {
+        //         setTimeout(() => {
+        //           utils.downloadExportedData(res.data, '手术/操作关联数据.xls');
+        //           done();
+        //         }, 1500);
+        //       }
+        //     });
+        //   } else {
+        //     done();
+        //   }
+        // }
+      })
+        .then(() => {
+          api.exportOperationRecord().then(res => {
+            if (res.status === 200) {
+              this.$message({ message: '导出成功', type: 'success' });
+              utils.downloadExportedData(res.data, '手术/操作关联数据.xls');
+            }
+          });
+        })
+        .catch(() => {
+          // this.$message({ message: '导出失败', type: 'waring' });
+        });
+    },
+
+    // 导入模板
+    exportModule() {
+      api.exportOperationModule().then(res => {
+        if (res.status === 200) {
+          setTimeout(() => {
+            utils.downloadExportedData(res.data, '手术/操作导入模板.xls');
+          }, 1500);
+        }
+      });
+    },
+
+    // 点击导入
+    importPage() {
+      let inp = document.getElementById('upFile');
+      inp.click();
+    },
+    // 导入数据
+    uploadFile(e) {
+      let fileInfo = e.target.files[0];
+      e.preventDefault();
+      let formData = new FormData();
+      formData.append('file', fileInfo);
+      const header = {
+        headers: {
+          'Content-Type': 'multipart/form-data'
+        }
+      };
+      this.uploadInfo = '导入中...';
+      api.importOperationRecord(formData, header).then(res => {
+        if (res.data.code === '00000001') {
+          this.$confirm(`数据存在异常,导入失败,请修改后再试`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else if (res.data === '' && res.status === 200) {
+          this.$confirm(`导入成功`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else {
+          this.$confirm(`${res.data.msg}`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        }
+      });
+      //解决上传相同文件不触发change
+      let inp = document.getElementById('upFile');
+      inp.value = '';
+    }
+  }
+};
+</script>
+
+
+<style lang="less" scoped>
+@import '../../../less/admin.less';
+.delete {
+  color: red;
+}
+.delete:hover {
+  color: red;
+}
+.pagination {
+  min-width: 1010px;
+}
+.downTemplate {
+  margin-right: 8px;
+  span {
+    color: #02a7f0;
+  }
+}
+#upFile {
+  display: none !important;
+}
+.el-message-box {
+  /deep/.cancelBtn {
+    background-color: #d7d7d7;
+    border-color: transparent;
+  }
+  /deep/.confirmC {
+    background-color: #ff545b !important;
+    border-color: transparent !important;
+  }
+}
+.exportBox6 {
+  /deep/ .el-message-box__btns {
+    margin-top: 20px;
+  }
+  /deep/ .el-message-box__message {
+    // text-align: center;
+  }
+  /deep/.leftbtn {
+    background-color: #d7d7d7;
+    border-color: transparent !important;
+  }
+  /deep/ .el-message-box__header {
+    border-bottom: 1px solid #dcdfe6;
+  }
+}
+</style>

+ 405 - 0
src/components/cdssManage/pacs/AddPacs.vue

@@ -0,0 +1,405 @@
+<template>
+  <div class="AddChemicalAndCommonMappingWrapper clearfix">
+    <crumbs
+      :title="isEdit ? '检查关联维护--修改关联 | ' + hospitaiName: '检查关联维护--添加关联 | ' + hospitaiName"
+      class="topBack"
+      :param="$route.params"
+      linkTo="Pacs"
+    ></crumbs>
+    <el-form
+      :model="form"
+      :rules="rules"
+      label-position="right"
+      label-width="120px"
+      ref="relationForm"
+    >
+      <div class="AddChemicalAndCommonMappingBox clearfix">
+        <div class="titleBox clearfix">
+          <p class="title">医院术语</p>
+          <p class="title">标准术语</p>
+        </div>
+        <div class="leftBox clearfix">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="检查项目:" prop="hisName">
+                <el-input v-model="form.hisName" clearable style="minWidth: 240px"></el-input>
+              </el-form-item>
+              <el-form-item label="检查项目预览:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.hisName}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+        <div class="midBox">
+          <img class="midLogo" src="../../../images/relation.png" alt />
+          <p class="midTitle">相互关联</p>
+        </div>
+        <div class="rightBox">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="检查项目:" prop="searchText">
+                <el-select
+                  style="width:100%;minWidth: 240px"
+                  v-model="form.searchText"
+                  filterable
+                  remote
+                  clearable
+                  :loading="showDrop"
+                  loading-text="加载中..."
+                  @change="changeWord"
+                  @focus="handleFocus"
+                  @visible-change="handleVisible"
+                  placeholder="搜索"
+                  :remote-method="searchTerms"
+                  reserve-keyword
+                >
+                  <el-option
+                    v-for="(item,idx) in uniqueNameList"
+                    :key="idx"
+                    :label="item"
+                    :value="item"
+                    :title="item"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="检查项目预览:">
+                <span class="previewInfo" style="minWidth: 240px">{{form.searchText}}</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+      </div>
+      <div class="btn">
+        <el-form-item>
+          <el-button type="primary" :disabled="saveDisable" @click="submitForm">确定</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+  </div>
+</template>
+<script>
+import api from '@api/cdss.js';
+export default {
+  name: 'AddPacs',
+  data() {
+    return {
+      isEdit: false,
+      hospitaiName: '',
+      editId: '',
+      uniqueNameList: [],
+      form: {
+        searchText: '', //搜索字段
+        hisName: ''
+      },
+      rules: {
+        hisName: [
+          { required: true, message: '请输入检查项目', trigger: 'change' },
+          { max: 80, message: '检查项目最多80字', trigger: 'change' }
+        ],
+        searchText: [
+          { required: true, message: '请选择检查项目', trigger: 'change' }
+        ]
+      },
+      saveDisable: false, //保存按钮禁止点击
+      showDrop: false, //下拉框显示文字
+      hospitalId: ''
+    };
+  },
+  created() {
+    //修改
+    const { isEdit, data, hospitaiName } = this.$route.params;
+    this.hospitaiName = hospitaiName;
+    this.hospitalId = data && data.hospitalId;
+    if (isEdit) {
+      this.isEdit = isEdit;
+      this.editId = data.id;
+      this.form.hisName = data.hisName;
+      this.form.searchText = data.uniqueName;
+    }
+  },
+  methods: {
+    // 搜索列表
+    searchTerms(query) {
+      if (!query) {
+        this.uniqueNameList = [];
+        return;
+      }
+      this.showDrop = true;
+      let params = {
+        type: 3,
+        inputStr: query,
+        sex: 3,
+        age: 0
+      };
+      api.retrievalSearch(params).then(res => {
+        this.showDrop = false;
+        if (res.data.code === '0') {
+          this.uniqueNameList = res.data.data.pacsNames;
+        }
+      });
+    },
+    changeWord() {},
+    // 获取焦点
+    handleFocus() {},
+    handleVisible(flag) {
+      if (!flag) {
+        this.uniqueNameList = [];
+      }
+    },
+    // 初始化表单数据
+    initForm() {
+      this.form.hisName = '';
+      this.form.searchText = '';
+    },
+
+    // 建立关联-参数处理
+    submitForm() {
+      this.$refs.relationForm.validate(valid => {
+        if (valid) {
+          const { searchText, hisName } = this.form;
+          let params = {
+            hisName: hisName,
+            uniqueName: searchText,
+            hospitalId: this.hospitalId
+          };
+          this.showSaveDialog(params);
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 建立关联-映射关系是否已存在
+    showSaveDialog(params) {
+      this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
+      api
+        .pacsIsExistRecord(params)
+        .then(res => {
+          if (!res.data.data) {
+            // 不存在,创建新的关联
+            // 如果是编辑时,需要携带id
+            if (this.isEdit) {
+              params = { ...params, id: this.editId };
+            }
+            this.saveLisMapping(params, '保存成功', 'success');
+          } else {
+            // 已存在,提示修改
+            this.warning('该条关联已存在,无法添加');
+            this.saveDisable = false;
+          }
+        })
+        .catch(err => {
+          if (err.code === '900010001') {
+            return false;
+          }
+          this.warning(err);
+        });
+    },
+
+    // 映射关系不存在-建立关联
+    saveLisMapping(params, msg, type) {
+      api.saveOrUpdatePacsRecord(params).then(res => {
+        if (res.data.code === '0') {
+          this.warning(res.data.msg || msg, type);
+          this.initForm();
+          this.$router.push({
+            name: 'Pacs',
+            params: Object.assign({}, this.$route.params, {
+              currentPage: 1
+            })
+          });
+        } else {
+          this.warning(res.data.msg);
+        }
+        this.saveDisable = false;
+      });
+    },
+    // 关联已存在模态框
+    showConfirmDialog(msg, resolve) {
+      this.$confirm(msg, '提示', {
+        customClass: 'confirmRealation',
+        confirmButtonText: '是',
+        cancelButtonText: '否',
+        cancelButtonClass: 'cancelButton',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {
+          this.saveDisable = false;
+          this.warning('建立失败', 'error');
+        });
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.AddChemicalAndCommonMappingWrapper {
+  .AddChemicalAndCommonMappingBox {
+    min-width: 940px;
+  }
+  color: #606266;
+  .topBack {
+    top: 0;
+  }
+  .titleBox {
+    padding: 0 0 10px 0px;
+  }
+  .title {
+    width: 50%;
+    float: left;
+    font-size: 14px;
+  }
+  .AddChemicalAndCommonMappingBox {
+    padding: 20px 30px 20px 30px;
+    margin: 70px 20px 0 20px;
+    background: #fff;
+  }
+  .leftBox,
+  .midBox,
+  .rightBox {
+    width: 40%;
+    float: left;
+    min-height: 200px;
+    font-size: 14px;
+  }
+  .midBox {
+    width: 6%;
+    padding: 50px 0 0 0;
+    text-align: center;
+  }
+  .midTitle {
+    width: 40px;
+    margin: 0 auto;
+  }
+  .midLogo {
+    margin: 0 auto;
+  }
+  .leftBox,
+  .rightBox {
+    border: 1px solid #dcdfe6;
+    padding: 20px 20px;
+  }
+  .itemLabel {
+    width: 100%;
+    min-height: 50px;
+    line-height: 50px;
+    position: relative;
+  }
+  .itemLabelName,
+  .searchInput,
+  .searchName {
+    float: left;
+    color: #606266;
+  }
+  .itemLabelName {
+    width: 150px;
+  }
+  .isRequired::before {
+    content: '*';
+    color: red;
+  }
+  .searchInput,
+  .mealNameItem {
+    padding: 0 5px;
+  }
+  .searchInput,
+  .searchName {
+    display: inline-block;
+    height: 32px;
+    line-height: 32px;
+    border: 1px solid #a9a9a9;
+    margin: 8px 0 0 0;
+  }
+
+  .searchName {
+    text-align: center;
+    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: 150px;
+    top: 42px;
+    z-index: 2;
+    overflow-y: auto;
+  }
+  .itemList {
+    width: calc(100% - 131px);
+  }
+  .mealNameItem {
+    height: 30px;
+    line-height: 30px;
+    font-size: 14px;
+    cursor: pointer;
+  }
+  .mealNameItem:hover {
+    background: #f5f7fa;
+  }
+  // .selectItemName {
+  //   padding-left: 4px;
+  //   display: inline-block;
+  //   margin-top: 8px;
+  //   // width: calc(100% - 160px);s
+  //   line-height: 24px;
+  //   overflow: hidden;
+  //   word-wrap: break-word;
+  //   word-break: break-all;
+  // }
+  .previewInfo {
+    padding-left: 4px;
+    display: inline-block;
+    margin-top: 8px;
+    // width: calc(100% - 160px);s
+    line-height: 24px;
+    overflow: hidden;
+    word-wrap: break-word;
+    word-break: break-all;
+  }
+  .btn {
+    position: relative;
+    background-color: #fff;
+    margin: 0px 20px;
+    padding: 20px;
+    min-width: 960px;
+    height: 80px;
+    .el-button {
+      position: absolute;
+      right: 80px;
+      top: 20px;
+    }
+  }
+  .sumbit {
+    position: absolute;
+    display: inline-block;
+    width: 80px;
+    height: 30px;
+    line-height: 30px;
+    border: 1px solid #a9a9a9;
+    text-align: center;
+    right: 100px;
+  }
+}
+.confirmRealation {
+  .cancelButton {
+    border: 1px solid #a9a9a9;
+    span {
+      color: #606266;
+    }
+  }
+}
+</style>

+ 454 - 0
src/components/cdssManage/pacs/Pacs.vue

@@ -0,0 +1,454 @@
+<template>
+  <div>
+    <crumbs :title="title + hospitaiName" linkTo="MedicalTermCDSS" style="min-width: 1300px">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item>
+          <el-button type="text" class="downTemplate" @click="exportModule">导入模板下载</el-button>
+          <input
+            type="file"
+            name="uploadfile "
+            id="upFile"
+            @change="uploadFile($event)"
+            accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+          />
+          <el-button size="mini" @click="importPage">{{uploadInfo}}</el-button>
+          <el-button size="mini" @click="exportData">导出</el-button>
+        </el-form-item>
+        <el-form-item label="医院检查项目:">
+          <el-input size="mini" v-model="filter.hisName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="标准检查项目:">
+          <el-input size="mini" v-model="filter.uniqueName" placeholder="请输入" clearable></el-input>
+        </el-form-item>
+        <el-form-item class="dododo">
+          <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="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column :resizable="false" prop="hisName" label="医院检查项目" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="uniqueName" label="标准检查项目" show-overflow-tooltip></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">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              @click="showDelDialog(scope.row.id)"
+              class="delete"
+              type="text"
+              size="small"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination pagepage">
+        <el-pagination
+          :current-page.sync="currentPage"
+          @current-change="currentChange"
+          background
+          :page-size="pageSize"
+          :page-sizes="pageSizeArr"
+          @size-change="handleSizeChange"
+          :layout="pageLayout"
+          :total="total"
+        ></el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/cdss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'Pacs', //化验大小项和公表维护
+  data: function() {
+    return {
+      list: [],
+      searched: false,
+      filter: {
+        hisName: '', // 医院诊断名称
+        uniqueName: '' //标准诊断名称
+      },
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      uploadInfo: '导入',
+      title: '检查关联维护 | ',
+      hospitaiName: '',
+      hospitalId: ''
+    };
+  },
+  created() {
+    const { data } = this.$route.params;
+    this.hospitaiName = (data && data.name) || '';
+    this.hospitalId = data && data.hospitalId;
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    // 非首页 编辑页返回 设置 this.currentPage
+    if (Object.keys(this.$route.params).length !== 0) {
+      this.currentPage = this.$route.params.currentPage;
+    }
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage = to.params.currentPage;
+    });
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+
+    // 获取列表数据
+    getDataList(isTurnPage) {
+      const params = this.getFilterItems(isTurnPage);
+      this.searched = true;
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api.getpacsPage(params).then(res => {
+        loading.close();
+        if (res.data.code === '0') {
+          this.list = res.data.data && res.data.data.records;
+        }
+        this.total = res.data.data && res.data.data.total;
+        if (this.inCurrentPage !== undefined) {
+          this.currentPage = this.inCurrentPage;
+          this.inCurrentPage = undefined;
+        }
+      });
+    },
+
+    // 处理列表请求数据参数
+    getFilterItems(isTurnPage) {
+      const { data } = this.$route.params;
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        hisName: this.filter.hisName.trim(),
+        uniqueName: this.filter.uniqueName.trim(),
+        uniqueCode: '',
+        hospitalId: data && data.hospitalId
+      };
+      return param;
+    },
+
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList();
+    },
+    addRelation() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddPacs',
+        params: Object.assign(pam, {
+          isEdit: false,
+          data: { hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    // 修改诊断关联-跳转至编辑页面
+    modifyRelation(row) {
+      const item = Object.assign({}, row);
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddPacs',
+        params: Object.assign(pam, {
+          isEdit: true,
+          data: { ...item, hospitalId: this.hospitalId },
+          hospitaiName: this.hospitaiName
+        })
+      });
+    },
+    currentChange(next) {
+      this.currentPage = next;
+      this.getDataList(true);
+      // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+      //     this.list = this.cacheData[next];
+      // } else {
+      //     this.getDataList();
+      // }
+    },
+    // 清空搜索参数
+    clearFilter() {
+      this.filter = {
+        hisName: '',
+        uniqueName: ''
+      };
+    },
+
+    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.$confirm(msg, '提示', {
+        confirmButtonText: '删除',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'cancelBtn',
+        confirmButtonClass: 'confirmC',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    // 删除关联
+    showDelDialog(id) {
+      this.showConfirmDialog('是否删除该关联?', () => {
+        api
+          .deletePacsRecord({ id: id })
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (this.list.length == 1) {
+                //当前在最后一页且只有一条数据时,删除后跳到前一页
+                this.currentPage =
+                  this.currentPage === 1 ? 1 : this.currentPage - 1;
+              }
+              this.getDataList();
+              this.warning(res.data.msg || '操作成功', 'success');
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            if (error.code === '900010001') {
+              return false;
+            }
+            this.warning(error);
+          });
+      });
+    },
+
+    // 导出数据
+    exportData() {
+      this.$confirm('确定要导出全部检查关联数据吗?', '', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'leftbtn',
+        customClass: 'exportBox6',
+        title: '提示',
+        type: 'warning'
+        // beforeClose: (action, instance, done) => {
+        //   if (action === 'confirm') {
+        //     // instance.confirmButtonLoading = true;
+        //     instance.confirmButtonText = '导出中...';
+        //     api.exportPacsRecord().then(res => {
+        //       if (res.status === 200) {
+        //         setTimeout(() => {
+        //           utils.downloadExportedData(res.data, '检查关联数据.xls');
+        //           done();
+        //         }, 1500);
+        //       }
+        //     });
+        //   } else {
+        //     done();
+        //   }
+        // }
+      })
+        .then(() => {
+          api.exportPacsRecord().then(res => {
+            if (res.status === 200) {
+              this.$message({ message: '导出成功', type: 'success' });
+              utils.downloadExportedData(res.data, '检查关联数据.xls');
+            }
+          });
+        })
+        .catch(() => {
+          // this.$message({ message: '导出失败', type: 'waring' });
+        });
+    },
+    // 导入模板
+    exportModule() {
+      api.exportPacsModule().then(res => {
+        if (res.status === 200) {
+          setTimeout(() => {
+            utils.downloadExportedData(res.data, '检查导入模板.xls');
+          }, 1500);
+        }
+      });
+    },
+
+    // 点击导入
+    importPage() {
+      let inp = document.getElementById('upFile');
+      inp.click();
+    },
+    // 导入数据
+    uploadFile(e) {
+      let fileInfo = e.target.files[0];
+      e.preventDefault();
+      let formData = new FormData();
+      formData.append('file', fileInfo);
+      const header = {
+        headers: {
+          'Content-Type': 'multipart/form-data'
+        }
+      };
+      this.uploadInfo = '导入中...';
+      api.importPacsRecord(formData, header).then(res => {
+        // code === '00000001'  导入失败统一提示 数据存在异常,导入失败,请修改后再试
+        if (res.data.code === '00000001') {
+          this.$confirm(`数据存在异常,导入失败,请修改后再试`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else if (res.data === '' && res.status === 200) {
+          this.$confirm(`导入成功`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+          this.getDataList(); // 重新获取列表
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        } else {
+          this.$confirm(`${res.data.msg}`, '提示', {
+            confirmButtonText: '确定',
+            // cancelButtonText: '取消',
+            cancelButtonClass: 'cancelSure',
+            confirmButtonClass: 'sure',
+            customClass: 'exportConfirm',
+            type: 'warning'
+          })
+            .then(() => {})
+            .catch(() => {});
+
+          setTimeout(() => {
+            this.uploadInfo = '导入';
+          }, 300);
+        }
+      });
+      //解决上传相同文件不触发change
+      let inp = document.getElementById('upFile');
+      inp.value = '';
+    }
+  }
+};
+</script>
+
+
+<style lang="less" scoped>
+@import '../../../less/admin.less';
+.delete {
+  color: red;
+}
+.delete:hover {
+  color: red;
+}
+.pagination {
+  min-width: 1010px;
+}
+.downTemplate {
+  margin-right: 8px;
+  span {
+    color: #02a7f0;
+  }
+}
+#upFile {
+  display: none !important;
+}
+.el-message-box {
+  /deep/.cancelBtn {
+    background-color: #d7d7d7;
+    border-color: transparent;
+  }
+  /deep/.confirmC {
+    background-color: #ff545b !important;
+    border-color: transparent !important;
+  }
+}
+.exportBox6 {
+  /deep/ .el-message-box__btns {
+    margin-top: 20px;
+  }
+  /deep/ .el-message-box__message {
+    // text-align: center;
+  }
+  /deep/.leftbtn {
+    background-color: #d7d7d7;
+    border-color: transparent !important;
+  }
+  /deep/ .el-message-box__header {
+    border-bottom: 1px solid #dcdfe6;
+  }
+}
+</style>

+ 644 - 0
src/components/cdssManage/plan/AddPlan.vue

@@ -0,0 +1,644 @@
+<template>
+  <el-scrollbar style="height: 100%" ref="elscrollbar">
+    <div class="AddPlanWrapper clearfix" @click="close">
+      <crumbs
+        :title="isEdit ? '电子病历方案配置-修改方案' : '电子病历方案配置-添加方案'"
+        class="topBack"
+        :param="$route.params"
+        linkTo="Plan"
+      ></crumbs>
+      <div class="AddPlanBox">
+        <el-row :gutter="20">
+          <el-col :span="16">
+            <el-form ref="form" :model="form" label-width="80px" :rules="rules">
+              <el-form-item label="方案名称" prop="planName">
+                <el-input v-model="form.planName" placeholder="2-30位,可输入汉字、字母、数字和下划线"></el-input>
+              </el-form-item>
+              <el-form-item label="方案编码" prop="planCode">
+                <el-input v-model="form.planCode" placeholder="4-15位,可输入字母、数字和下划线"></el-input>
+              </el-form-item>
+              <el-form-item label="方案配置">
+                <ul>
+                  <li>
+                    <div class="title">
+                      <div class="handleIcon" @click="openPlanItems">
+                        <img
+                          src="../../../images/multi.png"
+                          alt="辅助信息"
+                          :class="{'open' : isOpenCloseItems}"
+                        />
+                      </div>
+                      <h4>辅助信息</h4>
+                      <div class="titlwSwitch">
+                        <el-switch
+                          v-model="switchSubStatus"
+                          :active-value="1"
+                          :inactive-value="0"
+                          active-color="#4BC4D7"
+                          inactive-color="#BBBBBB"
+                        ></el-switch>
+                        <span class="titlwSwitchStatus">{{switchSubStatus === 1 ? '启用中' : '未启用'}}</span>
+                      </div>
+                    </div>
+                    <transition name="plus-icon">
+                      <div v-if="isOpenCloseItems">
+                        <ul class="sub" v-for="(item,index) in  planDefaultList" :key="item.id">
+                          <li class="planItem">
+                            <div class="sort">
+                              <div class="top">
+                                <img
+                                  :src="isTopLight !== index ? require('../../../images/icon_default_top.png') : require('../../../images/icon_hover_top.png')"
+                                  alt="上升"
+                                  v-if="index !== 0"
+                                  @click="sortPlan(item,index,'top')"
+                                  @mouseover="handleMouseEnter1(index)"
+                                  @mouseleave="handleMouseLeave1(index)"
+                                />
+                              </div>
+                              <div class="down">
+                                <img
+                                  :src="isDownLight !== index ? require('../../../images/icon_default_down.png') : require('../../../images/icon_hover_down.png')"
+                                  alt="下降"
+                                  v-if="index !== planDefaultList.length - 1"
+                                  @click="sortPlan(item,index,'down')"
+                                  @mouseover="handleMouseEnter(index)"
+                                  @mouseleave="handleMouseLeave(index)"
+                                />
+                              </div>
+                            </div>
+                            <div class="openOrClose">
+                              <span class="planInfo">{{item.name}}</span>
+                              <div class="switch">
+                                <el-switch
+                                  v-model="item.status"
+                                  :active-value="1"
+                                  :inactive-value="0"
+                                  active-color="#4BC4D7"
+                                  inactive-color="#BBBBBB"
+                                ></el-switch>
+                              </div>
+                              <span class="planStatus">{{item.status === 1 ? '启用中' : '未启用'}}</span>
+                            </div>
+                            <div class="showNum" v-if="item.number">
+                              <span style="marginRight:8px;">默认显示个数</span>
+                              <el-select
+                                v-model="item.number"
+                                placeholder="请选择"
+                                size="small"
+                                :disabled="item.status !== 1 ? true: false"
+                              >
+                                <el-option label="1" value="1"></el-option>
+                                <el-option label="2" value="2"></el-option>
+                                <el-option label="3" value="3"></el-option>
+                                <el-option label="4" value="4"></el-option>
+                                <el-option label="5" value="5"></el-option>
+                                <el-option label="6" value="6"></el-option>
+                              </el-select>
+                            </div>
+                          </li>
+                        </ul>
+                      </div>
+                    </transition>
+                  </li>
+                  <li>
+                    <div class="title">
+                      <div class="handleIcon">
+                        <img src="../../../images/multi.png" alt="医学知识" />
+                      </div>
+                      <h4>医学知识</h4>
+                      <div class="titlwSwitch">
+                        <el-switch
+                          v-model="switchMedStatus"
+                          :active-value="1"
+                          :inactive-value="0"
+                          active-color="#4BC4D7"
+                          inactive-color="#BBBBBB"
+                        ></el-switch>
+                        <span class="titlwSwitchStatus">{{switchMedStatus === 1 ? '启用中' : '未启用'}}</span>
+                      </div>
+                    </div>
+                  </li>
+                  <li>
+                    <div class="title">
+                      <div class="handleIcon">
+                        <img src="../../../images/multi.png" alt="医学知识" />
+                      </div>
+                      <h4>随访计划</h4>
+                      <div class="titlwSwitch">
+                        <el-switch
+                          v-model="switchFollowStatus"
+                          :active-value="1"
+                          :inactive-value="0"
+                          active-color="#4BC4D7"
+                          inactive-color="#BBBBBB"
+                        ></el-switch>
+                        <span class="titlwSwitchStatus">{{switchFollowStatus === 1 ? '启用中' : '未启用'}}</span>
+                      </div>
+                    </div>
+                  </li>
+                </ul>
+              </el-form-item>
+              <el-form-item>
+                <el-button type="primary" @click="onSubmit" :disabled="saveDisable">确定</el-button>
+              </el-form-item>
+            </el-form>
+          </el-col>
+        </el-row>
+      </div>
+    </div>
+  </el-scrollbar>
+</template>
+<script>
+import api from '@api/cdss.js';
+
+export default {
+  name: 'AddPlan',
+  data() {
+    var numreg = /^[a-zA-Z0-9_\u4e00-\u9fa5]+$/;
+    var numreg1 = /^[0-9a-zA-Z_]{1,}$/;
+    var validatePass = (rule, value, callback) => {
+      if (!numreg.test(value)) {
+        callback(new Error('汉字、字母、数字和下划线'));
+      } else {
+        callback();
+      }
+    };
+    var validatePass1 = (rule, value, callback) => {
+      if (!numreg1.test(value)) {
+        callback(new Error('字母、数字和下划线'));
+      } else {
+        callback();
+      }
+    };
+    return {
+      form: {
+        planName: '',
+        planCode: ''
+      },
+      saveDisable: false, //保存按钮禁止点击
+      rules: {
+        planName: [
+          { required: true, message: '方案名称不能为空', trigger: 'change' },
+          { min: 2, max: 30, message: '长度2-30位', trigger: 'blur' },
+          { required: true, validator: validatePass, trigger: 'blur' }
+        ],
+        planCode: [
+          { required: true, message: '方案编码不能为空', trigger: 'change' },
+          { min: 4, max: 15, message: '长度4-15位', trigger: 'blur' },
+          { required: true, validator: validatePass1, trigger: 'blur' }
+        ]
+      },
+      planDefaultList: [],
+      hospitalId: '',
+      isEdit: false, // 是否处于编辑页面 false--新增   true--编辑
+      switchSubStatus: 0, // 辅助信息
+      switchMedStatus: 0, // 医学知识
+      switchFollowStatus: 0, //随访计划
+      isOpenCloseItems: true, // 是否展开方案配置项
+      isDownLight: -1,
+      isTopLight: -1,
+      flag: 1,
+      editCount: -1, // 页面会否被编辑 >0被编辑   =0 未编辑
+      isSaveSuccess: false // 是否保存成功
+    };
+  },
+  beforeRouteLeave(to, from, next) {
+    if (
+      (this.editCount > 2 && !this.isSaveSuccess && this.isEdit) ||
+      (this.editCount > 1 && !this.isSaveSuccess && !this.isEdit)
+    ) {
+      // console.log('页面被编辑了');
+      this.$confirm('还有未保存的内容,确定要退出当前页面吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        cancelButtonClass: 'leaveBtn',
+        customClass: 'leaveBox',
+        type: 'warning'
+      })
+        .then(() => {
+          next();
+        })
+        .catch(() => {});
+    } else {
+      next();
+    }
+  },
+  watch: {
+    form: {
+      handler(newName, oldName) {
+        this.editCount++;
+      },
+      deep: true
+      // immediate: true
+    },
+    planDefaultList: {
+      handler(newName, oldName) {
+        // console.log(newName,'newName');
+        // console.log(oldName,'oldName');
+        this.editCount++;
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  async created() {
+    const { isEdit, data } = this.$route.params;
+    // console.log(data, '编辑页传递的data');
+    let res = await api.getHospitalInfo(); // 同步获取医院信息
+    this.hospitalId = res.data.data.id;
+    if (isEdit) {
+      // 编辑页面
+      this.isEdit = true;
+      let params = {
+        hospitalId: res.data.data.id,
+        id: data.id
+      };
+      this._getPlanInfoIds(params);
+    } else {
+      // 新增页面
+      this._getDefaultPlans(); // 获取默认配置信息
+    }
+  },
+  methods: {
+    close() {},
+
+    // 方案配置排序
+    sortPlan(item, index, type) {
+      // console.log('排序', item, index, type);
+      let tempList = [...this.planDefaultList];
+      if (type === 'down') {
+        // 降序
+        let plan = tempList.find(item => {
+          return item.orderNo === index + 1;
+        });
+        let tempPlan = { ...plan };
+        let planNext = tempList.find(item => {
+          return item.orderNo === index + 2;
+        });
+        let tempPlanNext = { ...planNext };
+        plan = tempPlanNext;
+        plan.orderNo -= 1;
+        planNext = tempPlan;
+        planNext.orderNo += 1;
+        let arr = tempList.map((i, idx) => {
+          if (idx === index) {
+            return { ...plan };
+          } else if (idx === index + 1) {
+            return { ...planNext };
+          } else {
+            return i;
+          }
+        });
+        this.planDefaultList = [...arr];
+      } else {
+        // 升序
+        let plan = tempList.find(item => {
+          return item.orderNo === index + 1;
+        });
+        let tempPlan = { ...plan };
+        let planPre = tempList.find(item => {
+          return item.orderNo === index;
+        });
+        let tempPlanPre = { ...planPre };
+        plan = tempPlanPre;
+        plan.orderNo += 1;
+        planPre = tempPlan;
+        planPre.orderNo -= 1;
+        let arr = tempList.map((i, idx) => {
+          if (idx === index) {
+            return { ...plan };
+          } else if (idx === index - 1) {
+            return { ...planPre };
+          } else {
+            return i;
+          }
+        });
+        this.planDefaultList = [...arr];
+      }
+    },
+
+    // 展开列表项
+    openPlanItems() {
+      this.isOpenCloseItems = !this.isOpenCloseItems;
+    },
+
+    // 鼠标移入
+    handleMouseEnter(index) {
+      this.isDownLight = index;
+    },
+
+    // 鼠标移除
+    handleMouseLeave(index) {
+      this.isDownLight = -1;
+    },
+
+    // 鼠标移入
+    handleMouseEnter1(index) {
+      this.isTopLight = index;
+    },
+
+    // 鼠标移除
+    handleMouseLeave1(index) {
+      this.isTopLight = -1;
+    },
+
+    // 获取默认方案配置
+    _getDefaultPlans() {
+      api.getDefaultPlans().then(res => {
+        // console.log(res, '获取默认的方案配置');
+        if (res.data.code === '0') {
+          this.planDefaultList =
+            res.data.data &&
+            res.data.data.planDetailDefault.length !== 0 &&
+            res.data.data.planDetailDefault[0].planDetails;
+          this.switchSubStatus =
+            res.data.data &&
+            res.data.data.planDetailDefault.length !== 0 &&
+            res.data.data.planDetailDefault[0].status;
+          this.switchMedStatus =
+            res.data.data &&
+            res.data.data.planDetailDefault.length !== 0 &&
+            res.data.data.planDetailDefault[1].status;
+          this.switchFollowStatus =
+            res.data.data &&
+            res.data.data.planDetailDefault.length !== 0 &&
+            res.data.data.planDetailDefault[2].status;
+        }
+      });
+    },
+
+    // 编辑页面 根据id获取方案配置
+    async _getPlanInfoIds(params) {
+      // 先获取默认的所有方案
+      let tempArr = [];
+      let newPlan = [];
+      let res = await api.getDefaultPlans();
+      if (res.data.code === '0') {
+        tempArr =
+          res.data.data &&
+          res.data.data.planDetailDefault.length !== 0 &&
+          res.data.data.planDetailDefault[0].planDetails;
+      }
+      let res1 = await api.getPlanInfoIds(params);
+      if (res1.data.code === '0') {
+        newPlan = res1.data.data[0].sysSetInfo[0].planDetails;
+        this.form.planName = res1.data.data[0].planName;
+        this.form.planCode = res1.data.data[0].planCode;
+        this.switchSubStatus = res1.data.data[0].sysSetInfo[0].status;
+        this.switchMedStatus = res1.data.data[0].sysSetInfo[1].status;
+        this.switchFollowStatus = res1.data.data[0].sysSetInfo[2].status;
+        // this.planDefaultList = res1.data.data[0].sysSetInfo[0].planDetails;
+      }
+      let arr = [];
+      let arrTemp = [];
+      let arrTemp1 = []; // 不同index
+      for (var i = 0; i < tempArr.length; i++) {
+        arrTemp.push(i);
+      }
+      for (var i = 0; i < tempArr.length; i++) {
+        for (var j = 0; j < newPlan.length; j++) {
+          if (tempArr[i].code === newPlan[j].code) {
+            arr.push(i);
+          }
+        }
+      }
+      arrTemp1 = arr
+        .filter(x => arrTemp.indexOf(x) == -1)
+        .concat(arrTemp.filter(x => arr.indexOf(x) == -1));
+      let endArr = [...newPlan];
+      for (var j = 0; j < arrTemp1.length; j++) {
+        let temp = tempArr[arrTemp1[j]];
+        temp.orderNo = arr.length + j + 1;
+        temp.status = 0;
+        endArr.push(temp);
+      }
+      // console.log(endArr,'-=-=-=-=-=');
+      this.planDefaultList = endArr;
+    },
+
+    // format处理细项数据
+    handleSendData() {
+      let TempPlanDetail = [];
+      TempPlanDetail = this.planDefaultList.map((item, index) => {
+        return {
+          code: item.code,
+          hospitalId: this.hospitalId,
+          name: item.name,
+          number: item.number,
+          orderNo: item.orderNo,
+          planId: item.planId,
+          remark: item.remark,
+          status: item.status,
+          value: item.value
+        };
+      });
+      return TempPlanDetail;
+      // console.log(TempPlanDetail, 'TempPlanDetail');
+    },
+
+    // 处理保存活动信息参数
+    _getParams() {
+      let params = {
+        hospitalId: this.hospitalId,
+        planCode: this.form.planCode,
+        planDetailParent: [
+          {
+            code: 'auxiliary',
+            hospitalId: this.hospitalId,
+            name: '辅助信息',
+            number: 0,
+            orderNo: 1,
+            planDetailSub: this.handleSendData(),
+            status: this.switchSubStatus
+          },
+          {
+            code: 'medical',
+            hospitalId: this.hospitalId,
+            name: '医学知识',
+            orderNo: 3,
+            planDetailSub: [{}],
+            status: this.switchMedStatus
+          },
+          {
+            code: 'followup',
+            hospitalId: this.hospitalId,
+            name: '随访计划',
+            orderNo: 4,
+            planDetailSub: [{}],
+            status: this.switchFollowStatus
+          }
+        ], // 方案配置信息
+        planName: this.form.planName,
+        planStatus: 1 // 1 启用    默认启用
+      };
+      if (this.isEdit) {
+        // 编辑状态,需要额外添加ID
+        const { data } = this.$route.params;
+        params = { ...params, id: data.id };
+      }
+      return params;
+    },
+
+    onSubmit() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.saveDisable = true;
+          let params = this._getParams();
+          api.savePlanInfoDatas(params).then(res => {
+            if (res.data.code === '0') {
+              this.$message({
+                showClose: true,
+                message: '保存成功',
+                type: 'success',
+                duration: 1000
+              });
+              this.isSaveSuccess = true; // 保存成功,可正常退出
+              this.$router.push({
+                name: 'Plan',
+                params: Object.assign({}, this.$route.params, {
+                  currentPage: 1
+                })
+              });
+            } else if (res.data.code === '00020007') {
+              // 方案名/方案编码已存在
+              this.$message({
+                showClose: true,
+                message: res.data.msg,
+                type: 'error',
+                duration: 1000
+              });
+            }
+            this.saveDisable = false;
+          });
+        } else {
+          this.saveDisable = false;
+          var div = this.$refs['elscrollbar'].$refs['wrap'];
+          this.$nextTick(() => {
+            div.scrollTop = 0;
+          });
+          return false;
+        }
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.AddPlanWrapper {
+  min-width: 940px;
+  .AddPlanBox {
+    padding: 20px 60px 120px 60px;
+    margin: 70px 20px 0 20px;
+    background: #fff;
+  }
+  color: #606266;
+  .topBack {
+    top: 0;
+  }
+  .title {
+    background-color: #f2f2f2;
+    display: flex;
+    .handleIcon {
+      width: 30px;
+      cursor: pointer;
+      height: 40px;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      img {
+        width: 20px;
+        height: 20px;
+      }
+      .open {
+        transform: rotate(180deg);
+      }
+      .close {
+        transform: rotate(0deg);
+      }
+    }
+    .titlwSwitch {
+      width: 120px;
+    }
+    h4 {
+      flex: 1;
+    }
+    .titlwSwitchStatus {
+      margin-left: 16px;
+    }
+  }
+  .sub {
+    .planItem {
+      display: flex;
+      .sort {
+        width: 60px;
+        display: flex;
+        .top {
+          display: flex;
+          justify-content: center;
+          align-items: center;
+          width: 30px;
+          cursor: pointer;
+          img {
+            width: 10px;
+            height: 14px;
+          }
+        }
+        .down {
+          width: 30px;
+          cursor: pointer;
+          display: flex;
+          justify-content: center;
+          align-items: center;
+          img {
+            width: 10px;
+            height: 14px;
+          }
+        }
+      }
+      .openOrClose {
+        display: flex;
+        flex: 1;
+        .planInfo {
+          width: 140px;
+        }
+        .switch {
+        }
+        .planStatus {
+          margin-left: 16px;
+        }
+      }
+      .showNum {
+        display: flex;
+        width: 160px;
+        /deep/.el-input--small {
+          width: 60px;
+        }
+      }
+    }
+  }
+  .el-button {
+    float: right;
+  }
+  .plus-icon-enter-active {
+    transition: all 0.8s;
+  }
+  .plus-icon-enter {
+    opacity: 0;
+    margin-top: 12px;
+  }
+  .plus-icon-leave-active {
+    transition: all 0.8s;
+  }
+  .plus-icon-leave-active {
+    opacity: 0;
+    margin-top: 12px;
+  }
+}
+.leaveBox {
+  /deep/ .leaveBtn {
+    // margin-right: 46px;
+    background-color: #d7d7d7 !important;
+    border-color: transparent;
+  }
+}
+</style>

+ 438 - 0
src/components/cdssManage/plan/Plan.vue

@@ -0,0 +1,438 @@
+<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="filter.planName" 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="planName" label="方案名称" show-overflow-tooltip></el-table-column>
+        <el-table-column :resizable="false" prop="planCode" label="方案编码" width="180"></el-table-column>
+        <el-table-column
+          :resizable="false"
+          prop="planDetail"
+          label="模块配置"
+          show-overflow-tooltip
+        ></el-table-column>
+        <el-table-column
+          :resizable="false"
+          prop="gmtCreate"
+          label="创建时间"
+          show-overflow-tooltip
+          width="180"
+        ></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"
+              v-if="scope.row.planStatus === 1"
+              class="disable"
+            >修改</el-button>
+            <el-button plain type="text" size="small" v-else disabled>修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="enableOrAble(scope.row,0)"
+              v-if="scope.row.planStatus === 1"
+            >禁用</el-button>
+            <el-button type="text" size="small" @click="enableOrAble(scope.row,1)" v-else>启用</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              v-if ='scope.row.planStatus !== 1'
+              @click="showDelDialog(scope.row.id,scope.row.planStatus,scope.row.planName)"
+              class="delete"
+              type="text"
+              size="small"
+            >删除</el-button>
+            <el-button plain type="text" size="small" v-else disabled>删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination">
+        <el-pagination
+          :current-page.sync="currentPage"
+          @current-change="currentChange"
+          background
+          :page-size="pageSize"
+          :page-sizes="pageSizeArr"
+          @size-change="handleSizeChange"
+          :layout="pageLayout"
+          :total="total"
+        ></el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import api from '@api/icss.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'Plan',
+  data: function() {
+    return {
+      list: [],
+      searched: false,
+      filter: {
+        planName: '' //标准诊断名称
+      },
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      hospitalId: ''
+    };
+  },
+  created() {
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    // 非首页 编辑页返回 设置 this.currentPage
+    if (Object.keys(this.$route.params).length !== 0) {
+      this.currentPage = this.$route.params.currentPage;
+    }
+  },
+  watch: {
+    filter: {
+      handler: function() {
+        this.searched = false;
+      },
+      deep: true
+    }
+  },
+  beforeRouteEnter(to, from, next) {
+    next(vm => {
+      //const pm = to.param;
+      Object.assign(vm, to.params);
+      vm.inCurrentPage = to.params.currentPage;
+    });
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+
+    // 获取列表数据
+    async getDataList(isTurnPage) {
+      let params = await this.getFilterItems(isTurnPage);
+      this.searched = true;
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api.getPlanInfoPages(params).then(res => {
+        loading.close();
+        if (res.data.code === '0') {
+          this.list = res.data.data && res.data.data.records;
+        }
+        this.total = res.data.data && res.data.data.total;
+        if (this.inCurrentPage !== undefined) {
+          this.currentPage = this.inCurrentPage;
+          this.inCurrentPage = undefined;
+        }
+      });
+    },
+
+    // 处理列表请求数据参数
+    async getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      let res = await api.getHospitalInfo();
+      if (res.data.code === '0') {
+        this.hospitalId = res.data.data.id;
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        planName: this.filter.planName.trim(),
+        hospitalId: res.data.data.id
+      };
+      return param;
+    },
+
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList();
+    },
+    addRelation() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddPlan', params: pam });
+    },
+    // 修改诊断关联-跳转至编辑页面
+    modifyRelation(row) {
+      const item = Object.assign({}, row);
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({
+        name: 'AddPlan',
+        params: Object.assign(pam, { isEdit: true, data: item })
+      });
+    },
+    currentChange(next) {
+      this.currentPage = next;
+      this.getDataList(true);
+      // if (this.cacheData[next]) {       //如果已请求过该页数据,则使用缓存不重复请求
+      //     this.list = this.cacheData[next];
+      // } else {
+      //     this.getDataList();
+      // }
+    },
+    // 清空搜索参数
+    clearFilter() {
+      this.filter = {
+        hisName: '',
+        planName: ''
+      };
+    },
+
+    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, type) {
+      let showInfo = '启用';
+      let btnNameClass = 'confirmBtn2';
+      if (type === 'Del') {
+        showInfo = '禁用';
+        btnNameClass = 'delBtn';
+      } else if (type === 'Del1') {
+        showInfo = '删除';
+        btnNameClass = 'delBtn';
+      }
+
+      this.$confirm(msg, '提示', {
+        confirmButtonText: showInfo,
+        cancelButtonText: '取消',
+        cancelButtonClass: 'cancelBtn',
+        confirmButtonClass: btnNameClass,
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    // 获取医院信息
+    _getHospital() {
+      api.getHospitalInfo().then(res => {
+        if (res.data.code === '0') {
+          this.hospitalId = res.data.data.id;
+        }
+      });
+    },
+    // 删除关联
+    showDelDialog(id, status, info) {
+      if (status === 1) {
+        this.$confirm(`${info}正在启用中,无法删除。`, '提示', {
+          confirmButtonText: '确定',
+          // cancelButtonText: '取消',
+          cancelButtonClass: 'cancelSureL',
+          confirmButtonClass: 'sureL',
+          customClass: 'exportBoxL',
+          type: 'warning'
+        })
+          .then(() => {})
+          .catch(() => {});
+        return false;
+      }
+
+      this.showConfirmDialog(
+        '是否删除该方案配置?',
+        () => {
+          let params = {
+            planId: id,
+            hospitalId: this.hospitalId
+          };
+          api
+            .cancelPlanDatas(params)
+            .then(res => {
+              if (res.data.code == '0') {
+                if (!this.searched) {
+                  //未点确认时清空搜索条件
+                  this.clearFilter();
+                }
+                if (this.list.length == 1) {
+                  //当前在最后一页且只有一条数据时,删除后跳到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+                this.getDataList();
+                this.warning(res.data.msg || '操作成功', 'success');
+              } else {
+                this.warning(res.data.msg);
+              }
+            })
+            .catch(error => {
+              if (error.code === '900010001') {
+                return false;
+              }
+              this.warning(error);
+            });
+        },
+        'Del1'
+      );
+    },
+
+    // 启用/禁用 数据请求
+    sendAbleOrEn(row, type) {
+      api
+        .revStopPlans({
+          id: row.id,
+          status: type
+        })
+        .then(res => {
+          if (res.data.code === '0') {
+            this.$message({
+              showClose: true,
+              message: '操作成功',
+              type: 'success',
+              duration: 1000
+            });
+            this.getDataList();
+          }
+        })
+        .catch(err => {});
+    },
+
+    // 启用/禁用
+    enableOrAble(row, type) {
+      // console.log('启用planName', row, type);
+      if (type === 1) {
+        // 启用
+        this.showConfirmDialog(
+          `确定要启用${row.planName}吗?`,
+          () => {
+            this.sendAbleOrEn(row, type);
+          },
+          'Reuse'
+        );
+      } else {
+        // 禁用
+        this.showConfirmDialog(
+          `方案禁用后前端页面将无法正常显示内容,确定要禁用${row.planName}吗?`,
+          () => {
+            this.sendAbleOrEn(row, type);
+          },
+          'Del'
+        );
+      }
+    }
+  }
+};
+</script>
+
+
+<style lang="less" scoped>
+@import '../../../less/admin.less';
+.delete {
+  color: red;
+}
+.delete:hover {
+  color: red;
+}
+.pagination {
+  min-width: 1010px;
+}
+.disable {
+  border-color: transparent;
+}
+.el-message-box {
+  /deep/.cancelBtn {
+    background-color: #d7d7d7;
+    border-color: transparent;
+  }
+  /deep/ .delBtn {
+    background-color: #ff545b !important;
+    border-color: transparent !important;
+  }
+  /deep/ .confirmBtn2 {
+    position: relative;
+    right: 0px !important;
+  }
+}
+.exportBoxL {
+  /deep/ .el-message-box__btns {
+    margin-top: 20px;
+  }
+  /deep/ .el-message-box__message {
+    text-align: left;
+  }
+  /deep/ .el-message-box__btns {
+    // text-align: center;
+    margin-bottom: 24px;
+  }
+  /deep/ .leftbtn {
+    margin-right: 46px;
+    background-color: #d7d7d7;
+    border-color: transparent;
+  }
+  /deep/ .cancelSureL {
+    // text-align: center;
+    display: none;
+  }
+  /deep/ .sureL {
+    float: right;
+  }
+}
+.contents {
+  .is-plain {
+    color: #dad7d7;
+  }
+  .is-plain:hover {
+    color: #dad7d7;
+  }
+}
+
+.el-table__row {
+  /deep/ .is-disabled {
+    border-color: transparent !important;
+  }
+}
+</style>

+ 0 - 0
src/components/cdssManage/version/version.vue


+ 23 - 0
src/less/admin.less

@@ -182,4 +182,27 @@
 .el-message-box .el-message-box__content{
   max-height: 100px;
   overflow-y: auto;
+}
+
+body {
+  .el-select-dropdown {
+    /deep/ .el-select-dropdown__item {
+      span {
+        color: #333;
+      }
+    }
+    ul {
+      max-width: 300px;
+    }
+
+    /deep/ .el-scrollbar {
+      border: 1px solid #dcdfe6;
+    }
+    /deep/ .popper__arrow {
+      border-bottom-color: #a5a5a5 !important;
+    }
+  }
+  /deep/ .el-popper[x-placement^='bottom'] {
+    margin-top: 8px !important;
+  }
 }

+ 171 - 125
src/routes.js

@@ -148,6 +148,30 @@ import RecordItemList from '@components/recordInput/RecordItemList.vue';
 import AddRecordItem from '@components/recordInput/AddRecordItem.vue';
 import ManageItemBatch from '@components/recordInput/ManageItemBatch.vue';
 
+// cdss数据维护
+import MedicinePromptCDSS from '@components/cdssManage/MedicinePrompt.vue';   //医学术语静态知识
+import AddMedicinePromptCDSS from '@components/cdssManage/AddMedicinePrompt.vue';   //医学术语静态知识
+import MedicalTerm from '@components/cdssManage/MedicalTerm.vue';   //医学术语关联维护
+
+import Disease from '@components/cdssManage/disease/Disease.vue'; //诊断关联维护
+import AddDisease from '@components/cdssManage/disease/AddDisease.vue';  //诊断关联维护--添加关联
+import Lis from '@components/cdssManage/lis/Lis.vue'; //检验关联维护
+import AddLis from '@components/cdssManage/lis/AddLis.vue';  //检验关联维护--添加关联
+import Pacs from '@components/cdssManage/pacs/Pacs.vue'; //检查关联维护
+import AddPacs from '@components/cdssManage/pacs/AddPacs.vue';  //检查关联维护--添加关联
+import DrugManage from '@components/cdssManage/drug/DrugManage.vue'; //药品关联维护
+import AddDrug from '@components/cdssManage/drug/AddDrug.vue';  //药品关联维护--添加关联
+import Operation from '@components/cdssManage/operation/Operation.vue'; //手术/操作关联维护
+import AddOperation from '@components/cdssManage/operation/AddOperation.vue';  //手术/操作关联维护--添加关联
+import Fusion from '@components/cdssManage/fusion/Fusion.vue'; //输血关联维护
+import AddFusion from '@components/cdssManage/fusion/AddFusion.vue';  //输血关联维护--添加关联
+import DeptManage from '@components/cdssManage/dept/DeptManage.vue'; //科室关联维护
+import AddDept from '@components/cdssManage/dept/AddDept.vue';  //科室关联维护--添加关联
+// import Correlation from '@components/icss/correlation/Correlation.vue';  //关联维护设置
+// import Plan from '@components/icss/plan/Plan.vue';  //关联维护设置
+// import AddPlan from '@components/icss/plan/AddPlan.vue';  //关联维护设置
+
+
 export default [
   {
     path: '/',
@@ -172,17 +196,17 @@ export default [
     },
     children: [
       // {path: '/', component: Console},
-      {path: 'YH-KZT', component: Console},     //控制台
-      {path: 'YH-GDFW', component: MoreService},      //更多服务
-      {path: 'YH-JGZX', component: Information},//机构中心
-      {path: 'YH-JGZX-YKTCP', component: OpenedProduct}, //已开通产品
-      {path: 'TJFWD', component: AddServiceProduct}, //添加服务端
-      {path: 'YH-JGZX-GLFFD', component: ManageService}, //管理服务端
-      {path: 'YH-JGZX-YSCLP', component: AlreadyToken},//已生成令牌
-      {path: 'CKLPXQ', component: CreatedToken},//查看生成令牌
-      {path: 'YH-JGZX-AQSZ', component: UserSetting},//安全设置
-			{path: 'YH-JGZX-ZHXX', component: Information},//账号信息
-			
+      { path: 'YH-KZT', component: Console },     //控制台
+      { path: 'YH-GDFW', component: MoreService },      //更多服务
+      { path: 'YH-JGZX', component: Information },//机构中心
+      { path: 'YH-JGZX-YKTCP', component: OpenedProduct }, //已开通产品
+      { path: 'TJFWD', component: AddServiceProduct }, //添加服务端
+      { path: 'YH-JGZX-GLFFD', component: ManageService }, //管理服务端
+      { path: 'YH-JGZX-YSCLP', component: AlreadyToken },//已生成令牌
+      { path: 'CKLPXQ', component: CreatedToken },//查看生成令牌
+      { path: 'YH-JGZX-AQSZ', component: UserSetting },//安全设置
+      { path: 'YH-JGZX-ZHXX', component: Information },//账号信息
+
     ]
   },
 
@@ -194,8 +218,8 @@ export default [
     },
     children: [
       // {path: '/', component: AdminConsole},
-      {path: 'LT-KZT', component: AdminConsole},
-      {path: 'LT-JGZX', component: AdminConsole},
+      { path: 'LT-KZT', component: AdminConsole },
+      { path: 'LT-JGZX', component: AdminConsole },
       {
         path: 'LT-KHZX-ZCYH',
         component: RegisterAdmin
@@ -204,14 +228,14 @@ export default [
         path: 'LT-YRZCGXX',
         component: AuthedAdmin
       },
-    	{
-    	  name:'organizationInfo',
-    	  path: 'LT-KHZX-JGXX',//机构信息
+      {
+        name: 'organizationInfo',
+        path: 'LT-KHZX-JGXX',//机构信息
         component: OrganizationInfo,
-        meta:{
-          keepAlive:true
+        meta: {
+          keepAlive: true
         }
-    	},
+      },
       {
         path: 'LT-KHZX-TJJG',//添加机构
         component: AddOrganization
@@ -221,14 +245,14 @@ export default [
         component: ModifinedOrga
       },
       {
-        name:'superAdmin',
+        name: 'superAdmin',
         path: 'LT-KHZX-CGXX',
         component: SuperAdmin
       },
       {
         path: 'LT-DDXT-TJCG',
         component: AddAdmin,
-        name:'addAdmin'
+        name: 'addAdmin'
       },
       {
         path: 'LT-DDXT-CPXSQLB',
@@ -237,118 +261,140 @@ export default [
       {
         path: 'LT-CPXGL-CPXXQ',
         component: ProductDetail,
-        name:'productDetail'
+        name: 'productDetail'
       },
-			{
-				path: 'LT-CPXFLB',
-				component: Renew
-			},
-      {path: 'LT-GRZX', component: PersonCenter},
-      {path: 'LT-CPXGL', component: ProductLinesManage},
-      {path: 'LT-CPXGL-TJCPX', component: AddProductLine,name:'editProductLine'},
-      {path: 'LT-GRZX/CHANGE',component: ChangePwd}, //个人中心--修改密码
-      {path: 'LT-YXSJWH-BQZWH',component: LabelGroup,name:'labelGroup'}, //医学数据维护--标签组维护
-      {path:'LT-YXSJWH-TJBQZ',component:NoiseTemplate,name:'AddLabelGroup'},     //医学数据维护--标签组维护--添加标签组
-      {path:'LT-YXSJWH-KSWH',component:DeptInfo,name:'deptInfo'},     //医学数据维护--科室维护
-      {path:'LT-YXSJWH-KSXQ',component:DeptInfoDetail,name:'DeptInfoDetail'},     //科室维护--详情
-      {path:'LT-YXSJWH-TJKS',component:AddDeptInfo,name:'AddDeptInfo'},     //科室维护--添加
-      {path:'LT-YXSJWH-DLLXBQWH',component:IndeptLabel,name:'IndeptLabel'},     //独立标签维护--详情
-      {path:'LT-YXSJWH-TJDLBQ',component:AddIndeptLabel,name:'AddIndeptLabel'},     //独立标签维护--添加
-      {path:'LT-YXSJWH-TSXXWH',component:PromptInfo,name:'PromptInfo'},         //提示信息维护
-	    {path:'LT-YXSJWH-BMWH',component:SimilarName,name:'SimilarName'},     //别名维护
-      {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-CPXFLB',
+        component: Renew
+      },
+      { path: 'LT-GRZX', component: PersonCenter },
+      { path: 'LT-CPXGL', component: ProductLinesManage },
+      { path: 'LT-CPXGL-TJCPX', component: AddProductLine, name: 'editProductLine' },
+      { path: 'LT-GRZX/CHANGE', component: ChangePwd }, //个人中心--修改密码
+      { path: 'LT-YXSJWH-BQZWH', component: LabelGroup, name: 'labelGroup' }, //医学数据维护--标签组维护
+      { path: 'LT-YXSJWH-TJBQZ', component: NoiseTemplate, name: 'AddLabelGroup' },     //医学数据维护--标签组维护--添加标签组
+      { path: 'LT-YXSJWH-KSWH', component: DeptInfo, name: 'deptInfo' },     //医学数据维护--科室维护
+      { path: 'LT-YXSJWH-KSXQ', component: DeptInfoDetail, name: 'DeptInfoDetail' },     //科室维护--详情
+      { path: 'LT-YXSJWH-TJKS', component: AddDeptInfo, name: 'AddDeptInfo' },     //科室维护--添加
+      { path: 'LT-YXSJWH-DLLXBQWH', component: IndeptLabel, name: 'IndeptLabel' },     //独立标签维护--详情
+      { path: 'LT-YXSJWH-TJDLBQ', component: AddIndeptLabel, name: 'AddIndeptLabel' },     //独立标签维护--添加
+      { path: 'LT-YXSJWH-TSXXWH', component: PromptInfo, name: 'PromptInfo' },         //提示信息维护
+      { path: 'LT-YXSJWH-BMWH', component: SimilarName, name: 'SimilarName' },     //别名维护
+      { 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-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'},     //模板维护
-      {path:'LT-YXSJWH-CTMBWH',component:PhysicalExamTemplate,name:'PhysicalExamTemplate'},     //查体模板维护
-      {path:'LT-YXSJWH-TJCTMB',component:AddPhysicalExamTemp,name:'AddPhysicalExamTemp'},     //查体模板维护--添加
-      {path:'LT-YXSJWH-TJMBWH',component:TemplateMaintenanceWrap,name:'TemplateMaintenanceWrap'},     //模板维护-添加修改
-      {path:'LT-YXSJWH-TJTSXX',component:AddPromptInfo,name:'AddPromptInfo'},         //提示信息维护-添加
-      {path:'LT-YXSJWH-TSXXXQ',component:PromptDetail,name:'PromptDetail'},         //提示信息维护详情
-      {path:'LT-YXSYKWH-YXSYJTZSWH',component:MedicinePrompt,name:'MedicinePrompt'},         //医学术语提示信息维护
-      {path:'LT-YXSYKWH-TJYXSYJTZS',component:AddMedicinePrompt,name:'AddMedicinePrompt'},         //医学术语提示信息维护添加
-	    {path:'LT-GBBXXWH-BBXXWH',component:VersionInfo,name:'VersionInfo'},     //版本信息
-      {path:'LT-YXSJWH-BBXXXQ',component:VersionDetail,name:'VersionDetail'},     //版本信息-详情
-      {path:'LT-YXSJWH-TJBBXX',component:AddVersion,name:'AddVersion'},     //版本信息-添加/修改
-      {path:'LT-YXSYKWH-YXSYMMWH',component:MedicalName,name:'MedicalName'},     //医学术语--命名维护
-      {path:'LT-YXSYKWH-TJYXSY',component:AddMedicalName,name:'AddMedicalName'},     //医学术语--命名维护
-      {path:'LT-YXSYKWH-YXSYGXWH',component:MedicalRelation,name:'MedicalRelation'},     //医学术语--关系维护
-      {path:'LT-YXSYKWH-TJYXSYGX',component:AddMedicalRelation,name:'AddMedicalRelation'},     //医学术语--关系维护-添加
-      {path:'LT-YXSYKWH-SYYXSXWH',component:MedicalInfo,name:'MedicalInfo'},  //医学术语维护-信息维护(属性维护)
-      {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-YXSYKWH-LBJGWH',component:ChronicDiseaseStructureList,name:'ChronicDiseaseStructureList'},  //量表结构维护 -- 列表
-      {path:'LT-YXSJWH-LBJGTJ',component:ChronicDiseaseAdd,name:'ChronicDiseaseAdd'},  //量表结构维护 -- 添加
-      {path:'LT-YXSJWH-MBGLYPG',component:ChronicDiseaseManage,name:'ChronicDiseaseManage'},  //慢病管理评估维护 -- 列表
-      {path:'LT-YXSJWH-MBGLYTJ',component:ChronicDiseaseManageAdd,name:'ChronicDiseaseManageAdd'},  //慢病管理评估维护 -- 添加
-      {path:'LT-YXSJWH-HYDXXYGBXDY',component:ChemicalAndCommonMapping,name:'ChemicalAndCommonMapping'},  //化验大小项与公表维护
-      {path:'LT-YXSJWH-TJHYDXXYGBXDY',component:AddChemicalAndCommonMapping,name:'AddChemicalAndCommonMapping'},  //化验大小项与公表维护--添加关联
-      {path:'LT-YXSYKWH-YXSYLXWH',component:MedicalType,name:'MedicalType'},     //医学术语--类型维护
-      {path:'LT-YXSYKWH-MBZBZGLWH',component:ChronicAndIndexRelation,name:'ChronicAndIndexRelation'},     //医学数据--慢病指标值关联维护
-      {path:'LT-YXSYKWH-TJMBZBZGL',component:AddChronicAndIndexRelation,name:'AddChronicAndIndexRelation'},     //医学数据--添加慢病指标值关联维护
-      {path:'LT-YXSJWH-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-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' },     //模板维护
+      { path: 'LT-YXSJWH-CTMBWH', component: PhysicalExamTemplate, name: 'PhysicalExamTemplate' },     //查体模板维护
+      { path: 'LT-YXSJWH-TJCTMB', component: AddPhysicalExamTemp, name: 'AddPhysicalExamTemp' },     //查体模板维护--添加
+      { path: 'LT-YXSJWH-TJMBWH', component: TemplateMaintenanceWrap, name: 'TemplateMaintenanceWrap' },     //模板维护-添加修改
+      { path: 'LT-YXSJWH-TJTSXX', component: AddPromptInfo, name: 'AddPromptInfo' },         //提示信息维护-添加
+      { path: 'LT-YXSJWH-TSXXXQ', component: PromptDetail, name: 'PromptDetail' },         //提示信息维护详情
+      { path: 'LT-YXSYKWH-YXSYJTZSWH', component: MedicinePrompt, name: 'MedicinePrompt' },         //医学术语提示信息维护
+      { path: 'LT-YXSYKWH-TJYXSYJTZS', component: AddMedicinePrompt, name: 'AddMedicinePrompt' },         //医学术语提示信息维护添加
+      { path: 'LT-GBBXXWH-BBXXWH', component: VersionInfo, name: 'VersionInfo' },     //版本信息
+      { path: 'LT-YXSJWH-BBXXXQ', component: VersionDetail, name: 'VersionDetail' },     //版本信息-详情
+      { path: 'LT-YXSJWH-TJBBXX', component: AddVersion, name: 'AddVersion' },     //版本信息-添加/修改
+      { path: 'LT-YXSYKWH-YXSYMMWH', component: MedicalName, name: 'MedicalName' },     //医学术语--命名维护
+      { path: 'LT-YXSYKWH-TJYXSY', component: AddMedicalName, name: 'AddMedicalName' },     //医学术语--命名维护
+      { path: 'LT-YXSYKWH-YXSYGXWH', component: MedicalRelation, name: 'MedicalRelation' },     //医学术语--关系维护
+      { path: 'LT-YXSYKWH-TJYXSYGX', component: AddMedicalRelation, name: 'AddMedicalRelation' },     //医学术语--关系维护-添加
+      { path: 'LT-YXSYKWH-SYYXSXWH', component: MedicalInfo, name: 'MedicalInfo' },  //医学术语维护-信息维护(属性维护)
+      { 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-YXSYKWH-LBJGWH', component: ChronicDiseaseStructureList, name: 'ChronicDiseaseStructureList' },  //量表结构维护 -- 列表
+      { path: 'LT-YXSJWH-LBJGTJ', component: ChronicDiseaseAdd, name: 'ChronicDiseaseAdd' },  //量表结构维护 -- 添加
+      { path: 'LT-YXSJWH-MBGLYPG', component: ChronicDiseaseManage, name: 'ChronicDiseaseManage' },  //慢病管理评估维护 -- 列表
+      { path: 'LT-YXSJWH-MBGLYTJ', component: ChronicDiseaseManageAdd, name: 'ChronicDiseaseManageAdd' },  //慢病管理评估维护 -- 添加
+      { path: 'LT-YXSJWH-HYDXXYGBXDY', component: ChemicalAndCommonMapping, name: 'ChemicalAndCommonMapping' },  //化验大小项与公表维护
+      { path: 'LT-YXSJWH-TJHYDXXYGBXDY', component: AddChemicalAndCommonMapping, name: 'AddChemicalAndCommonMapping' },  //化验大小项与公表维护--添加关联
+      { path: 'LT-YXSYKWH-YXSYLXWH', component: MedicalType, name: 'MedicalType' },     //医学术语--类型维护
+      { path: 'LT-YXSYKWH-MBZBZGLWH', component: ChronicAndIndexRelation, name: 'ChronicAndIndexRelation' },     //医学数据--慢病指标值关联维护
+      { path: 'LT-YXSYKWH-TJMBZBZGL', component: AddChronicAndIndexRelation, name: 'AddChronicAndIndexRelation' },     //医学数据--添加慢病指标值关联维护
+      { path: 'LT-YXSJWH-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-TJYXSYGL', component: AddConceptRelation, name: 'AddConceptRelation' },     //医学数据--医学术语关联维护-添加修改   
+
+      { path: 'LT-YXSYKWH-YXSYDCGLWH', component: MedicalMultRelation, name: 'MedicalMultRelation' },   //医学术语--医学术语多层关联维护
+      { path: 'LT-YXSYKWH-TJYXSYDCGL', component: AddMedicalMultRelation, name: 'AddMedicalMultRelation' },   //医学术语--添加医学术语多层关联
+      { path: 'LT-YXSYKWH-FJCJGLWH', component: AssistCheckMultRelation, name: 'AssistCheckMultRelation' },   //医学术语--辅检层级关联维护
+      { path: 'LT-YXSYKWH-TJFJCJGL', component: AddAssistCheckMultRelation, name: 'AddAssistCheckMultRelation' },   //医学术语--添加辅检层级关联
+      { path: 'LT-YXSYKWH-FJZXWH', component: AssistCheckSon, name: 'AssistCheckSon' },   //医学术语--辅检子项维护
+      { path: 'LT-YXSYKWH-TJFJZX', component: AddAssistCheckSon, name: 'AddAssistCheckSon' },   //医学术语--辅检子项维护
+
+
+      { path: 'LT-YWZSJWH-DLTXDWH', component: SimpleQuestion, name: 'SimpleQuestion' },  //预问诊-独立填写单
+      { path: 'LT-YWZSJWH-ZHTXDWH', component: CombinQuestion, name: 'CombinQuestion' },  //预问诊-组合填写单
+      { path: 'LT-YWZSJWH-TJDLTXD', component: AddSimpleQuestion, name: 'AddSimpleQuestion' },  //预问诊-添加独立填写单
+      { path: 'LT-YWZSJWH-TJZHTXD', component: AddCombinQuestion, name: 'AddCombinQuestion' },  //预问诊-添加组合填写单
+      { path: 'LT-YWZSJWH-MBWH', component: QuestionModules, name: 'QuestionModules' },  //预问诊-模板维护
+      { path: 'LT-YWZSJWH-TJMBWH', component: AddQuestionModules, name: 'AddQuestionModules' },  //预问诊-添加模板
 
-      {path:'LT-YXSYKWH-YXSYDCGLWH',component:MedicalMultRelation,name:'MedicalMultRelation'},   //医学术语--医学术语多层关联维护
-      {path:'LT-YXSYKWH-TJYXSYDCGL',component:AddMedicalMultRelation,name:'AddMedicalMultRelation'},   //医学术语--添加医学术语多层关联
-      {path:'LT-YXSYKWH-FJCJGLWH',component:AssistCheckMultRelation,name:'AssistCheckMultRelation'},   //医学术语--辅检层级关联维护
-      {path:'LT-YXSYKWH-TJFJCJGL',component:AddAssistCheckMultRelation,name:'AddAssistCheckMultRelation'},   //医学术语--添加辅检层级关联
-      {path:'LT-YXSYKWH-FJZXWH',component:AssistCheckSon,name:'AssistCheckSon'},   //医学术语--辅检子项维护
-      {path:'LT-YXSYKWH-TJFJZX',component:AddAssistCheckSon,name:'AddAssistCheckSon'},   //医学术语--辅检子项维护
-       
+      { path: 'LT-ZDYJWH-ZDYJSJWH', component: DiagBase, name: 'DiagBase' },  //诊断依据-诊断依据维护
+      { path: 'LT-ZDYJWH-TJZDYJSJ', component: AddDiagBase, name: 'AddDiagBase' },  //诊断依据-添加诊断依据
+      { path: 'LT-ZDYJWH-WTCSJWH', component: QuestionWords, name: 'QuestionWords' },  //问题列表
+      { path: 'LT-SJTJ-YXSJTJ', component: MedicalStatistics, name: 'MedicalStatistics' },  //问题列表
+      { path: 'LT-AQGL-LICENSEWH', component: TokenControl, name: 'TokenControl' },  //安全管理--令牌列表
+      { path: 'LT-AQGL-TJLICENSE', component: AddToken, name: 'AddToken' },  //安全管理--发放令牌
+      { path: 'LT-YXSYKWH-GZWH', component: RulesManager, name: 'RulesManager' },//规则管理
+      { path: 'LT-YXSYKWH-TJGZWH', component: AddRule, name: 'AddRule' },//规则添加
+      { path: 'LT-YXSYKWH-GZYYWH', component: RuleApply, name: 'RuleApply' },//规则管理
+      { path: 'LT-YXSYKWH-TJGZYYWH', component: AddRuleApply, name: 'AddRuleApply' },//规则添加
+      { path: 'LT-BLGL', name: 'RecordManager', component: RecordManager },//病历管理
+      { path: 'LT-BLGL-TJBLGL', name: 'AddRecord', component: AddRecord },//添加病历
+      { path: 'LT-BLGL-CKBLGL', name: 'ShowRecord', component: ShowRecord },//添加病历
+      { path: 'LT-ZKYMSJWH-ZDYSWH', name: 'BaseField', component: BaseField },  //字段映射
+      { path: 'LT-ZKYMSJWH-TJZDYSWH', name: 'FieldMatch', component: FieldMatch },  //添加字段映射
+      { path: 'LT-ZKYMSJWH-ZHDYWH', name: 'CombineFeild', component: CombineFeild },  //组合字段
+      { path: 'LT-ZKYMSJWH-TJZHDYWH', name: 'AddCombineFeild', component: AddCombineFeild },  //添加组合字段
+      { path: 'LT-ZKYMSJWH-MBWH', name: 'QualityControlTemp', component: QualityControlTemp },  //模板维护
+      { path: 'LT-ZKYMSJWH-TMGLZKLX', name: 'ItemDataType', component: ItemDataType },  //条目关联质控类型
+      { path: 'LT-ZKYMSJWH-TMGLZKLXGL', name: 'ItemDataTypeRelation', component: ItemDataTypeRelation },  //条目关联质控类型--关联
 
-      {path:'LT-YWZSJWH-DLTXDWH',component:SimpleQuestion,name:'SimpleQuestion'},  //预问诊-独立填写单
-      {path:'LT-YWZSJWH-ZHTXDWH',component:CombinQuestion,name:'CombinQuestion'},  //预问诊-组合填写单
-      {path:'LT-YWZSJWH-TJDLTXD',component:AddSimpleQuestion,name:'AddSimpleQuestion'},  //预问诊-添加独立填写单
-      {path:'LT-YWZSJWH-TJZHTXD',component:AddCombinQuestion,name:'AddCombinQuestion'},  //预问诊-添加组合填写单
-      {path:'LT-YWZSJWH-MBWH',component:QuestionModules,name:'QuestionModules'},  //预问诊-模板维护
-      {path:'LT-YWZSJWH-TJMBWH',component:AddQuestionModules,name:'AddQuestionModules'},  //预问诊-添加模板
+      { path: 'LT-ZKYMSJWH-TJMBWH', name: 'AddQualityControlTemp', component: AddQualityControlTemp },  //添加模板维护
+      { path: 'LT-BLZK-BLRl', name: 'RecordInput', component: RecordInput },//病例录入
+      { path: 'LT-BLZK-TJBLRl', name: 'AddRecordInput', component: AddRecordInput },//病例录入
+      { path: 'LT-ZKYMSJWH-ZKTM', name: 'RecordItemList', component: RecordItemList },//病例条目
+      { path: 'LT-BLZK-TJBLTM', name: 'AddRecordItem', component: AddRecordItem },//病例条目
+      { path: 'LT-BLZK-PLGLBLTM', name: 'ManageItemBatch', component: ManageItemBatch },//病例条目
+      { path: 'LT-ZKYMSJWH-ZKLXWH', name: 'QCTypeMang', component: QCTypeMang },  //质控类型
+      { path: 'LT-ZKYMSJWH-TJZKLXWH', name: 'AddQcType', component: AddQcType },  //添加质控类型
+      { path: 'LT-ZKYMSJWH-ZDHCSTJ', name: 'AutoTestList', component: AutoTestList },//自动化测试统计
+      { path: 'LT-ZKYMSJWH-RWLB', name: 'AutoTestTask', component: AutoTestTask },//自动化测试统计-转为任务
+      { path: 'LT-ZKYMSJWH-ZDHCSXQ', name: 'TaskDetail', component: TaskDetail },//自动化测试统计-转为任务-详情
+      { path: 'LT-ZKYMSJWH-BZBL', name: 'StandardRecord', component: StandardRecord },  //标准病历
+      { path: 'LT-ZKYMSJWH-TJBZBL', name: 'AddStandardRecord', component: AddStandardRecord },  //添加标准病历
 
-      {path:'LT-ZDYJWH-ZDYJSJWH',component:DiagBase,name:'DiagBase'},  //诊断依据-诊断依据维护
-      {path:'LT-ZDYJWH-TJZDYJSJ',component:AddDiagBase,name:'AddDiagBase'},  //诊断依据-添加诊断依据
-      {path:'LT-ZDYJWH-WTCSJWH',component:QuestionWords,name:'QuestionWords'},  //问题列表
-      {path:'LT-SJTJ-YXSJTJ',component:MedicalStatistics,name:'MedicalStatistics'},  //问题列表
-      {path:'LT-AQGL-LICENSEWH',component:TokenControl,name:'TokenControl'},  //安全管理--令牌列表
-      {path:'LT-AQGL-TJLICENSE',component:AddToken,name:'AddToken'},  //安全管理--发放令牌
-      {path:'LT-YXSYKWH-GZWH',component:RulesManager,name:'RulesManager'},//规则管理
-      {path:'LT-YXSYKWH-TJGZWH',component:AddRule,name:'AddRule'},//规则添加
-      {path:'LT-YXSYKWH-GZYYWH',component:RuleApply,name:'RuleApply'},//规则管理
-      {path:'LT-YXSYKWH-TJGZYYWH',component:AddRuleApply,name:'AddRuleApply'},//规则添加
-      {path: 'LT-BLGL',name:'RecordManager', component: RecordManager},//病历管理
-      {path: 'LT-BLGL-TJBLGL',name:'AddRecord', component: AddRecord},//添加病历
-      {path: 'LT-BLGL-CKBLGL',name:'ShowRecord', component: ShowRecord},//添加病历
-      {path:'LT-ZKYMSJWH-ZDYSWH',name:'BaseField',component: BaseField},  //字段映射
-      {path:'LT-ZKYMSJWH-TJZDYSWH',name:'FieldMatch',component: FieldMatch},  //添加字段映射
-      {path:'LT-ZKYMSJWH-ZHDYWH',name:'CombineFeild',component: CombineFeild},  //组合字段
-      {path:'LT-ZKYMSJWH-TJZHDYWH',name:'AddCombineFeild',component: AddCombineFeild},  //添加组合字段
-      {path:'LT-ZKYMSJWH-MBWH',name:'QualityControlTemp',component: QualityControlTemp},  //模板维护
-      {path:'LT-ZKYMSJWH-TMGLZKLX',name:'ItemDataType',component: ItemDataType},  //条目关联质控类型
-      {path:'LT-ZKYMSJWH-TMGLZKLXGL',name:'ItemDataTypeRelation',component: ItemDataTypeRelation},  //条目关联质控类型--关联
 
-      {path:'LT-ZKYMSJWH-TJMBWH',name:'AddQualityControlTemp',component: AddQualityControlTemp},  //添加模板维护
-      {path: 'LT-BLZK-BLRl',name:'RecordInput', component: RecordInput},//病例录入
-      {path: 'LT-BLZK-TJBLRl',name:'AddRecordInput', component: AddRecordInput},//病例录入
-      {path: 'LT-ZKYMSJWH-ZKTM',name:'RecordItemList', component: RecordItemList},//病例条目
-      {path: 'LT-BLZK-TJBLTM',name:'AddRecordItem', component: AddRecordItem},//病例条目
-      {path: 'LT-BLZK-PLGLBLTM',name:'ManageItemBatch', component: ManageItemBatch},//病例条目
-      {path:'LT-ZKYMSJWH-ZKLXWH',name:'QCTypeMang',component: QCTypeMang},  //质控类型
-      {path:'LT-ZKYMSJWH-TJZKLXWH',name:'AddQcType',component: AddQcType},  //添加质控类型
-      {path:'LT-ZKYMSJWH-ZDHCSTJ',name:'AutoTestList',component:AutoTestList},//自动化测试统计
-      {path:'LT-ZKYMSJWH-RWLB',name:'AutoTestTask',component:AutoTestTask},//自动化测试统计-转为任务
-      {path:'LT-ZKYMSJWH-ZDHCSXQ',name:'TaskDetail',component:TaskDetail},//自动化测试统计-转为任务-详情
-      {path:'LT-ZKYMSJWH-BZBL',name:'StandardRecord',component: StandardRecord},  //标准病历
-      {path:'LT-ZKYMSJWH-TJBZBL',name:'AddStandardRecord',component: AddStandardRecord},  //添加标准病历
 
+      { path: 'LT-CDSSSJWH-JTSYZSWH', component: MedicinePromptCDSS, name: 'MedicinePromptCDSS' }, //医学术语关联维护
+      { path: 'LT-YXSYKWH-TJYXSYJTZSCDSS', component: AddMedicinePromptCDSS, name: 'AddMedicinePromptCDSS' }, //医学术语提示信息维护添加
+      { path: 'LT-CDSSSJWH-YXSYGLWH', component: MedicalTerm, name: 'MedicalTermCDSS' }, //医学术语关联维护
+      { path: 'YXSYK-ZDGLWH', component: Disease, name: 'Disease', }, //诊断关联维护
+      { path: 'LT-ZDGLWH-TJHYDXXYGBXDY', component: AddDisease, name: 'AddDisease', }, //诊断关联维护--添加关联
+      { path: 'YXSYK-JYGLWH', component: Lis, name: 'Lis' }, //检验关联维护
+      { path: 'LT-JYGLWH-TJHYDXXYGBXDY', component: AddLis, name: 'AddLis' }, //检验关联维护--添加关联
+      { path: 'YXSYK-JCGLWH', component: Pacs, name: 'Pacs' }, //检查关联维护
+      { path: 'LT-JCGLWH-TJHYDXXYGBXDY', component: AddPacs, name: 'AddPacs' }, //检查关联维护--添加关联
+      { path: 'YXSYK-YPGLWH', component: DrugManage, name: 'DrugManage' }, //药品关联维护
+      { path: 'LT-YPGLWH-TJHYDXXYGBXDY', component: AddDrug, name: 'AddDrug' }, //药品关联维护--添加关联
+      { path: 'YXSYK-SSCZGLWH', component: Operation, name: 'Operation' }, //手术/操作关联维护
+      { path: 'LT-SSCZGLWH-TJHYDXXYGBXDY', component: AddOperation, name: 'AddOperation' }, //手术/操作关联维护--添加关联
+      { path: 'YXSYK-SXGLWH', component: Fusion, name: 'Fusion' }, //输血关联维护
+      { path: 'LT-SXGLWH-TJHYDXXYGBXDY', component: AddFusion, name: 'AddFusion' }, //输血关联维护--添加关联
+      { path: 'YXSYK-KSGLWH', component: DeptManage, name: 'DeptManage' }, //科室关联维护
+      { path: 'LT-KSGLWH-TJHYDXXYGBXDY', component: AddDept, name: 'AddDept' }, //科室关联维护--添加关联
+      // { path: 'YXSYK-GLWH', component: Correlation, name: 'Correlation' }, //关联维护设置
+      // { path: 'XTPZ-DZBLFAPZ', component: Plan, name: 'Plan' }, //电子病历方案配置
+      // { path: 'LT-DZBLFAPZ-EDIT', component: AddPlan, name: 'AddPlan' }, //电子病历方案配置--新增编辑
     ]
   }
 ]