Commit bae44b4541c42c952569fa11ad9f089d03d5d3f8

Authored by xingyu
1 parent d207b95b

feat: 引入表单构造器

yudao-ui-admin-vue3/package.json
@@ -24,6 +24,8 @@ @@ -24,6 +24,8 @@
24 "lint:pretty": "pretty-quick --staged" 24 "lint:pretty": "pretty-quick --staged"
25 }, 25 },
26 "dependencies": { 26 "dependencies": {
  27 + "@form-create/designer": "^3.1.0",
  28 + "@form-create/element-ui": "^3.1.17",
27 "@iconify/iconify": "^3.0.1", 29 "@iconify/iconify": "^3.0.1",
28 "@vueuse/core": "^9.11.0", 30 "@vueuse/core": "^9.11.0",
29 "@wangeditor/editor": "^5.1.23", 31 "@wangeditor/editor": "^5.1.23",
yudao-ui-admin-vue3/pnpm-lock.yaml
@@ -3,6 +3,8 @@ lockfileVersion: 5.4 @@ -3,6 +3,8 @@ lockfileVersion: 5.4
3 specifiers: 3 specifiers:
4 '@commitlint/cli': ^17.4.2 4 '@commitlint/cli': ^17.4.2
5 '@commitlint/config-conventional': ^17.4.2 5 '@commitlint/config-conventional': ^17.4.2
  6 + '@form-create/designer': ^3.1.0
  7 + '@form-create/element-ui': ^3.1.17
6 '@iconify/iconify': ^3.0.1 8 '@iconify/iconify': ^3.0.1
7 '@iconify/json': ^2.2.8 9 '@iconify/json': ^2.2.8
8 '@intlify/unplugin-vue-i18n': ^0.8.1 10 '@intlify/unplugin-vue-i18n': ^0.8.1
@@ -85,6 +87,8 @@ specifiers: @@ -85,6 +87,8 @@ specifiers:
85 xe-utils: ^3.5.7 87 xe-utils: ^3.5.7
86 88
87 dependencies: 89 dependencies:
  90 + '@form-create/designer': 3.1.0_vue@3.2.45
  91 + '@form-create/element-ui': 3.1.17_vue@3.2.45
88 '@iconify/iconify': 3.0.1 92 '@iconify/iconify': 3.0.1
89 '@vueuse/core': 9.11.0_vue@3.2.45 93 '@vueuse/core': 9.11.0_vue@3.2.45
90 '@wangeditor/editor': 5.1.23 94 '@wangeditor/editor': 5.1.23
@@ -436,6 +440,14 @@ packages: @@ -436,6 +440,14 @@ packages:
436 - supports-color 440 - supports-color
437 dev: true 441 dev: true
438 442
  443 + /@babel/runtime-corejs3/7.20.7:
  444 + resolution: {integrity: sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg==}
  445 + engines: {node: '>=6.9.0'}
  446 + dependencies:
  447 + core-js-pure: 3.27.2
  448 + regenerator-runtime: 0.13.11
  449 + dev: false
  450 +
439 /@babel/runtime/7.20.1: 451 /@babel/runtime/7.20.1:
440 resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==} 452 resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==}
441 engines: {node: '>=6.9.0'} 453 engines: {node: '>=6.9.0'}
@@ -934,6 +946,100 @@ packages: @@ -934,6 +946,100 @@ packages:
934 '@floating-ui/core': 1.0.2 946 '@floating-ui/core': 1.0.2
935 dev: false 947 dev: false
936 948
  949 + /@form-create/component-elm-checkbox/3.1.15:
  950 + resolution: {integrity: sha512-bAl3k0p76wwMX0OxeR8KAEiUl2RP1Jl1kAqbjD762EcSXGgaXgP94v9ag1JhUoiwZkSKWl6IF+e/utjEonRSFw==}
  951 + dependencies:
  952 + '@form-create/utils': 3.1.15
  953 + dev: false
  954 +
  955 + /@form-create/component-elm-frame/3.1.15:
  956 + resolution: {integrity: sha512-78WbMpMLTYwTo3QP7Fa+N2VF/u1vmRuwDmiobtBtVg9EE7m6//bQV96ibnLNXX27MD41gIg+o1GUJtx/qxZ8Ew==}
  957 + dependencies:
  958 + '@form-create/utils': 3.1.15
  959 + dev: false
  960 +
  961 + /@form-create/component-elm-group/3.1.15:
  962 + resolution: {integrity: sha512-V/oVxHf9rHqqMHRV0XRVED9EYFCVZ8Tv/EbbIN/4rORruHtzdQOH8I0QHQ9T4vZO9Q4eblApzcJb8Y7bbHX23Q==}
  963 + dependencies:
  964 + '@form-create/utils': 3.1.15
  965 + dev: false
  966 +
  967 + /@form-create/component-elm-radio/3.1.15:
  968 + resolution: {integrity: sha512-qAf1VlhrUvMlgzkz6BYLRn0UOLahkTI/cbzt8nkp5PL1oGoSXp5xqIOtHMjbnGEkEXW57kjRKI5Q7UjzIhYmvQ==}
  969 + dependencies:
  970 + '@form-create/utils': 3.1.15
  971 + dev: false
  972 +
  973 + /@form-create/component-elm-select/3.1.15:
  974 + resolution: {integrity: sha512-ZnvPn/TGqgFDed7bKabjRvlwlQ8RYq5WCG9Iy63d2igC8577tv5QTI2rNvfGfxxH/254MPwgNlA94JukxzEOTw==}
  975 + dependencies:
  976 + '@form-create/utils': 3.1.15
  977 + dev: false
  978 +
  979 + /@form-create/component-elm-tree/3.1.15:
  980 + resolution: {integrity: sha512-4VPN406A8Mvannn8P/2DvStqDYFfDHZ+ILG/0JndOyfe+GdYdSA5SwD3LfC4zD6AhpGrkOJXbd4YYXlBUtzt8g==}
  981 + dependencies:
  982 + '@form-create/utils': 3.1.15
  983 + dev: false
  984 +
  985 + /@form-create/component-elm-upload/3.1.17:
  986 + resolution: {integrity: sha512-9FToAS1rQAS1KBq5YK473i3EpGGwHAerqjuoiKiH4wlaGsJma+nGtRui1SSAF4r4QfWGKuSGZJmPtT6EMP4w8Q==}
  987 + dependencies:
  988 + '@form-create/utils': 3.1.15
  989 + dev: false
  990 +
  991 + /@form-create/component-subform/3.1.5:
  992 + resolution: {integrity: sha512-JHNEFGuwpnjGvCJ0I0GCqPL5al0qXoN4ymnRBpm+oL+6MMo5bz1kUyoqMX1MutuC96gHTqpeqc67hssi8g2mIw==}
  993 + dev: false
  994 +
  995 + /@form-create/component-wangeditor/3.1.12:
  996 + resolution: {integrity: sha512-ncsHFCiBY4veyD0yj0kWz+hqEjvY8VGTCJYpYL/b7/8dnPAEaSn9fwOKc32eyZbb8YJXwt3BivvFBx3aMj0cTg==}
  997 + dependencies:
  998 + wangeditor: 4.7.15
  999 + dev: false
  1000 +
  1001 + /@form-create/core/3.1.17_vue@3.2.45:
  1002 + resolution: {integrity: sha512-XGsrmUR5nQEvDvxhB035df62iunSA91oQ77XbGvfaoi8Sz/EBos7xbVdIXNfACxdLMedy33+LBVGIrEHU8UNjw==}
  1003 + peerDependencies:
  1004 + vue: ^3.1.0
  1005 + dependencies:
  1006 + '@form-create/utils': 3.1.15
  1007 + vue: 3.2.45
  1008 + dev: false
  1009 +
  1010 + /@form-create/designer/3.1.0_vue@3.2.45:
  1011 + resolution: {integrity: sha512-+YH/MkInTyL1bNqX6BSeixPlNUxyeqMvy5zrC97nzf+m87SuBny+qFECEkMWhtQ4GTAIy91DjxQM2KJ6QTlB4w==}
  1012 + dependencies:
  1013 + '@form-create/component-wangeditor': 3.1.12
  1014 + '@form-create/element-ui': 3.1.17_vue@3.2.45
  1015 + '@form-create/utils': 3.1.15
  1016 + vuedraggable: 4.1.0_vue@3.2.45
  1017 + transitivePeerDependencies:
  1018 + - vue
  1019 + dev: false
  1020 +
  1021 + /@form-create/element-ui/3.1.17_vue@3.2.45:
  1022 + resolution: {integrity: sha512-MQ/ozkH8Ckx1rgzUcrQmqqfg3SCOBb6AYIOn6YcF/H+iid7xbq16qJjPa0sAKNlO3WC6ak3ucF6KuWu4R7uChw==}
  1023 + peerDependencies:
  1024 + vue: ^3.1.0
  1025 + dependencies:
  1026 + '@form-create/component-elm-checkbox': 3.1.15
  1027 + '@form-create/component-elm-frame': 3.1.15
  1028 + '@form-create/component-elm-group': 3.1.15
  1029 + '@form-create/component-elm-radio': 3.1.15
  1030 + '@form-create/component-elm-select': 3.1.15
  1031 + '@form-create/component-elm-tree': 3.1.15
  1032 + '@form-create/component-elm-upload': 3.1.17
  1033 + '@form-create/component-subform': 3.1.5
  1034 + '@form-create/core': 3.1.17_vue@3.2.45
  1035 + '@form-create/utils': 3.1.15
  1036 + vue: 3.2.45
  1037 + dev: false
  1038 +
  1039 + /@form-create/utils/3.1.15:
  1040 + resolution: {integrity: sha512-tP6Z/c2XC6OYrI8D9/XWvJc2h6apsyMFTy051sY+tCcxppqyR7dBEEXmgfWOrAr980N7k10g27kwJ9TdVn+bfw==}
  1041 + dev: false
  1042 +
937 /@humanwhocodes/config-array/0.11.8: 1043 /@humanwhocodes/config-array/0.11.8:
938 resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} 1044 resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
939 engines: {node: '>=10.10.0'} 1045 engines: {node: '>=10.10.0'}
@@ -2470,6 +2576,11 @@ packages: @@ -2470,6 +2576,11 @@ packages:
2470 engines: {node: '>=0.10.0'} 2576 engines: {node: '>=0.10.0'}
2471 dev: true 2577 dev: true
2472 2578
  2579 + /core-js-pure/3.27.2:
  2580 + resolution: {integrity: sha512-Cf2jqAbXgWH3VVzjyaaFkY1EBazxugUepGymDoeteyYr9ByX51kD2jdHZlsEF/xnJMyN3Prua7mQuzwMg6Zc9A==}
  2581 + requiresBuild: true
  2582 + dev: false
  2583 +
