vue2-client 1.15.67 → 1.15.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +0 -10
  2. package/package.json +1 -1
  3. package/src/base-client/components/common/XFormTable/demo.vue +2 -2
  4. package/src/base-client/components/common/XTable/XTableWrapper.vue +1 -1
  5. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +43 -51
  6. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  7. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  8. package/src/router/async/router.map.js +2 -2
  9. package/src/utils/EncryptUtil.js +87 -0
  10. package/src/utils/request.js +12 -0
  11. package/vue.config.js +1 -1
  12. package/.history/public/his/editor/editor_20250606134713.html +0 -51
  13. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +0 -509
  14. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +0 -524
  15. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +0 -524
  16. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +0 -524
  17. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172825.vue +0 -207
  18. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172945.vue +0 -211
  19. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172949.vue +0 -212
  20. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611173010.vue +0 -212
  21. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +0 -1320
  22. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +0 -1332
  23. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +0 -1331
  24. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +0 -1331
  25. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +0 -1331
  26. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +0 -1339
  27. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612092804.vue +0 -731
  28. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612112546.vue +0 -748
  29. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612113808.vue +0 -748
  30. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115237.vue +0 -1071
  31. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115346.vue +0 -1078
  32. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115350.vue +0 -1077
  33. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115415.vue +0 -1077
  34. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115429.vue +0 -1077
  35. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +0 -442
  36. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +0 -442
  37. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +0 -442
  38. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +0 -475
  39. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +0 -475
  40. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +0 -475
  41. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +0 -477
  42. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +0 -477
  43. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +0 -477
  44. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +0 -473
  45. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +0 -473
  46. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +0 -473
  47. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +0 -473
  48. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +0 -473
  49. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +0 -473
  50. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +0 -473
  51. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +0 -473
  52. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +0 -473
  53. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +0 -473
  54. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +0 -474
  55. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +0 -474
  56. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +0 -474
  57. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +0 -472
  58. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +0 -472
  59. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +0 -472
  60. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +0 -472
  61. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +0 -472
  62. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +0 -472
  63. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +0 -501
  64. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +0 -501
  65. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +0 -501
  66. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +0 -504
  67. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +0 -504
  68. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +0 -504
  69. package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +0 -131
  70. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +0 -160
  71. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +0 -160
  72. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +0 -160
  73. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +0 -158
  74. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +0 -173
  75. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +0 -222
  76. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +0 -229
  77. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +0 -229
  78. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +0 -229
  79. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +0 -241
  80. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +0 -241
  81. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +0 -241
  82. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +0 -245
  83. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +0 -245
  84. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +0 -245
  85. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +0 -255
  86. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +0 -255
  87. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +0 -255
  88. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +0 -270
  89. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +0 -270
  90. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +0 -270
  91. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +0 -270
  92. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +0 -294
  93. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +0 -294
  94. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +0 -294
  95. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +0 -303
  96. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +0 -303
  97. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +0 -303
  98. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +0 -288
  99. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +0 -288
  100. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +0 -288
  101. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +0 -317
  102. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +0 -306
  103. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +0 -306
  104. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +0 -306
  105. package/.history/src/base-client/components/his/XList/XList_20250704142024.vue +0 -495
  106. package/.history/src/base-client/components/his/XList/XList_20250704142033.vue +0 -495
  107. package/.history/src/base-client/components/his/XList/XList_20250704142040.vue +0 -494
  108. package/.history/src/base-client/components/his/XList/XList_20250704142211.vue +0 -494
  109. package/.history/src/base-client/components/his/XList/XList_20250704142214.vue +0 -494
  110. package/.history/src/base-client/components/his/XList/XList_20250704143010.vue +0 -495
  111. package/.history/src/base-client/components/his/XList/XList_20250704143203.vue +0 -495
  112. package/.history/src/base-client/components/his/XList/XList_20250707095101.vue +0 -492
  113. package/.history/src/base-client/components/his/XList/XList_20250707100152.vue +0 -492
  114. package/.history/src/base-client/components/his/XList/XList_20250707100200.vue +0 -485
  115. package/.history/src/base-client/components/his/XList/XList_20250707100208.vue +0 -485
  116. package/.history/src/base-client/components/his/XList/XList_20250707100259.vue +0 -488
  117. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250609151519.vue +0 -222
  118. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155514.vue +0 -183
  119. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155556.vue +0 -183
  120. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155600.vue +0 -183
  121. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181609.vue +0 -206
  122. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181629.vue +0 -209
  123. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095553.vue +0 -242
  124. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095610.vue +0 -242
  125. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095612.vue +0 -242
  126. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100041.vue +0 -251
  127. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100047.vue +0 -251
  128. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100054.vue +0 -250
  129. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100105.vue +0 -250
  130. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100107.vue +0 -250
  131. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100114.vue +0 -250
  132. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140844.vue +0 -238
  133. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140910.vue +0 -238
  134. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140912.vue +0 -238
  135. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +0 -36
  136. package/src/base-client/components/TreeList/TreeList.vue +0 -91
  137. package/src/base-client/components/TreeList/TreeNode.vue +0 -81
  138. package/src/base-client/components/common/XCardSet/XTiltle.vue +0 -191
