提交 b85fde26 作者: 龚洪江

功能:需求订单列表,详情

上级 57f5b8d3
......@@ -603,3 +603,261 @@ export type getMallOrderDetailById = InterFunction<
userName: string;
}
>;
// 需求订单-列表
export type serviceOrderFormListType = InterItemFunction<
{
orderAttribute?: number;
/**
* 抢单手机号
*/
preemptPhone?: string;
/**
* 发单手机号
*/
publishPhone?: string;
},
{
/**
* 订单当前状态
*/
doing?: string;
/**
* id
*/
id?: number;
/**
* 1正常 2争议订单
*/
orderAttribute?: number;
/**
* 平台总收益
*/
orderEarnings?: number;
/**
* 订单级别 REGULAR_ORDER,RUSH_ORDER,TOP_ORDER
*/
orderLevel?: string;
/**
* 抢单者电话
*/
preemptPhone?: string;
/**
* 发布者订单编号
*/
publisherNumber?: string;
/**
* 发布者电话
*/
publishPhone?: string;
/**
* 服务类型id
*/
serviceId?: number;
/**
* 服务类型名称
*/
serviceName?: string;
}[]
>;
// 需求订单-详情
export type serviceOrderFormDetailsType = InterFunction<
{ requirementsInfoId: number },
{
cashAmount: number;
createTime: string;
id: number;
latitude: number;
longitude: number;
orderAmount: number;
orderEarnings: number;
orderEarningsDTO: null;
preemptCashAmount: number;
preemptSalaryAmount: number;
preemptWeChat: number;
publisherNumber: string;
requireDescription: string;
salaryAmount: number;
serviceId: number;
serviceName: string;
taskAddress: string;
taskEndTime: string;
taskStartTime: string;
updateOrderAmount: number;
weChat: number;
orderStatus: string;
}
>;
// 需求订单-进度条
export type flowDictionaryType = InterFunction<
any,
{
/**
* 当前状态
*/
doing: string;
/**
* 飞手当前状态
*/
flyerPort: string;
id: number;
/**
* 状态码
*/
orderStatus: string;
/**
* 用户当前流程状态
*/
userPort: string;
/**
* 等待状态
*/
waiting: string;
}[]
>;
// 需求订单-进度条(带时间)
type flowDictionaryDTO = {
/**
* 当前状态
*/
doing?: string;
/**
* 飞手当前状态
*/
flyerPort?: string;
id?: number;
/**
* 状态码
*/
orderStatus?: string;
/**
* 用户当前流程状态
*/
userPort?: string;
/**
* 等待状态
*/
waiting?: string;
};
export type flowDictionaryAndTimeType = InterFunction<
{ requirementsInfoId: number },
{
amountUpdate?: {
createTime?: Date;
flowDictionaryDTO?: flowDictionaryDTO;
/**
* 服务需求id
*/
requirementsInfoId: number;
updateTime?: Date;
};
requirementsServiceDTO?: {
/**
* 抢单时间
*/
createTime?: string;
flowDictionaryDTO?: flowDictionaryDTO;
/**
* 服务id
*/
requirementsInfoId?: number;
/**
* 抢单时间
*/
updateTime?: string;
};
serviceArriveSceneDTO?: {
/**
* 到达现场时间
*/
createTime?: string;
flowDictionaryDTO?: flowDictionaryDTO;
/**
* id
*/
id?: number;
/**
* id
*/
latitude?: number;
/**
* id
*/
longitude?: number;
/**
* 服务需求id
*/
requirementsInfoId: number;
/**
* 现场地址
*/
sceneAddress?: string;
/**
* 现场地址的url
*/
sceneUrl: string;
updateTime?: string;
};
serviceEvaluateDTO?: {
createTime?: Date;
/**
* 评价内容
*/
evaluationContent?: string;
/**
* 评价图片
*/
evaluationUrl?: string;
flowDictionaryDTO?: flowDictionaryDTO;
/**
* id
*/
id?: number;
/**
* 需求id
*/
requirementsInfoId?: number;
/**
* 星级
*/
starLevel?: string;
updateTime?: Date;
};
serviceFulfilATaskDTO?: {
createTime?: Date;
flowDictionaryDTO?: flowDictionaryDTO;
id?: number;
/**
* 需求id
*/
requirementsInfoId?: number;
/**
* 完成任务描述
*/
taskDescribe?: string;
/**
* 完成任务图片
*/
taskUrl?: string;
updateTime?: Date;
};
serviceSettleAccountsDTO?: {
createTime?: Date;
flowDictionaryDTO?: flowDictionaryDTO;
id?: number;
/**
* 订单金额
*/
orderAmount?: number;
/**
* 备注
*/
remark?: string;
/**
* 需求id
*/
requirementsInfoId?: number;
updateTime?: Date;
};
}
>;
import axios from '../request';
import {
flowDictionaryAndTimeType,
flowDictionaryType,
getMallOrderDetailById,
listExpressInfoType,
listOfRentalOrdersType,
......@@ -14,6 +16,8 @@ import {
refundOrderType,
renterTakeOrderType,
sendOrderWareType,
serviceOrderFormDetailsType,
serviceOrderFormListType,
serviceOrderStatusType,
serviceOrderType,
} from '~/api/interface/orderManageType';
......@@ -79,4 +83,17 @@ export class OrderManageAPI {
// 服务-订单字典
static getServiceStatusList: serviceOrderStatusType = () =>
axios.post('/oms/serviceOrderTask/getServiceOrderStatus');
//需求订单-列表
static getServiceOrderFormList: serviceOrderFormListType = (data) =>
axios.post('/release/backRequirements/serviceOrderFormList', data);
// 需求订单-详情
static getServiceOrderFormDetails: serviceOrderFormDetailsType = (params) =>
axios.get('/release/backRequirements/serviceOrderFormDetails', { params });
// 需求订单-进度条(带时间)
static getFlowDictionaryAndTime: flowDictionaryAndTimeType = (params) =>
axios.get('/release/requirements/flowDictionaryAndTime', { params });
// 需求订单-进度条
static getFlowDictionary: flowDictionaryType = () =>
axios.get('/release/requirements/flowDictionary');
}
......@@ -95,7 +95,7 @@ const RichText: React.FC<PropsType> = ({
return (
<>
<div style={{ border: '1px solid #ccc', zIndex: 100 }}>
<div style={{ border: '1px solid #ccc', zIndex: 100, width: '100%' }}>
<Toolbar
editor={editor}
defaultConfig={toolbarConfig}
......
import SearchBox from '~/components/search-box';
import { searchColumns as searchColumnsType } from '~/components/search-box';
import { Table } from 'antd';
import { ColumnsType } from 'antd/es/table/InternalTable';
const withDrawManage = () => {
const searchColumns: searchColumnsType[] = [
{
label: '账号',
placeholder: '请输入账号',
name: '',
type: 'input',
},
{
label: '状态',
placeholder: '请选择状态',
name: '',
type: 'Select',
options: [],
},
{
label: '提现方式',
placeholder: '请选择提现方式',
name: '',
type: 'Select',
options: [],
},
{
label: '时间',
name: '',
type: 'rangePicker',
placeholder: '',
},
];
const tableColumns: ColumnsType<any> = [
{
title: '流水编号',
align: 'center',
},
{
title: '账户名称',
align: 'center',
},
{
title: '金额',
align: 'center',
},
{
title: '提现方式',
align: 'center',
},
{
title: '手机号',
align: 'center',
},
{
title: '收款账号',
align: 'center',
},
{
title: '状态',
align: 'center',
},
{
title: '处理信息',
align: 'center',
},
{
title: '时间',
align: 'center',
},
{
title: '备注',
align: 'center',
},
{
title: '操作',
align: 'center',
},
];
return (
<div className='with-draw-manage'>
<SearchBox search={searchColumns} />
<Table bordered columns={tableColumns} />
</div>
);
};
export default withDrawManage;
import { Button, Descriptions, Steps } from 'antd';
import { useNavigate } from 'react-router-dom';
import RichText from '~/components/richText';
import { useSearchParams } from 'react-router-dom';
import { OrderManageAPI } from '~/api';
import { useEffect, useState } from 'react';
import { InterDataType } from '~/api/interface';
import { serviceOrderFormDetailsType } from '~/api/interface/orderManageType';
// 详情返回类型
type detailType = InterDataType<serviceOrderFormDetailsType>;
const flowStatusKey = [
{
orderStatus: '550',
key: 'amountUpdate',
},
{
orderStatus: '200',
key: 'requirementsServiceDTO',
},
{
orderStatus: '300',
key: 'serviceArriveSceneDTO',
},
{
orderStatus: '400',
key: 'serviceFulfilATaskDTO',
},
{
orderStatus: '500',
key: 'serviceSettleAccountsDTO',
},
{
orderStatus: '600',
key: 'serviceEvaluateDTO',
},
];
const DemandOrderDetail = () => {
const navigate = useNavigate();
const [searchParams] = useSearchParams();
// 需求订单详情
const [demandDetail, setDemandDetail] = useState<detailType>();
// 进度条
const [steps, setSteps] = useState<{ title: string; description: string }[]>([]);
// 当前进度
const [currentStep, setCurrentStep] = useState<number>(0);
//获取详情
const getServiceOrderFormDetails = (requirementsInfoId: number) => {
OrderManageAPI.getServiceOrderFormDetails({ requirementsInfoId }).then(({ result }) => {
setDemandDetail(result);
});
};
// 获取进度条
const getFlowDictionaryList = (requirementsInfoId: number) => {
OrderManageAPI.getFlowDictionary().then(({ result: flowDictionaryResult }) => {
OrderManageAPI.getFlowDictionaryAndTime({ requirementsInfoId }).then(
(flowDictionaryAndTimeRes: any) => {
// 排序
const flowDictionarySortResult = flowDictionaryResult.sort(
(a, b) => Number(a.orderStatus) - Number(b.orderStatus),
);
if (demandDetail) {
const flowDictionaryFilterResult = ['700'].includes(demandDetail.orderStatus)
? flowDictionarySortResult.filter((v) => v.orderStatus === demandDetail.orderStatus)
: ['550'].includes(demandDetail.orderStatus)
? flowDictionarySortResult.filter(
(v) =>
v.orderStatus !== demandDetail.orderStatus && !['700'].includes(v.orderStatus),
)
: flowDictionarySortResult.filter((v) => !['700', '550'].includes(v.orderStatus));
const stepList = flowDictionaryFilterResult
.map((v) => {
return {
...v,
key: flowStatusKey.find((i) => i.orderStatus === v.orderStatus)?.key,
};
})
.map((v) => {
return {
title: demandDetail?.orderStatus >= v.orderStatus ? v.doing : v.waiting,
orderStatus: v.orderStatus,
description: v.key
? flowDictionaryAndTimeRes.result[v.key]?.createTime || ''
: '',
};
});
setSteps(stepList);
setCurrentStep(stepList.findIndex((v) => v.orderStatus === demandDetail.orderStatus));
}
},
);
});
};
// 返回
const backRoute = () => {
navigate(-1);
};
useEffect(() => {
getServiceOrderFormDetails(Number(searchParams.get('id')));
}, []);
useEffect(() => {
if (demandDetail) {
getFlowDictionaryList(Number(searchParams.get('id')));
}
}, [demandDetail]);
return (
<div className='demand-order-detail'>
<Descriptions
title='订单进度'
extra={
<Button type='primary' onClick={backRoute}>
返回
</Button>
}
>
<Descriptions.Item>
<Steps current={currentStep} items={steps} />
</Descriptions.Item>
</Descriptions>
<Descriptions title='订单信息' bordered style={{ marginTop: '10px' }}>
<Descriptions.Item label='发单时间'>{demandDetail?.createTime}</Descriptions.Item>
<Descriptions.Item label='订单类型'>{demandDetail?.serviceName}</Descriptions.Item>
<Descriptions.Item label='订单编号'>{demandDetail?.publisherNumber}</Descriptions.Item>
<Descriptions.Item label='订单金额'>
{demandDetail?.orderAmount.toFixed(2).toLocaleString()}
</Descriptions.Item>
<Descriptions.Item label='任务时间'>
{demandDetail?.taskStartTime}~{demandDetail?.taskEndTime}
</Descriptions.Item>
<Descriptions.Item label='任务地址'>{demandDetail?.taskAddress}</Descriptions.Item>
</Descriptions>
<Descriptions title='发单方' bordered style={{ marginTop: '10px' }}>
<Descriptions.Item label='冻结云享金'>
{demandDetail?.cashAmount.toFixed(2).toLocaleString()}
</Descriptions.Item>
<Descriptions.Item label='冻结金额'>
{demandDetail?.salaryAmount.toFixed(2).toLocaleString()}
</Descriptions.Item>
<Descriptions.Item label='冻结微信支付'>
{demandDetail?.weChat.toFixed(2).toLocaleString()}
</Descriptions.Item>
</Descriptions>
<Descriptions title='接单方' bordered style={{ marginTop: '10px' }}>
<Descriptions.Item label='冻结云享金'>
{demandDetail?.preemptCashAmount.toFixed(2).toLocaleString()}
</Descriptions.Item>
<Descriptions.Item label='冻结金额'>
{demandDetail?.preemptSalaryAmount.toFixed(2).toLocaleString()}
</Descriptions.Item>
<Descriptions.Item label='冻结微信支付'>
{demandDetail?.preemptWeChat.toFixed(2).toLocaleString()}
</Descriptions.Item>
</Descriptions>
<Descriptions
title='订单争议处理记录'
style={{ marginTop: '10px' }}
column={1}
extra={
<Button danger type='primary'>
确认判定
</Button>
}
>
<Descriptions.Item label='判定结果' labelStyle={{ color: '#000' }}>
<div style={{ color: 'red' }}>
1、发单方责任(扣除30%违约金,20%支付给接单方,信息推送)
<br />
2、发单方责任(扣除30%违约金,20%支付给接单方,信息推送)
<br />
3、双方无责(不扣违约金,信息推送)
</div>
</Descriptions.Item>
<Descriptions.Item>
<RichText richTextContent='' />
</Descriptions.Item>
</Descriptions>
</div>
);
};
export default DemandOrderDetail;
import SearchBox from '~/components/search-box';
import { searchColumns as searchColumnsType } from '~/components/search-box';
import { Button, Table, Tag } from 'antd';
import { ColumnsType } from 'antd/es/table/InternalTable';
import { useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { OrderManageAPI } from '~/api';
import { InterDataType, InterListType, PaginationProps } from '~/api/interface';
import { serviceOrderFormListType } from '~/api/interface/orderManageType';
import { orderLevelList } from '~/utils/dictionary';
// 需求订单列表返回类型
type demandOrderListType = InterDataType<serviceOrderFormListType>['list'];
// 需求订单列表请求类型
type demandOrderListParameterType = InterListType<serviceOrderFormListType>;
const DemandOrderList = () => {
const navigate = useNavigate();
const searchColumns: searchColumnsType[] = [
{
label: '发单手机号',
name: 'publishPhone',
type: 'input',
placeholder: '请输入发单手机号',
},
{
label: '接单手机号',
name: 'preemptPhone',
type: 'input',
placeholder: '请输入接单手机号',
},
{
label: '订单属性',
name: 'orderAttribute',
type: 'Select',
placeholder: '请选择订单属性',
options: [
{ label: '正常订单', value: 1 },
{ label: '争议订单', value: 2 },
],
},
];
const tableColumns: ColumnsType<demandOrderListType[0]> = [
{
title: '发单时间',
align: 'center',
dataIndex: 'createTime',
},
{
title: '订单类型',
align: 'center',
dataIndex: 'serviceName',
},
{
title: '订单级别',
align: 'center',
dataIndex: 'orderLevel',
render: (text: string) => (
<Tag>{orderLevelList.find((v) => v.code === text)?.label || ''}</Tag>
),
},
{
title: '订单编号',
align: 'center',
dataIndex: 'publisherNumber',
},
{
title: '发单方信息',
align: 'center',
dataIndex: 'publishPhone',
},
{
title: '接单方信息',
align: 'center',
dataIndex: 'preemptPhone',
},
{
title: '订单状态',
align: 'center',
dataIndex: 'doing',
},
{
title: '订单属性',
align: 'center',
dataIndex: 'orderAttribute',
render: (text: number) => (text === 1 ? '正常订单' : '争议订单'),
},
{
title: '订单收益',
align: 'center',
dataIndex: 'orderEarnings',
},
{
title: '操作',
align: 'center',
render: (_text: any, record) => (
<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: '/orderManage/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} />
<Table
columns={tableColumns}
bordered
rowKey='id'
dataSource={tableData}
pagination={{
total: pagination.totalCount,
pageSize: pagination.pageSize,
current: pagination.pageNo,
showSizeChanger: true,
showQuickJumper: true,
onChange: (page: number, pageSize: number) => paginationChange(page, pageSize),
showTotal: (total, range) => `当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`,
}}
/>
</div>
);
};
export default DemandOrderList;
......@@ -13,7 +13,6 @@ interface selfProps {
ref: any;
rentGoodsDetails: rentGoodsDetailType | undefined;
}
const AddressInfo = forwardRef<any, selfProps>(({ rentGoodsDetails }, ref) => {
const [addressInfoForm] = Form.useForm<{
shipAddress: number;
......
......@@ -65,6 +65,9 @@ const CustomVerificationDetailView = React.lazy(
() => import('~/pages/customManage/customVerification/details'),
);
// 消耗管理
const WithDrawListView = React.lazy(() => import('src/pages/depleteManage/withDrawList')); //提现列表
//资源管理
import MaterielManageView from '~/pages/resourceManage/materielManage';
import MaterielManageDetail from '~/pages/resourceManage/materielManage/detail';
......@@ -87,6 +90,10 @@ const ProductOrderDetail = React.lazy(() => import('~/pages/orderManage/productO
const ServiceOrderDetail = React.lazy(() => import('~/pages/orderManage/serviceOrder/detail'));
const EquipmentOrderDetail = React.lazy(() => import('~/pages/orderManage/equipmentOrder/detail'));
const PilotTrainingOrderView = React.lazy(() => import('~/pages/orderManage/pilotTrainingOrder'));
const DemandOrderListView = React.lazy(() => import('~/pages/orderManage/demandOrder/orderList')); //需求订单
const DemandOrderDetailView = React.lazy(
() => import('~/pages/orderManage/demandOrder/orderDetail'),
); //需求订单详情
//商品管理
import CourseManageView from '~/pages/mallManage/courseManage'; //课程管理
......@@ -301,6 +308,30 @@ export const routerList: Array<RouteObjectType> = [
],
},
{
path: '/depleteManage',
element: <LayoutView />,
errorElement: <ErrorPage />,
meta: {
id: 300,
icon: <AccountBookOutlined />,
title: '消耗管理',
develop: true,
},
children: [
{
path: '/depleteManage/withDrawList',
element: withLoadingComponent(<WithDrawListView />),
errorElement: <ErrorPage />,
meta: {
id: 302,
title: '提现列表',
icon: <SolutionOutlined />,
develop: true,
},
},
],
},
{
path: '/flyerCenter',
element: <LayoutView />,
errorElement: <ErrorPage />,
......@@ -576,6 +607,29 @@ export const routerList: Array<RouteObjectType> = [
icon: <CreditCardOutlined />,
},
},
{
path: '/orderManage/demandOrderList',
element: withLoadingComponent(<DemandOrderListView />),
errorElement: <ErrorPage />,
meta: {
id: 10050,
title: '需求订单',
icon: <CreditCardOutlined />,
develop: true,
},
},
{
path: '/orderManage/demandOrderDetail',
element: withLoadingComponent(<DemandOrderDetailView />),
errorElement: <ErrorPage />,
meta: {
id: 10050,
title: '需求订单详情',
icon: <CreditCardOutlined />,
hidden: true,
develop: true,
},
},
],
},
{
......
......@@ -61,3 +61,10 @@ export const qualityList = [
value: 4,
},
];
// 需求订单级别字典
export const orderLevelList = [
{ label: '普通单', value: 0, code: 'REGULAR_ORDER' },
{ label: '加急单', value: 100, code: 'RUSH_ORDER' },
{ label: '置顶单', value: 300, code: 'TOP_ORDER' },
];
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论