Quellcode durchsuchen

chore: 物料和物料信息绑定表格整理

xyh vor 2 Jahren
Ursprung
Commit
043b135918

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

@@ -98,3 +98,13 @@ export function editStorageType(data: {warehouseType: string; id: string}): Base
     url: '/maintenance/updateWarehouse',
   });
 }
+
+/** 导出物料信息 */
+export function exportMaterial(data: GetDictionaryListParams): any {
+  return request({
+    method: 'GET',
+    data,
+    url: `${BASE_URL}/export`,
+    skipError: true,
+  });
+}

+ 12 - 0
packages/app/src/apis/materialBind.ts

@@ -14,11 +14,13 @@ const BASE_URL = '/userMaterial';
 /** 获取绑定列表 */
 export function getMaterialBindList(
   data: GetMaterialBindrListParams,
+  signal?: AbortSignal,
 ): BaseListResult<MaterialBindListData> {
   return request({
     method: 'GET',
     url: `${BASE_URL}/getUserMaterial`,
     data,
+    signal,
   });
 }
 
@@ -66,3 +68,13 @@ export function getAllUser(signal?: AbortSignal): BaseResult<UserListData[]> {
     signal,
   });
 }
+
+/** 导出绑定信息 */
+export function exportUserBind(data: GetMaterialBindrListParams): any {
+  return request({
+    method: 'GET',
+    url: `${BASE_URL}/Export`,
+    data,
+    skipError: true,
+  });
+}

+ 0 - 2
packages/app/src/apis/request.ts

@@ -10,7 +10,6 @@ const http = axios.create({
     'Content-Type': 'application/json',
     'Cache-Control': 'no-cache',
   },
-  timeout: 10000,
 });
 
 const exportReg = /export|excel/i;
