From e05481bd5cc560f3287ceb60f1f771329e27ae4d Mon Sep 17 00:00:00 2001
From: verou <857149855@qq.com>
Date: 星期二, 08 四月 2025 11:05:24 +0800
Subject: [PATCH] feat:收货单新增完成和关闭

---
 rsf-admin/src/page/asnOrder/AsnOrderList.jsx              |   43 ++++++++++++++++++---
 rsf-admin/src/page/components/BillStatusField.jsx         |   30 +++++++++++++++
 rsf-admin/src/page/components/EditTopToolBar.jsx          |    2 
 rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx             |    6 +-
 rsf-admin/src/page/components/ConfirmButton.jsx           |    2 
 rsf-admin/src/config/MyDataProvider.js                    |    2 -
 rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx |   13 +++++-
 rsf-admin/.env                                            |    2 
 rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx |    2 -
 9 files changed, 84 insertions(+), 18 deletions(-)

diff --git a/rsf-admin/.env b/rsf-admin/.env
index a3c69b2..a8ce658 100644
--- a/rsf-admin/.env
+++ b/rsf-admin/.env
@@ -1,3 +1,3 @@
-VITE_BASE_IP=127.0.0.1
+VITE_BASE_IP=192.168.4.24
 # VITE_BASE_IP=47.76.147.249
 VITE_BASE_PORT=8080
