Browse Source

Merge branch 'dragTerm1025-zsw'

# Conflicts:
#	src/components/icss/drug/DrugManage.vue
#	src/components/icss/hemp/Hemp.vue
#	src/components/knowledgeExtra/AddNewRuleTable.vue
#	src/components/knowledgeExtra/RuleManager.vue
1178232204@qq.com 3 years ago
parent
commit
4b4d56f4ed
100 changed files with 42178 additions and 0 deletions
  1. 1 0
      .gitignore
  2. 235 0
      .history/src/api/config_20211025110249.js
  3. 235 0
      .history/src/api/config_20211101093600.js
  4. 248 0
      .history/src/api/config_20211101093607.js
  5. 249 0
      .history/src/api/config_20211101094152.js
  6. 28 0
      .history/src/api/index_20211025110249.js
  7. 28 0
      .history/src/api/index_20211027164529.js
  8. 36 0
      .history/src/api/knowledgeLib_20211025110249.js
  9. 39 0
      .history/src/api/knowledgeLib_20211101094145.js
  10. 0 0
      .history/src/assets/css/common_20211101132102.css
  11. 3 0
      .history/src/assets/css/common_20211101132123.css
  12. 14 0
      .history/src/assets/css/common_20211101132228.css
  13. 0 0
      .history/src/components/aa_20211029112559.vue
  14. 482 0
      .history/src/components/aa_20211029112609.vue
  15. 15 0
      .history/src/components/callRecord/CallRecordManager_20211029101238.vue
  16. 481 0
      .history/src/components/callRecord/CallRecordManager_20211029101454.vue
  17. 481 0
      .history/src/components/callRecord/CallRecordManager_20211029101521.vue
  18. 481 0
      .history/src/components/callRecord/CallRecordManager_20211029102816.vue
  19. 481 0
      .history/src/components/callRecord/CallRecordManager_20211029102847.vue
  20. 481 0
      .history/src/components/callRecord/CallRecordManager_20211029102922.vue
  21. 481 0
      .history/src/components/callRecord/CallRecordManager_20211029103032.vue
  22. 481 0
      .history/src/components/callRecord/CallRecordManager_20211029103226.vue
  23. 475 0
      .history/src/components/callRecord/CallRecordManager_20211029103353.vue
  24. 475 0
      .history/src/components/callRecord/CallRecordManager_20211029103436.vue
  25. 475 0
      .history/src/components/callRecord/CallRecordManager_20211029103448.vue
  26. 475 0
      .history/src/components/callRecord/CallRecordManager_20211029103536.vue
  27. 475 0
      .history/src/components/callRecord/CallRecordManager_20211029103623.vue
  28. 475 0
      .history/src/components/callRecord/CallRecordManager_20211029103635.vue
  29. 475 0
      .history/src/components/callRecord/CallRecordManager_20211029103651.vue
  30. 475 0
      .history/src/components/callRecord/CallRecordManager_20211029103704.vue
  31. 459 0
      .history/src/components/callRecord/CallRecordManager_20211029103725.vue
  32. 459 0
      .history/src/components/callRecord/CallRecordManager_20211029103734.vue
  33. 459 0
      .history/src/components/callRecord/CallRecordManager_20211029103753.vue
  34. 459 0
      .history/src/components/callRecord/CallRecordManager_20211029103824.vue
  35. 460 0
      .history/src/components/callRecord/CallRecordManager_20211029104225.vue
  36. 460 0
      .history/src/components/callRecord/CallRecordManager_20211029104253.vue
  37. 464 0
      .history/src/components/callRecord/CallRecordManager_20211029104339.vue
  38. 464 0
      .history/src/components/callRecord/CallRecordManager_20211029104414.vue
  39. 464 0
      .history/src/components/callRecord/CallRecordManager_20211029104428.vue
  40. 464 0
      .history/src/components/callRecord/CallRecordManager_20211029104504.vue
  41. 464 0
      .history/src/components/callRecord/CallRecordManager_20211029104623.vue
  42. 467 0
      .history/src/components/callRecord/CallRecordManager_20211029104745.vue
  43. 469 0
      .history/src/components/callRecord/CallRecordManager_20211029105018.vue
  44. 469 0
      .history/src/components/callRecord/CallRecordManager_20211029105045.vue
  45. 469 0
      .history/src/components/callRecord/CallRecordManager_20211029105105.vue
  46. 472 0
      .history/src/components/callRecord/CallRecordManager_20211029105209.vue
  47. 475 0
      .history/src/components/callRecord/CallRecordManager_20211029105359.vue
  48. 475 0
      .history/src/components/callRecord/CallRecordManager_20211029105428.vue
  49. 475 0
      .history/src/components/callRecord/CallRecordManager_20211029105622.vue
  50. 486 0
      .history/src/components/callRecord/CallRecordManager_20211029105923.vue
  51. 487 0
      .history/src/components/callRecord/CallRecordManager_20211029110047.vue
  52. 481 0
      .history/src/components/callRecord/CallRecordManager_20211029110406.vue
  53. 482 0
      .history/src/components/callRecord/CallRecordManager_20211029110427.vue
  54. 482 0
      .history/src/components/callRecord/CallRecordManager_20211029110434.vue
  55. 482 0
      .history/src/components/callRecord/CallRecordManager_20211029110512.vue
  56. 490 0
      .history/src/components/callRecord/CallRecordManager_20211029110531.vue
  57. 500 0
      .history/src/components/callRecord/CallRecordManager_20211029110858.vue
  58. 500 0
      .history/src/components/callRecord/CallRecordManager_20211029110955.vue
  59. 501 0
      .history/src/components/callRecord/CallRecordManager_20211029111200.vue
  60. 500 0
      .history/src/components/callRecord/CallRecordManager_20211029111214.vue
  61. 497 0
      .history/src/components/callRecord/CallRecordManager_20211029111331.vue
  62. 495 0
      .history/src/components/callRecord/CallRecordManager_20211029111416.vue
  63. 497 0
      .history/src/components/callRecord/CallRecordManager_20211029111433.vue
  64. 497 0
      .history/src/components/callRecord/CallRecordManager_20211029111438.vue
  65. 497 0
      .history/src/components/callRecord/CallRecordManager_20211029111536.vue
  66. 496 0
      .history/src/components/callRecord/CallRecordManager_20211029111613.vue
  67. 496 0
      .history/src/components/callRecord/CallRecordManager_20211029111639.vue
  68. 496 0
      .history/src/components/callRecord/CallRecordManager_20211029111712.vue
  69. 496 0
      .history/src/components/callRecord/CallRecordManager_20211029111749.vue
  70. 496 0
      .history/src/components/callRecord/CallRecordManager_20211029111815.vue
  71. 496 0
      .history/src/components/callRecord/CallRecordManager_20211029111826.vue
  72. 496 0
      .history/src/components/callRecord/CallRecordManager_20211029112024.vue
  73. 496 0
      .history/src/components/callRecord/CallRecordManager_20211029112116.vue
  74. 513 0
      .history/src/components/callRecord/CallRecordManager_20211029112200.vue
  75. 514 0
      .history/src/components/callRecord/CallRecordManager_20211029112229.vue
  76. 503 0
      .history/src/components/callRecord/CallRecordManager_20211029112245.vue
  77. 503 0
      .history/src/components/callRecord/CallRecordManager_20211029112306.vue
  78. 503 0
      .history/src/components/callRecord/CallRecordManager_20211029112353.vue
  79. 489 0
      .history/src/components/callRecord/CallRecordManager_20211029112506.vue
  80. 482 0
      .history/src/components/callRecord/CallRecordManager_20211029112527.vue
  81. 481 0
      .history/src/components/callRecord/CallRecordManager_20211029112643.vue
  82. 464 0
      .history/src/components/callRecord/CallRecordManager_20211029112736.vue
  83. 464 0
      .history/src/components/callRecord/CallRecordManager_20211029112823.vue
  84. 467 0
      .history/src/components/callRecord/CallRecordManager_20211029112838.vue
  85. 485 0
      .history/src/components/callRecord/CallRecordManager_20211029112910.vue
  86. 493 0
      .history/src/components/callRecord/CallRecordManager_20211029112951.vue
  87. 482 0
      .history/src/components/callRecord/CallRecordManager_20211029113036.vue
  88. 483 0
      .history/src/components/callRecord/CallRecordManager_20211029113307.vue
  89. 489 0
      .history/src/components/callRecord/CallRecordManager_20211029113837.vue
  90. 489 0
      .history/src/components/callRecord/CallRecordManager_20211029113848.vue
  91. 489 0
      .history/src/components/callRecord/CallRecordManager_20211029113859.vue
  92. 489 0
      .history/src/components/callRecord/CallRecordManager_20211029113908.vue
  93. 491 0
      .history/src/components/callRecord/CallRecordManager_20211029114000.vue
  94. 491 0
      .history/src/components/callRecord/CallRecordManager_20211029114012.vue
  95. 491 0
      .history/src/components/callRecord/CallRecordManager_20211029114034.vue
  96. 491 0
      .history/src/components/callRecord/CallRecordManager_20211029114042.vue
  97. 489 0
      .history/src/components/callRecord/CallRecordManager_20211029114100.vue
  98. 487 0
      .history/src/components/callRecord/CallRecordManager_20211029114145.vue
  99. 487 0
      .history/src/components/callRecord/CallRecordManager_20211029114155.vue
  100. 0 0
      .history/src/components/callRecord/CallRecordManager_20211029114237.vue

+ 1 - 0
.gitignore

@@ -1,6 +1,7 @@
 .DS_Store
 node_modules
 /dist
+/.history
 
 # local env files
 .env.local

+ 235 - 0
.history/src/api/config_20211025110249.js