@@ -1,111 +1,111 @@
1
- <template>
2
- <!-- 根据实际部署环境修改 editor.html 的路径 -->
3
- <iframe
4
- src="/his/editor/editor.html"
5
- width="100%"
6
- height="800"
7
- frameborder="0"
8
- @load="onIframeLoad"
9
- ref="editorIframe">
10
- </iframe>
11
- </template>
12
-
13
- <script setup>
14
-
15
- import { ref, onBeforeUnmount } from 'vue'
16
-
17
- const editorIframe = ref(null)
18
- const checkEditorTimer = ref(null)
19
- const checkCount = ref(0)
20
- const editor = ref(null)
21
- const iframeWindow = ref(null)
22
- // 对外暴露的获取editor方法
23
- const getEditor = () => {
24
- if (editor.value) {
25
- return editor.value
26
- }
27
- if (iframeWindow.value && iframeWindow.value.editor) {
28
- editor.value = iframeWindow.value.editor
29
- return editor.value
30
- }
31
- if (editorIframe.value && editorIframe.value.contentWindow && editorIframe.value.contentWindow.editor) {
32
- editor.value = editorIframe.value.contentWindow.editor
33
- return editor.value
34
- }
35
- return null
36
- }
37
- // 创建体温单方法
38
- const createVitalSigns = (data) => {
39
- const editorObj = getEditor()
40
- if (!editorObj) {
41
- throw new Error('editor对象未初始化,无法创建体温单')
42
- }
43
- if (typeof editorObj.createVitalSigns === 'function') {
44
- return editorObj.createVitalSigns(data)
45
- } else {
46
- throw new Error('editor对象未包含createVitalSigns方法')
47
- }
48
- }
49
-
50
- // 检查editor对象是否已初始化
51
- const startEditorCheck = (frameWindow, iframe) => {
52
- if (checkEditorTimer.value) {
53
- clearInterval(checkEditorTimer.value)
54
- }
55
- checkCount.value = 0
56
- checkEditorTimer.value = setInterval(() => {
57
- checkCount.value++
58
- try {
59
- const editorObj = frameWindow.editor
60
- if (editorObj && typeof editorObj.createVitalSigns === 'function') {
61
- clearInterval(checkEditorTimer.value)
62
- editor.value = editorObj
63
- // 将editor对象暴露到全局
64
- window.iframeEditor = editorObj
65
- window.iframeWindow = frameWindow
66
- // 触发事件
67
- emit('editor-ready', editorObj)
68
- emit('load', { target: iframe, editor: editorObj })
69
- // 发送消息通知
70
- window.parent.postMessage({ type: 'editorReady' }, '*')
71
- }
72
- } catch (err) {
73
- console.error('检查editor对象时出错:', err)
74
- }
75
- if (checkCount.value >= 20) {
76
- clearInterval(checkEditorTimer.value)
77
- console.error('Editor 对象加载失败')
78
- }
79
- }, 500)
80
- }
81
- // iframe加载完成的处理
82
- const onIframeLoad = (e) => {
83
- const iframe = e.target
84
- const frameWindow = iframe.contentWindow
85
- iframeWindow.value = frameWindow
86
- if (!frameWindow) {
87
- console.error('无法访问 iframe 内容')
88
- return
89
- }
90
- startEditorCheck(frameWindow, iframe)
91
- }
92
- // 组件销毁前清理
93
- onBeforeUnmount(() => {
94
- if (checkEditorTimer.value) {
95
- clearInterval(checkEditorTimer.value)
96
- }
97
- })
98
- // 暴露方法给父组件
99
- defineExpose({ getEditor, createVitalSigns })
100
-
101
- // 定义事件
102
- const emit = defineEmits(['editor-ready', 'load'])
103
- </script>
104
-
105
- <style scoped>
106
- iframe {
107
- border: none;
108
- width: 100%;
109
- min-height: 800px;
110
- }
111
- </style>
1
+ <template>
2
+ <!-- 根据实际部署环境修改 editor.html 的路径 -->
3
+ <iframe
4
+ src="/his/editor/editor.html"
5
+ width="100%"
6
+ height="800"
7
+ frameborder="0"
8
+ @load="onIframeLoad"
9
+ ref="editorIframe">
10
+ </iframe>
11
+ </template>
12
+
13
+ <script setup>
14
+
15
+ import { ref, onBeforeUnmount } from 'vue'
16
+
17
+ const editorIframe = ref(null)
18
+ const checkEditorTimer = ref(null)
19
+ const checkCount = ref(0)
20
+ const editor = ref(null)
21
+ const iframeWindow = ref(null)
22
+ // 对外暴露的获取editor方法
23
+ const getEditor = () => {
24
+ if (editor.value) {
25
+ return editor.value
26
+ }
27
+ if (iframeWindow.value && iframeWindow.value.editor) {
28
+ editor.value = iframeWindow.value.editor
29
+ return editor.value
30
+ }
31
+ if (editorIframe.value && editorIframe.value.contentWindow && editorIframe.value.contentWindow.editor) {
32
+ editor.value = editorIframe.value.contentWindow.editor
33
+ return editor.value
34
+ }
35
+ return null
36
+ }
37
+ // 创建体温单方法
38
+ const createVitalSigns = (data) => {
39
+ const editorObj = getEditor()
40
+ if (!editorObj) {
41
+ throw new Error('editor对象未初始化,无法创建体温单')
42
+ }
43
+ if (typeof editorObj.createVitalSigns === 'function') {
44
+ return editorObj.createVitalSigns(data)
45
+ } else {
46
+ throw new Error('editor对象未包含createVitalSigns方法')
47
+ }
48
+ }
49
+
50
+ // 检查editor对象是否已初始化
51
+ const startEditorCheck = (frameWindow, iframe) => {
52
+ if (checkEditorTimer.value) {
53
+ clearInterval(checkEditorTimer.value)
54
+ }
55
+ checkCount.value = 0
56
+ checkEditorTimer.value = setInterval(() => {
57
+ checkCount.value++
58
+ try {
59
+ const editorObj = frameWindow.editor
60
+ if (editorObj && typeof editorObj.createVitalSigns === 'function') {
61
+ clearInterval(checkEditorTimer.value)
62
+ editor.value = editorObj
63
+ // 将editor对象暴露到全局
64
+ window.iframeEditor = editorObj
65
+ window.iframeWindow = frameWindow
66
+ // 触发事件
67
+ emit('editor-ready', editorObj)
68
+ emit('load', { target: iframe, editor: editorObj })
69
+ // 发送消息通知
70
+ window.parent.postMessage({ type: 'editorReady' }, '*')
71
+ }
72
+ } catch (err) {
73
+ console.error('检查editor对象时出错:', err)
74
+ }
75
+ if (checkCount.value >= 20) {
76
+ clearInterval(checkEditorTimer.value)
77
+ console.error('Editor 对象加载失败')
78
+ }
79
+ }, 500)
80
+ }
81
+ // iframe加载完成的处理
82
+ const onIframeLoad = (e) => {
83
+ const iframe = e.target
84
+ const frameWindow = iframe.contentWindow
85
+ iframeWindow.value = frameWindow
86
+ if (!frameWindow) {
87
+ console.error('无法访问 iframe 内容')
88
+ return
89
+ }
90
+ startEditorCheck(frameWindow, iframe)
91
+ }
92
+ // 组件销毁前清理
93
+ onBeforeUnmount(() => {
94
+ if (checkEditorTimer.value) {
95
+ clearInterval(checkEditorTimer.value)
96
+ }
97
+ })
98
+ // 暴露方法给父组件
99
+ defineExpose({ getEditor, createVitalSigns })
100
+
101
+ // 定义事件
102
+ const emit = defineEmits(['editor-ready', 'load'])
103
+ </script>
104
+
105
+ <style scoped>
106
+ iframe {
107
+ border: none;
108
+ width: 100%;
109
+ min-height: 800px;
110
+ }
111
+ </style>
@@ -57,10 +57,10 @@ path: 'example',
57
57
  // component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo.vue'),