@@ -68,7 +67,6 @@ const GSHttp = axios.create({
     'Content-Type': 'application/json',
     'Cache-Control': 'no-cache',
   },
-  timeout: 10000,
 });
 
 GSHttp.interceptors.request.use(function (config) {

+ 1 - 1
packages/app/src/components/filter-selector-modal/hooks.ts

@@ -1,4 +1,4 @@
-import {FilterGroupMap} from '@hooks';
+import {FilterGroupMap} from '@components';
 import {FormEventHandler, useEffect, useMemo, useState} from 'react';
 
 export function useTransfer(

+ 1 - 2
packages/app/src/components/filter-selector-modal/index.tsx

@@ -1,8 +1,7 @@
-import {Modal} from '@components';
+import {Modal, FilterGroupMap} from '@components';
 import {Transfer} from 'antd';
 import {FC} from 'react';
 import {useTransfer} from './hooks';
-import {FilterGroupMap} from '@hooks';
 
 type Props = {
   visible: boolean;

+ 2 - 2
packages/app/src/hooks/use-options/index.ts

@@ -19,9 +19,9 @@ function useQueryOptions<T extends {id: number | string}, P extends unknown[]>(o
   const {data} = useQuery({
     queryKey: [fn.name, addAll, findValueFn, ...Object.values(params)],
     async queryFn({signal}) {
-      params.push(signal);
+      const newParams = [...params, signal] as unknown as P;
 
-      const data = await fn(...params);
+      const data = await fn(...newParams);
 
       if (data.msg === '200') {
         const list = data.data.map(function (value) {

+ 24 - 2
packages/app/src/hooks/use-table-export-event/index.ts

@@ -17,7 +17,7 @@ export function useTableExportEvent<T extends ListParams>({
   pageContext: ReturnType<typeof createPageContext>;
   context: Context<TableSearchContext<OriginalListParams<T>>>;
   fn: (params: T) => Promise<any>;
-}): [boolean, () => void] {
+}) {
   const [{page, pageSize}] = usePage(pageContext);
   const params = useContextSection(context, state => state[0]);
   const [isExporting, mutate] = useExportFile(fn);
@@ -29,5 +29,27 @@ export function useTableExportEvent<T extends ListParams>({
     [mutate, page, pageSize, params],
   );
 
-  return [isExporting, onExport];
+  return [isExporting, onExport] as const;
+}
+
+export function useTalbeExportWhiteParamsEvent<T extends ListParams>({
+  pageContext,
+  params,
+  fn,
+}: {
+  pageContext: ReturnType<typeof createPageContext>;
+  params: OriginalListParams<T>;
+  fn: (params: T) => Promise<any>;
+}) {
+  const [{page, pageSize}] = usePage(pageContext);
+  const [isExporting, mutate] = useExportFile(fn);
+
+  const onExport = useCallback(
+    function () {
+      mutate({...params, page: String(page), limit: String(pageSize)} as unknown as T);
+    },
+    [mutate, page, pageSize, params],
+  );
+
+  return [isExporting, onExport] as const;
 }

+ 6 - 4
packages/app/src/models/request/materialBind.ts

@@ -13,8 +13,10 @@ export type EditMaterialBindListParams = AddMaterialBindListParams & {id: string
 
 /** 获取物料绑定信息 */
 export type GetMaterialBindrListParams = {
-  /** 物料特来电id */
-  materialId: string;
-  /** 用户id */
-  userId: string;
+  /** 物料名称 */
+  materialName: string;
+  /** 物料编号 */
+  wllbCode: string;
+  /** 用户名称 */
+  userName: string;
 } & ListParams;

+ 13 - 3
packages/app/src/pages/goods/table/index.tsx

@@ -4,8 +4,8 @@ import {FC} from 'react';
 import {useHandle} from './hooks';
 import {context, pageContext, searchContext} from '../context';
 import EditModal from './modal';
-import {getDictionaryList} from '@apis';
-import {useContextSection, useQueryTableList} from '@hooks';
+import {exportMaterial, getDictionaryList} from '@apis';
+import {useContextSection, useQueryTableList, useTalbeExportWhiteParamsEvent} from '@hooks';
 import {DictionaryParamsType} from '@models';
 
 const TableList: FC = function () {
@@ -20,11 +20,21 @@ const TableList: FC = function () {
     searchContext,
   });
   const [{columns, editId, visible}, {onClose}] = useHandle();
+  const [isExporting, onExport] = useTalbeExportWhiteParamsEvent({
+    pageContext,
+    fn: exportMaterial,
+    params,
+  });
 
   return (
     <>
       <Card className='table-wrapper'>
-        <TableTools onRefresh={refetch} isRefreshing={isFetching} />
+        <TableTools
+          onRefresh={refetch}
+          isRefreshing={isFetching}
+          isExporting={isExporting}
+          onExport={onExport}
+        />
 
         <Table
           data-testid='goods_table'

+ 5 - 3
packages/app/src/pages/material-bind/context.ts

@@ -1,10 +1,12 @@
 import {createPageContext, createSearchContext, createTableSearchContext} from '@hooks';
+import {GetMaterialBindrListParams, OriginalListParams} from '@models';
 
 export const pageContext = createPageContext();
 export const searchContext = createSearchContext();
 
-export const contextState = {
-  userId: '',
-  materialId: '',
+export const contextState: OriginalListParams<GetMaterialBindrListParams> = {
+  materialName: '',
+  wllbCode: '',
+  userName: '',
 };
 export const context = createTableSearchContext(contextState);

+ 24 - 22
packages/app/src/pages/material-bind/filter/index.tsx

@@ -1,38 +1,40 @@
-import {FilterButtonGroup, FilterField, FilterFieldWrapper, FilterSelect} from '@components';
-import {useContextSection, useFilterField, useTableSearchEvent, useUserOptions} from '@hooks';
+import {FilterButtonGroup, FilterField, FilterFieldWrapper} from '@components';
+import {useContextSection, useFilterField, useTableSearchToolEvents} from '@hooks';
 import {Card} from 'antd';
 import {FC} from 'react';
 import {context, searchContext} from '../context';
 
 const Filter: FC = function () {
-  const userOptions = useUserOptions(true);
-  const [{materialId, userId}, onChange] = useFilterField({materialId: '', userId: ''});
-  const {isSearching, refetch} = useContextSection(searchContext, state => state[0]);
-  const onSearch = useTableSearchEvent(context, {materialId, userId});
+  const [fields, onChange] = useFilterField({
+    materialName: '',
+    wllbCode: '',
+    userName: '',
+  });
+  const {isSearching} = useContextSection(searchContext, state => state[0]);
+  const [, {onSearch, onReset}] = useTableSearchToolEvents(context, fields);
 
   return (
     <Card>
       <FilterFieldWrapper>
-        <FilterSelect
-          name='materialBindUser'
-          options={userOptions}
-          label='用户'
-          value={userId}
-          onChange={onChange('userId')}
-        />
         <FilterField
-          value={materialId}
+          value={fields.wllbCode}
           label='物料编号'
-          onChange={onChange('materialId')}
-          name='materialCode'
+          onChange={onChange('wllbCode')}
+          name='wllbCode'
         />
-
-        <FilterButtonGroup
-          offset={6}
-          onRefresh={refetch}
-          onSearch={onSearch}
-          isSearching={isSearching}
+        <FilterField
+          value={fields.materialName}
+          label='物料名称'
+          onChange={onChange('materialName')}
+          name='materialName'
+        />
+        <FilterField
+          value={fields.userName}
+          label='用户名称'
+          onChange={onChange('userName')}
+          name='userName'
         />
+        <FilterButtonGroup onSearch={onSearch} isSearching={isSearching} onReset={onReset} />
       </FilterFieldWrapper>
     </Card>
   );

+ 1 - 1
packages/app/src/pages/material-bind/table/hooks.tsx

@@ -8,7 +8,7 @@ import {DOUBLE_BTN_WIDTH, HUGE_TABLE_WIDTH, MIDDLE_TABLE_WIDTH, NORMAL_TABLE_WID
 const tableColumns: ColumnsType<MaterialBindListData> = [
   {title: '物料编号', dataIndex: 'wllbCode', key: 'wllbCode', width: MIDDLE_TABLE_WIDTH},
   {title: '物料名称', dataIndex: 'materialName', key: 'materialName', width: HUGE_TABLE_WIDTH},
-  {title: '用户名称', dataIndex: 'realName', key: 'realName', width: MIDDLE_TABLE_WIDTH},
+  {title: '用户名称', dataIndex: 'userName', key: 'userName', width: MIDDLE_TABLE_WIDTH},
   {title: '修改人', dataIndex: 'modifyUser', key: 'modifyUser', width: NORMAL_TABLE_WIDTH},
   {title: '修改时间', dataIndex: 'modifyTime', key: 'modifyTime', width: MIDDLE_TABLE_WIDTH},
 ];

+ 11 - 4
packages/app/src/pages/material-bind/table/index.tsx

@@ -4,24 +4,31 @@ import {FC} from 'react';
 import {useHandle} from './hooks';
 import PutModal from './modal';
 import {context, pageContext, searchContext} from '../context';
-import {getMaterialBindList} from '@apis';
-import {useContextSection, useQueryTableList} from '@hooks';
+import {exportUserBind, getMaterialBindList} from '@apis';
+import {useContextSection, useQueryTableList, useTableExportEvent} from '@hooks';
 
 const TableList: FC = function () {
   const params = useContextSection(context, state => state[0]);
 
-  const [{data, count}, {refetch}] = useQueryTableList({
+  const [{data, count, isFetching}, {refetch}] = useQueryTableList({
     queryFn: getMaterialBindList,
     params,
     pageContext,
     searchContext,
   });
   const [{visible, columns, editId}, {onAdd, onClose}] = useHandle(refetch);
+  const [isExporting, onExport] = useTableExportEvent({pageContext, context, fn: exportUserBind});
 
   return (
     <>
       <Card className='table-wrapper'>
-        <TableTools onClick={onAdd} />
+        <TableTools
+          onAdd={onAdd}
+          onRefresh={refetch}
+          onExport={onExport}
+          isRefreshing={isFetching}
+          isExporting={isExporting}
+        />
 
         <Table
           columns={columns}