feat(biz): 添加Biz组件库设计规则和技术文档
- 创建.biz.md文件定义Biz组件库设计规则 - 创建design.md文件编写ERPTurbo_Admin项目技术文档 - 定义组件架构模式、类型系统和统一属性模式 - 添加权限控制机制和数据交互模式说明 - 完善项目核心技术栈和架构说明
This commit is contained in:
parent
45dc1de523
commit
cc15943d44
70
.lingma/rules/biz.md
Normal file
70
.lingma/rules/biz.md
Normal file
@ -0,0 +1,70 @@
|
||||
---
|
||||
trigger: manual
|
||||
---
|
||||
## Biz组件库设计规则
|
||||
|
||||
### 1. 组件架构模式
|
||||
|
||||
Biz组件库采用统一的业务组件架构,主要包含以下几类组件:
|
||||
|
||||
1. **核心容器组件**:
|
||||
- [BizContainer](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizContainer.tsx#L33-L947) - 主容器组件,协调其他业务组件
|
||||
- [PageContainer](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/PageContainer.tsx#L12-L42) - 页面容器组件,处理权限验证
|
||||
|
||||
2. **业务功能组件**:
|
||||
- [BizPage](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizPage.tsx#L7-L121) - 分页表格组件
|
||||
- [BizTree](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizTree.tsx#L6-L61) - 树形结构组件
|
||||
- [BizDrag](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizDrag.tsx#L7-L158) - 拖拽排序组件
|
||||
- [BizList](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizList.tsx#L6-L52) - 列表展示组件
|
||||
- [BizCalender](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizCalender.tsx#L10-L89) - 日历展示组件
|
||||
|
||||
3. **操作型组件**:
|
||||
- [BizCreate](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizCreate.tsx#L10-L240) - 创建操作组件
|
||||
- [BizUpdate](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizUpdate.tsx#L12-L255) - 更新操作组件
|
||||
- [BizDetail](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizDetail.tsx#L12-L273) - 详情查看组件
|
||||
- [BizDestroy](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizDestroy.tsx#L9-L90) - 删除操作组件
|
||||
- [BizImport](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizImport.tsx#L14-L610) - 批量导入组件
|
||||
|
||||
### 2. 类型系统设计
|
||||
|
||||
所有组件都采用泛型设计,主要泛型参数包括:
|
||||
|
||||
- `Func`: API函数类型
|
||||
- `BizVO`: 视图对象类型
|
||||
- `BizPageQry`: 查询参数类型
|
||||
- `BizCreateCmd`: 创建命令类型
|
||||
- `BizUpdateCmd`: 更新命令类型
|
||||
|
||||
### 3. 统一属性模式
|
||||
|
||||
所有Biz组件都遵循统一的属性设计模式:
|
||||
|
||||
1. **API相关属性**:
|
||||
- `func`: API函数集合
|
||||
- `method`: 方法名前缀
|
||||
- `methodUpper`: 首字母大写的方法名前缀
|
||||
- `rowKey`: 主键字段名
|
||||
|
||||
2. **权限与国际化**:
|
||||
- `permission`: 权限标识
|
||||
- `intlPrefix`: 国际化前缀
|
||||
|
||||
3. **表单类型**:
|
||||
- `formType`: 表单类型(modal/drawer/step)
|
||||
|
||||
### 4. 响应式设计
|
||||
|
||||
组件通过`isMobile`属性自动适配移动端,主要体现在:
|
||||
- 表单宽度自动调整
|
||||
- 操作按钮布局优化
|
||||
- 操作栏按钮数量自适应
|
||||
|
||||
### 5. 权限控制机制
|
||||
|
||||
使用[ButtonAccess](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/ButtonAccess.tsx#L11-L22)组件实现细粒度权限控制,权限标识通过`permission`属性自动拼接操作类型(如-create、-update、-delete、-view)。
|
||||
|
||||
### 6. 数据交互模式
|
||||
|
||||
1. **数据获取**:通过`func`中的方法调用API,方法名由[methodUpper](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizContainer.tsx#L33-L947)和操作类型组合而成
|
||||
2. **数据提交**:表单提交时自动移除包含"VO"的字段
|
||||
3. **状态管理**:使用[actionRef](file:///D:/xinfaleisheng/ERPTurbo_Admin/packages/app-operation/src/components/Biz/BizContainer.tsx#L80-L80)进行组件间状态同步
|
||||
155
.lingma/rules/design.md
Normal file
155
.lingma/rules/design.md
Normal file
@ -0,0 +1,155 @@
|
||||
---
|
||||
trigger: manual
|
||||
---
|
||||
# ERPTurbo_Admin 项目技术文档
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
ERPTurbo_Admin 是一个基于 React 生态系统的管理后台系统,采用 Monorepo 架构,包含多个子应用和共享组件库。
|
||||
|
||||
## 2. 核心技术栈
|
||||
|
||||
### 2.1 主要框架和库
|
||||
|
||||
| 技术 | 版本 | 用途 |
|
||||
|------|------|------|
|
||||
| React | ^18.0.0 | 前端核心框架 |
|
||||
| UmiJS Max | ^4.4.9 | 应用框架和构建工具 |
|
||||
| Ant Design | ^5.25.2 | UI 组件库 |
|
||||
| Ant Design Pro Components | ^2.8.6 | 高级业务组件 |
|
||||
| TypeScript | ^5.6.3 | 类型检查和开发支持 |
|
||||
| TailwindCSS | ^3.4.17 | CSS 框架 |
|
||||
|
||||
### 2.2 状态管理和数据流
|
||||
|
||||
- **UmiJS 内置状态管理**:包括 initialState、model、valtio 插件
|
||||
- **React Query**:服务端状态管理
|
||||
- **Dva**:轻量级的数据流方案
|
||||
|
||||
### 2.3 构建和开发工具
|
||||
|
||||
- **PNPM**:包管理器
|
||||
- **Prettier**:代码格式化
|
||||
- **ESLint**:代码质量检查
|
||||
- **Husky**:Git Hooks 工具
|
||||
- **Lint-staged**:增量代码检查
|
||||
|
||||
## 3. 项目架构
|
||||
|
||||
### 3.1 Monorepo 结构
|
||||
|
||||
```
|
||||
ERPTurbo_Admin/
|
||||
├── packages/
|
||||
│ ├── app-operation/ # 运营管理系统主应用
|
||||
│ ├── app-sso-server/ # SSO 单点登录系统
|
||||
├── shared/
|
||||
│ ├── components/ # 共享组件库
|
||||
├── pnpm-workspace.yaml # PNPM 工作区配置
|
||||
```
|
||||
|
||||
|
||||
### 3.2 主要应用介绍
|
||||
|
||||
#### app-operation (运营管理系统)
|
||||
这是主要的管理后台应用,具有完整的后台管理功能:
|
||||
- 使用 UmiJS Max 框架
|
||||
- 实现了动态路由和菜单
|
||||
- 包含权限控制和用户认证
|
||||
- 支持国际化 (i18n)
|
||||
|
||||
#### shared/components (共享组件库)
|
||||
这是一个独立的组件库,使用 Dumi 进行开发和文档展示:
|
||||
- 可复用的业务组件
|
||||
- 支持按需引入
|
||||
- 具备完整的类型定义
|
||||
|
||||
## 4. 核心特性实现
|
||||
|
||||
### 4.1 权限控制系统
|
||||
项目实现了细粒度的权限控制:
|
||||
- 基于角色的访问控制 (RBAC)
|
||||
- 页面级别权限控制 ([access](file://D:\xinfaleisheng\ERPTurbo_Admin\packages\app-operation\src\components\Biz\PageContainer.tsx#L16-L16) 插件)
|
||||
- 按钮级别权限控制 (通过 [ButtonAccess](file://D:\xinfaleisheng\ERPTurbo_Admin\packages\app-operation\src\components\Biz\ButtonAccess.tsx#L11-L19) 组件)
|
||||
|
||||
### 4.2 动态路由和菜单
|
||||
- 从服务端获取路由配置
|
||||
- 自动注册和渲染页面组件
|
||||
- 支持嵌套路由和面包屑导航
|
||||
|
||||
### 4.3 国际化支持
|
||||
- 使用 `locale` 插件实现多语言
|
||||
- 支持中文等语言切换
|
||||
- 统一的国际化消息管理
|
||||
|
||||
### 4.4 BizContainer 封装模式
|
||||
项目采用了独特的 [BizContainer](file://D:\xinfaleisheng\ERPTurbo_Admin\packages\app-operation\src\components\Biz\BizContainer.tsx#L47-L946) 组件封装业务逻辑:
|
||||
- 统一封装增删改查操作
|
||||
- 支持列表、详情、创建、更新、删除等标准操作
|
||||
- 集成导入导出、树形结构、日历视图等功能
|
||||
- 内置权限验证和操作引导
|
||||
|
||||
## 5. 样式和主题
|
||||
|
||||
### 5.1 样式解决方案
|
||||
- **TailwindCSS**:实用优先的 CSS 框架
|
||||
- **Ant Design 主题定制**:通过配置 token 自定义主题
|
||||
- **styled-components**:CSS-in-JS 解决方案
|
||||
|
||||
### 5.2 响应式设计
|
||||
- 支持移动端适配
|
||||
- 响应式布局组件
|
||||
- 可折叠侧边栏
|
||||
|
||||
## 6. 数据交互
|
||||
|
||||
### 6.1 API 请求
|
||||
- 使用 UmiJS 的 [request](file://D:\xinfaleisheng\ERPTurbo_Admin\shared\components\src\UploadMaterial\index.tsx#L11-L11) 插件统一管理 HTTP 请求
|
||||
- 全局错误处理和拦截器
|
||||
- 请求和响应拦截器支持
|
||||
- 与后端服务集成
|
||||
|
||||
### 6.2 数据模拟和调试
|
||||
- 集成 Swagger UI 文档
|
||||
- 支持 OpenAPI 规范自动生成服务层代码
|
||||
|
||||
## 7. 开发规范
|
||||
|
||||
### 7.1 代码风格
|
||||
- 使用 Prettier 统一代码格式
|
||||
- ESLint 进行代码质量检查
|
||||
- Git Hooks 保证提交代码质量
|
||||
|
||||
### 7.2 组件开发规范
|
||||
- 组件封装遵循单一职责原则
|
||||
- 使用 TypeScript 强类型约束
|
||||
- 统一的组件接口设计
|
||||
|
||||
## 8. 部署和构建
|
||||
|
||||
### 8.1 构建命令
|
||||
```
|
||||
# 开发环境启动
|
||||
pnpm dev
|
||||
|
||||
# 生产环境构建
|
||||
pnpm build
|
||||
|
||||
# 代码格式化
|
||||
pnpm format
|
||||
```
|
||||
|
||||
|
||||
### 8.2 构建优化
|
||||
- 使用 MFSU (Module Federation Speed Up) 提升编译速度
|
||||
- 支持代码分割和懒加载
|
||||
- 静态资源压缩和优化
|
||||
|
||||
## 9. 项目扩展性考虑
|
||||
|
||||
1. **插件化架构**:UmiJS 插件机制便于功能扩展
|
||||
2. **组件复用**:共享组件库提升开发效率
|
||||
3. **微前端支持**:可扩展至微前端架构
|
||||
4. **多应用管理**:Monorepo 结构便于多系统协同开发
|
||||
|
||||
|
||||
@ -26,6 +26,7 @@ interface IBoxBrandListProps {
|
||||
mode?: ModeType;
|
||||
trigger?: () => React.ReactNode;
|
||||
onSelect?: (value: BusinessAPI.BoxBrandVO) => void;
|
||||
brandType?: BusinessAPI.BoxBrandVO['type'] | 'ALL';
|
||||
}
|
||||
export default function BoxBrandList(props: IBoxBrandListProps) {
|
||||
const {
|
||||
@ -36,12 +37,21 @@ export default function BoxBrandList(props: IBoxBrandListProps) {
|
||||
trigger,
|
||||
onValueChange,
|
||||
onSelect,
|
||||
brandType = 'ALL',
|
||||
} = props;
|
||||
const intl = useIntl();
|
||||
const intlPrefix = 'boxBrand';
|
||||
const actionRef = useRef<ActionType>();
|
||||
|
||||
const columns: ProColumns<BusinessAPI.BoxBrandVO, BizValueType>[] = [
|
||||
{
|
||||
title: intl.formatMessage({ id: intlPrefix + '.column.image' }),
|
||||
dataIndex: 'image',
|
||||
key: 'image',
|
||||
render: (_, boxBrand) => (
|
||||
<Image width={80} alt={boxBrand.name} src={boxBrand.image} />
|
||||
),
|
||||
},
|
||||
{
|
||||
title: intl.formatMessage({ id: intlPrefix + '.column.name' }),
|
||||
dataIndex: 'name',
|
||||
@ -67,6 +77,7 @@ export default function BoxBrandList(props: IBoxBrandListProps) {
|
||||
};
|
||||
|
||||
const formContext = [
|
||||
<ProFormText key={'type'} hidden={true} name={'type'} />,
|
||||
<ProFormText
|
||||
key={'name'}
|
||||
name={'name'}
|
||||
@ -160,6 +171,28 @@ export default function BoxBrandList(props: IBoxBrandListProps) {
|
||||
mode: 'editor',
|
||||
}}
|
||||
status
|
||||
drag={{
|
||||
fieldProps: {
|
||||
bordered: true,
|
||||
//@ts-ignore
|
||||
search,
|
||||
onRow: (data) => ({
|
||||
onClick: () => {
|
||||
onSelect?.(data);
|
||||
},
|
||||
}),
|
||||
|
||||
columnsState: {
|
||||
defaultValue: {
|
||||
option: { show: true },
|
||||
status: { show: true },
|
||||
remark: { show: false },
|
||||
createdAt: { show: false },
|
||||
},
|
||||
},
|
||||
},
|
||||
columns,
|
||||
}}
|
||||
list={{
|
||||
fieldProps: {
|
||||
bordered: true,
|
||||
@ -168,6 +201,11 @@ export default function BoxBrandList(props: IBoxBrandListProps) {
|
||||
pagination: false,
|
||||
itemLayout: 'vertical',
|
||||
showActions: 'hover',
|
||||
params: {
|
||||
...(brandType !== 'ALL' && {
|
||||
type: brandType,
|
||||
}),
|
||||
},
|
||||
onItem: (record: any) => {
|
||||
return {
|
||||
onClick: (e) => {
|
||||
|
||||
@ -15,7 +15,7 @@ import {
|
||||
ProFormText,
|
||||
} from '@ant-design/pro-components';
|
||||
import { ProDescriptionsItemProps } from '@ant-design/pro-descriptions';
|
||||
import { Col, Row } from 'antd';
|
||||
import { Button, Col, Row } from 'antd';
|
||||
import React, { useState } from 'react';
|
||||
|
||||
interface IBoxProductListProps {
|
||||
@ -31,7 +31,7 @@ export default function BoxProductList(props: IBoxProductListProps) {
|
||||
ghost = false,
|
||||
productId,
|
||||
search = true,
|
||||
mode = 'page',
|
||||
mode = 'drag',
|
||||
trigger,
|
||||
onValueChange,
|
||||
} = props;
|
||||
@ -42,6 +42,9 @@ export default function BoxProductList(props: IBoxProductListProps) {
|
||||
BusinessAPI.BoxProductVO['specType'] | undefined | 'ALL'
|
||||
>();
|
||||
const [boxBrand, setBoxBrand] = useState<BusinessAPI.BoxBrandVO>();
|
||||
const [type, setType] = useState<
|
||||
BusinessAPI.BoxBrandVO['type'] | undefined | 'ALL'
|
||||
>('OUR_BOX');
|
||||
|
||||
const columns: ProColumns<BusinessAPI.BoxProductVO, BizValueType>[] = [
|
||||
{
|
||||
@ -93,6 +96,7 @@ export default function BoxProductList(props: IBoxProductListProps) {
|
||||
|
||||
const formContext = [
|
||||
<ProFormText key={'brandId'} name={'brandId'} hidden={true} />,
|
||||
<ProFormText key={'type'} name={'type'} hidden={true} />,
|
||||
<ProFormText
|
||||
key={'name'}
|
||||
name={'name'}
|
||||
@ -221,22 +225,51 @@ export default function BoxProductList(props: IBoxProductListProps) {
|
||||
intlPrefix={intlPrefix}
|
||||
modeType={mode}
|
||||
onValueChange={onValueChange}
|
||||
container={{}}
|
||||
container={{
|
||||
fieldProps: {
|
||||
tabActiveKey: type,
|
||||
onTabChange: (key) => {
|
||||
setActiveKey('ALL');
|
||||
setBoxBrand(undefined);
|
||||
setType(key as BusinessAPI.BoxBrandVO['type']);
|
||||
},
|
||||
tabList: [
|
||||
{
|
||||
key: 'OUR_BOX',
|
||||
tab: intl.formatMessage({
|
||||
id: intlPrefix + '.type.ourBox',
|
||||
}),
|
||||
},
|
||||
{
|
||||
key: 'FARMER_BOX',
|
||||
tab: intl.formatMessage({
|
||||
id: intlPrefix + '.type.farmerBox',
|
||||
}),
|
||||
},
|
||||
{
|
||||
key: 'THIRD_PARTY_BOX',
|
||||
tab: intl.formatMessage({
|
||||
id: intlPrefix + '.type.thirdPartyBox',
|
||||
}),
|
||||
},
|
||||
],
|
||||
},
|
||||
}}
|
||||
remark={{
|
||||
mode: 'editor',
|
||||
}}
|
||||
status
|
||||
page={{
|
||||
drag={{
|
||||
fieldProps: {
|
||||
tableRender: (_, defaultDom) => (
|
||||
<Row gutter={16}>
|
||||
<Col xs={24} sm={24} md={24} lg={10} xl={8} xxl={6}>
|
||||
<BoxBrandList
|
||||
mode={'list'}
|
||||
mode={'drag'}
|
||||
ghost={true}
|
||||
search={false}
|
||||
brandType={type}
|
||||
onSelect={(boxBrand: BusinessAPI.BoxBrandVO) => {
|
||||
console.log('boxBrand', boxBrand);
|
||||
setBoxBrand(boxBrand);
|
||||
}}
|
||||
/>
|
||||
@ -262,6 +295,7 @@ export default function BoxProductList(props: IBoxProductListProps) {
|
||||
ghost={true}
|
||||
search={false}
|
||||
/>
|
||||
|
||||
</div>
|
||||
</ProCard>
|
||||
</Col>
|
||||
@ -276,8 +310,10 @@ export default function BoxProductList(props: IBoxProductListProps) {
|
||||
...(activeKey !== 'ALL' && {
|
||||
specType: activeKey!,
|
||||
}),
|
||||
...(boxBrand && {
|
||||
brandId: boxBrand?.brandId,
|
||||
//@ts-ignore
|
||||
brandId: boxBrand?.brandId || 0,
|
||||
...(type !== 'ALL' && {
|
||||
type: type,
|
||||
}),
|
||||
},
|
||||
toolbar: {
|
||||
@ -319,6 +355,7 @@ export default function BoxProductList(props: IBoxProductListProps) {
|
||||
formContext,
|
||||
initValues: {
|
||||
brandId: boxBrand?.brandId,
|
||||
type: type,
|
||||
},
|
||||
}}
|
||||
update={{
|
||||
|
||||
@ -23,7 +23,7 @@ export default function ExcipientList(props: IExcipientListProps) {
|
||||
ghost = false,
|
||||
itemId,
|
||||
search = true,
|
||||
mode = 'page',
|
||||
mode = 'drag',
|
||||
trigger,
|
||||
onValueChange,
|
||||
} = props;
|
||||
@ -173,7 +173,7 @@ export default function ExcipientList(props: IExcipientListProps) {
|
||||
mode: 'editor',
|
||||
}}
|
||||
status
|
||||
page={{
|
||||
drag={{
|
||||
fieldProps: {
|
||||
bordered: true,
|
||||
ghost,
|
||||
|
||||
@ -23,7 +23,7 @@ export default function ExcipientList(props: IExcipientListProps) {
|
||||
ghost = false,
|
||||
itemId,
|
||||
search = true,
|
||||
mode = 'page',
|
||||
mode = 'drag',
|
||||
trigger,
|
||||
onValueChange,
|
||||
} = props;
|
||||
@ -173,7 +173,7 @@ export default function ExcipientList(props: IExcipientListProps) {
|
||||
mode: 'editor',
|
||||
}}
|
||||
status
|
||||
page={{
|
||||
drag={{
|
||||
fieldProps: {
|
||||
bordered: true,
|
||||
ghost,
|
||||
|
||||
@ -37,7 +37,7 @@ import {
|
||||
} from '@ant-design/pro-components';
|
||||
import { Avatar, Button, message, Space, Switch, Tour, TourProps } from 'antd';
|
||||
import { Dayjs } from 'dayjs';
|
||||
import {
|
||||
import React, {
|
||||
useContext,
|
||||
useEffect,
|
||||
useImperativeHandle,
|
||||
@ -828,7 +828,7 @@ export default function BizContainer<
|
||||
return <DealerFormItem {...props} {...props?.fieldProps} />;
|
||||
},
|
||||
render: (dealerVO: BusinessAPI.DealerVO) => {
|
||||
console.log("dealerVO", dealerVO)
|
||||
console.log('dealerVO', dealerVO);
|
||||
return (
|
||||
dealerVO && (
|
||||
<DealerList
|
||||
|
||||
@ -34,7 +34,7 @@ export default function BizDrag<
|
||||
persistenceType: 'sessionStorage',
|
||||
persistenceKey: method + 'ColumnStateKey',
|
||||
defaultValue: {
|
||||
// option: { show: true, fixed: 'right' },
|
||||
...fieldProps?.columnsState?.defaultValue
|
||||
},
|
||||
},
|
||||
dragSortKey: 'sort',
|
||||
|
||||
@ -6,15 +6,11 @@ import {
|
||||
} from '@/components';
|
||||
import { business } from '@/services';
|
||||
import { useIntl } from '@@/exports';
|
||||
import {
|
||||
CheckCard,
|
||||
ProColumns,
|
||||
ProFormItem,
|
||||
ProFormText,
|
||||
} from '@ant-design/pro-components';
|
||||
import { ProColumns, ProFormText } from '@ant-design/pro-components';
|
||||
import { ProDescriptionsItemProps } from '@ant-design/pro-descriptions';
|
||||
import { Col } from 'antd';
|
||||
import React from 'react';
|
||||
import { formatParam } from '@/utils/formatParam';
|
||||
import { ProFormUploadMaterial } from '@chageable/components';
|
||||
|
||||
interface ICompanyListProps {
|
||||
ghost?: boolean;
|
||||
@ -38,9 +34,22 @@ export default function CompanyList(props: ICompanyListProps) {
|
||||
|
||||
const columns: ProColumns<BusinessAPI.CompanyVO, BizValueType>[] = [
|
||||
{
|
||||
title: intl.formatMessage({ id: intlPrefix + '.column.name' }),
|
||||
dataIndex: 'name',
|
||||
key: 'name',
|
||||
title: intl.formatMessage({ id: intlPrefix + '.column.logo' }),
|
||||
dataIndex: 'logo',
|
||||
key: 'logo',
|
||||
valueType: 'image',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: intl.formatMessage({ id: intlPrefix + '.column.shortName' }),
|
||||
dataIndex: 'shortName',
|
||||
key: 'shortName',
|
||||
renderText: (text: string) => <span className="font-medium">{text}</span>,
|
||||
},
|
||||
{
|
||||
title: intl.formatMessage({ id: intlPrefix + '.column.fullName' }),
|
||||
dataIndex: 'fullName',
|
||||
key: 'fullName',
|
||||
renderText: (text: string) => <span className="font-medium">{text}</span>,
|
||||
},
|
||||
{
|
||||
@ -73,19 +82,70 @@ export default function CompanyList(props: ICompanyListProps) {
|
||||
];
|
||||
|
||||
const formContext = [
|
||||
<ProFormUploadMaterial
|
||||
key={'logo'}
|
||||
name={'logoList'}
|
||||
label={intl.formatMessage({ id: intlPrefix + '.form.logo.label' })}
|
||||
placeholder={intl.formatMessage({
|
||||
id: intlPrefix + '.form.logo.placeholder',
|
||||
})}
|
||||
transform={(value) => {
|
||||
console.log('transform', value);
|
||||
return {
|
||||
logoList: value,
|
||||
logo: value[0],
|
||||
};
|
||||
}}
|
||||
fieldProps={{
|
||||
maxCount: 1,
|
||||
request: async (params, sorter, filter) => {
|
||||
const { data, success, totalCount } =
|
||||
await business.material.pageMaterial({
|
||||
materialPageQry: formatParam<typeof params>(
|
||||
params,
|
||||
sorter,
|
||||
filter,
|
||||
),
|
||||
});
|
||||
|
||||
return {
|
||||
data: data || [],
|
||||
total: totalCount,
|
||||
success,
|
||||
};
|
||||
},
|
||||
}}
|
||||
/>,
|
||||
<ProFormText
|
||||
key={'name'}
|
||||
name={'name'}
|
||||
label={intl.formatMessage({ id: intlPrefix + '.form.name.label' })}
|
||||
key={'shortName'}
|
||||
name={'shortName'}
|
||||
label={intl.formatMessage({ id: intlPrefix + '.form.shortName.label' })}
|
||||
required={true}
|
||||
placeholder={intl.formatMessage({
|
||||
id: intlPrefix + '.form.name.placeholder',
|
||||
id: intlPrefix + '.form.shortName.placeholder',
|
||||
})}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({
|
||||
id: intlPrefix + '.form.name.required',
|
||||
id: intlPrefix + '.form.shortName.required',
|
||||
}),
|
||||
},
|
||||
]}
|
||||
/>,
|
||||
<ProFormText
|
||||
key={'fullName'}
|
||||
name={'fullName'}
|
||||
label={intl.formatMessage({ id: intlPrefix + '.form.fullName.label' })}
|
||||
required={true}
|
||||
placeholder={intl.formatMessage({
|
||||
id: intlPrefix + '.form.fullName.placeholder',
|
||||
})}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({
|
||||
id: intlPrefix + '.form.fullName.required',
|
||||
}),
|
||||
},
|
||||
]}
|
||||
@ -104,13 +164,15 @@ export default function CompanyList(props: ICompanyListProps) {
|
||||
message: intl.formatMessage({
|
||||
id: intlPrefix + '.form.taxNumber.required',
|
||||
}),
|
||||
}
|
||||
},
|
||||
]}
|
||||
/>,
|
||||
<ProFormText
|
||||
key={'contactPerson'}
|
||||
name={'contactPerson'}
|
||||
label={intl.formatMessage({ id: intlPrefix + '.form.contactPerson.label' })}
|
||||
label={intl.formatMessage({
|
||||
id: intlPrefix + '.form.contactPerson.label',
|
||||
})}
|
||||
required={true}
|
||||
placeholder={intl.formatMessage({
|
||||
id: intlPrefix + '.form.contactPerson.placeholder',
|
||||
@ -121,7 +183,7 @@ export default function CompanyList(props: ICompanyListProps) {
|
||||
message: intl.formatMessage({
|
||||
id: intlPrefix + '.form.contactPerson.required',
|
||||
}),
|
||||
}
|
||||
},
|
||||
]}
|
||||
tooltip={intl.formatMessage({
|
||||
id: intlPrefix + '.form.contactPerson.tooltip',
|
||||
@ -130,7 +192,9 @@ export default function CompanyList(props: ICompanyListProps) {
|
||||
<ProFormText
|
||||
key={'contactPhone'}
|
||||
name={'contactPhone'}
|
||||
label={intl.formatMessage({ id: intlPrefix + '.form.contactPhone.label' })}
|
||||
label={intl.formatMessage({
|
||||
id: intlPrefix + '.form.contactPhone.label',
|
||||
})}
|
||||
required={true}
|
||||
placeholder={intl.formatMessage({
|
||||
id: intlPrefix + '.form.contactPhone.placeholder',
|
||||
@ -141,7 +205,7 @@ export default function CompanyList(props: ICompanyListProps) {
|
||||
message: intl.formatMessage({
|
||||
id: intlPrefix + '.form.contactPhone.required',
|
||||
}),
|
||||
}
|
||||
},
|
||||
]}
|
||||
tooltip={intl.formatMessage({
|
||||
id: intlPrefix + '.form.contactPhone.tooltip',
|
||||
@ -161,7 +225,7 @@ export default function CompanyList(props: ICompanyListProps) {
|
||||
message: intl.formatMessage({
|
||||
id: intlPrefix + '.form.address.required',
|
||||
}),
|
||||
}
|
||||
},
|
||||
]}
|
||||
tooltip={intl.formatMessage({
|
||||
id: intlPrefix + '.form.address.tooltip',
|
||||
@ -231,7 +295,7 @@ export default function CompanyList(props: ICompanyListProps) {
|
||||
formType: 'drawer',
|
||||
formContext,
|
||||
initValues: {
|
||||
status: true
|
||||
status: true,
|
||||
},
|
||||
}}
|
||||
update={{
|
||||
|
||||
@ -8,16 +8,17 @@ import {
|
||||
} from '@/components';
|
||||
import { business } from '@/services';
|
||||
import { useIntl } from '@@/exports';
|
||||
import { CheckCircleOutlined, CloseCircleOutlined } from '@ant-design/icons';
|
||||
import {
|
||||
ProColumns,
|
||||
ProFormCheckbox,
|
||||
ProFormDependency,
|
||||
ProFormDigit,
|
||||
ProFormRadio,
|
||||
ProFormSwitch,
|
||||
ProFormText,
|
||||
} from '@ant-design/pro-components';
|
||||
import { ProDescriptionsItemProps } from '@ant-design/pro-descriptions';
|
||||
import { CheckCircleOutlined, CloseCircleOutlined } from '@ant-design/icons';
|
||||
import { Tooltip } from 'antd';
|
||||
import React from 'react';
|
||||
|
||||
@ -34,7 +35,7 @@ export default function DealerList(props: IDealerListProps) {
|
||||
ghost = false,
|
||||
dealerId,
|
||||
search = true,
|
||||
mode = 'page',
|
||||
mode = 'drag',
|
||||
trigger,
|
||||
onValueChange,
|
||||
} = props;
|
||||
@ -169,6 +170,66 @@ export default function DealerList(props: IDealerListProps) {
|
||||
</span>
|
||||
),
|
||||
},
|
||||
// 新增字段展示 - 计提税金
|
||||
{
|
||||
title: (
|
||||
<Tooltip
|
||||
title={intl.formatMessage({
|
||||
id: intlPrefix + '.column.enableAccrualTax.tooltip',
|
||||
})}
|
||||
>
|
||||
<span>
|
||||
{intl.formatMessage({ id: intlPrefix + '.column.enableAccrualTax' })}
|
||||
</span>
|
||||
</Tooltip>
|
||||
),
|
||||
dataIndex: 'accrualTaxRatio',
|
||||
key: 'accrualTaxRatio',
|
||||
search: false,
|
||||
render: (_, record) => (
|
||||
<span>
|
||||
{record.enableAccrualTax ? (
|
||||
<CheckCircleOutlined style={{ color: '#52c41a' }} />
|
||||
) : (
|
||||
<CloseCircleOutlined style={{ color: '#ff4d4f' }} />
|
||||
)}
|
||||
{record.enableAccrualTax && record.accrualTaxRatio
|
||||
? ` ${record.accrualTaxRatio}%`
|
||||
: ''}
|
||||
</span>
|
||||
),
|
||||
},
|
||||
// 新增字段展示 - 公司返点
|
||||
{
|
||||
title: (
|
||||
<Tooltip
|
||||
title={intl.formatMessage({
|
||||
id: intlPrefix + '.column.enableCompanyRebate.tooltip',
|
||||
})}
|
||||
>
|
||||
<span>
|
||||
{intl.formatMessage({
|
||||
id: intlPrefix + '.column.enableCompanyRebate',
|
||||
})}
|
||||
</span>
|
||||
</Tooltip>
|
||||
),
|
||||
dataIndex: 'companyRebateRatio',
|
||||
key: 'enableCompanyRebate',
|
||||
search: false,
|
||||
render: (_, record) => (
|
||||
<span>
|
||||
{record.enableCompanyRebate ? (
|
||||
<CheckCircleOutlined style={{ color: '#52c41a' }} />
|
||||
) : (
|
||||
<CloseCircleOutlined style={{ color: '#ff4d4f' }} />
|
||||
)}
|
||||
{record.enableCompanyRebate && record.companyRebateRatio
|
||||
? ` ${record.companyRebateRatio}%`
|
||||
: ''}
|
||||
</span>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: intl.formatMessage({ id: intlPrefix + '.column.documentTypes' }),
|
||||
dataIndex: 'documentTypes',
|
||||
@ -252,15 +313,22 @@ export default function DealerList(props: IDealerListProps) {
|
||||
unCheckedChildren: intl.formatMessage({ id: 'common.no' }),
|
||||
}}
|
||||
/>,
|
||||
<ProFormDependency key={'enableShare'} name={['enableShare']}>
|
||||
{({ enableShare }) => {
|
||||
return (
|
||||
enableShare && (
|
||||
<ProFormDigit
|
||||
key={'shareRatio'}
|
||||
name={'shareRatio'}
|
||||
label={intl.formatMessage({ id: intlPrefix + '.form.shareRatio.label' })}
|
||||
label={intl.formatMessage({
|
||||
id: intlPrefix + '.form.shareRatio.label',
|
||||
})}
|
||||
fieldProps={{
|
||||
precision: 2,
|
||||
step: 0.01,
|
||||
min: 0,
|
||||
max: 100,
|
||||
suffix: '%',
|
||||
}}
|
||||
placeholder={intl.formatMessage({
|
||||
id: intlPrefix + '.form.shareRatio.placeholder',
|
||||
@ -274,7 +342,11 @@ export default function DealerList(props: IDealerListProps) {
|
||||
}),
|
||||
},
|
||||
]}
|
||||
/>,
|
||||
/>
|
||||
)
|
||||
);
|
||||
}}
|
||||
</ProFormDependency>,
|
||||
<ProFormSwitch
|
||||
key={'freightCostFlag'}
|
||||
name={'freightCostFlag'}
|
||||
@ -308,6 +380,101 @@ export default function DealerList(props: IDealerListProps) {
|
||||
unCheckedChildren: intl.formatMessage({ id: 'common.no' }),
|
||||
}}
|
||||
/>,
|
||||
// 新增字段表单 - 计提税金
|
||||
<ProFormSwitch
|
||||
key={'enableAccrualTax'}
|
||||
name={'enableAccrualTax'}
|
||||
label={intl.formatMessage({
|
||||
id: intlPrefix + '.form.enableAccrualTax.label',
|
||||
})}
|
||||
fieldProps={{
|
||||
checkedChildren: intl.formatMessage({ id: 'common.yes' }),
|
||||
unCheckedChildren: intl.formatMessage({ id: 'common.no' }),
|
||||
}}
|
||||
/>,
|
||||
<ProFormDependency key={'enableAccrualTax'} name={['enableAccrualTax']}>
|
||||
{({ enableAccrualTax }) => {
|
||||
return (
|
||||
enableAccrualTax && (
|
||||
<ProFormDigit
|
||||
key={'accrualTaxRatio'}
|
||||
name={'accrualTaxRatio'}
|
||||
label={intl.formatMessage({
|
||||
id: intlPrefix + '.form.accrualTaxRatio.label',
|
||||
})}
|
||||
fieldProps={{
|
||||
precision: 2,
|
||||
step: 0.01,
|
||||
min: 0,
|
||||
max: 100,
|
||||
suffix: '%',
|
||||
}}
|
||||
placeholder={intl.formatMessage({
|
||||
id: intlPrefix + '.form.accrualTaxRatio.placeholder',
|
||||
})}
|
||||
dependencies={['enableAccrualTax']}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({
|
||||
id: intlPrefix + '.form.accrualTaxRatio.required',
|
||||
}),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
)
|
||||
);
|
||||
}}
|
||||
</ProFormDependency>,
|
||||
// 新增字段表单 - 公司返点
|
||||
<ProFormSwitch
|
||||
key={'enableCompanyRebate'}
|
||||
name={'enableCompanyRebate'}
|
||||
label={intl.formatMessage({
|
||||
id: intlPrefix + '.form.enableCompanyRebate.label',
|
||||
})}
|
||||
fieldProps={{
|
||||
checkedChildren: intl.formatMessage({ id: 'common.yes' }),
|
||||
unCheckedChildren: intl.formatMessage({ id: 'common.no' }),
|
||||
}}
|
||||
/>,
|
||||
<ProFormDependency
|
||||
key={'enableCompanyRebate'}
|
||||
name={['enableCompanyRebate']}
|
||||
>
|
||||
{({ enableCompanyRebate }) => {
|
||||
return (
|
||||
enableCompanyRebate && (
|
||||
<ProFormDigit
|
||||
key={'companyRebateRatio'}
|
||||
name={'companyRebateRatio'}
|
||||
label={intl.formatMessage({
|
||||
id: intlPrefix + '.form.companyRebateRatio.label',
|
||||
})}
|
||||
fieldProps={{
|
||||
precision: 2,
|
||||
step: 0.01,
|
||||
min: 0,
|
||||
max: 100,
|
||||
suffix: '%',
|
||||
}}
|
||||
placeholder={intl.formatMessage({
|
||||
id: intlPrefix + '.form.companyRebateRatio.placeholder',
|
||||
})}
|
||||
dependencies={['enableCompanyRebate']}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
message: intl.formatMessage({
|
||||
id: intlPrefix + '.form.companyRebateRatio.required',
|
||||
}),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
)
|
||||
);
|
||||
}}
|
||||
</ProFormDependency>,
|
||||
<ProFormCheckbox.Group
|
||||
key={'documentTypesList'}
|
||||
name={'documentTypesList'}
|
||||
@ -335,7 +502,6 @@ export default function DealerList(props: IDealerListProps) {
|
||||
},
|
||||
]}
|
||||
transform={(value) => {
|
||||
console.log('value1', value);
|
||||
return {
|
||||
documentTypesList: value,
|
||||
documentTypes: (value || []).join(','),
|
||||
@ -407,7 +573,7 @@ export default function DealerList(props: IDealerListProps) {
|
||||
mode: 'editor',
|
||||
}}
|
||||
status
|
||||
page={{
|
||||
drag={{
|
||||
fieldProps: {
|
||||
bordered: true,
|
||||
ghost,
|
||||
|
||||
@ -187,9 +187,6 @@ const EmployeeList: React.FC = (props: IEmployeeListProps) => {
|
||||
}}
|
||||
fieldProps={{
|
||||
maxCount: 1,
|
||||
onChange: (fileList) => {
|
||||
console.log('onChange', fileList);
|
||||
},
|
||||
request: async (params, sorter, filter) => {
|
||||
const { data, success, totalCount } =
|
||||
await business.material.pageMaterial({
|
||||
|
||||
@ -688,7 +688,7 @@ export default {
|
||||
receivable: '应收金额',
|
||||
share: '分成设置',
|
||||
enableShare: '分成',
|
||||
'enableShare.tooltip': '是否开启诚信志远分成',
|
||||
'enableShare.tooltip': '是否开启调诚信志远分红比例',
|
||||
shareRatio: '分成比例',
|
||||
shareRatioTitle: '分成',
|
||||
freightCostFlag: '运费成本',
|
||||
@ -697,6 +697,12 @@ export default {
|
||||
'strawMatCostFlag.tooltip': '草帘是否作为成本',
|
||||
includePackingFlag: '含包装费',
|
||||
'includePackingFlag.tooltip': '发货单合计金额是否含包装费',
|
||||
enableAccrualTax: '计提税金',
|
||||
'enableAccrualTax.tooltip': '是否开启计提税金',
|
||||
accrualTaxRatio: '计提税金比例',
|
||||
enableCompanyRebate: '公司返点',
|
||||
'enableCompanyRebate.tooltip': '是否开启公司返点',
|
||||
companyRebateRatio: '公司返点比例',
|
||||
documentTypes: '单据类型',
|
||||
remark: '备注',
|
||||
status: '状态',
|
||||
@ -740,6 +746,20 @@ export default {
|
||||
placeholder: '请选择发货单合计金额是否含包装费',
|
||||
required: '请选择发货单合计金额是否含包装费',
|
||||
},
|
||||
enableAccrualTax: {
|
||||
label: '是否开启计提税金',
|
||||
},
|
||||
accrualTaxRatio: {
|
||||
label: '计提税金比例',
|
||||
placeholder: '请输入计提税金比例',
|
||||
},
|
||||
enableCompanyRebate: {
|
||||
label: '是否开启公司返点',
|
||||
},
|
||||
companyRebateRatio: {
|
||||
label: '公司返点比例',
|
||||
placeholder: '请输入公司返点比例',
|
||||
},
|
||||
documentTypes: {
|
||||
label: '单据类型',
|
||||
'enum.delivery': '发货单',
|
||||
@ -1227,6 +1247,12 @@ export default {
|
||||
twoGrain: '2粒装',
|
||||
fourGrain: '4粒装',
|
||||
},
|
||||
type: {
|
||||
all: '全部',
|
||||
ourBox: '自产箱',
|
||||
farmerBox: '农夫箱',
|
||||
thirdPartyBox: '第三方箱',
|
||||
},
|
||||
column: {
|
||||
name: '纸箱名称',
|
||||
weight: '重量(斤)',
|
||||
@ -1324,7 +1350,9 @@ export default {
|
||||
},
|
||||
company: {
|
||||
column: {
|
||||
name: '公司名称',
|
||||
shortName: '公司简称',
|
||||
fullName: '公司全称',
|
||||
logo: '公司logo',
|
||||
taxNumber: '税号',
|
||||
contactPerson: '联系人',
|
||||
contactPhone: '联系电话',
|
||||
@ -1338,10 +1366,20 @@ export default {
|
||||
option: '操作',
|
||||
},
|
||||
form: {
|
||||
name: {
|
||||
label: '公司名称',
|
||||
placeholder: '请输入公司名称',
|
||||
required: '公司名称为必填项',
|
||||
shortName: {
|
||||
label: '公司简称',
|
||||
placeholder: '请输入公司简称',
|
||||
required: '公司简称为必填项',
|
||||
},
|
||||
fullName: {
|
||||
label: '公司全称',
|
||||
placeholder: '请输入公司全称',
|
||||
required: '公司全称为必填项',
|
||||
},
|
||||
logo: {
|
||||
label: '公司logo',
|
||||
placeholder: '请上传公司logo',
|
||||
required: '公司logo为必填项',
|
||||
},
|
||||
taxNumber: {
|
||||
label: '税号',
|
||||
|
||||
@ -35,6 +35,36 @@ export async function destroyBoxBrand(
|
||||
});
|
||||
}
|
||||
|
||||
/** 纸箱品牌拖拽排序 PUT /operation/dragBoxBrand */
|
||||
export async function dragBoxBrand(
|
||||
body: BusinessAPI.BoxBrandDragCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>('/operation/dragBoxBrand', {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 纸箱品牌拖拽排序 PATCH /operation/dragBoxBrand */
|
||||
export async function dragBoxBrand1(
|
||||
body: BusinessAPI.BoxBrandDragCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>('/operation/dragBoxBrand', {
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 纸箱品牌列表 GET /operation/listBoxBrand */
|
||||
export async function listBoxBrand(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
|
||||
@ -35,6 +35,36 @@ export async function destroyBoxProduct(
|
||||
});
|
||||
}
|
||||
|
||||
/** 纸箱产品拖拽排序 PUT /operation/dragBoxProduct */
|
||||
export async function dragBoxProduct(
|
||||
body: BusinessAPI.BoxProductDragCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>('/operation/dragBoxProduct', {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 纸箱产品拖拽排序 PATCH /operation/dragBoxProduct */
|
||||
export async function dragBoxProduct1(
|
||||
body: BusinessAPI.BoxProductDragCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>('/operation/dragBoxProduct', {
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 纸箱产品列表 GET /operation/listBoxProduct */
|
||||
export async function listBoxProduct(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
|
||||
@ -35,6 +35,36 @@ export async function destroyCostItem(
|
||||
});
|
||||
}
|
||||
|
||||
/** 费用项目拖拽排序 PUT /operation/dragCostItem */
|
||||
export async function dragCostItem(
|
||||
body: BusinessAPI.CostItemDragCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>('/operation/dragCostItem', {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 费用项目拖拽排序 PATCH /operation/dragCostItem */
|
||||
export async function dragCostItem1(
|
||||
body: BusinessAPI.CostItemDragCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>('/operation/dragCostItem', {
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 费用项目列表 GET /operation/listCostItem */
|
||||
export async function listCostItem(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
|
||||
@ -35,6 +35,36 @@ export async function destroyDealer(
|
||||
});
|
||||
}
|
||||
|
||||
/** 经销商表拖拽排序 PUT /operation/dragDealer */
|
||||
export async function dragDealer(
|
||||
body: BusinessAPI.DealerDragCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>('/operation/dragDealer', {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 经销商表拖拽排序 PATCH /operation/dragDealer */
|
||||
export async function dragDealer1(
|
||||
body: BusinessAPI.DealerDragCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>('/operation/dragDealer', {
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 经销商表列表 GET /operation/listDealer */
|
||||
export async function listDealer(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
|
||||
@ -25,11 +25,13 @@ import * as platform from './platform';
|
||||
import * as purchaseOrder from './purchaseOrder';
|
||||
import * as role from './role';
|
||||
import * as setting from './setting';
|
||||
import * as shipOrder from './shipOrder';
|
||||
import * as supplier from './supplier';
|
||||
import * as user from './user';
|
||||
export default {
|
||||
user,
|
||||
supplier,
|
||||
shipOrder,
|
||||
setting,
|
||||
purchaseOrder,
|
||||
platform,
|
||||
|
||||
@ -17,6 +17,26 @@ export async function approvePurchaseOrder(
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取某个状态的数量 GET /operation/countPurchaseOrderByState */
|
||||
export async function countPurchaseOrderByState(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
params: BusinessAPI.countPurchaseOrderByStateParams,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.SingleResponseLong>(
|
||||
'/operation/countPurchaseOrderByState',
|
||||
{
|
||||
method: 'GET',
|
||||
params: {
|
||||
...params,
|
||||
purchaseOrderCountQry: undefined,
|
||||
...params['purchaseOrderCountQry'],
|
||||
},
|
||||
...(options || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** 创建采购订单(暂存) POST /operation/createPurchaseOrder */
|
||||
export async function createPurchaseOrder(
|
||||
body: BusinessAPI.PurchaseOrderCreateCmd,
|
||||
|
||||
168
packages/app-operation/src/services/business/shipOrder.ts
Normal file
168
packages/app-operation/src/services/business/shipOrder.ts
Normal file
@ -0,0 +1,168 @@
|
||||
// @ts-ignore
|
||||
/* eslint-disable */
|
||||
import request from '../request';
|
||||
|
||||
/** 创建发货单 POST /operation/createShipOrder */
|
||||
export async function createShipOrder(
|
||||
body: BusinessAPI.ShipOrderCreateCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.SingleResponseShipOrderVO>(
|
||||
'/operation/createShipOrder',
|
||||
{
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** 发货单删除 DELETE /operation/destroyShipOrder */
|
||||
export async function destroyShipOrder(
|
||||
body: BusinessAPI.ShipOrderDestroyCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>('/operation/destroyShipOrder', {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 发货单生成单据 PUT /operation/generateDocumentShipOrder */
|
||||
export async function generateDocumentShipOrder(
|
||||
body: BusinessAPI.ShipOrderGenerateDocumentCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>(
|
||||
'/operation/generateDocumentShipOrder',
|
||||
{
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** 发货单生成单据 PATCH /operation/generateDocumentShipOrder */
|
||||
export async function generateDocumentShipOrder1(
|
||||
body: BusinessAPI.ShipOrderGenerateDocumentCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>(
|
||||
'/operation/generateDocumentShipOrder',
|
||||
{
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** 发货单列表 GET /operation/listShipOrder */
|
||||
export async function listShipOrder(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
params: BusinessAPI.listShipOrderParams,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.MultiResponseShipOrderVO>(
|
||||
'/operation/listShipOrder',
|
||||
{
|
||||
method: 'GET',
|
||||
params: {
|
||||
...params,
|
||||
shipOrderListQry: undefined,
|
||||
...params['shipOrderListQry'],
|
||||
},
|
||||
...(options || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** 发货单列表 GET /operation/pageShipOrder */
|
||||
export async function pageShipOrder(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
params: BusinessAPI.pageShipOrderParams,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.PageResponseShipOrderVO>(
|
||||
'/operation/pageShipOrder',
|
||||
{
|
||||
method: 'GET',
|
||||
params: {
|
||||
...params,
|
||||
shipOrderPageQry: undefined,
|
||||
...params['shipOrderPageQry'],
|
||||
},
|
||||
...(options || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** 发货单详情 GET /operation/showShipOrder */
|
||||
export async function showShipOrder(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
params: BusinessAPI.showShipOrderParams,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.SingleResponseShipOrderVO>(
|
||||
'/operation/showShipOrder',
|
||||
{
|
||||
method: 'GET',
|
||||
params: {
|
||||
...params,
|
||||
shipOrderShowQry: undefined,
|
||||
...params['shipOrderShowQry'],
|
||||
},
|
||||
...(options || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** 发货单更新 PUT /operation/updateShipOrder */
|
||||
export async function updateShipOrder(
|
||||
body: BusinessAPI.ShipOrderUpdateCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.SingleResponseShipOrderVO>(
|
||||
'/operation/updateShipOrder',
|
||||
{
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** 发货单更新 PATCH /operation/updateShipOrder */
|
||||
export async function updateShipOrder1(
|
||||
body: BusinessAPI.ShipOrderUpdateCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.SingleResponseShipOrderVO>(
|
||||
'/operation/updateShipOrder',
|
||||
{
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
@ -2,6 +2,26 @@
|
||||
/* eslint-disable */
|
||||
import request from '../request';
|
||||
|
||||
/** 检查供应商 GET /operation/checkSupplier */
|
||||
export async function checkSupplier(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
params: BusinessAPI.checkSupplierParams,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.SingleResponseSupplierVO>(
|
||||
'/operation/checkSupplier',
|
||||
{
|
||||
method: 'GET',
|
||||
params: {
|
||||
...params,
|
||||
supplierCheckQry: undefined,
|
||||
...params['supplierCheckQry'],
|
||||
},
|
||||
...(options || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** 创建供应商 POST /operation/createSupplier */
|
||||
export async function createSupplier(
|
||||
body: BusinessAPI.SupplierCreateCmd,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user