@@ -0,0 +1,235 @@
+// const testUrl = 'http://223.93.170.82:23650'
+const testUrl = ''
+
+export default {
+  // host:'http://192.168.2.241:5050',
+  // imgHost:'http://192.168.2.121:82',      //富文本编辑器图片回传地址
+  imgHost:'http://192.168.2.122:82',      //富文本编辑器图片回传地址
+  // imgHost:'http://192.168.2.241:82',      //富文本编辑器图片回传地址
+  delayTime: 500,
+  urls: {
+    'promptServer':'/sys/file/uploadImage',    //静态知识富文本图片上传
+    'midifyPassword':'/sys/user/midifyPassword',    //修改密码
+    'getConceptKnowledgeList':'/kl/conceptInfo/getPage', //  术语静态知识列表
+    'getConceptKnowledge':'/kl/conceptInfo/getRecordById',//术语静态知识详情
+    'getAllConcept':'/kl/conceptInfo/staticKnowledgeIndexWithoutInfo',   //医学术语--获取所有概念(标准术语)
+	  'saveConceptInfo':'/kl/conceptInfo/saveOrUpdateRecord',   //保存术语静态知识
+    'delLisMappingById': '/api/knowledgeman/lisMapping/delLisMappingById',  //医学数据-化验大小项与公表项维护-单个删除
+    'getConceptInfoAssay': '/api/knowledgeman/concept/getAllForRelation',  //化验子项维护-搜索术语
+    'getAllLisConcept':'api/knowledgeman/concept/getAllLisConcept',  //医学数据-化验大小项与公表项维护-获取所有化验公表项
+    'hasLisMapping': '/api/knowledgeman/lisMapping/hasLisMapping',  //医学数据-化验大小项与公表项维护-化验公表项映射是否已存在
+
+    'retrievalSearch': '/demo/retrieval/index',   //术语检索
+    'getLisMappingPage': '/tran/mappingConfig/getPage', //诊断列表
+    'diseaseIsExistRecord': '/tran/mappingConfig/isExistRecord',   //诊断-映射关系是否已存在
+    'saveOrUpdateDiseaseRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //诊断-保存或修改映射关系
+    'deleteDiseaseRecord': '/tran/mappingConfig/deleteRecord',   //诊断-删除映射关系
+    'exportDiseaseRecord': '/tran/mappingConfig/exportExcel',   //诊断-数据导出
+    'importDiseaseRecord': '/tran/mappingConfig/importExcel',   //诊断-数据导入
+    'exportDiseaseModule': '/tran/mappingConfig/exportExcelModule',   //诊断-数据导入模板导出
+
+    'getLisPage': '/tran/mappingConfig/getPage',   //检验列表
+    'lisIsExistRecord': '/tran/mappingConfig/isExistRecord',   //检验-映射关系是否已存在
+    'saveOrUpdateLisRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //检验-保存或修改映射关系
+    'deleteLisRecord': '/tran/mappingConfig/deleteRecord',   //检验-删除映射关系
+    'exportLisRecord': '/tran/mappingConfig/exportExcel',   //检验-数据导出
+    'importLisRecord': '/tran/mappingConfig/importExcel',   //检验-数据导入
+    'exportLisModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getpacsPage': '/tran/mappingConfig/getPage',   //检查列表
+    'pacsIsExistRecord': '/tran/mappingConfig/isExistRecord',   //检查-映射关系是否已存在
+    'saveOrUpdatePacsRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //检查-保存或修改映射关系
+    'deletePacsRecord': '/tran/mappingConfig/deleteRecord',   //检查-删除映射关系
+    'exportPacsRecord': '/tran/mappingConfig/exportExcel',   //检查-数据导出
+    'importPacsRecord': '/tran/mappingConfig/importExcel',   //检查-数据导入
+    'exportPacsModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getDrugPage': '/tran/mappingConfig/getPage',   //药品列表
+    'drugIsExistRecord': '/tran/mappingConfig/isExistRecord',   //药品-映射关系是否已存在
+    'saveOrUpdateDrugRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //药品-保存或修改映射关系
+    'deleteDrugRecord': '/tran/mappingConfig/deleteRecord',   //药品-删除映射关系
+    'exportDrugRecord': '/tran/mappingConfig/exportExcel',   //药品-数据导出
+    'importDrugRecord': '/tran/mappingConfig/importExcel',   //药品-数据导入
+    'exportDrugModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+      'getScalePageCDSS': '/tran/mappingConfig/getPage',   //量表列表
+      'scaleIsExistRecordCDSS': '/tran/mappingConfig/isExistRecord',   //量表-映射关系是否已存在
+      'saveOrUpdateScaleRecordCDSS': '/tran/mappingConfig/saveOrUpdateRecord',   //量表-保存或修改映射关系
+      'deleteScaleRecordCDSS': '/tran/mappingConfig/deleteRecord',   //量表-删除映射关系
+      'exportScaleRecordCDSS': '/tran/mappingConfig/exportExcel',   //量表-数据导出
+      'importScaleRecordCDSS': '/tran/mappingConfig/importExcel',   //量表-数据导入
+      'exportScaleModuleCDSS': '/tran/mappingConfig/exportExcelModule',
+
+
+      'getOperationPage': '/tran/mappingConfig/getPage',   //手术/操作列表
+    'operationIsExistRecord': '/tran/mappingConfig/isExistRecord',   //手术/操作-映射关系是否已存在
+    'saveOrUpdateOperationRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //手术/操作-保存或修改映射关系
+    'deleteOperationRecord': '/tran/mappingConfig/deleteRecord',   //手术/操作-删除映射关系
+    'exportOperationRecord': '/tran/mappingConfig/exportExcel',   //手术/操作-数据导出
+    'importOperationRecord': '/tran/mappingConfig/importExcel',   //手术/操作-数据导入
+    'exportOperationModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getFusionPage': '/tran/mappingConfig/getPage',   //输血列表
+    'fusionIsExistRecord': '/tran/mappingConfig/isExistRecord',   //输血-映射关系是否已存在
+    'saveOrUpdateFusionRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //输血-保存或修改映射关系
+    'deleteFusionRecord': '/tran/mappingConfig/deleteRecord',   //输血-删除映射关系
+    'exportFusionRecord': '/tran/mappingConfig/exportExcel',   //输血-数据导出
+    'importFusionRecord': '/tran/mappingConfig/importExcel',   //输血-数据导入
+    'exportFusionModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getDeptPage': '/tran/mappingConfig/getPage',   //科室列表
+    'deptIsExistRecord': '/tran/mappingConfig/isExistRecord',   //科室-映射关系是否已存在
+    'saveOrUpdateDeptRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //科室-保存或修改映射关系
+    'deleteDeptRecord': '/tran/mappingConfig/deleteRecord',   //科室-删除映射关系
+    'exportDeptRecord': '/tran/mappingConfig/exportExcel',   //科室-数据导出
+    'importDeptRecord': '/tran/mappingConfig/importExcel',   //科室-数据导入
+    'exportDeptModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+
+    'getNursePage': '/tran/mappingConfig/getPage',   //护理列表
+    'nurseIsExistRecord': '/tran/mappingConfig/isExistRecord',   //护理-映射关系是否已存在
+    'saveOrUpdateRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //护理列表添加
+    'deleteNurseRecord': '/tran/mappingConfig/deleteRecord',   //护理-删除映射关系
+    'exportNurseRecord': '/tran/mappingConfig/exportExcel',   //护理-数据导出
+    'importNurseRecord': '/tran/mappingConfig/importExcel',   //检验-数据导入
+    'exportNurseModule': '/tran/mappingConfig/exportExcelModule',   //护理-数据导入模板导出
+
+    'getTcmdiseasePage': '/tran/mappingConfig/getPage',   //中医疾病列表
+    'tcmIsExistRecord': '/tran/mappingConfig/isExistRecord',   //中医疾病-映射关系是否已存在
+    'saveOrUpdateRecordTcm': '/tran/mappingConfig/saveOrUpdateRecord',   //护理列表添加
+    'deleteTcmRecord': '/tran/mappingConfig/deleteRecord',   //中医疾病-删除映射关系
+    'exportTcmRecord': '/tran/mappingConfig/exportExcel',   //中医疾病-数据导出
+    'importTcmRecord': '/tran/mappingConfig/importExcel',   //中医疾病-数据导入
+    'exportTcmModule': '/tran/mappingConfig/exportExcelModule',   //护理-数据导入模板导出
+
+    'getTcmsyndromePage': '/tran/mappingConfig/getPage',   //中医证候列表
+    'tcmdromeIsExistRecord': '/tran/mappingConfig/isExistRecord',   //中医证候-映射关系是否已存在
+    'saveOrUpdateRecordTcmdrome': '/tran/mappingConfig/saveOrUpdateRecord',   //中医证候列表添加
+    'deleteTcmdromeRecord': '/tran/mappingConfig/deleteRecord',
+    'exportTcmdromeRecord': '/tran/mappingConfig/exportExcel',   //中医证候-数据导出
+    'importTcmdromeRecord': '/tran/mappingConfig/importExcel',   //中医证候-数据导入
+    'exportTcmdromeModule': '/tran/mappingConfig/exportExcelModule',   //中医证候-数据导入模板导出
+
+    'precDiseaseDataMatch': '/tran/mappingConfig/precDataMatch',
+    'dataDiseaseVerify': '/tran/mappingConfig/dataVerify',
+    'getRelatedMapping': '/tran/mappingConfig/getRelatedMapping',//查询映射关联
+    'getTermMatching': '/term/termMatching',//查询推荐匹配
+
+
+    'getHospitalInfo': '/tran/hospitalInfo/getHospitalInfo',   //医院信息——获取医院信息
+    'saveHospitalInfoRecord': '/tran/hospitalInfo/saveRecord',   //医院信息——修改医院信息
+    'saveHospitalRelation': '/tran/hospitalInfo/saveHospitalRelation',   //编辑子医院
+    'getHospitalRelation': '/tran/hospitalInfo/getHospitalRelation',   //获取子医院信息
+
+
+    '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',   //保存更新方案配置信息
+
+
+    'getBillmanPage': '/billman/getPage',   //获取开单合理项列表
+    'conceptBillmanIndex': '/billman/conceptIndex',   //开单项检索
+    'conditionBillmanIndex': '/billman/conditionIndex',   //条件明细检索
+    'getRecordByRelationId': '/billman/getRecordByRelationId',   //查询单条规则 
+    'saveBillmanRecord': '/billman/saveRecord',   //保存规则 
+    'updateBillmanStatus': '/billman/updateStatus',   //启用禁用
+
+    'getAccessdMenu': '/sys/user/getUserOrgMenu',  //获取左侧菜单项
+    'delConceptInfo':'/kl/conceptInfo/changeStatus',   //删除术语静态知识
+    'login': '/sys/user/getJwt',
+    'getDicList': '/sys/dictionaryInfo/getList',  //返回字典信息(界面返回)
+    //知识库规则维护
+    'zskRuleList':'/klRule/getKlRuleInfoPage',//规则列表
+    'zskAddRule':'/klRule/saveRuleInfo',//添加规则
+    'zskActiveRule':'/klRule/startRuleInfo',//启用规则
+    'zskDisableRule':'/klRule/disableRuleInfo',//禁用规则
+    'zskDelRule':'/klRule/clearRuleInfo',//删除规则
+    'zskRuleDetail':'/klRule/getByIdRuleInfo',//规则详情
+    'zskTypeList':'/klRulePlan/getMenu',//类型列表
+    'zskSearchConcept': '/klDisease/searchConceptRuleClass',//知识库搜索术语
+    'zskUpdateAll':'/cache/clearRuleAll',//更新数据
+    'zskgetDict':'/kl/dictionary/getDictionarys',//禁止修改基础规则类型
+
+    'importExcelDataVerify': '/tran/mappingConfig/importExcelDataVerify',//数据导入校验
+  },
+	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'
+  },
+  msg:{
+    imgTip:'无法上传图片,图片大小不可超过2M'
+  },
+  pageSizeArr:[10,50,100,500,1000,5000],         //分页每页显示条数选项
+  pageSize:10,      //初始每页显示条数
+  pageLayout:"total,sizes,prev, pager, next, jumper",        //分页组件成分
+//   type: 类型:1-诊断、2-药品、3-检验套餐、4-检验明细、5-检查、6-手术和操作
+// contentTypes: 内容类型(多选):1-静态信息、2-注意事项、3-临床路径、4-治疗方案
+  emData:[
+    {
+        "name":"诊断",
+        "key":1
+    },
+    {
+        "name":"检验套餐",
+        "key":3
+    },
+    {
+        "name":"检验细项",
+        "key":4
+    },
+    {
+        "name":"检查",
+        "key":5
+    },
+    {
+        "name":"药品",
+        "key":2
+    },
+    {
+        "name":"手术和操作",
+        "key":6
+    },
+    // {
+    //     "name":"科室",
+    //     "key":18
+    // },
+  ],
+  contentTypes:[
+    {
+        "name":"静态信息",
+        "key":1
+    },
+    {
+        "name":"注意事项",
+        "key":2
+    },
+    {
+        "name":"临床路径",
+        "key":3
+    },
+    {
+        "name":"一般治疗",
+        "key":4
+    },
+    
+  ],
+  drugForm: [
+    // { "name": "","val": "0"},
+    { "name": "注射剂","val": "1"},
+    { "name": "片剂","val": "2"},
+    { "name": "缓释剂","val": "3"},
+    { "name": "胶囊剂","val": "4"},
+    { "name": "滴丸剂","val": "5"},
+  ]
+
+}

+ 235 - 0
.history/src/api/config_20211101093600.js

