App.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <!-- eslint-disable @typescript-eslint/no-explicit-any -->
  2. <script setup lang="ts">
  3. import { ref, onMounted } from 'vue'
  4. import type { Config, Handle } from '@form-create/designer'
  5. import { formConfig } from './form.config.ts'
  6. import FcDesigner from '@form-create/designer'
  7. // 组件
  8. import { RcSelect } from './plugins/components/rc-select.config.ts'
  9. import { RcRadio } from './plugins/components/rc-radio.config.ts'
  10. import { RcCheckbox } from './plugins/components/rc-checkbox.config.ts'
  11. // 菜单
  12. import { MenuOptions } from './plugins/menu/options.ts'
  13. import { MenuUpload } from './plugins/menu/upload.ts'
  14. import type { FcDesignerInstance } from '@form-create/designer' // 注册组件
  15. import { RcUpload } from './plugins/components/rc-upload.config.ts'
  16. /**
  17. * @see https://view.form-create.com/methods
  18. */
  19. declare global {
  20. interface Window {
  21. __QIANKUN__EVENT__: {
  22. on: (name: string, fn: (...arg: any[]) => void) => void
  23. emit: (name: string, ...arg: any[]) => boolean
  24. } // 事件中心
  25. __QIANKUN__REQUSET__: any // 请求API接口
  26. __QIANKUN__GUID__: () => string // 获取唯一标识
  27. __QIANKUN__OPEN__TAG__: () => void // 打开标签页
  28. __QIANKUN__QUITE__: () => void // 返回页面
  29. }
  30. }
  31. // 表单实例
  32. const designer = ref<FcDesignerInstance | null>(null)
  33. const api = ref(null)
  34. // 表单模板元素
  35. // 判断是独立运行的还是qiankun子应用
  36. const height = ref('100vh')
  37. const config = ref<Config>(formConfig)
  38. // 顶部更多操作按钮
  39. const handle = ref<Handle>([])
  40. // console.log('子应用', window.__QIANKUN__EVENT__)
  41. const onSave = async (config: { options: string; rule: string }) => {
  42. const rule = config.rule
  43. const options = config.options
  44. // 接收从主应用过来的事件
  45. window.__QIANKUN__EVENT__?.emit('save', {
  46. rule: JSON.parse(rule),
  47. options: JSON.parse(options),
  48. original: config,
  49. })
  50. }
  51. const rule = ref(
  52. '[{"type":"rc-checkbox","title":"多选框","props":{"clearable":true,"options":[{"key":"cw_1iqkm6k0p1n4111p61q8g8katdn1","label":"1234","value":"1234","validate":false,"tags":[]}]},"_fc_id":"id_Fd0jmadjp53oaec","name":"ref_Fw5smadjp53oafc","field":"Fnqymadjp53oagc","display":true,"hidden":false,"_fc_drag_tag":"rc-checkbox","options":[{"key":"cw_1iqkm6k0p1n4111p61q8g8katdn1","label":"1234","value":"1234","validate":false,"tags":[]}]},{"type":"rc-radio","title":"单选框","props":{"clearable":true,"options":[{"key":"cw_1iqkm6nli1v4f8p01pn01rs715r62","label":"1234","value":"1234","validate":false,"tags":[]}]},"_fc_id":"id_Fo8imadjp7v1ahc","name":"ref_F6j0madjp7v1aic","field":"Fhyhmadjp7v1ajc","display":true,"hidden":false,"_fc_drag_tag":"rc-radio","options":[{"key":"cw_1iqkm6nli1v4f8p01pn01rs715r62","label":"1234","value":"1234","validate":false,"tags":[]}]},{"type":"rc-upload","title":"图片","props":{"clearable":true},"_fc_id":"id_Fyhlmadknfeuabc","name":"ref_Fz6bmadknfeuacc","field":"Fj86madknfeuadc","display":true,"hidden":false,"_fc_drag_tag":"rc-upload"}]',
  53. )
  54. onMounted(async () => {
  55. // 注册拖拽规则
  56. designer.value?.addMenu(MenuOptions)
  57. designer.value?.addMenu(MenuUpload)
  58. designer.value?.addComponent(RcSelect)
  59. designer.value?.addComponent(RcRadio)
  60. designer.value?.addComponent(RcCheckbox)
  61. designer.value?.addComponent(RcUpload)
  62. // 注册菜单
  63. console.log(designer.value)
  64. // 设置拖拽规则
  65. designer.value?.setRule(rule.value)
  66. })
  67. </script>
  68. <template>
  69. <fc-designer
  70. ref="designer"
  71. :height="height"
  72. :handle="handle"
  73. :config="config"
  74. v-model:api="api"
  75. @save="onSave"
  76. @inputDate="
  77. () => {
  78. console.log(12313213)
  79. }
  80. "
  81. />
  82. </template>