resolver-egretimp-plus 0.1.113 → 0.1.115

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 (219) hide show
  1. package/dist/h5/index.js +1 -1
  2. package/dist/theme/element/index.css +1 -1
  3. package/dist/theme/element/src/components/common.scss +4 -0
  4. package/dist/theme/element/src/components/text.scss +17 -0
  5. package/dist/web/index.js +2 -2
  6. package/package.json +1 -1
  7. package/src/analysisComponent.jsx +2 -1
  8. package/src/components/helper/table.jsx +26 -23
  9. package/src/components/packages-H5/CustomComponentCollapseH5.vue +6 -2
  10. package/src/components/packages-web/ElText.jsx +0 -1
  11. package/src/theme/element/components/common.scss +4 -0
  12. package/src/theme/element/components/text.scss +17 -0
  13. package/src-bak/analysisComponent.jsx +343 -0
  14. package/src-bak/api/builtIn.js +10 -0
  15. package/src-bak/bpm/bpmInstance.js +388 -0
  16. package/src-bak/bpm/udc-sdk-esm/cjs/impl/application.js +8 -0
  17. package/src-bak/bpm/udc-sdk-esm/cjs/impl/component.js +97 -0
  18. package/src-bak/bpm/udc-sdk-esm/cjs/impl/datasource.js +88 -0
  19. package/src-bak/bpm/udc-sdk-esm/cjs/impl/iframe/index.js +3 -0
  20. package/src-bak/bpm/udc-sdk-esm/cjs/impl/iframe/udcSdkForIframe/UdcComponent.js +76 -0
  21. package/src-bak/bpm/udc-sdk-esm/cjs/impl/iframe/udcSdkForIframe/index.js +201 -0
  22. package/src-bak/bpm/udc-sdk-esm/cjs/impl/index.js +69 -0
  23. package/src-bak/bpm/udc-sdk-esm/cjs/impl/page.js +56 -0
  24. package/src-bak/bpm/udc-sdk-esm/cjs/impl/utils.js +76 -0
  25. package/src-bak/bpm/udc-sdk-esm/cjs/index.js +46 -0
  26. package/src-bak/bpm/udc-sdk-esm/cjs/utils.js +21 -0
  27. package/src-bak/components/childDialog/index.js +39 -0
  28. package/src-bak/components/childDialog/src/index.vue +185 -0
  29. package/src-bak/components/cmiFormItem/index.js +1 -0
  30. package/src-bak/components/cmiFormItem/src/index.vue +112 -0
  31. package/src-bak/components/confirmInstance-H5/index.js +53 -0
  32. package/src-bak/components/confirmInstance-H5/src/index.vue +54 -0
  33. package/src-bak/components/helper/FormPolyfill.jsx +25 -0
  34. package/src-bak/components/helper/calcTooltip.jsx +134 -0
  35. package/src-bak/components/helper/dock.js +141 -0
  36. package/src-bak/components/helper/eventOrchestration.js +763 -0
  37. package/src-bak/components/helper/resolver.js +163 -0
  38. package/src-bak/components/helper/table.jsx +103 -0
  39. package/src-bak/components/icons/date.vue +33 -0
  40. package/src-bak/components/icons/info.vue +62 -0
  41. package/src-bak/components/icons/loading.vue +19 -0
  42. package/src-bak/components/icons/question-filled.vue +8 -0
  43. package/src-bak/components/loading/index.js +6 -0
  44. package/src-bak/components/loading/loading.js +98 -0
  45. package/src-bak/components/loading/loading.scss +74 -0
  46. package/src-bak/components/loading/loading.vue +89 -0
  47. package/src-bak/components/loadingComponent/LoadingComponent.vue +33 -0
  48. package/src-bak/components/modal/index.js +9 -0
  49. package/src-bak/components/modal/modal.scss +195 -0
  50. package/src-bak/components/modal/modal.vue +201 -0
  51. package/src-bak/components/options/OptionsDefault.vue +47 -0
  52. package/src-bak/components/packages-H5/CmiButton.vue +120 -0
  53. package/src-bak/components/packages-H5/CmiCalendar.vue +152 -0
  54. package/src-bak/components/packages-H5/CmiCell.vue +87 -0
  55. package/src-bak/components/packages-H5/CmiCheckbox.vue +82 -0
  56. package/src-bak/components/packages-H5/CmiDatetimePicker.vue +98 -0
  57. package/src-bak/components/packages-H5/CmiDivider.vue +30 -0
  58. package/src-bak/components/packages-H5/CmiDropdownMenu.vue +58 -0
  59. package/src-bak/components/packages-H5/CmiInput.vue +69 -0
  60. package/src-bak/components/packages-H5/CmiLink.vue +28 -0
  61. package/src-bak/components/packages-H5/CmiPicker.vue +229 -0
  62. package/src-bak/components/packages-H5/CmiRadio.vue +29 -0
  63. package/src-bak/components/packages-H5/CmiSearch.vue +39 -0
  64. package/src-bak/components/packages-H5/CmiSelect.vue +84 -0
  65. package/src-bak/components/packages-H5/CustomComponentCardH5.vue +129 -0
  66. package/src-bak/components/packages-H5/CustomComponentColH5.vue +8 -0
  67. package/src-bak/components/packages-H5/CustomComponentCollapseH5.vue +137 -0
  68. package/src-bak/components/packages-H5/CustomComponentFormLayoutH5.vue +54 -0
  69. package/src-bak/components/packages-H5/CustomComponentTabPaneH5.vue +38 -0
  70. package/src-bak/components/packages-H5/CustomComponentTableH5.vue +352 -0
  71. package/src-bak/components/packages-H5/CustomComponentTabsH5.vue +170 -0
  72. package/src-bak/components/packages-web/CustomComponentCard.vue +40 -0
  73. package/src-bak/components/packages-web/CustomComponentCol.vue +66 -0
  74. package/src-bak/components/packages-web/CustomComponentCollapse.vue +164 -0
  75. package/src-bak/components/packages-web/CustomComponentCycle.vue +95 -0
  76. package/src-bak/components/packages-web/CustomComponentCycleTabPane.vue +155 -0
  77. package/src-bak/components/packages-web/CustomComponentDialog.vue +192 -0
  78. package/src-bak/components/packages-web/CustomComponentEditor.vue +50 -0
  79. package/src-bak/components/packages-web/CustomComponentFileExport.vue +60 -0
  80. package/src-bak/components/packages-web/CustomComponentFileImport.vue +60 -0
  81. package/src-bak/components/packages-web/CustomComponentFormLayout.vue +65 -0
  82. package/src-bak/components/packages-web/CustomComponentGrid.vue +29 -0
  83. package/src-bak/components/packages-web/CustomComponentGridCol.vue +29 -0
  84. package/src-bak/components/packages-web/CustomComponentInputDialog.vue +144 -0
  85. package/src-bak/components/packages-web/CustomComponentNativeTabPane.vue +84 -0
  86. package/src-bak/components/packages-web/CustomComponentPlain.vue +243 -0
  87. package/src-bak/components/packages-web/CustomComponentRow.vue +83 -0
  88. package/src-bak/components/packages-web/CustomComponentSelectEmployees.vue +203 -0
  89. package/src-bak/components/packages-web/CustomComponentSendMail.vue +62 -0
  90. package/src-bak/components/packages-web/CustomComponentSteps.vue +41 -0
  91. package/src-bak/components/packages-web/CustomComponentTabPane.vue +20 -0
  92. package/src-bak/components/packages-web/CustomComponentTable.jsx +813 -0
  93. package/src-bak/components/packages-web/CustomComponentTabs.vue +126 -0
  94. package/src-bak/components/packages-web/CustomComponentTree.vue +28 -0
  95. package/src-bak/components/packages-web/ElButton.vue +146 -0
  96. package/src-bak/components/packages-web/ElCheckbox.vue +97 -0
  97. package/src-bak/components/packages-web/ElDatePicker.vue +93 -0
  98. package/src-bak/components/packages-web/ElInput copy.jsx +393 -0
  99. package/src-bak/components/packages-web/ElInput.jsx +312 -0
  100. package/src-bak/components/packages-web/ElInputNumber.vue +81 -0
  101. package/src-bak/components/packages-web/ElPagination.vue +61 -0
  102. package/src-bak/components/packages-web/ElRadio.vue +47 -0
  103. package/src-bak/components/packages-web/ElSelect.jsx +249 -0
  104. package/src-bak/components/packages-web/ElSelect_bak.vue +155 -0
  105. package/src-bak/components/packages-web/ElText.jsx +187 -0
  106. package/src-bak/components/packages-web/ElTextaa.vue +169 -0
  107. package/src-bak/components/packages-web/ElTimePicker.vue +39 -0
  108. package/src-bak/components/patchComponents-H5.js +46 -0
  109. package/src-bak/components/patchComponents-web.js +46 -0
  110. package/src-bak/components/simpleFormItemPc/index.js +1 -0
  111. package/src-bak/components/simpleFormItemPc/src/index.vue +94 -0
  112. package/src-bak/components/table/index.ts +29 -0
  113. package/src-bak/components/table/src/composables/use-scrollbar.ts +30 -0
  114. package/src-bak/components/table/src/config.ts +256 -0
  115. package/src-bak/components/table/src/filter-panel.vue +260 -0
  116. package/src-bak/components/table/src/h-helper.ts +34 -0
  117. package/src-bak/components/table/src/layout-observer.ts +78 -0
  118. package/src-bak/components/table/src/store/current.ts +85 -0
  119. package/src-bak/components/table/src/store/expand.ts +76 -0
  120. package/src-bak/components/table/src/store/helper.ts +74 -0
  121. package/src-bak/components/table/src/store/index.ts +246 -0
  122. package/src-bak/components/table/src/store/tree.ts +230 -0
  123. package/src-bak/components/table/src/store/watcher.ts +543 -0
  124. package/src-bak/components/table/src/table/defaults.ts +402 -0
  125. package/src-bak/components/table/src/table/key-render-helper.ts +27 -0
  126. package/src-bak/components/table/src/table/style-helper.ts +378 -0
  127. package/src-bak/components/table/src/table/utils-helper.ts +47 -0
  128. package/src-bak/components/table/src/table-body/defaults.ts +52 -0
  129. package/src-bak/components/table/src/table-body/events-helper.ts +203 -0
  130. package/src-bak/components/table/src/table-body/index.ts +119 -0
  131. package/src-bak/components/table/src/table-body/render-helper.ts +283 -0
  132. package/src-bak/components/table/src/table-body/styles-helper.ts +164 -0
  133. package/src-bak/components/table/src/table-column/defaults.ts +237 -0
  134. package/src-bak/components/table/src/table-column/index.ts +202 -0
  135. package/src-bak/components/table/src/table-column/render-helper.ts +214 -0
  136. package/src-bak/components/table/src/table-column/watcher-helper.ts +88 -0
  137. package/src-bak/components/table/src/table-footer/index.ts +128 -0
  138. package/src-bak/components/table/src/table-footer/mapState-helper.ts +33 -0
  139. package/src-bak/components/table/src/table-footer/style-helper.ts +51 -0
  140. package/src-bak/components/table/src/table-header/event-helper.ts +213 -0
  141. package/src-bak/components/table/src/table-header/index.ts +244 -0
  142. package/src-bak/components/table/src/table-header/style.helper.ts +119 -0
  143. package/src-bak/components/table/src/table-header/utils-helper.ts +94 -0
  144. package/src-bak/components/table/src/table-layout.ts +259 -0
  145. package/src-bak/components/table/src/table.vue +389 -0
  146. package/src-bak/components/table/src/tableColumn.ts +3 -0
  147. package/src-bak/components/table/src/tokens.ts +5 -0
  148. package/src-bak/components/table/src/util.ts +521 -0
  149. package/src-bak/components/table/style/css.ts +5 -0
  150. package/src-bak/components/table/style/index.ts +5 -0
  151. package/src-bak/components/tabs/index.js +8 -0
  152. package/src-bak/components/tabs/src/constants.js +23 -0
  153. package/src-bak/components/tabs/src/tab-bar.js +8 -0
  154. package/src-bak/components/tabs/src/tab-bar.vue +92 -0
  155. package/src-bak/components/tabs/src/tab-nav.jsx +424 -0
  156. package/src-bak/components/tabs/src/tab-pane.js +16 -0
  157. package/src-bak/components/tabs/src/tab-pane.vue +80 -0
  158. package/src-bak/components/tabs/src/tabs.jsx +223 -0
  159. package/src-bak/components/tabs/style/css.js +2 -0
  160. package/src-bak/components/tabs/style/index.js +2 -0
  161. package/src-bak/components/thirdPartyFrame/index.js +32 -0
  162. package/src-bak/components/thirdPartyFrame/src/ThirdPartyFrame.vue +125 -0
  163. package/src-bak/enums/index.js +16 -0
  164. package/src-bak/hooks/configLoad.js +45 -0
  165. package/src-bak/hooks/index.js +189 -0
  166. package/src-bak/hooks/mock.js +6960 -0
  167. package/src-bak/hooks/pageConfig.js +127 -0
  168. package/src-bak/index.jsx +440 -0
  169. package/src-bak/renderer.jsx +77 -0
  170. package/src-bak/resolver-H5.vue +88 -0
  171. package/src-bak/resolver-common.vue +129 -0
  172. package/src-bak/resolver-web.vue +91 -0
  173. package/src-bak/rules/eventsSupplement.js +573 -0
  174. package/src-bak/rules/parseCondition.js +378 -0
  175. package/src-bak/rules/ruleUtils.js +273 -0
  176. package/src-bak/rules/rulesDriver.js +118 -0
  177. package/src-bak/rulesImp/events.js +588 -0
  178. package/src-bak/rulesImp/index.js +33 -0
  179. package/src-bak/rulesImp/ruleInstance.js +231 -0
  180. package/src-bak/rulesImp/ruleUtils.js +124 -0
  181. package/src-bak/theme/element/components/button.scss +122 -0
  182. package/src-bak/theme/element/components/card.scss +8 -0
  183. package/src-bak/theme/element/components/checkbox.scss +19 -0
  184. package/src-bak/theme/element/components/collapse.scss +174 -0
  185. package/src-bak/theme/element/components/common.scss +30 -0
  186. package/src-bak/theme/element/components/cycle.scss +0 -0
  187. package/src-bak/theme/element/components/date.scss +13 -0
  188. package/src-bak/theme/element/components/dialog.scss +44 -0
  189. package/src-bak/theme/element/components/form.scss +104 -0
  190. package/src-bak/theme/element/components/index.scss +55 -0
  191. package/src-bak/theme/element/components/input.scss +36 -0
  192. package/src-bak/theme/element/components/message.scss +48 -0
  193. package/src-bak/theme/element/components/pagination.scss +47 -0
  194. package/src-bak/theme/element/components/popper.scss +3 -0
  195. package/src-bak/theme/element/components/radio.scss +40 -0
  196. package/src-bak/theme/element/components/scrollbar.scss +14 -0
  197. package/src-bak/theme/element/components/select.scss +82 -0
  198. package/src-bak/theme/element/components/steps.scss +6 -0
  199. package/{src/components/styles/CustomComponenTable.scss → src-bak/theme/element/components/table.scss} +90 -13
  200. package/src-bak/theme/element/components/tabs.scss +128 -0
  201. package/src-bak/theme/element/components/tag.scss +6 -0
  202. package/{src/components/styles → src-bak/theme/element/components}/text.scss +3 -3
  203. package/src-bak/theme/element/components/textarea.scss +3 -0
  204. package/src-bak/theme/element/components/tree.scss +0 -0
  205. package/src-bak/theme/element/index.scss +55 -0
  206. package/src-bak/utils/cipher.js +141 -0
  207. package/src-bak/utils/common.js +664 -0
  208. package/src-bak/utils/const.js +259 -0
  209. package/src-bak/utils/defaultVal.js +92 -0
  210. package/src-bak/utils/dom.js +36 -0
  211. package/src-bak/utils/format.js +19 -0
  212. package/src-bak/utils/index.js +4 -0
  213. package/src-bak/utils/is.js +74 -0
  214. package/src-bak/utils/loadModule.js +75 -0
  215. package/src-bak/utils/preserveFunc.js +33 -0
  216. package/src-bak/utils/render.jsx +1138 -0
  217. package/src-bak/utils/request.js +136 -0
  218. package/src-bak/utils/respone.js +70 -0
  219. package/src-bak/utils/valid.js +89 -0
