提交 61c13052 作者: ZhangLingKun

Merge branch 'develop'

流水线 #7328 已通过 于阶段
in 1 分 24 秒
......@@ -14,4 +14,4 @@ patches:
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/admin
newTag: c7b06cfdc1ce7a6344f11547707084588c3930c9
newTag: f623fb1574d20d15c86e64df7e7cc7ac7e473a57
......@@ -43,7 +43,8 @@
"react-viewer": "^3.2.2",
"sort-by": "^1.2.0",
"wangeditor": "^4.7.15",
"xlsx": "^0.18.5"
"xlsx": "^0.18.5",
"big.js": "^6.2.1"
},
"devDependencies": {
"@types/file-saver": "^2.0.5",
......@@ -56,6 +57,7 @@
"@typescript-eslint/eslint-plugin": "^5.26.0",
"@typescript-eslint/parser": "^5.26.0",
"@vitejs/plugin-react": "^1.3.0",
"@types/big.js": "^6.2.2",
"eslint": "^8.16.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-import": "^2.26.0",
......
......@@ -26,6 +26,9 @@ dependencies:
axios:
specifier: ^1.4.0
version: registry.npmmirror.com/axios@1.4.0
big.js:
specifier: ^6.2.1
version: registry.npmmirror.com/big.js@6.2.1
dayjs:
specifier: ^1.11.7
version: registry.npmmirror.com/dayjs@1.11.7
......@@ -94,6 +97,9 @@ dependencies:
version: registry.npmmirror.com/xlsx@0.18.5
devDependencies:
'@types/big.js':
specifier: ^6.2.2
version: registry.npmmirror.com/@types/big.js@6.2.2
'@types/file-saver':
specifier: ^2.0.5
version: registry.npmmirror.com/@types/file-saver@2.0.5
......@@ -1161,6 +1167,12 @@ packages:
version: 0.0.7
dev: false
registry.npmmirror.com/@types/big.js@6.2.2:
resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/big.js/-/big.js-6.2.2.tgz}
name: '@types/big.js'
version: 6.2.2
dev: true
registry.npmmirror.com/@types/event-emitter@0.3.3:
resolution: {integrity: sha512-UfnOK1pIxO7P+EgPRZXD9jMpimd8QEFcEZ5R67R1UhGbv4zghU5+NE7U8M8G9H5Jc8FI51rqDWQs6FtUfq2e/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/event-emitter/-/event-emitter-0.3.3.tgz}
name: '@types/event-emitter'
......@@ -1983,6 +1995,12 @@ packages:
version: 1.0.2
dev: true
registry.npmmirror.com/big.js@6.2.1:
resolution: {integrity: sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/big.js/-/big.js-6.2.1.tgz}
name: big.js
version: 6.2.1
dev: false
registry.npmmirror.com/binary-extensions@2.2.0:
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz}
name: binary-extensions
......
......@@ -673,6 +673,8 @@ export type serviceOrderFormListType = InterItemFunction<
*/
serviceName?: string;
waiting: string;
fatherRequireId: number;
childrenRequire?: any[];
}[]
>;
// 需求订单-详情
......@@ -2191,3 +2193,35 @@ export type requirementsDetailPublishType = InterFunction<
fatherRequireId: number;
}
>;
// 后台管理——订单金额明细
export type getOrderAmountDetailsType = InterFunction<
{ requirementsInfoId: number },
{
dailyWage: number;
highTemperatureSubsidy: number;
id: number;
realWages: number;
rentalSubsidy: number;
requirementsInfoId: number;
settleAccountsProportion: number;
subsidyFestival: number;
trafficSubsidy: number;
workDate: string;
}[]
>;
// 后台订单——修改金额明细
export type updateOrderAmountDetailsType = InterFunction<
{
dailyWage: number;
highTemperatureSubsidy: number;
id?: number;
realWages: number;
rentalSubsidy: number;
requirementsInfoId: number;
settleAccountsProportion: number;
subsidyFestival: number;
trafficSubsidy: number;
workDate: string;
}[],
NonNullable<unknown>
>;
......@@ -44,6 +44,8 @@ import {
rentOrderDetailType,
rentPfConfirmOrderWareType,
requirementsDetailPublishType,
getOrderAmountDetailsType,
updateOrderAmountDetailsType,
} from '~/api/interface/orderManageType';
export class OrderManageAPI {
......@@ -181,4 +183,12 @@ export class OrderManageAPI {
// 小程序-详情——需求发布
static requirementsDetailPublish: requirementsDetailPublishType = (params) =>
axios.get('/release/requirements/detailPublish', { params });
// 后台管理——订单金额明细
static getOrderAmountDetails: getOrderAmountDetailsType = (params) =>
axios.get('/release/backRequirements/getOrderAmountDetails', { params });
// 后台订单——修改金额明细
static updateOrderAmountDetails: updateOrderAmountDetailsType = (params) =>
axios.post('/release/backRequirements/updateOrderAmountDetails', params);
}
import React, { useEffect, useState } from 'react';
import { Button, message, Table } from 'antd';
import {
getOrderAmountDetailsType,
serviceOrderFormDetailsType,
} from '~/api/interface/orderManageType';
import { InterDataType } from '~/api/interface';
import { ColumnsType } from 'antd/es/table/InternalTable';
import { PlusOutlined } from '@ant-design/icons';
import OrderSettleModal from '~/pages/orderManage/demandOrder/orderDetail/comp/orderSettleModal';
import { OrderManageAPI } from '~/api';
import dayjs from 'dayjs';
// 详情返回类型
type DetailType = InterDataType<serviceOrderFormDetailsType>;
// 列表类型
type ListType = InterDataType<getOrderAmountDetailsType>;
const OrderSettleView: React.FC<{ detail: DetailType; onRefresh: () => void }> = ({
detail,
onRefresh,
}) => {
// 表格列表
const [tableData, setTableData] = useState<ListType>([]);
// 新增弹窗是否开启
const [addEditVisible, setAddEditVisible] = useState<boolean>(false);
// 编辑文件
const [recordData, setRecordData] = useState<ListType[0]>();
// 获取列表数据
const getTableData = async () => {
const res = await OrderManageAPI.getOrderAmountDetails({
requirementsInfoId: detail?.serviceOrderFormDetailsDTO?.id,
});
if (res && res.code === '200') {
const list = res.result || [];
// console.log('获取列表数据 --->', getTableTotal(list));
setTableData(getTableTotal(list));
}
};
// 计算合计数据
const getTableTotal = (list: ListType) => {
// 如果一条数据都没有就返回一条默认数据
if (list?.length === 0)
return [
{
dailyWage: 0,
highTemperatureSubsidy: 0,
id: 0,
realWages: 0,
rentalSubsidy: 0,
requirementsInfoId: 0,
settleAccountsProportion: 0,
subsidyFestival: 0,
trafficSubsidy: 0,
workDate: '合计',
},
];
// 获取表格数据的列名
const keys = Object.keys(list?.[0] ?? {});
// 使用 reduce () 函数计算每一列的总和
const data = keys.reduce((acc, key) => {
// 将字符串转换为数字并累加
const total = list.reduce((sum, row: any) => sum + (+row[key] ?? 0), 0);
// 返回累加器对象
return { ...acc, [key]: total };
}, {});
// 返回结果对象
return [
...list,
{
...data,
workDate: '合计',
id: new Date().getTime(),
settleAccountsProportion: undefined,
},
] as ListType;
};
// 删除数据
const handleDelete = (record: ListType[0]) => {
// 至少需要一行数据
if (tableData.length === 2) {
message.warning('至少需要一行数据').then();
return;
}
// 删除数据并去掉最后一行合计数据
const list = tableData.filter((v) => v.id !== record.id).slice(0, -1);
// 重新计算合计数据
setTableData(getTableTotal(list));
};
// 添加数据
const handleAdd = (data: ListType[0]) => {
// 如果有id就是修改,否则就是添加
const list = data?.id
? tableData?.map((v) => (v.id === data.id ? data : v))?.slice(0, -1)
: [...tableData.slice(0, -1), { ...data, id: dayjs(data?.workDate).valueOf() }];
// 日期排序
const arr = list?.sort((a, b) => dayjs(a.workDate).valueOf() - dayjs(b.workDate).valueOf());
setTableData(getTableTotal(arr));
setAddEditVisible(false);
setRecordData(undefined);
// console.log('添加数据 --->', data);
};
// 提交数据
const handleSubmit = async () => {
const res = await OrderManageAPI.updateOrderAmountDetails(
tableData.slice(0, -1)?.map((i) => ({
...i,
requirementsInfoId: detail?.serviceOrderFormDetailsDTO?.id,
id: undefined,
})),
);
if (res && res.code === '200') {
message.success('操作成功');
await getTableData();
onRefresh();
}
};
// 组件挂载
useEffect(() => {
if (!detail) return;
getTableData().then();
// console.log('订单结算 --->', detail);
}, [detail]);
// 表格列
const columns: ColumnsType<ListType[0]> = [
{ title: '日期', dataIndex: 'workDate', align: 'center' },
{ title: '结算标准(元/天)', dataIndex: 'dailyWage', align: 'center' },
{ title: '节日补贴(元/天)', dataIndex: 'subsidyFestival', align: 'center' },
{ title: '出差租房补贴', dataIndex: 'rentalSubsidy', align: 'center' },
{ title: '交通补贴', dataIndex: 'trafficSubsidy', align: 'center' },
{ title: '高温补贴', dataIndex: 'highTemperatureSubsidy', align: 'center' },
{ title: '结算比例', dataIndex: 'settleAccountsProportion', align: 'center' },
{ title: '应结工资(元)', dataIndex: 'realWages', align: 'center' },
{
title: '操作',
dataIndex: 'action',
align: 'center',
render: (_value, record, index) =>
index !== tableData.length - 1 &&
detail?.serviceOrderFormDetailsDTO?.orderStatus === '400' && (
<>
<Button
type='link'
onClick={() => {
setRecordData(record);
setAddEditVisible(true);
}}
>
修改
</Button>
<Button type='link' danger onClick={() => handleDelete(record)}>
删除
</Button>
</>
),
},
];
return (
<>
<div className='order-settle'>
<div className='settle-title'>订单结算</div>
{detail?.serviceOrderFormDetailsDTO?.orderStatus === '400' && (
<Button
size='middle'
type='primary'
icon={<PlusOutlined />}
style={{ marginBottom: '10px' }}
onClick={() => setAddEditVisible(true)}
>
添加
</Button>
)}
<Table size='small' rowKey='id' bordered columns={columns} dataSource={tableData} />
{detail?.serviceOrderFormDetailsDTO?.orderStatus === '400' && (
<div className='settle-action'>
<Button size='middle' type='primary' onClick={handleSubmit}>
确认修改
</Button>
<Button size='middle' onClick={getTableData}>
重置
</Button>
</div>
)}
</div>
<OrderSettleModal
open={addEditVisible}
title={recordData ? '修改结算' : '添加结算'}
data={recordData}
list={tableData}
onCancel={() => {
setAddEditVisible(false);
setRecordData(undefined);
}}
onSubmit={handleAdd}
/>
</>
);
};
export default OrderSettleView;
import React, { useEffect } from 'react';
import { DatePicker, Form, InputNumber, message, Modal, ModalProps } from 'antd';
import { InterDataType } from '~/api/interface';
import { getOrderAmountDetailsType } from '~/api/interface/orderManageType';
import Big from 'big.js';
import dayjs from 'dayjs';
// 自定义参数类型
interface SelfProps {
data?: InterDataType<getOrderAmountDetailsType>[0];
onSubmit?: (data: InterDataType<getOrderAmountDetailsType>[0]) => void;
list?: InterDataType<getOrderAmountDetailsType>;
}
const OrderSettleModal: React.FC<ModalProps & SelfProps> = ({
open,
title,
onCancel,
data,
onSubmit,
list,
}) => {
// 表单钩子
const [editForm] = Form.useForm();
// 关闭事件
const handleCancel = () => {
editForm.resetFields();
onCancel?.({} as any);
};
// 表单值改变事件
const handleChange = () => {
// 计算其他金额的总和
const money = Object.values({
...editForm.getFieldsValue(),
realWages: 0,
workDate: 0,
settleAccountsProportion: 0,
})?.reduce(
(a: number, b: any) =>
Big(a || 0)
.add(Big(b || 0))
.toNumber(),
0,
);
// 最后乘以结算比例
const total = Big(money || 0)
.mul(Big(editForm.getFieldValue('settleAccountsProportion') || 0))
.toNumber();
editForm?.setFieldValue('realWages', total);
};
// 提交事件
const handleSubmit = async () => {
const valid = await editForm.validateFields();
if (!valid) return;
// 判断是否有相同的日期
const has = list?.some((v) => dayjs(v.workDate).isSame(valid.workDate, 'day'));
if (has && !data?.id) {
message.warning('已存在相同的日期').then();
return;
}
// 判断当日工资是否为0
if (valid.realWages === 0) {
message.warning('当日工资不能为0').then();
return;
}
onSubmit?.({
...data,
...valid,
workDate: dayjs(valid.workDate).format('YYYY-MM-DD'),
});
editForm.resetFields();
// console.log('提交事件 --->', valid);
};
// 组件挂载
useEffect(() => {
if (!data) return;
editForm.setFieldsValue({
...data,
workDate: data?.workDate ? dayjs(data?.workDate) : undefined,
});
}, [data]);
return (
<Modal open={open} onCancel={handleCancel} title={title} onOk={handleSubmit}>
<Form
labelCol={{ span: 5 }}
wrapperCol={{ span: 12 }}
form={editForm}
autoComplete={'off'}
onChange={handleChange}
>
<Form.Item
label='结算日期'
name='workDate'
rules={[{ required: true, message: '请输入日期' }]}
>
<DatePicker allowClear placeholder='请选择结算日期' style={{ width: '100%' }} />
</Form.Item>
<Form.Item
label='结算标准(元/天)'
name='dailyWage'
rules={[
{ required: true, message: '请输入结算标准(元/天)' },
// 最多两位小数
{ pattern: /^(\d+)?(?:\.\d{1,2})?$/, message: '最多两位小数' },
]}
initialValue={0}
>
<InputNumber
placeholder='请输入结算标准(元/天)'
maxLength={25}
min={0}
max={999999999}
style={{ width: '100%' }}
/>
</Form.Item>
<Form.Item
label='节日补贴(元/天)'
name='subsidyFestival'
rules={[
{ required: true, message: '请输入节日补贴(元/天)' },
// 最多两位小数
{ pattern: /^(\d+)?(?:\.\d{1,2})?$/, message: '最多两位小数' },
]}
initialValue={0}
>
<InputNumber
placeholder='请输入节日补贴(元/天)'
maxLength={25}
min={0}
max={999999999}
style={{ width: '100%' }}
/>
</Form.Item>
<Form.Item
label='出差租房补贴'
name='rentalSubsidy'
rules={[
{ required: true, message: '请输入出差租房补贴' },
// 最多两位小数
{ pattern: /^(\d+)?(?:\.\d{1,2})?$/, message: '最多两位小数' },
]}
initialValue={0}
>
<InputNumber
placeholder='请输入出差租房补贴'
maxLength={25}
min={0}
max={999999999}
style={{ width: '100%' }}
/>
</Form.Item>
<Form.Item
label='交通补贴'
name='trafficSubsidy'
rules={[
{ required: true, message: '请输入交通补贴' },
// 最多两位小数
{ pattern: /^(\d+)?(?:\.\d{1,2})?$/, message: '最多两位小数' },
]}
initialValue={0}
>
<InputNumber
placeholder='请输入交通补贴'
maxLength={25}
min={0}
max={999999999}
style={{ width: '100%' }}
/>
</Form.Item>
<Form.Item
label='高温补贴'
name='highTemperatureSubsidy'
rules={[
{ required: true, message: '请输入高温补贴' },
// 最多两位小数
{ pattern: /^(\d+)?(?:\.\d{1,2})?$/, message: '最多两位小数' },
]}
initialValue={0}
>
<InputNumber
placeholder='请输入高温补贴'
maxLength={25}
min={0}
max={999999999}
style={{ width: '100%' }}
/>
</Form.Item>
<Form.Item
label='结算比例'
name='settleAccountsProportion'
rules={[
{ required: true, message: '请输入结算比例' },
// 最多两位小数
{ pattern: /^(\d+)?(?:\.\d{1,2})?$/, message: '最多两位小数' },
]}
initialValue={1}
>
<InputNumber
placeholder='请输入结算比例'
maxLength={25}
min={0.01}
max={999999999}
style={{ width: '100%' }}
/>
</Form.Item>
<Form.Item
label='应结工资(元)'
name='realWages'
rules={[
{ required: true, message: '请输入应结工资(元)' },
// 最多两位小数
{ pattern: /^(\d+)?(?:\.\d{1,2})?$/, message: '最多两位小数' },
]}
initialValue={0}
>
<InputNumber
placeholder='请输入应结工资(元)'
maxLength={25}
min={0}
max={999999999}
style={{ width: '100%' }}
disabled={true}
/>
</Form.Item>
</Form>
</Modal>
);
};
export default OrderSettleModal;
......@@ -3,3 +3,17 @@
//max-width: 100%;
}
}
.order-settle{
.settle-title{
color: rgba(0, 0, 0, 0.88);
font-weight: 600;
font-size: 14px;
line-height: 1.5714285714285714;
margin: 10px 0;
}
.settle-action{
.ant-btn{
margin-right: 12px;
}
}
}
......@@ -7,6 +7,7 @@ import { Key, useEffect, useState } from 'react';
import { InterDataType } from '~/api/interface';
import { serviceOrderFormDetailsType } from '~/api/interface/orderManageType';
import './index.scss';
import OrderSettleView from '~/pages/orderManage/demandOrder/orderDetail/comp/orderSettle';
// 详情返回类型
type detailType = InterDataType<serviceOrderFormDetailsType>;
......@@ -167,6 +168,10 @@ const DemandOrderDetail = () => {
return [];
}
};
// 刷新详情信息
const handleRefresh = () => {
getServiceOrderFormDetails(Number(searchParams.get('id')));
};
useEffect(() => {
getServiceOrderFormDetails(Number(searchParams.get('id')));
......@@ -202,8 +207,8 @@ const DemandOrderDetail = () => {
<Descriptions.Item label='订单编号'>
{demandDetail?.serviceOrderFormDetailsDTO?.publisherNumber}
</Descriptions.Item>
<Descriptions.Item label='订单金额'>
{demandDetail?.serviceOrderFormDetailsDTO?.orderAmount.toFixed(2).toLocaleString()}
<Descriptions.Item label='订单描述'>
{demandDetail?.serviceOrderFormDetailsDTO?.requireDescription}
</Descriptions.Item>
<Descriptions.Item label='任务时间'>
{demandDetail?.serviceOrderFormDetailsDTO?.taskStartTime}~
......@@ -212,6 +217,9 @@ const DemandOrderDetail = () => {
<Descriptions.Item label='任务地址'>
{demandDetail?.serviceOrderFormDetailsDTO?.taskAddress}
</Descriptions.Item>
<Descriptions.Item label='订单金额'>
{demandDetail?.serviceOrderFormDetailsDTO?.orderAmount.toFixed(2).toLocaleString()}
</Descriptions.Item>
<Descriptions.Item label='平台收益'>
{demandDetail?.serviceOrderFormDetailsDTO?.orderEarnings.toFixed(2).toLocaleString()}
</Descriptions.Item>
......@@ -291,6 +299,11 @@ const DemandOrderDetail = () => {
{demandDetail?.serviceOrderFormDetailsDTO?.preemptWeChat.toFixed(2).toLocaleString()}
</Descriptions.Item>
</Descriptions>
{/*订单结算*/}
{demandDetail &&
Number(demandDetail?.serviceOrderFormDetailsDTO?.orderStatus || 0) >= 400 && (
<OrderSettleView detail={demandDetail} onRefresh={() => handleRefresh()} />
)}
<Descriptions
title='订单争议处理记录'
style={{ marginTop: '10px' }}
......
......@@ -15,8 +15,57 @@ type demandOrderListType = InterDataType<serviceOrderFormListType>['list'];
type demandOrderListParameterType = InterListType<serviceOrderFormListType>;
const DemandOrderList = () => {
// 路由钩子
const navigate = useNavigate();
// 表格数据
const [tableData, setTableData] = useState<demandOrderListType>([]);
// 翻页数据
const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({
pageNo: 1,
pageSize: 10,
totalCount: 0,
});
// 搜索数据
const [query, setQuery] = useState<demandOrderListParameterType>();
// 刷新子组件
// const [refresh, setRefresh] = useState<boolean>(true);
// 获取需求订单列表
const getServiceOrderFormList = (query?: demandOrderListParameterType) => {
OrderManageAPI.getServiceOrderFormList({
pageNo: pagination.pageNo,
pageSize: pagination.pageSize,
...query,
}).then(({ result }) => {
const list = (result.list || [])?.map((i) => ({
...i,
childrenRequire: i.childrenRequire?.length ? i.childrenRequire : undefined,
}));
setTableData(list);
pagination.totalCount = result.totalCount;
setPagination({ ...pagination });
});
};
// 订单详情
const toOrderDetail = (record: demandOrderListType[0]) => {
navigate({ pathname: '/serviceManage/demandOrderDetail', search: `id=${record.id}` });
};
//分页
const paginationChange = (pageNo: number, pageSize: number) => {
pagination.pageNo = pageNo;
pagination.pageSize = pageSize;
getServiceOrderFormList(query);
};
// 筛选成功事件
const searchSuccessEvent = (value: any) => {
setQuery(value);
pagination.pageNo = 1;
pagination.pageSize = 10;
getServiceOrderFormList(value);
};
// 组件挂载
useEffect(() => {
getServiceOrderFormList();
}, []);
const searchColumns: searchColumnsType[] = [
{
label: '发单手机号',
......@@ -43,9 +92,32 @@ const DemandOrderList = () => {
];
const tableColumns: ColumnsType<demandOrderListType[0]> = [
{
title: '发单时间',
title: '订单编号',
align: 'center',
dataIndex: 'createTime',
dataIndex: 'publisherNumber',
render: (text: string, record) => (
<>
<Tag
color={
record?.fatherRequireId === 0
? record?.childrenRequire?.length
? 'green'
: 'volcano'
: 'blue'
}
>
{record?.fatherRequireId === 0 ? '主订单' : '子订单'}
</Tag>
<span>{text}</span>
</>
),
width: 250,
},
{
title: '订单状态',
align: 'center',
dataIndex: 'waiting',
render: (text, record) => (!record?.childrenRequire?.length ? text : ''),
},
{
title: '订单类型',
......@@ -61,11 +133,6 @@ const DemandOrderList = () => {
),
},
{
title: '订单编号',
align: 'center',
dataIndex: 'publisherNumber',
},
{
title: '发单方信息',
align: 'center',
dataIndex: 'publishPhone',
......@@ -76,11 +143,6 @@ const DemandOrderList = () => {
dataIndex: 'preemptPhone',
},
{
title: '订单状态',
align: 'center',
dataIndex: 'waiting',
},
{
title: '订单属性',
align: 'center',
dataIndex: 'orderAttribute',
......@@ -93,58 +155,22 @@ const DemandOrderList = () => {
render: (text: number) => text.toFixed(2).toLocaleString(),
},
{
title: '发单时间',
align: 'center',
dataIndex: 'createTime',
},
{
title: '操作',
align: 'center',
render: (_text: any, record) => (
<Button type='link' onClick={() => toOrderDetail(record)}>
查看订单
</Button>
),
fixed: 'right',
render: (_text: any, record) =>
!record?.childrenRequire?.length && (
<Button type='link' onClick={() => toOrderDetail(record)}>
查看订单
</Button>
),
},
];
const [tableData, setTableData] = useState<demandOrderListType>([]);
const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({
pageNo: 1,
pageSize: 10,
totalCount: 0,
});
const [query, setQuery] = useState<demandOrderListParameterType>();
// 获取需求订单列表
const getServiceOrderFormList = (query?: demandOrderListParameterType) => {
OrderManageAPI.getServiceOrderFormList({
pageNo: pagination.pageNo,
pageSize: pagination.pageSize,
...query,
}).then(({ result }) => {
setTableData(result.list || []);
pagination.totalCount = result.totalCount;
setPagination({ ...pagination });
});
};
// 订单详情
const toOrderDetail = (record: demandOrderListType[0]) => {
navigate({ pathname: '/serviceManage/demandOrderDetail', search: `id=${record.id}` });
};
//分页
const paginationChange = (pageNo: number, pageSize: number) => {
pagination.pageNo = pageNo;
pagination.pageSize = pageSize;
getServiceOrderFormList(query);
};
// 筛选成功事件
const searchSuccessEvent = (value: any) => {
setQuery(value);
pagination.pageNo = 1;
pagination.pageSize = 10;
getServiceOrderFormList(value);
};
useEffect(() => {
getServiceOrderFormList();
}, []);
return (
<div className='demand-order'>
<SearchBox search={searchColumns} searchData={searchSuccessEvent} />
......@@ -153,6 +179,11 @@ const DemandOrderList = () => {
bordered
rowKey='id'
dataSource={tableData}
expandable={{
defaultExpandAllRows: false,
childrenColumnName: 'childrenRequire',
}}
scroll={{ x: 1000 }}
pagination={{
total: pagination.totalCount,
pageSize: pagination.pageSize,
......
// 忽略ts
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import { Form, Input, message, Modal, Radio, Select } from 'antd';
import React, { useEffect, useState } from 'react';
import { debounce } from 'lodash';
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论