resolver-egretimp-plus 0.0.4

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 (121) hide show
  1. package/babel.config.js +14 -0
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.LICENSE.txt +8 -0
  4. package/dist/theme/element/index.css +1 -0
  5. package/dist/theme/element/src/components/card.scss +4 -0
  6. package/dist/theme/element/src/components/collapse.scss +16 -0
  7. package/dist/theme/element/src/components/date.scss +13 -0
  8. package/dist/theme/element/src/components/form.scss +54 -0
  9. package/dist/theme/element/src/components/index.scss +42 -0
  10. package/dist/theme/element/src/components/input.scss +15 -0
  11. package/dist/theme/element/src/components/message.scss +31 -0
  12. package/dist/theme/element/src/components/scrollbar.scss +14 -0
  13. package/dist/theme/element/src/components/select.scss +17 -0
  14. package/dist/theme/element/src/components/steps.scss +6 -0
  15. package/dist/theme/element/src/components/table.scss +8 -0
  16. package/dist/theme/element/src/components/tabs.scss +68 -0
  17. package/dist/theme/element/src/components/tree.scss +0 -0
  18. package/dist/theme/element/src/index.scss +79 -0
  19. package/index.js +17 -0
  20. package/package.json +45 -0
  21. package/scripts/gulpfile.mjs +73 -0
  22. package/scripts/webpack.config.js +81 -0
  23. package/src/analysisComponent.jsx +166 -0
  24. package/src/components/helper/button.js +17 -0
  25. package/src/components/helper/dock.js +120 -0
  26. package/src/components/icons/question-filled.vue +13 -0
  27. package/src/components/packages/CmiButton.vue +84 -0
  28. package/src/components/packages/CmiCalendar.vue +138 -0
  29. package/src/components/packages/CmiCell.vue +34 -0
  30. package/src/components/packages/CmiCheckbox.vue +63 -0
  31. package/src/components/packages/CmiDatetimePicker.vue +84 -0
  32. package/src/components/packages/CmiDropdownMenu.vue +57 -0
  33. package/src/components/packages/CmiInput.vue +45 -0
  34. package/src/components/packages/CmiLink.vue +28 -0
  35. package/src/components/packages/CmiPicker.vue +120 -0
  36. package/src/components/packages/CmiRadio.vue +29 -0
  37. package/src/components/packages/CmiSearch.vue +39 -0
  38. package/src/components/packages/CmiSelect.vue +84 -0
  39. package/src/components/packages/CustomComponentCard.vue +40 -0
  40. package/src/components/packages/CustomComponentCardH5.vue +40 -0
  41. package/src/components/packages/CustomComponentCol.vue +69 -0
  42. package/src/components/packages/CustomComponentColH5.vue +8 -0
  43. package/src/components/packages/CustomComponentCollapse.vue +183 -0
  44. package/src/components/packages/CustomComponentCollapseH5.vue +37 -0
  45. package/src/components/packages/CustomComponentCycle.vue +95 -0
  46. package/src/components/packages/CustomComponentCycleTabPane.vue +92 -0
  47. package/src/components/packages/CustomComponentDialog.vue +162 -0
  48. package/src/components/packages/CustomComponentEditor.vue +43 -0
  49. package/src/components/packages/CustomComponentFormLayout.vue +63 -0
  50. package/src/components/packages/CustomComponentFormLayoutH5.vue +55 -0
  51. package/src/components/packages/CustomComponentGrid.vue +29 -0
  52. package/src/components/packages/CustomComponentGridCol.vue +29 -0
  53. package/src/components/packages/CustomComponentInputDialog.vue +144 -0
  54. package/src/components/packages/CustomComponentPlain.vue +80 -0
  55. package/src/components/packages/CustomComponentRow.vue +67 -0
  56. package/src/components/packages/CustomComponentSelectEmployees.vue +133 -0
  57. package/src/components/packages/CustomComponentSendMail.vue +72 -0
  58. package/src/components/packages/CustomComponentSteps.vue +41 -0
  59. package/src/components/packages/CustomComponentTabPane.vue +41 -0
  60. package/src/components/packages/CustomComponentTabPaneH5.vue +30 -0
  61. package/src/components/packages/CustomComponentTable.jsx +406 -0
  62. package/src/components/packages/CustomComponentTableH5.vue +58 -0
  63. package/src/components/packages/CustomComponentTabs.vue +75 -0
  64. package/src/components/packages/CustomComponentTabsH5.vue +86 -0
  65. package/src/components/packages/CustomComponentTree.vue +28 -0
  66. package/src/components/packages/ElButton.vue +90 -0
  67. package/src/components/packages/ElCheckbox.vue +55 -0
  68. package/src/components/packages/ElDatePicker.vue +58 -0
  69. package/src/components/packages/ElInput.vue +23 -0
  70. package/src/components/packages/ElInputNumber.vue +54 -0
  71. package/src/components/packages/ElPagination.vue +56 -0
  72. package/src/components/packages/ElRadio.vue +44 -0
  73. package/src/components/packages/ElSelect.vue +73 -0
  74. package/src/components/packages/ElText.vue +48 -0
  75. package/src/components/packages/ElTimePicker.vue +34 -0
  76. package/src/components/patchComponents.js +46 -0
  77. package/src/components/styles/CustomComponenTable.scss +125 -0
  78. package/src/components/tabs/index.js +8 -0
  79. package/src/components/tabs/src/constants.js +23 -0
  80. package/src/components/tabs/src/tab-bar.js +8 -0
  81. package/src/components/tabs/src/tab-bar.vue +92 -0
  82. package/src/components/tabs/src/tab-nav.jsx +413 -0
  83. package/src/components/tabs/src/tab-pane.js +15 -0
  84. package/src/components/tabs/src/tab-pane.vue +80 -0
  85. package/src/components/tabs/src/tabs.jsx +217 -0
  86. package/src/components/tabs/style/css.js +2 -0
  87. package/src/components/tabs/style/index.js +2 -0
  88. package/src/components/thirdPartyFrame/index.js +32 -0
  89. package/src/components/thirdPartyFrame/src/ThirdPartyFrame.vue +123 -0
  90. package/src/hooks/index.js +129 -0
  91. package/src/hooks/pageConfig.js +20 -0
  92. package/src/index.jsx +140 -0
  93. package/src/renderer.jsx +68 -0
  94. package/src/rules/eventsSupplement.js +439 -0
  95. package/src/rules/parseCondition.js +359 -0
  96. package/src/rules/ruleUtils.js +208 -0
  97. package/src/rules/rulesDriver.js +118 -0
  98. package/src/theme/element/components/card.scss +4 -0
  99. package/src/theme/element/components/collapse.scss +16 -0
  100. package/src/theme/element/components/date.scss +13 -0
  101. package/src/theme/element/components/form.scss +54 -0
  102. package/src/theme/element/components/index.scss +42 -0
  103. package/src/theme/element/components/input.scss +15 -0
  104. package/src/theme/element/components/message.scss +31 -0
  105. package/src/theme/element/components/scrollbar.scss +14 -0
  106. package/src/theme/element/components/select.scss +17 -0
  107. package/src/theme/element/components/steps.scss +6 -0
  108. package/src/theme/element/components/table.scss +8 -0
  109. package/src/theme/element/components/tabs.scss +68 -0
  110. package/src/theme/element/components/tree.scss +0 -0
  111. package/src/theme/element/index.scss +79 -0
  112. package/src/utils/common.js +230 -0
  113. package/src/utils/const.js +198 -0
  114. package/src/utils/defaultVal.js +23 -0
  115. package/src/utils/format.js +19 -0
  116. package/src/utils/index.js +4 -0
  117. package/src/utils/is.js +69 -0
  118. package/src/utils/preserveFunc.js +33 -0
  119. package/src/utils/render.jsx +714 -0
  120. package/src/utils/request.js +10 -0
  121. package/src/utils/valid.js +71 -0