@@ -0,0 +1,235 @@
+// const testUrl = 'http://223.93.170.82:23650'
+const testUrl = ''
+
+export default {
+  // host:'http://192.168.2.241:5050',
+  // imgHost:'http://192.168.2.121:82',      //富文本编辑器图片回传地址
+  imgHost:'http://192.168.2.122:82',      //富文本编辑器图片回传地址
+  // imgHost:'http://192.168.2.241:82',      //富文本编辑器图片回传地址
+  delayTime: 500,
+  urls: {
+    'promptServer':'/sys/file/uploadImage',    //静态知识富文本图片上传
+    'midifyPassword':'/sys/user/midifyPassword',    //修改密码
+    'getConceptKnowledgeList':'/kl/conceptInfo/getPage', //  术语静态知识列表
+    'getConceptKnowledge':'/kl/conceptInfo/getRecordById',//术语静态知识详情
+    'getAllConcept':'/kl/conceptInfo/staticKnowledgeIndexWithoutInfo',   //医学术语--获取所有概念(标准术语)
+	  'saveConceptInfo':'/kl/conceptInfo/saveOrUpdateRecord',   //保存术语静态知识
+    'delLisMappingById': '/api/knowledgeman/lisMapping/delLisMappingById',  //医学数据-化验大小项与公表项维护-单个删除
+    'getConceptInfoAssay': '/api/knowledgeman/concept/getAllForRelation',  //化验子项维护-搜索术语
+    'getAllLisConcept':'api/knowledgeman/concept/getAllLisConcept',  //医学数据-化验大小项与公表项维护-获取所有化验公表项
+    'hasLisMapping': '/api/knowledgeman/lisMapping/hasLisMapping',  //医学数据-化验大小项与公表项维护-化验公表项映射是否已存在
+
+    'retrievalSearch': '/demo/retrieval/index',   //术语检索
+    'getLisMappingPage': '/tran/mappingConfig/getPage', //诊断列表
+    'diseaseIsExistRecord': '/tran/mappingConfig/isExistRecord',   //诊断-映射关系是否已存在
+    'saveOrUpdateDiseaseRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //诊断-保存或修改映射关系
+    'deleteDiseaseRecord': '/tran/mappingConfig/deleteRecord',   //诊断-删除映射关系
+    'exportDiseaseRecord': '/tran/mappingConfig/exportExcel',   //诊断-数据导出
+    'importDiseaseRecord': '/tran/mappingConfig/importExcel',   //诊断-数据导入
+    'exportDiseaseModule': '/tran/mappingConfig/exportExcelModule',   //诊断-数据导入模板导出
+
+    'getLisPage': '/tran/mappingConfig/getPage',   //检验列表
+    'lisIsExistRecord': '/tran/mappingConfig/isExistRecord',   //检验-映射关系是否已存在
+    'saveOrUpdateLisRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //检验-保存或修改映射关系
+    'deleteLisRecord': '/tran/mappingConfig/deleteRecord',   //检验-删除映射关系
+    'exportLisRecord': '/tran/mappingConfig/exportExcel',   //检验-数据导出
+    'importLisRecord': '/tran/mappingConfig/importExcel',   //检验-数据导入
+    'exportLisModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getpacsPage': '/tran/mappingConfig/getPage',   //检查列表
+    'pacsIsExistRecord': '/tran/mappingConfig/isExistRecord',   //检查-映射关系是否已存在
+    'saveOrUpdatePacsRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //检查-保存或修改映射关系
+    'deletePacsRecord': '/tran/mappingConfig/deleteRecord',   //检查-删除映射关系
+    'exportPacsRecord': '/tran/mappingConfig/exportExcel',   //检查-数据导出
+    'importPacsRecord': '/tran/mappingConfig/importExcel',   //检查-数据导入
+    'exportPacsModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getDrugPage': '/tran/mappingConfig/getPage',   //药品列表
+    'drugIsExistRecord': '/tran/mappingConfig/isExistRecord',   //药品-映射关系是否已存在
+    'saveOrUpdateDrugRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //药品-保存或修改映射关系
+    'deleteDrugRecord': '/tran/mappingConfig/deleteRecord',   //药品-删除映射关系
+    'exportDrugRecord': '/tran/mappingConfig/exportExcel',   //药品-数据导出
+    'importDrugRecord': '/tran/mappingConfig/importExcel',   //药品-数据导入
+    'exportDrugModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+      'getScalePageCDSS': '/tran/mappingConfig/getPage',   //量表列表
+      'scaleIsExistRecordCDSS': '/tran/mappingConfig/isExistRecord',   //量表-映射关系是否已存在
+      'saveOrUpdateScaleRecordCDSS': '/tran/mappingConfig/saveOrUpdateRecord',   //量表-保存或修改映射关系
+      'deleteScaleRecordCDSS': '/tran/mappingConfig/deleteRecord',   //量表-删除映射关系
+      'exportScaleRecordCDSS': '/tran/mappingConfig/exportExcel',   //量表-数据导出
+      'importScaleRecordCDSS': '/tran/mappingConfig/importExcel',   //量表-数据导入
+      'exportScaleModuleCDSS': '/tran/mappingConfig/exportExcelModule',
+
+
+    'getOperationPage': '/tran/mappingConfig/getPage',   //手术/操作列表
+    'operationIsExistRecord': '/tran/mappingConfig/isExistRecord',   //手术/操作-映射关系是否已存在
+    'saveOrUpdateOperationRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //手术/操作-保存或修改映射关系
+    'deleteOperationRecord': '/tran/mappingConfig/deleteRecord',   //手术/操作-删除映射关系
+    'exportOperationRecord': '/tran/mappingConfig/exportExcel',   //手术/操作-数据导出
+    'importOperationRecord': '/tran/mappingConfig/importExcel',   //手术/操作-数据导入
+    'exportOperationModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getFusionPage': '/tran/mappingConfig/getPage',   //输血列表
+    'fusionIsExistRecord': '/tran/mappingConfig/isExistRecord',   //输血-映射关系是否已存在
+    'saveOrUpdateFusionRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //输血-保存或修改映射关系
+    'deleteFusionRecord': '/tran/mappingConfig/deleteRecord',   //输血-删除映射关系
+    'exportFusionRecord': '/tran/mappingConfig/exportExcel',   //输血-数据导出
+    'importFusionRecord': '/tran/mappingConfig/importExcel',   //输血-数据导入
+    'exportFusionModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+    'getDeptPage': '/tran/mappingConfig/getPage',   //科室列表
+    'deptIsExistRecord': '/tran/mappingConfig/isExistRecord',   //科室-映射关系是否已存在
+    'saveOrUpdateDeptRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //科室-保存或修改映射关系
+    'deleteDeptRecord': '/tran/mappingConfig/deleteRecord',   //科室-删除映射关系
+    'exportDeptRecord': '/tran/mappingConfig/exportExcel',   //科室-数据导出
+    'importDeptRecord': '/tran/mappingConfig/importExcel',   //科室-数据导入
+    'exportDeptModule': '/tran/mappingConfig/exportExcelModule',   //科室-数据导入模板导出
+
+
+    'getNursePage': '/tran/mappingConfig/getPage',   //护理列表
+    'nurseIsExistRecord': '/tran/mappingConfig/isExistRecord',   //护理-映射关系是否已存在
+    'saveOrUpdateRecord': '/tran/mappingConfig/saveOrUpdateRecord',   //护理列表添加
+    'deleteNurseRecord': '/tran/mappingConfig/deleteRecord',   //护理-删除映射关系
+    'exportNurseRecord': '/tran/mappingConfig/exportExcel',   //护理-数据导出
+    'importNurseRecord': '/tran/mappingConfig/importExcel',   //检验-数据导入
+    'exportNurseModule': '/tran/mappingConfig/exportExcelModule',   //护理-数据导入模板导出
+
+    'getTcmdiseasePage': '/tran/mappingConfig/getPage',   //中医疾病列表
+    'tcmIsExistRecord': '/tran/mappingConfig/isExistRecord',   //中医疾病-映射关系是否已存在
+    'saveOrUpdateRecordTcm': '/tran/mappingConfig/saveOrUpdateRecord',   //护理列表添加
+    'deleteTcmRecord': '/tran/mappingConfig/deleteRecord',   //中医疾病-删除映射关系
+    'exportTcmRecord': '/tran/mappingConfig/exportExcel',   //中医疾病-数据导出
+    'importTcmRecord': '/tran/mappingConfig/importExcel',   //中医疾病-数据导入
+    'exportTcmModule': '/tran/mappingConfig/exportExcelModule',   //护理-数据导入模板导出
+
+    'getTcmsyndromePage': '/tran/mappingConfig/getPage',   //中医证候列表
+    'tcmdromeIsExistRecord': '/tran/mappingConfig/isExistRecord',   //中医证候-映射关系是否已存在
+    'saveOrUpdateRecordTcmdrome': '/tran/mappingConfig/saveOrUpdateRecord',   //中医证候列表添加
+    'deleteTcmdromeRecord': '/tran/mappingConfig/deleteRecord',
+    'exportTcmdromeRecord': '/tran/mappingConfig/exportExcel',   //中医证候-数据导出
+    'importTcmdromeRecord': '/tran/mappingConfig/importExcel',   //中医证候-数据导入
+    'exportTcmdromeModule': '/tran/mappingConfig/exportExcelModule',   //中医证候-数据导入模板导出
+
+    'precDiseaseDataMatch': '/tran/mappingConfig/precDataMatch',
+    'dataDiseaseVerify': '/tran/mappingConfig/dataVerify',
+    'getRelatedMapping': '/tran/mappingConfig/getRelatedMapping',//查询映射关联
+    'getTermMatching': '/term/termMatching',//查询推荐匹配
+
+
+    'getHospitalInfo': '/tran/hospitalInfo/getHospitalInfo',   //医院信息——获取医院信息
+    'saveHospitalInfoRecord': '/tran/hospitalInfo/saveRecord',   //医院信息——修改医院信息
+    'saveHospitalRelation': '/tran/hospitalInfo/saveHospitalRelation',   //编辑子医院
+    'getHospitalRelation': '/tran/hospitalInfo/getHospitalRelation',   //获取子医院信息
+
+
+    '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',   //保存更新方案配置信息
+
+
+    'getBillmanPage': '/billman/getPage',   //获取开单合理项列表
+    'conceptBillmanIndex': '/billman/conceptIndex',   //开单项检索
+    'conditionBillmanIndex': '/billman/conditionIndex',   //条件明细检索
+    'getRecordByRelationId': '/billman/getRecordByRelationId',   //查询单条规则 
+    'saveBillmanRecord': '/billman/saveRecord',   //保存规则 
+    'updateBillmanStatus': '/billman/updateStatus',   //启用禁用
+
+    'getAccessdMenu': '/sys/user/getUserOrgMenu',  //获取左侧菜单项
+    'delConceptInfo':'/kl/conceptInfo/changeStatus',   //删除术语静态知识
+    'login': '/sys/user/getJwt',
+    'getDicList': '/sys/dictionaryInfo/getList',  //返回字典信息(界面返回)
+    //知识库规则维护
+    'zskRuleList':'/klRule/getKlRuleInfoPage',//规则列表
+    'zskAddRule':'/klRule/saveRuleInfo',//添加规则
+    'zskActiveRule':'/klRule/startRuleInfo',//启用规则
+    'zskDisableRule':'/klRule/disableRuleInfo',//禁用规则
+    'zskDelRule':'/klRule/clearRuleInfo',//删除规则
+    'zskRuleDetail':'/klRule/getByIdRuleInfo',//规则详情
+    'zskTypeList':'/klRulePlan/getMenu',//类型列表
+    'zskSearchConcept': '/klDisease/searchConceptRuleClass',//知识库搜索术语
+    'zskUpdateAll':'/cache/clearRuleAll',//更新数据
+    'zskgetDict':'/kl/dictionary/getDictionarys',//禁止修改基础规则类型
+
+    'importExcelDataVerify': '/tran/mappingConfig/importExcelDataVerify',//数据导入校验
+  },
+	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'
+  },
+  msg:{
+    imgTip:'无法上传图片,图片大小不可超过2M'
+  },
+  pageSizeArr:[10,50,100,500,1000,5000],         //分页每页显示条数选项
+  pageSize:10,      //初始每页显示条数
+  pageLayout:"total,sizes,prev, pager, next, jumper",        //分页组件成分
+//   type: 类型:1-诊断、2-药品、3-检验套餐、4-检验明细、5-检查、6-手术和操作
+// contentTypes: 内容类型(多选):1-静态信息、2-注意事项、3-临床路径、4-治疗方案
+  emData:[
+    {
+        "name":"诊断",
+        "key":1
+    },
+    {
+        "name":"检验套餐",
+        "key":3
+    },
+    {
+        "name":"检验细项",
+        "key":4
+    },
+    {
+        "name":"检查",
+        "key":5
+    },
+    {
+        "name":"药品",
+        "key":2
+    },
+    {
+        "name":"手术和操作",
+        "key":6
+    },
+    // {
+    //     "name":"科室",
+    //     "key":18
+    // },
+  ],
+  contentTypes:[
+    {
+        "name":"静态信息",
+        "key":1
+    },
+    {
+        "name":"注意事项",
+        "key":2
+    },
+    {
+        "name":"临床路径",
+        "key":3
+    },
+    {
+        "name":"一般治疗",
+        "key":4
+    },
+    
+  ],
+  drugForm: [
+    // { "name": "","val": "0"},
+    { "name": "注射剂","val": "1"},
+    { "name": "片剂","val": "2"},
+    { "name": "缓释剂","val": "3"},
+    { "name": "胶囊剂","val": "4"},
+    { "name": "滴丸剂","val": "5"},
+  ]
+
+}

+ 248 - 0
.history/src/api/config_20211101093607.js

