Commit 88e08281 authored by GuanHua's avatar GuanHua
parents 6baa74d8 1e8221b6
...@@ -345,6 +345,14 @@ export const DOC_TYPE_RETURN_RECEIPT = 'S006'; // 退货入库 ...@@ -345,6 +345,14 @@ export const DOC_TYPE_RETURN_RECEIPT = 'S006'; // 退货入库
export const DOC_TYPE_EXCHANGE_INVOICE = 'S007'; // 换货发货单 export const DOC_TYPE_EXCHANGE_INVOICE = 'S007'; // 换货发货单
export const DOC_TYPE_EXCHANGE_RECEIPT = 'S008'; // 换货入库单 export const DOC_TYPE_EXCHANGE_RECEIPT = 'S008'; // 换货入库单
// 单据状态
export const DOC_STATUS_UNREVIEWED = 1; // 未审核
export const DOC_STATUS_REVIEWED = 2; // 已审核
export const DOC_STATUS = {
[DOC_STATUS_UNREVIEWED]: '未审核',
[DOC_STATUS_REVIEWED]: '已审核',
};
// 订单类型 // 订单类型
export enum OrderModalType { export enum OrderModalType {
......
...@@ -15,5 +15,6 @@ export const PATTERN_MAPS = { ...@@ -15,5 +15,6 @@ export const PATTERN_MAPS = {
phone: /^1[3|4|5|6|7|8|9][0-9]{9}$/, phone: /^1[3|4|5|6|7|8|9][0-9]{9}$/,
smsCode: /^\d{6}$/, smsCode: /^\d{6}$/,
money:/^\d*(?:\.\d{0,2})?$/, money:/^\d*(?:\.\d{0,2})?$/,
weight:/^\d*(?:\.\d{0,3})?$/, weight:/^\d*(?:\.\d{0,3})?$/,
quantity: /^[1-9]+[0-9]*$/, // 数量,大于等于1的正整数
} }
\ No newline at end of file
...@@ -33,6 +33,6 @@ const fetchInventory = (): Promise<any[]> => { ...@@ -33,6 +33,6 @@ const fetchInventory = (): Promise<any[]> => {
export const createEffects = (context, actions) => { export const createEffects = (context, actions) => {
useBusinessEffects(context, actions); useBusinessEffects(context, actions);
useAsyncSelect('invoicesTypeId', fetchInvoicesType, ['name', 'id']); useAsyncSelect('invoicesTypeId', fetchInvoicesType, ['name', 'number']);
useAsyncSelect('inventoryId', fetchInventory, ['name', 'id']); useAsyncSelect('inventoryId', fetchInventory, ['name', 'id']);
}; };
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-09-16 15:16:47 * @Date: 2020-09-16 15:16:47
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-09-17 21:17:00 * @LastEditTime: 2020-09-21 11:58:49
* @Description: 联动逻辑相关 * @Description: 联动逻辑相关
*/ */
import { FormEffectHooks, FormPath } from '@formily/antd'; import { FormEffectHooks, FormPath } from '@formily/antd';
...@@ -30,8 +30,7 @@ import Submit from '@/components/NiceForm/components/Submit'; ...@@ -30,8 +30,7 @@ import Submit from '@/components/NiceForm/components/Submit';
import DateSelect from '@/components/NiceForm/components/DateSelect'; import DateSelect from '@/components/NiceForm/components/DateSelect';
import { FORM_FILTER_PATH } from '@/formSchema/const'; import { FORM_FILTER_PATH } from '@/formSchema/const';
import { PublicApi } from '@/services/api'; import { PublicApi } from '@/services/api';
import { orderBillSchema, invoicesEnum } from '../schema'; import { orderBillSchema } from '../schema';
import { a } from '@/pages/editor/configs/componentConfigs/HTML';
const { const {
onFieldInputChange$, onFieldInputChange$,
...@@ -251,15 +250,9 @@ export const useBusinessEffects = (context, actions) => { ...@@ -251,15 +250,9 @@ export const useBusinessEffects = (context, actions) => {
// 根据 单据类型 联动 对应单据所选项 // 根据 单据类型 联动 对应单据所选项
onFieldValueChange$('invoicesTypeId').subscribe(fieldState => { onFieldValueChange$('invoicesTypeId').subscribe(fieldState => {
const origin = fieldState.originAsyncData;
const current = origin.find(item => item.id === fieldState.value);
const newEnum = [...getFieldState('relevanceInvoices', state => state.props.enum)]; const newEnum = [...getFieldState('relevanceInvoices', state => state.props.enum)];
if (!current) { switch (fieldState.value) {
return;
}
switch (current.number) {
// 采购入库单、销售发货单只能选择 订单 // 采购入库单、销售发货单只能选择 订单
case DOC_TYPE_PURCHASE_RECEIPT: case DOC_TYPE_PURCHASE_RECEIPT:
case DOC_TYPE_SALES_INVOICE: { case DOC_TYPE_SALES_INVOICE: {
...@@ -307,11 +300,11 @@ export const useBusinessEffects = (context, actions) => { ...@@ -307,11 +300,11 @@ export const useBusinessEffects = (context, actions) => {
// 对应单据改变 // 对应单据改变
onFieldValueChange$('relevanceInvoices').subscribe(fieldState => { onFieldValueChange$('relevanceInvoices').subscribe(fieldState => {
const params = getParams(fieldState.value); const params = getParams(fieldState.value);
linkage.componentProps('relevanceInvoicesId', params); linkage.componentProps('orderNo', params);
}); });
// 关联单据改变 // 关联单据改变
onFieldValueChange$('relevanceInvoicesId').subscribe(fieldState => { onFieldValueChange$('orderNo').subscribe(fieldState => {
const relevanceInvoicesVal = getFieldValue('relevanceInvoices'); const relevanceInvoicesVal = getFieldValue('relevanceInvoices');
const first = fieldState.value && fieldState.value[0]; const first = fieldState.value && fieldState.value[0];
...@@ -334,7 +327,7 @@ export const useBusinessEffects = (context, actions) => { ...@@ -334,7 +327,7 @@ export const useBusinessEffects = (context, actions) => {
label: `${item.productId}/${item.productName}/¥${item.price}`, label: `${item.productId}/${item.productName}/¥${item.price}`,
value: item.id, value: item.id,
})); }));
setFieldState('applyMember.*.good', state => { setFieldState('invoicesDetailsRequests.*.productName', state => {
FormPath.setIn(state, 'originAsyncData', res.data); FormPath.setIn(state, 'originAsyncData', res.data);
FormPath.setIn(state, 'props.enum', goodOptions); FormPath.setIn(state, 'props.enum', goodOptions);
}); });
...@@ -370,10 +363,12 @@ export const useBusinessEffects = (context, actions) => { ...@@ -370,10 +363,12 @@ export const useBusinessEffects = (context, actions) => {
default: default:
break; break;
} }
setFieldValue('invoicesDetailsRequests', []);
}); });
// 关联明细 商品下拉框 联动商品ID、单价 // 关联明细 商品下拉框 联动商品ID、单价
onFieldInputChange$('applyMember.*.good').subscribe(fieldState => { onFieldInputChange$('invoicesDetailsRequests.*.productName').subscribe(fieldState => {
const { name, originAsyncData, value } = fieldState; const { name, originAsyncData, value } = fieldState;
const current = originAsyncData.find(item => item.id === value); const current = originAsyncData.find(item => item.id === value);
...@@ -383,7 +378,7 @@ export const useBusinessEffects = (context, actions) => { ...@@ -383,7 +378,7 @@ export const useBusinessEffects = (context, actions) => {
setFieldState( setFieldState(
FormPath.transform(name, /\d/, $1 => { FormPath.transform(name, /\d/, $1 => {
return `applyMember.${$1}.goodId` return `invoicesDetailsRequests.${$1}.productId`
}), }),
state => { state => {
state.value = current.productId; state.value = current.productId;
...@@ -391,11 +386,58 @@ export const useBusinessEffects = (context, actions) => { ...@@ -391,11 +386,58 @@ export const useBusinessEffects = (context, actions) => {
); );
setFieldState( setFieldState(
FormPath.transform(name, /\d/, $1 => { FormPath.transform(name, /\d/, $1 => {
return `applyMember.${$1}.price` return `invoicesDetailsRequests.${$1}.price`
}), }),
state => { state => {
state.value = `¥${current.price}`; state.value = `¥${current.price}`;
} }
); );
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.productCount`
}),
state => {
state.value = '';
}
);
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.amount`
}),
state => {
state.value = '';
}
);
});
// 关联明细 商品数量 联动计算商品金额
onFieldInputChange$('invoicesDetailsRequests.*.productCount').subscribe(fieldState => {
const { name, value } = fieldState;
const originAsyncData = getFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.productName`
}),
state => state.originAsyncData,
);
const goodId = getFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.productName`
}),
state => state.value,
);;
const current = originAsyncData.find(item => item.id === goodId);
if (!current || isNaN(+value)) {
return;
}
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.amount`
}),
state => {
state.value = `¥${(+value * current.price).toFixed(2)}`;
}
);
}); });
} }
\ No newline at end of file
import React, { useState, useEffect, useRef } from 'react'; import React, { useState, useEffect, useRef } from 'react';
import { Button, Card, message } from 'antd'; import { Button, Card, message } from 'antd';
import { Radio, ArrayTable } from '@formily/antd-components'; import { Radio, ArrayTable } from '@formily/antd-components';
import { history } from 'umi'; import { history, Prompt } from 'umi';
import { usePageStatus } from '@/hooks/usePageStatus'; import { usePageStatus } from '@/hooks/usePageStatus';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { SaveOutlined, PlusOutlined } from '@ant-design/icons'; import { SaveOutlined, PlusOutlined } from '@ant-design/icons';
import { createFormActions, FormEffectHooks } from '@formily/antd'; import { createFormActions, FormEffectHooks } from '@formily/antd';
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'; import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
import { PublicApi } from '@/services/api'; import { PublicApi } from '@/services/api';
import ReutrnEle from '@/components/ReturnEle'; import ReutrnEle from '@/components/ReturnEle';
import NiceForm from '@/components/NiceForm'; import NiceForm from '@/components/NiceForm';
...@@ -17,51 +16,37 @@ import Submit from '@/components/NiceForm/components/Submit'; ...@@ -17,51 +16,37 @@ import Submit from '@/components/NiceForm/components/Submit';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'; import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const'; import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect'; import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { getBillsDetailSchema, goodsSearchSchema } from './schema'; import {
DEPENDENT_DOC_ORDER,
DEPENDENT_DOC_EXCHANGE,
DEPENDENT_DOC_RETURN,
DEPENDENT_DOC_PRODUCTION,
DEPENDENT_DOC_INTERNAL,
DOC_TYPE_PURCHASE_RECEIPT,
DOC_TYPE_SALES_INVOICE,
DOC_TYPE_PROCESS_RECEIPT,
DOC_TYPE_PROCESS_INVOICE,
DOC_TYPE_RETURN_INVOICE,
DOC_TYPE_RETURN_RECEIPT,
DOC_TYPE_EXCHANGE_INVOICE,
DOC_TYPE_EXCHANGE_RECEIPT,
} from '@/constants';
import { addBillSchema, goodsSearchSchema } from './schema';
import { createEffects } from './effects'; import { createEffects } from './effects';
const addSchemaAction = createFormActions(); const addSchemaAction = createFormActions();
const { const {
onFieldValueChange$, onFormInputChange$,
onFieldInputChange$,
} = FormEffectHooks; } = FormEffectHooks;
const AddBills: React.FC<{}> = (props: any) => { const AddBills: React.FC<{}> = (props: any) => {
const { pageStatus, preview, id } = usePageStatus(); const { pageStatus, preview, id } = usePageStatus();
const [relevance, setRelevance] = useState(1);
const [modalColumns, setModalColumns] = useState([]);
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const [productRowSelection, productRowCtl] = useRowSelectionTable({ type: 'checkbox' }); const [productRowSelection, productRowCtl] = useRowSelectionTable({ type: 'checkbox' });
const [unsaved, setUnsaved] = useState(false);
const tableColumns = [ const [infoLoading, setInfoLoading] = useState(false);
{ dataIndex: 'id', title: 'ID' }, const [submitLoading, setSubmitLoading] = useState(false);
{
dataIndex: 'no',
title: '货号',
render: (text, record) => <span>{text}</span>,
},
{ dataIndex: 'pname', title: '货品名称' },
{ dataIndex: 'size', title: '规格/型号' },
{ dataIndex: 'type', title: '品类' },
{ dataIndex: 'brand', title: '品牌' },
{ dataIndex: 'unit', title: '单位' },
{ dataIndex: 'name', title: '商品名称' },
{ dataIndex: 'univalence', title: '单价' },
{ dataIndex: 'numberr', title: '单据数量' },
{ dataIndex: 'price', title: '金额' },
{
dataIndex: 'ctl',
title: '操作',
render: (text, record) => (
<Button type="link" onClick={() => handleDeleteTable(record.id)}>
删除
</Button>
),
},
];
const goodsColumns: any[] = [ const goodsColumns: any[] = [
{ {
...@@ -116,18 +101,14 @@ const AddBills: React.FC<{}> = (props: any) => { ...@@ -116,18 +101,14 @@ const AddBills: React.FC<{}> = (props: any) => {
// 弹出单据明细 // 弹出单据明细
const handleAdd = () => { const handleAdd = () => {
const relevanceInvoicesIdVal = addSchemaAction.getFieldValue('relevanceInvoicesId'); const orderNoVal = addSchemaAction.getFieldValue('orderNo');
console.log('relevanceInvoicesIdVal', relevanceInvoicesIdVal); if (!orderNoVal) {
if (!relevanceInvoicesIdVal) {
message.warning('请选择对应单据'); message.warning('请选择对应单据');
return; return;
} }
setVisible(true); setVisible(true);
}; };
// 删除选中单据明细
const handleDeleteTable = id => {};
const tableAddButton = ( const tableAddButton = (
<Button <Button
style={{ marginBottom: 16 }} style={{ marginBottom: 16 }}
...@@ -145,40 +126,102 @@ const AddBills: React.FC<{}> = (props: any) => { ...@@ -145,40 +126,102 @@ const AddBills: React.FC<{}> = (props: any) => {
}, []); }, []);
const handleSubmit = value => { const handleSubmit = value => {
if (pageStatus === 0) const { invoicesTypeId, orderNo, transactionTime, ...rest } = value;
return PublicApi.postWarehouseInvoicesAdd({ ...value }).then(res => { const payload = {
if (res.code === 1000) return history.goBack(); orderNo: orderNo[0].id,
}); transactionTime: transactionTime ? transactionTime.format('YYYY-MM-DD HH:mm:ss') : '',
else ...rest,
return PublicApi.postWarehouseInvoicesUpdata({ };
id: usePageStatus().id,
...value, setSubmitLoading(true);
}).then(res => { switch (invoicesTypeId) {
if (res.code === 1000) return history.goBack(); // 采购入库单只能选择 订单
}); case DOC_TYPE_PURCHASE_RECEIPT: {
PublicApi.postOrderPurchaseReceiptAdd(payload)
.then(res => {
if (res.code !== 1000) {
return;
}
setUnsaved(false);
setTimeout(() => {
history.goBack();
}, 800);
}).finally(() => {
setSubmitLoading(false);
});
break;
}
// 销售发货单
case DOC_TYPE_SALES_INVOICE: {
break;
}
// 加工入库单
case DOC_TYPE_PROCESS_RECEIPT: {
break;
}
// 加工发货单
case DOC_TYPE_PROCESS_INVOICE: {
break;
}
// 退货发货单
case DOC_TYPE_RETURN_INVOICE: {
break;
}
// 退货入库单
case DOC_TYPE_RETURN_RECEIPT: {
break;
}
// 换货发货单
case DOC_TYPE_EXCHANGE_INVOICE: {
break;
}
// 换货入库单
case DOC_TYPE_EXCHANGE_RECEIPT: {
break;
}
default: {
break;
}
}
}; };
// 选择单据明细 // 选择单据明细
const handleOkAddProduct = async () => { const handleOkAddProduct = async () => {
console.log('productRowCtl.selectRow', productRowCtl.selectRow)
const values = productRowCtl.selectRow.map(item => ({ const values = productRowCtl.selectRow.map(item => ({
code: item.code, itemNo: item.code,
name: item.name, itemNmae: item.name,
type: item.type, specifications: item.type,
category: item.customerCategory.name, category: item.customerCategory.name,
brand: item.brand.name, brand: item.brand.name,
unitName: item.unitName, unit: item.unitName,
costPrice: `¥${item.costPrice}`, costPrice: `¥${item.costPrice}`,
good: undefined, productName: undefined,
goodId: '', productId: '',
price: '', price: '',
quantity: '', productCount: '',
amount: '', amount: '',
})); }));
addSchemaAction.setFieldValue('applyMember', values); addSchemaAction.setFieldValue('invoicesDetailsRequests', values);
setVisible(false); setVisible(false);
} }
// 获取货品列表
const fetchProductList = async (params) => { const fetchProductList = async (params) => {
const res = await PublicApi.getProductGoodsGetGoodsList({ const res = await PublicApi.getProductGoodsGetGoodsList({
...params, ...params,
...@@ -207,6 +250,7 @@ const AddBills: React.FC<{}> = (props: any) => { ...@@ -207,6 +250,7 @@ const AddBills: React.FC<{}> = (props: any) => {
key="1" key="1"
type="primary" type="primary"
icon={<SaveOutlined />} icon={<SaveOutlined />}
loading={submitLoading}
onClick={() => addSchemaAction.submit()} onClick={() => addSchemaAction.submit()}
> >
保存 保存
...@@ -218,20 +262,23 @@ const AddBills: React.FC<{}> = (props: any) => { ...@@ -218,20 +262,23 @@ const AddBills: React.FC<{}> = (props: any) => {
<Card> <Card>
<NiceForm <NiceForm
expressionScope={{ expressionScope={{
tableColumns,
tableAddButton, tableAddButton,
}} }}
components={{ components={{
RadioGroup: Radio.Group, RadioGroup: Radio.Group,
ArrayTable, ArrayTable,
}} }}
effects={($, actions) => createEffects($, actions)} effects={($, actions) => {
createEffects($, actions)
onFormInputChange$().subscribe(() => {
if (!unsaved) {
setUnsaved(true);
}
});
}}
onSubmit={handleSubmit} onSubmit={handleSubmit}
actions={addSchemaAction} actions={addSchemaAction}
schema={getBillsDetailSchema({ schema={addBillSchema}
relevance,
modalColumns,
})}
/> />
</Card> </Card>
...@@ -250,7 +297,7 @@ const AddBills: React.FC<{}> = (props: any) => { ...@@ -250,7 +297,7 @@ const AddBills: React.FC<{}> = (props: any) => {
components: { components: {
Search, Search,
Submit, Submit,
} , },
effects: ($, actions) => { effects: ($, actions) => {
useStateFilterSearchLinkageEffect( useStateFilterSearchLinkageEffect(
$, $,
...@@ -269,6 +316,8 @@ const AddBills: React.FC<{}> = (props: any) => { ...@@ -269,6 +316,8 @@ const AddBills: React.FC<{}> = (props: any) => {
rowKey: 'id', rowKey: 'id',
}} }}
/> />
<Prompt when={unsaved} message="您还有未保存的内容,是否确定要离开?" />
</PageHeaderWrapper> </PageHeaderWrapper>
); );
}; };
......
import React, { useState, useEffect, useRef } from 'react'; import React, { useState, useEffect, useRef } from 'react';
import { history } from 'umi'; import { history } from 'umi';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { Button, Card, Dropdown, Menu, Row, Col, Space, Badge } from 'antd'; import { Button, Card, Dropdown, Menu, Space, Badge, Popconfirm } from 'antd';
import { PlusOutlined, DownOutlined, DeleteOutlined } from '@ant-design/icons'; import { PlusOutlined, DownOutlined, DeleteOutlined, RollbackOutlined, SnippetsOutlined, ZoomOutOutlined } from '@ant-design/icons';
import { StandardTable } from 'god'; import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface'; import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview'; import EyePreview from '@/components/EyePreview';
...@@ -10,24 +10,28 @@ import NiceForm from '@/components/NiceForm'; ...@@ -10,24 +10,28 @@ import NiceForm from '@/components/NiceForm';
import { createFormActions, FormEffectHooks } from '@formily/antd'; import { createFormActions, FormEffectHooks } from '@formily/antd';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'; import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const'; import { FORM_FILTER_PATH } from '@/formSchema/const';
import { billsSchema } from './schema';
import UploadModal from '@/components/UploadModal'; import UploadModal from '@/components/UploadModal';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect'; import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { PublicApi } from '@/services/api'; import { PublicApi } from '@/services/api';
import { DOC_STATUS_UNREVIEWED, DOC_STATUS_REVIEWED, DOC_STATUS } from '@/constants';
import { billsSchema } from './schema';
const formActions = createFormActions(); const formActions = createFormActions();
// 模拟请求
const fetchData = async (params: any) => {
const res = await PublicApi.getWarehouseInvoicesList(params);
return res.data;
};
const Bills: React.FC<{}> = () => { const Bills: React.FC<{}> = () => {
const ref = useRef<any>({}); const ref = useRef<any>({});
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<string>>([]); const [selectedRowKeys, setSelectedRowKeys] = useState<Array<number>>([]);
const [visibleModal, setVisibleModal] = useState(false); const [visibleModal, setVisibleModal] = useState(false);
const [moreVisible, setMoreVisible] = useState(false); const [moreVisible, setMoreVisible] = useState(false);
const [batchLoading, setBatchLoading] = useState(false);
const fetchListData = async (params: any) => {
const res = await PublicApi.getWarehouseInvoicesList(params);
if (res.code === 1000) {
return res.data;
}
return [];
};
// 获取单据类型 // 获取单据类型
const fetchInvoicesType = async () => { const fetchInvoicesType = async () => {
...@@ -41,23 +45,129 @@ const Bills: React.FC<{}> = () => { ...@@ -41,23 +45,129 @@ const Bills: React.FC<{}> = () => {
return data.map(v => ({ label: v.name, value: v.id })); return data.map(v => ({ label: v.name, value: v.id }));
}; };
const deleteInvoices = (ids: number[], callback?: () => void) => {
setBatchLoading(true);
PublicApi.postWarehouseInvoicesBatchDelete({
ids,
}).then(res => {
if (res.code !== 1000) {
return;
}
if (callback) {
callback();
}
}).finally(() => {
setBatchLoading(false);
});
};
const auditInvoices = (ids: number[], callback?: () => void) => {
setBatchLoading(true);
PublicApi.postWarehouseInvoicesBatchReview({
ids,
}).then(res => {
if (res.code !== 1000) {
return;
}
if (callback) {
callback();
}
}).finally(() => {
setBatchLoading(false);
});
};
const counterclaimInvoices = (ids: number[], callback?: () => void) => {
setBatchLoading(true);
PublicApi.postWarehouseInvoicesBatchAgainstReview({
ids,
}).then(res => {
if (res.code !== 1000) {
return;
}
if (callback) {
callback();
}
}).finally(() => {
setBatchLoading(false);
});
};
const handleBatch = (key: React.ReactText) => {
if (!selectedRowKeys.length) {
return;
};
if (batchLoading) {
return;
}
// 这边应该需要过滤下数据,先不做,看看后台是否有过滤
switch (key) {
case 'BatchDelete': {
deleteInvoices(selectedRowKeys, () => {
setSelectedRowKeys([]);
ref.current.reload();
});
break;
}
case 'BatchAudit': {
auditInvoices(selectedRowKeys, () => {
setSelectedRowKeys([]);
ref.current.reload();
});
break;
}
case 'BatchCounterclaim': {
counterclaimInvoices(selectedRowKeys, () => {
setSelectedRowKeys([]);
ref.current.reload();
});
break;
}
default:
break;
}
};
const menu = ( const menu = (
<Menu onClick={e => handleBatchDel(e)}> <Menu onClick={e => handleBatch(e.key)}>
<Menu.Item key="1" icon={<DeleteOutlined />}> <Menu.Item key="DeleteBatch" icon={<ZoomOutOutlined />}>
删除导入批次 删除导入批次
</Menu.Item> </Menu.Item>
<Menu.Item key="BatchDelete" icon={<DeleteOutlined />}>
批量删除
</Menu.Item>
<Menu.Item key="BatchAudit" icon={<SnippetsOutlined />}>
批量审核
</Menu.Item>
<Menu.Item key="BatchCounterclaim" icon={<RollbackOutlined />}>
批量反审
</Menu.Item>
</Menu> </Menu>
); );
const handleBatchDel = (e: any) => {}; const handleCounterclaim = id => {
counterclaimInvoices([id], () => {
setSelectedRowKeys([]);
ref.current.reload();
});
};
const handleMoreMenu = (e: any, record: any) => { const handleAudit = id => {
if (e.key != '3') { auditInvoices([id], () => {
history.push( setSelectedRowKeys([]);
`/memberCenter/tranactionAbility/stockSellStorage/addBills?id=${record.id}`, ref.current.reload();
); });
} else { };
}
const handleDelete = id => {
deleteInvoices([id], () => {
setSelectedRowKeys([]);
ref.current.reload();
});
}; };
const columns: ColumnType<any>[] = [ const columns: ColumnType<any>[] = [
...@@ -116,41 +226,47 @@ const Bills: React.FC<{}> = () => { ...@@ -116,41 +226,47 @@ const Bills: React.FC<{}> = () => {
dataIndex: 'state', dataIndex: 'state',
key: 'state', key: 'state',
filters: [ filters: [
{ text: '未审核', value: 1 }, { text: DOC_STATUS[DOC_STATUS_UNREVIEWED], value: DOC_STATUS_UNREVIEWED },
{ text: '已审核', value: 2 }, { text: DOC_STATUS[DOC_STATUS_REVIEWED], value: DOC_STATUS_REVIEWED },
], ],
filterMultiple: false, filterMultiple: false,
render: (text: any, record: any) => ( onFilter: (value, record) => record.state === value,
render: (text) => (
<Badge <Badge
color={record.status === 1 ? '#C1C7D0' : '#41CC9E'} color={text === DOC_STATUS_UNREVIEWED ? '#C1C7D0' : '#41CC9E'}
text={record.status === 1 ? '未审核' : '已审核'} text={DOC_STATUS[text]}
/> />
), ),
}, },
{ {
title: '操作', title: '操作',
dataIndex: 'option', dataIndex: 'actions',
align: 'center', align: 'center',
render: (text: any, record: any) => { render: (_, record: any) => {
return ( return (
<> <>
<Button type="link">审核</Button> {record.state === DOC_STATUS_UNREVIEWED && (
<Dropdown <>
visible={moreVisible} <Button type="link" onClick={() => history.push(`/memberCenter/tranactionAbility/stockSellStorage/addBills?id=${record.id}`)}>修改</Button>
overlay={ <Button type="link" onClick={() => handleAudit(record.id)}>审核</Button>
<Menu onClick={e => handleMoreMenu(e, record)}> <Popconfirm
<Menu.Item key="1">修改</Menu.Item> title="确定要删除吗?"
<Menu.Item key="2">反审</Menu.Item> okText="是"
<Menu.Item key="3">删除</Menu.Item> cancelText="否"
</Menu> onConfirm={() => handleDelete(record.id)}
} >
trigger={['click']} <Button
> type="link"
<Button type="link" onClick={() => setMoreVisible(!moreVisible)}> danger
更多 >
<DownOutlined /> 删除
</Button> </Button>
</Dropdown> </Popconfirm>
</>
)}
{record.state === DOC_STATUS_REVIEWED && (
<Button type="link" onClick={() => handleCounterclaim(record.id)}>反审</Button>
)}
</> </>
); );
}, },
...@@ -159,7 +275,9 @@ const Bills: React.FC<{}> = () => { ...@@ -159,7 +275,9 @@ const Bills: React.FC<{}> = () => {
const rowSelection = { const rowSelection = {
selectedRowKeys: selectedRowKeys, selectedRowKeys: selectedRowKeys,
onChange: (selectedRowKeys: any, selectedRows: any) => {}, onChange: (selectedRowKeys: any[]) => {
setSelectedRowKeys(selectedRowKeys);
},
}; };
const controllerBtns = ( const controllerBtns = (
...@@ -194,7 +312,7 @@ const Bills: React.FC<{}> = () => { ...@@ -194,7 +312,7 @@ const Bills: React.FC<{}> = () => {
currentRef={ref} currentRef={ref}
tableProps={{ rowKey: 'id' }} tableProps={{ rowKey: 'id' }}
rowSelection={rowSelection} rowSelection={rowSelection}
fetchTableData={(params: any) => fetchData(params)} fetchTableData={(params: any) => fetchListData(params)}
controlRender={ controlRender={
<NiceForm <NiceForm
actions={formActions} actions={formActions}
......
...@@ -25,30 +25,41 @@ const AddWarehouse: React.FC<{}> = (props: any) => { ...@@ -25,30 +25,41 @@ const AddWarehouse: React.FC<{}> = (props: any) => {
const [submitLoading, setSubmitLoading] = useState(false); const [submitLoading, setSubmitLoading] = useState(false);
const getWarehouseInfo = async () => { const getWarehouseInfo = async () => {
if (!id) { if (id) {
return; setInfoLoading(true);
} const infoRes = await PublicApi.getWarehouseWarehouseDetails({
setInfoLoading(true); id,
const infoRes = await PublicApi.getWarehouseWarehouseDetails({
id,
});
const areaRes = await PublicApi.getManageAreaAll();
if (areaRes.code === 1000) {
const { data } = areaRes;
formActions.setFieldState('provinceId', targetState => {
targetState.originData = data;
targetState.props.enum = data.map(v => ({
label: v.name,
value: v.id,
}));
}); });
const areaRes = await PublicApi.getManageAreaAll();
if (areaRes.code === 1000) {
const { data } = areaRes;
formActions.setFieldState('provinceId', targetState => {
targetState.originData = data;
targetState.props.enum = data.map(v => ({
label: v.name,
value: v.id,
}));
});
}
if (infoRes.code === 1000) {
setInfo(infoRes.data);
}
setInfoLoading(false);
} else {
const areaRes = await PublicApi.getManageAreaAll();
if (areaRes.code === 1000) {
const { data } = areaRes;
formActions.setFieldState('provinceId', targetState => {
targetState.originData = data;
targetState.props.enum = data.map(v => ({
label: v.name,
value: v.id,
}));
});
}
} }
if (infoRes.code === 1000) {
setInfo(infoRes.data);
}
setInfoLoading(false);
}; };
useEffect(() => { useEffect(() => {
......
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