@@ -0,0 +1,183 @@
1
+ <template>
2
+ <component :is="component" :class="[component === ElCard ? 'is-card' : '']" class="standard-wrap custom-component-collapse" v-bind="{...componentProps, ...attrs}">
3
+ <ElCollapse v-bind="{...collapseProps}" :class="collapseClass" v-model="activeNames">
4
+ <ElCollapseItem v-bind="collapseItemProps" >
5
+ <template #title>
6
+ <div class="collapge-slot-title">
7
+ <span>{{ lang.indexOf('zh') > -1 ? props.config.metaNameZh : props.config.metaNameEn }}</span>
8
+ <ElRow>
9
+ <Renderer @click="stopPropagation" :config="slotPmPageMetaList" v-model="props.refValue.value"></Renderer>
10
+ </ElRow>
11
+ </div>
12
+ </template>
13
+ <ElRow>
14
+ <Renderer :config="pmPageMetaList" v-model="props.refValue.value"></Renderer>
15
+ </ElRow>
16
+ </ElCollapseItem>
17
+ </ElCollapse>
18
+ </component>
19
+ </template>
20
+ <script setup>
21
+ import { ElCollapse, ElCollapseItem, ElCard, ElRow } from 'element-plus'
22
+ import Renderer from '../../renderer.jsx'
23
+ import { computed, inject, useAttrs, defineEmits, defineProps } from 'vue'
24
+ import { commonPropsType } from '../../utils/index.js'
25
+
26
+ defineOptions({
27
+ inheritAttrs: false
28
+ })
29
+
30
+ defineEmits(['update:modelValue'])
31
+
32
+ const props = defineProps({
33
+ ...ElCollapse.props,
34
+ ...ElCollapseItem.props,
35
+ ...commonPropsType,
36
+ })
37
+ // debugger
38
+
39
+ const attrs = useAttrs()
40
+
41
+ const lang = inject('lang')
42
+
43
+ const collapseProps = computed(() => {
44
+ return Object.keys(ElCollapse.props).reduce((ret, key) => {
45
+ ret[key] = props[key]
46
+ return ret
47
+ }, {})
48
+ })
49
+
50
+ const collapseClass = computed(() => {
51
+ return {
52
+ 'underline-hidden': props.config.underlineHidden,
53
+ 'not-wrap-border': !props.config.needSegment
54
+ }
55
+ })
56
+
57
+ const collapseItemProps = computed(() => {
58
+ const propsObj = Object.keys(ElCollapseItem.props).reduce((ret, key) => {
59
+ ret[key] = props[key]
60
+ return ret
61
+ }, {})
62
+ propsObj.name = props.config.metaCode
63
+ return propsObj
64
+ })
65
+
66
+ const pmPageMetaList = computed(() => {
67
+ return props.config?.pmPageMetaList?.filter(item => !item.collapseSlot) || []
68
+ })
69
+
70
+ const slotPmPageMetaList = computed(() => {
71
+ return props.config?.pmPageMetaList?.filter(item => item.collapseSlot) || []
72
+ })
73
+
74
+ const stopPropagation = (e) => {
75
+ e.stopPropagation()
76
+ }
77
+
78
+ const component = computed(() => {
79
+ return props.config.needWrap ? ElCard : 'div'
80
+ })
81
+ const componentProps = computed(() => {
82
+ return props.config.needWrap ? {
83
+ shadow: 'never'
84
+ } : {}
85
+ })
86
+ const activeNames = computed({
87
+ get() {
88
+ return props.config.defaultOpenFlag === '1' ? [props.config.metaCode] : []
89
+ },
90
+ set(val) {
91
+ props.config.defaultOpenFlag = val.length > 0 ? '1' : '0'
92
+ }
93
+ })
94
+
95
+ </script>
96
+ <style lang="scss">
97
+ .collapge-slot-title {
98
+ display: flex;
99
+ justify-content: space-between;
100
+ align-items: center;
101
+ width: 100%;
102
+ > span {
103
+ &::before {
104
+ content: "";
105
+ display: inline-block;
106
+ width: 3px;
107
+ height: 12px;
108
+ margin-right: 8px;
109
+ border-radius: 3px;
110
+ vertical-align: middle;
111
+ background-color: #3271fe;
112
+ }
113
+ }
114
+ }
115
+ .not-wrap-border {
116
+ &.el-collapse {
117
+ border-top: none;
118
+ border-bottom: none;
119
+ }
120
+ }
121
+ </style>
122
+ <style lang="scss">
123
+ // 配置被包裹的一层样式
124
+ .standard-wrap {
125
+ box-sizing: border-box;
126
+ }
127
+ .custom-component-collapse {
128
+ .el-collapse-item__wrap, .el-collapse-item__header {
129
+ border-bottom: none;
130
+ &::before {
131
+ display: none;
132
+ }
133
+ }
134
+ .el-collapse-item__wrap {
135
+ overflow: none;
136
+ }
137
+ .el-collapse-item {
138
+ position: relative;
139
+ &::after {
140
+ content: "";
141
+ display: block;
142
+ position: absolute;
143
+ width: 100%;
144
+ bottom: 0;
145
+ left: 0;
146
+ height: 1px;
147
+ background-color: #d0d3d6;
148
+ // margin-bottom: var(--prmary-marign);
149
+ }
150
+ .el-collapse-item__content {
151
+ & > .el-row {
152
+ > .el-col {
153
+ &:last-child {
154
+ & > .el-form-item {
155
+ margin-bottom: 24px;
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+ }
162
+ .el-collapse-item__arrow {
163
+ font-size: 16px;
164
+ color: #646A73;
165
+ svg path {
166
+ d: path("M 338.752 104.704 a 64 64 0 0 0 0 90.496 l 316.8 316.8 l -316.8 316.8 a 64 64 0 0 0 90.496 90.496 l 362.048 -362.048 a 64 64 0 0 0 0 -90.496 L 429.248 104.704 a 64 64 0 0 0 -90.496 0 Z");
167
+ }
168
+ }
169
+ .el-collapse-item__content {
170
+ .el-tabs {
171
+ margin-right: 16px;
172
+ margin-bottom: 16px;
173
+ }
174
+ }
175
+ }
176
+ .underline-hidden {
177
+ .el-collapse-item {
178
+ &::after {
179
+ display: none;
180
+ }
181
+ }
182
+ }
183
+ </style>
@@ -0,0 +1,37 @@
1
+ <script setup>
2
+ import Renderer from '../../renderer.jsx'
3
+ import { computed, inject, useAttrs, defineEmits, defineProps } from 'vue'
4
+ import { commonPropsType } from '../../utils/index.js'
5
+
6
+ defineOptions({
7
+ inheritAttrs: false
8
+ })
9
+
10
+ const modelValue = defineModel()
11
+ const attrs = useAttrs()
12
+ const lang = inject('lang')
13
+ const props = defineProps({
14
+ ...commonPropsType,
15
+ })
16
+ const collapseProps = computed(() => {
17
+ return {
18
+ title: lang?.value?.indexOf('zh') > -1 ? props.config?.metaNameZh : props.config?.metaNameEn,
19
+ open: props.config?.defaultOpenFlag == '1',
20
+ transition: props.config?.defaultOpenFlag == '1',
21
+ // hideicon: props.config?.hideicon != '1'
22
+ }
23
+ })
24
+
25
+ const pmPageMetaList = computed(() => {
26
+ return props.config?.pmPageMetaList?.filter(item => !item.collapseSlot) || []
27
+ })
28
+ </script>
29
+
30
+ <template>
31
+ <cmi-collapse v-bind="{...attrs, ...collapseProps}">
32
+ <Renderer :config="pmPageMetaList" v-model="modelValue"></Renderer>
33
+ </cmi-collapse>
34
+ </template>
35
+
36
+ <style lang="scss">
37
+ </style>
@@ -0,0 +1,95 @@
1
+ <template>
2
+ <div class="custom-component-cycle">
3
+ <template v-for="(pageMetaList, $index) in (multiPmPageMetaList || [])" :key="pageMetaListKeys[pageMetaList.id]">
4
+ <component :is="component" v-bind="componentProps">
5
+ <ElRow>
6
+ <Renderer :modelValue="modelValue?.[$index]" :rowScope="{row: modelValue?.[$index], $index}" @update:modelValues="onUpdateModelValue($event, $index)" :config="pageMetaList"></Renderer>
7
+ </ElRow>
8
+ </component>
9
+ </template>
10
+ </div>
11
+ </template>
12
+ <script setup>
13
+ import { computed, defineModel, watch, reactive } from 'vue'
14
+ import { commonPropsType, cloneDeep } from '../../utils/index.js'
15
+ import { ElRow, ElCard } from 'element-plus'
16
+ import Renderer from '../../renderer.jsx'
17
+
18
+ // const lang = inject('lang')
19
+ const modelValue = defineModel()
20
+ // setTimeout(() => {
21
+ // modelValue.value = [{}, {}]
22
+ // }, 3000);
23
+ const props = defineProps({
24
+ ...commonPropsType,
25
+ })
26
+
27
+ const onUpdateModelValue = (val, idx) => {
28
+ if (!modelValue.value) {
29
+ modelValue.value = []
30
+ }
31
+ modelValue.value[idx] = val
32
+ }
33
+
34
+ /**
35
+ * 设置 multiPmPageMetaList 的值
36
+ * multiPmPageMetaList值主要作用是区分列的每一行都需要有单独的config,接口配置返回的只是列的配置,
37
+ * 所以这边需要单独再坐下处理
38
+ */
39
+ const multiPmPageMetaList = computed(() => {
40
+ return props.config.multiPmPageMetaList || []
41
+ })
42
+ const pmPageMetaList = computed(() => {
43
+ return (props.config.pmPageMetaList || [])
44
+ })
45
+ const rowConfgsMap = new Map()
46
+ const pageMetaListKeys = reactive({})
47
+ watch(() => {
48
+ return modelValue.value?.length
49
+ }, (length) => {
50
+ let list = []
51
+ if (length) {
52
+ const newVal = modelValue.value
53
+ list = newVal.map((row, idx) => {
54
+ const rowCgs = rowConfgsMap.get(row)
55
+ if (rowCgs) {
56
+ rowCgs.forEach(config => {
57
+ config.rowIndex = idx
58
+ })
59
+ return rowCgs
60
+ } else {
61
+ const retConfigs = pmPageMetaList.value.map(config => {
62
+ const ret = cloneDeep(config)
63
+ ret.rowIndex = idx
64
+ return ret
65
+ })
66
+ retConfigs.id = new Date().getTime()
67
+ pageMetaListKeys[retConfigs.id] = new Date().getTime()
68
+
69
+ rowConfgsMap.set(row, retConfigs)
70
+ return retConfigs
71
+ }
72
+ })
73
+ }
74
+ props.config.multiPmPageMetaList = list
75
+ }, {
76
+ immediate: true
77
+ })
78
+
79
+ const component = computed(() => {
80
+ return props.config.needWrap === false ? 'div' : ElCard
81
+ })
82
+ const componentProps = computed(() => {
83
+ return props.config.needWrap === false ? {} : {
84
+ shadow: 'never'
85
+ }
86
+ })
87
+ </script>
88
+ <style lang="scss">
89
+ .custom-component-cycle {
90
+ width: 100%;
91
+ .el-card + .el-card {
92
+ margin-top: 16px;
93
+ }
94
+ }
95
+ </style>
@@ -0,0 +1,92 @@
1
+ <template>
2
+ <TabPane v-for="(pageMetaList, $index) in (multiPmPageMetaList || [])" v-bind="{...tabPaneProps}" :key="pageMetaListKeys[pageMetaList.id]" :label="`${lang.indexOf('zh') > -1 ? props.config?.metaNameZh : props.config?.metaNameEn}-${$index}`" :name="`${props.config?.metaCode}-${$index}`">
3
+ <template #label v-if="pageMetaList.filter(config => config.collapseSlot).length">
4
+ <Renderer :modelValue="modelValue?.[$index]" :rowScope="{row: modelValue?.[$index], $index}" @update:modelValues="onUpdateModelValue($event, $index)" :config="pageMetaList.filter(config => config.collapseSlot)"></Renderer>
5
+ </template>
6
+ <ElRow>
7
+ <Renderer :modelValue="modelValue?.[$index]" :rowScope="{row: modelValue?.[$index], $index}" @update:modelValues="onUpdateModelValue($event, $index)" :config="pageMetaList.filter(config => !config.collapseSlot)"></Renderer>
8
+ </ElRow>
9
+ </TabPane>
10
+ </template>
11
+ <script setup>
12
+ import { ElTabPane, ElRow } from 'element-plus'
13
+ import Renderer from '../../renderer.jsx'
14
+ import { computed, inject, reactive, watch, defineModel, defineProps } from 'vue'
15
+ import { commonPropsType, cloneDeep } from '../../utils/index.js'
16
+ import { TabPane } from '../tabs'
17
+
18
+ const props = defineProps({
19
+ ...commonPropsType,
20
+ ...ElTabPane.props,
21
+ })
22
+
23
+ const modelValue = defineModel()
24
+ const lang = inject('lang')
25
+
26
+ const tabPaneProps = computed(() => {
27
+ return Object.keys(ElTabPane.props).reduce((ret, key) => {
28
+ ret[key] = props[key]
29
+ return ret
30
+ }, {})
31
+ })
32
+
33
+ // 循环部分逻辑
34
+ const onUpdateModelValue = (val, idx) => {
35
+ if (!modelValue.value) {
36
+ modelValue.value = []
37
+ }
38
+ modelValue.value[idx] = val
39
+ }
40
+
41
+ /**
42
+ * 设置 multiPmPageMetaList 的值
43
+ * multiPmPageMetaList值主要作用是区分列的每一行都需要有单独的config,接口配置返回的只是列的配置,
44
+ * 所以这边需要单独再坐下处理
45
+ */
46
+ const multiPmPageMetaList = computed(() => {
47
+ return props.config.multiPmPageMetaList || []
48
+ })
49
+ const pmPageMetaList = computed(() => {
50
+ return (props.config.pmPageMetaList || [])
51
+ })
52
+ const rowConfgsMap = new Map()
53
+ const pageMetaListKeys = reactive({})
54
+ watch(() => {
55
+ return modelValue.value?.length
56
+ }, (length) => {
57
+ let list = []
58
+ if (length) {
59
+ const newVal = modelValue.value
60
+ list = newVal.map((row, idx) => {
61
+ const rowCgs = rowConfgsMap.get(row)
62
+ if (rowCgs) {
63
+ rowCgs.forEach(config => {
64
+ config.rowIndex = idx
65
+ })
66
+ return rowCgs
67
+ } else {
68
+ const retConfigs = pmPageMetaList.value.map(config => {
69
+ const ret = cloneDeep(config)
70
+ ret.rowIndex = idx
71
+ return ret
72
+ })
73
+ retConfigs.id = new Date().getTime()
74
+ pageMetaListKeys[retConfigs.id] = new Date().getTime()
75
+
76
+ rowConfgsMap.set(row, retConfigs)
77
+ return retConfigs
78
+ }
79
+ })
80
+ }
81
+ props.config.multiPmPageMetaList = list
82
+ }, {
83
+ immediate: true
84
+ })
85
+ </script>
86
+ <style lang="scss">
87
+ .el-tabs__item.is-active {
88
+ .el-text {
89
+ color: var(--el-color-primary)
90
+ }
91
+ }
92
+ </style>
@@ -0,0 +1,162 @@
1
+ <template>
2
+ <ElDialog class="custom-component-dialog" v-bind="{...dialogProps, ...attrs}" :title="title" v-model="dialogValue">
3
+ <div class="header" v-if="!!title">
4
+ <span>{{ title }}</span>
5
+ </div>
6
+ <el-scrollbar class="content" :style="{height: contentHeight}">
7
+ <ElRow>
8
+ <Renderer :config="pmPageMetaList" v-model="modelValue"></Renderer>
9
+ </ElRow>
10
+ </el-scrollbar>
11
+ <div class="footer" v-if="showConfirmButton || showCloseButton">
12
+ <div class="dialog-footer">
13
+ <el-button v-if="showCloseButton" @click="toClose">
14
+ {{lang.indexOf('zh') > -1 ? '关闭' : 'Close'}}
15
+ </el-button>
16
+ <el-button v-if="showConfirmButton" type="primary" @click="toConfirm">
17
+ {{lang.indexOf('zh') > -1 ? '确认' : 'Confirm'}}
18
+ </el-button>
19
+ </div>
20
+ </div>
21
+ </ElDialog>
22
+ </template>
23
+ <script setup>
24
+ import { ElDialog, ElRow } from 'element-plus'
25
+ import { computed, inject, useAttrs } from 'vue'
26
+ import { commonPropsType, hasOwn } from '../../utils/index.js'
27
+ import Renderer from '../../renderer.jsx'
28
+
29
+ const lang = inject('lang')
30
+ const modelValue = defineModel()
31
+ const props = defineProps({
32
+ ...ElDialog.props,
33
+ ...commonPropsType,
34
+ titleEn: {
35
+ type: String,
36
+ default: ''
37
+ }
38
+ })
39
+
40
+ const dialogProps = computed(() => {
41
+ const attrs = Object.keys(ElDialog.props).reduce((ret, key) => {
42
+ ret[key] = props[key]
43
+ return ret
44
+ }, {})
45
+ if (!hasOwn(props.config, 'show-close') && !hasOwn(props.config, 'showClose')) {
46
+ attrs.showClose = false
47
+ }
48
+ return attrs
49
+ })
50
+ const attrs = useAttrs()
51
+
52
+ const title = computed(() => {
53
+ return lang.value.indexOf('zh') > -1 ? props.title : props.titleEn
54
+ })
55
+
56
+ const pmPageMetaList = computed(() => {
57
+ return props.config?.pmPageMetaList || []
58
+ })
59
+
60
+ let promiseResolve = null
61
+ let promiseReject = null
62
+
63
+ // 初始化handlePromise为一个计算属性,为了获取引用次数
64
+ let referenceCount = 0
65
+ let handleProValue = null
66
+ props.config.handlePromise = computed({
67
+ get() {
68
+ referenceCount ++
69
+ return handleProValue
70
+ },
71
+ set(val) {
72
+ referenceCount = 0
73
+ handleProValue = val
74
+ }
75
+ })
76
+
77
+ const dialogValue = computed({
78
+ get() {
79
+ const val = props?.config?.dialogVisible
80
+ if (showCloseButton.value || showConfirmButton.value) {
81
+ if (val) {
82
+ props.config.handlePromise = new Promise((res, rej) => {
83
+ promiseResolve = res
84
+ promiseReject = rej
85
+ })
86
+ } else {
87
+ promiseResolve = null
88
+ promiseReject = null
89
+ props.config.handlePromise = null
90
+ }
91
+
92
+ }
93
+ return val
94
+ },
95
+ set(val) {
96
+ props?.config && (props.config.dialogVisible = val)
97
+ }
98
+ })
99
+ // 是否显示确定按钮
100
+ const showConfirmButton = computed(() => {
101
+ return !!(props.config?.showConfirmButton) || !!(props.config?.showConfirm)
102
+ })
103
+ // 是否显示确定关闭按钮
104
+ const showCloseButton = computed(() => {
105
+ return hasOwn(props.config, 'showCloseButton') ?
106
+ !!(props.config?.showCloseButton) :
107
+ hasOwn(props.config, 'showClose') ? !!(props.config?.showClose) : true
108
+ })
109
+
110
+ const toConfirm = async () => {
111
+ let intercept = null
112
+ let interceptPromise = new Promise((res) => {
113
+ intercept = res
114
+ })
115
+ promiseResolve && promiseResolve({props, next: intercept})
116
+
117
+ let res = true
118
+ if (referenceCount) {
119
+ res = await interceptPromise
120
+ }
121
+ if (res) {
122
+ dialogValue.value = false
123
+ }
124
+ props.config.handlePromise = new Promise((res, rej) => {
125
+ promiseResolve = res
126
+ promiseReject = rej
127
+ })
128
+ }
129
+ const toClose = async () => {
130
+ let intercept = null
131
+ let interceptPromise = new Promise((res) => {
132
+ intercept = res
133
+ })
134
+ promiseReject && promiseReject({props, next: intercept})
135
+
136
+ let res = true
137
+ if (referenceCount) {
138
+ res = await interceptPromise
139
+ }
140
+ if (res) {
141
+ dialogValue.value = false
142
+ }
143
+ props.config.handlePromise = new Promise((res, rej) => {
144
+ promiseResolve = res
145
+ promiseReject = rej
146
+ })
147
+ }
148
+
149
+ const contentHeight = computed(() => {
150
+ let reduceNum = 0
151
+ if (!!title.value) {
152
+ reduceNum += 46
153
+ }
154
+ if (showConfirmButton.value || showCloseButton.value) {
155
+ reduceNum += 72
156
+ }
157
+ return `calc(100% - ${reduceNum}px)`
158
+ })
159
+ </script>
160
+
161
+ <style lang="scss">
162
+ </style>
@@ -0,0 +1,43 @@
1
+ <script setup>
2
+ import { computed, inject } from 'vue'
3
+ import { Quill, quillEditor } from 'vue3-quill'
4
+ import { commonPropsType } from '../../utils';
5
+
6
+ const props = defineProps({
7
+ ...commonPropsType,
8
+ })
9
+ const lang = inject('lang')
10
+ const modelValue = defineModel()
11
+
12
+ const editorOption = computed(() => {
13
+ return {
14
+ placeholder: props.config[lang?.value?.indexOf('zh') > -1 ? 'defPlacehold' : 'defPlaceholdEn'],
15
+ modules: {
16
+ }
17
+ }
18
+ })
19
+ const editorStyle = computed(() => {
20
+ return {
21
+ height: props.config?.contentHeight || '200px'
22
+ }
23
+ })
24
+ </script>
25
+ <template>
26
+ <div class="custom-component-editor">
27
+ <quillEditor
28
+ ref="fieldEditor"
29
+ v-model:value="modelValue"
30
+ :options="editorOption"
31
+ :disabled="props.disabled"
32
+ @blur="() => {}"
33
+ @focus="() => {}"
34
+ @change="() => {}"
35
+ :style="editorStyle"
36
+ ></quillEditor>
37
+ </div>
38
+ </template>
39
+ <style lang="scss">
40
+ .custom-component-editor {
41
+ width: 100%;
42
+ }
43
+ </style>
@@ -0,0 +1,63 @@
1
+ <template>
2
+ <ElForm v-bind="formProps" :ref="refFn" :model="props.modelValue">
3
+ <ElRow v-bind="rowProps">
4
+ <Renderer :config="pmPageMetaList" v-model="val"></Renderer>
5
+ </ElRow>
6
+ </ElForm>
7
+ </template>
8
+ <script setup>
9
+ import Renderer from '../../renderer.jsx'
10
+ import { computed, inject } from "vue"
11
+ import { ElForm, ElRow } from 'element-plus'
12
+
13
+
14
+ const emits = defineEmits(['update:modelValue'])
15
+ const props = defineProps({
16
+ config: {
17
+ type: Object,
18
+ default: () => null
19
+ },
20
+ // 这个组件通过v-model进行数据的绑定
21
+ modelValue: {
22
+ // type: [String, Number, Object],
23
+ default: null
24
+ },
25
+ ...ElForm.props,
26
+ ...ElRow.props
27
+ })
28
+
29
+ const rootForm = inject('rootForm')
30
+ const refFn = e => {
31
+ if (props.config?.rootForm) {
32
+ rootForm.value = e
33
+ }
34
+ }
35
+
36
+ const formProps = computed(() => {
37
+ return Object.keys(ElForm.props).reduce((ret, key) => {
38
+ ret[key] = props[key]
39
+ return ret
40
+ },{})
41
+ })
42
+
43
+ const rowProps = computed(() => {
44
+ return Object.keys(ElRow.props).reduce((ret, key) => {
45
+ ret[key] = props[key]
46
+ return ret
47
+ },{})
48
+ })
49
+
50
+ const pmPageMetaList = computed(() => props.config.pmPageMetaList)
51
+
52
+ const val = computed({
53
+ get() {
54
+ return props.modelValue
55
+ },
56
+ set(val) {
57
+ emits('update:modelValue', val)
58
+ }
59
+ })
60
+ defineExpose({
61
+ val
62
+ })
63
+ </script>