@@ -0,0 +1,248 @@
+// const testUrl = 'http://223.93.170.82:23650'
+const testUrl = ''
+
+export default {
+  // host:'http://192.168.2.241:5050',
+  // imgHost:'http://192.168.2.121:82',      //富文本编辑器图片回传地址
+  imgHost: 'http://192.168.2.122:82', //富文本编辑器图片回传地址
+  // imgHost:'http://192.168.2.241:82',      //富文本编辑器图片回传地址
+  delayTime: 500,
+  urls: {
+    'promptServer': '/sys/file/uploadImage', //静态知识富文本图片上传
+    'midifyPassword': '/sys/user/midifyPassword', //修改密码
+    'getConceptKnowledgeList': '/kl/conceptInfo/getPage', //  术语静态知识列表
+    'getConceptKnowledge': '/kl/conceptInfo/getRecordById', //术语静态知识详情
+    'getAllConcept': '/kl/conceptInfo/staticKnowledgeIndexWithoutInfo', //医学术语--获取所有概念(标准术语)
+    'saveConceptInfo': '/kl/conceptInfo/saveOrUpdateRecord', //保存术语静态知识
+    'delLisMappingById': '/api/knowledgeman/lisMapping/delLisMappingById', //医学数据-化验大小项与公表项维护-单个删除
+    'getConceptInfoAssay': '/api/knowledgeman/concept/getAllForRelation', //化验子项维护-搜索术语
+    'getAllLisConcept': 'api/knowledgeman/concept/getAllLisConcept', //医学数据-化验大小项与公表项维护-获取所有化验公表项
+    'hasLisMapping': '/api/knowledgeman/lisMapping/hasLisMapping', //医学数据-化验大小项与公表项维护-化验公表项映射是否已存在
+
+    'retrievalSearch': '/demo/retrieval/index', //术语检索
+    'getLisMappingPage': '/tran/mappingConfig/getPage', //诊断列表
+    'diseaseIsExistRecord': '/tran/mappingConfig/isExistRecord', //诊断-映射关系是否已存在
+    'saveOrUpdateDiseaseRecord': '/tran/mappingConfig/saveOrUpdateRecord', //诊断-保存或修改映射关系
+    'deleteDiseaseRecord': '/tran/mappingConfig/deleteRecord', //诊断-删除映射关系
+    'exportDiseaseRecord': '/tran/mappingConfig/exportExcel', //诊断-数据导出
+    'importDiseaseRecord': '/tran/mappingConfig/importExcel', //诊断-数据导入
+    'exportDiseaseModule': '/tran/mappingConfig/exportExcelModule', //诊断-数据导入模板导出
+
+    'getLisPage': '/tran/mappingConfig/getPage', //检验列表
+    'lisIsExistRecord': '/tran/mappingConfig/isExistRecord', //检验-映射关系是否已存在
+    'saveOrUpdateLisRecord': '/tran/mappingConfig/saveOrUpdateRecord', //检验-保存或修改映射关系
+    'deleteLisRecord': '/tran/mappingConfig/deleteRecord', //检验-删除映射关系
+    'exportLisRecord': '/tran/mappingConfig/exportExcel', //检验-数据导出
+    'importLisRecord': '/tran/mappingConfig/importExcel', //检验-数据导入
+    'exportLisModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+    'getpacsPage': '/tran/mappingConfig/getPage', //检查列表
+    'pacsIsExistRecord': '/tran/mappingConfig/isExistRecord', //检查-映射关系是否已存在
+    'saveOrUpdatePacsRecord': '/tran/mappingConfig/saveOrUpdateRecord', //检查-保存或修改映射关系
+    'deletePacsRecord': '/tran/mappingConfig/deleteRecord', //检查-删除映射关系
+    'exportPacsRecord': '/tran/mappingConfig/exportExcel', //检查-数据导出
+    'importPacsRecord': '/tran/mappingConfig/importExcel', //检查-数据导入
+    'exportPacsModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+    'getDrugPage': '/tran/mappingConfig/getPage', //药品列表
+    'drugIsExistRecord': '/tran/mappingConfig/isExistRecord', //药品-映射关系是否已存在
+    'saveOrUpdateDrugRecord': '/tran/mappingConfig/saveOrUpdateRecord', //药品-保存或修改映射关系
+    'deleteDrugRecord': '/tran/mappingConfig/deleteRecord', //药品-删除映射关系
+    'exportDrugRecord': '/tran/mappingConfig/exportExcel', //药品-数据导出
+    'importDrugRecord': '/tran/mappingConfig/importExcel', //药品-数据导入
+    'exportDrugModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+    'getScalePageCDSS': '/tran/mappingConfig/getPage', //量表列表
+    'scaleIsExistRecordCDSS': '/tran/mappingConfig/isExistRecord', //量表-映射关系是否已存在
+    'saveOrUpdateScaleRecordCDSS': '/tran/mappingConfig/saveOrUpdateRecord', //量表-保存或修改映射关系
+    'deleteScaleRecordCDSS': '/tran/mappingConfig/deleteRecord', //量表-删除映射关系
+    'exportScaleRecordCDSS': '/tran/mappingConfig/exportExcel', //量表-数据导出
+    'importScaleRecordCDSS': '/tran/mappingConfig/importExcel', //量表-数据导入
+    'exportScaleModuleCDSS': '/tran/mappingConfig/exportExcelModule',
+
+
+    'getOperationPage': '/tran/mappingConfig/getPage', //手术/操作列表
+    'operationIsExistRecord': '/tran/mappingConfig/isExistRecord', //手术/操作-映射关系是否已存在
+    'saveOrUpdateOperationRecord': '/tran/mappingConfig/saveOrUpdateRecord', //手术/操作-保存或修改映射关系
+    'deleteOperationRecord': '/tran/mappingConfig/deleteRecord', //手术/操作-删除映射关系
+    'exportOperationRecord': '/tran/mappingConfig/exportExcel', //手术/操作-数据导出
+    'importOperationRecord': '/tran/mappingConfig/importExcel', //手术/操作-数据导入
+    'exportOperationModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+    'getFusionPage': '/tran/mappingConfig/getPage', //输血列表
+    'fusionIsExistRecord': '/tran/mappingConfig/isExistRecord', //输血-映射关系是否已存在
+    'saveOrUpdateFusionRecord': '/tran/mappingConfig/saveOrUpdateRecord', //输血-保存或修改映射关系
+    'deleteFusionRecord': '/tran/mappingConfig/deleteRecord', //输血-删除映射关系
+    'exportFusionRecord': '/tran/mappingConfig/exportExcel', //输血-数据导出
+    'importFusionRecord': '/tran/mappingConfig/importExcel', //输血-数据导入
+    'exportFusionModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+    'getDeptPage': '/tran/mappingConfig/getPage', //科室列表
+    'deptIsExistRecord': '/tran/mappingConfig/isExistRecord', //科室-映射关系是否已存在
+    'saveOrUpdateDeptRecord': '/tran/mappingConfig/saveOrUpdateRecord', //科室-保存或修改映射关系
+    'deleteDeptRecord': '/tran/mappingConfig/deleteRecord', //科室-删除映射关系
+    'exportDeptRecord': '/tran/mappingConfig/exportExcel', //科室-数据导出
+    'importDeptRecord': '/tran/mappingConfig/importExcel', //科室-数据导入
+    'exportDeptModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+
+    'getNursePage': '/tran/mappingConfig/getPage', //护理列表
+    'nurseIsExistRecord': '/tran/mappingConfig/isExistRecord', //护理-映射关系是否已存在
+    'saveOrUpdateRecord': '/tran/mappingConfig/saveOrUpdateRecord', //护理列表添加
+    'deleteNurseRecord': '/tran/mappingConfig/deleteRecord', //护理-删除映射关系
+    'exportNurseRecord': '/tran/mappingConfig/exportExcel', //护理-数据导出
+    'importNurseRecord': '/tran/mappingConfig/importExcel', //检验-数据导入
+    'exportNurseModule': '/tran/mappingConfig/exportExcelModule', //护理-数据导入模板导出
+
+    'getTcmdiseasePage': '/tran/mappingConfig/getPage', //中医疾病列表
+    'tcmIsExistRecord': '/tran/mappingConfig/isExistRecord', //中医疾病-映射关系是否已存在
+    'saveOrUpdateRecordTcm': '/tran/mappingConfig/saveOrUpdateRecord', //护理列表添加
+    'deleteTcmRecord': '/tran/mappingConfig/deleteRecord', //中医疾病-删除映射关系
+    'exportTcmRecord': '/tran/mappingConfig/exportExcel', //中医疾病-数据导出
+    'importTcmRecord': '/tran/mappingConfig/importExcel', //中医疾病-数据导入
+    'exportTcmModule': '/tran/mappingConfig/exportExcelModule', //护理-数据导入模板导出
+
+    'getTcmsyndromePage': '/tran/mappingConfig/getPage', //中医证候列表
+    'tcmdromeIsExistRecord': '/tran/mappingConfig/isExistRecord', //中医证候-映射关系是否已存在
+    'saveOrUpdateRecordTcmdrome': '/tran/mappingConfig/saveOrUpdateRecord', //中医证候列表添加
+    'deleteTcmdromeRecord': '/tran/mappingConfig/deleteRecord',
+    'exportTcmdromeRecord': '/tran/mappingConfig/exportExcel', //中医证候-数据导出
+    'importTcmdromeRecord': '/tran/mappingConfig/importExcel', //中医证候-数据导入
+    'exportTcmdromeModule': '/tran/mappingConfig/exportExcelModule', //中医证候-数据导入模板导出
+
+    'precDiseaseDataMatch': '/tran/mappingConfig/precDataMatch',
+    'dataDiseaseVerify': '/tran/mappingConfig/dataVerify',
+    'getRelatedMapping': '/tran/mappingConfig/getRelatedMapping', //查询映射关联
+    'getTermMatching': '/term/termMatching', //查询推荐匹配
+
+
+    'getHospitalInfo': '/tran/hospitalInfo/getHospitalInfo', //医院信息——获取医院信息
+    'saveHospitalInfoRecord': '/tran/hospitalInfo/saveRecord', //医院信息——修改医院信息
+    'saveHospitalRelation': '/tran/hospitalInfo/saveHospitalRelation', //编辑子医院
+    'getHospitalRelation': '/tran/hospitalInfo/getHospitalRelation', //获取子医院信息
+
+
+    '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', //保存更新方案配置信息
+
+
+    'getBillmanPage': '/billman/getPage', //获取开单合理项列表
+    'conceptBillmanIndex': '/billman/conceptIndex', //开单项检索
+    'conditionBillmanIndex': '/billman/conditionIndex', //条件明细检索
+    'getRecordByRelationId': '/billman/getRecordByRelationId', //查询单条规则 
+    'saveBillmanRecord': '/billman/saveRecord', //保存规则 
+    'updateBillmanStatus': '/billman/updateStatus', //启用禁用
+
+    'getAccessdMenu': '/sys/user/getUserOrgMenu', //获取左侧菜单项
+    'delConceptInfo': '/kl/conceptInfo/changeStatus', //删除术语静态知识
+    'login': '/sys/user/getJwt',
+    'getDicList': '/sys/dictionaryInfo/getList', //返回字典信息(界面返回)
+    //知识库规则维护
+    'zskRuleList': '/klRule/getKlRuleInfoPage', //规则列表
+    'zskAddRule': '/klRule/saveRuleInfo', //添加规则
+    'zskActiveRule': '/klRule/startRuleInfo', //启用规则
+    'zskDisableRule': '/klRule/disableRuleInfo', //禁用规则
+    'zskDelRule': '/klRule/clearRuleInfo', //删除规则
+    'zskRuleDetail': '/klRule/getByIdRuleInfo', //规则详情
+    'zskTypeList': '/klRulePlan/getMenu', //类型列表
+    'zskSearchConcept': '/klDisease/searchConceptRuleClass', //知识库搜索术语
+    'zskUpdateAll': '/cache/clearRuleAll', //更新数据
+    'zskgetDict': '/kl/dictionary/getDictionarys', //禁止修改基础规则类型
+
+    'importExcelDataVerify': '/tran/mappingConfig/importExcelDataVerify', //数据导入校验
+  },
+  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'
+  },
+  msg: {
+    imgTip: '无法上传图片,图片大小不可超过2M'
+  },
+  pageSizeArr: [10, 50, 100, 500, 1000, 5000], //分页每页显示条数选项
+  pageSize: 10, //初始每页显示条数
+  pageLayout: "total,sizes,prev, pager, next, jumper", //分页组件成分
+  //   type: 类型:1-诊断、2-药品、3-检验套餐、4-检验明细、5-检查、6-手术和操作
+  // contentTypes: 内容类型(多选):1-静态信息、2-注意事项、3-临床路径、4-治疗方案
+  emData: [{
+      "name": "诊断",
+      "key": 1
+    },
+    {
+      "name": "检验套餐",
+      "key": 3
+    },
+    {
+      "name": "检验细项",
+      "key": 4
+    },
+    {
+      "name": "检查",
+      "key": 5
+    },
+    {
+      "name": "药品",
+      "key": 2
+    },
+    {
+      "name": "手术和操作",
+      "key": 6
+    },
+    // {
+    //     "name":"科室",
+    //     "key":18
+    // },
+  ],
+  contentTypes: [{
+      "name": "静态信息",
+      "key": 1
+    },
+    {
+      "name": "注意事项",
+      "key": 2
+    },
+    {
+      "name": "临床路径",
+      "key": 3
+    },
+    {
+      "name": "一般治疗",
+      "key": 4
+    },
+
+  ],
+  drugForm: [
+    // { "name": "","val": "0"},
+    {
+      "name": "注射剂",
+      "val": "1"
+    },
+    {
+      "name": "片剂",
+      "val": "2"
+    },
+    {
+      "name": "缓释剂",
+      "val": "3"
+    },
+    {
+      "name": "胶囊剂",
+      "val": "4"
+    },
+    {
+      "name": "滴丸剂",
+      "val": "5"
+    },
+  ]
+
+}