58
58
  // component: () => import('@vue2-client/pages/addressSelect/addressDemo.vue'),
59
59
  // component: () => import('@vue2-client/base-client/components/common/XDescriptions/demo.vue'),
60
- component: () => import('@vue2-client/base-client/components/common/XAddNativeForm/demo.vue'),
60
+ // component: () => import('@vue2-client/base-client/components/common/XAddNativeForm/demo.vue'),
61
61
  // component: () => import('@vue2-client/base-client/components/common/XFormGroup/demo.vue'),
62
62
  // component: () => import('@vue2-client/base-client/components/common/XReport/XReportDemo.vue'),
63
- // component: () => import('@vue2-client/base-client/components/common/XFormTable/demo.vue'),
63
+ component: () => import('@vue2-client/base-client/components/common/XFormTable/demo.vue'),
64
64
  // component: () => import('@vue2-client/base-client/components/common/XDatePicker/demo.vue'),
65
65
  // component: () => import('@vue2-client/base-client/components/common/XTab/XTabDemo.vue'),
66
66
  // component: () => import('@vue2-client/base-client/components/common/XRate/demo.vue'),
@@ -71,5 +71,92 @@ export default {
71
71
  const encryptedBase64 = encrypted.toString()
72
72
 
73
73
  return `${ivBase64}:${encryptedBase64}`
74
+ },
75
+ /**
76
+ * AES CBC模式解密
77
+ *
78
+ * @param combinedText 格式:Base64(iv):Base64(ciphertext)
79
+ * @param hexKey 十六进制格式的加密密钥
80
+ * @returns 解密后的原始字符串
81
+ */
82
+ AESDecryptCBC (combinedText, hexKey) {
83
+ try {
84
+ // 分离 IV 和 密文
85
+ const parts = combinedText.split(':')
86
+ if (parts.length !== 2) {
87
+ throw new Error('Invalid encrypted data format')
88
+ }
89
+
90
+ const ivBase64 = parts[0]
91
+ const encryptedBase64 = parts[1]
92
+
93
+ // 解析IV和密文
94
+ const iv = CryptoJS.enc.Base64.parse(ivBase64)
95
+ const key = CryptoJS.enc.Hex.parse(hexKey)
96
+
97
+ // 解密
98
+ const decrypted = CryptoJS.AES.decrypt(encryptedBase64, key, {
99
+ iv,
100
+ mode: CryptoJS.mode.CBC,
101
+ padding: CryptoJS.pad.Pkcs7
102
+ })
103
+
104
+ // 将解密后的数据转换为字符串
105
+ return decrypted.toString(CryptoJS.enc.Utf8)
106
+ } catch (error) {
107
+ throw new Error(`AES-CBC解密失败: ${error}`)
108
+ }
109
+ },
110
+ /**
111
+ * 安全的AES-CBC解密(失败时返回null) 用于响应自动解密,解密失败时不抛出异常
112
+ *
113
+ * @param combinedText 格式:Base64(iv):Base64(ciphertext)
114
+ * @param hexKey 十六进制格式的密钥
115
+ * @returns 解密后的字符串,失败时返回null
116
+ */
117
+ safeAESDecryptCBC (combinedText, hexKey) {
118
+ try {
119
+ return this.AESDecryptCBC(combinedText, hexKey)
120
+ } catch {
121
+ // AES-CBC解密失败,静默处理
122
+ return null
123
+ }
124
+ },
125
+ /**
126
+ * 智能响应解密 自动检测响应数据格式并进行解密
127
+ *
128
+ * @param responseData 响应数据
129
+ * @param sessionKey 会话密钥
130
+ * @returns 解密后的数据,失败时返回原数据
131
+ */
132
+ decryptResponse (responseData, sessionKey) {
133
+ try {
134
+ let dataStr = ''
135
+
136
+ // 处理不同类型的响应数据
137
+ if (typeof responseData === 'string') {
138
+ dataStr = responseData
139
+ } else if (typeof responseData === 'object') {
140
+ dataStr = JSON.stringify(responseData)
141
+ } else {
142
+ dataStr = String(responseData)
143
+ }
144
+
145
+ // 尝试解密
146
+ const decryptedStr = this.safeAESDecryptCBC(dataStr, sessionKey)
147
+ if (decryptedStr) {
148
+ try {
149
+ return JSON.parse(decryptedStr)
150
+ } catch {
151
+ return decryptedStr
152
+ }
153
+ }
154
+ } catch (e) {
155
+ console.warn(e)
156
+ // 响应解密处理失败,静默处理
157
+ }
158
+
159
+ // 解密失败或数据格式不正确时,返回原数据
160
+ return responseData
74
161
  }
