zlisen 3 år sedan
förälder
incheckning
3a1396ac58

+ 161
- 151
config/routes.js Visa fil

@@ -103,7 +103,7 @@ export default [
103 103
                 hideInMenu: true,
104 104
                 component: './customer/Customer/StatusChange',
105 105
               },
106
-              
106
+
107 107
               // {
108 108
               //   path: '/customer/drift/list',
109 109
               //   name: '游客列表',
@@ -116,7 +116,7 @@ export default [
116 116
                 component: './customer/Customer/PublicCustomer/publicCustomerDetail',
117 117
               },
118 118
 
119
-               {
119
+              {
120 120
                 path: '/customer/recommend/channel',
121 121
                 name: '经纪人报备',
122 122
                 component: './recommend/channel',
@@ -138,8 +138,6 @@ export default [
138 138
                 hideInMenu: true,
139 139
                 component: './recommend/customer/audit',
140 140
               },
141
-
142
-             
143 141
             ],
144 142
           },
145 143
 
@@ -254,7 +252,7 @@ export default [
254 252
               //   hideInMenu: true,
255 253
               //   component: './Live/video/add',
256 254
               // },
257
-              
255
+
258 256
               // {
259 257
               //   path: '/staff/Staff/Edit',
260 258
               //   name: '编辑员工',
@@ -314,7 +312,6 @@ export default [
314 312
                 hideInMenu: true,
315 313
                 component: './activity/groupRoomActivity/registrationRecord',
316 314
               },
317
-              
318 315
 
319 316
               {
320 317
                 path: '/activity/lookHouseActivity',
@@ -340,8 +337,6 @@ export default [
340 337
                 component: './activity/lookHouseActivity/registrationRecord',
341 338
               },
342 339
 
343
-
344
-
345 340
               {
346 341
                 path: '/activity/SignupActivity',
347 342
                 name: '报名活动',
@@ -389,7 +384,6 @@ export default [
389 384
               //   hideInMenu: true,
390 385
               //   component: './activity/SignupActivity/registrationRecord',
391 386
               // },
392
-              
393 387
             ],
394 388
           },
395 389
           {
@@ -562,7 +556,6 @@ export default [
562 556
                 hideInMenu: true,
563 557
                 component: './findRoom/buyRoom/audit',
564 558
               },
565
-              
566 559
 
567 560
               {
568 561
                 path: '/findRoom/rent',
@@ -604,7 +597,7 @@ export default [
604 597
                 name: '回访设置',
605 598
                 component: './findRoom/setting',
606 599
               },
607
-               {
600
+              {
608 601
                 path: '/findRoom/messageList',
609 602
                 name: '客户留言',
610 603
                 component: './system/messageList',
@@ -750,157 +743,174 @@ export default [
750 743
             ],
751 744
           },
752 745
           {
753
-            path: '/statistical',
746
+            path: '/statistics',
754 747
             name: '数据统计',
755 748
             component: '../layouts/BlankLayout',
756 749
             routes: [
757 750
               {
758
-                path: '/statistical',
759
-                redirect: '/statistical/monitor',
760
-              },
761
-              {
762
-                path: '/statistical/monitor',
751
+                path: '/statistics/dataReport',
763 752
                 name: '数据报表',
764
-                component: './statistical/Monitor',
753
+                component: './statistics/dataReport',
765 754
               },
766 755
               {
767
-                path: '/statistical/activity',
756
+                path: '/statistics/activity',
768 757
                 name: '活动统计',
769
-                component: './statistical/activity',
770
-              },
771
-              {
772
-                path: '/statistical/activity/detail',
773
-                name: '查看详情',
774
-                hideInMenu: true,
775
-                component: './statistical/activity/detail',
776
-              },
777
-              {
778
-                path: '/statistical/activity/sharePersonNum',
779
-                name: '分享统计',
780
-                hideInMenu: true,
781
-                component: './statistical/activity/sharePersonNum',
782
-              },
783
-              {
784
-                path: '/statistical/activity/shareNum',
785
-                name: '分享统计',
786
-                hideInMenu: true,
787
-                component: './statistical/activity/shareNum',
788
-              },
789
-              {
790
-                path: '/statistical/activity/addRegistNum',
791
-                name: '分享统计',
792
-                hideInMenu: true,
793
-                component: './statistical/activity/addRegistNum',
794
-              },
795
-              {
796
-                path: '/statistical/activity/visitNum',
797
-                name: '访问统计',
798
-                hideInMenu: true,
799
-                component: './statistical/activity/visitNum',
800
-              },
801
-              {
802
-                path: '/statistical/activity/visitPersonNum',
803
-                name: '访问统计',
804
-                hideInMenu: true,
805
-                component: './statistical/activity/visitPersonNum',
806
-              },
807
-              {
808
-                path: '/statistical/building',
809
-                name: '项目统计',
810
-                component: './statistical/building',
811
-              },
812
-              {
813
-                path: '/statistical/consultant',
814
-                name: '置业顾问KPI',
815
-                component: './statistical/consultant',
816
-              },
817
-
818
-              {
819
-                path: '/statistical/userSource',
820
-                name: '用户来源',
821
-                component: './indexEcharts/userSource',
822
-                hideInMenu: true,
823
-              },
824
-              {
825
-                path: '/statistical/newUsers',
826
-                name: '新增用户',
827
-                component: './indexEcharts/newUsers',
828
-                hideInMenu: true,
829
-              },
830
-              {
831
-                path: '/statistical/userBehavior',
832
-                name: '用户行为',
833
-                component: './indexEcharts/userBehavior',
834
-                hideInMenu: true,
835
-              },
836
-              {
837
-                path: '/statistical/building/detail',
838
-                name: '项目统计详情',
839
-                component: './statistical/building/detail',
840
-                hideInMenu: true,
841
-              },
842
-              {
843
-                path: '/statistical/consultant/table',
844
-                name: '客户总计',
845
-                hideInMenu: true,
846
-                component: './statistical/consultant/table',
847
-              },
848
-              {
849
-                path: '/statistical/consultant/newPersons',
850
-                name: '新增客户',
851
-                hideInMenu: true,
852
-                component: './statistical/consultant/table',
853
-              },
854
-              {
855
-                path: '/statistical/consultant/sharetable',
856
-                name: '分享次数',
857
-                hideInMenu: true,
858
-                component: './statistical/consultant/sharetable',
859
-              },
860
-              {
861
-                path: '/statistical/consultant/visitPersons',
862
-                name: '分享访问人数',
863
-                hideInMenu: true,
864
-                component: './statistical/consultant/visitPersons',
865
-              },
866
-              {
867
-                path: '/statistical/consultant/visitNum',
868
-                name: '分享访问次数',
869
-                hideInMenu: true,
870
-                component: './statistical/consultant/visitNum',
871
-              },
872
-              {
873
-                path: '/statistical/consultant/sharePersons',
874
-                name: '分享拓客',
875
-                hideInMenu: true,
876
-                component: './statistical/consultant/table',
877
-              },
878
-              {
879
-                path: '/statistical/consultant/homePagePersons',
880
-                name: '主页访问人数',
881
-                hideInMenu: true,
882
-                component: './statistical/consultant/homePagePersons',
883
-              },
884
-              {
885
-                path: '/statistical/consultant/homepageNum',
886
-                name: '主页访问次数',
887
-                hideInMenu: true,
888
-                component: './statistical/consultant/table',
889
-              },
890
-              {
891
-                path: '/statistical/consultant/chatPersons',
892
-                name: '咨询数',
893
-                hideInMenu: true,
894
-                component: './statistical/consultant/table',
895
-              },
896
-              {
897
-                path: '/statistical/consultant/favorNum',
898
-                name: '点赞数',
899
-                hideInMenu: true,
900
-                component: './statistical/consultant/table',
758
+                component: './statistics/activity',
901 759
               },
902 760
             ],
903 761
           },
762
+          // {
763
+          //   path: '/statistical',
764
+          //   name: '数据统计',
765
+          //   component: '../layouts/BlankLayout',
766
+          //   routes: [
767
+          //     {
768
+          //       path: '/statistical',
769
+          //       redirect: '/statistical/monitor',
770
+          //     },
771
+          //     {
772
+          //       path: '/statistical/monitor',
773
+          //       name: '数据报表',
774
+          //       component: './statistical/Monitor',
775
+          //     },
776
+          //     {
777
+          //       path: '/statistical/activity',
778
+          //       name: '活动统计',
779
+          //       component: './statistical/activity',
780
+          //     },
781
+          //     {
782
+          //       path: '/statistical/activity/detail',
783
+          //       name: '查看详情',
784
+          //       hideInMenu: true,
785
+          //       component: './statistical/activity/detail',
786
+          //     },
787
+          //     {
788
+          //       path: '/statistical/activity/sharePersonNum',
789
+          //       name: '分享统计',
790
+          //       hideInMenu: true,
791
+          //       component: './statistical/activity/sharePersonNum',
792
+          //     },
793
+          //     {
794
+          //       path: '/statistical/activity/shareNum',
795
+          //       name: '分享统计',
796
+          //       hideInMenu: true,
797
+          //       component: './statistical/activity/shareNum',
798
+          //     },
799
+          //     {
800
+          //       path: '/statistical/activity/addRegistNum',
801
+          //       name: '分享统计',
802
+          //       hideInMenu: true,
803
+          //       component: './statistical/activity/addRegistNum',
804
+          //     },
805
+          //     {
806
+          //       path: '/statistical/activity/visitNum',
807
+          //       name: '访问统计',
808
+          //       hideInMenu: true,
809
+          //       component: './statistical/activity/visitNum',
810
+          //     },
811
+          //     {
812
+          //       path: '/statistical/activity/visitPersonNum',
813
+          //       name: '访问统计',
814
+          //       hideInMenu: true,
815
+          //       component: './statistical/activity/visitPersonNum',
816
+          //     },
817
+          //     {
818
+          //       path: '/statistical/building',
819
+          //       name: '项目统计',
820
+          //       component: './statistical/building',
821
+          //     },
822
+          //     {
823
+          //       path: '/statistical/consultant',
824
+          //       name: '置业顾问KPI',
825
+          //       component: './statistical/consultant',
826
+          //     },
827
+
828
+          //     {
829
+          //       path: '/statistical/userSource',
830
+          //       name: '用户来源',
831
+          //       component: './indexEcharts/userSource',
832
+          //       hideInMenu: true,
833
+          //     },
834
+          //     {
835
+          //       path: '/statistical/newUsers',
836
+          //       name: '新增用户',
837
+          //       component: './indexEcharts/newUsers',
838
+          //       hideInMenu: true,
839
+          //     },
840
+          //     {
841
+          //       path: '/statistical/userBehavior',
842
+          //       name: '用户行为',
843
+          //       component: './indexEcharts/userBehavior',
844
+          //       hideInMenu: true,
845
+          //     },
846
+          //     {
847
+          //       path: '/statistical/building/detail',
848
+          //       name: '项目统计详情',
849
+          //       component: './statistical/building/detail',
850
+          //       hideInMenu: true,
851
+          //     },
852
+          //     {
853
+          //       path: '/statistical/consultant/table',
854
+          //       name: '客户总计',
855
+          //       hideInMenu: true,
856
+          //       component: './statistical/consultant/table',
857
+          //     },
858
+          //     {
859
+          //       path: '/statistical/consultant/newPersons',
860
+          //       name: '新增客户',
861
+          //       hideInMenu: true,
862
+          //       component: './statistical/consultant/table',
863
+          //     },
864
+          //     {
865
+          //       path: '/statistical/consultant/sharetable',
866
+          //       name: '分享次数',
867
+          //       hideInMenu: true,
868
+          //       component: './statistical/consultant/sharetable',
869
+          //     },
870
+          //     {
871
+          //       path: '/statistical/consultant/visitPersons',
872
+          //       name: '分享访问人数',
873
+          //       hideInMenu: true,
874
+          //       component: './statistical/consultant/visitPersons',
875
+          //     },
876
+          //     {
877
+          //       path: '/statistical/consultant/visitNum',
878
+          //       name: '分享访问次数',
879
+          //       hideInMenu: true,
880
+          //       component: './statistical/consultant/visitNum',
881
+          //     },
882
+          //     {
883
+          //       path: '/statistical/consultant/sharePersons',
884
+          //       name: '分享拓客',
885
+          //       hideInMenu: true,
886
+          //       component: './statistical/consultant/table',
887
+          //     },
888
+          //     {
889
+          //       path: '/statistical/consultant/homePagePersons',
890
+          //       name: '主页访问人数',
891
+          //       hideInMenu: true,
892
+          //       component: './statistical/consultant/homePagePersons',
893
+          //     },
894
+          //     {
895
+          //       path: '/statistical/consultant/homepageNum',
896
+          //       name: '主页访问次数',
897
+          //       hideInMenu: true,
898
+          //       component: './statistical/consultant/table',
899
+          //     },
900
+          //     {
901
+          //       path: '/statistical/consultant/chatPersons',
902
+          //       name: '咨询数',
903
+          //       hideInMenu: true,
904
+          //       component: './statistical/consultant/table',
905
+          //     },
906
+          //     {
907
+          //       path: '/statistical/consultant/favorNum',
908
+          //       name: '点赞数',
909
+          //       hideInMenu: true,
910
+          //       component: './statistical/consultant/table',
911
+          //     },
912
+          //   ],
913
+          // },
904 914
           {
905 915
             component: './404',
906 916
           },

+ 1
- 1
src/components/EchartsTest/EChart.jsx Visa fil

@@ -50,7 +50,7 @@ class EchartsTest extends Component {
50 50
 
51 51
     render () {
52 52
         const style = {
53
-            width: '600px',
53
+            width: '100%',
54 54
             height: '400px',
55 55
             ...this.props.style || {}
56 56
         }

+ 2
- 1
src/components/SelectButton/CitySelect2.jsx Visa fil

@@ -46,7 +46,7 @@ const CitySelect = (props) => {
46 46
   return (
47 47
       <Select
48 48
       showSearch
49
-      value={props.value}
49
+      value={props.value||''}
50 50
       style={{ width: '180px' }}
51 51
       placeholder="请选择城市"
52 52
       onChange={props.onChange}
@@ -54,6 +54,7 @@ const CitySelect = (props) => {
54 54
         option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0
55 55
       }
56 56
       >
57
+         {props.all&&<Option key={'all'} value={''}>全部</Option>}
57 58
           {data.map(city => (
58 59
             <Option key={city.id} value={city.id}>{city.name}</Option>
59 60
           ))}

+ 0
- 12
src/pages/activity/SignupActivity/index.jsx Visa fil

@@ -274,24 +274,12 @@ const SignupActivity = props => {
274 274
           </AuthButton>
275 275
         ) : null,
276 276
 
277
-        <AuthButton name="admin.buildingDynamic.tag" noRight={null}>
278
-          <EditIcon
279
-            type={row.weight === 1 ? 'cancel' : 'add'}
280
-            text={row.weight === 1 ? '取消标签' : '添加标签'}
281
-            onClick={topDynamic(row)}
282
-          />
283
-        </AuthButton>,
284
-
285 277
         <EditIcon
286 278
           type={row.home === 1 ? 'cancel' : 'top'}
287 279
           text={row.home === 1 ? '取消推首页' : '推荐首页'}
288 280
           onClick={homeDynamic(row)}
289 281
         />,
290 282
 
291
-        //   <AuthButton name="admin.buildingDynamic.dataRecord" noRight={null}>
292
-        //     <EditIcon type="record" text="数据记录" onClick={toDataReacord(row.dynamicId)} />
293
-        //   </AuthButton>,
294
-
295 283
         row.activityStatus === 0 || row.activityStatus === 1 ? (
296 284
           <AuthButton name="admin.buildingDynamic.update.put" noRight={null}>
297 285
             <EditIcon

+ 8
- 3
src/pages/activity/groupRoomActivity/edit/Basic.jsx Visa fil

@@ -19,7 +19,7 @@ const cancelPage = () => {
19 19
   router.go('-1');
20 20
 };
21 21
 
22
-const type= 'house'
22
+const type = 'house';
23 23
 
24 24
 const BasicForm = props => {
25 25
   const [isEnlist, setIsEnlist] = useState(1);
@@ -92,7 +92,7 @@ const BasicForm = props => {
92 92
           values.enlistEnd = moment(enlistEnd).format('YYYY-MM-DD HH:mm');
93 93
         }
94 94
 
95
-        values.type = type
95
+        values.type = type;
96 96
         if (dynamicId) {
97 97
           const checks = checkTime();
98 98
           if (checks != true) {
@@ -119,7 +119,7 @@ const BasicForm = props => {
119 119
           request({ ...apis.activity.add, data: { ...values } })
120 120
             .then(data => {
121 121
               message.info('保存成功');
122
-              router.go('-1')
122
+              router.go('-1');
123 123
             })
124 124
             .catch(err => {
125 125
               message.info(err.msg || err.message);
@@ -253,6 +253,11 @@ const BasicForm = props => {
253 253
             ],
254 254
           })(<Input type="number" min={1} />)}
255 255
         </Form.Item> */}
256
+        <Form.Item label="团房价">
257
+          {getFieldDecorator('groupBuyPrice', {
258
+          })(<Input />)}
259
+        </Form.Item>
260
+
256 261
         <Form.Item label="活动详情">{getFieldDecorator('desc')(<Wangedit />)}</Form.Item>
257 262
         <Form.Item label="报名时间">
258 263
           {getFieldDecorator('signupTime', {

+ 7
- 7
src/pages/activity/groupRoomActivity/index.jsx Visa fil

@@ -274,13 +274,13 @@ const GroupRoomActivity = props => {
274 274
           </AuthButton>
275 275
         ) : null,
276 276
 
277
-        <AuthButton name="admin.buildingDynamic.tag" noRight={null}>
278
-          <EditIcon
279
-            type={row.weight === 1 ? 'cancel' : 'add'}
280
-            text={row.weight === 1 ? '取消标签' : '添加标签'}
281
-            onClick={topDynamic(row)}
282
-          />
283
-        </AuthButton>,
277
+        // <AuthButton name="admin.buildingDynamic.tag" noRight={null}>
278
+        //   <EditIcon
279
+        //     type={row.weight === 1 ? 'cancel' : 'add'}
280
+        //     text={row.weight === 1 ? '取消标签' : '添加标签'}
281
+        //     onClick={topDynamic(row)}
282
+        //   />
283
+        // </AuthButton>,
284 284
 
285 285
         <EditIcon
286 286
           type={row.home === 1 ? 'cancel' : 'top'}

+ 0
- 27
src/pages/activity/lookHouseActivity/index.jsx Visa fil

@@ -75,19 +75,6 @@ const LookHouseActivity = props => {
75 75
     });
76 76
   };
77 77
 
78
-  //   置顶
79
-  const topDynamic = row => () => {
80
-    const weight = Math.abs(row.weight - 1);
81
-    request({ ...apis.activity.weight, params: { dynamicId: row.dynamicId, weight } })
82
-      .then(data => {
83
-        message.info('操作成功!');
84
-        ref.current.reload();
85
-      })
86
-      .catch(err => {
87
-        console.log(err);
88
-        message.info(err.msg || err.message);
89
-      });
90
-  };
91 78
 
92 79
   //   推首页
93 80
   const homeDynamic = row => () => {
@@ -266,32 +253,18 @@ const LookHouseActivity = props => {
266 253
           />
267 254
         </AuthButton>,
268 255
 
269
-        // //   <EditIcon type="look" text="查看详情" onClick={toSignupActivityDetail(row.dynamicId)} />,
270
-
271 256
         row.activityStatus === 0 ? (
272 257
           <AuthButton name="admin.buildingDynamic.finish.put" noRight={null}>
273 258
             <EditIcon type="end" text="结束活动" onClick={finishDynamic.bind(this, row)} />
274 259
           </AuthButton>
275 260
         ) : null,
276 261
 
277
-        <AuthButton name="admin.buildingDynamic.tag" noRight={null}>
278
-          <EditIcon
279
-            type={row.weight === 1 ? 'cancel' : 'add'}
280
-            text={row.weight === 1 ? '取消标签' : '添加标签'}
281
-            onClick={topDynamic(row)}
282
-          />
283
-        </AuthButton>,
284
-
285 262
         <EditIcon
286 263
           type={row.home === 1 ? 'cancel' : 'top'}
287 264
           text={row.home === 1 ? '取消推首页' : '推荐首页'}
288 265
           onClick={homeDynamic(row)}
289 266
         />,
290 267
 
291
-        //   <AuthButton name="admin.buildingDynamic.dataRecord" noRight={null}>
292
-        //     <EditIcon type="record" text="数据记录" onClick={toDataReacord(row.dynamicId)} />
293
-        //   </AuthButton>,
294
-
295 268
         row.activityStatus === 0 || row.activityStatus === 1 ? (
296 269
           <AuthButton name="admin.buildingDynamic.update.put" noRight={null}>
297 270
             <EditIcon

+ 4
- 4
src/pages/carouselFigure/customImg/edit.jsx Visa fil

@@ -86,10 +86,10 @@ const header = props => {
86 86
           label: '首页分享',
87 87
           value: 'index',
88 88
         },
89
-        {
90
-          label: '首页资讯',
91
-          value: 'indexNews',
92
-        },
89
+        // {
90
+        //   label: '首页资讯',
91
+        //   value: 'indexNews',
92
+        // },
93 93
       ],
94 94
       rules: [{ required: true, message: '请选择类型' }],
95 95
     },

+ 1
- 1
src/pages/carouselFigure/editCarousel.jsx Visa fil

@@ -172,7 +172,7 @@ const Edit = props => {
172 172
         help: () =>
173 173
           locationType
174 174
             ? '建议图片尺寸:750*250px,比例3:1,格式:jpg,用于积分商城banner轮播'
175
-            : '建议图片尺寸:750*464px,比例1.:0.618,格式:jpg,用于:首页顶部banner轮播',
175
+            : '建议图片尺寸:690*345px,比例1.:0.5,格式:jpg,用于:首页顶部banner轮播',
176 176
         rules: [{ required: true, message: '请上传轮播图' }],
177 177
       },
178 178
       {

+ 1
- 1
src/pages/staff/staff/Edit/index.jsx Visa fil

@@ -217,7 +217,7 @@ const StaffEdit = props => {
217 217
     {
218 218
       label: '简介',
219 219
       name: 'description',
220
-      render: <TextArea></TextArea>,
220
+      render: <TextArea rows={7}></TextArea>,
221 221
       value: userData.description,
222 222
       // className={channels.inpuitTxt}
223 223
     },

+ 41
- 0
src/pages/statistics/activity/index.jsx Visa fil

@@ -0,0 +1,41 @@
1
+import React, { Component, useState, useEffect } from 'react';
2
+import { Card, Row, Col, Statistic, Icon } from 'antd';
3
+// import IndexEcharts from './components/indexEcharts';
4
+// import Swiper from './swiper/index';
5
+import router from 'umi/router';
6
+import request from '@/utils/request';
7
+import apis from '@/services/apis';
8
+// import Count from './components/Count';
9
+// import SourceRole from './components/SourceRole';
10
+// import UserSex from './components/UserSex';
11
+// import UserConversion from './components/UserConversion';
12
+// import BuildingStatistic from './BuildingStatistic';
13
+
14
+const DataReport = props => {
15
+  const [data, setData] = useState([]);
16
+
17
+  return (
18
+    <>234
19
+      {/* <div style={{ marginBottom: '20px' }}>
20
+        <Count></Count>
21
+      </div>
22
+      <div style={{ marginBottom: '20px' }}>
23
+        <Row gutter={16} style={{ textAlign: 'center' }}>
24
+          <Col span={8}>
25
+            <SourceRole></SourceRole>
26
+          </Col>
27
+          <Col span={8}>
28
+            <UserSex></UserSex>
29
+          </Col>
30
+          <Col span={8}>
31
+            <UserConversion></UserConversion>
32
+          </Col>
33
+        </Row>
34
+      </div>
35
+      <div style={{ marginBottom: '20px' }}>
36
+        <BuildingStatistic></BuildingStatistic>
37
+      </div> */}
38
+    </>
39
+  );
40
+};
41
+export default DataReport;

+ 68
- 0
src/pages/statistics/compents/TimeSelect.jsx Visa fil

@@ -0,0 +1,68 @@
1
+import React, { Component, useState, useEffect } from 'react';
2
+import { Card, Row, Col, Statistic, Icon, Button, DatePicker } from 'antd';
3
+import ButtonGroup from 'antd/lib/button/button-group';
4
+import moment from 'moment';
5
+
6
+const { RangePicker } = DatePicker;
7
+const TimeSelect = props => {
8
+  const { value, onChange } = props;
9
+
10
+  const [rangePickerValue, setRangePickerValue] = useState();
11
+  const [type, setType] = useState('');
12
+  //   const [rangePickerValue,setRangePickerValue] = useState()
13
+  useEffect(() => {
14
+    setType('week');
15
+  }, []);
16
+  useEffect(() => {
17
+    console.log(type);
18
+    if (type == 'today') {
19
+      setRangePickerValue([moment().subtract('day'), moment()]);
20
+    } else if (type == 'week') {
21
+      setRangePickerValue([moment().subtract(1, 'week'), moment()]);
22
+    } else if (type == 'month') {
23
+      setRangePickerValue([moment().subtract(1, 'month'), moment()]);
24
+    }
25
+  }, [type]);
26
+
27
+  useEffect(() => {
28
+    if (rangePickerValue) {
29
+      onChange(rangePickerValue);
30
+    }
31
+  }, [rangePickerValue]);
32
+
33
+  const isActive = e => {
34
+    // const { rangePickerValue } = this.state;
35
+    // const value = getTimeDistance(type);
36
+    // if (!rangePickerValue[0] || !rangePickerValue[1]) {
37
+    //   return;
38
+    // }
39
+    // if (
40
+    //   rangePickerValue[0].isSame(value[0], 'day') &&
41
+    //   rangePickerValue[1].isSame(value[1], 'day')
42
+    // ) {
43
+    //   return styles.currentDate;
44
+    // }
45
+  };
46
+
47
+  const selectDate = e => {};
48
+
49
+  const handleRangePickerChange = e => {
50
+    onChange(e);
51
+  };
52
+
53
+  return (
54
+    <div style={{ display: 'flex' }}>
55
+      <div>
56
+        <Button type='link' style={type==='today'?undefined:{color:'rgba(0,0,0,0.65)'}} onClick={() => setType('today')}>今日</Button>
57
+        <Button type='link' style={type==='week'?undefined:{color:'rgba(0,0,0,0.65)'}} onClick={() => setType('week')}>本周</Button>
58
+        <Button type='link' style={type==='month'?undefined:{color:'rgba(0,0,0,0.65)'}} onClick={() => setType('month')}>本月</Button>
59
+      </div>
60
+      <RangePicker
61
+        value={rangePickerValue}
62
+        onChange={handleRangePickerChange}
63
+        style={{ width: 256 }}
64
+      />
65
+    </div>
66
+  );
67
+};
68
+export default TimeSelect;

+ 64
- 0
src/pages/statistics/dataReport/BuildingStatistic/component/StatsChart.jsx Visa fil

@@ -0,0 +1,64 @@
1
+import React, { Component, useState, useEffect } from 'react';
2
+import { Form, Icon, Input, Button, DatePicker, Select, Card, Row, Col, Pagination, Alert, Table, Avatar, Radio, Modal, Descriptions } from 'antd';
3
+import moment from 'moment';
4
+import echarts from 'echarts/lib/echarts';
5
+import EChart from '@/components/EchartsTest/EChart';
6
+import router from 'umi/router';
7
+
8
+class StatsChart extends React.Component {
9
+
10
+  constructor(props) {
11
+    super(props)
12
+    this.state = {}
13
+  }
14
+
15
+  render() {
16
+    const { data = {} } = this.props
17
+    const options = {
18
+      title: {
19
+        text: this.props.title,
20
+        subtext: this.props.subtext,
21
+      },
22
+      xAxis: {
23
+        type: 'category',
24
+        axisLabel: { rotate: 45 },
25
+        data: data.buildingNameList || []
26
+      },
27
+      grid: {
28
+        bottom: '30%'
29
+      },
30
+      tooltip: {},
31
+      yAxis: {
32
+        type: 'value'
33
+      },
34
+      series: {
35
+        type: 'bar',
36
+        name: this.props.title,
37
+        barWidth: 50,
38
+        data: data.numList || [],
39
+        itemStyle: {
40
+          normal: {
41
+            barBorderRadius: [50, 50, 0, 0],
42
+            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
43
+              offset: 0,
44
+              color: '#FFC6AA'
45
+            }, {
46
+              offset: 1,
47
+              color: '#FF7E48'
48
+            }]),
49
+            shadowColor: 'rgba(0, 0, 0, 0.4)',
50
+
51
+          }
52
+        }
53
+      }
54
+    }
55
+
56
+    return (
57
+      <>
58
+        <EChart options={options} style={{ width: '100%', height: '400px'}} />
59
+      </>
60
+    )
61
+  }
62
+}
63
+
64
+export default StatsChart

+ 81
- 0
src/pages/statistics/dataReport/BuildingStatistic/component/StatsChartLine.jsx Visa fil

@@ -0,0 +1,81 @@
1
+import React, { Component, useState, useEffect } from 'react';
2
+import { Form, Icon, Input, Button, DatePicker, Select, Card, Row, Col, Pagination, Alert, Table, Avatar, Radio, Modal, Descriptions } from 'antd';
3
+import moment from 'moment';
4
+import echarts from 'echarts/lib/echarts';
5
+import EChart from '../../../../components/EchartsTest/EChart';
6
+import router from 'umi/router';
7
+
8
+class StatsChart extends React.Component {
9
+
10
+  constructor(props) {
11
+    super(props)
12
+    this.state = {}
13
+  }
14
+
15
+  render() {
16
+    const { data = {}} = this.props
17
+    const options = {
18
+      title: {
19
+          text: this.props.title,
20
+      },
21
+      tooltip: {
22
+          trigger: 'axis'
23
+      },
24
+      legend: {
25
+          data: ['公客数', '私客数', '新增客户数', '访问人数']
26
+      },
27
+      grid: {
28
+          left: '3%',
29
+          right: '4%',
30
+          bottom: '3%',
31
+          containLabel: true
32
+      },
33
+      toolbox: {
34
+          feature: {
35
+              saveAsImage: {}
36
+          }
37
+      },
38
+      xAxis: {
39
+          type: 'category',
40
+          boundaryGap: false,
41
+          axisLabel: {rotate: 45},
42
+          data: data.timeList || []
43
+      },
44
+      yAxis: {
45
+          type: 'value'
46
+      },
47
+      series: [
48
+          {
49
+              name: '公客数',
50
+              type: 'line',
51
+              data: data.gkList || []
52
+              
53
+          },
54
+          {
55
+              name: '私客数',
56
+              type: 'line',
57
+              data: data.skList || []
58
+          },
59
+          {
60
+              name: '新增客户数',
61
+              type: 'line',
62
+              data: data.khList || []
63
+          },
64
+          {
65
+              name: '访问人数',
66
+              type: 'line',
67
+              data: data.uvList || []
68
+          }
69
+      ]
70
+  };
71
+  
72
+
73
+    return (
74
+    <>
75
+      <EChart options={options} style={{ width: '100%', height: '400px', }} />
76
+    </>
77
+    )
78
+  }
79
+}
80
+
81
+export default StatsChart

+ 64
- 0
src/pages/statistics/dataReport/BuildingStatistic/index.jsx Visa fil

@@ -0,0 +1,64 @@
1
+import React, { Component, useState, useEffect } from 'react';
2
+import { Card, Row, Col, Statistic, Icon, Button } from 'antd';
3
+// import IndexEcharts from './components/indexEcharts';
4
+import moment from 'moment';
5
+import request from '@/utils/request';
6
+import apis from '@/services/apis';
7
+import CitySelect from '@/components/SelectButton/CitySelect2';
8
+import TimeSelect from '../../compents/TimeSelect';
9
+import StatsChart from './component/StatsChart'
10
+
11
+const BuildingStatistic = props => {
12
+  const [city, setCity] = useState('');
13
+
14
+  const [data, setData] = useState({});
15
+  const onTimeChange = e => {
16
+    console.log(e, 'onTimeChange');
17
+    getData({startDate:e[0],endDate:e[1]})
18
+  };
19
+
20
+  const getData = params => {
21
+    request({
22
+      ...apis.stats.barList,
23
+      params: {
24
+        startDate: moment(params.startDate).format('YYYY-MM-DDT00:00:00.000') + 'Z',
25
+        endDate: moment(params.endDate).format('YYYY-MM-DDT23:59:59.999') + 'Z',
26
+      },
27
+    }).then(data => {
28
+        setData( data);
29
+    });
30
+  };
31
+console.log(data,'----------')
32
+  return (
33
+    <Card
34
+      title={<CitySelect value={city} onChange={e => setCity('e')} all />}
35
+      headStyle={{ textAlign: 'left' }}
36
+      extra={<TimeSelect onChange={onTimeChange}></TimeSelect>}
37
+    >
38
+      <Row>
39
+        <Col span={12}>
40
+          <StatsChart title="项目公客排行" data={data.gkBarMap} />
41
+        </Col>
42
+        <Col span={12}>
43
+          <StatsChart title="项目私客排行" data={data.skBarMap} />
44
+        </Col>
45
+      </Row>
46
+      <Row>
47
+        <Col span={12}>
48
+          <StatsChart
49
+            title="项目访问人数排行"
50
+            subtext="项目详情访问情况"
51
+            data={data.wgBarMap}
52
+          />
53
+        </Col>
54
+        <Col span={12}>
55
+          <StatsChart
56
+            title="项目访问次数排行"
57
+            data={data.fwBarMap}
58
+          />
59
+        </Col>
60
+      </Row>
61
+    </Card>
62
+  );
63
+};
64
+export default BuildingStatistic;

+ 73
- 0
src/pages/statistics/dataReport/components/Count.jsx Visa fil

@@ -0,0 +1,73 @@
1
+import React, { Component, useState, useEffect } from 'react';
2
+import { Card, Row, Col, Statistic, Icon } from 'antd';
3
+// import IndexEcharts from './components/indexEcharts';
4
+// import Swiper from './swiper/index';
5
+import router from 'umi/router';
6
+import request from '@/utils/request';
7
+import apis from '@/services/apis';
8
+
9
+const Count = props => {
10
+  const [data, setData] = useState([]);
11
+
12
+  return (
13
+    <>
14
+      <Row gutter={16} style={{textAlign:'center'}}>
15
+        <Col span={4}>
16
+          <Card>
17
+            <Statistic
18
+              title="总用户"
19
+              value={110}
20
+              //   valueStyle={{ color: '#3f8600' }}
21
+            />
22
+          </Card>
23
+        </Col>
24
+        <Col span={4}>
25
+          <Card>
26
+            <Statistic
27
+              title="总注册用户"
28
+              value={110}
29
+              //   valueStyle={{ color: '#cf1322' }}
30
+            />
31
+          </Card>
32
+        </Col>
33
+        <Col span={4}>
34
+          <Card>
35
+            <Statistic
36
+              title="今日访问次数"
37
+              value={110}
38
+              //   valueStyle={{ color: '#3f8600' }}
39
+            />
40
+          </Card>
41
+        </Col>
42
+        <Col span={4}>
43
+          <Card>
44
+            <Statistic
45
+              title="今日新增用户"
46
+              value={110}
47
+              //   valueStyle={{ color: '#cf1322' }}
48
+            />
49
+          </Card>
50
+        </Col>
51
+        <Col span={4}>
52
+          <Card>
53
+            <Statistic
54
+              title="渠道数量"
55
+              value={110}
56
+              //   valueStyle={{ color: '#3f8600' }}
57
+            />
58
+          </Card>
59
+        </Col>
60
+        <Col span={4}>
61
+          <Card>
62
+            <Statistic
63
+              title="经纪人数量"
64
+              value={110}
65
+              //   valueStyle={{ color: '#cf1322' }}
66
+            />
67
+          </Card>
68
+        </Col>
69
+      </Row>
70
+    </>
71
+  );
72
+};
73
+export default Count;

+ 135
- 0
src/pages/statistics/dataReport/components/SourceRole.jsx Visa fil

@@ -0,0 +1,135 @@
1
+import React, { Component, useState, useEffect } from 'react';
2
+import echarts from 'echarts/lib/echarts';
3
+import EChart from '@/components/EchartsTest/EChart';
4
+import request from '@/utils/request';
5
+import apis from '@/services/apis';
6
+import moment from 'moment';
7
+import router from 'umi/router';
8
+import { Table, Select, Row, Col, Card, Dropdown, Button, Icon, message } from 'antd';
9
+
10
+const formatDate = (start, end) => {
11
+  const startDate = moment(start).format('YYYY-MM-DDT00:00:00.000') + 'Z';
12
+  const endDate = moment(end).format('YYYY-MM-DDT23:59:59.999') + 'Z';
13
+  return { startDate, endDate };
14
+};
15
+const SourceRole = props => {
16
+  const [data, setData] = useState({ records: [] });
17
+  const endDate = new Date();
18
+
19
+  const startDate = moment()
20
+    .subtract(7, 'day')
21
+    .toDate();
22
+
23
+  useEffect(() => {
24
+    userResource(formatDate(startDate, endDate));
25
+  }, []);
26
+
27
+  function userResource(params) {
28
+    request({
29
+      ...apis.indexEcharts.userResource,
30
+      params,
31
+    }).then(data => {
32
+      setData(data);
33
+    });
34
+  }
35
+  const dataset = data || {};
36
+
37
+  const { person_estate_agent = 0, person_null = 0, person_realty_consultant = 0 } =
38
+    dataset.pie || {};
39
+
40
+  const pieoptions = {
41
+    color: ['#6B82E6', '#F02D40', '#FF834E'],
42
+    tooltip: {
43
+      trigger: 'item',
44
+      formatter: '{a} <br/>{b}: {c} ({d}%)',
45
+    },
46
+    legend: {
47
+      orient: 'horizontal',
48
+      left: 10,
49
+      data: [`来源置业`, `来源客户`, `其他`],
50
+    },
51
+    // :${person_realty_consultant}:${person_estate_agent}${person_null}
52
+    series: [
53
+      {
54
+        name: '访问来源',
55
+        type: 'pie',
56
+        radius: ['45%', '70%'],
57
+        avoidLabelOverlap: false,
58
+        label: {
59
+          show: false,
60
+          position: 'center',
61
+        },
62
+        emphasis: {
63
+          label: {
64
+            show: true,
65
+            fontSize: '30',
66
+            fontWeight: 'bold',
67
+          },
68
+        },
69
+        labelLine: {
70
+          show: false,
71
+        },
72
+        data: [
73
+          { value: person_realty_consultant, name: '来源置业' },
74
+          { value: person_estate_agent, name: '来源客户' },
75
+          { value: person_null, name: '其他' },
76
+        ],
77
+        // data: [
78
+        //     { '用户来源': '来源置业', value: person_realty_consultant, },
79
+        //     { '用户来源': '来源客户', value: person_estate_agent },
80
+        //     { '用户来源': '其他', value: person_null },
81
+        // ]
82
+      },
83
+    ],
84
+  };
85
+
86
+  //   const pieoptions = {
87
+  //     color: ['#6B82E6', '#F02D40', '#FF834E'],
88
+  //     legend: {
89
+  //       orient: 'vertical',
90
+  //       x: 'left',
91
+  //       data: ['来源置业', '来源客户', '其他'],
92
+  //     },
93
+  //     tooltip: {
94
+  //       // trigger: 'item',
95
+  //       // formatter: "{a} <br/>{b} : {c} ({d}%)"
96
+  //     },
97
+  //     series: [
98
+  //       {
99
+  //         name: '用户来源',
100
+  //         type: 'pie',
101
+  //         center: ['50%', '65%'],
102
+  //         radius: ['25%', '40%'],
103
+  //         label: {
104
+  //           formatter: '{b} {@value}',
105
+  //           emphasis: {
106
+  //             show: true,
107
+  //             formatter: '{d}%',
108
+  //             textStyle: {
109
+  //               fontSize: '22',
110
+  //               fontWeight: 'bold'
111
+  //             }
112
+  //           },
113
+  //         },
114
+  //       },
115
+
116
+  //     ],
117
+
118
+  //     dataset: {
119
+  //       id: 'pie',
120
+  //       source: [
121
+  //         { '用户来源': '来源置业', value: person_realty_consultant, },
122
+  //         { '用户来源': '来源客户', value: person_estate_agent },
123
+  //         { '用户来源': '其他', value: person_null },
124
+  //       ]
125
+  //     },
126
+  //   }
127
+
128
+  return (
129
+    <Card title="来源角色" headStyle={{textAlign:'left'}}>
130
+      <EChart options={pieoptions} styles={{ width: '100%' }} />
131
+    </Card>
132
+  );
133
+};
134
+
135
+export default SourceRole;

+ 148
- 0
src/pages/statistics/dataReport/components/UserConversion.jsx Visa fil

@@ -0,0 +1,148 @@
1
+import React, { Component, useState, useEffect } from 'react';
2
+import echarts from 'echarts/lib/echarts';
3
+import EChart from '@/components/EchartsTest/EChart';
4
+import request from '@/utils/request';
5
+import apis from '@/services/apis';
6
+import moment from 'moment';
7
+import router from 'umi/router';
8
+import { Table, Select, Row, Col, Card, Dropdown, Button, Icon, message } from 'antd';
9
+
10
+// import styles from '../styles.less'
11
+
12
+
13
+const UserConversion = props => {
14
+
15
+  const [theCurrent, setTheCurrent] = useState({ records: [] })
16
+  const [conversionRate, setConversionRate] = useState(0)
17
+  useEffect(() => {
18
+    UserConversionRate({ conversion: 'authorization_phone' })
19
+  }, [])
20
+
21
+  function UserConversionRate(params) {
22
+
23
+    request({
24
+      ...apis.indexEcharts.userConversion,
25
+      params,
26
+    }).then(data => {
27
+      console.log(data.data_count.registeredCount / data.data_count.pvNum, '1241234')
28
+      setDataset(data, params.conversion)
29
+    })
30
+  }
31
+
32
+  function setDataset(data, theStatis) {
33
+    const { pvNum, ...other } = data.data_count
34
+
35
+    // 获取第一个值
36
+    let num = 0
37
+    for (const v of Object.keys(other)) {
38
+      num = other[v]
39
+      break
40
+    }
41
+
42
+    if (pvNum < num) {
43
+      setTheCurrent([
44
+        { name: getStatisName(theStatis), value: '0' },
45
+        { name: '其余', value:  '0' },
46
+      ])
47
+    } else {
48
+
49
+      setConversionRate(num / pvNum)
50
+      setTheCurrent([
51
+        { name: getStatisName(theStatis), value: num },
52
+        { name: '其余', value: pvNum - num },
53
+      ])
54
+    }
55
+  }
56
+
57
+  function getStatisName(theStatis) {
58
+    const statisTypes = [
59
+      { label: '授权手机', value: 'authorization_phone' },
60
+      { label: '项目收藏', value: 'building_save' },
61
+      { label: '项目转发', value: 'building_share' },
62
+      { label: '活动收藏', value: 'activity_save' },
63
+      { label: '活动转发', value: 'activity_share' },
64
+      { label: '资讯收藏', value: 'news_save' },
65
+      { label: '资讯转发', value: 'news_share' },
66
+      { label: '活动报名', value: 'activity_sign' },
67
+
68
+    ]
69
+    return statisTypes.filter(x => x.value === theStatis)[0].label
70
+  }
71
+
72
+  const options = {
73
+    color: ['#6B82E6', '#F02D40', '#FF834E'],
74
+    tooltip: {
75
+      trigger: 'item',
76
+      formatter: '{a} <br/>{b}: {c} ({d}%)',
77
+    },
78
+    label: {
79
+      show: false,
80
+      position: 'center',
81
+    },
82
+    legend: {
83
+      orient: 'horizontal',
84
+      left: 10,
85
+      // data: [`来源置业`, `来源客户`, `其他`],
86
+    },
87
+    series: {
88
+      type: 'pie',
89
+      name: '转化率',
90
+
91
+      radius: ['45%', '70%'],
92
+      avoidLabelOverlap: false,
93
+      label: {
94
+        show: false,
95
+        position: 'center',
96
+      },
97
+      emphasis: {
98
+        label: {
99
+          show: true,
100
+          fontSize: '30',
101
+          fontWeight: 'bold',
102
+        },
103
+      },
104
+      labelLine: {
105
+        show: false,
106
+      },
107
+      data: theCurrent,
108
+    },
109
+  };
110
+
111
+  function onChange(e) {
112
+    UserConversionRate({ conversion: e })
113
+  }
114
+
115
+
116
+  return (
117
+    <Card title="转化率" headStyle={{ textAlign: 'left' }}>
118
+    <EChart options={options}  styles={{ width: '100%' }}/>
119
+  </Card>
120
+    // <>
121
+    //   <div>
122
+    
123
+
124
+    //     <Select
125
+    //       style={{ width: 200 }}
126
+    //       placeholder="授权手机"
127
+    //       onChange={onChange}
128
+    //     >
129
+    //       <Select.Option value="authorization_phone">授权手机</Select.Option>
130
+    //       <Select.Option value="building_save">项目收藏</Select.Option>
131
+    //       <Select.Option value="building_share">项目转发</Select.Option>
132
+    //       <Select.Option value="activity_save">活动收藏</Select.Option>
133
+    //       <Select.Option value="activity_share">活动转发</Select.Option>
134
+    //       <Select.Option value="news_save">资讯收藏</Select.Option>
135
+    //       <Select.Option value="news_share">资讯转发</Select.Option>
136
+    //       <Select.Option value="activity_sign">活动报名</Select.Option>
137
+    //     </Select>
138
+    //     <EChart options={options} style={piestyles} />
139
+
140
+
141
+    //   </div>
142
+
143
+
144
+    // </>
145
+  )
146
+}
147
+
148
+export default UserConversion

+ 92
- 0
src/pages/statistics/dataReport/components/UserSex.jsx Visa fil

@@ -0,0 +1,92 @@
1
+import React, { Component, useState, useEffect } from 'react';
2
+import echarts from 'echarts/lib/echarts';
3
+import EChart from '@/components/EchartsTest/EChart';
4
+import request from '@/utils/request';
5
+import apis from '@/services/apis';
6
+import moment from 'moment';
7
+import router from 'umi/router';
8
+import { Table, Select, Row, Col, Card, Dropdown, Button, Icon, message } from 'antd';
9
+
10
+// import styles from '../styles.less'
11
+
12
+const formatDate = (start, end) => {
13
+  const startDate = moment(start).format('YYYY-MM-DDT00:00:00.000') + 'Z';
14
+  const endDate = moment(end).format('YYYY-MM-DDT23:59:59.999') + 'Z';
15
+  return { startDate, endDate };
16
+};
17
+
18
+const UserSource = props => {
19
+  const [data, setData] = useState({ records: [] });
20
+  const endDate = new Date();
21
+  const startDate = moment()
22
+    .subtract(7, 'day')
23
+    .toDate();
24
+
25
+  useEffect(() => {
26
+    UserSex(formatDate(startDate, endDate));
27
+  }, []);
28
+
29
+  function UserSex(params) {
30
+    request({
31
+      ...apis.indexEcharts.userSex,
32
+      params,
33
+    }).then(data => {
34
+      setData(data);
35
+    });
36
+  }
37
+  undefined;
38
+  const dataset = data.selectSexUser || [];
39
+
40
+  const options = {
41
+    color: ['#6B82E6', '#F02D40', '#FF834E'],
42
+    tooltip: {
43
+      trigger: 'item',
44
+      formatter: '{a} <br/>{b}: {c} ({d}%)',
45
+    },
46
+    label: {
47
+      show: false,
48
+      position: 'center',
49
+    },
50
+    legend: {
51
+      orient: 'horizontal',
52
+      left: 10,
53
+      // data: [`来源置业`, `来源客户`, `其他`],
54
+    },
55
+    series: {
56
+      type: 'pie',
57
+      name: '性别比例',
58
+
59
+      radius: ['45%', '70%'],
60
+      avoidLabelOverlap: false,
61
+      label: {
62
+        show: false,
63
+        position: 'center',
64
+      },
65
+      emphasis: {
66
+        label: {
67
+          show: true,
68
+          fontSize: '30',
69
+          fontWeight: 'bold',
70
+        },
71
+      },
72
+      labelLine: {
73
+        show: false,
74
+      },
75
+      data: dataset,
76
+    },
77
+  };
78
+
79
+  const piestyles = {
80
+    width: '100%',
81
+    height: '400px',
82
+    minWidth: '350px',
83
+  };
84
+
85
+  return (
86
+    <Card title="性别比例" headStyle={{ textAlign: 'left' }}>
87
+      <EChart options={options} styles={{ width: '100%' }} />
88
+    </Card>
89
+  );
90
+};
91
+
92
+export default UserSource;

+ 41
- 0
src/pages/statistics/dataReport/index.jsx Visa fil

@@ -0,0 +1,41 @@
1
+import React, { Component, useState, useEffect } from 'react';
2
+import { Card, Row, Col, Statistic, Icon } from 'antd';
3
+// import IndexEcharts from './components/indexEcharts';
4
+// import Swiper from './swiper/index';
5
+import router from 'umi/router';
6
+import request from '@/utils/request';
7
+import apis from '@/services/apis';
8
+import Count from './components/Count';
9
+import SourceRole from './components/SourceRole';
10
+import UserSex from './components/UserSex';
11
+import UserConversion from './components/UserConversion';
12
+import BuildingStatistic from './BuildingStatistic';
13
+
14
+const DataReport = props => {
15
+  const [data, setData] = useState([]);
16
+
17
+  return (
18
+    <>
19
+      <div style={{ marginBottom: '20px' }}>
20
+        <Count></Count>
21
+      </div>
22
+      <div style={{ marginBottom: '20px' }}>
23
+        <Row gutter={16} style={{ textAlign: 'center' }}>
24
+          <Col span={8}>
25
+            <SourceRole></SourceRole>
26
+          </Col>
27
+          <Col span={8}>
28
+            <UserSex></UserSex>
29
+          </Col>
30
+          <Col span={8}>
31
+            <UserConversion></UserConversion>
32
+          </Col>
33
+        </Row>
34
+      </div>
35
+      <div style={{ marginBottom: '20px' }}>
36
+        <BuildingStatistic></BuildingStatistic>
37
+      </div>
38
+    </>
39
+  );
40
+};
41
+export default DataReport;

+ 4
- 3
src/pages/system/Sellhouse/Edit.jsx Visa fil

@@ -85,18 +85,19 @@ const Edit = props => {
85 85
       ],
86 86
     },
87 87
     {
88
-      label: '标题',
88
+      label: '缩略标题',
89 89
       name: 'subtitle',
90 90
       type: FieldTypes.Text,
91 91
       value: policyData.subtitle,
92
+      help: '7个字以内',
92 93
       rules: [
93 94
         {
94 95
           required: true,
95
-          message: '请输入标题',
96
+          message: '请输入缩略标题',
96 97
         },
97 98
         {
98 99
           max: 8,
99
-          message: '最大可输入8个字符',
100
+          message: '最大可输入7个字符',
100 101
         },
101 102
       ],
102 103
     },