resolver-egretimp-plus 0.1.18 → 0.1.20

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "resolver-egretimp-plus",
3
- "version": "0.1.18",
3
+ "version": "0.1.20",
4
4
  "description": "交付体验渲染",
5
5
  "main": "./dist/web/index.js",
6
6
  "module": "./dist/web/index.js",
@@ -316,6 +316,16 @@ export class Bpm {
316
316
  })
317
317
  })
318
318
  }
319
+ insertBtn(btns, position = 3) {
320
+ this.getSdkInstance().then((instance) => {
321
+ console.log('insert btns==:', btns, position)
322
+ instance?.getCustomApi()?.insertBtnForToolbar({
323
+ // 按钮插入位置
324
+ position,
325
+ btns,
326
+ })
327
+ })
328
+ }
319
329
  destroy() {
320
330
  window.removeEventListener("message", this.messageListener)
321
331
  this.sdkInstance = null
@@ -1,7 +1,17 @@
1
1
  <template>
2
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
3
  <template #label v-if="labelRenderContentFn || pageMetaList.filter(config => config.collapseSlot).length">
4
- <component :is="labelRenderContentFn(getLableRenderParams(modelValue?.[$index]))" v-if="labelRenderContentFn"></component>
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>
5
15
  <Renderer v-else :modelValue="modelValue?.[$index]" :rowScope="{row: modelValue?.[$index], $index}" @update:modelValues="onUpdateModelValue($event, $index)" :config="pageMetaList.filter(config => config.collapseSlot)"></Renderer>
6
16
  </template>
7
17
  <ElRow>
@@ -20,6 +30,7 @@ import { h } from 'vue'
20
30
  const props = defineProps({
21
31
  ...commonPropsType,
22
32
  ...ElTabPane.props,
33
+ activeNames: String,
23
34
  })
24
35
 
25
36
  const modelValue = defineModel()
@@ -100,10 +111,13 @@ const labelRenderContentFn = computed(() => {
100
111
  return null
101
112
  }
102
113
  })