2473 /core-js/3.26.1: 2584 /core-js/3.26.1:
2474 resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/core-js/-/core-js-3.26.1.tgz} 2585 resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/core-js/-/core-js-3.26.1.tgz}
2475 requiresBuild: true 2586 requiresBuild: true
@@ -5369,6 +5480,10 @@ packages: @@ -5369,6 +5480,10 @@ packages:
5369 - supports-color 5480 - supports-color
5370 dev: true 5481 dev: true
5371 5482
  5483 + /sortablejs/1.14.0:
  5484 + resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==}
  5485 + dev: false
  5486 +
5372 /source-map-js/1.0.2: 5487 /source-map-js/1.0.2:
5373 resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 5488 resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
5374 engines: {node: '>=0.10.0'} 5489 engines: {node: '>=0.10.0'}
@@ -5857,7 +5972,6 @@ packages: @@ -5857,7 +5972,6 @@ packages:
5857 5972
5858 /tslib/2.4.1: 5973 /tslib/2.4.1:
5859 resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} 5974 resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
5860 - dev: true  
5861 5975
5862 /tsutils/3.21.0_typescript@4.9.4: 5976 /tsutils/3.21.0_typescript@4.9.4:
5863 resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 5977 resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
@@ -6342,6 +6456,15 @@ packages: @@ -6342,6 +6456,15 @@ packages:
6342 '@vue/server-renderer': 3.2.45_vue@3.2.45 6456 '@vue/server-renderer': 3.2.45_vue@3.2.45
6343 '@vue/shared': 3.2.45 6457 '@vue/shared': 3.2.45
6344 6458
  6459 + /vuedraggable/4.1.0_vue@3.2.45:
  6460 + resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==}
  6461 + peerDependencies:
  6462 + vue: ^3.0.1
  6463 + dependencies:
  6464 + sortablejs: 1.14.0
  6465 + vue: 3.2.45
  6466 + dev: false
  6467 +
