zlisen преди 3 години
родител
ревизия
c949b2092c

+ 7
- 0
config/routes.js Целия файл

@@ -663,6 +663,13 @@ export default [
663 663
                 component: './statistics/activity/addRegistNum',
664 664
                 menuCode: '/building/list',
665 665
               },
666
+              {
667
+                path: '/statistics/activity/detail',
668
+                name: '查看',
669
+                hideInMenu: true,
670
+                component: './statistics/activity/detail',
671
+                menuCode: '/building/list',
672
+              },
666 673
               
667 674
               {
668 675
                 path: '/statistics/building',

+ 6
- 6
src/pages/statistics/activity/activityContent/index.jsx Целия файл

@@ -36,7 +36,6 @@ const activityOverView = props => {
36 36
 
37 37
   const [time, setTime] = useState();
38 38
 
39
-  
40 39
   //重置搜索
41 40
   const handleReset = e => {
42 41
     props.form.resetFields();
@@ -64,7 +63,6 @@ const activityOverView = props => {
64 63
     });
65 64
   };
66 65
 
67
-
68 66
   const { getFieldDecorator } = props.form;
69 67
   console.log(timeValue, 'timeValue');
70 68
   return (
@@ -77,14 +75,16 @@ const activityOverView = props => {
77 75
         <Form.Item>
78 76
           {getFieldDecorator('targetType')(
79 77
             <Select placeholder="活动类型" allowClear style={{ width: 150, marginLeft: '20px' }}>
80
-              <Option value="activity">报名活动</Option>
81
-              <Option value="help">助力活动</Option>
82
-              <Option value="group">拼团活动</Option>
83
-              <Option value="h5">H5活动</Option>
78
+              <Option value="dymic">报名</Option>
79
+              <Option value="look">带看</Option>
80
+              <Option value="house">团房</Option>
84 81
               <Option value="live">直播</Option>
85 82
             </Select>,
86 83
           )}
87 84
         </Form.Item>
85
+        <Form.Item style={{ marginTop: '20px', marginBottom: '20px' }}>
86
+          {getFieldDecorator('activityName')(<Input placeholder="请输入活动名称" />)}
87
+        </Form.Item>
88 88
         <Form.Item>
89 89
           <Button type="primary" htmlType="submit" style={{ marginLeft: '30px' }}>
90 90
             搜索

+ 1
- 1
src/pages/statistics/activity/addRegistNum.jsx Целия файл

@@ -121,7 +121,7 @@ class SharePersonNum extends React.Component {
121 121
           .milliseconds(999)
122 122
           .format('YYYY-MM-DDTHH:mm:ss') + '.999Z';
123 123
     }
124
-    console.log(startDate);
124
+
125 125
     this.state = {
126 126
       formData: {
127 127
         personFrom: '',

+ 207
- 56
src/pages/statistics/activity/compents/ContentTable.jsx Целия файл

@@ -1,5 +1,5 @@
1 1
 import React, { Component, useState, useEffect } from 'react';
2
-import { Card,Table,Button } from 'antd';
2
+import { Card, Table, Button } from 'antd';
3 3
 import EChart from '../../../../components/EchartsTest/EChart';
4 4
 import request from '../../../../utils/request';
5 5
 import apis from '../../../../services/apis';
@@ -36,50 +36,202 @@ const ContentTable = props => {
36 36
       })
37 37
       .catch();
38 38
   }
39
-  const columns = [
39
+
40
+  const toSharePersonNum = rowData => () => {
41
+    // const startDate = moment().subtract(dateType, 'day').toDate()
42
+    // const endDate = new Date()
43
+
44
+    if (rowData) {
45
+      router.push({
46
+        pathname: '/statistics/activity/sharePersonNum',
47
+        query: {
48
+          startDate: params.startDate,
49
+          endDate: params.endDate,
50
+          activityId: rowData.activityId,
51
+          activityType: rowData.activityType,
52
+          activityName: rowData.activityName,
53
+        },
54
+      });
55
+      return;
56
+    }
57
+  };
58
+
59
+  const toShareNum = rowData => () => {
60
+    // const startDate = moment().subtract(dateType, 'day').toDate()
61
+    // const endDate = new Date()
62
+    if (rowData) {
63
+      router.push({
64
+        pathname: '/statistics/activity/shareNum',
65
+        query: {
66
+          startDate: params.startDate,
67
+          endDate: params.endDate,
68
+          activityId: rowData.activityId,
69
+          activityType: rowData.activityType,
70
+          activityName: rowData.activityName,
71
+        },
72
+      });
73
+      return;
74
+    }
75
+  };
76
+
77
+  const toAddRegistNum = rowData => () => {
78
+    // const startDate = moment().subtract(dateType, 'day').toDate()
79
+    // const endDate = new Date()
80
+    // console.log(rowData, 'rowData')
81
+    if (rowData) {
82
+      router.push({
83
+        pathname: '/statistics/activity/addRegistNum',
84
+        query: {
85
+          startDate: params.startDate,
86
+          endDate: params.endDate,
87
+          activityId: rowData.activityId,
88
+          activityType: rowData.activityType,
89
+          activityName: rowData.activityName,
90
+        },
91
+      });
92
+      return;
93
+    }
94
+  };
95
+
96
+  const toAddVisitPersonNum = rowData => () => {
97
+    if (rowData) {
98
+      router.push({
99
+        pathname: '/statistics/activity/visitPersonNum',
100
+        query: {
101
+          startDate: params.startDate,
102
+          endDate: params.endDate,
103
+          activityId: rowData.activityId,
104
+          activityType: rowData.activityType,
105
+          activityName: rowData.activityName,
106
+        },
107
+      });
108
+      return;
109
+    }
110
+  };
111
+
112
+  const toAddVisitNum = rowData => () => {
113
+    if (rowData) {
114
+      router.push({
115
+        pathname: '/statistics/activity/visitNum',
116
+        query: {
117
+          startDate: params.startDate,
118
+          endDate: params.endDate,
119
+          activityId: rowData.activityId,
120
+          activityType: rowData.activityType,
121
+          activityName: rowData.activityName,
122
+        },
123
+      });
124
+      return;
125
+    }
126
+  };
127
+
128
+  const toDetail = rowData => {
129
+    if (rowData) {
130
+      router.push({
131
+        pathname: '/statistics/activity/detail',
132
+        query: {
133
+          startDate: params.startDate,
134
+          endDate: params.endDate,
135
+          targetId: rowData.activityId,
136
+          targetType: rowData.activityType,
137
+          targetName: rowData.activityName,
138
+          buildingId: '',
139
+        },
140
+      });
141
+  
142
+      return
143
+    }
144
+  }
145
+
146
+  let columns = [
147
+    {
148
+      title: '活动类型',
149
+      dataIndex: 'activityType',
150
+      key: 'activityType',
151
+      render: (text, records) => {
152
+        if (records.activityType === 'live') {
153
+          return '直播活动';
154
+        }
155
+        if (records.activityType === 'look') {
156
+          return '一键带看';
157
+        }
158
+        if (records.activityType === 'house') {
159
+          return '团房活动';
160
+        }
161
+        if (records.activityType === 'dymic') {
162
+          return '报名活动';
163
+        }
164
+      },
165
+    },
40 166
     {
41 167
       title: '活动名称',
42
-      dataIndex: 'title',
43
-      key: 'title',
44
-      // sorter: true,
168
+      dataIndex: 'activityName',
169
+      key: 'activityName',
45 170
     },
46 171
     {
47 172
       title: '访问人数',
48 173
       dataIndex: 'visitPersonNum',
49
-      key: 'visit_person_num',
50
-      width: '25%',
174
+      key: 'visitPersonNum',
51 175
       sorter: true,
52
-      render: text => text || 0,
176
+      render: (text, record) => (
177
+        <Navigate onClick={toAddVisitPersonNum(record)}>{record.visitPersonNum}</Navigate>
178
+      ),
53 179
     },
54 180
     {
55 181
       title: '访问次数',
56 182
       dataIndex: 'visitNum',
57
-      key: 'visit_num',
58
-      width: '25%',
183
+      key: 'visitNum',
184
+      sorter: true,
185
+      render: (text, record) => (
186
+        <Navigate onClick={toAddVisitNum(record)}>{record.visitNum}</Navigate>
187
+        // <a style={{ color: '#66B3FF' }} onClick={toAddVisitNum(record)}><span>{record.visitNum}</span></a>
188
+      ),
189
+    },
190
+    {
191
+      title: '新增注册用户',
192
+      dataIndex: 'addRegistNum',
193
+      key: 'addRegistNum',
194
+      sorter: true,
195
+      render: (text, record) => (
196
+        <Navigate onClick={toAddRegistNum(record)}>{record.addRegistNum}</Navigate>
197
+        // <a style={{ color: '#66B3FF' }} onClick={toAddRegistNum(record)}><span>{record.addRegistNum}</span></a>
198
+      ),
199
+    },
200
+    {
201
+      title: '分享人数',
202
+      dataIndex: 'sharePersonNum',
203
+      key: 'sharePersonNum',
59 204
       sorter: true,
60
-      render: text => text || 0,
205
+      render: (text, record) => (
206
+        <Navigate onClick={toSharePersonNum(record)}>{record.sharePersonNum}</Navigate>
207
+      ),
61 208
     },
62 209
     {
63
-      title: '报名人数',
64
-      dataIndex: 'signNum',
65
-      key: 'sign_num',
66
-      width: '25%',
210
+      title: '分享次数',
211
+      dataIndex: 'shareNum',
212
+      key: 'shareNum',
67 213
       sorter: true,
68
-      // render: (text)=>text||0
69
-      render: (text, record) =>
70
-        text ? <Navigate onClick={() => toAddVisitNum(record)}>{record.signNum}</Navigate> : 0,
71
-      // <a style={{ color: '#66B3FF' }} onClick={toAddVisitNum(record)}><span>{record.visitNum}</span></a>
214
+      render: (text, record) => <Navigate onClick={toShareNum(record)}>{record.shareNum}</Navigate>,
215
+    },
216
+    {
217
+      title: '详情',
218
+      align: 'center',
219
+      render: (text, record) => (
220
+        <a style={{ color: '#FF4A4A' }} onClick={() => toDetail(record)}>
221
+          查看
222
+        </a>
223
+      ),
72 224
     },
73 225
   ];
74 226
 
75
-  const toAddVisitNum = record => {
76
-    router.push({
77
-      pathname: '/activity/SignupActivity/registrationRecord',
78
-      query: {
79
-        dynamicId: record.dynamicId,
80
-      },
81
-    });
82
-  };
227
+  // const toAddVisitNum = record => {
228
+  //   router.push({
229
+  //     pathname: '/activity/SignupActivity/registrationRecord',
230
+  //     query: {
231
+  //       dynamicId: record.dynamicId,
232
+  //     },
233
+  //   });
234
+  // };
83 235
 
84 236
   //排序
85 237
   const handleTableChange = (pagination, filters, sorter) => {
@@ -96,31 +248,36 @@ const ContentTable = props => {
96 248
     });
97 249
   };
98 250
 
99
- const exportActivityStats = () => {
100
-
101
-    request({ ...apis.activityDataStatis.activityDetailTableDataExport, params: params }).then(data => {
102
-      if (!data) {
103
-        return
104
-      }
105
-      const url = window.URL.createObjectURL(new Blob([data]))
106
-      const link = document.createElement('a')
107
-      link.style.display = 'none'
108
-      link.href = url
109
-      link.setAttribute('download', '活动统计.xlsx')
110
-      document.body.append(link)
111
-      link.click()
112
-    }).catch()
113
-  }
251
+  const exportActivityStats = () => {
252
+    request({ ...apis.activityDataStatis.activityDetailTableDataExport, params: params })
253
+      .then(data => {
254
+        if (!data) {
255
+          return;
256
+        }
257
+        const url = window.URL.createObjectURL(new Blob([data]));
258
+        const link = document.createElement('a');
259
+        link.style.display = 'none';
260
+        link.href = url;
261
+        link.setAttribute('download', '活动统计.xlsx');
262
+        document.body.append(link);
263
+        link.click();
264
+      })
265
+      .catch();
266
+  };
114 267
   return (
115 268
     <Card>
116
-        <div style={{textAlign:'right'}}> 
117
-        <AuthButton name="admin.statistical.activity.export" noRight={null}>
118
-              <Button type="primary" style={{ float: 'right', margin: '20px 0', zIndex: 1 }} onClick={exportActivityStats}>
119
-                导出
120
-            </Button>
121
-            </AuthButton>
122
-        </div>
123
-        
269
+      <div style={{ textAlign: 'right' }}>
270
+        <AuthButton name="admin.staisttics.activity.export" noRight={null}>
271
+          <Button
272
+            type="primary"
273
+            style={{ float: 'right', margin: '20px 0', zIndex: 1 }}
274
+            onClick={exportActivityStats}
275
+          >
276
+            导出
277
+          </Button>
278
+        </AuthButton>
279
+      </div>
280
+
124 281
       <Table
125 282
         columns={columns}
126 283
         dataSource={data?.records}
@@ -129,12 +286,6 @@ const ContentTable = props => {
129 286
         onChange={handleTableChange}
130 287
       ></Table>
131 288
     </Card>
132
-    // <>
133
-    //   <div ><p><span style={{fontSize:'0.12rem',fontWeight:'600'}}>活动趋势图</span></p></div>
134
-    //   <div style={{marginTop:'30px'}}>
135
-
136
-    //   </div>
137
-    // </>
138 289
   );
139 290
 };
140 291
 

+ 87
- 0
src/pages/statistics/activity/detail.jsx Целия файл

@@ -0,0 +1,87 @@
1
+import React, { Component, useState, useEffect, useRef } from 'react';
2
+import { Card, Row, Col, Statistic, Icon, Tabs, Form, Select, Button, Modal } from 'antd';
3
+// import IndexEcharts from './components/indexEcharts';
4
+// import Swiper from './swiper/index';
5
+import moment from 'moment';
6
+import router from 'umi/router';
7
+import request from '@/utils/request';
8
+import apis from '@/services/apis';
9
+import TimeSelect from '../compents/TimeSelect';
10
+import BuildingSelect from '@/components/SelectButton/BuildSelect';
11
+import Navigate from '@/components/Navigate';
12
+import NewUsers from './compents/NewUsers';
13
+import OverviewDeatil from './compents/OverviewDeatil';
14
+
15
+const activityOverView = props => {
16
+  const timeRef = useRef();
17
+
18
+  const [data, setData] = useState({});
19
+  const [serachData, setSearchData] = useState({
20
+    startDate:
21
+      moment()
22
+        .subtract(7, 'day')
23
+        .format('YYYY-MM-DDT00:00:00.000') + 'Z',
24
+    endDate: moment().format('YYYY-MM-DDT23:59:59.999') + 'Z',
25
+    ...props.location.query,
26
+  });
27
+  const [timeValue, setTimeValue] = useState();
28
+
29
+  const [time, setTime] = useState();
30
+
31
+  //重置搜索
32
+  const handleReset = e => {
33
+    props.form.resetFields();
34
+    timeRef.current.reset();
35
+    setSearchData({
36
+      startDate:
37
+        moment()
38
+          .subtract(7, 'day')
39
+          .format('YYYY-MM-DDT00:00:00.000') + 'Z',
40
+      endDate: moment().format('YYYY-MM-DDT23:59:59.999') + 'Z',
41
+    });
42
+  };
43
+
44
+  const onTimeChange = e => {
45
+    setTime(e);
46
+  };
47
+  const handleSubmit = e => {
48
+    props.form.validateFieldsAndScroll((err, values) => {
49
+      setTimeValue();
50
+      setSearchData({
51
+        ...values,
52
+        startDate: moment(time[0]).format('YYYY-MM-DDT00:00:00.000') + 'Z',
53
+        endDate: moment(time[1]).format('YYYY-MM-DDT23:59:59.999') + 'Z',
54
+      });
55
+    });
56
+  };
57
+
58
+  const { getFieldDecorator } = props.form;
59
+
60
+  return (
61
+    <div>
62
+      <Form layout="inline" onSubmit={handleSubmit}>
63
+        <Form.Item>
64
+          <TimeSelect onChange={onTimeChange} ref={timeRef}></TimeSelect>
65
+        </Form.Item>
66
+        <Form.Item>
67
+          <Button type="primary" htmlType="submit" style={{ marginLeft: '30px' }}>
68
+            搜索
69
+          </Button>
70
+          <Button onClick={e => handleReset()} style={{ marginLeft: '30px' }}>
71
+            重置
72
+          </Button>
73
+        </Form.Item>
74
+      </Form>
75
+
76
+      <div style={{ marginTop: '20px' }}>
77
+        <NewUsers params={serachData} dataZoom={false}></NewUsers>
78
+      </div>
79
+      <div style={{ marginTop: '20px' }}>
80
+        <OverviewDeatil params={serachData}></OverviewDeatil>
81
+      </div>
82
+    </div>
83
+  );
84
+};
85
+
86
+const WrappedTypeForm = Form.create()(activityOverView);
87
+export default WrappedTypeForm;

+ 3
- 3
src/pages/statistics/activity/sharePersonNum.jsx Целия файл

@@ -47,7 +47,7 @@ const toShareNum = rowData => () => {
47 47
 const toVisitPersonNum = rowData => () => {
48 48
   if (rowData) {
49 49
     router.push({
50
-      pathname: '/statistical/activity/visitPersonNum',
50
+      pathname: '/statistics/activity/visitPersonNum',
51 51
       query: {
52 52
         queryDate: queryDate,
53 53
         personId: rowData.personId,
@@ -65,7 +65,7 @@ const toVisitPersonNum = rowData => () => {
65 65
 const toVisitNum = rowData => () => {
66 66
   if (rowData) {
67 67
     router.push({
68
-      pathname: '/statistical/activity/visitNum',
68
+      pathname: '/statistics/activity/visitNum',
69 69
       query: {
70 70
         queryDate: queryDate,
71 71
         personId: rowData.personId,
@@ -325,7 +325,7 @@ class SharePersonNum extends React.Component {
325 325
             </Button>
326 326
             <Button onClick={e => this.handleReset()} style={{ marginLeft: '30px' }}>重置</Button>
327 327
           </Form.Item>
328
-          <AuthButton name="admin.statistical.activity.export" noRight={null}>
328
+          <AuthButton name="admin.statistics.activity.export" noRight={null}>
329 329
             <Button type="primary" style={{ float: 'right', zIndex: 1, marginTop: '24px' }} onClick={this.exportActivityStats}>
330 330
               导出
331 331
             </Button>

+ 1
- 1
src/pages/statistics/activity/visitNum.jsx Целия файл

@@ -335,7 +335,7 @@ class SharePersonNum extends React.Component {
335 335
               重置
336 336
             </Button>
337 337
           </Form.Item>
338
-          <AuthButton name="admin.statistical.activity.export" noRight={null}>
338
+          <AuthButton name="admin.statistics.activity.export" noRight={null}>
339 339
             <Button
340 340
               type="primary"
341 341
               style={{ float: 'right', margin: '20px 0', zIndex: 1 }}

+ 1
- 1
src/pages/statistics/activity/visitPersonNum.jsx Целия файл

@@ -245,7 +245,7 @@ class SharePersonNum extends React.Component {
245 245
             </Button>
246 246
             <Button onClick={e => this.handleReset()} style={{ marginLeft: '30px' }}>重置</Button>
247 247
           </Form.Item>
248
-          <AuthButton name="admin.statistical.activity.export" noRight={null}>
248
+          <AuthButton name="admin.statistics.activity.export" noRight={null}>
249 249
             <Button type="primary" style={{ float: 'right', margin: '20px 0', zIndex: 1 }} onClick={this.exportActivityStats}>
250 250
               导出
251 251
             </Button>

+ 1
- 1
src/services/apis.js Целия файл

@@ -1997,7 +1997,7 @@ export default {
1997 1997
     },
1998 1998
     activityDetailTableData: {
1999 1999
       method: 'GET',
2000
-      url: `${prefix}/statistics/activityList`,
2000
+      url: `${prefix}/activityStatistical/activityStatisDetail`,
2001 2001
       action: 'admin.contract.list.get',
2002 2002
     },
2003 2003
     activityDetailTableDataExport: {