config.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <script>
  2. import { defineProps, ref, reactive, computed, provide, getCurrentInstance, watch, nextTick, onMounted } from 'vue'
  3. import ConfigPanel from '@ER/formEditor/components/Panels/Config/index.vue'
  4. import hooks from '@ER/hooks'
  5. import utils from '@ER/utils'
  6. import _ from 'lodash-es'
  7. import defaultProps from './defaultProps'
  8. import { globalConfig } from './componentsConfig'
  9. export default {
  10. name: 'EverrightFormConfig'
  11. }
  12. </script>
  13. <script setup>
  14. const emit = defineEmits(['listener'])
  15. const props = defineProps(
  16. _.merge(
  17. {
  18. field: {
  19. type: [Object, String],
  20. required: true
  21. },
  22. fields: {
  23. type: Array,
  24. default: () => []
  25. }
  26. },
  27. defaultProps
  28. )
  29. )
  30. const layout = {
  31. pc: [],
  32. mobile: []
  33. }
  34. const state = reactive({
  35. store: [],
  36. selected: {},
  37. config: globalConfig,
  38. platform: 'pc',
  39. Namespace: 'formEditor',
  40. validateStates: [],
  41. data: {},
  42. mode: 'config',
  43. fields: props.fields,
  44. logic: {}
  45. })
  46. const element = ref('')
  47. const ns = hooks.useNamespace('Main', state.Namespace)
  48. const loading = ref(false)
  49. const setSelection = node => {
  50. let result = ''
  51. if (node === 'root') {
  52. result = state.config
  53. } else {
  54. if (node.type === 'inline') {
  55. result = node.columns[0]
  56. } else {
  57. result = node
  58. }
  59. }
  60. state.selected = result
  61. }
  62. const switchPlatform = platform => {
  63. state.platform = platform
  64. }
  65. const fireEvent = (type, data) => {
  66. emit('listener', {
  67. type,
  68. data
  69. })
  70. }
  71. provide('Everright', {
  72. state,
  73. emit,
  74. props,
  75. setSelection,
  76. switchPlatform,
  77. fireEvent
  78. })
  79. watch(
  80. () => props.field,
  81. newVal => {
  82. if (newVal !== 'root') {
  83. state.store[0] = newVal
  84. utils.addContext(newVal, state.store)
  85. }
  86. setSelection(newVal)
  87. },
  88. {
  89. immediate: true
  90. }
  91. )
  92. defineExpose({
  93. switchPlatform
  94. })
  95. watch(
  96. () => state.selected,
  97. newVal => {
  98. fireEvent('changeParams', _.cloneDeep(newVal))
  99. },
  100. {
  101. deep: true,
  102. immediate: true
  103. }
  104. )
  105. </script>
  106. <template>
  107. <ConfigPanel mode="config"></ConfigPanel>
  108. </template>