75
162
  }
@@ -189,6 +189,18 @@ function loadInterceptors () {
189
189
  }, errorHandler)
190
190
  // 加载响应拦截器
191
191
  axios.interceptors.response.use((res) => {
192
+ // 判断是否需要解密
193
+ if (res.headers && res.headers['x-encrypted'] === '1') {
194
+ const v4SessionKey = localStorage.getItem('v4-session-key')
195
+ if (v4SessionKey && res.data) {
196
+ const decryptedData = EncryptUtil.decryptResponse(res?.data, v4SessionKey)
197
+ // 如果解密成功且不等于原数据,说明解密有效
198
+ if (decryptedData !== res.data) {
199
+ // 响应解密成功
200
+ res.data = decryptedData
201
+ }
202
+ }
203
+ }
192
204
  // 判断是否为V4环境,不为compatible赋初始值
193
205
  // 其有可能是undefined未定义,或第一次使用本系统LocalStorage在初始化,获得的值为null
194
206
  const compatible = getSystemVersion()
package/vue.config.js CHANGED
@@ -16,7 +16,7 @@ const v3Server = 'http://aote-office.8866.org:31567'
16
16
  // const testUpload = 'http://123.60.214.109:8406'
17
17
  const OSSServerDev = 'http://192.168.50.67:30351'
18
18
  // const revenue = 'http://aote-office.8866.org:31567'
19
- const revenue = 'http://aote-office.8866.org:31567'
19
+ const revenue = 'http://127.0.0.1:31467'
20
20
  // const OSSServerProd = 'http://192.168.50.67:31351'
21
21
  // const testUploadLocal = 'http://127.0.0.1:9001'
22
22
  // v3 铜川
@@ -1,51 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8"/>
5
- <link rel="shortcut icon" href="./favicon.svg" type="image/svg+xml"/>
6
- <link rel="stylesheet" href="./vender/jquery/zTreeStyle/zTreeStyle.css" type="text/css">
7
- <script src = "./vender/jquery/jquery.js"></script>
8
- <script src = "./vender/date97/WdatePicker.js"></script>
9
- <script src = "./vender/jquery/jquery.ztree.core.min.js"></script>
10
- <script src = "./vender/jquery/jquery.ztree.exedit.min.js"></script>
11
- <script src = "./vender/jquery/jquery.ztree.exhide.min.js"></script>
12
- <script src = "./vender/codemirror.js"></script>
13
- <script src = "./vender/fabric.js"></script>
14
- <script src="./vender/editor.js"></script>
15
- <script>
16
- $(function() {
17
- //配置项可以不设置,会使用默认设置
18
- let option = {
19
- license:'QO1pepfLYwDNqGvW21ensj0psE9CxBxf5MSRD1q2sCvclYGGtk6clTZEIth12i4SvvvDC04ZNcHe3uQuNtBUFcAk7sHUwAdYvffM2aZis/jpZqrm1rDGk1NHYsheD6DroF+m3jZ5Izh/LxRjzZJfaHHejfrn5InFoSqErfPm4gY=',
20
- mode:'form', //默认模式 form:表单模式,design:设计模式
21
- pdfUrl:'https://www.x-emr.cn/pdf/post', //pdf生成服务
22
- dictionary: [ //知识库
23
- {name: '体征', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=20', itemUrl:'https://www.x-emr.cn/dictitem'},
24
- {name: '症状', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=20', itemUrl:'https://www.x-emr.cn/dictitem'},
25
- {name: '卫生信息数据元', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=40', itemUrl:'https://www.x-emr.cn/dictitem'},
26
- {name: '电子病历数据集', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=50', itemUrl:'https://www.x-emr.cn/dictitem'},
27
- {name: '国家医保标准', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=80', itemUrl:'https://www.x-emr.cn/dictitem'},
28
- {name: '省数据平台标准', isParent:true, treeUrl:'https://www.x-emr.cn/dict?category=90', itemUrl:'https://www.x-emr.cn/dictitem'},
29
- ]
30
- }
31
-
32
- //从模块的Editor组件中获取mode,doc,lang属性 (该段代码可删除)
33
- let mode = window.frameElement.getAttribute('mode')
34
- let doc = window.frameElement.getAttribute('doc')
35
- let lang = window.frameElement.getAttribute('lang')
36
- mode? option.mode = mode: null
37
- lang? option.lang = lang: null
38
-
39
- //初始化编辑器(初始化代码可以放入组件的load事件中)
40
- editor.init(option).then(()=>{
41
- doc? editor.loadUrl(doc) : null
42
- })
43
-
44
- })
45
- </script>
46
- </head>
47
- <body>
48
- <!-- 默认id 为editor -->
49
- <div id="editor" style="width:100%; height:100%;"></div>
50
- </body>
51
- </html>