Yansen 2 yıl önce
ebeveyn
işleme
588a638b25

+ 6
- 0
config/routes.js Dosyayı Görüntüle

@@ -153,6 +153,12 @@ export default [
153 153
         name: '作业统计',
154 154
         component: './Machinery/OperationStatistics',
155 155
       },
156
+      {
157
+        path: '/Machinery/OperationStatistics/Detail',
158
+        name: '作业详情',
159
+        component: './Machinery/OperationStatistics/Detail',
160
+        hideInMenu: true,
161
+      },
156 162
     ],
157 163
   },
158 164
   {

+ 24
- 0
src/pages/Machinery/OperationStatistics/Detail.jsx Dosyayı Görüntüle

@@ -0,0 +1,24 @@
1
+import React from 'react';
2
+import { PageHeaderWrapper } from '@ant-design/pro-layout';
3
+import { Card, Divider } from 'antd';
4
+import Summary from './components/Summary';
5
+import Machines from './components/Machines';
6
+
7
+export default (props) => {
8
+  const { location } = props;
9
+  const { user: userId } = location.query || {};
10
+
11
+  return (
12
+    <PageHeaderWrapper>
13
+      <Card>
14
+        <p>
15
+          <Summary userId={userId} />
16
+        </p>
17
+        <Divider />
18
+        <p>
19
+          <Machines userId={userId} />
20
+        </p>
21
+      </Card>
22
+    </PageHeaderWrapper>
23
+  );
24
+};

+ 32
- 0
src/pages/Machinery/OperationStatistics/components/Machines.jsx Dosyayı Görüntüle

@@ -0,0 +1,32 @@
1
+import React from 'react';
2
+import { Spin, Tabs } from 'antd';
3
+import { getMachineryListByUser } from '@/services/device';
4
+
5
+export default (props) => {
6
+  const { userId } = props;
7
+
8
+  const [loading, setLoading] = React.useState(false);
9
+  const [machines, setMachines] = React.useState([]);
10
+
11
+  React.useEffect(() => {
12
+    if (userId) {
13
+      setLoading(true);
14
+      getMachineryListByUser(userId)
15
+        .then((res) => {
16
+          setMachines(res);
17
+          setLoading(false);
18
+        })
19
+        .catch((err) => {
20
+          console.error(err);
21
+          setLoading(false);
22
+        });
23
+    }
24
+  }, [userId]);
25
+
26
+  return (
27
+    <Spin spinning={loading}>
28
+      <h3 style={{ fontWeight: 700 }}>作业信息</h3>
29
+      <Tabs></Tabs>
30
+    </Spin>
31
+  );
32
+};

+ 34
- 0
src/pages/Machinery/OperationStatistics/components/Summary.jsx Dosyayı Görüntüle

@@ -0,0 +1,34 @@
1
+import React from 'react';
2
+import { Descriptions, Spin } from 'antd';
3
+import { getUserDetail } from '@/services/user';
4
+
5
+export default (props) => {
6
+  const { userId } = props;
7
+
8
+  const [loading, setLoading] = React.useState(false);
9
+  const [user, setUser] = React.useState({});
10
+
11
+  React.useEffect(() => {
12
+    if (userId) {
13
+      setLoading(true);
14
+      getUserDetail(userId)
15
+        .then((res) => {
16
+          setUser(res);
17
+          setLoading(false);
18
+        })
19
+        .catch((err) => {
20
+          console.error(err);
21
+          setLoading(false);
22
+        });
23
+    }
24
+  }, [userId]);
25
+
26
+  return (
27
+    <Spin spinning={loading}>
28
+      <Descriptions title="用户信息">
29
+        <Descriptions.Item label="姓名">{user.userName}</Descriptions.Item>
30
+        <Descriptions.Item label="电话">{user.phone}</Descriptions.Item>
31
+      </Descriptions>
32
+    </Spin>
33
+  );
34
+};

+ 4
- 0
src/pages/Machinery/OperationStatistics/index.jsx Dosyayı Görüntüle

@@ -1,4 +1,5 @@
1 1
 import React, { useState, useRef, useMemo } from 'react';
2
+import { Link } from 'umi';
2 3
 import { Button, Card, Table, message, Descriptions, Col, Row } from 'antd';
3 4
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
4 5
 import { getDeviceJobByOrg, exportDeviceJobByOrg } from '@/services/job';
@@ -15,6 +16,9 @@ export default (props) => {
15 16
       title: '人员',
16 17
       dataIndex: 'userName',
17 18
       key: 'userName',
19
+      render: (t, record) => (
20
+        <Link to={`/Machinery/OperationStatistics/detail?user=${record.userId}`}>{t || '-'}</Link>
21
+      ),
18 22
     },
19 23
     {
20 24
       title: '手机',

+ 7
- 0
src/services/device.js Dosyayı Görüntüle

@@ -51,3 +51,10 @@ export const addMachinery = (data) => request('/device', { method: 'post', data
51 51
  * @returns
52 52
  */
53 53
 export const deleteDevice = (id) => request(`/device/${id}`, { method: 'delete' });
54
+
55
+/**
56
+ * 获取用户作业农机列表
57
+ * @param {*} params
58
+ * @returns
59
+ */
60
+export const getMachineryListByUser = (userId) => request(`/device-job/user/${userId}/machinery`);

+ 3
- 1
src/utils/request.js Dosyayı Görüntüle

@@ -51,7 +51,9 @@ async function responseInterceptor(response, ctx) {
51 51
     const data = await response.clone().blob();
52 52
     const content = response.headers.get('content-disposition');
53 53
     const fileName = content.replace('attachment;filename=', '');
54
-    return downloadBlob(data, decodeURIComponent(fileName));
54
+    downloadBlob(data, decodeURIComponent(fileName));
55
+
56
+    return { code: 1000 };
55 57
   }
56 58
 
57 59
   return response;