Commit f310e778 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏
parents a39ff0a7 39959d24
......@@ -32,6 +32,10 @@
z-index: 5;
}
}
&.disabled {
cursor: not-allowed;
}
}
}
......
......@@ -27,6 +27,8 @@ interface AddressFormItemProps {
// 默认展示的条数
showCount?: number;
onChange: (id: string) => {};
// 禁用的
disabled?: boolean;
};
const AddressFormItem: React.FC<AddressFormItemProps> & { isFieldComponent: boolean } = ({
......@@ -34,6 +36,7 @@ const AddressFormItem: React.FC<AddressFormItemProps> & { isFieldComponent: bool
showCount = 3,
dataSource = [],
onChange,
disabled = false,
}) => {
const [showMore, setShowMore] = useState(false);
......@@ -54,7 +57,7 @@ const AddressFormItem: React.FC<AddressFormItemProps> & { isFieldComponent: bool
};
const handleSelectItem = record => {
if (onChange) {
if (onChange && !disabled) {
onChange(record);
}
};
......@@ -65,7 +68,8 @@ const AddressFormItem: React.FC<AddressFormItemProps> & { isFieldComponent: bool
{showDataSource.map(item => (
<li
className={classNames(styles['addressList-item'], {
[styles.active]: item.id === (value && value.id),
[styles.active]: item.id === (value && value.id),
[styles.disabled]: disabled,
})}
onClick={() => handleSelectItem(item)}
key={item.id}
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 09:54:04
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-12 14:10:48
* @LastEditTime: 2020-11-17 17:49:19
* @Description: 退货地址信息
*/
import React from 'react';
......@@ -31,12 +31,22 @@ const ExchangeAddressInfo: React.FC<ExchangeAddressInfo> = ({
};
const DeliveryAddress = (
<div>
<p>张三 / 185 2929 6475</p>
<p>广东省广州市海珠区新港东路1068号中洲中心北塔6楼</p>
</div>
);
return (
<MellowCard
title="换货收货地址"
fullHeight
>
<NiceForm
<NiceForm
expressionScope={{
DeliveryAddress,
}}
effects={($, { setFieldState }) => {
}}
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-09 15:56:35
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-09 16:19:24
* @LastEditTime: 2020-11-17 17:46:41
* @Description:
*/
import { ISchema } from '@formily/antd';
......@@ -19,6 +19,13 @@ export const schema: ISchema = {
labelAlign: 'left',
},
properties: {
mode: {
type: 'string',
title: '配送方式',
default: '物流',
'x-component': 'Text',
'x-component-props': {},
},
shippingAddress: {
type: 'string',
title: '换货收货地址',
......@@ -28,6 +35,14 @@ export const schema: ISchema = {
placeholder: '请选择',
},
},
deliveryAddress: {
type: 'string',
title: '换货发货地址',
'x-component': 'Children',
'x-component-props': {
children: '{{DeliveryAddress}}',
},
},
},
},
},
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-04 15:09:09
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-16 16:22:36
* @LastEditTime: 2020-11-17 15:22:46
* @Description: 维修商品抽屉组件
*/
import React, { useState, useEffect } from 'react';
......@@ -70,6 +70,8 @@ export interface OrderListRes {
interface GoodsDrawerProps {
// 选中值(子表格的值)
checked: number[];
// 抽屉标题
title?: string;
// 是否可见的
visible: boolean;
// 关闭事件
......@@ -80,6 +82,10 @@ interface GoodsDrawerProps {
onChange: (value: number[]) => void;
// 获取订单列表数据
fetchOrderList: (params: any) => Promise<OrderListRes>;
// NestTableProps
nestProps?: {
[key: string]: any,
};
};
interface GoodsDrawerState {
......@@ -231,7 +237,11 @@ class GoodsDrawer extends React.Component<GoodsDrawerProps, GoodsDrawerState> {
dataIndex: 'purchaseCount',
align: 'center',
},
{
title: '已维修数量',
dataIndex: 'repairCount',
align: 'center',
},
];
// 获取订单列表
......@@ -422,7 +432,6 @@ class GoodsDrawer extends React.Component<GoodsDrawerProps, GoodsDrawerState> {
};
handleAfterVisibleChange = visible => {
console.log('visible', visible)
if (!visible) {
this.handleClose();
}
......@@ -445,14 +454,16 @@ class GoodsDrawer extends React.Component<GoodsDrawerProps, GoodsDrawerState> {
loading,
} = this.state;
const {
title = '选择维修商品',
visible = false,
nestProps = {},
} = this.props;
return (
<Drawer
title="选择维修商品"
title={title}
width={1200}
// onClose={this.handleClose}
onClose={this.handleClose}
afterVisibleChange={this.handleAfterVisibleChange}
visible={visible}
footer={
......@@ -506,6 +517,7 @@ class GoodsDrawer extends React.Component<GoodsDrawerProps, GoodsDrawerState> {
onSelect: this.handleParentSelectChange,
onSelectAll: this.hanldeParentSelectAll,
}}
{...nestProps}
/>
</div>
......
......@@ -20,6 +20,7 @@ import AvatarWrap from '@/components/AvatarWrap';
import StatusTag from '@/components/StatusTag';
import EyePreview from '@/components/EyePreview';
import { EditableColumns } from '@/components/PolymericTable/interface';
import { REPAIR_OUTER_STATUS_FINISHED } from '@/constants';
import {
REPAIR_OUTER_STATUS_TAG_MAP,
REPAIR_INNER_STATUS_BADGE_MAP,
......@@ -168,6 +169,8 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
getRepairGoods();
}, []);
const isFinished = (detailInfo && detailInfo.outerStatus) === REPAIR_OUTER_STATUS_FINISHED;
return (
<Spin spinning={infoLoading}>
<PageHeaderWrapper
......@@ -254,17 +257,19 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
</Suspense>
</Col>
<Col span={12}>
<Col span={isFinished ? 12 : 18}>
<Suspense fallback={null}>
<RepairAddressInfo info={detailInfo && detailInfo.repairAddress ? detailInfo.repairAddress as any : {}} />
</Suspense>
</Col>
<Col span={6}>
<Suspense fallback={null}>
<Score score={detailInfo?.evaluate?.level} />
</Suspense>
</Col>
{isFinished && (
<Col span={6}>
<Suspense fallback={null}>
<Score score={detailInfo?.evaluate?.level} />
</Suspense>
</Col>
)}
</Row>
</Suspense>
</Col>
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-03 18:30:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-03 18:50:28
* @LastEditTime: 2020-11-17 10:32:48
* @Description: 联动逻辑相关
*/
import { Modal } from 'antd';
......@@ -36,6 +36,30 @@ export const useBusinessEffects = (context, actions) => {
getFieldState,
setFieldState,
} = actions;
const linkage = useLinkageUtils();
// const linkage = useLinkageUtils();
// 校验维修数量
onFieldInputChange$('repairGoodsList.*.repairCount').subscribe(fieldState => {
const { name, value } = fieldState;
// 已维修数量
const repairedCountValue = getFieldState(
FormPath.transform(name, /\d/, $1 => {
return `repairGoodsList.${$1}.repairedCount`
}),
state => state.value,
);
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `repairGoodsList.${$1}.repairCount`
}),
state => {
if (+value > repairedCountValue) {
state.errors = '填写值已超过最大可维修数量,请重新填写';
} else {
state.errors = '';
}
}
);
});
}
\ No newline at end of file
......@@ -13,7 +13,7 @@ import { normalizeFiledata, FileData, isJSONStr } from '@/utils';
import ReutrnEle from '@/components/ReturnEle';
import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import GoodsDrawer, { OrderListRes } from '../GoodsDrawer';
import GoodsDrawer, { OrderListRes } from '../../../../components/GoodsDrawer';
import AddressFormItem from '../../../../components/AddressFormItem';
import { addBillSchema } from './schema';
import { createEffects } from './effects';
......@@ -269,7 +269,8 @@ const RepairForm: React.FC<BillsFormProps> = ({
category: item.category,
brand: item.unitName,
unit: item.costPrice,
repairCount: '',
purchaseCount: item.purchaseCount,
repairedCount: item.repairCount || item.purchaseCount || 0, // 已维修数量
repairReason: '',
};
value.push(atom);
......@@ -299,10 +300,10 @@ const RepairForm: React.FC<BillsFormProps> = ({
backIcon={<ReutrnEle description="返回" />}
title={
!id ?
'新建单据' :
'新建维修申请单' :
isEdit ?
'编辑单据' :
'查看单据'
'编辑维修申请单' :
'查看维修申请单'
}
extra={
(isEdit || !id)
......
import { ISchema } from '@formily/antd';
import Search from '@/components/NiceForm/components/Search';
import Submit from '@/components/NiceForm/components/Submit';
import {
} from '@/constants';
import { PATTERN_MAPS } from '@/constants/regExp';
import { UPLOAD_TYPE } from '@/constants';
import { PublicApi } from '@/services/api';
......@@ -308,6 +305,16 @@ export const addBillSchema: ISchema = {
type: 'string',
display: false,
},
// 采购数量
purchaseCount: {
type: 'string',
visible: false,
},
// 已维修数量
repairedCount: {
type: 'string',
visible: false,
},
},
}
},
......
......@@ -21,6 +21,7 @@ import StatusTag from '@/components/StatusTag';
import AuditProcess from '@/components/AuditProcess';
import EyePreview from '@/components/EyePreview';
import { EditableColumns } from '@/components/PolymericTable/interface';
import { REPAIR_OUTER_STATUS_FINISHED } from '@/constants';
import {
REPAIR_OUTER_STATUS_TAG_MAP,
REPAIR_INNER_STATUS_BADGE_MAP,
......@@ -166,6 +167,8 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
getRepairGoods();
}, []);
const isFinished = (detailInfo && detailInfo.outerStatus) === REPAIR_OUTER_STATUS_FINISHED;
return (
<Spin spinning={infoLoading}>
<PageHeaderWrapper
......@@ -265,17 +268,19 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
</Suspense>
</Col>
<Col span={12}>
<Col span={isFinished ? 12 : 18}>
<Suspense fallback={null}>
<RepairAddressInfo info={detailInfo && detailInfo.repairAddress ? detailInfo.repairAddress as any : {}} />
</Suspense>
</Col>
<Col span={6}>
<Suspense fallback={null}>
<Score score={detailInfo?.evaluate?.level} />
</Suspense>
</Col>
{isFinished && (
<Col span={6}>
<Suspense fallback={null}>
<Score score={detailInfo?.evaluate?.level} />
</Suspense>
</Col>
)}
</Row>
</Suspense>
</Col>
......
......@@ -36,7 +36,7 @@ const RepairManageQuery: React.FC = () => {
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/repairManage/repairQuery/detail?id=${record.id}`}
url={`/memberCenter/afterService/repairManage/repairQuery/detail?id=${record.applyId}`}
>
{text}
</EyePreview>
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-09 10:28:17
* @LastEditTime: 2020-11-17 17:20:43
* @Description: 待新增退货发货单
*/
import React, { useState, useRef } from 'react';
......@@ -87,12 +87,12 @@ const ReturnPrAddDeliver: React.FC = () => {
},
{
title: '退货批次',
dataIndex: 'batch',
dataIndex: 'returnBatch',
align: 'center',
},
{
title: '退货发货单号',
dataIndex: 'deliverNo',
dataIndex: 'returnDeliveryNo',
align: 'center',
render: text => <a>{text}</a>,
},
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-11 09:53:54
* @LastEditTime: 2020-11-17 17:22:07
* @Description: 待新增退货发货单
*/
import React, { useState, useRef } from 'react';
......@@ -73,12 +73,12 @@ const ReturnPrAddLogistics: React.FC = () => {
},
{
title: '退货批次',
dataIndex: 'batch',
dataIndex: 'returnBatch',
align: 'center',
},
{
title: '退货发货单号',
dataIndex: 'deliverNo',
dataIndex: 'returnDeliveryNo',
align: 'center',
render: text => <a>{text}</a>,
},
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-11 10:21:46
* @LastEditTime: 2020-11-17 17:24:12
* @Description: 待新增退货发货单
*/
import React, { useState, useRef } from 'react';
......@@ -76,12 +76,12 @@ const ReturnPrConfirmBack: React.FC = () => {
},
{
title: '退货批次',
dataIndex: 'batch',
dataIndex: 'returnBatch',
align: 'center',
},
{
title: '退货发货单号',
dataIndex: 'deliverNo',
dataIndex: 'returnDeliveryNo',
align: 'center',
render: text => <a>{text}</a>,
},
......
......@@ -16,7 +16,7 @@ const ReturnPrConfirmBackVerify: React.FC = () => {
}
setSubmitLoading(true);
PublicApi.postAsReturnGoodsConfirmAllReturnGoodsReceipt({
returnId: id,
dataId: id,
}).then(res => {
if (res.code === 1000) {
history.goBack();
......
......@@ -16,7 +16,7 @@ const ReturnPrConfirmResultVerify: React.FC = () => {
}
setSubmitLoading(true);
PublicApi.postAsReturnGoodsConfirmAllRefund({
returnId: id,
dataId: id,
}).then(res => {
if (res.code === 1000) {
history.goBack();
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-11 10:04:10
* @LastEditTime: 2020-11-17 17:23:01
* @Description: 待新增退货发货单
*/
import React, { useState, useRef } from 'react';
......@@ -76,12 +76,12 @@ const ReturnPrDeliver: React.FC = () => {
},
{
title: '退货批次',
dataIndex: 'batch',
dataIndex: 'returnBatch',
align: 'center',
},
{
title: '退货发货单号',
dataIndex: 'deliverNo',
dataIndex: 'returnDeliveryNo',
align: 'center',
render: text => <a>{text}</a>,
},
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-03 18:30:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-03 18:50:28
* @LastEditTime: 2020-11-17 16:13:43
* @Description: 联动逻辑相关
*/
import { Modal } from 'antd';
......@@ -39,4 +39,15 @@ export const useBusinessEffects = (context, actions) => {
} = actions;
const linkage = useLinkageUtils();
// 联动配送方式
onFieldValueChange$('deliveryType').subscribe(fieldState => {
const { name, value } = fieldState;
// 如果选中 自提
if (value === 2) {
linkage.show('shippingAddress');
} else {
linkage.hide('shippingAddress');
}
});
}
\ No newline at end of file
import React, { useState, useEffect, useRef } from 'react';
import { Button, Card, Spin, message } from 'antd';
import { Button, Card, Spin, Badge, message } from 'antd';
import { ColumnType } from 'antd/lib/table/interface';
import { DeleteOutlined } from '@ant-design/icons';
import { Radio, ArrayTable } from '@formily/antd-components';
import { history, Prompt } from 'umi';
......@@ -7,9 +8,11 @@ import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { SaveOutlined, PlusOutlined } from '@ant-design/icons';
import { createFormActions, FormEffectHooks } from '@formily/antd';
import { PublicApi } from '@/services/api';
import { PurchaseOrderInsideWorkStateTexts, ORDER_TYPE2 } from '@/constants';
import ReutrnEle from '@/components/ReturnEle';
import StatusTag from '@/components/StatusTag';
import NiceForm from '@/components/NiceForm';
import GoodsDrawer from '../GoodsDrawer';
import GoodsDrawer, { OrderListRes } from '../../../../components/GoodsDrawer';
import AddressFormItem from '../../../../components/AddressFormItem';
import ReturnInfoDrawer from '../../../../components/ReturnInfoDrawer';
import { addBillSchema } from './schema';
......@@ -36,14 +39,129 @@ const RepairForm: React.FC<BillsFormProps> = ({
const [submitLoading, setSubmitLoading] = useState(false);
const [visibleGoodsDrawer, setVisibleGoodsDrawer] = useState(false);
const [visibleReturnInfoDrawer, setVisibleReturnInfoDrawer] = useState(false);
const [goodsValue, setGoodsValue] = useState([]);
const tableColumn: ColumnType<any>[] = [
{
title: '订单号',
dataIndex: 'orderNo',
align: 'center',
},
{
title: '订单摘要',
dataIndex: 'orderThe',
align: 'center',
},
{
title: '供应会员',
dataIndex: 'supplyMembersName',
align: 'center',
},
{
title: '下单时间',
dataIndex: 'createTime',
align: 'center',
},
{
title: '订单状态',
dataIndex: 'externalState',
align: 'center',
render: text => PurchaseOrderInsideWorkStateTexts[text],
},
{
title: '订单类型',
dataIndex: 'type',
align: 'center',
render: text => ORDER_TYPE2[text],
},
];
const childTableColumn: ColumnType<any>[] = [
{
title: '商品ID',
dataIndex: 'productId',
align: 'center',
},
{
title: '商品名称',
dataIndex: 'productName',
align: 'center',
},
{
title: '品类',
dataIndex: 'category',
align: 'center',
},
{
title: '品牌',
dataIndex: 'brand',
align: 'center',
},
{
title: '单位',
dataIndex: 'unit',
align: 'center',
},
{
title: '订单数量',
dataIndex: 'purchaseCount',
align: 'center',
},
{
title: '单价',
dataIndex: 'price',
align: 'center',
},
{
title: '金额',
dataIndex: 'price',
align: 'center',
},
{
title: '已退货数量',
dataIndex: 'returnCount',
align: 'center',
},
// 缺
{
title: '已退款金额',
dataIndex: 'returnCount2',
align: 'center',
},
];
// 根据供应会员获取订单列表
const getOrderList = (params): Promise<OrderListRes> => {
const supplierMemberValue = addSchemaAction.getFieldValue('supplierMember');
return new Promise((resolve, reject) => {
PublicApi.getOrderOneBatchOrderList({
...params,
supplyMembersId: supplierMemberValue[0].memberId,
supplyMembersRoleId: supplierMemberValue[0].roleId,
}).then(res => {
if (res.code === 1000) {
resolve(res.data);
}
reject();
}).catch(() => {
reject();
});
});
};
useEffect(() => {
}, []);
// 弹出单据明细
const handleAdd = () => {
// do something
const handleAddGoods = () => {
const supplierMemberValue = addSchemaAction.getFieldValue('supplierMember');
if (!supplierMemberValue || !supplierMemberValue.length) {
message.error('请先选择供应会员');
return;
}
setVisibleGoodsDrawer(true);
};
const TableAddButton = isEdit || !id ? (
......@@ -51,7 +169,7 @@ const RepairForm: React.FC<BillsFormProps> = ({
style={{ marginBottom: 16 }}
block
icon={<PlusOutlined />}
onClick={() => setVisibleGoodsDrawer(true)}
onClick={handleAddGoods}
type="dashed"
>
选择退货商品
......@@ -67,18 +185,13 @@ const RepairForm: React.FC<BillsFormProps> = ({
};
const handleRemoveItem = (index: number) => {
// do something
// const newSelectRow = [...productRowCtl.selectRow];
// const newSelectedRowKeys = [...productRowCtl.selectedRowKeys];
// const newValue = [...addSchemaAction.getFieldValue('invoicesDetailsRequests')];
// newSelectRow.splice(index, 1);
// newSelectedRowKeys.splice(index, 1);
// productRowCtl.setSelectRow(newSelectRow);
// productRowCtl.setSelectedRowKeys(newSelectedRowKeys);
// newValue.splice(index, 1);
// addSchemaAction.setFieldValue('invoicesDetailsRequests', newValue);
const newGoodsValue = [...goodsValue];
const newValue = [...addSchemaAction.getFieldValue('returnGoodsList')];
const deleted = newValue.splice(index, 1);
addSchemaAction.setFieldValue('returnGoodsList', newValue);
newGoodsValue.splice(newGoodsValue.findIndex(item => item === deleted[0].id), 1);
setGoodsValue(newGoodsValue);
};
// ArrayTable自定义渲染
......@@ -110,6 +223,46 @@ const RepairForm: React.FC<BillsFormProps> = ({
}
};
const handleGoodsConfirm = values => {
const preValues = addSchemaAction.getFieldValue('returnGoodsList');
const value = [];
values.forEach(item => {
const existing = preValues.find(val => val.id === item.id);
const atom =
existing ?
existing :
{
id: item.id,
orderId: item.orderId,
orderNo: item.orderNo,
productId: item.productId,
productName: item.productName,
category: item.category,
brand: item.unitName,
unit: item.costPrice,
purchaseCount: item.purchaseCount,
purchasePrice: 0, // 待补
returnCount: 0, // 待补
returnReason: '',
};
value.push(atom);
});
addSchemaAction.setFieldValue('returnGoodsList', value);
};
const handleGoodsChange = values => {
setGoodsValue(values);
};
const OuterStatus = (
<StatusTag type={'success'} title={'待提交'} />
);
const InnerStatus = (
<Badge color="#C0C4CC" text={'待提交审核'} />
);
return (
<Spin spinning={infoLoading}>
<PageHeaderWrapper
......@@ -120,10 +273,10 @@ const RepairForm: React.FC<BillsFormProps> = ({
backIcon={<ReutrnEle description="返回" />}
title={
!id ?
'新建单据' :
'新建退货申请单' :
isEdit ?
'编辑单据' :
'查看单据'
'编辑退货申请单' :
'查看退货申请单'
}
extra={
(isEdit || !id)
......@@ -146,6 +299,8 @@ const RepairForm: React.FC<BillsFormProps> = ({
initialValues={{}}
expressionScope={{
TableAddButton,
OuterStatus,
InnerStatus,
renderListTableRemove,
beforeUpload,
}}
......@@ -169,8 +324,16 @@ const RepairForm: React.FC<BillsFormProps> = ({
</Card>
<GoodsDrawer
title="选择退货商品"
visible={visibleGoodsDrawer}
fetchOrderList={getOrderList}
onClose={() => setVisibleGoodsDrawer(false)}
onConfirm={handleGoodsConfirm}
checked={goodsValue}
onChange={handleGoodsChange}
nestProps={{
NestColumns: [tableColumn, childTableColumn],
}}
/>
<ReturnInfoDrawer
......
......@@ -297,6 +297,25 @@ const MemberMaintain: React.FC<[]> = () => {
</Dropdown.Button>
</Space>
)}
{/* <Space>
<Button
type="primary"
onClick={() =>
history.push(`/memberCenter/memberAbility/manage/import/add`)
}
>
<PlusOutlined />
新建
</Button>
<Button onClick={() => setVisibleModal(true)}>导入</Button>
<Dropdown.Button
overlay={menu}
trigger={['click']}
icon={<DownOutlined />}
>
更多
</Dropdown.Button>
</Space> */}
</>
);
......
......@@ -505,7 +505,7 @@ export const useBusinessEffects = (context, actions) => {
return;
}
if (value > current.purchaseCount) {
if (+value > current.purchaseCount) {
Modal.confirm({
title: '提示',
content: '单据数量已超过商品数量',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment