vue2-client 1.15.42 → 1.15.43

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 (127) hide show
  1. package/.history/public/his/editor/editor_20250606134713.html +51 -0
  2. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +509 -0
  3. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +524 -0
  4. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +524 -0
  5. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +524 -0
  6. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172825.vue +207 -0
  7. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172945.vue +211 -0
  8. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172949.vue +212 -0
  9. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611173010.vue +212 -0
  10. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +1320 -0
  11. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +1332 -0
  12. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +1331 -0
  13. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +1331 -0
  14. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +1331 -0
  15. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +1339 -0
  16. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612092804.vue +731 -0
  17. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612112546.vue +748 -0
  18. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612113808.vue +748 -0
  19. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115237.vue +1071 -0
  20. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115346.vue +1078 -0
  21. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115350.vue +1077 -0
  22. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115415.vue +1077 -0
  23. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115429.vue +1077 -0
  24. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +442 -0
  25. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +442 -0
  26. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +442 -0
  27. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +475 -0
  28. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +475 -0
  29. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +475 -0
  30. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +477 -0
  31. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +477 -0
  32. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +477 -0
  33. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +473 -0
  34. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +473 -0
  35. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +473 -0
  36. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +473 -0
  37. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +473 -0
  38. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +473 -0
  39. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +473 -0
  40. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +473 -0
  41. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +473 -0
  42. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +473 -0
  43. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +474 -0
  44. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +474 -0
  45. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +474 -0
  46. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +472 -0
  47. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +472 -0
  48. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +472 -0
  49. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +472 -0
  50. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +472 -0
  51. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +472 -0
  52. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +501 -0
  53. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +501 -0
  54. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +501 -0
  55. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +504 -0
  56. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +504 -0
  57. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +504 -0
  58. package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +131 -0
  59. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +160 -0
  60. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +160 -0
  61. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +160 -0
  62. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +158 -0
  63. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +173 -0
  64. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +222 -0
  65. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +229 -0
  66. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +229 -0
  67. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +229 -0
  68. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +241 -0
  69. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +241 -0
  70. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +241 -0
  71. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +245 -0
  72. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +245 -0
  73. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +245 -0
  74. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +255 -0
  75. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +255 -0
  76. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +255 -0
  77. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +270 -0
  78. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +270 -0
  79. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +270 -0
  80. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +270 -0
  81. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +294 -0
  82. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +294 -0
  83. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +294 -0
  84. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +303 -0
  85. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +303 -0
  86. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +303 -0
  87. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +288 -0
  88. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +288 -0
  89. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +288 -0
  90. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +317 -0
  91. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +306 -0
  92. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +306 -0
  93. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +306 -0
  94. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250609151519.vue +222 -0
  95. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155514.vue +183 -0
  96. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155556.vue +183 -0
  97. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155600.vue +183 -0
  98. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181609.vue +206 -0
  99. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181629.vue +209 -0
  100. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095553.vue +242 -0
  101. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095610.vue +242 -0
  102. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095612.vue +242 -0
  103. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100041.vue +251 -0
  104. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100047.vue +251 -0
  105. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100054.vue +250 -0
  106. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100105.vue +250 -0
  107. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100107.vue +250 -0
  108. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100114.vue +250 -0
  109. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140844.vue +238 -0
  110. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140910.vue +238 -0
  111. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140912.vue +238 -0
  112. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +36 -0
  113. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +1 -0
  114. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +4 -2
  115. package/package.json +1 -1
  116. package/src/base-client/components/TreeList/TreeList.vue +91 -0
  117. package/src/base-client/components/TreeList/TreeNode.vue +81 -0
  118. package/src/base-client/components/common/XButtons/XButtons.vue +33 -2
  119. package/src/base-client/components/common/XCardSet/XTiltle.vue +191 -0
  120. package/src/base-client/components/common/XReport/print.js +186 -186
  121. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +0 -8
  122. package/src/base-client/components/his/XList/XList.vue +211 -35
  123. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  124. package/src/base-client/components/his/XTreeRows/TreeNode.vue +100 -100
  125. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +197 -197
  126. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  127. package/src/utils/map-utils.js +47 -47
