ERPTurbo_Admin/.lingma/rules/add-new-page.md
shenyifei 0da56e27df feat(product): 添加产品数据管理功能
- 新增产品数据列表组件 ProductDataList
- 在基础数据模块中导出 ProductDataList 组件
- 为工人列表和辅料列表添加 requireQuantityAndPrice 字段
- 添加产品相关的国际化文案配置
- 创建产品数据页面并引入 ProductDataList 组件
- 在业务服务中增加产品相关接口定义
- 实现产品的增删改查、拖拽排序等完整功能
- 添加新增页面开发指南文档
2025-11-17 10:45:11 +08:00

242 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 添加新页面指南
本文档总结了在 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. 遵循项目现有的代码风格和结构