6345 /vxe-table/4.3.9_vue@3.2.45+xe-utils@3.5.7: 6468 /vxe-table/4.3.9_vue@3.2.45+xe-utils@3.5.7:
6346 resolution: {integrity: sha512-Ns7Ooa7lOHBpks90i0k0BMNyxfMpUo39ryxTgKE41X3xVnI9tGQs2U6+klfDlsuqYfmG3ibyzHN3OCrWbbKo4Q==} 6469 resolution: {integrity: sha512-Ns7Ooa7lOHBpks90i0k0BMNyxfMpUo39ryxTgKE41X3xVnI9tGQs2U6+klfDlsuqYfmG3ibyzHN3OCrWbbKo4Q==}
6347 peerDependencies: 6470 peerDependencies:
@@ -6352,6 +6475,14 @@ packages: @@ -6352,6 +6475,14 @@ packages:
6352 xe-utils: 3.5.7 6475 xe-utils: 3.5.7
6353 dev: false 6476 dev: false
6354 6477
  6478 + /wangeditor/4.7.15:
  6479 + resolution: {integrity: sha512-aPTdREd8BxXVyJ5MI+LU83FQ7u1EPd341iXIorRNYSOvoimNoZ4nPg+yn3FGbB93/owEa6buLw8wdhYnMCJQLg==}
  6480 + dependencies:
  6481 + '@babel/runtime': 7.20.1
  6482 + '@babel/runtime-corejs3': 7.20.7
  6483 + tslib: 2.4.1
  6484 + dev: false
  6485 +
