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.
- package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +0 -10
- package/package.json +1 -1
- package/src/base-client/components/common/XFormTable/demo.vue +2 -2
- package/src/base-client/components/common/XTable/XTableWrapper.vue +1 -1
- package/src/base-client/components/his/XHisEditor/XHisEditor.vue +43 -51
- package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
- package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
- package/src/router/async/router.map.js +2 -2
- package/src/utils/EncryptUtil.js +87 -0
- package/src/utils/request.js +12 -0
- package/vue.config.js +1 -1
- package/.history/public/his/editor/editor_20250606134713.html +0 -51
- package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +0 -509
- package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +0 -524
- package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +0 -524
- package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +0 -524
- package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172825.vue +0 -207
- package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172945.vue +0 -211
- package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172949.vue +0 -212
- package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611173010.vue +0 -212
- package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +0 -1320
- package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +0 -1332
- package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +0 -1331
- package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +0 -1331
- package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +0 -1331
- package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +0 -1339
- package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612092804.vue +0 -731
- package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612112546.vue +0 -748
- package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612113808.vue +0 -748
- package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115237.vue +0 -1071
- package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115346.vue +0 -1078
- package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115350.vue +0 -1077
- package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115415.vue +0 -1077
- package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115429.vue +0 -1077
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +0 -442
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +0 -442
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +0 -442
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +0 -475
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +0 -475
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +0 -475
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +0 -477
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +0 -477
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +0 -477
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +0 -473
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +0 -473
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +0 -473
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +0 -473
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +0 -473
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +0 -473
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +0 -473
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +0 -473
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +0 -473
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +0 -473
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +0 -474
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +0 -474
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +0 -474
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +0 -472
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +0 -472
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +0 -472
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +0 -472
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +0 -472
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +0 -472
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +0 -501
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +0 -501
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +0 -501
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +0 -504
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +0 -504
- package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +0 -504
- package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +0 -131
- package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +0 -160
- package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +0 -160
- package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +0 -160
- package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +0 -158
- package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +0 -173
- package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +0 -222
- package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +0 -229
- package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +0 -229
- package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +0 -229
- package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +0 -241
- package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +0 -241
- package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +0 -241
- package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +0 -245
- package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +0 -245
- package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +0 -245
- package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +0 -255
- package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +0 -255
- package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +0 -255
- package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +0 -270
- package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +0 -270
- package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +0 -270
- package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +0 -270
- package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +0 -294
- package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +0 -294
- package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +0 -294
- package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +0 -303
- package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +0 -303
- package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +0 -303
- package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +0 -288
- package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +0 -288
- package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +0 -288
- package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +0 -317
- package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +0 -306
- package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +0 -306
- package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +0 -306
- package/.history/src/base-client/components/his/XList/XList_20250704142024.vue +0 -495
- package/.history/src/base-client/components/his/XList/XList_20250704142033.vue +0 -495
- package/.history/src/base-client/components/his/XList/XList_20250704142040.vue +0 -494
- package/.history/src/base-client/components/his/XList/XList_20250704142211.vue +0 -494
- package/.history/src/base-client/components/his/XList/XList_20250704142214.vue +0 -494
- package/.history/src/base-client/components/his/XList/XList_20250704143010.vue +0 -495
- package/.history/src/base-client/components/his/XList/XList_20250704143203.vue +0 -495
- package/.history/src/base-client/components/his/XList/XList_20250707095101.vue +0 -492
- package/.history/src/base-client/components/his/XList/XList_20250707100152.vue +0 -492
- package/.history/src/base-client/components/his/XList/XList_20250707100200.vue +0 -485
- package/.history/src/base-client/components/his/XList/XList_20250707100208.vue +0 -485
- package/.history/src/base-client/components/his/XList/XList_20250707100259.vue +0 -488
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250609151519.vue +0 -222
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155514.vue +0 -183
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155556.vue +0 -183
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155600.vue +0 -183
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181609.vue +0 -206
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181629.vue +0 -209
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095553.vue +0 -242
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095610.vue +0 -242
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095612.vue +0 -242
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100041.vue +0 -251
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100047.vue +0 -251
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100054.vue +0 -250
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100105.vue +0 -250
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100107.vue +0 -250
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100114.vue +0 -250
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140844.vue +0 -238
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140910.vue +0 -238
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140912.vue +0 -238
- package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +0 -36
- package/src/base-client/components/TreeList/TreeList.vue +0 -91
- package/src/base-client/components/TreeList/TreeNode.vue +0 -81
- 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
|
-
|
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'),
|
package/src/utils/EncryptUtil.js
CHANGED
@@ -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
|
}
|
package/src/utils/request.js
CHANGED
@@ -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://
|
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>
|