+ 249 - 0
.history/src/api/config_20211101094152.js

@@ -0,0 +1,249 @@
+// const testUrl = 'http://223.93.170.82:23650'
+const testUrl = ''
+
+export default {
+  // host:'http://192.168.2.241:5050',
+  // imgHost:'http://192.168.2.121:82',      //富文本编辑器图片回传地址
+  imgHost: 'http://192.168.2.122:82', //富文本编辑器图片回传地址
+  // imgHost:'http://192.168.2.241:82',      //富文本编辑器图片回传地址
+  delayTime: 500,
+  urls: {
+    'promptServer': '/sys/file/uploadImage', //静态知识富文本图片上传
+    'midifyPassword': '/sys/user/midifyPassword', //修改密码
+    'getConceptKnowledgeList': '/kl/conceptInfo/getPage', //  术语静态知识列表
+    'getConceptKnowledge': '/kl/conceptInfo/getRecordById', //术语静态知识详情
+    'getAllConcept': '/kl/conceptInfo/staticKnowledgeIndexWithoutInfo', //医学术语--获取所有概念(标准术语)
+    'saveConceptInfo': '/kl/conceptInfo/saveOrUpdateRecord', //保存术语静态知识
+    'delLisMappingById': '/api/knowledgeman/lisMapping/delLisMappingById', //医学数据-化验大小项与公表项维护-单个删除
+    'getConceptInfoAssay': '/api/knowledgeman/concept/getAllForRelation', //化验子项维护-搜索术语
+    'getAllLisConcept': 'api/knowledgeman/concept/getAllLisConcept', //医学数据-化验大小项与公表项维护-获取所有化验公表项
+    'hasLisMapping': '/api/knowledgeman/lisMapping/hasLisMapping', //医学数据-化验大小项与公表项维护-化验公表项映射是否已存在
+
+    'retrievalSearch': '/demo/retrieval/index', //术语检索
+    'getLisMappingPage': '/tran/mappingConfig/getPage', //诊断列表
+    'diseaseIsExistRecord': '/tran/mappingConfig/isExistRecord', //诊断-映射关系是否已存在
+    'saveOrUpdateDiseaseRecord': '/tran/mappingConfig/saveOrUpdateRecord', //诊断-保存或修改映射关系
+    'deleteDiseaseRecord': '/tran/mappingConfig/deleteRecord', //诊断-删除映射关系
+    'exportDiseaseRecord': '/tran/mappingConfig/exportExcel', //诊断-数据导出
+    'importDiseaseRecord': '/tran/mappingConfig/importExcel', //诊断-数据导入
+    'exportDiseaseModule': '/tran/mappingConfig/exportExcelModule', //诊断-数据导入模板导出
+
+    'getLisPage': '/tran/mappingConfig/getPage', //检验列表
+    'lisIsExistRecord': '/tran/mappingConfig/isExistRecord', //检验-映射关系是否已存在
+    'saveOrUpdateLisRecord': '/tran/mappingConfig/saveOrUpdateRecord', //检验-保存或修改映射关系
+    'deleteLisRecord': '/tran/mappingConfig/deleteRecord', //检验-删除映射关系
+    'exportLisRecord': '/tran/mappingConfig/exportExcel', //检验-数据导出
+    'importLisRecord': '/tran/mappingConfig/importExcel', //检验-数据导入
+    'exportLisModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+    'getpacsPage': '/tran/mappingConfig/getPage', //检查列表
+    'pacsIsExistRecord': '/tran/mappingConfig/isExistRecord', //检查-映射关系是否已存在
+    'saveOrUpdatePacsRecord': '/tran/mappingConfig/saveOrUpdateRecord', //检查-保存或修改映射关系
+    'deletePacsRecord': '/tran/mappingConfig/deleteRecord', //检查-删除映射关系
+    'exportPacsRecord': '/tran/mappingConfig/exportExcel', //检查-数据导出
+    'importPacsRecord': '/tran/mappingConfig/importExcel', //检查-数据导入
+    'exportPacsModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+    'getDrugPage': '/tran/mappingConfig/getPage', //药品列表
+    'drugIsExistRecord': '/tran/mappingConfig/isExistRecord', //药品-映射关系是否已存在
+    'saveOrUpdateDrugRecord': '/tran/mappingConfig/saveOrUpdateRecord', //药品-保存或修改映射关系
+    'deleteDrugRecord': '/tran/mappingConfig/deleteRecord', //药品-删除映射关系
+    'exportDrugRecord': '/tran/mappingConfig/exportExcel', //药品-数据导出
+    'importDrugRecord': '/tran/mappingConfig/importExcel', //药品-数据导入
+    'exportDrugModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+    'getScalePageCDSS': '/tran/mappingConfig/getPage', //量表列表
+    'scaleIsExistRecordCDSS': '/tran/mappingConfig/isExistRecord', //量表-映射关系是否已存在
+    'saveOrUpdateScaleRecordCDSS': '/tran/mappingConfig/saveOrUpdateRecord', //量表-保存或修改映射关系
+    'deleteScaleRecordCDSS': '/tran/mappingConfig/deleteRecord', //量表-删除映射关系
+    'exportScaleRecordCDSS': '/tran/mappingConfig/exportExcel', //量表-数据导出
+    'importScaleRecordCDSS': '/tran/mappingConfig/importExcel', //量表-数据导入
+    'exportScaleModuleCDSS': '/tran/mappingConfig/exportExcelModule',
+
+
+    'getOperationPage': '/tran/mappingConfig/getPage', //手术/操作列表
+    'operationIsExistRecord': '/tran/mappingConfig/isExistRecord', //手术/操作-映射关系是否已存在
+    'saveOrUpdateOperationRecord': '/tran/mappingConfig/saveOrUpdateRecord', //手术/操作-保存或修改映射关系
+    'deleteOperationRecord': '/tran/mappingConfig/deleteRecord', //手术/操作-删除映射关系
+    'exportOperationRecord': '/tran/mappingConfig/exportExcel', //手术/操作-数据导出
+    'importOperationRecord': '/tran/mappingConfig/importExcel', //手术/操作-数据导入
+    'exportOperationModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+    'getFusionPage': '/tran/mappingConfig/getPage', //输血列表
+    'fusionIsExistRecord': '/tran/mappingConfig/isExistRecord', //输血-映射关系是否已存在
+    'saveOrUpdateFusionRecord': '/tran/mappingConfig/saveOrUpdateRecord', //输血-保存或修改映射关系
+    'deleteFusionRecord': '/tran/mappingConfig/deleteRecord', //输血-删除映射关系
+    'exportFusionRecord': '/tran/mappingConfig/exportExcel', //输血-数据导出
+    'importFusionRecord': '/tran/mappingConfig/importExcel', //输血-数据导入
+    'exportFusionModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+    'getDeptPage': '/tran/mappingConfig/getPage', //科室列表
+    'deptIsExistRecord': '/tran/mappingConfig/isExistRecord', //科室-映射关系是否已存在
+    'saveOrUpdateDeptRecord': '/tran/mappingConfig/saveOrUpdateRecord', //科室-保存或修改映射关系
+    'deleteDeptRecord': '/tran/mappingConfig/deleteRecord', //科室-删除映射关系
+    'exportDeptRecord': '/tran/mappingConfig/exportExcel', //科室-数据导出
+    'importDeptRecord': '/tran/mappingConfig/importExcel', //科室-数据导入
+    'exportDeptModule': '/tran/mappingConfig/exportExcelModule', //科室-数据导入模板导出
+
+
+    'getNursePage': '/tran/mappingConfig/getPage', //护理列表
+    'nurseIsExistRecord': '/tran/mappingConfig/isExistRecord', //护理-映射关系是否已存在
+    'saveOrUpdateRecord': '/tran/mappingConfig/saveOrUpdateRecord', //护理列表添加
+    'deleteNurseRecord': '/tran/mappingConfig/deleteRecord', //护理-删除映射关系
+    'exportNurseRecord': '/tran/mappingConfig/exportExcel', //护理-数据导出
+    'importNurseRecord': '/tran/mappingConfig/importExcel', //检验-数据导入
+    'exportNurseModule': '/tran/mappingConfig/exportExcelModule', //护理-数据导入模板导出
+
+    'getTcmdiseasePage': '/tran/mappingConfig/getPage', //中医疾病列表
+    'tcmIsExistRecord': '/tran/mappingConfig/isExistRecord', //中医疾病-映射关系是否已存在
+    'saveOrUpdateRecordTcm': '/tran/mappingConfig/saveOrUpdateRecord', //护理列表添加
+    'deleteTcmRecord': '/tran/mappingConfig/deleteRecord', //中医疾病-删除映射关系
+    'exportTcmRecord': '/tran/mappingConfig/exportExcel', //中医疾病-数据导出
+    'importTcmRecord': '/tran/mappingConfig/importExcel', //中医疾病-数据导入
+    'exportTcmModule': '/tran/mappingConfig/exportExcelModule', //护理-数据导入模板导出
+
+    'getTcmsyndromePage': '/tran/mappingConfig/getPage', //中医证候列表
+    'tcmdromeIsExistRecord': '/tran/mappingConfig/isExistRecord', //中医证候-映射关系是否已存在
+    'saveOrUpdateRecordTcmdrome': '/tran/mappingConfig/saveOrUpdateRecord', //中医证候列表添加
+    'deleteTcmdromeRecord': '/tran/mappingConfig/deleteRecord',
+    'exportTcmdromeRecord': '/tran/mappingConfig/exportExcel', //中医证候-数据导出
+    'importTcmdromeRecord': '/tran/mappingConfig/importExcel', //中医证候-数据导入
+    'exportTcmdromeModule': '/tran/mappingConfig/exportExcelModule', //中医证候-数据导入模板导出
+
+    'precDiseaseDataMatch': '/tran/mappingConfig/precDataMatch',
+    'dataDiseaseVerify': '/tran/mappingConfig/dataVerify',
+    'getRelatedMapping': '/tran/mappingConfig/getRelatedMapping', //查询映射关联
+    'getTermMatching': '/term/termMatching', //查询推荐匹配
+
+
+    'getHospitalInfo': '/tran/hospitalInfo/getHospitalInfo', //医院信息——获取医院信息
+    'saveHospitalInfoRecord': '/tran/hospitalInfo/saveRecord', //医院信息——修改医院信息
+    'saveHospitalRelation': '/tran/hospitalInfo/saveHospitalRelation', //编辑子医院
+    'getHospitalRelation': '/tran/hospitalInfo/getHospitalRelation', //获取子医院信息
+    'getCallRecord': '/tran/log/pageList', // 调用记录
+
+
+    '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', //保存更新方案配置信息
+
+
+    'getBillmanPage': '/billman/getPage', //获取开单合理项列表
+    'conceptBillmanIndex': '/billman/conceptIndex', //开单项检索
+    'conditionBillmanIndex': '/billman/conditionIndex', //条件明细检索
+    'getRecordByRelationId': '/billman/getRecordByRelationId', //查询单条规则 
+    'saveBillmanRecord': '/billman/saveRecord', //保存规则 
+    'updateBillmanStatus': '/billman/updateStatus', //启用禁用
+
+    'getAccessdMenu': '/sys/user/getUserOrgMenu', //获取左侧菜单项
+    'delConceptInfo': '/kl/conceptInfo/changeStatus', //删除术语静态知识
+    'login': '/sys/user/getJwt',
+    'getDicList': '/sys/dictionaryInfo/getList', //返回字典信息(界面返回)
+    //知识库规则维护
+    'zskRuleList': '/klRule/getKlRuleInfoPage', //规则列表
+    'zskAddRule': '/klRule/saveRuleInfo', //添加规则
+    'zskActiveRule': '/klRule/startRuleInfo', //启用规则
+    'zskDisableRule': '/klRule/disableRuleInfo', //禁用规则
+    'zskDelRule': '/klRule/clearRuleInfo', //删除规则
+    'zskRuleDetail': '/klRule/getByIdRuleInfo', //规则详情
+    'zskTypeList': '/klRulePlan/getMenu', //类型列表
+    'zskSearchConcept': '/klDisease/searchConceptRuleClass', //知识库搜索术语
+    'zskUpdateAll': '/cache/clearRuleAll', //更新数据
+    'zskgetDict': '/kl/dictionary/getDictionarys', //禁止修改基础规则类型
+
+    'importExcelDataVerify': '/tran/mappingConfig/importExcelDataVerify', //数据导入校验
+  },
+  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'
+  },
+  msg: {
+    imgTip: '无法上传图片,图片大小不可超过2M'
+  },
+  pageSizeArr: [10, 50, 100, 500, 1000, 5000], //分页每页显示条数选项
+  pageSize: 10, //初始每页显示条数
+  pageLayout: "total,sizes,prev, pager, next, jumper", //分页组件成分
+  //   type: 类型:1-诊断、2-药品、3-检验套餐、4-检验明细、5-检查、6-手术和操作
+  // contentTypes: 内容类型(多选):1-静态信息、2-注意事项、3-临床路径、4-治疗方案
+  emData: [{
+      "name": "诊断",
+      "key": 1
+    },
+    {
+      "name": "检验套餐",
+      "key": 3
+    },
+    {
+      "name": "检验细项",
+      "key": 4
+    },
+    {
+      "name": "检查",
+      "key": 5
+    },
+    {
+      "name": "药品",
+      "key": 2
+    },
+    {
+      "name": "手术和操作",
+      "key": 6
+    },
+    // {
+    //     "name":"科室",
+    //     "key":18
+    // },
+  ],
+  contentTypes: [{
+      "name": "静态信息",
+      "key": 1
+    },
+    {
+      "name": "注意事项",
+      "key": 2
+    },
+    {
+      "name": "临床路径",
+      "key": 3
+    },
+    {
+      "name": "一般治疗",
+      "key": 4
+    },
+
+  ],
+  drugForm: [
+    // { "name": "","val": "0"},
+    {
+      "name": "注射剂",
+      "val": "1"
+    },
+    {
+      "name": "片剂",
+      "val": "2"
+    },
+    {
+      "name": "缓释剂",
+      "val": "3"
+    },
+    {
+      "name": "胶囊剂",
+      "val": "4"
+    },
+    {
+      "name": "滴丸剂",
+      "val": "5"
+    },
+  ]
+
+}

