@epxing/designer 5.3.0-beta.1 → 5.3.0-beta.3

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 (249) hide show
  1. package/API.md +5 -4
  2. package/README.md +46 -45
  3. package/dist/src/index.js +1 -0
  4. package/dist/src/page-designer/PageConfigPreview.js +1 -0
  5. package/dist/src/page-designer/PageDesigner.js +12 -0
  6. package/dist/src/page-designer/designer.js +22 -0
  7. package/dist/src/page-designer/index.js +1 -0
  8. package/dist/src/page-designer/mixins/dragSourceMixin.js +1 -0
  9. package/dist/src/page-designer/page-variable-panel/JsonEditor.js +1 -0
  10. package/dist/src/page-designer/page-variable-panel/PageVariablePanel.js +1 -0
  11. package/dist/src/page-designer/page-variable-panel/index.js +1 -0
  12. package/dist/src/page-designer/page-variable-panel/jsonlint.js +1 -0
  13. package/dist/src/page-designer/previews/add-form/Preview.js +2 -1
  14. package/dist/src/page-designer/previews/add-form/Preview.vue.js +19 -8
  15. package/dist/src/page-designer/previews/add-form-item/Preview.js +1 -0
  16. package/dist/src/page-designer/previews/button/Preview.js +1 -0
  17. package/dist/src/page-designer/previews/card/Preview.js +1 -0
  18. package/dist/src/page-designer/previews/carousel/CarouselItemPreview.js +1 -0
  19. package/dist/src/page-designer/previews/carousel/Preview.js +1 -0
  20. package/dist/src/page-designer/previews/collapse/CollapseItemPreview.js +1 -0
  21. package/dist/src/page-designer/previews/collapse/Preview.js +1 -0
  22. package/dist/src/page-designer/previews/dropdown/Preview.js +1 -0
  23. package/dist/src/page-designer/previews/entity-list/Preview.js +1 -0
  24. package/dist/src/page-designer/previews/entity-sub-list/Preview.js +1 -0
  25. package/dist/src/page-designer/previews/entity-virtual-list/Preview.js +1 -0
  26. package/dist/src/page-designer/previews/form-field/preview/Checkbox.js +1 -0
  27. package/dist/src/page-designer/previews/form-field/preview/Date.js +1 -0
  28. package/dist/src/page-designer/previews/form-field/preview/Input.js +1 -0
  29. package/dist/src/page-designer/previews/form-field/preview/InputNumber.js +1 -0
  30. package/dist/src/page-designer/previews/form-field/preview/Object.js +1 -0
  31. package/dist/src/page-designer/previews/form-field/preview/Radio.js +1 -0
  32. package/dist/src/page-designer/previews/form-field/preview/Select.js +1 -0
  33. package/dist/src/page-designer/previews/form-field/preview/Textarea.js +1 -0
  34. package/dist/src/page-designer/previews/grid/Preview.js +1 -0
  35. package/dist/src/page-designer/previews/html/Preview.js +1 -0
  36. package/dist/src/page-designer/previews/icon/Preview.js +1 -0
  37. package/dist/src/page-designer/previews/image/Preview.js +1 -0
  38. package/dist/src/page-designer/previews/index.js +1 -0
  39. package/dist/src/page-designer/previews/layout/ColumnPreview.js +1 -0
  40. package/dist/src/page-designer/previews/layout/Preview.js +1 -0
  41. package/dist/src/page-designer/previews/num/Preview.js +1 -0
  42. package/dist/src/page-designer/previews/page-tabs/Preview.js +1 -0
  43. package/dist/src/page-designer/previews/step/Preview.js +1 -0
  44. package/dist/src/page-designer/previews/tabs/Preview.js +1 -0
  45. package/dist/src/page-designer/previews/tabs/tab-pane/Preview.js +1 -0
  46. package/dist/src/page-designer/previews/text/Preview.js +1 -0
  47. package/dist/src/page-designer/previews/text-editor/Preview.js +1 -0
  48. package/dist/src/page-designer/previews/video/Preview.js +1 -0
  49. package/dist/src/page-designer/setting-panel/Advance.js +1 -0
  50. package/dist/src/page-designer/setting-panel/CodeEditor.js +1 -0
  51. package/dist/src/page-designer/setting-panel/Property.js +1 -0
  52. package/dist/src/page-designer/setting-panel/Setting.js +47 -10
  53. package/dist/src/page-designer/setting-panel/Style.js +1 -0
  54. package/dist/src/page-designer/setting-panel/css-editor/CssEditor.js +1 -0
  55. package/dist/src/page-designer/setting-panel/css-editor/css-hint.js +1 -0
  56. package/dist/src/page-designer/setting-panel/index.js +1 -0
  57. package/dist/src/page-designer/template-attribute-panel/TemplateAttributePanel.js +1 -0
  58. package/dist/src/page-designer/template-attribute-panel/index.js +1 -0
  59. package/dist/src/page-designer/template-library/Library.js +1 -0
  60. package/dist/src/page-designer/template-library/index.js +1 -0
  61. package/dist/src/page-designer/widget-library/Base.js +1 -0
  62. package/dist/src/page-designer/widget-library/Library.js +1 -0
  63. package/dist/src/page-designer/widget-library/index.js +1 -0
  64. package/dist/src/page-designer/widget-preview/Container.js +1 -0
  65. package/dist/src/page-designer/widget-preview/DragGhost.js +1 -0
  66. package/dist/src/page-designer/widget-preview/DropZoneOverlay.js +1 -0
  67. package/dist/src/page-designer/widget-preview/HoverOverlay.js +1 -0
  68. package/dist/src/page-designer/widget-preview/Mixin.js +1 -0
  69. package/dist/src/page-designer/widget-preview/Placeholder.js +1 -0
  70. package/dist/src/page-designer/widget-preview/Preview.js +1 -0
  71. package/dist/src/page-designer/widget-preview/PreviewItem.js +1 -0
  72. package/dist/src/page-designer/widget-preview/SelectedOverlay.js +1 -0
  73. package/dist/src/page-designer/widget-preview/Template.js +1 -0
  74. package/dist/src/page-designer/widget-preview/WidgetWrapper.js +1 -0
  75. package/dist/src/page-designer/widget-preview/directive.js +1 -0
  76. package/dist/src/page-designer/widget-preview/dropPosition.js +1 -0
  77. package/dist/src/page-designer/widget-preview/index.js +1 -0
  78. package/dist/src/page-designer/widget-preview/overlayPositionMixin.js +1 -0
  79. package/dist/src/page-designer/widget-preview/resolvePreviewName.js +1 -0
  80. package/dist/src/page-designer/widget-tree/Item.js +1 -0
  81. package/dist/src/page-designer/widget-tree/Tree.js +1 -0
  82. package/dist/src/page-designer/widget-tree/index.js +1 -0
  83. package/dist/src/visual/AddForm.js +1 -0
  84. package/dist/src/visual/AddFormItem.js +1 -0
  85. package/dist/src/visual/AppIndex.js +1 -0
  86. package/dist/src/visual/ApplyForm.js +1 -0
  87. package/dist/src/visual/AttributeList.js +1 -0
  88. package/dist/src/visual/BasePage.js +1 -0
  89. package/dist/src/visual/Button.js +1 -0
  90. package/dist/src/visual/CardNum.js +1 -0
  91. package/dist/src/visual/CategoryList.js +1 -0
  92. package/dist/src/visual/Chart.js +1 -0
  93. package/dist/src/visual/ChartNew.js +1 -0
  94. package/dist/src/visual/CheckForm.js +1 -0
  95. package/dist/src/visual/ClientList.js +1 -0
  96. package/dist/src/visual/CodeManage.js +1 -0
  97. package/dist/src/visual/Component.js +1 -0
  98. package/dist/src/visual/ComponentList.js +1 -0
  99. package/dist/src/visual/Config.js +1 -0
  100. package/dist/src/visual/ConfigItem.js +1 -0
  101. package/dist/src/visual/ConfigSelectItems.js +1 -0
  102. package/dist/src/visual/CreatePage.js +1 -0
  103. package/dist/src/visual/DashboardDiv.js +1 -0
  104. package/dist/src/visual/DashboardTabs.js +1 -0
  105. package/dist/src/visual/DashboardWidget.js +1 -0
  106. package/dist/src/visual/DblogList.js +1 -0
  107. package/dist/src/visual/EntityAddPage.js +1 -0
  108. package/dist/src/visual/EntityApplyPage.js +1 -0
  109. package/dist/src/visual/EntityCardList.js +1 -0
  110. package/dist/src/visual/EntityCheckPage.js +1 -0
  111. package/dist/src/visual/EntityFindPage.js +1 -0
  112. package/dist/src/visual/EntityList.js +1 -0
  113. package/dist/src/visual/EntityListPage.js +1 -0
  114. package/dist/src/visual/EntityNoSubmitSubList.js +1 -0
  115. package/dist/src/visual/EntityRightSubList.js +1 -0
  116. package/dist/src/visual/EntitySubAdd.js +1 -0
  117. package/dist/src/visual/EntitySubGridItem.js +1 -0
  118. package/dist/src/visual/EntitySubList.js +1 -0
  119. package/dist/src/visual/EntityTreeFindPage.js +1 -0
  120. package/dist/src/visual/EntityTreeManage.js +1 -0
  121. package/dist/src/visual/EntityTreePage.js +1 -0
  122. package/dist/src/visual/ExcelPreview.js +1 -0
  123. package/dist/src/visual/FormField.js +1 -0
  124. package/dist/src/visual/HeaderNew.js +1 -0
  125. package/dist/src/visual/Html.js +1 -0
  126. package/dist/src/visual/Import.js +1 -0
  127. package/dist/src/visual/InterfaceSubList.js +1 -0
  128. package/dist/src/visual/ListFirst.js +1 -0
  129. package/dist/src/visual/MEntityAddPage.js +1 -0
  130. package/dist/src/visual/MEntityList.js +1 -0
  131. package/dist/src/visual/MEntityListPage.js +1 -0
  132. package/dist/src/visual/MEntitySubList.js +1 -0
  133. package/dist/src/visual/MetaList.js +1 -0
  134. package/dist/src/visual/ModuleIndexPage.js +1 -0
  135. package/dist/src/visual/ModuleList.js +1 -0
  136. package/dist/src/visual/NavAddForm.js +1 -0
  137. package/dist/src/visual/NavFormCatalogItem.js +1 -0
  138. package/dist/src/visual/NumItem.js +1 -0
  139. package/dist/src/visual/NumStatistic.js +1 -0
  140. package/dist/src/visual/OrgChart.js +1 -0
  141. package/dist/src/visual/PageCatalog.js +1 -0
  142. package/dist/src/visual/PageConfig.js +1 -0
  143. package/dist/src/visual/PageTabs.js +1 -0
  144. package/dist/src/visual/Progress.js +1 -0
  145. package/dist/src/visual/ProgressItem.js +1 -0
  146. package/dist/src/visual/SystemManager.js +1 -0
  147. package/dist/src/visual/Title.js +1 -0
  148. package/dist/src/visual/TodoList.js +1 -0
  149. package/dist/src/visual/UserFormItem.js +1 -0
  150. package/dist/src/visual/UserManage.js +1 -0
  151. package/dist/src/visual/chart/CircularPie.js +1 -0
  152. package/dist/src/visual/chart/Column.js +1 -0
  153. package/dist/src/visual/chart/HoriColumn.js +1 -0
  154. package/dist/src/visual/chart/Line.js +1 -0
  155. package/dist/src/visual/chart/Pie.js +1 -0
  156. package/dist/src/visual/config/Background.js +1 -0
  157. package/dist/src/visual/config/Chart.js +1 -0
  158. package/dist/src/visual/config/Checkbox.js +1 -0
  159. package/dist/src/visual/config/Color.js +1 -0
  160. package/dist/src/visual/config/DesignReport.js +1 -0
  161. package/dist/src/visual/config/Event.js +1 -0
  162. package/dist/src/visual/config/Field.js +1 -0
  163. package/dist/src/visual/config/Font.js +1 -0
  164. package/dist/src/visual/config/FormItem.js +1 -0
  165. package/dist/src/visual/config/Function.js +1 -0
  166. package/dist/src/visual/config/Html.js +1 -0
  167. package/dist/src/visual/config/Image.js +1 -0
  168. package/dist/src/visual/config/Input.js +1 -0
  169. package/dist/src/visual/config/LazyDialog.js +1 -0
  170. package/dist/src/visual/config/List.js +1 -0
  171. package/dist/src/visual/config/ListField.js +1 -0
  172. package/dist/src/visual/config/MField.js +1 -0
  173. package/dist/src/visual/config/Number.js +1 -0
  174. package/dist/src/visual/config/Object.js +1 -0
  175. package/dist/src/visual/config/Operate.js +1 -0
  176. package/dist/src/visual/config/OperateItem.js +1 -0
  177. package/dist/src/visual/config/Options.js +1 -0
  178. package/dist/src/visual/config/OrderField.js +1 -0
  179. package/dist/src/visual/config/Page.js +1 -0
  180. package/dist/src/visual/config/Params.js +1 -0
  181. package/dist/src/visual/config/Radio.js +1 -0
  182. package/dist/src/visual/config/Row.js +1 -0
  183. package/dist/src/visual/config/Scope.js +1 -0
  184. package/dist/src/visual/config/Select.js +1 -0
  185. package/dist/src/visual/config/Switch.js +1 -0
  186. package/dist/src/visual/config/Textarea.js +1 -0
  187. package/dist/src/visual/config/Tree.js +1 -0
  188. package/dist/src/visual/config/remote-cache.js +1 -0
  189. package/dist/src/visual/config/show-condition.js +1 -0
  190. package/dist/src/visual/config/variable-sources.js +1 -0
  191. package/dist/src/visual/config/wait-ref.js +1 -0
  192. package/dist/src/visual/config-page/ComponentLibrary.js +1 -0
  193. package/dist/src/visual/config-page/ComponentLibraryDialog.js +9 -2
  194. package/dist/src/visual/config-page/ComponentList.js +1 -0
  195. package/dist/src/visual/config-page/ComponentPreview.js +1 -0
  196. package/dist/src/visual/config-page/ConfigOption.js +1 -0
  197. package/dist/src/visual/config-page/ConfigPanel.js +1 -0
  198. package/dist/src/visual/config-page/Dashboard.js +1 -0
  199. package/dist/src/visual/config-page/DashboardDesign.js +1 -0
  200. package/dist/src/visual/config-page/DashboardGlobalConfig.js +1 -0
  201. package/dist/src/visual/config-page/DashboardMobile.js +2 -1
  202. package/dist/src/visual/config-page/DashboardSetting.js +1 -0
  203. package/dist/src/visual/config-page/PagePreview.js +1 -0
  204. package/dist/src/visual/config-page/StyleConfig.js +1 -0
  205. package/dist/src/visual/config-page/VisualConfigPage.js +1 -0
  206. package/dist/src/visual/config-page/dashboard-theme-setting/Background.js +1 -0
  207. package/dist/src/visual/config-page/dashboard-theme-setting/Border.js +1 -0
  208. package/dist/src/visual/config-page/dashboard-theme-setting/Font.js +1 -0
  209. package/dist/src/visual/config-page/dashboard-theme-setting/Index.js +1 -0
  210. package/dist/src/visual/config-page/dashboard-theme-setting/Shadow.js +1 -0
  211. package/dist/src/visual/config-page/index.js +1 -0
  212. package/dist/src/visual/index.js +1 -0
  213. package/dist/src/visual/mixins/innerGridMixin.js +1 -0
  214. package/dist/src/visual/search/Filter.js +1 -0
  215. package/dist/src/visual/step/Index.js +1 -0
  216. package/dist/src/visual/step/Item.js +1 -0
  217. package/dist/src/visual/widgets/CardFormItemVisual.js +1 -0
  218. package/dist/src/visual/widgets/CarouselVisual.js +1 -0
  219. package/dist/src/visual/widgets/CollapseVisual.js +1 -0
  220. package/dist/src/visual/widgets/DropdownVisual.js +1 -0
  221. package/dist/src/visual/widgets/LayoutConfig.js +1 -0
  222. package/dist/src/visual/widgets/ListVisual.js +1 -0
  223. package/dist/src/visual/widgets/MEntityListFindVisual.js +1 -0
  224. package/dist/src/visual/widgets/ProcessFormItemVisual.js +1 -0
  225. package/dist/src/visual/widgets/TabsConfig.js +1 -0
  226. package/dist/style.css +116 -112
  227. package/package.json +10 -9
  228. package/src/index.js +27 -27
  229. package/src/page-designer/PageDesigner.vue +11 -0
  230. package/src/page-designer/designer.js +1322 -1299
  231. package/src/page-designer/previews/add-form/Preview.vue +43 -44
  232. package/src/page-designer/setting-panel/Setting.vue +24 -2
  233. package/src/page-designer/widget-preview/Mixin.js +285 -285
  234. package/src/page-designer/widget-preview/Preview.vue +322 -322
  235. package/src/page-designer/widget-preview/WidgetWrapper.vue +197 -197
  236. package/src/page-designer/widget-preview/directive.js +258 -258
  237. package/src/visual/CategoryList.vue +563 -563
  238. package/src/visual/ComponentList.vue +280 -280
  239. package/src/visual/CreatePage.vue +389 -389
  240. package/src/visual/EntityCardList.vue +449 -449
  241. package/src/visual/EntityList.vue +838 -838
  242. package/src/visual/config-page/ComponentLibraryDialog.vue +7 -1
  243. package/src/visual/config-page/DashboardMobile.vue +934 -934
  244. package/src/visual/widgets/ProcessFormItemVisual.vue +58 -58
  245. package/types/index.d.ts +22 -22
  246. package/types/page-designer.d.ts +3 -3
  247. package/types/visual-component.d.ts +1 -1
  248. package/types/visual-entity-list.d.ts +1 -1
  249. package/types/visual-entity-sub-list.d.ts +1 -1