103
- function getLableRenderParams(tabPaneData) {
114
+ function getLableRenderParams(tabPaneData, isActive, total, idx) {
104
115
  return {
105
116
  config: props.config,
106
- tabPaneData
117
+ tabPaneData,
118
+ isActive,
119
+ total,
120
+ currentIndex: idx
107
121
  }
108
122
  }
109
123
  </script>
@@ -0,0 +1,70 @@
1
+ <template>
2
+ <TabPane v-bind="{...attrs, ...tabPaneProps, ...polyProps}">
3
+ <template #label v-if="labelRenderContent || slotsPageMetalist.length">
4
+ <component :is="labelRenderContent" v-if="labelRenderContent"></component>
5
+ <Renderer v-else :config="slotsPageMetalist" v-model="props.refValue.value"></Renderer>
6
+ </template>
7
+ <ElRow>
8
+ <Renderer :config="(props.config.pmPageMetaList || []).filter(config => !config.collapseSlot)" v-model="props.refValue.value"></Renderer>
9
+ </ElRow>
10
+ <template v-for="(_, key) in slots" :key="key" v-slot:[key]="scope">
11
+ <slot :name="key" v-bind="scope"></slot>
12
+ </template>
13
+ </TabPane>
14
+ </template>
15
+ <script setup>
16
+ import { ElTabPane, ElRow } from 'element-plus'
17
+ import Renderer from '../../renderer.jsx'
18
+ import { computed, inject, useAttrs, useSlots } from 'vue'
19
+ import { commonPropsType } from '../../utils/index.js'
20
+ import { TabPane } from '../tabs'
21
+ import { h } from 'vue'
22
+
23
+ const slots = useSlots()
24
+ const props = defineProps({
25
+ ...commonPropsType,
26
+ ...TabPane.props,
27
+ hidden: [String, Boolean, Number],
28
+ activeNames: String,
29
+ })
30
+ const attrs = useAttrs()
31
+
32
+ const slotsPageMetalist = computed(() => {
33
+ return (props.config.pmPageMetaList || []).filter(config => config.collapseSlot)
34
+ })
35
+
36
+ const lang = inject('lang')
37
+ const polyProps = computed(() => {
38
+ return {
39
+ label: lang.value.indexOf('zh') > -1 ? props.config?.metaNameZh : props.config?.metaNameEn,
40
+ name: props.config?.metaCode
41
+ }
42
+ })
43
+ const tabPaneProps = computed(() => {
44
+ const ret = Object.keys(TabPane.props).reduce((ret, key) => {
45
+ ret[key] = props[key]
46
+ return ret
47
+ }, {})
48
+ if (typeof ret.hidden !== 'boolean') {
49
+ ret.hidden = ret.hidden == '1'
50
+ }
51
+ return ret
52
+ })
53
+
54
+ // 自定义渲染label方法
55
+ const labelRenderContent = computed(() => {
56
+ const context = props.config?.labelRender?.(getLableRenderParams())
57
+ if (typeof context === 'string') {
58
+ return h('span', context)
59
+ } else {
60
+ return context
61
+ }
62
+ })
63
+ function getLableRenderParams() {
64
+ return {
65
+ config: props.config,
66
+ tabPaneData: props.refValue.value,
67
+ isActive: props.activeNames === props.config?.metaCode,
68
+ }
69
+ }
70
+ </script>
@@ -1,68 +1,20 @@
1
1
  <template>
2
- <TabPane v-bind="{...attrs, ...tabPaneProps, ...polyProps}">
3
- <template #label v-if="labelRenderContent || slotsPageMetalist.length">
4
- <component :is="labelRenderContent" v-if="labelRenderContent"></component>
5
- <Renderer v-else :config="slotsPageMetalist" v-model="props.refValue.value"></Renderer>
6
- </template>
7
- <ElRow>
8
- <Renderer :config="(props.config.pmPageMetaList || []).filter(config => !config.collapseSlot)" v-model="props.refValue.value"></Renderer>
9
- </ElRow>
10
- <template v-for="(_, key) in slots" :key="key" v-slot:[key]="scope">
11
- <slot :name="key" v-bind="scope"></slot>
12
- </template>
13
- </TabPane>
2
+ <component :is="comp" v-bind="attrs"></component>
14
3
  </template>
15
4
  <script setup>
16
- import { ElTabPane, ElRow } from 'element-plus'
17
- import Renderer from '../../renderer.jsx'
18
- import { computed, inject, useAttrs, useSlots } from 'vue'
19
- import { commonPropsType } from '../../utils/index.js'
20
- import { TabPane } from '../tabs'
21
- import { h } from 'vue'
5
+ import { useAttrs } from 'vue'
6
+ import CustomComponentCycleTabPane from './CustomComponentCycleTabPane.vue'
7
+ import CustomComponentNativeTabPane from './CustomComponentNativeTabPane.vue'
8
+ import { computed } from 'vue'
22
9
 
23
- const slots = useSlots()
24
- const props = defineProps({
25
- ...commonPropsType,
26
- ...TabPane.props,
27
- hidden: [String, Boolean, Number]
28
- })
29
10
  const attrs = useAttrs()
30
-
31
- const slotsPageMetalist = computed(() => {
32
- return (props.config.pmPageMetaList || []).filter(config => config.collapseSlot)
33
- })
34
-
35
- const lang = inject('lang')
36
- const polyProps = computed(() => {
37
- return {
38
- label: lang.value.indexOf('zh') > -1 ? props.config?.metaNameZh : props.config?.metaNameEn,
39
- name: props.config?.metaCode
40
- }
41
- })
42
- const tabPaneProps = computed(() => {
43
- const ret = Object.keys(TabPane.props).reduce((ret, key) => {
44
- ret[key] = props[key]
45
- return ret
46
- }, {})
47
- if (typeof ret.hidden !== 'boolean') {
48
- ret.hidden = ret.hidden == '1'
11
+ const props = defineProps({
12
+ isCycle: {
13
+ type: [String, Number],
14
+ default: '0'
49
15
  }
50
- return ret
51
16
  })
52
-
53
- // 自定义渲染label方法
54
- const labelRenderContent = computed(() => {
55
- const context = props.config?.labelRender?.(getLableRenderParams())
56
- if (typeof context === 'string') {
57
- return h('span', context)
58
- } else {
59
- return context
60
- }
17
+ const comp = computed(() => {
18
+ return props.isCycle == '1' ? CustomComponentCycleTabPane : CustomComponentNativeTabPane
61
19
  })
62
- function getLableRenderParams() {
63
- return {
64
- config: props.config,
65
- tabPaneData: props.refValue.value
66
- }
67
- }
68
20
  </script>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <Tabs :class="[`tabs-level-${level}`, isHeaderAuto ? 'tabpane-auto-header' : '', fullBorder ? 'full-border' : '']" v-bind="transTabsProps" v-model="activeNames">
3
- <Renderer :config="tabpanes" v-model="props.refValue.value"></Renderer>
3
+ <Renderer :activeNames="activeNames" :config="tabpanes" v-model="props.refValue.value"></Renderer>
4
4
  <template v-for="(_, key) in slots" :key="key" v-slot:[key]="scope">
5
5
  <slot :name="key" v-bind="scope"></slot>
6
6
  </template>
@@ -19,6 +19,10 @@ const slots = useSlots()
19
19
  const props = defineProps({
20
20
  ...ElTabs.props,
21
21
  ...commonPropsType,
22
+ showBar: {
23
+ type: Boolean,
24
+ default: true
25
+ },
22
26
  })
23
27
  const attrs = useAttrs()
24
28
  const tabsProps = computed(() => {
@@ -37,26 +41,36 @@ const activeNames = computed({
37
41
  get() {
38
42
  const currentTab = tabpanes.value.find(tab => tab.defaultShowFlag == '1')
39
43
  const currentCycleTab = tabpanes.value.find(tab => tab.currentCode)
40
- return (currentTab && currentTab.metaCode)
41
- || (currentCycleTab && currentCycleTab.currentCode)
42
- || (tabpanes.value[0] && (tabpanes.value[0].metaType === 'CustomComponentTabPane' && tabpanes.value[0].metaCode) || (tabpanes.value[0].metaType === 'CustomComponentCycleTabPane' && `${tabpanes.value[0].metaCode}-0`))
44
+ if (currentTab) {
45
+ return currentTab?.isCycle == '1' ? `${currentTab.metaCode}-0` : currentTab.metaCode
46
+ }
47
+ if (currentCycleTab) {
48
+ return currentCycleTab.currentCode
49
+ }
50
+ if (tabpanes.value[0]) {
51
+ if (assertMetaType(tabpanes.value[0], 'CustomComponentCycleTabPane') || tabpanes.value[0]?.isCycle == '1') {
52
+ return `${tabpanes.value[0].metaCode}-0`
53
+ } else {
54
+ return tabpanes.value[0].metaCode
55
+ }
56
+ }
43
57
  },
44
58
  set(val) {
45
59
  tabpanes.value.forEach(tab => {
46
- if (tab.metaType === 'CustomComponentTabPane') {
60
+ if (assertMetaType(tab, 'CustomComponentCycleTabPane') || tab?.isCycle == '1') {
61
+ if (/^cycleTabpane-(\d+)$/.test(val)) {
62
+ tab.currentCode = val
63
+ } else {
64
+ tab.currentCode = ''
65
+ }
66
+ } else if (tab.metaType === 'CustomComponentTabPane') {
47
67
  if (tab.metaCode === val) {
48
68
  tab.defaultShowFlag = '1'
49
69
  } else {
50
70
  tab.defaultShowFlag = '0'
51
71
  }
52
72
  }
53
- if (tab.metaType === 'CustomComponentCycleTabPane') {
54
- if (new RegExp(`^${tab.metaCode}-(\d+)$`).test(val)) {
55
- tab.currentCode = val
56
- } else {
57
- tab.currentCode = ''
58
- }
59
- }
73
+
60
74
  })
61
75
  }
62
76
  })
@@ -64,7 +78,7 @@ const isHeaderAuto = computed(() => {
64
78
  return props.config.autoHeader == '1'
65
79
  })
66
80
  const level = computed(() => {
67
- return props.config.level || tabpanes.value.find(tabpane => hasOwn(tabpane, 'level'))?.level || 1
81
+ return props.config.level ?? tabpanes.value.find(tabpane => hasOwn(tabpane, 'level'))?.level ?? 1
68
82
  })
69
83
  const transTabsProps = computed(() => {
70
84
  const polyProps = level.value == 1 ? {
@@ -76,7 +90,8 @@ const transTabsProps = computed(() => {
76
90
  } : {}
77
91
  return {
78
92
  ...tabsProps.value,
79
- ...polyProps
93
+ ...polyProps,
94
+ showBar: props.showBar,
80
95
  }
81
96
  })
82
97
  /**
@@ -86,6 +101,10 @@ const fullBorder = computed(() => {
86
101
  return tabpanes.value.length === 1 && level.value == 1
87
102
  })
88
103
 
104
+ function assertMetaType(config, metaType) {
105
+ return config.renderby === metaType || config.metaType === metaType
106
+ }
107
+
89
108
  defineExpose({
90
109
  setActiveTab(tabMetaCode) {
91
110
  activeNames.value = tabMetaCode
@@ -52,6 +52,10 @@ export const tabNavProps = buildProps({
52
52
  values: ['card', 'border-card', ''],
53
53
  default: '',
54
54
  },
55
+ showBar: {
56
+ type: Boolean,
57
+ default: true
58
+ },
55
59
  stretch: Boolean,
56
60
  })
57
61
 
@@ -379,10 +383,11 @@ const TabNav = defineComponent({
379
383
  ns.e('nav-wrap'),
380
384
  ns.is('scrollable', !!scrollable.value),
381
385
  ns.is(rootTabs.props.tabPosition),
386
+ !props.showBar ? 'hidden-bar' : ''
382
387
  ]}
383
388
  >
384
389
  {scrollBtn}
385
- <div class={ns.e('nav-scroll')} ref={navScroll$}>
390
+ <div class={[ns.e('nav-scroll')]} ref={navScroll$}>
386
391
  <div
387
392
  class={[
388
393
  ns.e('nav'),
@@ -399,7 +404,7 @@ const TabNav = defineComponent({
399
404
  onKeydown={changeTab}
400
405
  >
401
406
  {...[
402
- !props.type ? (
407
+ !props.type && props.showBar ? (
403
408
  <TabBar ref={tabBarRef} tabs={[...props.panes]} />
404
409
  ) : null,
405
410
  tabs,
@@ -49,6 +49,10 @@ export const tabsProps = buildProps({
49
49
  type: Function,
50
50
  default: () => true,
51
51
  },
52
+ showBar: {
53
+ type: Boolean,
54
+ default: true
55
+ },
52
56
  stretch: Boolean,
53
57
  })
54
58
  // export type TabsProps = ExtractPropTypes<typeof tabsProps>
@@ -177,6 +181,7 @@ const Tabs = defineComponent({
177
181
  ref={nav$}
178
182
  currentName={currentName.value}
179
183
  editable={props.editable}
184
+ showBar={props.showBar}
180
185
  type={props.type}
181
186
  panes={panes.value}
182
187
  stretch={props.stretch}
@@ -203,8 +208,8 @@ const Tabs = defineComponent({
203
208
  ]}
204
209
  >
205
210
  {...props.tabPosition !== 'bottom'
206
- ? [header, panels]
207
- : [panels, header]}
211
+ ? [panels, header]
212
+ : [header, panels]}
208
213
  </div>
209
214
  )
210
215
  }
package/src/index.jsx CHANGED
@@ -7,7 +7,7 @@ import { MODE } from "./utils/const.js"
7
7
  import { generateRequester } from "./utils/request.js"
8
8
  import { executeLoadServices, resetConfigEventInit } from "./components/helper/resolver.js"
9
9
  import { createEmptyCopy, deepMerge } from "./utils/index.js"
10
- import { initBpm, SUBMIT_TYPE } from "./bpm/bpmInstance.js"
10
+ import { initBpm, SUBMIT_TYPE, bpmInstance } from "./bpm/bpmInstance.js"
11
11
  // import { RuleExecuter } from "./rulesImp/index.js"
12
12
  export default {
13
13
  name: 'Resolver',
@@ -171,6 +171,14 @@ export default {
171
171
  bpmConfigs: {
172
172
  type: Object,
173
173
  default: {}
174
+ },
175
+ bpmBtns: {
176
+ type: Array,
177
+ default: [],
178
+ },
179
+ bpmBtnPosition: {
180
+ type: Number,
181
+ default: 3
174
182
  }
175
183
  },
176
184
  emits: ['update:modelValue', 'rootStoreChange'],
@@ -359,6 +367,9 @@ export default {
359
367
  return props.requestTraceId
360
368
  },
361
369
  toExecuteLoadServices,
370
+ getBpmInstance() {
371
+ return bpmInstance
372
+ }
362
373
  })
363
374
 
364
375
  const modelValue = computed({
@@ -377,6 +388,7 @@ export default {
377
388
  toExecuteLoadServices,
378
389
  bpmSubmitBtn: props.bpmSubmitBtn
379
390
  })
391
+ bpmInstance?.insertBtn?.(props.bpmBtns, props.bpmBtnPosition)
380
392
  }
381
393
  })
382
394
  return () => {
@@ -90,7 +90,6 @@ const allInitEvents = {
90
90
  const isReplace = /^_replace:/.test(targetObjVal)
91
91
  if (isReplace) {
92
92
  targetObjVal = replaceDefValue(targetObjVal?.replace(/^_replace:/, ''), {config, dynamicMapComp})
93
-
94
93
  }
95
94
  let val = ''
96
95
  try {
@@ -563,7 +562,7 @@ export function runEvent(events, isInit, tabpanelCode, rule) {
563
562
  const { eventId } = event
564
563
  const eventCode = eventsMap[eventId]
565
564
  // const { eventCode } = event
566
- console.log('evnet===:', event)
565
+ console.log('evnet===:', eventCode, event)
567
566
  return allInitEvents[eventCode] && allInitEvents[eventCode].call(this, event, isInit, tabpanelCode, rule)
568
567
  // return {
569
568
  // eventId,
@@ -3,7 +3,12 @@
3
3
 
4
4
  .resolver-tabs {
5
5
  // 这个是渲染器里面tabs
6
- display: block;
6
+ // display: block;
7
+ }
8
+ .hidden-bar {
9
+ &::after {
10
+ display: none;
11
+ }
7
12
  }
8
13
  .el-tabs {
9
14
  // display: block;
@@ -13,6 +18,10 @@
13
18
  padding: var(--prmary-marign-second) var(--prmary-marign) var(--prmary-marign) var(--prmary-marign);
14
19
  }
15
20
  }
21
+ .el-tabs__item {
22
+ min-height: var(--el-tabs-header-height);
23
+ height: unset;
24
+ }
16
25
  .tabs-level-1 {
17
26
  --el-tabs-header-height: 49px;
18
27
  &.full-border {
@@ -18,29 +18,47 @@ function validFailAction(errInfo, dynamicMapComp) {
18
18
  let oneKey = errKyes[0]
19
19
  const referComps = []
20
20
  while (oneKey.indexOf('->') > -1) {
21
- const compInfo = dynamicMapComp[oneKey]
22
- compInfo && referComps.unshift(compInfo)
21
+ let idx = -1
22
+ let code = ''
23
+ const matchs = oneKey?.match(/^(.+)\[(\d+)\]$/)
24
+ if (matchs) {
25
+ idx = parseInt(matchs[2])
26
+ code = matchs[1]
27
+ } else {
28
+ code = oneKey
29
+ }
30
+
31
+ const compInfo = dynamicMapComp[code]
32
+ compInfo && referComps.unshift({
33
+ compInfo,
34
+ cycleIdx: idx
35
+ })
23
36
  oneKey = oneKey?.split('->')?.slice(0, -1)?.join('->') || ''
24
- // oneKey = oneKey.replace(/->[^(->)]+$/, '')
25
- // oneKey = oneKey.replace(/\[\d+\]$/, '')
26
37
  }
27
38
  const compInfo = dynamicMapComp[oneKey]
28
- compInfo && referComps.unshift(compInfo)
29
- referComps.forEach((comp, idx) => {
30
- validFail(comp, referComps?.[idx + 1])
39
+ compInfo && referComps.unshift({
40
+ compInfo,
41
+ cycleIdx: -1
42
+ })
43
+ referComps.forEach(({compInfo, cycleIdx}) => {
44
+ validFail(compInfo, cycleIdx)
31
45
  })
32
46
  // 组件对应的页面展示更新后才能获取到校验住的元素
33
47
  setTimeout(() => {
34
- const fouceErrEle = document.querySelector('.el-form-item__error')
35
- const fouceEle = fouceErrEle.parentElement
36
- fouceEle && fouceEle.scrollIntoView({ behavior: 'smooth' })
48
+ const {compInfo: config} = referComps.pop()
49
+ const veiwEl = config?.wrapVm?.vnode?.el
50
+ veiwEl && veiwEl.scrollIntoView({ behavior: 'smooth' })
51
+
52
+ // const fouceErrEle = document.querySelector('.el-form-item__error')
53
+ // const fouceEle = fouceErrEle.parentElement
54
+ // fouceEle && fouceEle.scrollIntoView({ behavior: 'smooth' })
37
55
  }, 200)
38
56
  }
39
57
  }
40
58
  // 校验不通过的时候,需要进行一下组件配置的调整,
41
59
  // 标签组件,需要进行聚焦当前页面
42
60
  // component组件,需要打开折叠
43
- function validFail(config, nextConfig) {
61
+ function validFail(config, cycleIdx) {
44
62
  const type = config.renderby || config.metaType
45
63
  switch (type) {
46
64
  case 'CustomComponentTabPane':
@@ -49,16 +67,15 @@ function validFail(config, nextConfig) {
49
67
  if (tab.metaType === 'CustomComponentTabPane') {
50
68
  tab.defaultShowFlag = '0'
51
69
  }
52
- if (tab.metaType === 'CustomComponentCycleTabPane') {
70
+ if (tab.metaType === 'CustomComponentCycleTabPane' || tab?.isCycle == '1') {
53
71
  tab.currentCode = ''
54
72
  }
55
73
  })
56
- if (type === 'CustomComponentTabPane') {
74
+ if (type === 'CustomComponentTabPane' && config?.isCycle != '1') {
57
75
  config.defaultShowFlag = '1'
58
76
  }
59
- if (type === 'CustomComponentCycleTabPane') {
60
- const rowIdx = nextConfig?.rowIndex
61
- config.currentCode = `${config.metaCode}-${rowIdx}`
77
+ if (type === 'CustomComponentCycleTabPane' || config?.isCycle == '1') {
78
+ config.currentCode = `${config.metaCode}-${cycleIdx}`
62
79
  }
63
80
  break
64
81
  case 'CustomComponentCollapse':