@@ -1,197 +1,197 @@
1
- <template>
2
- <div class="tree-container">
3
- <div class="tree-header">
4
- <span class="tree-title">{{ title }}</span>
5
- <span class="tree-expand-all" @click="isToOpenAll" v-if="isShowOpen">
6
- {{ isExpanded ? '收起' : '全部展开' }}
7
- </span>
8
- </div>
9
- <div class="tree-list">
10
- <tree-node
11
- v-for="node in showData"
12
- :key="node.id"
13
- :node="node"
14
- @toggle="toggleNode"/>
15
- </div>
16
- </div>
17
- </template>
18
-
19
- <script>
20
- import TreeNode from '@vue2-client/base-client/components/his/XTreeRows/TreeNode.vue'
21
- import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
22
-
23
- export default {
24
- name: 'XTreeRows',
25
- components: {
26
- TreeNode
27
- },
28
- props: {
29
- queryParamsName: {
30
- type: String,
31
- default: ''
32
- },
33
- isOpenAll: {
34
- type: Boolean,
35
- default: false
36
- },
37
- parameter: {
38
- type: Object,
39
- default: () => {
40
- return {}
41
- }
42
- }
43
- },
44
- data () {
45
- return {
46
- treeData: [
47
- {
48
- id: '1',
49
- title: '体征',
50
- expanded: false,
51
- children: [
52
- {
53
- id: '1-1',
54
- title: '一般情况'
55
- },
56
- {
57
- id: '1-2',
58
- title: '皮肤粘膜'
59
- },
60
- {
61
- id: '1-3',
62
- title: '头颈',
63
- expanded: false,
64
- children: [
65
- {
66
- id: '1-3-1',
67
- title: '头部头部头部头部头部头部头部头部头部头部头部头部头部头部',
68
- expanded: false,
69
- children: [
70
- {
71
- id: '1-3-1-1',
72
- title: '123456'
73
- }
74
- ]
75
- },
76
- {
77
- id: '1-2-2',
78
- title: '颈部'
79
- }
80
- ]
81
- },
82
- {
83
- id: '1-4',
84
- title: '胸部'
85
- },
86
- ]
87
- }
88
- ],
89
- isExpanded: false,
90
- showData: [],
91
- isShowOpen: true,
92
- title: '标题'
93
- }
94
- },
95
- methods: {
96
- toggleNode (node) {
97
- node.expanded = !node.expanded
98
- this.$emit('node-toggle', node)
99
- },
100
- isToOpenAll () {
101
- this.isExpanded = !this.isExpanded
102
- this.expandAllNodes(this.showData, this.isExpanded)
103
- this.$emit('isOpenAll', this.isExpanded)
104
- },
105
- expandAllNodes (nodes, expand) {
106
- nodes.forEach(node => {
107
- if (node.children && node.children.length > 0) {
108
- node.expanded = expand
109
- this.expandAllNodes(node.children, expand)
110
- }
111
- })
112
- },
113
- init (config, parameterData) {
114
- getConfigByName(config, 'af-his', res => {
115
- this.isShowOpen = res.isShowOpen
116
- this.title = res.title
117
- console.log(res)
118
- if (!res.isCheck) {
119
- this.showData = res.showData
120
- return
121
- }
122
- const parameter = { ...parameterData, ...this.parameter }
123
- runLogic(res.logicName, parameter, 'af-his').then(result => {
124
- this.showData = result
125
- })
126
- })
127
- }
128
- },
129
- watch: {
130
- queryParamsName: {
131
- immediate: true,
132
- handler (newValue) {
133
- console.log(newValue)
134
- this.init(newValue, {})
135
- },
136
- deep: true
137
- }
138
- }
139
- }
140
- </script>
141
-
142
- <style scoped>
143
- .tree-container {
144
- width: 100%;
145
- height: 320px;
146
- overflow-y: auto;
147
- overflow-x: auto;
148
- padding: 6px;
149
- box-sizing: border-box;
150
- }
151
- /* 自定义滚动条样式 */
152
- .tree-container::-webkit-scrollbar {
153
- width: 4px;
154
- height: 4px;
155
- }
156
- .tree-container::-webkit-scrollbar-thumb {
157
- background-color: #ccc;
158
- border-radius: 2px;
159
- }
160
- .tree-container::-webkit-scrollbar-track {
161
- background-color: #f5f5f5;
162
- }
163
- .tree-list {
164
- font-size: 14px;
165
- min-width: 100%;
166
- }
167
-
168
- .tree-header {
169
- padding: 8px 4px;
170
- border-bottom: 1px solid #e8e8e8;
171
- margin-bottom: 8px;
172
- position: sticky;
173
- top: 0;
174
- background-color: #fff;
175
- z-index: 1;
176
- }
177
-
178
- .tree-title {
179
- font-size: 16px;
180
- font-weight: 700;
181
- color:#5D5C5C;
182
- }
183
-
184
- .tree-expand-all {
185
- float: right;
186
- margin-right: 15px;
187
- font-size: 14px;
188
- font-weight: 400;
189
- color: #5D5C5C;
190
- cursor: pointer;
191
- user-select: none;
192
- }
193
-
194
- .tree-expand-all:hover {
195
- color: #989a9a;
196
- }
197
- </style>
1
+ <template>
2
+ <div class="tree-container">
3
+ <div class="tree-header">
4
+ <span class="tree-title">{{ title }}</span>
5
+ <span class="tree-expand-all" @click="isToOpenAll" v-if="isShowOpen">
6
+ {{ isExpanded ? '收起' : '全部展开' }}
7
+ </span>
8
+ </div>
9
+ <div class="tree-list">
10
+ <tree-node
11
+ v-for="node in showData"
12
+ :key="node.id"
13
+ :node="node"
14
+ @toggle="toggleNode"/>
15
+ </div>
16
+ </div>
17
+ </template>
18
+
19
+ <script>
20
+ import TreeNode from '@vue2-client/base-client/components/his/XTreeRows/TreeNode.vue'
21
+ import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
22
+
23
+ export default {
24
+ name: 'XTreeRows',
25
+ components: {
26
+ TreeNode
27
+ },
28
+ props: {
29
+ queryParamsName: {
30
+ type: String,
31
+ default: ''
32
+ },
33
+ isOpenAll: {
34
+ type: Boolean,
35
+ default: false
36
+ },
37
+ parameter: {
38
+ type: Object,
39
+ default: () => {
40
+ return {}
41
+ }
42
+ }
43
+ },
44
+ data () {
45
+ return {
46
+ treeData: [
47
+ {
48
+ id: '1',
49
+ title: '体征',
50
+ expanded: false,
51
+ children: [
52
+ {
53
+ id: '1-1',
54
+ title: '一般情况'
55
+ },
56
+ {
57
+ id: '1-2',
58
+ title: '皮肤粘膜'
59
+ },
60
+ {
61
+ id: '1-3',
62
+ title: '头颈',
63
+ expanded: false,
64
+ children: [
65
+ {
66
+ id: '1-3-1',
67
+ title: '头部头部头部头部头部头部头部头部头部头部头部头部头部头部',
68
+ expanded: false,
69
+ children: [
70
+ {
71
+ id: '1-3-1-1',
72
+ title: '123456'
73
+ }
74
+ ]
75
+ },
76
+ {
77
+ id: '1-2-2',
78
+ title: '颈部'
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ id: '1-4',
84
+ title: '胸部'
85
+ },
86
+ ]
87
+ }
88
+ ],
89
+ isExpanded: false,
90
+ showData: [],
91
+ isShowOpen: true,
92
+ title: '标题'
93
+ }
94
+ },
95
+ methods: {
96
+ toggleNode (node) {
97
+ node.expanded = !node.expanded
98
+ this.$emit('node-toggle', node)
99
+ },
100
+ isToOpenAll () {
101
+ this.isExpanded = !this.isExpanded
102
+ this.expandAllNodes(this.showData, this.isExpanded)
103
+ this.$emit('isOpenAll', this.isExpanded)
104
+ },
105
+ expandAllNodes (nodes, expand) {
106
+ nodes.forEach(node => {
107
+ if (node.children && node.children.length > 0) {
108
+ node.expanded = expand
109
+ this.expandAllNodes(node.children, expand)
110
+ }
111
+ })
112
+ },
113
+ init (config, parameterData) {
114
+ getConfigByName(config, 'af-his', res => {
115
+ this.isShowOpen = res.isShowOpen
116
+ this.title = res.title
117
+ console.log(res)
118
+ if (!res.isCheck) {
119
+ this.showData = res.showData
120
+ return
121
+ }
122
+ const parameter = { ...parameterData, ...this.parameter }
123
+ runLogic(res.logicName, parameter, 'af-his').then(result => {
124
+ this.showData = result
125
+ })
126
+ })
127
+ }
128
+ },
129
+ watch: {
130
+ queryParamsName: {
131
+ immediate: true,
132
+ handler (newValue) {
133
+ console.log(newValue)
134
+ this.init(newValue, {})
135
+ },
136
+ deep: true
137
+ }
138
+ }
139
+ }
140
+ </script>
141
+
142
+ <style scoped>
143
+ .tree-container {
144
+ width: 100%;
145
+ height: 320px;
146
+ overflow-y: auto;
147
+ overflow-x: auto;
148
+ padding: 6px;
149
+ box-sizing: border-box;
150
+ }
151
+ /* 自定义滚动条样式 */
152
+ .tree-container::-webkit-scrollbar {
153
+ width: 4px;
154
+ height: 4px;
155
+ }
156
+ .tree-container::-webkit-scrollbar-thumb {
157
+ background-color: #ccc;
158
+ border-radius: 2px;
159
+ }
160
+ .tree-container::-webkit-scrollbar-track {
161
+ background-color: #f5f5f5;
162
+ }
163
+ .tree-list {
164
+ font-size: 14px;
165
+ min-width: 100%;
166
+ }
167
+
168
+ .tree-header {
169
+ padding: 8px 4px;
170
+ border-bottom: 1px solid #e8e8e8;
171
+ margin-bottom: 8px;
172
+ position: sticky;
173
+ top: 0;
174
+ background-color: #fff;
175
+ z-index: 1;
176
+ }
177
+
178
+ .tree-title {
179
+ font-size: 16px;
180
+ font-weight: 700;
181
+ color:#5D5C5C;
182
+ }
183
+
184
+ .tree-expand-all {
185
+ float: right;
186
+ margin-right: 15px;
187
+ font-size: 14px;
188
+ font-weight: 400;
189
+ color: #5D5C5C;
190
+ cursor: pointer;
191
+ user-select: none;
192
+ }
193
+
194
+ .tree-expand-all:hover {
195
+ color: #989a9a;
196
+ }
197
+ </style>
@@ -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>