sohelp-eleplus 1.1.1-8.beta.1

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 (298) hide show
  1. package/README.md +35 -0
  2. package/cache/DictCache.js +58 -0
  3. package/cache/ModuleCache.js +322 -0
  4. package/components.js +46 -0
  5. package/core-export.js +4 -0
  6. package/http/CrudHttp.js +115 -0
  7. package/http/DictHttp.js +12 -0
  8. package/http/ModuleHttp.js +68 -0
  9. package/http/SohelpHttp.js +125 -0
  10. package/index.js +6 -0
  11. package/installer.js +8 -0
  12. package/lang/en_US.js +4 -0
  13. package/lang/zh_CN.js +4 -0
  14. package/lang/zh_TW.js +4 -0
  15. package/package.json +9 -0
  16. package/sohelp-ace-editor/index.vue +198 -0
  17. package/sohelp-application-select/index.vue +15 -0
  18. package/sohelp-autocode/index.vue +53 -0
  19. package/sohelp-calendar-view/index.vue +11 -0
  20. package/sohelp-card-view/index.vue +11 -0
  21. package/sohelp-condition/index.vue +210 -0
  22. package/sohelp-cry-input/index.vue +64 -0
  23. package/sohelp-date/index.vue +27 -0
  24. package/sohelp-datetime/index.vue +44 -0
  25. package/sohelp-datetime-picker/index.vue +86 -0
  26. package/sohelp-datetime-range/index.vue +59 -0
  27. package/sohelp-dict/index.vue +206 -0
  28. package/sohelp-dict/props.js +68 -0
  29. package/sohelp-drawer/index.vue +50 -0
  30. package/sohelp-drop-card/index.vue +94 -0
  31. package/sohelp-drop-card/props.js +68 -0
  32. package/sohelp-dyn-select/index.vue +99 -0
  33. package/sohelp-dyn-select/props.js +67 -0
  34. package/sohelp-dyn-tree/index.vue +82 -0
  35. package/sohelp-dyn-tree-select/index.vue +114 -0
  36. package/sohelp-entity-form/index.vue +524 -0
  37. package/sohelp-entity-grid/index.vue +30 -0
  38. package/sohelp-file-upload/index.vue +218 -0
  39. package/sohelp-filter-scheme/components/condition.vue +102 -0
  40. package/sohelp-filter-scheme/components/filter.vue +45 -0
  41. package/sohelp-filter-scheme/components/keywords.vue +15 -0
  42. package/sohelp-filter-scheme/components/scheme.vue +49 -0
  43. package/sohelp-filter-scheme/index.vue +113 -0
  44. package/sohelp-grid/SohelpGridConfig.js~ +408 -0
  45. package/sohelp-grid/components/filter-condition-item.vue +298 -0
  46. package/sohelp-grid/index.vue +1965 -0
  47. package/sohelp-grid/js/ConditionType.js +101 -0
  48. package/sohelp-grid/js/DefaultGridOptions.js +145 -0
  49. package/sohelp-grid/js/DefaultProps.js +27 -0
  50. package/sohelp-grid/js/SohelpConfigFunction.js +0 -0
  51. package/sohelp-grid/js/SohelpGridConfig.js +101 -0
  52. package/sohelp-grid/js/useSohelpGridConfig.js +525 -0
  53. package/sohelp-grid-select/index.vue +245 -0
  54. package/sohelp-grid-view/filter/config/grid-filter-condition.vue +221 -0
  55. package/sohelp-grid-view/filter/config/grid-filter-config.vue +27 -0
  56. package/sohelp-grid-view/filter/config/grid-filter-field.vue +378 -0
  57. package/sohelp-grid-view/filter/config/grid-filter-keywords.vue +310 -0
  58. package/sohelp-grid-view/filter/config/grid-filter-list.vue +313 -0
  59. package/sohelp-grid-view/filter/config/grid-filter-scheme.vue +264 -0
  60. package/sohelp-grid-view/filter/config/grid-filter-sort.vue +310 -0
  61. package/sohelp-grid-view/filter/config/index.vue +206 -0
  62. package/sohelp-grid-view/filter/filter-form.vue +446 -0
  63. package/sohelp-grid-view/filter/filter-toolbar.vue +110 -0
  64. package/sohelp-grid-view/filter/index.vue +160 -0
  65. package/sohelp-grid-view/index.vue +379 -0
  66. package/sohelp-grid-view-select/index.vue +141 -0
  67. package/sohelp-group-view/index.vue +11 -0
  68. package/sohelp-icon-select/icons/AnalysisOutlined.vue +22 -0
  69. package/sohelp-icon-select/icons/ApplicationOutlined.vue +21 -0
  70. package/sohelp-icon-select/icons/AppstoreAddOutlined.vue +28 -0
  71. package/sohelp-icon-select/icons/AppstoreOutlined.vue +30 -0
  72. package/sohelp-icon-select/icons/ArrowDown.vue +21 -0
  73. package/sohelp-icon-select/icons/ArrowDownOutlined.vue +20 -0
  74. package/sohelp-icon-select/icons/ArrowLeft.vue +21 -0
  75. package/sohelp-icon-select/icons/ArrowLeftOutlined.vue +20 -0
  76. package/sohelp-icon-select/icons/ArrowRight.vue +21 -0
  77. package/sohelp-icon-select/icons/ArrowRightOutlined.vue +20 -0
  78. package/sohelp-icon-select/icons/ArrowUp.vue +21 -0
  79. package/sohelp-icon-select/icons/ArrowUpOutlined.vue +20 -0
  80. package/sohelp-icon-select/icons/BellOutlined.vue +21 -0
  81. package/sohelp-icon-select/icons/BookOutlined.vue +21 -0
  82. package/sohelp-icon-select/icons/CalendarOutlined.vue +19 -0
  83. package/sohelp-icon-select/icons/CaretDownFilled.vue +13 -0
  84. package/sohelp-icon-select/icons/CaretUpFilled.vue +13 -0
  85. package/sohelp-icon-select/icons/CheckCircleFilled.vue +15 -0
  86. package/sohelp-icon-select/icons/CheckCircleOutlined.vue +23 -0
  87. package/sohelp-icon-select/icons/CheckOutlined.vue +20 -0
  88. package/sohelp-icon-select/icons/CityOutlined.vue +22 -0
  89. package/sohelp-icon-select/icons/ClockCircleOutlined.vue +23 -0
  90. package/sohelp-icon-select/icons/CloseCircleFilled.vue +15 -0
  91. package/sohelp-icon-select/icons/CloseCircleOutlined.vue +22 -0
  92. package/sohelp-icon-select/icons/CloseOutlined.vue +20 -0
  93. package/sohelp-icon-select/icons/CloudUploadOutlined.vue +23 -0
  94. package/sohelp-icon-select/icons/ClusterOutlined.vue +21 -0
  95. package/sohelp-icon-select/icons/CodeOutlined.vue +22 -0
  96. package/sohelp-icon-select/icons/ColumnHeightOutlined.vue +18 -0
  97. package/sohelp-icon-select/icons/CompassOutlined.vue +22 -0
  98. package/sohelp-icon-select/icons/CompressOutlined.vue +23 -0
  99. package/sohelp-icon-select/icons/ConnectionOutlined.vue +24 -0
  100. package/sohelp-icon-select/icons/ControlOutlined.vue +27 -0
  101. package/sohelp-icon-select/icons/CopyOutlined.vue +22 -0
  102. package/sohelp-icon-select/icons/CpuOutlined.vue +22 -0
  103. package/sohelp-icon-select/icons/DashboardOutlined.vue +26 -0
  104. package/sohelp-icon-select/icons/DatabaseOutlined.vue +22 -0
  105. package/sohelp-icon-select/icons/DeleteOutlined.vue +22 -0
  106. package/sohelp-icon-select/icons/DesktopOutlined.vue +19 -0
  107. package/sohelp-icon-select/icons/DownloadOutlined.vue +21 -0
  108. package/sohelp-icon-select/icons/DragOutlined.vue +22 -0
  109. package/sohelp-icon-select/icons/EditOutlined.vue +21 -0
  110. package/sohelp-icon-select/icons/EllipsisOutlined.vue +15 -0
  111. package/sohelp-icon-select/icons/EnvironmentOutlined.vue +22 -0
  112. package/sohelp-icon-select/icons/ExclamationCircleFilled.vue +15 -0
  113. package/sohelp-icon-select/icons/ExpandOutlined.vue +23 -0
  114. package/sohelp-icon-select/icons/FileOutlined.vue +22 -0
  115. package/sohelp-icon-select/icons/FilterFilled.vue +15 -0
  116. package/sohelp-icon-select/icons/FolderAddOutlined.vue +20 -0
  117. package/sohelp-icon-select/icons/FolderOutlined.vue +19 -0
  118. package/sohelp-icon-select/icons/FormOutlined.vue +20 -0
  119. package/sohelp-icon-select/icons/FullscreenExitOutlined.vue +16 -0
  120. package/sohelp-icon-select/icons/FullscreenOutlined.vue +16 -0
  121. package/sohelp-icon-select/icons/FundOutlined.vue +20 -0
  122. package/sohelp-icon-select/icons/GlobalOutlined.vue +15 -0
  123. package/sohelp-icon-select/icons/HolderOutlined.vue +18 -0
  124. package/sohelp-icon-select/icons/HomeOutlined.vue +19 -0
  125. package/sohelp-icon-select/icons/IdcardOutlined.vue +25 -0
  126. package/sohelp-icon-select/icons/InfoCircleFilled.vue +15 -0
  127. package/sohelp-icon-select/icons/LinkOutlined.vue +15 -0
  128. package/sohelp-icon-select/icons/LoadingDotOutlined.vue +21 -0
  129. package/sohelp-icon-select/icons/LoadingOutlined.vue +19 -0
  130. package/sohelp-icon-select/icons/LockOutlined.vue +21 -0
  131. package/sohelp-icon-select/icons/LogOutlined.vue +22 -0
  132. package/sohelp-icon-select/icons/LogoutOutlined.vue +22 -0
  133. package/sohelp-icon-select/icons/MailOutlined.vue +19 -0
  134. package/sohelp-icon-select/icons/MenuFoldOutlined.vue +17 -0
  135. package/sohelp-icon-select/icons/MenuUnfoldOutlined.vue +17 -0
  136. package/sohelp-icon-select/icons/MessageOutlined.vue +22 -0
  137. package/sohelp-icon-select/icons/MinusCircleOutlined.vue +22 -0
  138. package/sohelp-icon-select/icons/MobileOutlined.vue +20 -0
  139. package/sohelp-icon-select/icons/MoonOutlined.vue +21 -0
  140. package/sohelp-icon-select/icons/MoreOutlined.vue +15 -0
  141. package/sohelp-icon-select/icons/PauseFilled.vue +14 -0
  142. package/sohelp-icon-select/icons/PieChartOutlined.vue +20 -0
  143. package/sohelp-icon-select/icons/PlayFilled.vue +13 -0
  144. package/sohelp-icon-select/icons/PlusCircleOutlined.vue +22 -0
  145. package/sohelp-icon-select/icons/PlusOutlined.vue +19 -0
  146. package/sohelp-icon-select/icons/ProtectOutlined.vue +21 -0
  147. package/sohelp-icon-select/icons/QuestionCircleFilled.vue +15 -0
  148. package/sohelp-icon-select/icons/QuestionCircleOutlined.vue +25 -0
  149. package/sohelp-icon-select/icons/ReloadOutlined.vue +22 -0
  150. package/sohelp-icon-select/icons/SearchOutlined.vue +21 -0
  151. package/sohelp-icon-select/icons/SettingOutlined.vue +24 -0
  152. package/sohelp-icon-select/icons/ShoppingOutlined.vue +19 -0
  153. package/sohelp-icon-select/icons/SortOutlined.vue +21 -0
  154. package/sohelp-icon-select/icons/StarFilled.vue +15 -0
  155. package/sohelp-icon-select/icons/StepBackwardFilled.vue +17 -0
  156. package/sohelp-icon-select/icons/StepForwardFilled.vue +17 -0
  157. package/sohelp-icon-select/icons/SuitcaseOutlined.vue +19 -0
  158. package/sohelp-icon-select/icons/SunOutlined.vue +29 -0
  159. package/sohelp-icon-select/icons/SwapOutlined.vue +21 -0
  160. package/sohelp-icon-select/icons/SyncOutlined.vue +21 -0
  161. package/sohelp-icon-select/icons/TableOutlined.vue +19 -0
  162. package/sohelp-icon-select/icons/TagOutlined.vue +20 -0
  163. package/sohelp-icon-select/icons/TimerOutlined.vue +22 -0
  164. package/sohelp-icon-select/icons/UndoOutlined.vue +22 -0
  165. package/sohelp-icon-select/icons/UnlockOutlined.vue +21 -0
  166. package/sohelp-icon-select/icons/UploadOutlined.vue +21 -0
  167. package/sohelp-icon-select/icons/UserOutlined.vue +21 -0
  168. package/sohelp-icon-select/icons/VerticalAlignMiddleOutlined.vue +15 -0
  169. package/sohelp-icon-select/icons/VerticalLeftOutlined.vue +13 -0
  170. package/sohelp-icon-select/icons/VerticalRightOutlined.vue +13 -0
  171. package/sohelp-icon-select/icons/WarningOutlined.vue +21 -0
  172. package/sohelp-icon-select/icons/ZoomInOutlined.vue +22 -0
  173. package/sohelp-icon-select/icons/ZoomOutOutlined.vue +22 -0
  174. package/sohelp-icon-select/icons/index.js +106 -0
  175. package/sohelp-icon-select/icons/index.ts +106 -0
  176. package/sohelp-icon-select/index.vue +95 -0
  177. package/sohelp-icon-select/vxeui-icon.js +90 -0
  178. package/sohelp-image-upload/index.vue +286 -0
  179. package/sohelp-input/index.vue +39 -0
  180. package/sohelp-modal/index.vue +72 -0
  181. package/sohelp-module/index.vue +54 -0
  182. package/sohelp-module/useModalManager.js +89 -0
  183. package/sohelp-module/useSohelpModule.js +64 -0
  184. package/sohelp-number-input/index.vue +32 -0
  185. package/sohelp-number-range/index.vue +135 -0
  186. package/sohelp-org-select/index.vue +30 -0
  187. package/sohelp-org-tree/index.vue +18 -0
  188. package/sohelp-org-tree-select/index.vue +93 -0
  189. package/sohelp-org-user-tree/index.vue +26 -0
  190. package/sohelp-org-user-tree-select/index.vue +11 -0
  191. package/sohelp-pagination/index.vue +11 -0
  192. package/sohelp-power/index.vue +105 -0
  193. package/sohelp-pro-form/components/pro-form-footer.vue +44 -0
  194. package/sohelp-pro-form/components/pro-form-item.vue +1133 -0
  195. package/sohelp-pro-form/index.vue +257 -0
  196. package/sohelp-pro-form/util.js +140 -0
  197. package/sohelp-pro-layout/index.vue +11 -0
  198. package/sohelp-pro-table/index.vue +14 -0
  199. package/sohelp-process/index.vue +216 -0
  200. package/sohelp-rate/index.vue +56 -0
  201. package/sohelp-rate/props.js +71 -0
  202. package/sohelp-relation/index.vue +11 -0
  203. package/sohelp-rich-text/index.vue +242 -0
  204. package/sohelp-rich-text/util.js +231 -0
  205. package/sohelp-richtext/index.vue +10 -0
  206. package/sohelp-role-select/index.vue +33 -0
  207. package/sohelp-search/components/search-config.vue +0 -0
  208. package/sohelp-search/index.vue +49 -0
  209. package/sohelp-search-pro-form/index.vue +11 -0
  210. package/sohelp-select/index.vue +120 -0
  211. package/sohelp-split-panel/index.vue +15 -0
  212. package/sohelp-switch/index.vue +56 -0
  213. package/sohelp-table/index.vue +151 -0
  214. package/sohelp-tenant-select/index.vue +128 -0
  215. package/sohelp-text/index.vue +14 -0
  216. package/sohelp-textarea-input/index.vue +36 -0
  217. package/sohelp-time/index.vue +10 -0
  218. package/sohelp-tree/index.vue +37 -0
  219. package/sohelp-tree-select/index.vue +18 -0
  220. package/sohelp-user-select/index.vue +44 -0
  221. package/sohelp-user-select/index.vue~ +53 -0
  222. package/sohelp-user-select/props.js +71 -0
  223. package/sohelp-user-tag/index.vue +12 -0
  224. package/sohelp-user-tree/index.vue +11 -0
  225. package/sohelp-vform-drawer/index.vue +40 -0
  226. package/sohelp-vform-eleplus/favicon.ico +0 -0
  227. package/sohelp-vform-eleplus/index.vue +297 -0
  228. package/sohelp-vform-eleplus/preview.html +91 -0
  229. package/sohelp-vform-eleplus/render.es.js +72433 -0
  230. package/sohelp-vform-eleplus/render.style.css +16 -0
  231. package/sohelp-vform-eleplus/render.umd.js +57 -0
  232. package/sohelp-vform-eleplus/tinymce/langs/zh_CN.js +462 -0
  233. package/sohelp-vform-eleplus/tinymce/langs/zh_TW.js +419 -0
  234. package/sohelp-vform-eleplus/tinymce/skins/content/dark/content.css +72 -0
  235. package/sohelp-vform-eleplus/tinymce/skins/content/dark/content.min.css +7 -0
  236. package/sohelp-vform-eleplus/tinymce/skins/content/default/content.css +67 -0
  237. package/sohelp-vform-eleplus/tinymce/skins/content/default/content.min.css +7 -0
  238. package/sohelp-vform-eleplus/tinymce/skins/content/document/content.css +72 -0
  239. package/sohelp-vform-eleplus/tinymce/skins/content/document/content.min.css +7 -0
  240. package/sohelp-vform-eleplus/tinymce/skins/content/writer/content.css +68 -0
  241. package/sohelp-vform-eleplus/tinymce/skins/content/writer/content.min.css +7 -0
  242. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.css +732 -0
  243. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.inline.css +726 -0
  244. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.inline.min.css +7 -0
  245. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.min.css +7 -0
  246. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.mobile.css +29 -0
  247. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.mobile.min.css +7 -0
  248. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff +0 -0
  249. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.css +3047 -0
  250. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.min.css +7 -0
  251. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.mobile.css +673 -0
  252. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.mobile.min.css +7 -0
  253. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.shadowdom.css +37 -0
  254. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.shadowdom.min.css +7 -0
  255. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.css +714 -0
  256. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.inline.css +726 -0
  257. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.inline.min.css +7 -0
  258. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.min.css +7 -0
  259. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.mobile.css +29 -0
  260. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.mobile.min.css +7 -0
  261. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff +0 -0
  262. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.css +3047 -0
  263. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.min.css +7 -0
  264. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.mobile.css +673 -0
  265. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.mobile.min.css +7 -0
  266. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.shadowdom.css +37 -0
  267. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +7 -0
  268. package/sohelp-vform-modal/index.vue +41 -0
  269. package/sohelp-vform-select/index.vue +11 -0
  270. package/sohelp-vform-vant/favicon.ico +0 -0
  271. package/sohelp-vform-vant/render.es.js +14608 -0
  272. package/sohelp-vform-vant/render.style.css +1 -0
  273. package/sohelp-vform-vant/render.umd.js +22 -0
  274. package/sohelp-vxe-grid/DefaultGridOptions.js +90 -0
  275. package/sohelp-vxe-grid/DefaultProps.js +27 -0
  276. package/sohelp-vxe-grid/SohelpGridConfig.js +143 -0
  277. package/sohelp-vxe-grid/index.vue +475 -0
  278. package/sohelp-vxe-grid-select/index.vue +148 -0
  279. package/sohelp-vxe-table/index.vue +184 -0
  280. package/sohelp-workflow/index.vue +495 -0
  281. package/sohelp-workflow/nodeWrap.vue +53 -0
  282. package/sohelp-workflow/nodes/addNode.vue +27 -0
  283. package/sohelp-workflow/nodes/approver.vue +125 -0
  284. package/sohelp-workflow/nodes/branch.vue +434 -0
  285. package/sohelp-workflow/nodes/promoter.vue +80 -0
  286. package/sohelp-workflow/nodes/send.vue +95 -0
  287. package/sohelp-workflow-drawer/components/approval-modal.vue +182 -0
  288. package/sohelp-workflow-drawer/components/draw-box.vue +141 -0
  289. package/sohelp-workflow-drawer/components/form.vue +78 -0
  290. package/sohelp-workflow-drawer/components/table.vue +153 -0
  291. package/sohelp-workflow-drawer/components/timeline.vue +189 -0
  292. package/sohelp-workflow-drawer/components/workflow.vue +68 -0
  293. package/sohelp-workflow-drawer/index.vue +311 -0
  294. package/sohelp-workflow-drawer/js/index.js +119 -0
  295. package/utils/ProFormConvertUtil.js +76 -0
  296. package/utils/core.js +310 -0
  297. package/utils/use-form-data.js +48 -0
  298. package/utils/use-mobile.js +43 -0