6355 /web-storage-cache/1.1.1: 6486 /web-storage-cache/1.1.1:
6356 resolution: {integrity: sha512-D0MieGooOs8RpsrK+vnejXnvh4OOv/+lTFB35JRkJJQt+uOjPE08XpaE0QBLMTRu47B1KGT/Nq3Gbag3Orinzw==} 6487 resolution: {integrity: sha512-D0MieGooOs8RpsrK+vnejXnvh4OOv/+lTFB35JRkJJQt+uOjPE08XpaE0QBLMTRu47B1KGT/Nq3Gbag3Orinzw==}
6357 dev: false 6488 dev: false
yudao-ui-admin-vue3/src/main.ts
@@ -13,12 +13,15 @@ import { setupStore } from '@/store' @@ -13,12 +13,15 @@ import { setupStore } from '@/store'
13 // 全局组件 13 // 全局组件
14 import { setupGlobCom } from '@/components' 14 import { setupGlobCom } from '@/components'
15 15
16 -// 引入element-plus 16 +// 引入 element-plus
17 import { setupElementPlus } from '@/plugins/elementPlus' 17 import { setupElementPlus } from '@/plugins/elementPlus'
18 18
19 -// 引入vxe-table 19 +// 引入 vxe-table
20 import { setupVxeTable } from '@/plugins/vxeTable' 20 import { setupVxeTable } from '@/plugins/vxeTable'
21 21
  22 +// 引入 form-create
  23 +import { setupFormCreate } from '@/plugins/formCreate'
  24 +
22 // 引入全局样式 25 // 引入全局样式
23 import '@/styles/index.scss' 26 import '@/styles/index.scss'
24 27
@@ -39,6 +42,7 @@ import './permission' @@ -39,6 +42,7 @@ import './permission'
39 42
40 import { isDevMode } from '@/utils/env' 43 import { isDevMode } from '@/utils/env'
41 44
  45 +// 本地开发模式 全局引入 element-plus 样式,加快第一次进入速度
42 if (isDevMode()) { 46 if (isDevMode()) {
43 console.info(isDevMode()) 47 console.info(isDevMode())
44 import('element-plus/dist/index.css') 48 import('element-plus/dist/index.css')
@@ -58,6 +62,8 @@ const setupAll = async () => { @@ -58,6 +62,8 @@ const setupAll = async () => {
58 62
59 setupVxeTable(app) 63 setupVxeTable(app)
60 64
  65 + setupFormCreate(app)
  66 +
61 setupRouter(app) 67 setupRouter(app)
62 68
63 setupAuth(app) 69 setupAuth(app)
yudao-ui-admin-vue3/src/plugins/formCreate/index.ts 0 → 100644
  1 +import type { App } from 'vue'
  2 +// 👇使用 form-create 需额外全局引入 element plus 组件
  3 +import {
  4 + ElAside,
  5 + ElPopconfirm,
  6 + ElHeader,
  7 + ElMain,
  8 + ElContainer,
  9 + ElDivider,
  10 + ElTransfer,
  11 + ElAlert,
  12 + ElTabs,
  13 + ElTabPane
  14 +} from 'element-plus'
  15 +
  16 +import formCreate from '@form-create/element-ui'
  17 +import install from '@form-create/element-ui/auto-import'
  18 +import FcDesigner from '@form-create/designer'
  19 +
  20 +const components = [
  21 + ElAside,
  22 + ElPopconfirm,
  23 + ElHeader,
  24 + ElMain,
  25 + ElContainer,
  26 + ElDivider,
  27 + ElTransfer,
  28 + ElAlert,
  29 + ElTabs,
  30 + ElTabPane
  31 +]
  32 +
  33 +export const setupFormCreate = (app: App<Element>) => {
  34 + components.forEach((component) => {
  35 + app.component(component.name, component)
  36 + })
  37 +
  38 + formCreate.use(install)
  39 +
  40 + app.use(formCreate)
  41 +
  42 + app.use(FcDesigner)
  43 +}
yudao-ui-admin-vue3/src/views/infra/build/index.vue
1 <template> 1 <template>
2 - <div>index</div> 2 + <ContentWrap>
  3 + <fc-designer ref="designer" height="780px" />
  4 + </ContentWrap>
3 </template> 5 </template>
4 -<script setup lang="ts" name="Build"></script> 6 +<script setup lang="ts" name="Build">
  7 +const designer = ref()
  8 +</script>