@@ -1,197 +1,197 @@
1
- <template>
2
- <div
3
- :ref="widgetRef"
4
- :class="[
5
- 'epx-page-designer-widget-wrapper',
6
- {'el-col': !parentWidget},
7
- {[`el-col-${widget.span || 24}`]: !parentWidget},
8
- {'is-hover': isHover && !templateInfo}
9
- ]"
10
- :data-widget-id="widget.id"
11
- @mouseenter="handleMouseEnter"
12
- @mouseleave="handleMouseLeave"
13
- @click="handleClick"
14
- >
15
- <!-- 模板 -->
16
- <template v-if="widget.type === 'template'">
17
- <template-preview
18
- :widget="widget"
19
- :designer="designer"
20
- :key="widget.id"
21
- :parent-widget="parentWidget"
22
- :pageRelationList="pageRelationList"
23
- ></template-preview>
24
- </template>
25
- <!-- 普通组件 -->
26
- <component
27
- v-else
28
- :is="widgetName"
29
- :widget="widget"
30
- :designer="designer"
31
- :key="widget.id"
32
- :parent-widget="parentWidget"
33
- :templateInfo="templateInfo"
34
- :pageRelationList="pageRelationList"
35
- ></component>
36
- </div>
37
- </template>
38
-
39
- <script>
40
- import TemplatePreview from './Template'
41
- import PreviewMixin from './Mixin'
42
- import util from '@epxing/core/src/runtime-utils/util'
43
- import { resolvePreviewName } from './resolvePreviewName'
44
-
45
- function appendCss (id, css) {
46
- const formatCss = css.replace(/:current/g, '.css_' + id).replace(/url\s*\(([\w+-/.\s]+)\)/g, (str, $1) => {
47
- return `url(${util.getFileUrl($1)})`
48
- })
49
- const element = document.getElementById('style_' + id)
50
- if (element) {
51
- element.textContent = formatCss
52
- } else {
53
- const style = document.createElement('style')
54
- style.id = 'style_' + id
55
- style.textContent = formatCss
56
- style.setAttribute('type', 'text/css')
57
- document.head.appendChild(style)
58
- }
59
- }
60
-
61
- function removeCss (id) {
62
- const element = document.getElementById('style_' + id)
63
- if (element) document.head.removeChild(element)
64
- }
65
-
66
- export default {
67
- name: 'epx-page-designer-widget-wrapper',
68
- mixins: [PreviewMixin],
69
- components: {
70
- TemplatePreview
71
- },
72
- inject: {
73
- templateInfo: {
74
- type: Object,
75
- default: () => null
76
- }
77
- },
78
- provide () {
79
- return {
80
- templateInfo: this.templateInfo
81
- }
82
- },
83
- props: {
84
- designer: {
85
- type: Object,
86
- required: true
87
- },
88
- parentWidget: {
89
- type: Object,
90
- default: null
91
- },
92
- widget: {
93
- type: Object,
94
- required: true
95
- },
96
- pageRelationList: {
97
- type: Array,
98
- default: () => []
99
- }
100
- },
101
- data () {
102
- return {
103
- isHover: false,
104
- widgetRef: `widget_${this.widget.id}`
105
- }
106
- },
107
- computed: {
108
- widgetInfo () {
109
- return this.designer.getWidgetByType(this.widget.contentType, this.widget.type) || {}
110
- },
111
- isContainer () {
112
- return this.widgetInfo.CONTAINER === '1'
113
- },
114
- // 预览组件名解析统一走 resolvePreviewName(命中项有缓存)
115
- widgetName () {
116
- return resolvePreviewName(this.designer, this.widget)
117
- }
118
- },
119
- methods: {
120
- handleMouseEnter (event) {
121
- if (!this.templateInfo) {
122
- this.isHover = true
123
- event.stopPropagation()
124
- // 触发 hover 事件,用于高亮显示
125
- this.$emit('widget-hover', this.widget.id)
126
- }
127
- },
128
- handleMouseLeave (event) {
129
- if (!this.templateInfo) {
130
- this.isHover = false
131
- event.stopPropagation()
132
- this.$emit('widget-hover', null)
133
- }
134
- },
135
- handleClick (event) {
136
- if (!this.templateInfo && this.widgetInfo.ID) {
137
- this.designer.setSelected(this.widget)
138
- // 触发点击事件,传递元素引用
139
- this.$emit('widget-click', {
140
- widget: this.widget,
141
- element: this.$el,
142
- parentWidget: this.parentWidget
143
- })
144
- event.stopPropagation()
145
- }
146
- },
147
- // 获取组件 DOM 元素
148
- getElement () {
149
- return this.$el
150
- }
151
- },
152
- mounted () {
153
- // 应用组件的 CSS 样式
154
- if (this.widget.css) {
155
- appendCss(this.widget.id, this.widget.css)
156
- }
157
- // 添加 css_ 类名,用于样式作用域
158
- if (this.$el) {
159
- if (this.$el.classList) {
160
- this.$el.classList.add('css_' + this.widget.id)
161
- } else {
162
- this.$el.className += ' css_' + this.widget.id
163
- }
164
- }
165
- },
166
- watch: {
167
- 'widget.css' (v) {
168
- if (v) {
169
- appendCss(this.widget.id, v)
170
- }
171
- }
172
- },
173
- beforeUnmount () {
174
- // 清理 CSS 样式
175
- removeCss(this.widget.id)
176
- }
177
- }
178
- </script>
179
-
180
- <style lang="scss">
181
- .epx-page-designer-widget-wrapper {
182
- position: relative;
183
-
184
- // 悬停时显示虚线边框(仅视觉提示,不影响布局)
185
- &.is-hover::before {
186
- content: '';
187
- position: absolute;
188
- top: 0;
189
- left: 0;
190
- right: 0;
191
- bottom: 0;
192
- border: 1px dashed var(--color-primary, #409EFF);
193
- pointer-events: none;
194
- z-index: 99;
195
- }
196
- }
197
- </style>
1
+ <template>
2
+ <div
3
+ :ref="widgetRef"
4
+ :class="[
5
+ 'epx-page-designer-widget-wrapper',
6
+ {'el-col': !parentWidget},
7
+ {[`el-col-${widget.span || 24}`]: !parentWidget},
8
+ {'is-hover': isHover && !templateInfo}
9
+ ]"
10
+ :data-widget-id="widget.id"
11
+ @mouseenter="handleMouseEnter"
12
+ @mouseleave="handleMouseLeave"
13
+ @click="handleClick"
14
+ >
15
+ <!-- 模板 -->
16
+ <template v-if="widget.type === 'template'">
17
+ <template-preview
18
+ :widget="widget"
19
+ :designer="designer"
20
+ :key="widget.id"
21
+ :parent-widget="parentWidget"
22
+ :pageRelationList="pageRelationList"
23
+ ></template-preview>
24
+ </template>
25
+ <!-- 普通组件 -->
26
+ <component
27
+ v-else
28
+ :is="widgetName"
29
+ :widget="widget"
30
+ :designer="designer"
31
+ :key="widget.id"
32
+ :parent-widget="parentWidget"
33
+ :templateInfo="templateInfo"
34
+ :pageRelationList="pageRelationList"
35
+ ></component>
36
+ </div>
37
+ </template>
38
+
39
+ <script>
40
+ import TemplatePreview from './Template'
41
+ import PreviewMixin from './Mixin'
42
+ import util from '@epxing/core/src/runtime-utils/util'
43
+ import { resolvePreviewName } from './resolvePreviewName'
44
+
45
+ function appendCss (id, css) {
46
+ const formatCss = css.replace(/:current/g, '.css_' + id).replace(/url\s*\(([\w+-/.\s]+)\)/g, (str, $1) => {
47
+ return `url(${util.getFileUrl($1)})`
48
+ })
49
+ const element = document.getElementById('style_' + id)
50
+ if (element) {
51
+ element.textContent = formatCss
52
+ } else {
53
+ const style = document.createElement('style')
54
+ style.id = 'style_' + id
55
+ style.textContent = formatCss
56
+ style.setAttribute('type', 'text/css')
57
+ document.head.appendChild(style)
58
+ }
59
+ }
60
+
61
+ function removeCss (id) {
62
+ const element = document.getElementById('style_' + id)
63
+ if (element) document.head.removeChild(element)
64
+ }
65
+
66
+ export default {
67
+ name: 'epx-page-designer-widget-wrapper',
68
+ mixins: [PreviewMixin],
69
+ components: {
70
+ TemplatePreview
71
+ },
72
+ inject: {
73
+ templateInfo: {
74
+ type: Object,
75
+ default: () => null
76
+ }
77
+ },
78
+ provide () {
79
+ return {
80
+ templateInfo: this.templateInfo
81
+ }
82
+ },
83
+ props: {
84
+ designer: {
85
+ type: Object,
86
+ required: true
87
+ },
88
+ parentWidget: {
89
+ type: Object,
90
+ default: null
91
+ },
92
+ widget: {
93
+ type: Object,
94
+ required: true
95
+ },
96
+ pageRelationList: {
97
+ type: Array,
98
+ default: () => []
99
+ }
100
+ },
101
+ data () {
102
+ return {
103
+ isHover: false,
104
+ widgetRef: `widget_${this.widget.id}`
105
+ }
106
+ },
107
+ computed: {
108
+ widgetInfo () {
109
+ return this.designer.getWidgetByType(this.widget.contentType, this.widget.type) || {}
110
+ },
111
+ isContainer () {
112
+ return this.widgetInfo.CONTAINER === '1'
113
+ },
114
+ // 预览组件名解析统一走 resolvePreviewName(命中项有缓存)
115
+ widgetName () {
116
+ return resolvePreviewName(this.designer, this.widget)
117
+ }
118
+ },
119
+ methods: {
120
+ handleMouseEnter (event) {
121
+ if (!this.templateInfo) {
122
+ this.isHover = true
123
+ event.stopPropagation()
124
+ // 触发 hover 事件,用于高亮显示
125
+ this.$emit('widget-hover', this.widget.id)
126
+ }
127
+ },
128
+ handleMouseLeave (event) {
129
+ if (!this.templateInfo) {
130
+ this.isHover = false
131
+ event.stopPropagation()
132
+ this.$emit('widget-hover', null)
133
+ }
134
+ },
135
+ handleClick (event) {
136
+ if (!this.templateInfo && this.widgetInfo.ID) {
137
+ this.designer.setSelected(this.widget)
138
+ // 触发点击事件,传递元素引用
139
+ this.$emit('widget-click', {
140
+ widget: this.widget,
141
+ element: this.$el,
142
+ parentWidget: this.parentWidget
143
+ })
144
+ event.stopPropagation()
145
+ }
146
+ },
147
+ // 获取组件 DOM 元素
148
+ getElement () {
149
+ return this.$el
150
+ }
151
+ },
152
+ mounted () {
153
+ // 应用组件的 CSS 样式
154
+ if (this.widget.css) {
155
+ appendCss(this.widget.id, this.widget.css)
156
+ }
157
+ // 添加 css_ 类名,用于样式作用域
158
+ if (this.$el) {
159
+ if (this.$el.classList) {
160
+ this.$el.classList.add('css_' + this.widget.id)
161
+ } else {
162
+ this.$el.className += ' css_' + this.widget.id
163
+ }
164
+ }
165
+ },
166
+ watch: {
167
+ 'widget.css' (v) {
168
+ if (v) {
169
+ appendCss(this.widget.id, v)
170
+ }
171
+ }
172
+ },
173
+ beforeUnmount () {
174
+ // 清理 CSS 样式
175
+ removeCss(this.widget.id)
176
+ }
177
+ }
178
+ </script>
179
+
180
+ <style lang="scss">
181
+ .epx-page-designer-widget-wrapper {
182
+ position: relative;
183
+
184
+ // 悬停时显示虚线边框(仅视觉提示,不影响布局)
185
+ &.is-hover::before {
186
+ content: '';
187
+ position: absolute;
188
+ top: 0;
189
+ left: 0;
190
+ right: 0;
191
+ bottom: 0;
192
+ border: 1px dashed var(--color-primary, #409EFF);
193
+ pointer-events: none;
194
+ z-index: 99;
195
+ }
196
+ }
197
+ </style>