+ 28 - 0
.history/src/api/index_20211025110249.js

@@ -0,0 +1,28 @@
+import axios from 'axios';
+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:6060';
+// axios.defaults.baseURL = 'http://192.168.2.241';
+// axios.defaults.baseURL = 'http://192.168.3.113:6060';
+
+
+const urls = config.urls;
+export default {
+  loginMess(data) {
+    return axios.post(urls.login,
+      {
+        'username': data.username,
+        'password': data.password
+      }
+    )
+  },
+  getAccessdMenu() {
+    return axios.post(urls.getAccessdMenu);
+  },
+  midifyPassword(param) {
+    return axios.post(urls.midifyPassword, param);
+  },
+
+}

+ 28 - 0
.history/src/api/index_20211027164529.js

@@ -0,0 +1,28 @@
+import axios from 'axios';
+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:6060';
+// axios.defaults.baseURL = 'http://192.168.2.241';
+// axios.defaults.baseURL = 'http://192.168.3.113:6060';
+
+
+const urls = config.urls;
+export default {
+  loginMess(data) {
+    return axios.post(urls.login,
+      {
+        'username': data.username,
+        'password': data.password
+      }
+    )
+  },
+  getAccessdMenu() {
+    return axios.post(urls.getAccessdMenu);
+  },
+  midifyPassword(param) {
+    return axios.post(urls.midifyPassword, param);
+  },
+
+}

+ 36 - 0
.history/src/api/knowledgeLib_20211025110249.js

@@ -0,0 +1,36 @@
+import axios from 'axios';
+import config from '@api/config.js';
+
+const urls = config.urls;
+export default {
+    getRulesList(param){
+        return axios.post(urls.zskRuleList,param);
+    },
+    getTypesList(param){
+        return axios.post(urls.zskTypeList,param);
+    },
+    deleteRule(param){
+        return axios.post(urls.zskDelRule,param);
+    },
+    deleteRuleApply(param){
+        return axios.post(urls.zskDisableRule,param);
+    },
+    ruleDetail(param){
+        return axios.post(urls.zskRuleDetail,param);
+    },
+    searchConcept(param){
+        return axios.post(urls.zskSearchConcept,param);
+    },
+    saveRule(param){
+        return axios.post(urls.zskAddRule,param);
+    },
+    saveRuleApply(param){
+        return axios.post(urls.zskActiveRule,param);
+    },
+    zskUpdateAll() {    //更新数据
+        return axios.post(urls.zskUpdateAll)
+    },
+    zskgetDict(){
+        return axios.post(urls.zskgetDict)
+    }
+}

+ 39 - 0
.history/src/api/knowledgeLib_20211101094145.js

@@ -0,0 +1,39 @@
+import axios from 'axios';
+import config from '@api/config.js';
+
+const urls = config.urls;
+export default {
+    getRulesList(param){
+        return axios.post(urls.zskRuleList,param);
+    },
+    getTypesList(param){
+        return axios.post(urls.zskTypeList,param);
+    },
+    deleteRule(param){
+        return axios.post(urls.zskDelRule,param);
+    },
+    deleteRuleApply(param){
+        return axios.post(urls.zskDisableRule,param);
+    },
+    ruleDetail(param){
+        return axios.post(urls.zskRuleDetail,param);
+    },
+    searchConcept(param){
+        return axios.post(urls.zskSearchConcept,param);
+    },
+    saveRule(param){
+        return axios.post(urls.zskAddRule,param);
+    },
+    saveRuleApply(param){
+        return axios.post(urls.zskActiveRule,param);
+    },
+    zskUpdateAll() {    //更新数据
+        return axios.post(urls.zskUpdateAll)
+    },
+    zskgetDict(){
+        return axios.post(urls.zskgetDict)
+    },
+    getCallRecord(param){
+        return axios.post(urls.getCallRecord, param)
+    }
+}

+ 0 - 0
.history/src/assets/css/common_20211101132102.css


+ 3 - 0
.history/src/assets/css/common_20211101132123.css

@@ -0,0 +1,3 @@
+/*
+    公共样式
+*/

+ 14 - 0
.history/src/assets/css/common_20211101132228.css

@@ -0,0 +1,14 @@
+/*
+    公共样式
+*/
+
+html,body,#app {
+    margin: 0;
+    padding: 0;
+}
+
+.el-pagination__sizes {
+    margin-right: 20px;
+  }
+
+

+ 0 - 0
.history/src/components/aa_20211029112559.vue


+ 482 - 0
.history/src/components/aa_20211029112609.vue

@@ -0,0 +1,482 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 15 - 0
.history/src/components/callRecord/CallRecordManager_20211029101238.vue

@@ -0,0 +1,15 @@
+<template>
+  <div>
+      调用记录
+  </div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>

+ 481 - 0
.history/src/components/callRecord/CallRecordManager_20211029101454.vue

@@ -0,0 +1,481 @@
+<template>
+  <div>
+    <crumbs title="规则维护" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="规则名称" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="规则类型" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="医学标准术语" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="术语类型" width="150"></el-table-column>
+        <el-table-column prop="parHasSub" label="有无子条件" width="100">
+          <template slot-scope="scope">{{scope.row.parHasSub == '0'?'无':'有'}}</template>
+        </el-table-column>
+        <el-table-column label="状态">
+          <template slot-scope="scope">
+            <span>{{scope.row.parStatus === 0?'禁用':'启用'}}</span>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column label="操作" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 481 - 0
.history/src/components/callRecord/CallRecordManager_20211029101521.vue

@@ -0,0 +1,481 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="规则名称" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="规则类型" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="医学标准术语" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="术语类型" width="150"></el-table-column>
+        <el-table-column prop="parHasSub" label="有无子条件" width="100">
+          <template slot-scope="scope">{{scope.row.parHasSub == '0'?'无':'有'}}</template>
+        </el-table-column>
+        <el-table-column label="状态">
+          <template slot-scope="scope">
+            <span>{{scope.row.parStatus === 0?'禁用':'启用'}}</span>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column label="操作" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 481 - 0
.history/src/components/callRecord/CallRecordManager_20211029102816.vue

@@ -0,0 +1,481 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="规则名称" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="规则类型" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="医学标准术语" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="术语类型" width="150"></el-table-column>
+        <el-table-column prop="parHasSub" label="有无子条件" width="100">
+          <template slot-scope="scope">{{scope.row.parHasSub == '0'?'无':'有'}}</template>
+        </el-table-column>
+        <el-table-column label="状态">
+          <template slot-scope="scope">
+            <span>{{scope.row.parStatus === 0?'禁用':'启用'}}</span>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column label="操作" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 481 - 0
.history/src/components/callRecord/CallRecordManager_20211029102847.vue

@@ -0,0 +1,481 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="规则类型" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="医学标准术语" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="术语类型" width="150"></el-table-column>
+        <el-table-column prop="parHasSub" label="有无子条件" width="100">
+          <template slot-scope="scope">{{scope.row.parHasSub == '0'?'无':'有'}}</template>
+        </el-table-column>
+        <el-table-column label="状态">
+          <template slot-scope="scope">
+            <span>{{scope.row.parStatus === 0?'禁用':'启用'}}</span>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column label="操作" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 481 - 0
.history/src/components/callRecord/CallRecordManager_20211029102922.vue

@@ -0,0 +1,481 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="医学标准术语" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="术语类型" width="150"></el-table-column>
+        <el-table-column prop="parHasSub" label="有无子条件" width="100">
+          <template slot-scope="scope">{{scope.row.parHasSub == '0'?'无':'有'}}</template>
+        </el-table-column>
+        <el-table-column label="状态">
+          <template slot-scope="scope">
+            <span>{{scope.row.parStatus === 0?'禁用':'启用'}}</span>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column label="操作" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 481 - 0
.history/src/components/callRecord/CallRecordManager_20211029103032.vue

@@ -0,0 +1,481 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="parHasSub" label="有无子条件" width="100">
+          <template slot-scope="scope">{{scope.row.parHasSub == '0'?'无':'有'}}</template>
+        </el-table-column>
+        <el-table-column label="状态">
+          <template slot-scope="scope">
+            <span>{{scope.row.parStatus === 0?'禁用':'启用'}}</span>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column label="操作" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 481 - 0
.history/src/components/callRecord/CallRecordManager_20211029103226.vue

@@ -0,0 +1,481 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="parHasSub" label="接收时间" width="100">
+          <template slot-scope="scope">{{scope.row.parHasSub == '0'?'无':'有'}}</template>
+        </el-table-column>
+        <el-table-column label="回应时间">
+          <template slot-scope="scope">
+            <span>{{scope.row.parStatus === 0?'禁用':'启用'}}</span>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column label="操作" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 475 - 0
.history/src/components/callRecord/CallRecordManager_20211029103353.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" width="180"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" width="180"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column label="操作" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 475 - 0
.history/src/components/callRecord/CallRecordManager_20211029103436.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" width="180"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" width="180"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" width="180"></el-table-column>
+        <el-table-column label="操作" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 475 - 0
.history/src/components/callRecord/CallRecordManager_20211029103448.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" width="180"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" width="180"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" width="180"></el-table-column>
+        <el-table-column label="状态" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 475 - 0
.history/src/components/callRecord/CallRecordManager_20211029103536.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" width="180"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" width="180"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" width="180"></el-table-column>
+        <el-table-column label="状态" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+            <!-- <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button> -->
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 475 - 0
.history/src/components/callRecord/CallRecordManager_20211029103623.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" width="180"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" width="180"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" width="180"></el-table-column>
+        <el-table-column label="状态" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" width="100">成功</el-button>
+            <!-- <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button> -->
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 475 - 0
.history/src/components/callRecord/CallRecordManager_20211029103635.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" width="180"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" width="180"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" width="180"></el-table-column>
+        <el-table-column label="状态" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" width="50">成功</el-button>
+            <!-- <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button> -->
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 475 - 0
.history/src/components/callRecord/CallRecordManager_20211029103651.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" width="180"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" width="180"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" width="180"></el-table-column>
+        <el-table-column label="状态" width="50" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+            <!-- <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button> -->
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 475 - 0
.history/src/components/callRecord/CallRecordManager_20211029103704.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" width="180"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" width="180"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" width="180"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+            <!-- <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button> -->
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 459 - 0
.history/src/components/callRecord/CallRecordManager_20211029103725.vue

@@ -0,0 +1,459 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" width="180"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" width="180"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" width="180"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 459 - 0
.history/src/components/callRecord/CallRecordManager_20211029103734.vue