@@ -0,0 +1,524 @@
1
+ <template>
2
+ <div class="sohelp-entity-form" v-loading="loading">
3
+ <sohelp-pro-form
4
+ ref="proFormRef"
5
+ :model="formValue"
6
+ :data="formData"
7
+ :items="items"
8
+ :footer="false"
9
+ :readonly="readonly"
10
+ :label-width="labelWidth"
11
+ :labelPosition="grid === 1 ? 'top' : 'left'"
12
+ v-bind="$attrs"
13
+ :size="globalConfig.size"
14
+ :grid="grid === 1 ? false : { span: 24 / grid }"
15
+ :rowProps="{
16
+ gutter: 20
17
+ }"
18
+ @updateValue="setFieldValue"
19
+ >
20
+ <!-- 自定义插槽 -->
21
+ <template v-for="name in Object.keys($slots)" #[name]="slotProps">
22
+ <slot :name="name" v-bind="slotProps || {}"></slot>
23
+ </template>
24
+ </sohelp-pro-form>
25
+ </div>
26
+ </template>
27
+ <script setup>
28
+ import { inject, nextTick, reactive, ref, watch } from 'vue';
29
+ import SohelpProForm from '../sohelp-pro-form/index.vue';
30
+ import { arrayTypes, stringTypes } from '../sohelp-pro-form/util';
31
+ import { useRoute } from 'vue-router';
32
+ import CrudHttp from '../http/CrudHttp.js';
33
+
34
+ import { filterFields, matchingType } from '../utils/ProFormConvertUtil.js';
35
+ import { moduleCache } from '../cache/ModuleCache';
36
+ import { useMobile } from '@/utils/use-mobile';
37
+ import { useI18n } from 'vue-i18n';
38
+ import { EleMessage } from '@/components/ele-admin-plus/components';
39
+
40
+ const { query } = useRoute();
41
+ const formValue = ref({});
42
+ const formData = ref({});
43
+ const defaultFormValue = ref({});
44
+ const form = ref({});
45
+ const loading = ref(false);
46
+ const { mobile } = useMobile();
47
+ const emit = defineEmits(['update:modelValue', 'update:data']);
48
+ const props = defineProps({
49
+ modelValue: Object,
50
+ data: Object,
51
+ /** 实体配置 */
52
+ refid: {
53
+ type: String,
54
+ required: true
55
+ },
56
+ readonly: {
57
+ type: Boolean,
58
+ default: false
59
+ },
60
+ /**是否自动加载数据*/
61
+ autoLoad: {
62
+ type: Boolean,
63
+ default: true
64
+ },
65
+ /** 表单配置 */
66
+ formConfig: {
67
+ type: Object,
68
+ required: true
69
+ },
70
+ /**标签宽度 */
71
+ labelWidth: String,
72
+ /** 列数 */
73
+ gridNum: {
74
+ type: Number,
75
+ default: 1
76
+ }
77
+ });
78
+
79
+ /**
80
+ * 存储表单初始值用于对比变更
81
+ *
82
+ * @type {Ref<Object>}
83
+ */
84
+ const originModelValue = ref({});
85
+ const proFormRef = ref(null);
86
+ /**
87
+ * 表单项
88
+ * @type {Ref<UnwrapRef<*[]>>}
89
+ */
90
+ const items = ref([]);
91
+ /**
92
+ * 默认显示1列
93
+ * @type {Ref<UnwrapRef<number>>}
94
+ */
95
+ const grid = ref(1);
96
+ /**
97
+ * 标签宽度
98
+ * @type {Ref<UnwrapRef<string>>}
99
+ */
100
+ const labelWidth = ref('auto');
101
+ /**
102
+ * 临时存储公式
103
+ * @type {UnwrapNestedRefs<{}>}
104
+ */
105
+ const formulaMap = reactive({});
106
+ const watchFields = reactive({});
107
+
108
+ const { t } = useI18n();
109
+
110
+ const globalConfig = inject('globalConfig');
111
+
112
+ // 初始化表单配置
113
+ const isConfigInitialized = ref(false);
114
+
115
+ /**
116
+ * 计算表单列属性
117
+ * @param grid
118
+ * @param colSpan
119
+ */
120
+ const getColProps = (grid, colSpan) => {
121
+ if (grid === 1 || colSpan === 1) {
122
+ return;
123
+ }
124
+ const span = 24 / grid;
125
+ return { span: span * colSpan };
126
+ };
127
+ /**根据ProForm参数要求进行初始化类型*/
128
+ const getDefaultType = (item) => {
129
+ if ('sliderRange' === item.type) {
130
+ return [30, 60];
131
+ }
132
+ if (arrayTypes.includes(item.type)) {
133
+ return [];
134
+ }
135
+ if (stringTypes.includes(item.type)) {
136
+ return '';
137
+ }
138
+ return '';
139
+ };
140
+
141
+ /**提取计算公式中涉及的字段 */
142
+ const extractFields = (list) => {
143
+ const fieldMap = {};
144
+ const regex = /{\s*(\w+)\s*}/g;
145
+ list.forEach((item) => {
146
+ let match;
147
+ while ((match = regex.exec(item.formulaValue)) !== null) {
148
+ const field = match[1];
149
+ if (!fieldMap[field]) {
150
+ fieldMap[field] = [];
151
+ }
152
+ fieldMap[field].push({
153
+ field: item.formulaField,
154
+ formulaValue: item.formulaValue
155
+ });
156
+ }
157
+ });
158
+
159
+ return fieldMap;
160
+ };
161
+
162
+ /**
163
+ * 根据名称获取组件实例
164
+ * @param refName
165
+ * @returns {*}
166
+ */
167
+ const getRef = (refName) => {
168
+ return proFormRef.value.getRef(refName);
169
+ };
170
+ /**根据实体表单配置初始化表单数据 */
171
+ const loadConfig = async (refid = props?.refid) => {
172
+ if (!refid) {
173
+ return false;
174
+ }
175
+ isConfigInitialized.value = false;
176
+ const init = {};
177
+
178
+ const entityFormConfig = await moduleCache.getEntityForm(refid);
179
+ if (entityFormConfig?.properties) {
180
+ entityFormConfig.properties.forEach((item) => {
181
+ init[item.name] = getDefaultType(item);
182
+ });
183
+
184
+ items.value = entityFormConfig.properties
185
+ .filter((item) => item.insert)
186
+ .filter((item) => !filterFields.includes(item.name))
187
+ .map((item, index) => {
188
+ if (item.i18n) {
189
+ const i18n = t(item.i18n);
190
+ item.label = i18n && i18n.indexOf('.') == -1 ? i18n : item.label;
191
+ }
192
+ let editParams = item?.editorParam ? JSON.parse(item.editorParam) : {};
193
+ if (item.editor === 'SohelpDict') {
194
+ editParams['code'] = item.dict || editParams?.code;
195
+ }
196
+ if (item['length'] > 0) {
197
+ editParams['maxlength'] = item['length'];
198
+ }
199
+ editParams.readonly = item?.readonly || false;
200
+
201
+ return {
202
+ key: item?.name || 'tempKey' + index,
203
+ type: item?.editor ? item.editor : matchingType(item?.type || ''),
204
+ i18n: item.i18n,
205
+ label: item.label,
206
+ length: item.length,
207
+ fieldType: item.type,
208
+ isEntity: item?.isEntity ?? true,
209
+ required: item.notNull,
210
+ itemProps: item?.formItemOption ? JSON.parse(item.formItemOption) : '',
211
+ props: editParams,
212
+ options: item?.editorData ? JSON.parse(item.editorData) : '',
213
+ prop: item?.name,
214
+ hidden: item.hidden || filterFields.includes(item.name),
215
+ colProps: getColProps(entityFormConfig.gridNum, item.gridNum)
216
+ };
217
+ })
218
+ .filter((p) => p.hidden !== true);
219
+ labelWidth.value = props.labelWidth || entityFormConfig.labelWidth || 'auto';
220
+ grid.value = mobile.value ? 1 : entityFormConfig.gridNum || props.gridNum;
221
+
222
+ // 计算公式
223
+ if (entityFormConfig.formula && entityFormConfig.formula.length > 0) {
224
+ Object.assign(
225
+ formulaMap,
226
+ entityFormConfig.formula.reduce((a, c) => (a[c.formulaField] || (a[c.formulaField] = c), a), {})
227
+ );
228
+ Object.assign(watchFields, extractFields(entityFormConfig.formula));
229
+ }
230
+ }
231
+ isConfigInitialized.value = true;
232
+ defaultFormValue.value = init;
233
+ return Promise.resolve(init);
234
+ };
235
+ /**
236
+ * 获取表单数据
237
+ */
238
+ const getFormData = () => {
239
+ return { ...formData.value };
240
+ };
241
+
242
+ /**
243
+ * 获取表单值
244
+ */
245
+ const getFormValue = () => {
246
+ return { ...formValue.value };
247
+ };
248
+ /**
249
+ * 设置表数据
250
+ * @param value
251
+ */
252
+ const setFormValue = (newModelValue) => {
253
+ resetFormValue();
254
+ formValue.value = newModelValue;
255
+ originModelValue.value = { ...newModelValue };
256
+ loading.value = false;
257
+ };
258
+
259
+ /**
260
+ * 设置表单字段值
261
+ * @param fieldName 字段名称
262
+ * @param fieldValue
263
+ */
264
+ const setFieldValue = (fieldName, fieldValue) => {
265
+ formValue.value[fieldName] = fieldValue;
266
+ };
267
+ /**
268
+ * 获取表单字段值
269
+ * @param fieldName 字段名称
270
+ * @returns {*}
271
+ */
272
+ const getFieldValue = (fieldName) => {
273
+ return formValue.value[fieldName];
274
+ };
275
+
276
+ /**
277
+ * 设置表单数据
278
+ * @param _data 数据对象
279
+ */
280
+
281
+ const setFormData = async (_formData = {}) => {
282
+ loading.value = true;
283
+
284
+ await isConfigDone();
285
+ Object.assign(formData.value, _formData);
286
+ setFormValue(switchFormValue(_formData));
287
+ setTimeout(() => {
288
+ clearValidate();
289
+ }, 0);
290
+ };
291
+
292
+ /**
293
+ * 清理表单验证信息
294
+ */
295
+ const clearValidate = () => {
296
+ nextTick(() => {
297
+ proFormRef.value?.clearValidate();
298
+ });
299
+ };
300
+
301
+ const validate = () => {
302
+ return proFormRef.value?.validate();
303
+ };
304
+
305
+ /**
306
+ * 对比两个对象,找出修改过的属性和值
307
+ * @param oldObj
308
+ * @param newObj
309
+ */
310
+ function shallowCompare(oldObj, newObj) {
311
+ oldObj = oldObj || {};
312
+ newObj = newObj || {};
313
+
314
+ const changedProps = {};
315
+ const allKeys = new Set([...Object.keys(oldObj), ...Object.keys(newObj)]);
316
+
317
+ for (const key of allKeys) {
318
+ if (oldObj[key] !== newObj[key]) {
319
+ changedProps[key] = newObj[key];
320
+ }
321
+ }
322
+ return { id: oldObj?.id || newObj?.id || '', ...changedProps };
323
+ }
324
+
325
+ /**
326
+ * 仅仅获取已更新的数据对象
327
+ */
328
+ const getCrudUpdater = async () => {
329
+ await isConfigDone();
330
+ return shallowCompare(originModelValue.value, formValue.value);
331
+ };
332
+
333
+ loadConfig(props.refid).then(async (init = {}) => {
334
+ setFormData(init);
335
+ });
336
+ /**
337
+ * 从formData对象转化ModelValue
338
+ * @param formData
339
+ * @returns {{}}
340
+ */
341
+ const switchFormValue = (formData) => {
342
+ const result = {};
343
+ Object.keys(formData).forEach((key) => {
344
+ const obj = formData[key];
345
+ if (typeof obj === 'object') {
346
+ result[key] = obj?.id || '';
347
+ } else {
348
+ result[key] = obj;
349
+ }
350
+ });
351
+ return result;
352
+ };
353
+
354
+ /**
355
+ * 配置是否加载完成
356
+ */
357
+ const isConfigDone = async () => {
358
+ return new Promise((resolve) => {
359
+ if (isConfigInitialized.value) {
360
+ resolve();
361
+ } else {
362
+ let timer = setInterval(() => {
363
+ if (isConfigInitialized.value) {
364
+ clearInterval(timer);
365
+ resolve();
366
+ }
367
+ }, 10);
368
+ }
369
+ });
370
+ };
371
+
372
+ /**
373
+ * 通过引擎加载数据
374
+ * @param params
375
+ * @param callback
376
+ */
377
+ const load = async (params = {}, callback) => {
378
+ loading.value = true;
379
+ await isConfigDone();
380
+ CrudHttp.getById(props.refid, params, async (res) => {
381
+ if (res.meta.success) {
382
+ await setFormData(res.data);
383
+ }
384
+ callback && callback(res);
385
+ });
386
+ };
387
+ /**
388
+ * 加载表单初始化数据
389
+ * @param params
390
+ * @returns {Promise<void>}
391
+ */
392
+ const loadByInitial = async (params = {}, callback) => {
393
+ await isConfigDone();
394
+ return CrudHttp.initial(props.refid, params, async (res) => {
395
+ if (res.meta.success) {
396
+ await setFormData(res.data);
397
+ callback && callback(res);
398
+ return Promise.resolve(res);
399
+ } else {
400
+ callback && callback(res);
401
+ EleMessage.error(res.meta.message);
402
+ return Promise.reject(res);
403
+ }
404
+ });
405
+ };
406
+
407
+ /**
408
+ * 通过引擎保存数据
409
+ * @param params
410
+ * @param callback
411
+ */
412
+ const save = async (params = {}, callback) => {
413
+ await isConfigDone();
414
+ loading.value = true;
415
+ const refid = props.refid;
416
+ const key = refid && refid.indexOf('!') !== -1 ? refid.split('!')[1] : 'default';
417
+ let data = {};
418
+ data[key] = {
419
+ ...(await getCrudUpdater()),
420
+ ...params
421
+ };
422
+ return CrudHttp.save(refid, data, (res) => {
423
+ callback?.(res);
424
+ loading.value = false;
425
+ });
426
+ };
427
+
428
+ /**
429
+ * 监听表单值变化以处理计算公式
430
+ */
431
+ watch(
432
+ formValue,
433
+ (val) => {
434
+ emit('update:modelValue', val);
435
+ emit('update:data', formData);
436
+ if (val) {
437
+ if (Object.keys(watchFields).length > 0) {
438
+ Object.keys(val).forEach((changedField) => {
439
+ if (watchFields.hasOwnProperty(changedField)) {
440
+ const formulas = watchFields[changedField];
441
+ formulas.forEach((formula) => {
442
+ if (formula && formula.formulaValue) {
443
+ try {
444
+ // 公式表达式处理
445
+ const expr = formula.formulaValue.replace(/\s+/g, '').replace(/\${/g, 'row.').replace(/}/g, '');
446
+ val[formula.field] = new Function('row', `return ${expr}`)(val);
447
+ } catch (e) {
448
+ console.error('计算公式错误', e);
449
+ EleMessage.error('计算公式错误' + e.message);
450
+ }
451
+ }
452
+ });
453
+ }
454
+ });
455
+ }
456
+ }
457
+ },
458
+ {
459
+ immediate: true,
460
+ deep: true
461
+ }
462
+ );
463
+ /**
464
+ * 获取配置项
465
+ * @param fieldName
466
+ * @returns {*}
467
+ */
468
+ const getItemValue = (fieldName) => {
469
+ return items.value[fieldName];
470
+ };
471
+ /**
472
+ * 重新定义事件和属性
473
+ * @param fieldName
474
+ * @param objectValue
475
+ */
476
+ const setItemValue = (fieldName, objectValue) => {
477
+ items.value.map((item) => {
478
+ if (item.key === fieldName) {
479
+ Object.assign(item, objectValue);
480
+ return item;
481
+ }
482
+ });
483
+ };
484
+
485
+ const resetFormValue = () => {
486
+ formValue.value = { ...defaultFormValue.value };
487
+ };
488
+
489
+ defineExpose({
490
+ loadConfig,
491
+ getItemValue,
492
+ setItemValue,
493
+ loadByInitial,
494
+ load,
495
+ save,
496
+ getRef,
497
+ proFormRef,
498
+ clearValidate,
499
+ setFieldValue,
500
+ getFieldValue,
501
+ labelWidth,
502
+ grid,
503
+ getFormData,
504
+ setFormData,
505
+ setFormValue,
506
+ getFormValue,
507
+ getCrudUpdater,
508
+ globalConfig,
509
+ resetFormValue,
510
+ validate
511
+ });
512
+ </script>
513
+ <script>
514
+ export default {
515
+ name: 'SohelpEntityForm'
516
+ };
517
+ </script>
518
+
519
+ <style lang="scss" scoped>
520
+ .sohelp-entity-form {
521
+ height: auto;
522
+ }
523
+ </style>
524
+ ;
@@ -0,0 +1,30 @@
1
+ <template>
2
+ <sohelp-grid-view v-bind="$attrs" ref="sohelpEntityGridRef" :refid="refid" :isEntityGrid="true"></sohelp-grid-view>
3
+ </template>
4
+ <script>
5
+ import SohelpGridView from '../sohelp-grid-view/index.vue'
6
+ import {ref} from "vue";
7
+ export default {
8
+ name: "SohelpEntityGrid",
9
+ components: {SohelpGridView},
10
+ props:{
11
+ modelValue: Object,
12
+ /** 实体配置 */
13
+ refid: {
14
+ type: String,
15
+ required: true
16
+ }
17
+ },
18
+ setup(props, {emits}) {
19
+ const sohelpEntityGridRef = ref();
20
+
21
+ return {
22
+ sohelpEntityGridRef
23
+ }
24
+ }
25
+ }
26
+ </script>
27
+
28
+ <style scoped>
29
+
30
+ </style>