@@ -0,0 +1,66 @@
1
+ <template>
2
+ <ElCol class="custom-component-row" :class="classRef" v-bind="{...elRowProps, ...attrs}">
3
+ <ElRow>
4
+ <Renderer :config="pmPageMetaList" v-model="props.refValue.value"></Renderer>
5
+ </ElRow>
6
+ </ElCol>
7
+ </template>
8
+ <script setup>
9
+ import Renderer from '../../renderer.jsx'
10
+ import { ElCol, ElRow } from 'element-plus'
11
+ import { computed, defineProps, useAttrs } from 'vue'
12
+ import { commonPropsType } from '../../utils/index.js'
13
+
14
+ defineEmits(['update:modelValue'])
15
+
16
+ const props = defineProps({
17
+ ...commonPropsType,
18
+ ...ElCol.props
19
+ })
20
+ const elRowProps = computed(() => {
21
+ return Object.keys(ElCol.props).reduce((ret, key) => {
22
+ ret[key] = props[key]
23
+ return ret
24
+ }, {})
25
+ })
26
+ const attrs = useAttrs()
27
+
28
+ const classRef = computed(() => {
29
+ return {
30
+ 'clear-right-margin': !reserveRightMargin.value,
31
+ 'clear-bottom-margin': !reserveBottomMargin.value,
32
+ }
33
+ })
34
+
35
+ const pmPageMetaList = computed(() => {
36
+ return props.config?.pmPageMetaList || []
37
+ })
38
+ // 保留内部formItem的margin-right
39
+ const reserveRightMargin = computed(() => {
40
+ return props.config?.reserveRightMargin
41
+ })
42
+ // 保留内部formItem的margin-bottom
43
+ const reserveBottomMargin = computed(() => {
44
+ return props.config?.reserveBottomMargin
45
+ })
46
+ </script>
47
+ <style lang="scss">
48
+ .clear-right-margin {
49
+ .el-col {
50
+ & > {
51
+ .el-form-item, .simple-form-item {
52
+ margin-right: 0;
53
+ }
54
+ }
55
+ }
56
+ }
57
+ .clear-bottom-margin {
58
+ .el-col {
59
+ & > {
60
+ .el-form-item, .simple-form-item {
61
+ margin-bottom: 0;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ </style>
@@ -0,0 +1,164 @@
1
+ <template>
2
+ <component :is="component" class="standard-wrap" v-bind="{...attrs, ...componentProps}">
3
+ <ElCollapse v-bind="{...collapseProps}" :class="collapseClass" v-model="activeNames">
4
+ <ElCollapseItem v-bind="collapseItemProps" :class="collapseItemClass">
5
+ <template #title>
6
+ <div class="collapge-slot-title">
7
+ <ElRow align="middle" :class="polyElClass">
8
+ <span>{{ lang.indexOf('zh') > -1 ? props.config.metaNameZh : props.config.metaNameEn }}</span>
9
+ <Renderer @click="stopPropagation" :config="rightSlotPmPageMetaList" v-model="props.refValue.value"></Renderer>
10
+ </ElRow>
11
+ <ElRow>
12
+ <Renderer @click="stopPropagation" :config="slotPmPageMetaList" v-model="props.refValue.value"></Renderer>
13
+ </ElRow>
14
+ </div>
15
+ </template>
16
+ <ElRow>
17
+ <Renderer :config="pmPageMetaList" v-model="props.refValue.value"></Renderer>
18
+ </ElRow>
19
+ </ElCollapseItem>
20
+ </ElCollapse>
21
+ </component>
22
+ </template>
23
+ <script setup>
24
+ import { ElCollapse, ElCollapseItem, ElCard, ElRow } from 'element-plus'
25
+ import Renderer from '../../renderer.jsx'
26
+ import { computed, inject, useAttrs, defineEmits, defineProps } from 'vue'
27
+ import { commonPropsType, hasOwn } from '../../utils/index.js'
28
+ import { reactive } from 'vue'
29
+
30
+ defineOptions({
31
+ inheritAttrs: false
32
+ })
33
+
34
+ defineEmits(['update:modelValue'])
35
+
36
+ const props = defineProps({
37
+ ...ElCollapse.props,
38
+ ...ElCollapseItem.props,
39
+ ...commonPropsType,
40
+ showSegment: {
41
+ type: String,
42
+ default: '0'
43
+ }
44
+ })
45
+ // debugger
46
+
47
+ const attrs = useAttrs()
48
+
49
+ const lang = inject('lang')
50
+ const activeNames = computed({
51
+ get() {
52
+ return props.config.defaultOpenFlag == '1' ? [props.config.metaCode] : []
53
+ },
54
+ set(val) {
55
+ props.config.defaultOpenFlag = val.length > 0 ? '1' : '0'
56
+ }
57
+ })
58
+
59
+ const collapseProps = computed(() => {
60
+ return Object.keys(ElCollapse.props).reduce((ret, key) => {
61
+ ret[key] = props[key]
62
+ return ret
63
+ }, {})
64
+ })
65
+ // 是否禁止折叠
66
+ const noCollpase = computed(() => {
67
+ return props?.config?.noCollpase == '1'
68
+ })
69
+ // 隐藏头
70
+ const hiddenHead = computed(() => {
71
+ return props?.config?.hiddenHead == '1'
72
+ })
73
+
74
+ // 隐藏标题做边的绿标
75
+ const hiddenHeadFlag = computed(() => {
76
+ return props?.config?.hiddenHeadFlag == '1'
77
+ })
78
+ // 是否显示头分割线
79
+ const showSegment = computed(() => {
80
+ return props?.showSegment == '1'
81
+ })
82
+
83
+ const polyElClass = reactive({
84
+ 'hidden-head-flag': hiddenHeadFlag.value
85
+ })
86
+
87
+ const collapseClass = computed(() => {
88
+ return {
89
+ 'underline-hidden': hasOwn(props.config, 'underlineHidden') ? props.config.underlineHidden : noCollpase.value,
90
+ 'not-wrap-border': !props.config.needSegment
91
+ }
92
+ })
93
+
94
+ const collapseItemClass = computed(() => {
95
+ return {
96
+ 'no-collpase': noCollpase.value,
97
+ 'hidden-head': hiddenHead.value,
98
+ 'show-segment': showSegment.value && (activeNames.value?.length > 0)
99
+ }
100
+ })
101
+
102
+ const collapseItemProps = computed(() => {
103
+ const propsObj = Object.keys(ElCollapseItem.props).reduce((ret, key) => {
104
+ ret[key] = props[key]
105
+ return ret
106
+ }, {})
107
+ propsObj.name = props.config.metaCode
108
+ if (noCollpase.value) {
109
+ propsObj.disabled = true
110
+ }
111
+ return propsObj
112
+ })
113
+
114
+ const pmPageMetaList = computed(() => {
115
+ return props.config?.pmPageMetaList?.filter(item => !item.collapseSlot && !item.collapseRightSlot) || []
116
+ })
117
+
118
+ const slotPmPageMetaList = computed(() => {
119
+ return props.config?.pmPageMetaList?.filter(item => item.collapseSlot) || []
120
+ })
121
+
122
+ const rightSlotPmPageMetaList = computed(() => {
123
+ return props.config?.pmPageMetaList?.filter(item => item.collapseRightSlot) || []
124
+ })
125
+
126
+ const stopPropagation = (e) => {
127
+ e?.stopPropagation()
128
+ }
129
+
130
+ const needWrap = computed(() => {
131
+ return props.config.needWrap === true || props.config.needWrap == '1'
132
+ })
133
+ const component = computed(() => {
134
+ return needWrap.value ? ElCard : 'div'
135
+ })
136
+ const componentProps = computed(() => {
137
+ return needWrap.value ? {
138
+ shadow: 'never'
139
+ } : {}
140
+ })
141
+
142
+ </script>
143
+ <style lang="scss" scoped>
144
+ .collapge-slot-title {
145
+ display: flex;
146
+ justify-content: space-between;
147
+ align-items: center;
148
+ width: 100%;
149
+ > .el-row {
150
+ > span {
151
+ &::before {
152
+ content: "";
153
+ display: inline-block;
154
+ width: 3px;
155
+ height: 12px;
156
+ margin-right: 8px;
157
+ border-radius: 3px;
158
+ vertical-align: baseline;
159
+ background-color: #3271fe;
160
+ }
161
+ }
162
+ }
163
+ }
164
+ </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, definePrivatelyProp } 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
+ definePrivatelyProp(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,155 @@
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="labelRenderContentFn || pageMetaList.filter(config => config.collapseSlot).length">
4
+ <component
5
+ v-if="labelRenderContentFn"
6
+ :is="labelRenderContentFn(
7
+ getLableRenderParams(
8
+ modelValue?.[$index],
9
+ props.activeNames === `${props.config?.metaCode}-${$index}`,
10
+ multiPmPageMetaList.length,
11
+ $index
12
+ )
13
+ )"
14
+ ></component>
15
+ <Renderer v-else :modelValue="modelValue?.[$index]" :rowScope="{row: modelValue?.[$index], $index}" @update:modelValues="onUpdateModelValue($event, $index)" :config="pageMetaList.filter(config => config.collapseSlot)"></Renderer>
16
+ </template>
17
+ <ElRow>
18
+ <Renderer
19
+ :mode="generateModel({
20
+ data: modelValue?.[$index],
21
+ index: $index,
22
+ })"
23
+ :modelValue="modelValue?.[$index]" :rowScope="{row: modelValue?.[$index], $index}"
24
+ @update:modelValues="onUpdateModelValue($event, $index)"
25
+ :config="pageMetaList.filter(config => !config.collapseSlot)"
26
+ ></Renderer>
27
+ </ElRow>
28
+ </TabPane>
29
+ </template>
30
+ <script setup>
31
+ import { ElTabPane, ElRow } from 'element-plus'
32
+ import Renderer from '../../renderer.jsx'
33
+ import { computed, inject, reactive, watch, defineModel, defineProps } from 'vue'
34
+ import { commonPropsType, cloneDeep, definePrivatelyProp } from '../../utils/index.js'
35
+ import { TabPane } from '../tabs'
36
+ import { h } from 'vue'
37
+ import { useAttrs } from 'vue'
38
+
39
+ defineOptions({
40
+ inheritAttrs: false
41
+ })
42
+ const attrs = useAttrs()
43
+ const props = defineProps({
44
+ ...commonPropsType,
45
+ ...ElTabPane.props,
46
+ activeNames: String,
47
+ })
48
+
49
+ const modelValue = defineModel()
50
+ const lang = inject('lang')
51
+
52
+ const tabPaneProps = computed(() => {
53
+ const ret = Object.keys(ElTabPane.props).reduce((ret, key) => {
54
+ ret[key] = props[key]
55
+ return ret
56
+ }, {})
57
+ if (attrs?.class) {
58
+ ret.class = attrs.class
59
+ }
60
+ if (attrs?.style) {
61
+ ret.style = attrs.style
62
+ }
63
+ return ret
64
+ })
65
+
66
+ // 循环部分逻辑
67
+ const onUpdateModelValue = (val, idx) => {
68
+ if (!modelValue.value) {
69
+ modelValue.value = []
70
+ }
71
+ modelValue.value[idx] = val
72
+ }
73
+ const generateModel = computed(() => {
74
+ return (...arg) => {
75
+ return props?.config?.isDetail?.(...arg) === true ? 'detail' : null
76
+ }
77
+ })
78
+
79
+ /**
80
+ * 设置 multiPmPageMetaList 的值
81
+ * multiPmPageMetaList值主要作用是区分列的每一行都需要有单独的config,接口配置返回的只是列的配置,
82
+ * 所以这边需要单独再坐下处理
83
+ */
84
+ const multiPmPageMetaList = computed(() => {
85
+ return props.config.multiPmPageMetaList || []
86
+ })
87
+ const pmPageMetaList = computed(() => {
88
+ return (props.config.pmPageMetaList || [])
89
+ })
90
+ const rowConfgsMap = new Map()
91
+ const pageMetaListKeys = reactive({})
92
+ watch(() => {
93
+ return modelValue.value?.length
94
+ }, (length) => {
95
+ let list = []
96
+ if (length) {
97
+ const newVal = modelValue.value
98
+ list = newVal.map((row, idx) => {
99
+ const rowCgs = rowConfgsMap.get(row)
100
+ if (rowCgs) {
101
+ rowCgs.forEach(config => {
102
+ config.rowIndex = idx
103
+ })
104
+ return rowCgs
105
+ } else {
106
+ const retConfigs = pmPageMetaList.value.map(config => {
107
+ const ret = cloneDeep(config)
108
+ ret.rowIndex = idx
109
+ return ret
110
+ })
111
+ retConfigs.id = new Date().getTime()
112
+ pageMetaListKeys[retConfigs.id] = new Date().getTime()
113
+
114
+ rowConfgsMap.set(row, retConfigs)
115
+ return retConfigs
116
+ }
117
+ })
118
+ }
119
+ definePrivatelyProp(props.config, 'multiPmPageMetaList', list)
120
+ }, {
121
+ immediate: true
122
+ })
123
+
124
+ // 自定义渲染label方法
125
+ const labelRenderContentFn = computed(() => {
126
+ if (props.config?.labelRender && typeof props.config?.labelRender == 'function') {
127
+ return (params) => {
128
+ const context = props.config?.labelRender?.(params)
129
+ if (typeof context === 'string') {
130
+ return h('span', context)
131
+ } else {
132
+ return context
133
+ }
134
+ }
135
+ } else {
136
+ return null
137
+ }
138
+ })
139
+ function getLableRenderParams(tabPaneData, isActive, total, idx) {
140
+ return {
141
+ config: props.config,
142
+ tabPaneData,
143
+ isActive,
144
+ total,
145
+ currentIndex: idx
146
+ }
147
+ }
148
+ </script>
149
+ <style lang="scss">
150
+ .el-tabs__item.is-active {
151
+ .el-text {
152
+ color: var(--el-color-primary)
153
+ }
154
+ }
155
+ </style>
@@ -0,0 +1,192 @@
1
+ <template>
2
+ <ElDialog class="custom-component-dialog" v-bind="{...attrs, ...dialogProps}" :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
+ defineOptions({
30
+ inheritAttrs: false,
31
+ })
32
+ const lang = inject('lang')
33
+ const modelValue = defineModel()
34
+ const props = defineProps({
35
+ ...ElDialog.props,
36
+ ...commonPropsType,
37
+ titleEn: {
38
+ type: String,
39
+ default: ''
40
+ }
41
+ })
42
+
43
+ const dialogProps = computed(() => {
44
+ const attrs = Object.keys(ElDialog.props).reduce((ret, key) => {
45
+ ret[key] = props[key]
46
+ return ret
47
+ }, {})
48
+ if (!hasOwn(props.config, 'show-close') && !hasOwn(props.config, 'showClose')) {
49
+ attrs.showClose = false
50
+ }
51
+ return attrs
52
+ })
53
+ const attrs = useAttrs()
54
+
55
+ const title = computed(() => {
56
+ return lang.value.indexOf('zh') > -1 ? props.title : props.titleEn
57
+ })
58
+
59
+ const pmPageMetaList = computed(() => {
60
+ return props.config?.pmPageMetaList || []
61
+ })
62
+
63
+ let promiseResolve = null
64
+ let promiseReject = null
65
+
66
+ // 初始化handlePromise为一个计算属性,为了获取引用次数
67
+ let referenceCount = 0
68
+ let handleProValue = null
69
+ function initHandlePromise() {
70
+ props.config.handlePromise = computed({
71
+ get() {
72
+ referenceCount ++
73
+ return handleProValue
74
+ },
75
+ set(val) {
76
+ referenceCount = 0
77
+ handleProValue = val
78
+ }
79
+ })
80
+ }
81
+
82
+ const dialogValue = computed({
83
+ get() {
84
+ const val = props?.config?.dialogVisible
85
+ if (showCloseButton.value || showConfirmButton.value) {
86
+ if (val) {
87
+ initHandlePromise()
88
+ props.config.handlePromise = new Promise((res, rej) => {
89
+ promiseResolve = res
90
+ promiseReject = rej
91
+ })
92
+ } else {
93
+ promiseResolve = null
94
+ promiseReject = null
95
+ props.config.handlePromise = null
96
+ }
97
+
98
+ }
99
+ return val
100
+ },
101
+ set(val) {
102
+ props?.config && (props.config.dialogVisible = val)
103
+ }
104
+ })
105
+ // 是否显示确定按钮
106
+ const showConfirmButton = computed(() => {
107
+ return (
108
+ typeof props.config?.showConfirmButton == 'boolean' ?
109
+ !!(props.config?.showConfirmButton) :
110
+ props.config.showConfirmButton == '1'
111
+ ) || (
112
+ typeof props.config?.showConfirm == 'boolean' ?
113
+ !!(props.config?.showConfirm) :
114
+ props.config.showConfirm == '1'
115
+ )
116
+ })
117
+ // 是否显示确定关闭按钮
118
+ const showCloseButton = computed(() => {
119
+ return hasOwn(props.config, 'showCloseButton') ?
120
+ (
121
+ typeof props.config.showCloseButton == 'boolean' ?
122
+ !!(props.config.showCloseButton) :
123
+ props.config.showCloseButton == '1'
124
+ ) :
125
+ hasOwn(props.config, 'showClose') ?
126
+ (
127
+ typeof props.config.showClose == 'boolean' ?
128
+ !!(props.config.showClose) :
129
+ props.config.showClose == '1'
130
+ ) :
131
+ true
132
+ })
133
+
134
+ const toConfirm = async () => {
135
+ let intercept = null
136
+ let interceptPromise = new Promise((res) => {
137
+ intercept = res
138
+ })
139
+ promiseResolve && promiseResolve({props, next: intercept})
140
+
141
+ let res = true
142
+ if (referenceCount) {
143
+ res = await interceptPromise
144
+ }
145
+ if (res) {
146
+ dialogValue.value = false
147
+ }
148
+ if (!res) {
149
+ initHandlePromise()
150
+ }
151
+ props.config.handlePromise = new Promise((res, rej) => {
152
+ promiseResolve = res
153
+ promiseReject = rej
154
+ })
155
+ }
156
+ const toClose = async () => {
157
+ let intercept = null
158
+ let interceptPromise = new Promise((res) => {
159
+ intercept = res
160
+ })
161
+ promiseReject && promiseReject({props, next: intercept})
162
+
163
+ let res = true
164
+ if (referenceCount) {
165
+ res = await interceptPromise
166
+ }
167
+ if (res) {
168
+ dialogValue.value = false
169
+ }
170
+ if (!res) {
171
+ initHandlePromise()
172
+ }
173
+ props.config.handlePromise = new Promise((res, rej) => {
174
+ promiseResolve = res
175
+ promiseReject = rej
176
+ })
177
+ }
178
+
179
+ const contentHeight = computed(() => {
180
+ let reduceNum = 0
181
+ if (!!title.value) {
182
+ reduceNum += 46
183
+ }
184
+ if (showConfirmButton.value || showCloseButton.value) {
185
+ reduceNum += 72
186
+ }
187
+ return `calc(100% - ${reduceNum}px)`
188
+ })
189
+ </script>
190
+
191
+ <style lang="scss">
192
+ </style>