From f13a77f3606057cd186c53a833e1bbe58175aafb Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期二, 06 一月 2026 10:36:41 +0800
Subject: [PATCH] Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/JiaShiDa

---
 management/config/env.ts                                                      |    3 
 management/src/pages/order/refundAudit/index.jsx                              |   42 +++++---
 management/src/pages/order/refundAudit/components/RefundDetailModal.jsx       |  110 +++++++++------------
 management/src/pages/refundRecords/components/RefundDetailModal.jsx           |   20 +--
 management/src/pages/company/list/components/addAndEdit.jsx                   |    4 
 management/src/pages/refundRecords/index.jsx                                  |   17 +++
 management/src/pages/user/list/index.jsx                                      |   28 +++++
 management/src/pages/company/detail/components/userManagement.jsx             |    7 
 management/src/pages/order/physicalGoodsOrder/components/OrderDetailModal.jsx |   33 +-----
 9 files changed, 139 insertions(+), 125 deletions(-)

diff --git a/management/config/env.ts b/management/config/env.ts
index b5a3889..312ac56 100644
--- a/management/config/env.ts
+++ b/management/config/env.ts
@@ -1,6 +1,7 @@
 export default {
   dev: {
-    SERVER_URL: 'https://jiashikang.cn/manage',
+    // SERVER_URL: 'https://jiashikang.cn/manage',
+    SERVER_URL: 'http://192.168.110.111:9908',
     IMAGE_URL: 'https://jiashikang.cn/images/', // 图片地址
   },
   test: {
diff --git a/management/src/pages/company/detail/components/userManagement.jsx b/management/src/pages/company/detail/components/userManagement.jsx
index 46efe71..614d5db 100644
--- a/management/src/pages/company/detail/components/userManagement.jsx
+++ b/management/src/pages/company/detail/components/userManagement.jsx
@@ -101,11 +101,12 @@
     },
     {
       title: '角色',
-      dataIndex: 'roleName',
+      dataIndex: 'roleType',
       align: 'center',
       hideInSearch: true,
-      render: (text) => {
-        return <Tag color="blue">{text}</Tag>;
+      valueEnum: {
+        3: '经销商',
+        2: '经销商(超管)',
       },
     },
     {
diff --git a/management/src/pages/company/list/components/addAndEdit.jsx b/management/src/pages/company/list/components/addAndEdit.jsx
index e167307..766b93f 100644
--- a/management/src/pages/company/list/components/addAndEdit.jsx
+++ b/management/src/pages/company/list/components/addAndEdit.jsx
@@ -30,8 +30,8 @@
 
   const okHandle = () => {
     form.validateFields().then((values) => {
-      if (values.id) {
-        onUpdate(values);
+      if (editData.id) {
+        onUpdate({ id: editData.id, ...values });
       } else {
         onSave(values);
       }
diff --git a/management/src/pages/order/physicalGoodsOrder/components/OrderDetailModal.jsx b/management/src/pages/order/physicalGoodsOrder/components/OrderDetailModal.jsx
index e0c941f..3f5632a 100644
--- a/management/src/pages/order/physicalGoodsOrder/components/OrderDetailModal.jsx
+++ b/management/src/pages/order/physicalGoodsOrder/components/OrderDetailModal.jsx
@@ -59,12 +59,7 @@
         title: '商品简介',
         dataIndex: 'physicalGoodsIntro',
         ellipsis: true,
-      },
-      {
-        title: '销量',
-        dataIndex: 'physicalGoodsSales',
-        width: 80,
-      },
+      }
     ];
 
     const dataSource = [{
@@ -107,28 +102,10 @@
       ) : orderDetail ? (
         <>
           <Descriptions column={2} bordered>
-            {orderDetail.status === 1 ? (
-              <>
-                <Descriptions.Item label="订单编号">{orderDetail.code}</Descriptions.Item>
-                <Descriptions.Item label="下单时间">{orderDetail.createTime}</Descriptions.Item>
-                {/* <Descriptions.Item label="订单价格">¥{orderDetail.orderPrice || 0}</Descriptions.Item> */}
-                <Descriptions.Item label="用户昵称">{orderDetail.userName}</Descriptions.Item>
-                <Descriptions.Item label="用户手机号">{orderDetail.phone}</Descriptions.Item>
-              </>
-            ) : (
-              <>
-                <Descriptions.Item label="订单编号">{orderDetail.code}</Descriptions.Item>
-                <Descriptions.Item label="下单时间">{orderDetail.createTime}</Descriptions.Item>
-                <Descriptions.Item label="用户昵称">{orderDetail.userName}</Descriptions.Item>
-                <Descriptions.Item label="当前状态">
-                  <span style={{ color: currentStatus.color }}>{currentStatus.text}</span>
-                </Descriptions.Item>
-                <Descriptions.Item label="用户手机号">{orderDetail.phone}</Descriptions.Item>
-                <Descriptions.Item label="已支付">¥{orderDetail.paymentPrice || 0}</Descriptions.Item>
-                <Descriptions.Item label="支付时间">{orderDetail.paymentTime}</Descriptions.Item>
-                <Descriptions.Item label="支付方式">微信支付</Descriptions.Item>
-              </>
-            )}
+            <Descriptions.Item label="订单编号">{orderDetail.code}</Descriptions.Item>
+            <Descriptions.Item label="下单时间">{orderDetail.createTime}</Descriptions.Item>
+            <Descriptions.Item label="用户昵称">{orderDetail.userName}</Descriptions.Item>
+            <Descriptions.Item label="用户手机号">{orderDetail.phone}</Descriptions.Item>
           </Descriptions>
 
           {/* 商品信息 */}
diff --git a/management/src/pages/order/refundAudit/components/RefundDetailModal.jsx b/management/src/pages/order/refundAudit/components/RefundDetailModal.jsx
index 45d4efe..c887fa0 100644
--- a/management/src/pages/order/refundAudit/components/RefundDetailModal.jsx
+++ b/management/src/pages/order/refundAudit/components/RefundDetailModal.jsx
@@ -5,7 +5,7 @@
 
 const { Text } = Typography;
 
-const RefundDetailModal = ({ visible, onCancel, id }) => {
+const RefundDetailModal = ({ visible, onCancel, id, onRefresh }) => {
   const [orderDetail, setOrderDetail] = useState(null);
   const [loading, setLoading] = useState(false);
   const [auditForm] = Form.useForm();
@@ -59,21 +59,22 @@
       const params = {
         id,
         auditStatus: values.auditStatus,
-        auditRemark: values.auditRemark || '',
+        auditRemark: values.auditRemark,
       };
 
       const res = await refundAudit(params);
 
       if (res.code === 200) {
         message.success('审核成功');
-        fetchOrderDetail(); // 重新获取详情
-        auditForm.resetFields();
+        // 关闭弹窗
+        onCancel();
+        // 触发父组件刷新列表
+        if (onRefresh) {
+          onRefresh();
+        }
       } else {
         message.error(res.msg || '审核失败');
       }
-    } catch (error) {
-      console.error('审核失败:', error);
-      message.error('审核失败');
     } finally {
       setAuditLoading(false);
     }
@@ -145,7 +146,7 @@
   const renderDetailContent = () => {
     if (!orderDetail) return null;
 
-    const { status, paymentType, auditStatus } = orderDetail;
+    const { status, paymentType, refundStatus } = orderDetail;
 
     // 基础字段(所有状态都显示)
     const baseItems = [
@@ -171,16 +172,7 @@
       },
       {
         label: '审核状态',
-        children: (
-          <span style={{
-            color:
-              auditStatus === 1 ? '#faad14' :
-              auditStatus === 2 ? '#52c41a' :
-              '#f5222d'
-          }}>
-            {auditStatusMap[auditStatus] || auditStatus}
-          </span>
-        ),
+        children: auditStatusMap[refundStatus] || '-',
       },
       {
         label: '订单金额',
@@ -262,24 +254,24 @@
 
     // 审核相关字段
     const auditItems = [];
-    if (auditStatus >= 2) {
+    if (refundStatus == 2) {
       auditItems.push(
         {
           label: '审核结果',
-          children: auditStatus === 2 ? '审核通过' : '审核驳回',
+          children: refundStatus === 2 ? '审核通过' : '审核驳回',
         },
         {
           label: '审核时间',
           children: orderDetail.auditTime ? moment(orderDetail.auditTime).format('YYYY-MM-DD HH:mm:ss') : '-',
         },
+      );
+    }
+    if (refundStatus == 3) {
+      auditItems.push(
         {
-          label: '审核人',
-          children: orderDetail.auditorName || '-',
-        },
-        {
-          label: '审核意见',
+          label: '驳回原因',
           children: orderDetail.auditRemark || '-',
-        },
+        }
       );
     }
 
@@ -300,6 +292,16 @@
             {renderProductTable()}
           </div>
         </div>
+
+        {/* 备注 */}
+        {orderDetail.remark && (
+          <div style={{ marginTop: 24 }}>
+            <Text strong>备注</Text>
+            <div style={{ marginTop: 8 }}>
+              {orderDetail.remark}
+            </div>
+          </div>
+        )}
 
         {/* 图片凭证 */}
         {orderDetail.refundImages && (
@@ -322,12 +324,11 @@
         )}
 
         {/* 审核表单(仅待审核状态显示) */}
-        {orderDetail?.auditStatus === 1 && (
+        {orderDetail?.refundStatus === 1 && (
           <div style={{ marginTop: 24 }}>
             <Text strong>审核操作</Text>
             <Form
               form={auditForm}
-              layout="vertical"
               style={{ marginTop: 16 }}
             >
               <Form.Item
@@ -342,29 +343,25 @@
                   <Radio value={3}>审核驳回</Radio>
                 </Radio.Group>
               </Form.Item>
-
               <Form.Item
-                name="auditRemark"
-                label="审核意见"
-                rules={[
-                  {
-                    required: true,
-                    message: '请填写审核意见',
-                    validator: (_, value) => {
-                      if (form.getFieldValue('auditStatus') === 3 && !value) {
-                        return Promise.reject(new Error('驳回时必须填写驳回原因'));
-                      }
-                      return Promise.resolve();
-                    }
-                  }
-                ]}
+                noStyle
+                shouldUpdate={(prevValues, currentValues) =>
+                  prevValues.auditStatus !== currentValues.auditStatus
+                }
               >
-                <Input.TextArea
-                  rows={4}
-                  placeholder="请输入审核意见"
-                  maxLength={500}
-                  showCount
-                />
+                {() => (
+                  auditForm.getFieldValue('auditStatus') === 3 && (
+                    <Form.Item
+                      name="auditRemark"
+                      label="驳回原因"
+                      rules={[
+                        { required: true, message: '请输入驳回原因' },
+                      ]}
+                    >
+                      <Input.TextArea />
+                    </Form.Item>
+                  )
+                )}
               </Form.Item>
 
               <Form.Item>
@@ -376,21 +373,8 @@
                 >
                   提交审核
                 </Button>
-                <Button onClick={() => auditForm.resetFields()}>
-                  重置
-                </Button>
               </Form.Item>
             </Form>
-          </div>
-        )}
-
-        {/* 备注 */}
-        {orderDetail.remark && (
-          <div style={{ marginTop: 24 }}>
-            <Text strong>备注</Text>
-            <div style={{ marginTop: 8 }}>
-              {orderDetail.remark}
-            </div>
           </div>
         )}
       </div>
@@ -399,7 +383,7 @@
 
   return (
     <Modal
-      title="退款申请详情"
+      title="订单详情"
       open={visible}
       onCancel={onCancel}
       footer={[
diff --git a/management/src/pages/order/refundAudit/index.jsx b/management/src/pages/order/refundAudit/index.jsx
index bd0c883..7485a7d 100644
--- a/management/src/pages/order/refundAudit/index.jsx
+++ b/management/src/pages/order/refundAudit/index.jsx
@@ -40,7 +40,6 @@
       dataIndex: 'code',
       hideInSearch: true,
       width: 180,
-      copyable: true,
       ellipsis: true,
     },
     {
@@ -95,12 +94,12 @@
       dataIndex: 'deposit',
       hideInSearch: true,
       width: 100,
-      render: (text) => `¥${text}`,
+      render: (text) => `¥${text || '0.00'}`,
       search: false,
     },
     {
-      title: '退款',
-      dataIndex: 'refundAmount',
+      title: '尾款',
+      dataIndex: 'finalPayment',
       hideInSearch: true,
       width: 100,
       render: (text) => `¥${text || '0.00'}`,
@@ -122,6 +121,19 @@
       fixed: 'right',
       render: (_, record) => (
         <>
+          <Access accessible={(access.refundAudit_audit || false) && record.auditStatus === 1}>
+          <Button
+            type="link"
+            size="small"
+            onClick={() => {
+              setCurrentId(record.id);
+              setCurrentRecord(record);
+              setDetailVisible(true);
+            }}
+          >
+            审核
+          </Button>
+          </Access>
           <Access accessible={access.refundAudit_detail || false}>
             <Button
               type="link"
@@ -199,19 +211,18 @@
         ]}
         request={async (params) => {
           const { current, pageSize, ...rest } = params;
-
+          let queryParams = {
+            ...rest,
+            pageNum: current,
+            pageSize,
+          };
+          if (queryParams.bigGiftPackageName) {
+            queryParams.name = queryParams.bigGiftPackageName;
+          }
           // 保存搜索参数,用于导出
-          setSearchParams({
-            ...rest,
-            pageNum: current,
-            pageSize,
-          });
+          setSearchParams(queryParams);
 
-          const res = await pageRefundList({
-            ...rest,
-            pageNum: current,
-            pageSize,
-          });
+          const res = await pageRefundList(queryParams);
 
           return {
             data: res.data?.records || [],
@@ -237,6 +248,7 @@
           setCurrentRecord(null);
         }}
         id={currentId}
+        onRefresh={() => actionRef.current?.reload()}
       />
     </PageContainer>
   );
diff --git a/management/src/pages/refundRecords/components/RefundDetailModal.jsx b/management/src/pages/refundRecords/components/RefundDetailModal.jsx
index 303544a..fbfddec 100644
--- a/management/src/pages/refundRecords/components/RefundDetailModal.jsx
+++ b/management/src/pages/refundRecords/components/RefundDetailModal.jsx
@@ -116,7 +116,7 @@
   const renderDetailContent = () => {
     if (!orderDetail) return null;
 
-    const { status, paymentType, auditStatus } = orderDetail;
+    const { status, paymentType, refundStatus } = orderDetail;
 
     // 基础字段(所有状态都显示)
     const baseItems = [
@@ -145,11 +145,11 @@
         children: (
           <span style={{
             color:
-              auditStatus === 1 ? '#faad14' :
-              auditStatus === 2 ? '#52c41a' :
-              '#f5222d'
+              refundStatus === 1 ? '#faad14' :
+                refundStatus === 2 ? '#52c41a' :
+                  '#f5222d'
           }}>
-            {auditStatusMap[auditStatus] || auditStatus}
+            {auditStatusMap[refundStatus] || refundStatus}
           </span>
         ),
       },
@@ -233,11 +233,11 @@
 
     // 审核相关字段
     const auditItems = [];
-    if (auditStatus >= 2) {
+    if (status >= 2) {
       auditItems.push(
         {
           label: '审核结果',
-          children: auditStatus === 2 ? '审核通过' : '审核驳回',
+          children: status === 2 ? '审核通过' : '审核驳回',
         },
         {
           label: '审核时间',
@@ -310,11 +310,7 @@
       title="退款申请详情"
       open={visible}
       onCancel={onCancel}
-      footer={[
-        <button key="close" type="button" className="ant-btn" onClick={onCancel}>
-          关闭
-        </button>,
-      ]}
+      footer={false}
       width={800}
       destroyOnHidden
     >
diff --git a/management/src/pages/refundRecords/index.jsx b/management/src/pages/refundRecords/index.jsx
index 0e6f920..97922c4 100644
--- a/management/src/pages/refundRecords/index.jsx
+++ b/management/src/pages/refundRecords/index.jsx
@@ -50,6 +50,7 @@
       valueType: 'dateRange',
       width: 240,
       order: 2,
+      render: (_, record) => record.createTime || '-',
       search: {
         transform: (value) => ({
           time: value ? value.join(' - ') : undefined,
@@ -103,6 +104,22 @@
       width: 120,
     },
     {
+      title: '定金',
+      dataIndex: 'deposit',
+      hideInSearch: true,
+      width: 100,
+      render: (text) => `¥${text || '0.00'}`,
+      search: false,
+    },
+    {
+      title: '尾款',
+      dataIndex: 'finalPayment',
+      hideInSearch: true,
+      width: 100,
+      render: (text) => `¥${text || '0.00'}`,
+      search: false,
+    },
+    {
       title: '审核状态',
       dataIndex: 'auditStatus',
       valueType: 'select',
diff --git a/management/src/pages/user/list/index.jsx b/management/src/pages/user/list/index.jsx
index 4503ba7..ac67b1a 100644
--- a/management/src/pages/user/list/index.jsx
+++ b/management/src/pages/user/list/index.jsx
@@ -2,7 +2,7 @@
 import { PageContainer, ProTable } from '@ant-design/pro-components';
 import { Button, Space, Popconfirm, message, Modal, Input, Form, Avatar } from 'antd';
 import { getUserList, exportUserExcel, clearAllGold, batchUpdateIntegral, changeStatus } from './service';
-import { importFile, exportExcell } from '@/utils/utils';
+import { importFile, exportExcell, downLoad } from '@/utils/utils';
 import BatchUpdateIntegralModal from './components/BatchUpdateIntegralModal';
 import { history } from '@umijs/max';
 import { Access, useAccess } from 'umi';
@@ -126,6 +126,16 @@
   // 触发金币导入
   const triggerGoldImport = () => {
     goldFileInputRef.current?.click();
+  };
+
+  // 处理下载用户导入模板
+  const handleDownloadUserTemplate = () => {
+    downLoad('/t-app-user/import-template_user', '用户导入模板.xlsx');
+  };
+
+  // 处理下载金币导入模板
+  const handleDownloadGoldTemplate = () => {
+    downLoad('/t-app-user/import-template_gold', '金币导入模板.xlsx');
   };
 
   // 导出Excel
@@ -350,6 +360,22 @@
           defaultCollapsed: false,
         }}
         toolBarRender={() => [
+          <Access accessible={access.user_import || false}>
+            <Button
+              key="download-user-template"
+              onClick={handleDownloadUserTemplate}
+            >
+              导入用户模板
+            </Button>
+          </Access>,
+          <Access accessible={access.user_batchImportGold || false}>
+            <Button
+              key="download-gold-template"
+              onClick={handleDownloadGoldTemplate}
+            >
+              导入金币模板
+            </Button>
+          </Access>,
           <input
             ref={fileInputRef}
             type="file"

--
Gitblit v1.7.1