@@ -0,0 +1,459 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" width="150"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" width="180"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" width="180"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 459 - 0
.history/src/components/callRecord/CallRecordManager_20211029103753.vue

@@ -0,0 +1,459 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 459 - 0
.history/src/components/callRecord/CallRecordManager_20211029103824.vue

@@ -0,0 +1,459 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 460 - 0
.history/src/components/callRecord/CallRecordManager_20211029104225.vue

@@ -0,0 +1,460 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 460 - 0
.history/src/components/callRecord/CallRecordManager_20211029104253.vue

@@ -0,0 +1,460 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容"></el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 464 - 0
.history/src/components/callRecord/CallRecordManager_20211029104339.vue

@@ -0,0 +1,464 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 464 - 0
.history/src/components/callRecord/CallRecordManager_20211029104414.vue

@@ -0,0 +1,464 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <el-table :data="list" border style="width: 100%" center>
+        <!-- <el-table-column type="index" :index="indexMethod" label="编号" width="60"></el-table-column> -->
+        <el-table-column prop="parDescription" label="患者标识">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 464 - 0
.history/src/components/callRecord/CallRecordManager_20211029104428.vue

@@ -0,0 +1,464 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 464 - 0
.history/src/components/callRecord/CallRecordManager_20211029104504.vue

@@ -0,0 +1,464 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 464 - 0
.history/src/components/callRecord/CallRecordManager_20211029104623.vue

@@ -0,0 +1,464 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 467 - 0
.history/src/components/callRecord/CallRecordManager_20211029104745.vue

@@ -0,0 +1,467 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 469 - 0
.history/src/components/callRecord/CallRecordManager_20211029105018.vue

@@ -0,0 +1,469 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        
+
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 469 - 0
.history/src/components/callRecord/CallRecordManager_20211029105045.vue

@@ -0,0 +1,469 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 469 - 0
.history/src/components/callRecord/CallRecordManager_20211029105105.vue

@@ -0,0 +1,469 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 472 - 0
.history/src/components/callRecord/CallRecordManager_20211029105209.vue

@@ -0,0 +1,472 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 475 - 0
.history/src/components/callRecord/CallRecordManager_20211029105359.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 475 - 0
.history/src/components/callRecord/CallRecordManager_20211029105428.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 475 - 0
.history/src/components/callRecord/CallRecordManager_20211029105622.vue

@@ -0,0 +1,475 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 486 - 0
.history/src/components/callRecord/CallRecordManager_20211029105923.vue

@@ -0,0 +1,486 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="日期">
+          <el-date-picker
+            v-model="date"
+            type="datetimerange"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            :default-time="['12:00:00']"
+            format="yyyy-MM-dd"
+            value-format="yyyy-MM-dd"
+          >
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 487 - 0
.history/src/components/callRecord/CallRecordManager_20211029110047.vue

@@ -0,0 +1,487 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="日期">
+          <el-date-picker
+            v-model="date"
+            size="small"
+            type="datetimerange"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            :default-time="['12:00:00']"
+            format="yyyy-MM-dd"
+            value-format="yyyy-MM-dd"
+          >
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 481 - 0
.history/src/components/callRecord/CallRecordManager_20211029110406.vue

@@ -0,0 +1,481 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="日期">
+          <el-date-picker
+            v-model="value1"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 482 - 0
.history/src/components/callRecord/CallRecordManager_20211029110427.vue

@@ -0,0 +1,482 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="日期">
+          <el-date-picker
+            v-model="value1"
+            size="small"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 482 - 0
.history/src/components/callRecord/CallRecordManager_20211029110434.vue

@@ -0,0 +1,482 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="日期">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 482 - 0
.history/src/components/callRecord/CallRecordManager_20211029110512.vue

@@ -0,0 +1,482 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 490 - 0
.history/src/components/callRecord/CallRecordManager_20211029110531.vue

@@ -0,0 +1,490 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 500 - 0
.history/src/components/callRecord/CallRecordManager_20211029110858.vue

@@ -0,0 +1,500 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    .el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 500 - 0
.history/src/components/callRecord/CallRecordManager_20211029110955.vue

@@ -0,0 +1,500 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    .el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 501 - 0
.history/src/components/callRecord/CallRecordManager_20211029111200.vue

@@ -0,0 +1,501 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item> -->
+      </el-form>
+      <el-form-item label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    .el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 500 - 0
.history/src/components/callRecord/CallRecordManager_20211029111214.vue

@@ -0,0 +1,500 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <!-- <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form> -->
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    .el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 497 - 0
.history/src/components/callRecord/CallRecordManager_20211029111331.vue

@@ -0,0 +1,497 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item> -->
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    .el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 495 - 0
.history/src/components/callRecord/CallRecordManager_20211029111416.vue

@@ -0,0 +1,495 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item> -->
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    .el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 497 - 0
.history/src/components/callRecord/CallRecordManager_20211029111433.vue

@@ -0,0 +1,497 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item> -->
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    .el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 497 - 0
.history/src/components/callRecord/CallRecordManager_20211029111438.vue

@@ -0,0 +1,497 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item> -->
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    .el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 497 - 0
.history/src/components/callRecord/CallRecordManager_20211029111536.vue

@@ -0,0 +1,497 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine">
+        
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    .el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 496 - 0
.history/src/components/callRecord/CallRecordManager_20211029111613.vue

@@ -0,0 +1,496 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+        <el-form class="secLine">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    .el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 496 - 0
.history/src/components/callRecord/CallRecordManager_20211029111639.vue

@@ -0,0 +1,496 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+        <el-form class="secLine">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 496 - 0
.history/src/components/callRecord/CallRecordManager_20211029111712.vue

@@ -0,0 +1,496 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: ">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+        <el-form class="secLine">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 496 - 0
.history/src/components/callRecord/CallRecordManager_20211029111749.vue

@@ -0,0 +1,496 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: &nbsp;&nbsp;">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间:&nbsp;&nbsp;">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+        <el-form class="secLine">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 496 - 0
.history/src/components/callRecord/CallRecordManager_20211029111815.vue

@@ -0,0 +1,496 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间:&nbsp;&nbsp;">
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+        <el-form class="secLine">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 496 - 0
.history/src/components/callRecord/CallRecordManager_20211029111826.vue

@@ -0,0 +1,496 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+        <el-form class="secLine">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 496 - 0
.history/src/components/callRecord/CallRecordManager_20211029112024.vue

@@ -0,0 +1,496 @@
+<template>
+  <div>
+    <crumbs title="调用记录" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+        <el-form class="secLine" :inline="true">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 496 - 0
.history/src/components/callRecord/CallRecordManager_20211029112116.vue

@@ -0,0 +1,496 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+        <el-form class="secLine" :inline="true">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 513 - 0
.history/src/components/callRecord/CallRecordManager_20211029112200.vue

@@ -0,0 +1,513 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+
+        <!-- <el-form class="secLine" :inline="true">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form> -->
+
+      <el-form class="secLine" :inline="true">
+        <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="handleMatchData">预匹配</el-button>
+
+          <el-button size="mini" @click="importPage" style="margin:0 10px">{{uploadInfo}}</el-button>
+          <input type="file" name="uploadfile " id="upFileMatch" @change="uploadFileMatch($event)" />
+          <el-button size="mini" @click="exportData">导出</el-button>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" type="warning" @click="addRelation">添加关联</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 514 - 0
.history/src/components/callRecord/CallRecordManager_20211029112229.vue

@@ -0,0 +1,514 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+
+        <!-- <el-form class="secLine" :inline="true">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form> -->
+
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+          <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="handleMatchData">预匹配</el-button>
+
+          <el-button size="mini" @click="importPage" style="margin:0 10px">{{uploadInfo}}</el-button>
+          <input type="file" name="uploadfile " id="upFileMatch" @change="uploadFileMatch($event)" />
+          <el-button size="mini" @click="exportData">导出</el-button>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" type="warning" @click="addRelation">添加关联</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 503 - 0
.history/src/components/callRecord/CallRecordManager_20211029112245.vue

@@ -0,0 +1,503 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+
+        <!-- <el-form class="secLine" :inline="true">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form> -->
+
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+          
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 503 - 0
.history/src/components/callRecord/CallRecordManager_20211029112306.vue

@@ -0,0 +1,503 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+
+        <!-- <el-form class="secLine" :inline="true">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form> -->
+
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 503 - 0
.history/src/components/callRecord/CallRecordManager_20211029112353.vue

@@ -0,0 +1,503 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item> -->
+        <!-- <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item> -->
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+
+        <!-- <el-form class="secLine" :inline="true">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form> -->
+
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 489 - 0
.history/src/components/callRecord/CallRecordManager_20211029112506.vue

@@ -0,0 +1,489 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+
+        <!-- <el-form class="secLine" :inline="true">
+          <el-form-item>
+            <el-button size="mini" @click="filterDatas">检索</el-button>
+          </el-form-item>
+      </el-form> -->
+
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 482 - 0
.history/src/components/callRecord/CallRecordManager_20211029112527.vue

@@ -0,0 +1,482 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 481 - 0
.history/src/components/callRecord/CallRecordManager_20211029112643.vue

@@ -0,0 +1,481 @@
+<template>
+  <div>
+    <crumbs title="规则维护" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="规则名称" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="规则类型" width="150">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="医学标准术语" width="160">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parConceptName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="术语类型" width="150"></el-table-column>
+        <el-table-column prop="parHasSub" label="有无子条件" width="100">
+          <template slot-scope="scope">{{scope.row.parHasSub == '0'?'无':'有'}}</template>
+        </el-table-column>
+        <el-table-column label="状态">
+          <template slot-scope="scope">
+            <span>{{scope.row.parStatus === 0?'禁用':'启用'}}</span>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="操作时间" width="180"></el-table-column>
+        <el-table-column label="操作" width="180" fixed="right">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">修改</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button type="text" size="small" @click="editData(scope.row.parId,true)">复制</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              :class="scope.row.parStatus === 0?'':'unvailable'"
+              @click="showDelDialog(scope.row)"
+            >{{scope.row.parStatus === 0?'启用':'禁用'}}</el-button>
+            <span style="margin:0 3px;">|</span>
+            <el-button
+              type="text"
+              size="small"
+              class="delete"
+              @click="showDelDialog(scope.row,1)"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 464 - 0
.history/src/components/callRecord/CallRecordManager_20211029112736.vue

@@ -0,0 +1,464 @@
+<template>
+  <div>
+    <crumbs title="规则维护" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="规则名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 464 - 0
.history/src/components/callRecord/CallRecordManager_20211029112823.vue

@@ -0,0 +1,464 @@
+<template>
+  <div>
+    <crumbs title="规则维护" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 467 - 0
.history/src/components/callRecord/CallRecordManager_20211029112838.vue

@@ -0,0 +1,467 @@
+<template>
+  <div>
+    <crumbs title="规则维护" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 485 - 0
.history/src/components/callRecord/CallRecordManager_20211029112910.vue

@@ -0,0 +1,485 @@
+<template>
+  <div>
+    <crumbs title="规则维护" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+</style>

+ 493 - 0
.history/src/components/callRecord/CallRecordManager_20211029112951.vue

@@ -0,0 +1,493 @@
+<template>
+  <div>
+    <crumbs title="规则维护" :minWidth="titleWidth" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+
+        <el-form-item label="规则类型:">
+          <el-select v-model="filter.parRuleType" clearable placeholder="请选择" size="mini">
+            <el-option
+              v-for="item in ruleTypeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="医学标准术语:">
+          <el-input size="mini" v-model="filter.parConceptName" placeholder="输入医学标准术语" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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-form-item>
+      </el-form>
+      <el-form class="secLine">
+        <el-form-item>
+          <el-button size="mini" @click="addRule" type="warning" style="margin:0 10px">+ 新增规则</el-button>
+          <el-button size="mini" @click="update">更新数据</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+</style>

+ 482 - 0
.history/src/components/callRecord/CallRecordManager_20211029113036.vue

@@ -0,0 +1,482 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: 1, name: '启用' },
+        { id: 0, name: '禁用' }
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 483 - 0
.history/src/components/callRecord/CallRecordManager_20211029113307.vue

@@ -0,0 +1,483 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+  
+ 
+</style>

+ 489 - 0
.history/src/components/callRecord/CallRecordManager_20211029113837.vue

@@ -0,0 +1,489 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+
+.el-date-editor {
+  .el-input {
+    width: 150px;
+  }
+}
+  
+ 
+</style>

+ 489 - 0
.history/src/components/callRecord/CallRecordManager_20211029113848.vue

@@ -0,0 +1,489 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+
+.el-date-editor {
+  /deep/.el-input {
+    width: 150px;
+  }
+}
+  
+ 
+</style>

