Reviewed-on: daoyoucloud/tachybase#912 Reviewed-by: sealday <zhanglin@daoyoucloud.com> Co-authored-by: wjh <wwwjh0710@163.com> Co-committed-by: wjh <wwwjh0710@163.com>
This commit is contained in:
parent
4bb491f2e3
commit
d64d092dbd
@ -1,2 +0,0 @@
|
||||
/node_modules
|
||||
/src
|
@ -1 +0,0 @@
|
||||
# @hera/plugin-mobile
|
@ -1,2 +0,0 @@
|
||||
export * from './dist/client';
|
||||
export { default } from './dist/client';
|
@ -1 +0,0 @@
|
||||
module.exports = require('./dist/client/index.js');
|
@ -1,26 +0,0 @@
|
||||
{
|
||||
"name": "@hera/plugin-mobile",
|
||||
"displayName": "Mobile client: Customization",
|
||||
"version": "1.1.20",
|
||||
"description": "Provides the ability to configure mobile pages,more professional.",
|
||||
"main": "dist/server/index.js",
|
||||
"devDependencies": {
|
||||
"@ant-design/icons": "5.x",
|
||||
"@tachybase/schema": "workspace:*",
|
||||
"@types/lodash": "^4.17.0",
|
||||
"antd": "5.16.1",
|
||||
"antd-mobile": "^5.35.0",
|
||||
"antd-mobile-icons": "^0.3.0",
|
||||
"classnames": "^2.3.1",
|
||||
"lodash": "4.17.21",
|
||||
"react-i18next": "^11.15.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@nocobase/client": "workspace:*",
|
||||
"@nocobase/server": "workspace:*",
|
||||
"@nocobase/test": "workspace:*",
|
||||
"@nocobase/utils": "workspace:*"
|
||||
},
|
||||
"description.zh-CN": "提提供定制化的移动端页面配置的能力。",
|
||||
"displayName.zh-CN": "移动端:定制化"
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
export * from './dist/server';
|
||||
export { default } from './dist/server';
|
@ -1 +0,0 @@
|
||||
module.exports = require('./dist/server/index.js');
|
@ -1,17 +0,0 @@
|
||||
import { Plugin, tval } from '@nocobase/client';
|
||||
|
||||
class PluginCommon extends Plugin {
|
||||
async afterAdd() {}
|
||||
async beforeLoad() {}
|
||||
|
||||
async load() {
|
||||
// 扩展原移动端插件的 block 类型
|
||||
this.app.schemaInitializerManager.addItem('mobilePage:addBlock', 'filterBlocks', {
|
||||
title: tval('Filter blocks'),
|
||||
type: 'itemGroup',
|
||||
children: [],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default PluginCommon;
|
@ -1,24 +0,0 @@
|
||||
import { Plugin } from '@nocobase/client';
|
||||
import PluginCommon from './common/plugin';
|
||||
import PluginBlock from './schma-block';
|
||||
import PluginImageSearch from './schma-component/image-search/plugin';
|
||||
import PluginSwiper from './schma-component/swiper';
|
||||
import PluginTabSearch from './schma-component/tab-search';
|
||||
import './assets/svg/index';
|
||||
|
||||
class PluginMobileClient extends Plugin {
|
||||
async afterAdd() {
|
||||
this.pm.add(PluginCommon);
|
||||
this.pm.add(PluginBlock);
|
||||
this.pm.add(PluginTabSearch);
|
||||
this.pm.add(PluginSwiper);
|
||||
this.pm.add(PluginImageSearch);
|
||||
// this.app.router.add()
|
||||
}
|
||||
|
||||
async beforeLoad() {}
|
||||
|
||||
async load() {}
|
||||
}
|
||||
|
||||
export default PluginMobileClient;
|
@ -1,15 +0,0 @@
|
||||
import { useApp, tval as nTval, i18n } from '@nocobase/client';
|
||||
|
||||
const NAMESPACE = '@hera/plugin-mobile';
|
||||
|
||||
export const useTranslation = (): any => {
|
||||
const { i18n } = useApp();
|
||||
const t = (key: string, props = {}) => i18n.t(key, { ns: NAMESPACE, ...props });
|
||||
return { t };
|
||||
};
|
||||
|
||||
export const tval = (key: string) => nTval(key, { ns: NAMESPACE });
|
||||
|
||||
export function lang(key: string) {
|
||||
return i18n.t(key, { ns: NAMESPACE });
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
import { Plugin } from '@nocobase/client';
|
||||
import { NoticeBlock, NoticeBlockInitializer } from './schema-initializer/NoticeBlockInitializer';
|
||||
|
||||
class PluginBlock extends Plugin {
|
||||
async load() {
|
||||
this.app.addComponents({
|
||||
NoticeBlock,
|
||||
NoticeBlockInitializer,
|
||||
});
|
||||
this.app.schemaInitializerManager.addItem('MBlockInitializers', 'dataBlocks.notice', {
|
||||
title: 'notice',
|
||||
name: 'notice',
|
||||
type: 'item',
|
||||
Component: 'NoticeBlockInitializer',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default PluginBlock;
|
@ -1,40 +0,0 @@
|
||||
import { Plugin } from '@nocobase/client';
|
||||
import { ImageSearchView } from './ImageSearch.view';
|
||||
import { ImageSearchInitializer } from './ImageSearch.initializer';
|
||||
import { ImageSearchConfigureFields } from './ImageSearch.configure';
|
||||
import { ImageSearchProvider } from './ImageSearch.provider';
|
||||
import { ImageSearchItemIntializer } from './search-item/ImageSearchItem.intializer';
|
||||
import { ImageSearchItemToolbar } from './search-item/ImageSearchItem.toolbar';
|
||||
import { ImageSearchItemView } from './search-item/ImageSearchItem.view';
|
||||
import { ImageSearchItemFieldSettings } from './search-item/ImageSearchItem.setting';
|
||||
import { usePropsOptionalImageSearchItemField } from './search-item/useProps.Optional';
|
||||
import { usePropsRelatedImageSearchItemField } from './search-item/useProps.Related';
|
||||
|
||||
class PluginImageSearch extends Plugin {
|
||||
async load() {
|
||||
this.app.addScopes({
|
||||
usePropsOptionalImageSearchItemField: usePropsOptionalImageSearchItemField,
|
||||
usePropsRelatedImageSearchItemField: usePropsRelatedImageSearchItemField,
|
||||
});
|
||||
this.app.addComponents({
|
||||
ImageSearchView: ImageSearchView,
|
||||
ImageSearchInitializer: ImageSearchInitializer,
|
||||
ImageSearchProvider: ImageSearchProvider,
|
||||
ImageSearchItemIntializer: ImageSearchItemIntializer,
|
||||
ImageSearchItemToolbar: ImageSearchItemToolbar,
|
||||
ImageSearchItemView: ImageSearchItemView,
|
||||
});
|
||||
|
||||
this.app.schemaInitializerManager.add(ImageSearchConfigureFields);
|
||||
this.schemaSettingsManager.add(ImageSearchItemFieldSettings);
|
||||
|
||||
this.app.schemaInitializerManager.addItem('mobilePage:addBlock', 'filterBlocks.imageSearch', {
|
||||
name: 'imageSearch',
|
||||
title: 'imageSearch',
|
||||
icon: 'tab-search',
|
||||
Component: 'ImageSearchInitializer',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default PluginImageSearch;
|
@ -1,33 +0,0 @@
|
||||
import { Plugin } from '@nocobase/client';
|
||||
import { SwiperBlockInitializer } from './SwiperBlockInitializer';
|
||||
import { SwiperBlock } from './SwiperBlock';
|
||||
import { SwiperFieldSettings } from './SwiperFieldSettings';
|
||||
import { useSwiperBlockProps } from './useSwiperBlockProps';
|
||||
import { SwiperPage } from './SwiperPage';
|
||||
|
||||
class PluginSwiper extends Plugin {
|
||||
async load() {
|
||||
this.app.addScopes({
|
||||
useSwiperBlockProps,
|
||||
});
|
||||
this.app.addComponents({
|
||||
SwiperBlockInitializer,
|
||||
SwiperBlock,
|
||||
SwiperPage,
|
||||
});
|
||||
|
||||
this.app.schemaInitializerManager.addItem('mobilePage:addBlock', 'dataBlocks.swiper', {
|
||||
title: 'swiper',
|
||||
name: 'swiper',
|
||||
type: 'item',
|
||||
Component: 'SwiperBlockInitializer',
|
||||
});
|
||||
this.app.schemaSettingsManager.add(SwiperFieldSettings);
|
||||
this.app.router.add('mobile.swiper.page', {
|
||||
path: '/mobile/:name/image/:collection/:field/:fieldParams',
|
||||
Component: 'SwiperPage',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default PluginSwiper;
|
@ -1,47 +0,0 @@
|
||||
import { Plugin } from '@nocobase/client';
|
||||
import { TabSearch } from './components/TabSearch';
|
||||
import { TabSearchProvider } from './provider/TabSearchProvider';
|
||||
import { TabSearchBlockInitializer } from './initializer/TabSearchBlockInitializer';
|
||||
import { TabSearchFieldItem } from './components/field-item/TabSearchFieldItem';
|
||||
import { TabSearchCollapsibleInputItem } from './components/field-item/TabSearchCollapsibleInputItem';
|
||||
import { TabSearchFieldSchemaInitializerGadget } from './initializer/TabSearchFieldSchemaInitializerGadget';
|
||||
import { useTabSearchFieldItemRelatedProps } from './components/field-item/TabSerachFieldItemRelatedProps';
|
||||
import { useTabSearchFieldItemProps } from './components/field-item/TabSearchFieldItemProps';
|
||||
import { TabSearchFieldSchemaInitializer } from './initializer/TabSearchFieldSchemaInitializer';
|
||||
import { TabSearchItemFieldSettings } from './settings/TabSearchItemFieldSettings';
|
||||
import { TabSearchFieldMItem } from './components/field-item/TabSearchFieldMItem';
|
||||
import { TabSearchCollapsibleInputMItem } from './components/field-item/TabSearchCollapsibleInputMItem';
|
||||
|
||||
class PluginTabSearch extends Plugin {
|
||||
async load() {
|
||||
this.app.addScopes({
|
||||
useTabSearchFieldItemProps,
|
||||
useTabSearchFieldItemRelatedProps,
|
||||
});
|
||||
|
||||
this.app.addComponents({
|
||||
TabSearch,
|
||||
TabSearchProvider,
|
||||
TabSearchBlockInitializer,
|
||||
TabSearchFieldItem,
|
||||
TabSearchFieldMItem,
|
||||
TabSearchCollapsibleInputItem,
|
||||
TabSearchCollapsibleInputMItem,
|
||||
TabSearchFieldSchemaInitializerGadget,
|
||||
});
|
||||
this.app.schemaInitializerManager.add(TabSearchFieldSchemaInitializer);
|
||||
this.schemaSettingsManager.add(TabSearchItemFieldSettings);
|
||||
this.app.schemaInitializerManager.addItem('mobilePage:addBlock', 'filterBlocks.tabSearch', {
|
||||
name: 'tabSearch',
|
||||
title: 'tabSearch',
|
||||
Component: 'TabSearchBlockInitializer',
|
||||
});
|
||||
this.app.schemaInitializerManager.addItem('page:addBlock', 'filterBlocks.tabSearch', {
|
||||
name: 'tabSearch',
|
||||
title: 'tabSearch',
|
||||
Component: 'TabSearchBlockInitializer',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default PluginTabSearch;
|
@ -1,2 +0,0 @@
|
||||
export * from './server';
|
||||
export { default } from './server';
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"Choices fields":"Choices fields",
|
||||
"Text fields":"Text fields",
|
||||
"Generic properties":"Generic properties",
|
||||
"Search":"Search",
|
||||
"Please enter search content":"Please enter search content",
|
||||
"Title field":"Title field",
|
||||
"Set show field":"Set show field",
|
||||
"Set field count":"Set field count",
|
||||
"Configure field": "Configure field",
|
||||
"Configure fields": "Configure fields",
|
||||
"Configure columns": "Configure columns",
|
||||
"Add block": "Add block",
|
||||
"all": "all",
|
||||
"AllProducts": "AllProducts",
|
||||
"sort":"sort"
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"Choices fields":"选择字段",
|
||||
"Text fields":"文本字段",
|
||||
"Generic properties":"通用属性",
|
||||
"Search":"搜索",
|
||||
"Please enter search content":"请输入查询内容",
|
||||
"Title field":"标题字段",
|
||||
"Set show field":"设置展示字段",
|
||||
"Set field count":"设置展示数量",
|
||||
"Configure field": "配置字段",
|
||||
"Configure fields": "配置字段",
|
||||
"Configure columns": "配置字段",
|
||||
"Add block": "创建区块",
|
||||
"all": "全部",
|
||||
"AllProducts": "全部商品",
|
||||
"sort": "排序"
|
||||
}
|
@ -1 +0,0 @@
|
||||
export { default } from './plugin';
|
@ -1,19 +0,0 @@
|
||||
import { Plugin } from '@nocobase/server';
|
||||
|
||||
export class PluginMobileServer extends Plugin {
|
||||
async afterAdd() {}
|
||||
|
||||
async beforeLoad() {}
|
||||
|
||||
async load() {}
|
||||
|
||||
async install() {}
|
||||
|
||||
async afterEnable() {}
|
||||
|
||||
async afterDisable() {}
|
||||
|
||||
async remove() {}
|
||||
}
|
||||
|
||||
export default PluginMobileServer;
|
@ -14,6 +14,7 @@
|
||||
"ahooks": "3.x",
|
||||
"antd": "5.16.1",
|
||||
"antd-mobile": "^5.35.0",
|
||||
"antd-mobile-icons": "^0.3.0",
|
||||
"antd-style": "3.x",
|
||||
"classnames": "2.x",
|
||||
"lodash": "4.17.21",
|
||||
|
Before Width: | Height: | Size: 512 B After Width: | Height: | Size: 512 B |
Before Width: | Height: | Size: 804 B After Width: | Height: | Size: 804 B |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
@ -11,8 +11,31 @@ import {
|
||||
MSettings,
|
||||
useGridCardBlockItemProps,
|
||||
useGridCardBlockProps,
|
||||
TabSearch,
|
||||
TabSearchProvider,
|
||||
TabSearchBlockInitializer,
|
||||
TabSearchFieldItem,
|
||||
TabSearchFieldMItem,
|
||||
TabSearchCollapsibleInputItem,
|
||||
TabSearchCollapsibleInputMItem,
|
||||
TabSearchFieldSchemaInitializerGadget,
|
||||
SwiperBlockInitializer,
|
||||
SwiperBlock,
|
||||
SwiperPage,
|
||||
ImageSearchView,
|
||||
ImageSearchInitializer,
|
||||
ImageSearchProvider,
|
||||
ImageSearchItemIntializer,
|
||||
ImageSearchItemToolbar,
|
||||
ImageSearchItemView,
|
||||
NoticeBlock,
|
||||
NoticeBlockInitializer,
|
||||
useSwiperBlockProps,
|
||||
usePropsOptionalImageSearchItemField,
|
||||
usePropsRelatedImageSearchItemField,
|
||||
} from './schema';
|
||||
import './bridge';
|
||||
import './assets/svg';
|
||||
|
||||
export const MobileCore: React.FC = (props) => {
|
||||
return (
|
||||
@ -26,10 +49,32 @@ export const MobileCore: React.FC = (props) => {
|
||||
MPage,
|
||||
MHeader,
|
||||
MSettings,
|
||||
TabSearch,
|
||||
TabSearchProvider,
|
||||
TabSearchBlockInitializer,
|
||||
TabSearchFieldItem,
|
||||
TabSearchFieldMItem,
|
||||
TabSearchCollapsibleInputItem,
|
||||
TabSearchCollapsibleInputMItem,
|
||||
TabSearchFieldSchemaInitializerGadget,
|
||||
SwiperBlockInitializer,
|
||||
SwiperBlock,
|
||||
SwiperPage,
|
||||
ImageSearchView: ImageSearchView,
|
||||
ImageSearchInitializer: ImageSearchInitializer,
|
||||
ImageSearchProvider: ImageSearchProvider,
|
||||
ImageSearchItemIntializer: ImageSearchItemIntializer,
|
||||
ImageSearchItemToolbar: ImageSearchItemToolbar,
|
||||
ImageSearchItemView: ImageSearchItemView,
|
||||
// NoticeBlock,
|
||||
// NoticeBlockInitializer,
|
||||
}}
|
||||
scope={{
|
||||
useGridCardBlockItemProps,
|
||||
useGridCardBlockProps,
|
||||
useSwiperBlockProps,
|
||||
usePropsOptionalImageSearchItemField: usePropsOptionalImageSearchItemField,
|
||||
usePropsRelatedImageSearchItemField: usePropsRelatedImageSearchItemField,
|
||||
}}
|
||||
>
|
||||
{props.children}
|
||||
|
@ -1,19 +1,18 @@
|
||||
import { SchemaInitializer, useCollection, useCollectionManager } from '@nocobase/client';
|
||||
import { tval } from '../../locale';
|
||||
import { useIsMobile } from '../tab-search/components/field-item/hooks';
|
||||
import { canBeOptionalField, canBeRelatedField } from '../tab-search/utils';
|
||||
import { createSchemaImageSearchItem } from './search-item/ImageSearchItem.schema';
|
||||
|
||||
export const ImageSearchConfigureFields = new SchemaInitializer({
|
||||
name: 'ImageSearchView:configureFields',
|
||||
title: tval('Configure fields'),
|
||||
title: '{{t("Configure fields")}}',
|
||||
style: { marginTop: 16 },
|
||||
icon: 'SettingOutlined',
|
||||
items: [
|
||||
{
|
||||
name: 'choicesFields',
|
||||
type: 'itemGroup',
|
||||
title: tval('Choices fields'),
|
||||
title: '{{t("Choices fields")}}',
|
||||
useChildren: useChildrenChoicesFieldSchemas,
|
||||
},
|
||||
],
|
@ -0,0 +1,2 @@
|
||||
export * from './useAction.ImageSearchItemView';
|
||||
export * from './useSelect';
|
@ -1,7 +1,7 @@
|
||||
import { useCollection, useDesigner } from '@nocobase/client';
|
||||
import { useFieldSchema } from '@tachybase/schema';
|
||||
import React from 'react';
|
||||
import { useTranslation } from '../../../locale';
|
||||
import { useTranslation } from '../../../../../locale';
|
||||
|
||||
export function useActionImageSearchItemView(props) {
|
||||
const { list, onSelected, valueKey: _valueKey, labelKey: _labelKey, filterKey } = props;
|
@ -0,0 +1,8 @@
|
||||
export * from './ImageSearch.configure';
|
||||
export * from './ImageSearch.initializer';
|
||||
export * from './ImageSearch.provider';
|
||||
export * from './ImageSearch.schema';
|
||||
export * from './ImageSearch.view';
|
||||
export * from './data';
|
||||
export * from './hooks';
|
||||
export * from './search-item';
|
@ -9,7 +9,7 @@ import {
|
||||
} from '@nocobase/client';
|
||||
import { useField, useFieldSchema } from '@tachybase/schema';
|
||||
import _ from 'lodash';
|
||||
import { useTranslation } from '../../../locale';
|
||||
import { useTranslation } from '../../../../../locale';
|
||||
import { isTabSearchCollapsibleInputItem } from '../../tab-search/utils';
|
||||
|
||||
export const ImageSearchItemFieldSettings = new SchemaSettings({
|
@ -0,0 +1,7 @@
|
||||
export * from './ImageSearchItem.intializer';
|
||||
export * from './ImageSearchItem.schema';
|
||||
export * from './ImageSearchItem.setting';
|
||||
export * from './ImageSearchItem.toolbar';
|
||||
export * from './ImageSearchItem.view';
|
||||
export * from './useProps.Optional';
|
||||
export * from './useProps.Related';
|
@ -4,3 +4,7 @@ export * from './tab-bar';
|
||||
export * from './page';
|
||||
export * from './header';
|
||||
export * from './settings';
|
||||
export * from './image-search';
|
||||
export * from './swiper';
|
||||
export * from './tab-search';
|
||||
export * from './notice';
|
||||
|
@ -0,0 +1 @@
|
||||
export * from './schema-initializer';
|
@ -8,7 +8,7 @@ import {
|
||||
} from '@nocobase/client';
|
||||
import { NoticeBar } from 'antd-mobile';
|
||||
import { createGridCardBlockSchema } from '../schema-create/createGridCardBlockSchma';
|
||||
import { NoticeIcon } from '../../assets/svg';
|
||||
import { NoticeIcon } from '../../../../assets/svg';
|
||||
|
||||
export const NoticeBlock = () => {
|
||||
return <NoticeBar content="月底冲量佣金上调" color="alert" />;
|
@ -0,0 +1 @@
|
||||
export * from './NoticeBlockInitializer';
|
@ -1,7 +1,6 @@
|
||||
import { BlockItem, css, useDesignable, useRequest, withDynamicSchemaProps } from '@nocobase/client';
|
||||
import { useFieldSchema } from '@tachybase/schema';
|
||||
import { Swiper } from 'antd-mobile';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import React from 'react';
|
||||
|
||||
export const SwiperBlock = withDynamicSchemaProps((props) => {
|
||||
const { fieldValue, data, changeNav } = props;
|
@ -6,7 +6,6 @@ import {
|
||||
useSchemaInitializerItem,
|
||||
} from '@nocobase/client';
|
||||
import React from 'react';
|
||||
import { createGridCardBlockSchema } from '../../schma-block/schema-create/createGridCardBlockSchma';
|
||||
import { ISchema } from '@tachybase/schema';
|
||||
import { Toast } from 'antd-mobile';
|
||||
|
@ -8,7 +8,7 @@ import {
|
||||
} from '@nocobase/client';
|
||||
import { useField, useFieldSchema } from '@tachybase/schema';
|
||||
import _ from 'lodash';
|
||||
import { useTranslation } from '../../locale';
|
||||
import { useTranslation } from '../../../../locale';
|
||||
|
||||
export const SwiperFieldSettings = new SchemaSettings({
|
||||
name: 'SwiperFieldSettings',
|
@ -1,9 +1,4 @@
|
||||
import {
|
||||
CollectionRecordProvider,
|
||||
DataBlockProvider,
|
||||
RemoteSchemaComponent,
|
||||
useCollectionRecord,
|
||||
} from '@nocobase/client';
|
||||
import { CollectionRecordProvider, DataBlockProvider, RemoteSchemaComponent } from '@nocobase/client';
|
||||
import React from 'react';
|
||||
import { useParams } from 'react-router-dom';
|
||||
|
@ -0,0 +1,5 @@
|
||||
export * from './SwiperBlock';
|
||||
export * from './SwiperBlockInitializer';
|
||||
export * from './SwiperFieldSettings';
|
||||
export * from './SwiperPage';
|
||||
export * from './useSwiperBlockProps';
|
@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
import { Button, Col, Divider, Input, Select } from 'antd';
|
||||
import { useTranslation } from '../../../../locale';
|
||||
import { useTranslation } from '../../../../../../locale';
|
||||
|
||||
export const ISelect = (props) => {
|
||||
const { options, onChange } = props;
|
@ -4,7 +4,7 @@ import React from 'react';
|
||||
import { useTabSearchCollapsibleInputItemAction } from './TabSearchCollapsibleInputItemAction';
|
||||
import { IButton, IDatePicker, IInput, ISelect } from './TabSearchCollapsibleInputMItemChild';
|
||||
import { canBeDataField } from '../../utils';
|
||||
import { useTranslation } from '../../../../locale';
|
||||
import { useTranslation } from '../../../../../../locale';
|
||||
|
||||
export const TabSearchCollapsibleInputMItem = withDynamicSchemaProps(
|
||||
(props) => {
|
@ -1,5 +1,5 @@
|
||||
import React, { useState } from 'react';
|
||||
import { useTranslation } from '../../../../locale';
|
||||
import { useTranslation } from '../../../../../../locale';
|
||||
import { Grid, Divider, Picker, Input, Space, ActionSheet, DatePicker, CalendarPicker } from 'antd-mobile';
|
||||
import { DownOutline } from 'antd-mobile-icons';
|
||||
import type { Action } from 'antd-mobile/es/components/action-sheet';
|
@ -2,7 +2,7 @@ import React from 'react';
|
||||
import { MenuProps } from 'antd';
|
||||
import { useCollection, useDesigner } from '@nocobase/client';
|
||||
import { useFieldSchema } from '@tachybase/schema';
|
||||
import { useTranslation } from '../../../../locale';
|
||||
import { useTranslation } from '../../../../../../locale';
|
||||
|
||||
export const useTabSearchFieldItemAction = (props) => {
|
||||
const { list, onSelected, valueKey: _valueKey, labelKey: _labelKey, filterKey } = props;
|
@ -0,0 +1,6 @@
|
||||
export * from './TabSearchCollapsibleInputItem';
|
||||
export * from './TabSearchCollapsibleInputMItem';
|
||||
export * from './TabSearchFieldItem';
|
||||
export * from './TabSearchFieldItemProps';
|
||||
export * from './TabSearchFieldMItem';
|
||||
export * from './TabSerachFieldItemRelatedProps';
|
@ -0,0 +1,3 @@
|
||||
export * from './TabSearch';
|
||||
export * from './TabSearchAction';
|
||||
export * from './field-item';
|
@ -0,0 +1,4 @@
|
||||
export * from './components';
|
||||
export * from './initializer';
|
||||
export * from './provider';
|
||||
export * from './settings';
|
@ -1,9 +1,9 @@
|
||||
import { SchemaInitializer, SchemaInitializerItemType, useCollection, useCollectionManager } from '@nocobase/client';
|
||||
import _ from 'lodash';
|
||||
import { tval } from '../../../locale';
|
||||
import { canBeDataField, canBeOptionalField, canBeRelatedField, canBeSearchField } from '../utils';
|
||||
import { createTabSearchItemSchema } from '../create/createTabSearchItemSchema';
|
||||
import { useIsMobile } from '../components/field-item/hooks';
|
||||
import { tval } from '../../../../../locale';
|
||||
|
||||
const textFieldsItem: SchemaInitializerItemType<any> = {
|
||||
name: 'textFields',
|
@ -0,0 +1,3 @@
|
||||
export * from './TabSearchBlockInitializer';
|
||||
export * from './TabSearchFieldSchemaInitializer';
|
||||
export * from './TabSearchFieldSchemaInitializerGadget';
|
@ -0,0 +1 @@
|
||||
export * from './TabSearchProvider';
|
@ -7,7 +7,7 @@ import {
|
||||
useDesignable,
|
||||
useFormBlockContext,
|
||||
} from '@nocobase/client';
|
||||
import { useTranslation } from '../../../locale';
|
||||
import { useTranslation } from '../../../../../locale';
|
||||
import { useField, useFieldSchema } from '@tachybase/schema';
|
||||
import _ from 'lodash';
|
||||
import { isTabSearchCollapsibleInputItem } from '../utils';
|
@ -0,0 +1 @@
|
||||
export * from './TabSearchItemFieldSettings';
|
@ -1,5 +1,5 @@
|
||||
import { CompatibleSchemaInitializer, gridRowColWrap } from '@nocobase/client';
|
||||
import { generateNTemplate } from '../../../locale';
|
||||
import { generateNTemplate, tval } from '../../../locale';
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
@ -31,11 +31,11 @@ export const mBlockInitializers_deprecated = new CompatibleSchemaInitializer({
|
||||
title: '{{t("Form")}}',
|
||||
Component: 'FormBlockInitializer',
|
||||
},
|
||||
{
|
||||
name: 'details',
|
||||
title: '{{t("Details")}}',
|
||||
Component: 'DetailsBlockInitializer',
|
||||
},
|
||||
// {
|
||||
// name: 'details',
|
||||
// title: '{{t("Details")}}',
|
||||
// Component: 'DetailsBlockInitializer',
|
||||
// },
|
||||
{
|
||||
name: 'calendar',
|
||||
title: '{{t("Calendar")}}',
|
||||
@ -96,11 +96,11 @@ export const mBlockInitializers = new CompatibleSchemaInitializer(
|
||||
title: '{{t("Table")}}',
|
||||
Component: 'TableBlockInitializer',
|
||||
},
|
||||
{
|
||||
name: 'form',
|
||||
title: '{{t("Form")}}',
|
||||
Component: 'FormBlockInitializer',
|
||||
},
|
||||
// {
|
||||
// name: 'form',
|
||||
// title: '{{t("Form")}}',
|
||||
// Component: 'FormBlockInitializer',
|
||||
// },
|
||||
{
|
||||
name: 'details',
|
||||
title: '{{t("Details")}}',
|
||||
@ -116,6 +116,18 @@ export const mBlockInitializers = new CompatibleSchemaInitializer(
|
||||
title: generateNTemplate('Map'),
|
||||
Component: 'MapBlockInitializer',
|
||||
},
|
||||
{
|
||||
title: tval('Swiper'),
|
||||
name: 'swiper',
|
||||
type: 'item',
|
||||
Component: 'SwiperBlockInitializer',
|
||||
},
|
||||
{
|
||||
title: 'notice',
|
||||
name: 'notice',
|
||||
type: 'item',
|
||||
Component: 'NoticeBlockInitializer',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -130,7 +142,7 @@ export const mBlockInitializers = new CompatibleSchemaInitializer(
|
||||
},
|
||||
{
|
||||
name: 'markdown',
|
||||
title: '{{t("Markdown")}}',
|
||||
title: tval('Markdown'),
|
||||
Component: 'MarkdownBlockInitializer',
|
||||
},
|
||||
{
|
||||
@ -140,6 +152,24 @@ export const mBlockInitializers = new CompatibleSchemaInitializer(
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'filterBlocks',
|
||||
type: 'itemGroup',
|
||||
title: '{{t("Filter blocks")}}',
|
||||
children: [
|
||||
{
|
||||
name: 'tabSearch',
|
||||
title: tval('TabSearch'),
|
||||
Component: 'TabSearchBlockInitializer',
|
||||
},
|
||||
{
|
||||
name: 'imageSearch',
|
||||
title: tval('ImageSearch'),
|
||||
icon: 'tab-search',
|
||||
Component: 'ImageSearchInitializer',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
mBlockInitializers_deprecated,
|
||||
|
@ -3,7 +3,13 @@ import React from 'react';
|
||||
import { Navigate, Outlet } from 'react-router-dom';
|
||||
import { MobileClientProvider } from './MobileClientProvider';
|
||||
import MApplication from './router/Application';
|
||||
import { mBlockInitializers, mBlockInitializers_deprecated } from './core/schema';
|
||||
import {
|
||||
ImageSearchConfigureFields,
|
||||
ImageSearchItemFieldSettings,
|
||||
mBlockInitializers,
|
||||
mBlockInitializers_deprecated,
|
||||
TabSearchFieldSchemaInitializer,
|
||||
} from './core/schema';
|
||||
import { AppConfiguration, InterfaceConfiguration } from './configuration';
|
||||
import { NAMESPACE } from './locale';
|
||||
|
||||
@ -16,6 +22,9 @@ export class MobileClientPlugin extends Plugin {
|
||||
this.app.use(MobileClientProvider);
|
||||
this.app.schemaInitializerManager.add(mBlockInitializers_deprecated);
|
||||
this.app.schemaInitializerManager.add(mBlockInitializers);
|
||||
this.app.schemaInitializerManager.add(ImageSearchConfigureFields);
|
||||
this.app.schemaSettingsManager.add(ImageSearchItemFieldSettings);
|
||||
this.app.schemaInitializerManager.add(TabSearchFieldSchemaInitializer);
|
||||
}
|
||||
|
||||
addSettings() {
|
||||
@ -66,6 +75,10 @@ export class MobileClientPlugin extends Plugin {
|
||||
path: '/mobile/:name',
|
||||
Component: 'RouteSchemaComponent',
|
||||
});
|
||||
this.app.router.add('mobile.swiper.page', {
|
||||
path: '/mobile/:name/image/:collection/:field/:fieldParams',
|
||||
Component: 'SwiperPage',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { i18n } from '@nocobase/client';
|
||||
import {tval as nTval, i18n } from '@nocobase/client';
|
||||
import { useTranslation as useT } from 'react-i18next';
|
||||
|
||||
export const NAMESPACE = 'mobile-client';
|
||||
@ -14,6 +14,8 @@ export function generateNTemplate(key: string) {
|
||||
return `{{t('${key}', { ns: '${NAMESPACE}', nsMode: 'fallback' })}}`;
|
||||
}
|
||||
|
||||
export const tval = (key: string) => nTval(key, { ns: NAMESPACE });
|
||||
|
||||
export function useTranslation() {
|
||||
return useT([NAMESPACE, 'client'], {
|
||||
nsMode: 'fallback',
|
||||
|
@ -28,5 +28,20 @@
|
||||
"Delete menu block": "Delete menu block",
|
||||
"Mobile client access address": "Mobile client access address",
|
||||
"The full address is": "The full address is",
|
||||
"Preview": "Preview"
|
||||
"Preview": "Preview",
|
||||
"Choices fields":"Choices fields",
|
||||
"Text fields":"Text fields",
|
||||
"Generic properties":"Generic properties",
|
||||
"Search":"Search",
|
||||
"Please enter search content":"Please enter search content",
|
||||
"Title field":"Title field",
|
||||
"Set show field":"Set show field",
|
||||
"Set field count":"Set field count",
|
||||
"Configure field": "Configure field",
|
||||
"Configure fields": "Configure fields",
|
||||
"Configure columns": "Configure columns",
|
||||
"Add block": "Add block",
|
||||
"all": "all",
|
||||
"AllProducts": "AllProducts",
|
||||
"sort":"sort"
|
||||
}
|
||||
|
@ -28,5 +28,23 @@
|
||||
"Delete menu block": "删除菜单区块",
|
||||
"Mobile client access address": "移动端访问地址",
|
||||
"The full address is": "完整的地址是",
|
||||
"Preview": "预览"
|
||||
"Preview": "预览",
|
||||
"Choices fields":"选择字段",
|
||||
"Text fields":"文本字段",
|
||||
"Generic properties":"通用属性",
|
||||
"Search":"搜索",
|
||||
"Please enter search content":"请输入查询内容",
|
||||
"Title field":"标题字段",
|
||||
"Set show field":"设置展示字段",
|
||||
"Set field count":"设置展示数量",
|
||||
"Configure field": "配置字段",
|
||||
"Configure fields": "配置字段",
|
||||
"Configure columns": "配置字段",
|
||||
"Add block": "创建区块",
|
||||
"all": "全部",
|
||||
"AllProducts": "全部商品",
|
||||
"sort": "排序",
|
||||
"Swiper":"轮播图",
|
||||
"TabSearch":"表格搜索",
|
||||
"ImageSearch":"图片搜索"
|
||||
}
|
||||
|
413
pnpm-lock.yaml
413
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user