diff --git a/rsf-admin/src/config/MyDataProvider.js b/rsf-admin/src/config/MyDataProvider.js
index cfc312f..897d7ab 100644
--- a/rsf-admin/src/config/MyDataProvider.js
+++ b/rsf-admin/src/config/MyDataProvider.js
@@ -60,7 +60,6 @@
 
   // create a record
   create: async (resource, params) => {
-    console.log("create", resource, params);
     const res = await request.post(resource + "/save", params?.data);
     const { code, msg, data } = res.data;
     if (code === 200) {
@@ -75,7 +74,6 @@
 
   // update a record based on a patch
   update: async (resource, params) => {
-    console.log("update", resource, params);
     const res = await request.post(resource + "/update", {
       id: params.id,
       ...params.data,
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
index c4da83b..91aca74 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
@@ -41,6 +41,8 @@
 import EmptyData from "../components/EmptyData";
 import MyCreateButton from "../components/MyCreateButton";
 import MyExportButton from '../components/MyExportButton';
+import BillStatusField from '../components/BillStatusField';
+import ConfirmButton from '../components/ConfirmButton';
 import PageDrawer from "../components/PageDrawer";
 import MyField from "../components/MyField";
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
@@ -49,6 +51,7 @@
 import FileDownloadIcon from '@mui/icons-material/FileDownload';
 import EditIcon from '@mui/icons-material/Edit';
 import TaskIcon from '@mui/icons-material/Task';
+import CloseIcon from '@mui/icons-material/Close';
 import request from '@/utils/request';
 
 
@@ -62,7 +65,10 @@
   '& .column-name': {
   },
   '& .opt': {
-    width: 300
+    width: 320
+  },
+  '& .status': {
+    width: 90
   },
 }));
 
@@ -164,8 +170,7 @@
             <TextField source="nickname" />
           </ReferenceField>
           <DateField source="createTime" label="common.field.createTime" showTime />
-          <TextField source="exceStatus$" label="common.field.status" />
-          {/* <BooleanField source="statusBool" label="common.field.status" sortable={false} /> */}
+          <BillStatusField cellClassName="status" source="exceStatus" label="common.field.status" />
           <TextField source="memo" label="common.field.memo" sortable={false} />
           <WrapperField cellClassName="opt" label="common.field.opt" width={300} >
             {/* <Button label="toolbar.print" onClick={print}>
@@ -183,7 +188,8 @@
             </Button> */}
             <InspectionButton />
             <CompleteButton />
-            <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
+            {/* <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> */}
+            <CloseButton />
           </WrapperField>
         </StyledDatagrid>
       </List>
@@ -301,8 +307,33 @@
 
 
   return (
-    <Button onClick={requestComplete} label={"toolbar.complete"} color="success">
+    record.exceStatus === 1 && (record.anfme === record.qty ? <Button onClick={requestComplete} label={"toolbar.complete"} color="success">
       <TaskIcon />
-    </Button>
+    </Button> : <ConfirmButton label={"toolbar.complete"} color="success" data={'褰撳墠鏀惰揣鏁伴噺灏忎簬璁″垝鏁伴噺锛屾槸鍚︾‘璁ゅ畬鎴�'} startIcon={<TaskIcon />} onConfirm={requestComplete} />)
+
+  )
+
+
+}
+
+const CloseButton = () => {
+  const record = useRecordContext();
+  const notify = useNotify();
+  const refresh = useRefresh();
+  const requestClose = async () => {
+    const { data: { code, data, msg } } = await request.post(`/asnOrder/close/${record.id}`);
+
+    if (code === 200) {
+      notify(msg);
+      refresh()
+    } else {
+      notify(msg);
+    }
+  }
+
+  return (
+    (<Button onClick={requestClose} label={"toolbar.close"} color="error">
+      <CloseIcon />
+    </Button>)
   )
 }
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
index 61763e5..4e7f060 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
@@ -14,7 +14,7 @@
 import debounce from 'lodash/debounce';
 import { DataGrid } from '@mui/x-data-grid';
 import PrintModal from './PrintModal';
-import { width } from "@mui/system";
+import PrintIcon from '@mui/icons-material/Print';
 const AsnOrderPanel = ({ billReload }) => {
     const record = useRecordContext();
     if (!record) return null;
@@ -196,7 +196,7 @@
 
     return (
         <>
-            <Button size="small" variant="contained" color="secondary" onClick={modalChange}>{translate("toolbar.batchPrint")}</Button>
+            <Button size="small" color="secondary" onClick={modalChange} startIcon={<PrintIcon />}>{translate("toolbar.batchPrint")}</Button>
 
             <PrintModal
                 open={createDialog}
@@ -218,7 +218,7 @@
 
     return (
         <>
-            <Button size="small" variant="contained" color="secondary" onClick={() => setCreateDialog(true)}>{translate("toolbar.print")}</Button>
+            <Button size="small" color="secondary" onClick={() => setCreateDialog(true)} startIcon={<PrintIcon />}>{translate("toolbar.print")}</Button>
 
             <PrintModal
                 open={createDialog}
diff --git a/rsf-admin/src/page/components/BillStatusField.jsx b/rsf-admin/src/page/components/BillStatusField.jsx
new file mode 100644
index 0000000..b60ff1c
--- /dev/null
+++ b/rsf-admin/src/page/components/BillStatusField.jsx
@@ -0,0 +1,30 @@
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import {
+    useRecordContext,
+} from 'react-admin';
+import { Box, Typography, Card, Stack } from '@mui/material';
+import { useTheme } from '@mui/material/styles';
+import CircleIcon from '@mui/icons-material/Circle';
+
+const BillStatusField = () => {
+    const record = useRecordContext();
+    const theme = useTheme();
+    const color = {
+        0: '#BFBFBF',
+        1: '#FFC53D',
+        2: '#52C41A',
+        3: '#595959',
+        4: '#FF4D4F',
+    }
+    return (
+        <Typography
+            variant="body2"
+            sx={{ display: 'flex', alignItems: 'center' }}
+        >
+            <CircleIcon sx={{ fontSize: 10, color: color[record.exceStatus || 0], marginRight: '3px' }} /> {record.exceStatus$}
+        </Typography >
+    )
+
+}
+
+export default BillStatusField;
\ No newline at end of file
diff --git a/rsf-admin/src/page/components/ConfirmButton.jsx b/rsf-admin/src/page/components/ConfirmButton.jsx
index e39fe98..c315e7c 100644
--- a/rsf-admin/src/page/components/ConfirmButton.jsx
+++ b/rsf-admin/src/page/components/ConfirmButton.jsx
@@ -44,7 +44,7 @@
                 <DialogTitle>{translate('common.msg.confirm.tip')}</DialogTitle>
                 <DialogContent>
                     <DialogContentText>
-                        {translate('common.msg.confirm.desc')}
+                        {data ? data : translate('common.msg.confirm.desc')}
                     </DialogContentText>
                 </DialogContent>
                 <DialogActions>
diff --git a/rsf-admin/src/page/components/EditTopToolBar.jsx b/rsf-admin/src/page/components/EditTopToolBar.jsx
index fbbdb38..8a5c8f6 100644
--- a/rsf-admin/src/page/components/EditTopToolBar.jsx
+++ b/rsf-admin/src/page/components/EditTopToolBar.jsx
@@ -9,7 +9,7 @@
     const resource = useResourceContext();
     const translate = useTranslate();
 
-    
+
     return (
         <TopToolbar sx={{
             marginTop: 1,
diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx
index 80fac6f..d04c3e1 100644
--- a/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx
+++ b/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx
@@ -19,6 +19,8 @@
     required,
     useRecordContext,
     DeleteButton,
+    useNotify,
+    useRedirect,
 } from 'react-admin';
 import { useWatch, useFormContext } from "react-hook-form";
 import { Stack, Grid, Box, Typography } from '@mui/material';
@@ -30,11 +32,18 @@
 import StatusSelectInput from "../../../components/StatusSelectInput";
 
 const FormToolbar = () => {
-    const { getValues } = useFormContext();
+    const form = useFormContext();
+    const redirect = useRedirect();
+    const notify = useNotify();
+    const onSuccess = (data) => {
+        const { dictTypeId, dictTypeCode } = data
+        notify(`淇敼鎴愬姛!`);
+        redirect(`/dictData?dictTypeId=${dictTypeId}&code=${dictTypeCode}`);
+    }
 
     return (
         <Toolbar sx={{ justifyContent: 'space-between' }}>
-            <SaveButton />
+            <SaveButton type="button" mutationOptions={{ onSuccess }} />
             <DeleteButton mutationMode="optimistic" />
         </Toolbar>
     )
diff --git a/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx
index 7af9d9d..5506184 100644
--- a/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx
+++ b/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx
@@ -62,8 +62,6 @@
 
 const filters = [
     <SearchInput source="condition" alwaysOn />,
-    <DateInput label='common.time.after' source="timeStart" alwaysOn />,
-    <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
 
     <TextInput source="dictTypeId" label="table.field.dictData.dictTypeId" />,
     <TextInput source="dictTypeCode" label="table.field.dictData.dictTypeCode" />,

--
Gitblit v1.9.1