- 新增产品数据列表组件 ProductDataList - 在基础数据模块中导出 ProductDataList 组件 - 为工人列表和辅料列表添加 requireQuantityAndPrice 字段 - 添加产品相关的国际化文案配置 - 创建产品数据页面并引入 ProductDataList 组件 - 在业务服务中增加产品相关接口定义 - 实现产品的增删改查、拖拽排序等完整功能 - 添加新增页面开发指南文档
242 lines
6.1 KiB
Markdown
242 lines
6.1 KiB
Markdown
# 添加新页面指南
|
||
|
||
本文档总结了在 ERPTurbo_Admin 项目中添加新页面所需的所有步骤和代码。
|
||
|
||
## 基本步骤
|
||
|
||
1. 创建页面组件
|
||
2. (可选)创建对应的业务组件
|
||
3. 在路由中注册页面(如果使用约定式路由则不需要)
|
||
|
||
## 详细说明
|
||
|
||
### 1. 创建页面组件
|
||
|
||
在 `packages/app-operation/src/pages/` 目录下创建一个新的页面文件,例如 `NewPage.tsx`:
|
||
|
||
```tsx
|
||
import { NewComponentList } from '@/components';
|
||
|
||
export default function Page() {
|
||
return <NewComponentList />;
|
||
}
|
||
```
|
||
|
||
页面组件应:
|
||
- 默认导出一个函数式组件,名称为 `Page`
|
||
- 直接返回要渲染的组件
|
||
- 从 '@/components' 导入需要的业务组件
|
||
|
||
### 2. 创建业务组件(如果需要)
|
||
|
||
如果页面需要展示特定业务数据,需要在 `packages/app-operation/src/components/` 目录下创建对应的业务组件。
|
||
|
||
例如,在 `packages/app-operation/src/components/BasicData/` 目录下创建 `NewComponentList.tsx`:
|
||
|
||
```tsx
|
||
import { BizContainer, BizValueType, ModeType } from '@/components';
|
||
import { business } from '@/services';
|
||
import { useIntl } from '@@/exports';
|
||
import {
|
||
ProColumns,
|
||
ProFormMoney,
|
||
ProFormSwitch,
|
||
ProFormText,
|
||
} from '@ant-design/pro-components';
|
||
import { ProDescriptionsItemProps } from '@ant-design/pro-descriptions';
|
||
import React from 'react';
|
||
|
||
interface INewComponentListProps {
|
||
ghost?: boolean;
|
||
id?: BusinessAPI.NewComponentVO['id'];
|
||
search?: boolean;
|
||
onValueChange?: () => void;
|
||
mode?: ModeType;
|
||
trigger?: () => React.ReactNode;
|
||
}
|
||
|
||
export default function NewComponentList(props: INewComponentListProps) {
|
||
const {
|
||
ghost = false,
|
||
itemId,
|
||
search = true,
|
||
mode = 'drag',
|
||
trigger,
|
||
onValueChange,
|
||
} = props;
|
||
|
||
const intl = useIntl();
|
||
const intlPrefix = 'newComponent';
|
||
|
||
const columns: ProColumns<BusinessAPI.NewComponentVO, BizValueType>[] = [
|
||
{
|
||
title: intl.formatMessage({ id: intlPrefix + '.column.name' }),
|
||
dataIndex: 'name',
|
||
key: 'name',
|
||
renderText: (text: string) => <span className="font-medium">{text}</span>,
|
||
},
|
||
// 更多列定义...根据 BusinessAPI.NewComponentVO 的字段来生成
|
||
];
|
||
|
||
const formContext = [
|
||
<ProFormText key={'name'} name={'name'} /* 表单字段配置 */ />,
|
||
// 更多表单字段...根据 BusinessAPI.NewComponentVO 的字段来生成
|
||
];
|
||
|
||
const detailColumns: ProDescriptionsItemProps<
|
||
BusinessAPI.NewComponentVO,
|
||
BizValueType
|
||
>[] = columns as ProDescriptionsItemProps<
|
||
BusinessAPI.NewComponentVO,
|
||
BizValueType
|
||
>[];
|
||
|
||
return (
|
||
<BizContainer<
|
||
typeof business.newComponent,
|
||
BusinessAPI.NewComponentVO,
|
||
BusinessAPI.NewComponentPageQry,
|
||
BusinessAPI.NewComponentCreateCmd,
|
||
BusinessAPI.NewComponentUpdateCmd
|
||
>
|
||
rowKey={'id'}
|
||
permission={'operation-new-component'}
|
||
func={business.newComponent}
|
||
method={'newComponent'}
|
||
methodUpper={'NewComponent'}
|
||
intlPrefix={intlPrefix}
|
||
modeType={mode}
|
||
onValueChange={onValueChange}
|
||
container={{}}
|
||
remark={{
|
||
mode: 'editor',
|
||
}}
|
||
status
|
||
drag={{
|
||
fieldProps: {
|
||
bordered: true,
|
||
ghost,
|
||
search,
|
||
params: {
|
||
// 这里可以添加特定的查询参数
|
||
},
|
||
},
|
||
columns,
|
||
}}
|
||
create={{
|
||
formType: 'drawer',
|
||
formContext,
|
||
initValues: {
|
||
showInEntry: false,
|
||
status: true,
|
||
},
|
||
}}
|
||
update={{
|
||
formType: 'drawer',
|
||
formContext,
|
||
}}
|
||
destroy={{}}
|
||
detail={{
|
||
rowId: id,
|
||
formType: 'drawer',
|
||
columns: detailColumns,
|
||
trigger,
|
||
}}
|
||
/>
|
||
);
|
||
}
|
||
```
|
||
|
||
业务组件要点:
|
||
- 使用 `BizContainer` 组件来构建标准的增删改查页面
|
||
- 定义国际化前缀 `intlPrefix` 用于多语言支持
|
||
- 定义表格列 `columns` 和表单字段 `formContext`
|
||
- 使用 `useIntl()` 进行国际化处理
|
||
|
||
### 3. 导出组件(如果创建了新组件)
|
||
|
||
如果创建了新的业务组件,需要在对应目录的 `index.ts` 文件中导出:
|
||
|
||
```ts
|
||
export { default as NewComponentList } from './NewComponentList';
|
||
```
|
||
|
||
例如,在 `packages/app-operation/src/components/BasicData/index.ts` 中添加导出。
|
||
|
||
### 4. 国际化配置
|
||
|
||
在 `packages/app-operation/src/locales/zh-CN.ts` 中添加对应中文翻译:
|
||
|
||
```ts
|
||
newComponent: {
|
||
column: {
|
||
name: '名称',
|
||
// 更多字段...
|
||
},
|
||
form: {
|
||
name: {
|
||
label: '名称',
|
||
placeholder: '请输入名称',
|
||
required: '名称为必填项',
|
||
},
|
||
// 更多表单字段...
|
||
},
|
||
modal: {
|
||
create: {
|
||
title: '新增',
|
||
button: '新增',
|
||
success: '新增成功',
|
||
},
|
||
update: {
|
||
title: '更新',
|
||
button: '编辑',
|
||
success: '更新成功',
|
||
status: {
|
||
success: '修改状态成功',
|
||
},
|
||
},
|
||
delete: {
|
||
success: '删除成功',
|
||
button: '删除',
|
||
confirm: {
|
||
title: '确认删除',
|
||
content: '您确定要删除该项吗?',
|
||
okText: '确定',
|
||
cancelText: '取消',
|
||
},
|
||
},
|
||
import: {
|
||
title: '导入',
|
||
button: '导入',
|
||
success: '导入成功',
|
||
},
|
||
view: {
|
||
title: '查看',
|
||
button: '查看',
|
||
},
|
||
},
|
||
},
|
||
```
|
||
|
||
### 5. 路由配置
|
||
|
||
项目使用约定式路由,页面文件放置在 `packages/app-operation/src/pages/` 目录下会自动注册为路由。
|
||
|
||
例如,创建 `packages/app-operation/src/pages/NewPage.tsx` 文件后,访问路径为 `/new-page`。
|
||
|
||
## 示例参考
|
||
|
||
可以参考以下最近添加的页面:
|
||
|
||
1. `packages/app-operation/src/pages/ProductionAdvance.tsx`
|
||
2. `packages/app-operation/src/pages/WorkerAdvance.tsx`
|
||
3. `packages/app-operation/src/components/BasicData/ProductionAdvanceList.tsx`
|
||
4. `packages/app-operation/src/components/BasicData/WorkerAdvanceList.tsx`
|
||
|
||
## 注意事项
|
||
|
||
1. 页面组件必须默认导出名为 `Page` 的函数组件
|
||
2. 使用已有的业务组件和容器组件以保持一致性
|
||
3. 国际化是必需的,所有显示文本都需要支持多语言
|
||
4. 遵循项目现有的代码风格和结构
|