diff --git a/src/control/list/list-render-util.tsx b/src/control/list/list-render-util.tsx
index 10c3834a57c97dfa08e4f5cad48af51e30227e95..14796f9c4c7d8d7af61c09bd3cb59968f92943a4 100644
--- a/src/control/list/list-render-util.tsx
+++ b/src/control/list/list-render-util.tsx
@@ -25,7 +25,7 @@ export function useListRender(
): {
renderItem: (row: IData) => VNode | undefined;
renderNoData: () => VNode | undefined;
- renderLoadMore: () => VNode | undefined;
+ renderLoadMore: () => JSX.Element | null;
} {
const isSelect = (row: IData) => {
const findIndex = c.state.selectedData.findIndex(data => {
@@ -126,10 +126,8 @@ export function useListRender(
);
};
- const renderLoadMore = (): VNode | undefined => {
- if (props.loadMode === 'auto' || c.state.total <= c.state.items.length) {
- return;
- }
+ // 加载更多
+ const loadMoreIcon = () => {
return (
c.loadMore()}>
{ibiz.i18n.t('control.common.loadMore')}
@@ -137,5 +135,16 @@ export function useListRender(
);
};
+ // 分页模式为点击加载时并且当前数量小于总数
+ const renderLoadMore = () => {
+ let icon = null;
+ const loadMore =
+ c.state.items.length < c.state.total && c.state.total > c.state.size;
+ if (loadMore) {
+ icon = loadMoreIcon();
+ }
+ return icon;
+ };
+
return { renderNoData, renderItem, renderLoadMore };
}
diff --git a/src/control/list/md-ctrl/md-ctrl.scss b/src/control/list/md-ctrl/md-ctrl.scss
index 63504379f9c4c71088a5d9217e706179438a831b..a95c874edc6f71354710c3d12116bd9961b0f068 100644
--- a/src/control/list/md-ctrl/md-ctrl.scss
+++ b/src/control/list/md-ctrl/md-ctrl.scss
@@ -15,10 +15,11 @@ $control-mobmdctrl: (
font-size: getCssVar(font-size, header-5),
right-icon-margin-right: rem(21px),
simplelist-height: 250px,
- select-item-padding-bottom: getCssVar(spacing,tight),
- select-item-margin: getCssVar(spacing,tight) 0 0 getCssVar(spacing,tight),
- select-item-check-padding: getCssVar(spacing,extra-tight),
- select-item-gap: getCssVar(spacing,tight),
+ select-item-padding-bottom: getCssVar(spacing, tight),
+ select-item-margin: getCssVar(spacing, tight) 0 0 getCssVar(spacing, tight),
+ select-item-check-padding: getCssVar(spacing, extra-tight),
+ select-item-gap: getCssVar(spacing, tight),
+ pagination-height: var(--van-pagination-height),
);
@include b(control-mobmdctrl) {
@@ -28,13 +29,25 @@ $control-mobmdctrl: (
height: 100%;
- .van-list {
+ @include e(content) {
+ display: flex;
+ flex-wrap: wrap;
+ width: 100%;
height: 100%;
+ padding: getCssVar(control-mobmdctrl, padding);
+ overflow: hidden auto;
.van-cell {
padding: getCssVar(control-mobmdctrl, padding);
}
}
+
+
+ @include when(enable-page) {
+ .#{bem(control-mobmdctrl, content)} {
+ height: calc(100% - getCssVar(control-mobmdctrl, pagination-height));
+ }
+ }
.van-cell__right-icon {
margin-right: getCssVar(control-mobmdctrl, right-icon-margin-right);
@@ -48,10 +61,10 @@ $control-mobmdctrl: (
.van-cell::after {
width: 100%;
}
+}
- @include b(control-panel) {
- height: auto;
- }
+@include b(control-panel) {
+ height: auto;
}
@include b(control-mobmdctrl-item) {
@@ -66,14 +79,15 @@ $control-mobmdctrl: (
}
padding: 0.875rem 0;
+
&::after {
- content: '';
position: relative;
- display: block;
bottom: -0.875rem;
left: 1rem;
- height: rem(1px);
+ display: block;
width: calc(100% - 2rem);
+ height: rem(1px);
+ content: '';
background-color: getCssVar(color, border);
}
}
@@ -103,6 +117,7 @@ $control-mobmdctrl: (
span {
padding: getCssVar(spacing, extra, tight) getCssVar(spacing, base);
+ cursor: pointer;
border: 1px solid getCssVar(color, border);
border-radius: getCssVar(border, radius, full);
}
@@ -110,10 +125,11 @@ $control-mobmdctrl: (
@include b(control-mobmdctrl-select-item) {
display: flex;
- margin: getCssVar(control-mobmdctrl, select-item-margin);
gap: getCssVar(control-mobmdctrl, select-item-gap);
- border-bottom: 1px solid getCssVar(color, border);
padding-bottom: getCssVar(control-mobmdctrl, select-item-padding-bottom);
+ margin: getCssVar(control-mobmdctrl, select-item-margin);
+ border-bottom: 1px solid getCssVar(color, border);
+
> .van-checkbox {
padding: getCssVar(control-mobmdctrl, select-item-check-padding);
}
diff --git a/src/control/list/md-ctrl/md-ctrl.tsx b/src/control/list/md-ctrl/md-ctrl.tsx
index bd8db913d2720eb12920a7cff4d08f006ac06a31..b2398e4bb66ad3cfced47435d8dfd3c2119312e8 100644
--- a/src/control/list/md-ctrl/md-ctrl.tsx
+++ b/src/control/list/md-ctrl/md-ctrl.tsx
@@ -1,9 +1,10 @@
import { useControlController, useNamespace } from '@ibiz-template/vue3-util';
-import { defineComponent, PropType } from 'vue';
+import { computed, defineComponent, PropType } from 'vue';
import { IDEMobMDCtrl, IUIActionGroup } from '@ibiz/model-core';
import { IMobMDCtrlRowState, MDCtrlController } from '@ibiz-template/runtime';
import './md-ctrl.scss';
import { useListRender } from '../list-render-util';
+import { usePagination } from '../../../util';
export const MDCtrlControl = defineComponent({
name: 'IBizMDCtrlControl',
@@ -31,7 +32,6 @@ export const MDCtrlControl = defineComponent({
singleSelect: { type: Boolean, default: true },
selectedData: { type: Object as PropType, required: false },
mode: { type: String, default: 'LIST' },
- loadMode: { type: String, default: 'auto' },
loadDefault: { type: Boolean, default: true },
},
setup(props) {
@@ -43,20 +43,44 @@ export const MDCtrlControl = defineComponent({
ns,
);
+ // 不分页 0 分页栏 1 滚动加载 2 加载更多 3
+ // 是否可以加载更多
+ const isLodeMoreDisabled = computed(() => {
+ if (c.model.enablePagingBar === true) {
+ return true;
+ }
+ if (c.model.pagingMode !== 2) {
+ return true;
+ }
+ return (
+ c.state.items.length >= c.state.total ||
+ c.state.isLoading ||
+ c.state.total <= c.state.size
+ );
+ });
+
+ const { onPageChange } = usePagination(c);
+
+ // 是否显示数据伸缩图标
+ // 如果未开启分组,并且加载模式为【加载更多】,并且已经加载过一次更多,则为 true
+ const showCollapseOrExpandIcon = computed(() => {
+ return !c.model.enableGroup && c.model.pagingMode === 3;
+ });
+
// 左滑界面行为组
const leftSlidingActionGroup = c.model.deuiactionGroup;
// 右滑界面行为组
const rightSlidingActionGroup = c.model.deuiactionGroup2;
// 绘制滑动行为组
- const renderSlidingActionGroup = (
- group: IUIActionGroup,
- row: IMobMDCtrlRowState,
- ) => {
+ const renderSlidingActionGroup = (group: IUIActionGroup, data: IData) => {
const groupDetails = group.uiactionGroupDetails || [];
if (!groupDetails || groupDetails.length === 0) {
return null;
}
+ const row = c.state.rows.find(
+ (rowData: IMobMDCtrlRowState) => data.srfkey === rowData.data.srfkey,
+ )!;
const btnContainer = row.uaColStates[group.id!];
return groupDetails.map(detail => {
const btn = btnContainer[detail.id!];
@@ -76,32 +100,32 @@ export const MDCtrlControl = defineComponent({
};
// 绘制默认列表项
- const renderDefaultItem = (row: IMobMDCtrlRowState) => {
+ const renderDefaultItem = (data: IData) => {
const isItemSliding = !!(
leftSlidingActionGroup || rightSlidingActionGroup
);
if (isItemSliding) {
return (
-
+
{{
left: rightSlidingActionGroup
- ? () => renderSlidingActionGroup(rightSlidingActionGroup, row)
+ ? () => renderSlidingActionGroup(rightSlidingActionGroup, data)
: null,
right: leftSlidingActionGroup
- ? () => renderSlidingActionGroup(leftSlidingActionGroup, row)
+ ? () => renderSlidingActionGroup(leftSlidingActionGroup, data)
: null,
default: () => {
- return renderItem(row.data);
+ return renderItem(data);
},
}}
);
}
- return renderItem(row.data);
+ return renderItem(data);
};
const renderDefault = () => {
- return c.state.rows.map(item => {
+ return c.state.items.map((item: IData) => {
return renderDefaultItem(item);
});
};
@@ -123,16 +147,12 @@ export const MDCtrlControl = defineComponent({
const renderMDContent = () => {
return (
1 &&
- ibiz.i18n.t('control.list.end')
- }
- onLoad={props.loadMode === 'auto' ? () => c.loadMore() : undefined}
+ class={[ns.e('content')]}
+ finished={isLodeMoreDisabled.value}
+ immediate-check={false}
+ onLoad={() => c.loadMore()}
>
{c.model.groupMode !== 'NONE' ? renderGroup() : renderDefault()}
- {renderLoadMore()}
);
};
@@ -142,15 +162,40 @@ export const MDCtrlControl = defineComponent({
ns,
renderMDContent,
renderNoData,
+ showCollapseOrExpandIcon,
+ onPageChange,
+ renderLoadMore,
};
},
render() {
+ const enablePagingBar =
+ this.c.model.enablePagingBar && this.c.model.pagingMode === 1;
return (
-
+
{this.c.state.isCreated &&
(this.c.state.rows.length > 0
? this.renderMDContent()
: this.renderNoData())}
+ {enablePagingBar ? (
+
+ ) : null}
+ {this.showCollapseOrExpandIcon && this.renderLoadMore()}
);
},
diff --git a/src/editor/data-picker/picker-editor.controller.ts b/src/editor/data-picker/picker-editor.controller.ts
index d30728e35739e1cfc5de9ea0344c31376236e6df..d81d30f209393647a52e5242496a9f74a319a59e 100644
--- a/src/editor/data-picker/picker-editor.controller.ts
+++ b/src/editor/data-picker/picker-editor.controller.ts
@@ -251,12 +251,14 @@ export class PickerEditorController extends EditorController {
);
}
// 模态打开视图
+ const appView = await ibiz.hub.config.view.get(this.pickupView.id);
+ const { openMode = 'POPUPMODAL' } = appView;
const res = await ibiz.commands.execute(
OpenAppViewCommand.TAG,
this.pickupView.id,
context,
params,
- { openMode: 'POPUPMODAL' },
+ openMode,
);
if (res && res.ok && res.data) {
return res.data;
diff --git a/src/view-engine/mob-md-view-engine.ts b/src/view-engine/mob-md-view-engine.ts
index eb2eaa063ec25ecdb8a1236f73a11b6359193140..ad42924b8b153d7324b60a52db88426f4b2a17bc 100644
--- a/src/view-engine/mob-md-view-engine.ts
+++ b/src/view-engine/mob-md-view-engine.ts
@@ -67,10 +67,6 @@ export class MobMDViewEngine extends MDViewEngine {
async onCreated(): Promise {
await super.onCreated();
-
- if (this.xdataControlName && this.view.model.viewType === 'DEMOBMDVIEW9') {
- this.view.slotProps[this.xdataControlName].loadMode = 'click';
- }
}
/**