Просмотр исходного кода

feat: 生产领用和非生产领用增加修改出库数量功能

xyh 2 лет назад
Родитель
Сommit
2164eb4afb

+ 10 - 0
packages/app/src/apis/queryList.ts

@@ -25,6 +25,7 @@ import {
   PurchaseScreenData,
   HomeGroupData,
   MainChartData,
+  EditOutNumberParams,
 } from '@models';
 import {request} from './request';
 
@@ -394,3 +395,12 @@ export function getMainFinishChartData(
     signal,
   });
 }
+
+/** 修改实际出库数量 */
+export function editOutNumber(data: EditOutNumberParams): BaseResult {
+  return request({
+    method: 'POST',
+    url: '/askGoods/editAskGoods',
+    data,
+  });
+}

+ 10 - 0
packages/app/src/models/request/queryList.ts

@@ -219,3 +219,13 @@ export type GetOtherOutParams = {
   /** 出库状态 0 出库完成 1 出库未完成 '' 全部 */
   type: '' | '0' | '1';
 } & ListParams;
+
+/** 修改实际出库数量 */
+export type EditOutNumberParams = {
+  /** 单据类型,0生产领料;1非生产领料 */
+  editType: string;
+  /** 单据ID */
+  id: string;
+  /** 出库数量 */
+  outNum: string;
+};

+ 43 - 0
packages/app/src/pages/production-requisition/table/edit-modal/hooks.ts

@@ -0,0 +1,43 @@
+import {editOutNumber} from '@apis';
+import {yupResolver} from '@hookform/resolvers/yup';
+import {useMutation} from '@tanstack/react-query';
+import {message} from 'antd';
+import {useEffect} from 'react';
+import {useForm} from 'react-hook-form';
+import {number, object} from 'yup';
+
+export function useFormState(
+  id: string,
+  visible: boolean,
+  options: {onFetch: () => void, onClose: () => void, type: '0' | '1'},
+) {
+  const {handleSubmit, control, reset} = useForm<{num: number}>({
+    defaultValues: {
+      num: 0,
+    },
+    resolver: yupResolver(object({
+      num: number().required('请输入出库数量').min(1, '出库数量不能小于1个'),
+    })),
+  });
+
+  useEffect(function() {
+    visible && reset();
+  }, [reset, visible]);
+
+  const {mutate, isLoading} = useMutation({
+    mutationFn: editOutNumber,
+    onSuccess(res) {
+      if (res.msg === '200') {
+        message.success('修改成功');
+        options.onClose();
+        options.onFetch();
+      }
+    },
+  });
+
+  const onSubmit = handleSubmit(function({num}) {
+    mutate({id, outNum: String(num), editType: options.type});
+  });
+
+  return [{isLoading, control}, onSubmit] as const;
+}

+ 39 - 0
packages/app/src/pages/production-requisition/table/edit-modal/index.tsx

@@ -0,0 +1,39 @@
+import {Modal, ModalField} from '@components';
+import {FC} from 'react';
+import {useFormState} from './hooks';
+
+type Props = {
+  onClose: () => void;
+  onFetch: () => void;
+  id: string;
+  visible: boolean;
+  type: '0' | '1'
+};
+
+const EditModal: FC<Props> = function({id, visible, onClose, onFetch, type}) {
+  const [{control, isLoading}, onSubmit] = useFormState(
+    id,
+    visible,
+    {
+      onFetch,
+      onClose,
+      type,
+    },
+  );
+
+  return (
+    <Modal
+      visible={visible}
+      title="修改出库明细"
+      onClose={onClose}
+      onSubmit={onSubmit}
+      isLoading={isLoading}
+      height="460px"
+      width="600px"
+    >
+      <ModalField label="出库数量" type="number" control={control} name="num" />
+    </Modal>
+  );
+};
+
+export default EditModal;

+ 28 - 3
packages/app/src/pages/production-requisition/table/hooks.tsx

@@ -3,6 +3,7 @@ import {ProductionRequisitionListData} from '@models';
 import {
   CODE_COL_WIDTH,
   COMPANY_COL_WIDTH,
+  DOUBLE_BTN_WIDTH,
   ENTYR_NUMBER_COL_WIDTH,
   HUGE_TABLE_WIDTH,
   MATERIAL_CODE_COL_WIDTH,
@@ -11,7 +12,12 @@ import {
   SMALL_TABLE_WIDTH,
   WBS_COL_WIDTH,
 } from '@utils';
-import {useContextSection, useSupertube, useTableDeleteEvent} from '@hooks';
+import {
+  useContextSection,
+  useSupertube,
+  useTableDeleteEvent,
+  useTableModalEvent,
+} from '@hooks';
 import {Button} from 'antd';
 import {delProductionRequisition, delUnProductionRequisition} from '@apis';
 import {context} from '../context';
@@ -124,6 +130,10 @@ export function useColumns(refetch: () => void) {
       label: `${type === '1' ? '生产' : '非生产'}领料单`,
     },
   );
+  const [
+    {editId: editState, visible},
+    {onEdit, onClose},
+  ] = useTableModalEvent<{id: string, type: '0' | '1'}>({id: '', type: '1'});
 
   const delColumns: ColumnsType<ProductionRequisitionListData> = [
     {
@@ -131,10 +141,18 @@ export function useColumns(refetch: () => void) {
       dataIndex: 'id',
       key: 'id',
       fixed: 'right',
-      width: SMALL_TABLE_WIDTH,
+      width: DOUBLE_BTN_WIDTH,
       render(_, {id, askGoodsCode}) {
         return (
           <>
+            <Button
+              type="text"
+              className="ant-text-btn-color-primary"
+              disabled={pendingId === id}
+              onClick={onEdit({id, type: type === '1' ? '0' : '1'})}
+            >
+              修改
+            </Button>
             <Button
               type="text"
               danger
@@ -150,5 +168,12 @@ export function useColumns(refetch: () => void) {
   ];
 
   const isSuper = useSupertube();
-  return isSuper ? [...columns, ...delColumns] : columns;
+  return [
+    {
+      columns: isSuper ? [...columns, ...delColumns] : columns,
+      editState,
+      visible,
+    },
+    {onClose},
+  ] as const;
 }

+ 15 - 1
packages/app/src/pages/production-requisition/table/index.tsx

@@ -18,6 +18,7 @@ import {Table, TableTools} from '@components';
 import {useColumns} from './hooks';
 import {useBoolean} from 'ahooks';
 import AddModal from './modal';
+import EditModal from './edit-modal';
 
 const TableList: FC = function() {
   const params = useContextSection(context, state => state[0]);
@@ -30,7 +31,10 @@ const TableList: FC = function() {
     pageContext,
     searchContext,
   });
-  const columns = useColumns(refetch);
+  const [
+    {columns, editState, visible: editVisible},
+    {onClose},
+  ] = useColumns(refetch);
   const [visible, {setTrue, setFalse}] = useBoolean();
   const isSuper = useSupertube();
   const [isExporting, onExport] = useTableExportEvent({
@@ -41,6 +45,7 @@ const TableList: FC = function() {
     context: context as any,
     pageContext,
   });
+
   return (
     <>
       <Card className="table-wrapper">
@@ -66,6 +71,15 @@ const TableList: FC = function() {
       {isSuper && (
         <AddModal visible={visible} onClose={setFalse} onFetch={refetch} />
       )}
+
+      {isSuper && (
+        <EditModal
+          visible={editVisible}
+          {...editState}
+          onClose={onClose}
+          onFetch={refetch}
+        />
+      )}
     </>
   );
 };