+ 489 - 0
.history/src/components/callRecord/CallRecordManager_20211029113859.vue

@@ -0,0 +1,489 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+
+/deep/.el-date-editor {
+  /deep/.el-input {
+    width: 150px;
+  }
+}
+  
+ 
+</style>

+ 489 - 0
.history/src/components/callRecord/CallRecordManager_20211029113908.vue

@@ -0,0 +1,489 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+
+/deep/.el-date-editor {
+  /deep/.el-input {
+    width: 150px !important;
+  }
+}
+  
+ 
+</style>

+ 491 - 0
.history/src/components/callRecord/CallRecordManager_20211029114000.vue

@@ -0,0 +1,491 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            width="150"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            width="150"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+
+/deep/.el-date-editor {
+  /deep/.el-input {
+    width: 150px !important;
+  }
+}
+  
+ 
+</style>

+ 491 - 0
.history/src/components/callRecord/CallRecordManager_20211029114012.vue

@@ -0,0 +1,491 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            width="150px"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            width="150px"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+
+/deep/.el-date-editor {
+  /deep/.el-input {
+    width: 150px !important;
+  }
+}
+  
+ 
+</style>

+ 491 - 0
.history/src/components/callRecord/CallRecordManager_20211029114034.vue

@@ -0,0 +1,491 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: " width="150px"> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            width="150px"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+
+/deep/.el-date-editor {
+  /deep/.el-input {
+    width: 150px !important;
+  }
+}
+  
+ 
+</style>

+ 491 - 0
.history/src/components/callRecord/CallRecordManager_20211029114042.vue

@@ -0,0 +1,491 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: " width="150"> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            width="150px"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+
+/deep/.el-date-editor {
+  /deep/.el-input {
+    width: 150px !important;
+  }
+}
+  
+ 
+</style>

+ 489 - 0
.history/src/components/callRecord/CallRecordManager_20211029114100.vue

@@ -0,0 +1,489 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+
+/deep/.el-date-editor {
+  /deep/.el-input {
+    width: 150px !important;
+  }
+}
+  
+ 
+</style>

+ 487 - 0
.history/src/components/callRecord/CallRecordManager_20211029114145.vue

@@ -0,0 +1,487 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+
+.el-input__inner {
+  width: 150px;
+}
+  
+ 
+</style>

+ 487 - 0
.history/src/components/callRecord/CallRecordManager_20211029114155.vue

@@ -0,0 +1,487 @@
+<template>
+  <div>
+    <crumbs title="调用记录"  style="min-width: 980px" class="knowledgeTitle">
+      <el-form :inline="true" class="demo-form-inline">
+        <el-form-item label="患者标识:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="服务名称:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item label="接收时间: "> &nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="响应时间: ">&nbsp;&nbsp;
+          <el-date-picker
+            v-model="value1"
+            size="mini"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态:">
+          <el-select v-model="filter.parStatus" 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 label="院区:">
+          <el-input size="mini" v-model="filter.parDescription" placeholder="输入规则名称" clearable></el-input>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button size="mini" @click="filterDatas">确认</el-button>
+        </el-form-item> -->
+      </el-form>
+      <el-form class="secLine" :inline="true">
+        <el-form-item>
+          <el-button size="mini" @click="filterDatas">检索</el-button>
+        </el-form-item>
+      </el-form>
+    </crumbs>
+    <div class="contents knowledgeContents">
+      <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="parDescription" label="患者标识" align="center">
+          <template slot-scope="scope">
+            <!--<el-tooltip
+              v-if="scope.row.parDescription.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parDescription"
+              placement="top"
+            >
+              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <span>{{scope.row.parDescription}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parRuleType" label="服务名" align="center">
+          <template slot-scope="scope">{{statusTrans(scope.row.parRuleType)}}</template>
+        </el-table-column>
+        <el-table-column prop="parConceptName" label="请求内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+            <!--<el-tooltip
+              v-if="scope.row.parConceptName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.parConceptName"
+              placement="top"
+            >
+              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
+            </el-tooltip>-->
+            <!-- <span>{{scope.row.parConceptName}}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="parLibTypeName" label="响应内容" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)">详情</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="gmtModified" label="接收时间" align="center"></el-table-column>
+        <el-table-column prop="gmtModified" label="回应时间" align="center"></el-table-column>
+        <!-- <el-table-column prop="modifierName" label="操作人">
+          <template slot-scope="scope">
+            <el-tooltip
+              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
+              class="item"
+              effect="dark"
+              :content="scope.row.modifierName"
+              placement="top"
+            >
+              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
+            </el-tooltip>
+            <span
+              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
+            >{{scope.row.modifierName}}</span>
+          </template>
+        </el-table-column> -->
+        <el-table-column prop="gmtModified" label="耗时(ms)" align="center"></el-table-column>
+        <el-table-column label="状态" width="100" fixed="right" align="center">
+          <template slot-scope="scope">
+            <el-button type="text" size="small" @click="editData(scope.row.parId)" align="center">成功</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <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/knowledgeLib.js';
+import config from '@api/config.js';
+import utils from '@api/utils.js';
+
+export default {
+  name: 'ZskRuleManager',
+  data: function() {
+    return {
+      list: [],
+      stateSelect: [
+        { id: '', name: '全部' },
+        { id: 0, name: '成功' },
+        { id: 1, name: '失败' },
+      ],
+      ruleTypeList: [],
+      searched: false,
+      filter: {
+        parStatus: '',
+        parDescription: '',
+        parConceptName: '',
+        parRuleType: ''
+      },
+      cacheData: {},
+      currentPage: 1,
+      pageSize: config.pageSize,
+      pageSizeArr: config.pageSizeArr,
+      pageLayout: config.pageLayout,
+      total: 0,
+      titleWidth: '970px' //头部最小宽度
+    };
+  },
+  created() {
+    const param = this.$route.params;
+    if (param.currentPage) {
+      this.inCurrentPage = param.currentPage;
+    }
+    if (param.filter) {
+      this.filter = param.filter;
+    }
+    this.getTypeList();
+    const that = this;
+    //返回时避免参数未赋值就获取列表
+    setTimeout(function() {
+      that.getDataList();
+    });
+    this.getDict();
+  },
+  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: {
+    getDict() {
+      api
+        .zskgetDict()
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            const arr = data['20'].map(it => it.val);
+            //this.dict = arr.join(",");
+            //this.msgDict=(data['21'].map((it)=>it.val)||[]).join(",");
+            localStorage.setItem('zskDicts', arr.join(','));
+            localStorage.setItem(
+              'zskMsgDict',
+              (data['21'].map(it => it.val) || []).join(',')
+            );
+            localStorage.setItem('zskNumDict', data['22'][0].val);
+            localStorage.setItem('zskSubDict', (data['23'].map(it => it.val) || []).join(','));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    statusTrans(type) {
+      const obj = this.ruleTypeList.find(it => it.type === type);
+      return obj && obj.name;
+    },
+    getTypeList() {
+      api
+        .getTypesList({ planCode: 'rule'})
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.ruleTypeList = data;
+            localStorage.setItem('zskTypesList', JSON.stringify(data));
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.currentPage = utils.getCurrentPage(
+        this.currentPage,
+        this.total,
+        this.pageSize
+      );
+      this.getDataList();
+    },
+    addRule() {
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      this.$router.push({ name: 'AddZskRule', params: pam });
+    },
+    filterDatas() {
+      this.currentPage = 1;
+      this.getDataList(1);
+    },
+    getDataList(flag, 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
+        .getRulesList(params)
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            for (let j = 0; j < data.records.length; j++) {
+              data.records[j].condition =
+                data.records[j].parStatus == '1' ? '启用' : '禁用';
+            }
+            this.list = data.records;
+            if (!flag) {
+              //搜索时不缓存
+              this.cacheData[params.current] = data.records;
+            } else {
+              this.cacheData = {};
+            }
+            this.total = data.total;
+            if (this.inCurrentPage !== undefined) {
+              this.currentPage = this.inCurrentPage;
+              this.inCurrentPage = undefined;
+            }
+          } else {
+            this.warning(res.data.msg || '获取列表数据失败');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          console.log(error);
+        });
+    },
+    getFilterItems(isTurnPage) {
+      //翻页时筛选条件没点确定则清空
+      if (isTurnPage && !this.searched) {
+        this.clearFilter();
+      }
+      const param = {
+        current: this.inCurrentPage || this.currentPage,
+        size: this.pageSize,
+        parRuleType: this.filter.parRuleType,
+        parDescription: this.filter.parDescription.trim(),
+        parConceptName: this.filter.parConceptName.trim(),
+        parStatus: this.filter.parStatus
+      };
+      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(1, true);
+      //}
+    },
+    warning(msg, type) {
+      this.$message({
+        showClose: true,
+        message: msg,
+        type: type || 'warning'
+      });
+    },
+    showConfirmDialog(msg, resolve) {
+      this.$alert(msg, '提示', {
+        confirmButtonText: '确定',
+        type: 'warning'
+      })
+        .then(() => {
+          resolve();
+        })
+        .catch(() => {});
+    },
+    editData(id, isCopy) {
+      this.getTypeList()
+      const pam = this.searched
+        ? {
+            currentPage: this.currentPage,
+            pageSize: this.pageSize,
+            filter: this.filter
+          }
+        : { currentPage: this.currentPage, pageSize: this.pageSize };
+      api
+        .ruleDetail({ id })
+        .then(res => {
+          if (res.data.code == '0') {
+            const data = res.data.data;
+            this.$router.push({
+              name: 'AddZskRule',
+              params: { ...pam, data, copy: isCopy }
+            });
+          }
+        })
+        .catch(error => {
+          this.warning('获取详情失败,请重试');
+        });
+    },
+    showDelDialog(row, isDelete) {
+      const params = {
+        id: row.parId
+      };
+      const txt = row.parStatus === 0 ? '重新启用' : '禁用';
+      const warningTxt = isDelete
+        ? '是否删除该规则?可能对现有系统造成影响'
+        : '是否' + txt + '该条数据?';
+      const handleFn = isDelete
+        ? api.deleteRule
+        : row.parStatus === 0
+        ? api.saveRuleApply
+        : api.deleteRuleApply;
+      this.showConfirmDialog(warningTxt, () => {
+        handleFn(params)
+          .then(res => {
+            if (res.data.code == '0') {
+              if (!this.searched) {
+                //未点确认时清空搜索条件
+                this.clearFilter();
+              }
+              if (isDelete) {
+                //恢复成功后跳转到筛选条件的首页
+                this.currentPage = 1;
+              } else {
+                if (this.filter.parStatus !== '' && this.list.length === 1) {
+                  //有启用状态筛选条件且当前页只有最后一条数据删除时,删除成功后跳转到前一页
+                  this.currentPage =
+                    this.currentPage === 1 ? 1 : this.currentPage - 1;
+                }
+              }
+              this.warning(res.data.msg || '操作成功', 'success');
+              this.getDataList();
+            } else {
+              this.warning(res.data.msg);
+            }
+          })
+          .catch(error => {
+            this.warning(error);
+          });
+      });
+    },
+    clearFilter() {
+      this.filter = {
+        parStatus: '',
+        parConceptName: '',
+        parDescription: '',
+        parRuleType: ''
+      };
+    },
+    update() {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      api
+        .zskUpdateAll()
+        .then(res => {
+          loading.close();
+          if (res.data.code == '0') {
+            this.warning('更新成功', 'success');
+            this.getDataList();
+          } else {
+            this.warning(res.data.msg || '更新失败,请重试');
+          }
+        })
+        .catch(error => {
+          loading.close();
+          this.warning('更新失败,请重试');
+        });
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+@import '../../less/admin.less';
+/deep/ .container.knowledgeTitle {
+  height: 80px;
+}
+/deep/ .contents.knowledgeContents {
+  padding: 104px 20px 0;
+}
+/deep/ .secLine.el-form {
+  float: right;
+  display: block;
+  position: relative;
+  top: -5px;
+}
+.delete {
+  color: red;
+}
+.review {
+  color: #22ccc8;
+}
+.el-table .cell {
+  overflow: hidden;
+  white-space: nowrap;
+}
+#upFile {
+  display: none !important;
+}
+.unvailable {
+  color: #fe7d3d;
+  &:hover {
+    color: #f19061;
+  }
+}
+
+.demo-form-inline {
+  .el-input--mini {
+    /deep/.el-input__inner {
+      width: 100%;
+    }
+  }
+}
+
+/deep/.el-input__inner {
+  width: 150px;
+}
+  
+ 
+</style>

+ 0 - 0
.history/src/components/callRecord/CallRecordManager_20211029114237.vue


Some files were not shown because too many files changed in this diff