张延森 4 年之前
父節點
當前提交
b87a63a3d7

+ 4
- 4
config/config.js 查看文件

@@ -95,14 +95,14 @@ export default {
95 95
   // Theme for antd: https://ant.design/docs/react/customize-theme-cn
96 96
   theme: {
97 97
     'primary-color': primaryColor,
98
-    'btn-primary-bg': '#EF273A',
98
+    'btn-primary-bg': '#1890ff',
99 99
     'table-row-hover-bg': '#eee',
100 100
     'btn-danger-bg': '#FF7E48',
101 101
     'radio-button-hover-color': '#FF7E48',
102 102
     'radio-button-active-color': 'red',
103
-    'checkbox-color': '#EF273A',
104
-    // 'checkbox-check-color': '#EF273A',
105
-    'checkbox-check-bg': '#EF273A',
103
+    'checkbox-color': '#1890ff',
104
+    // 'checkbox-check-color': '#1890ff',
105
+    'checkbox-check-bg': '#1890ff',
106 106
     // @checkbox-check-bg: @checkbox-check-color;
107 107
     'primary-1': '#eee'
108 108
   },

+ 2
- 2
config/defaultSettings.js 查看文件

@@ -1,6 +1,6 @@
1 1
 export default {
2
-  navTheme: 'light',
3
-  primaryColor: '#333',
2
+  navTheme: 'dark',
3
+  primaryColor: '#1890ff',
4 4
   layout: 'sidemenu',
5 5
   contentWidth: 'Fluid',
6 6
   fixedHeader: false,

+ 256
- 227
config/routes.js 查看文件

@@ -547,6 +547,35 @@ export default [
547 547
               },
548 548
             ],
549 549
           },
550
+          {
551
+            path: '/property',
552
+            name: '物业管理',
553
+            component: '../layouts/BlankLayout',
554
+            routes: [
555
+              {
556
+                path: 'buildingInfo',
557
+                name: '楼栋管理',
558
+                component: './property/building'
559
+              },
560
+              {
561
+                path: 'buildingInfo/importExcel',
562
+                name: '楼栋导入',
563
+                component: './property/building/BatchImport',
564
+                hideInMenu: true,
565
+              },
566
+              {
567
+                path: 'proprietor',
568
+                name: '业主管理',
569
+                component: './property/proprietor'
570
+              },
571
+              {
572
+                path: 'proprietor/detail',
573
+                name: '业主详情',
574
+                component: './property/proprietor/Detail',
575
+                hideInMenu: true,
576
+              },
577
+            ]
578
+          },
550 579
           // {
551 580
           //   path: '/system',
552 581
           //   name: '系统管理',
@@ -799,235 +828,235 @@ export default [
799 828
               },
800 829
             ],
801 830
           },
802
-          {
803
-            path: '/house',
804
-            name: '在线选房',
805
-            component: '../layouts/BlankLayout',
806
-            routes: [
807
-              {
808
-                path: '/house/house/list',
809
-                name: '房源管理',
810
-                component: './house/house/list/index',
811
-              },
812
-              {
813
-                path: '/house/house/add',
814
-                name: '新增',
815
-                hideInMenu: true,
816
-                component: './house/house/add/index',
817
-              },
818
-              {
819
-                path: '/house/house/batch',
820
-                name: '批量上传',
821
-                hideInMenu: true,
822
-                component: './house/house/add/HouseBatchAdd',
823
-              },
824
-              {
825
-                path: '/house/house/edit',
826
-                name: '编辑',
827
-                hideInMenu: true,
828
-                component: './house/house/edit/index',
829
-              },
830
-              {
831
-                path: '/house/preSelect/list',
832
-                name: '预选管理',
833
-                component: './house/preSelect/list/index',
834
-              },
835
-              {
836
-                path: '/house/preSelect/add',
837
-                name: '新增',
838
-                hideInMenu: true,
839
-                component: './house/preSelect/add/index',
840
-              },
841
-              {
842
-                path: '/house/preSelect/batch',
843
-                name: '批量上传',
844
-                hideInMenu: true,
845
-                component: './house/preSelect/add/HouseBatchAdd',
846
-              },
847
-              {
848
-                path: '/house/preSelect/edit',
849
-                name: '编辑',
850
-                hideInMenu: true,
851
-                component: './house/preSelect/edit/index',
852
-              },
853
-              {
854
-                path: '/house/raise/list',
855
-                name: '认筹管理',
856
-                component: './house/raise/list/index',
857
-              },
858
-              {
859
-                path: '/house/raise/add',
860
-                name: '新增',
861
-                hideInMenu: true,
862
-                component: './house/raise/add/index',
863
-              },
864
-              {
865
-                path: '/house/raise/batch',
866
-                name: '批量上传',
867
-                hideInMenu: true,
868
-                component: './house/raise/add/HouseBatchAdd',
869
-              },
870
-              {
871
-                path: '/house/raise/edit',
872
-                name: '编辑',
873
-                hideInMenu: true,
874
-                component: './house/raise/edit/index',
875
-              },
876
-            ],
877
-          },
878
-          {
879
-            path: '/h5SampleManager',
880
-            name: 'H5样例管理',
881
-            component: '../layouts/BlankLayout',
882
-            routes: [
883
-              {
884
-                path: '/h5SampleManager/h5Sample/list',
885
-                name: 'H5样例',
886
-                component: './h5SampleManager/h5Sample/list',
887
-              },
888
-              {
889
-                path: '/h5SampleManager/h5Sample/detail',
890
-                name: '详情',
891
-                hideInMenu: true,
892
-                component: './h5SampleManager/h5Sample/detail',
893
-              },
894
-              {
895
-                path: '/h5SampleManager/h5Sample/add',
896
-                name: '提交需求',
897
-                hideInMenu: true,
898
-                component: './h5SampleManager/h5Sample/add',
899
-              },
900
-              {
901
-                path: '/h5SampleManager/h5Sample/addH5',
902
-                name: '创建H5活动',
903
-                hideInMenu: true,
904
-                component: './h5SampleManager/h5Sample/addH5',
905
-              },
906
-              {
907
-                path: '/h5SampleManager/h5Demand/list',
908
-                name: 'H5需求单',
909
-                component: './h5SampleManager/h5Demand/list',
910
-              },
911
-              // {
912
-              //   path: '/drainageSampleManager/drainageDemand/add',
913
-              //   name: '新增需求单',
914
-              //   component: './drainageSampleManager/drainageDemand/add',
915
-              // },
916
-              {
917
-                path: '/h5SampleManager/h5Demand/detail',
918
-                name: '详情',
919
-                hideInMenu: true,
920
-                component: './h5SampleManager/h5Demand/detail',
921
-              },
922
-              {
923
-                path: '/h5SampleManager/h5Demand/edit',
924
-                name: '修改需求',
925
-                hideInMenu: true,
926
-                component: './h5SampleManager/h5Demand/edit',
927
-              },
928
-            ],
929
-          },
930
-          {
931
-            path: '/eContract',
932
-            name: '电子合同',
933
-            component: '../layouts/BlankLayout',
934
-            routes: [
935
-              {
936
-                path: '/eContract/template/list',
937
-                name: '合同模板',
938
-                component: './eContract/template/list',
939
-              },
940
-              {
941
-                path: '/eContract/businessConfig/list',
942
-                name: '业务配置',
943
-                component: './eContract/businessConfig/list',
944
-              },
945
-              {
946
-                path: '/eContract/businessConfig/add',
947
-                name: '新增业务配置',
948
-                hideInMenu: true,
949
-                component: './eContract/businessConfig/add',
950
-              },
951
-              {
952
-                path: '/eContract/businessConfig/detail',
953
-                name: '业务配置详情',
954
-                hideInMenu: true,
955
-                component: './eContract/businessConfig/detail',
956
-              },
957
-              {
958
-                path: '/eContract/manage/list',
959
-                name: '合同管理',
960
-                component: './eContract/manage/list',
961
-              },
962
-              {
963
-                path: '/eContract/manage/edit',
964
-                name: '查看详情',
965
-                hideInMenu: true,
966
-                component: './eContract/manage/edit',
967
-              },
968
-              {
969
-                path: '/eContract/template/add',
970
-                name: '新增合同模板',
971
-                hideInMenu: true,
972
-                component: './eContract/template/add',
973
-              },
974
-              {
975
-                path: '/eContract/template/detail',
976
-                name: '合同模板详情',
977
-                hideInMenu: true,
978
-                component: './eContract/template/detail',
979
-              }
980
-            ],
981
-          },
982
-          {
983
-            path: '/qrcode',
984
-            name: '二维码管理',
985
-            component: '../layouts/BlankLayout',
986
-            routes: [
987
-              {
988
-                path: '/qrcode/qrcodelist',
989
-                name: '二维码列表',
990
-                component: './qrcode/qrcodelist/index',
991
-              },
831
+          // {
832
+          //   path: '/house',
833
+          //   name: '在线选房',
834
+          //   component: '../layouts/BlankLayout',
835
+          //   routes: [
836
+          //     {
837
+          //       path: '/house/house/list',
838
+          //       name: '房源管理',
839
+          //       component: './house/house/list/index',
840
+          //     },
841
+          //     {
842
+          //       path: '/house/house/add',
843
+          //       name: '新增',
844
+          //       hideInMenu: true,
845
+          //       component: './house/house/add/index',
846
+          //     },
847
+          //     {
848
+          //       path: '/house/house/batch',
849
+          //       name: '批量上传',
850
+          //       hideInMenu: true,
851
+          //       component: './house/house/add/HouseBatchAdd',
852
+          //     },
853
+          //     {
854
+          //       path: '/house/house/edit',
855
+          //       name: '编辑',
856
+          //       hideInMenu: true,
857
+          //       component: './house/house/edit/index',
858
+          //     },
859
+          //     {
860
+          //       path: '/house/preSelect/list',
861
+          //       name: '预选管理',
862
+          //       component: './house/preSelect/list/index',
863
+          //     },
864
+          //     {
865
+          //       path: '/house/preSelect/add',
866
+          //       name: '新增',
867
+          //       hideInMenu: true,
868
+          //       component: './house/preSelect/add/index',
869
+          //     },
870
+          //     {
871
+          //       path: '/house/preSelect/batch',
872
+          //       name: '批量上传',
873
+          //       hideInMenu: true,
874
+          //       component: './house/preSelect/add/HouseBatchAdd',
875
+          //     },
876
+          //     {
877
+          //       path: '/house/preSelect/edit',
878
+          //       name: '编辑',
879
+          //       hideInMenu: true,
880
+          //       component: './house/preSelect/edit/index',
881
+          //     },
882
+          //     {
883
+          //       path: '/house/raise/list',
884
+          //       name: '认筹管理',
885
+          //       component: './house/raise/list/index',
886
+          //     },
887
+          //     {
888
+          //       path: '/house/raise/add',
889
+          //       name: '新增',
890
+          //       hideInMenu: true,
891
+          //       component: './house/raise/add/index',
892
+          //     },
893
+          //     {
894
+          //       path: '/house/raise/batch',
895
+          //       name: '批量上传',
896
+          //       hideInMenu: true,
897
+          //       component: './house/raise/add/HouseBatchAdd',
898
+          //     },
899
+          //     {
900
+          //       path: '/house/raise/edit',
901
+          //       name: '编辑',
902
+          //       hideInMenu: true,
903
+          //       component: './house/raise/edit/index',
904
+          //     },
905
+          //   ],
906
+          // },
907
+          // {
908
+          //   path: '/h5SampleManager',
909
+          //   name: 'H5样例管理',
910
+          //   component: '../layouts/BlankLayout',
911
+          //   routes: [
912
+          //     {
913
+          //       path: '/h5SampleManager/h5Sample/list',
914
+          //       name: 'H5样例',
915
+          //       component: './h5SampleManager/h5Sample/list',
916
+          //     },
917
+          //     {
918
+          //       path: '/h5SampleManager/h5Sample/detail',
919
+          //       name: '详情',
920
+          //       hideInMenu: true,
921
+          //       component: './h5SampleManager/h5Sample/detail',
922
+          //     },
923
+          //     {
924
+          //       path: '/h5SampleManager/h5Sample/add',
925
+          //       name: '提交需求',
926
+          //       hideInMenu: true,
927
+          //       component: './h5SampleManager/h5Sample/add',
928
+          //     },
929
+          //     {
930
+          //       path: '/h5SampleManager/h5Sample/addH5',
931
+          //       name: '创建H5活动',
932
+          //       hideInMenu: true,
933
+          //       component: './h5SampleManager/h5Sample/addH5',
934
+          //     },
935
+          //     {
936
+          //       path: '/h5SampleManager/h5Demand/list',
937
+          //       name: 'H5需求单',
938
+          //       component: './h5SampleManager/h5Demand/list',
939
+          //     },
940
+          //     // {
941
+          //     //   path: '/drainageSampleManager/drainageDemand/add',
942
+          //     //   name: '新增需求单',
943
+          //     //   component: './drainageSampleManager/drainageDemand/add',
944
+          //     // },
945
+          //     {
946
+          //       path: '/h5SampleManager/h5Demand/detail',
947
+          //       name: '详情',
948
+          //       hideInMenu: true,
949
+          //       component: './h5SampleManager/h5Demand/detail',
950
+          //     },
951
+          //     {
952
+          //       path: '/h5SampleManager/h5Demand/edit',
953
+          //       name: '修改需求',
954
+          //       hideInMenu: true,
955
+          //       component: './h5SampleManager/h5Demand/edit',
956
+          //     },
957
+          //   ],
958
+          // },
959
+          // {
960
+          //   path: '/eContract',
961
+          //   name: '电子合同',
962
+          //   component: '../layouts/BlankLayout',
963
+          //   routes: [
964
+          //     {
965
+          //       path: '/eContract/template/list',
966
+          //       name: '合同模板',
967
+          //       component: './eContract/template/list',
968
+          //     },
969
+          //     {
970
+          //       path: '/eContract/businessConfig/list',
971
+          //       name: '业务配置',
972
+          //       component: './eContract/businessConfig/list',
973
+          //     },
974
+          //     {
975
+          //       path: '/eContract/businessConfig/add',
976
+          //       name: '新增业务配置',
977
+          //       hideInMenu: true,
978
+          //       component: './eContract/businessConfig/add',
979
+          //     },
980
+          //     {
981
+          //       path: '/eContract/businessConfig/detail',
982
+          //       name: '业务配置详情',
983
+          //       hideInMenu: true,
984
+          //       component: './eContract/businessConfig/detail',
985
+          //     },
986
+          //     {
987
+          //       path: '/eContract/manage/list',
988
+          //       name: '合同管理',
989
+          //       component: './eContract/manage/list',
990
+          //     },
991
+          //     {
992
+          //       path: '/eContract/manage/edit',
993
+          //       name: '查看详情',
994
+          //       hideInMenu: true,
995
+          //       component: './eContract/manage/edit',
996
+          //     },
997
+          //     {
998
+          //       path: '/eContract/template/add',
999
+          //       name: '新增合同模板',
1000
+          //       hideInMenu: true,
1001
+          //       component: './eContract/template/add',
1002
+          //     },
1003
+          //     {
1004
+          //       path: '/eContract/template/detail',
1005
+          //       name: '合同模板详情',
1006
+          //       hideInMenu: true,
1007
+          //       component: './eContract/template/detail',
1008
+          //     }
1009
+          //   ],
1010
+          // },
1011
+          // {
1012
+          //   path: '/qrcode',
1013
+          //   name: '二维码管理',
1014
+          //   component: '../layouts/BlankLayout',
1015
+          //   routes: [
1016
+          //     {
1017
+          //       path: '/qrcode/qrcodelist',
1018
+          //       name: '二维码列表',
1019
+          //       component: './qrcode/qrcodelist/index',
1020
+          //     },
992 1021
            
993
-              {
994
-                path: '/qrcode/qrcodelist/add',
995
-                name: '新增',
996
-                hideInMenu: true,
997
-                component: './qrcode/qrcodelist/add',
998
-              },   
999
-              {
1000
-                path: '/qrcode/qrcodelist/dataRecord',
1001
-                name: '数据记录',
1002
-                hideInMenu: true,
1003
-                component: './qrcode/qrcodelist/dataRecord',
1004
-              },   
1005
-            ],
1006
-          },
1007
-          {
1008
-            path: '/funds',
1009
-            name: '资金管理',
1010
-            component: '../layouts/BlankLayout',
1011
-            routes: [
1012
-              {
1013
-                path: '/funds/accountfunds',
1014
-                name: '账户资金',
1015
-                component: './funds/accountfunds/index',
1016
-              },
1022
+          //     {
1023
+          //       path: '/qrcode/qrcodelist/add',
1024
+          //       name: '新增',
1025
+          //       hideInMenu: true,
1026
+          //       component: './qrcode/qrcodelist/add',
1027
+          //     },   
1028
+          //     {
1029
+          //       path: '/qrcode/qrcodelist/dataRecord',
1030
+          //       name: '数据记录',
1031
+          //       hideInMenu: true,
1032
+          //       component: './qrcode/qrcodelist/dataRecord',
1033
+          //     },   
1034
+          //   ],
1035
+          // },
1036
+          // {
1037
+          //   path: '/funds',
1038
+          //   name: '资金管理',
1039
+          //   component: '../layouts/BlankLayout',
1040
+          //   routes: [
1041
+          //     {
1042
+          //       path: '/funds/accountfunds',
1043
+          //       name: '账户资金',
1044
+          //       component: './funds/accountfunds/index',
1045
+          //     },
1017 1046
            
1018
-              // {
1019
-              //   path: '/fund/qrcodelist/add',
1020
-              //   name: '新增',
1021
-              //   hideInMenu: true,
1022
-              //   component: './fund/qrcodelist/add',
1023
-              // },   
1024
-              {
1025
-                path: '/funds/financialContact',
1026
-                name: '财务联系人',
1027
-                component: './funds/financialContact/index',
1028
-              },   
1029
-            ],
1030
-          },
1047
+          //     // {
1048
+          //     //   path: '/fund/qrcodelist/add',
1049
+          //     //   name: '新增',
1050
+          //     //   hideInMenu: true,
1051
+          //     //   component: './fund/qrcodelist/add',
1052
+          //     // },   
1053
+          //     {
1054
+          //       path: '/funds/financialContact',
1055
+          //       name: '财务联系人',
1056
+          //       component: './funds/financialContact/index',
1057
+          //     },   
1058
+          //   ],
1059
+          // },
1031 1060
           // {
1032 1061
           //   path: '/miniapp',
1033 1062
           //   name: '小程序管理',

+ 1
- 1
src/components/GlobalHeader/index.less 查看文件

@@ -3,7 +3,7 @@
3 3
 @pro-header-hover-bg: rgba(0, 0, 0, 0.025);
4 4
 .name {
5 5
 
6
-  color: #fff;
6
+  // color: #fff;
7 7
   padding: 0;
8 8
   margin: 0;
9 9
   height: 20px;

+ 29
- 0
src/components/Prompt/index.jsx 查看文件

@@ -0,0 +1,29 @@
1
+import React, { useState, useCallback } from 'react'
2
+import { Modal, Input, Icon } from 'antd'
3
+
4
+// 模拟浏览器 prompt
5
+export default props => {
6
+  const [value, setValue] = useState()
7
+  const handleValue = useCallback(
8
+    e => setValue(e.target.value),
9
+    [],
10
+  )
11
+
12
+  const handleOk = () => {
13
+    if (props.onOk) {
14
+      return props.onOk(value)
15
+    }
16
+  }
17
+
18
+  return (
19
+    <Modal
20
+      {...props}
21
+      destroyOnClose
22
+      closable={false}
23
+      maskClosable={false}
24
+      onOk={handleOk}
25
+    >
26
+      <Input value={value} onChange={handleValue} />
27
+    </Modal>
28
+  )
29
+}

+ 30
- 26
src/global.less 查看文件

@@ -44,11 +44,14 @@ ol {
44 44
 }
45 45
 
46 46
 .ant-layout-header .ant-pro-global-header{
47
-  background:#393C39;
47
+  // background:#393C39;
48 48
   border-bottom: 0.6px solid rgb(156, 153, 153);
49 49
 }
50
+.ant-layout .ant-pro-sider-menu-sider.light {
51
+  background: #001529;
52
+}
50 53
 .ant-layout .ant-pro-sider-menu-sider.light .ant-pro-sider-menu-logo{
51
-  background:#EF273A;
54
+  background:#001529;
52 55
   box-shadow: none;
53 56
   border: none;
54 57
   a{
@@ -85,26 +88,26 @@ ol {
85 88
   padding: 0 0 0 10px;
86 89
   align-items: center;
87 90
 }
88
-.ant-radio-button-wrapper{
89
-  color: #FF7E48;
90
-  border: 1px solid #FF7E48;
91
-}
92
-.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {
93
-  color: #fff;
94
-  background: #FF7E48;
95
-  border-color: #FF7E48;
96
-  box-shadow: none;
97
-}
98
-.ant-radio-button-wrapper:not(:first-child)::before{
99
-  background: #FF7E48;
100
-}
101
-.ant-radio-button-wrapper:first-child {
102
-  border-left: 1px solid #FF7E48;
103
-}
104
-.ant-radio-button-wrapper:hover{
105
-  border-color: #FF7E48;
106
-  color: #FF7E48; ;
107
-}
91
+// .ant-radio-button-wrapper{
92
+//   color: #FF7E48;
93
+//   border: 1px solid #FF7E48;
94
+// }
95
+// .ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {
96
+//   color: #fff;
97
+//   background: #FF7E48;
98
+//   border-color: #FF7E48;
99
+//   box-shadow: none;
100
+// }
101
+// .ant-radio-button-wrapper:not(:first-child)::before{
102
+//   background: #FF7E48;
103
+// }
104
+// .ant-radio-button-wrapper:first-child {
105
+//   border-left: 1px solid #FF7E48;
106
+// }
107
+// .ant-radio-button-wrapper:hover{
108
+//   border-color: #FF7E48;
109
+//   color: #FF7E48; ;
110
+// }
108 111
 .ant-row.ant-form-item .ant-form-item-label.ant-col-sm-3{
109 112
   min-width: 100px;
110 113
 }
@@ -134,7 +137,8 @@ ol {
134 137
     background:rgba(240,240,240,1);
135 138
   }
136 139
    .ant-menu:not(.ant-menu-horizontal)  .ant-menu-item-selected{
137
-    background:rgb(230, 227, 227)!important;
140
+    // background:rgb(230, 227, 227)!important;
141
+    // background: #1890ff !important;
138 142
     border: none!important;
139 143
   }
140 144
   .ant-menu-inline .ant-menu-selected::after, .ant-menu-inline .ant-menu-item-selected::after{
@@ -168,9 +172,9 @@ ol {
168 172
   .ant-pro-sider-menu-logo img{
169 173
     height: 41px;
170 174
   }
171
-  .ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active {
172
-    color: #FF7E48;
173
-  }
175
+  // .ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active {
176
+  //   color: #FF7E48;
177
+  // }
174 178
   .ant-table{
175 179
     line-height: 3;
176 180
   }

+ 6
- 6
src/pages/activity/drainage/components/style.less 查看文件

@@ -84,13 +84,13 @@
84 84
   color: #666;
85 85
 }
86 86
 
87
-.ant-checkbox-inner {
88
-  background-color: #EF273A !important;
89
-}
87
+// .ant-checkbox-inner {
88
+//   background-color: #EF273A !important;
89
+// }
90 90
 
91
-.Checkboxs {
92
-  background-color: #EF273A !important;
93
-}
91
+// .Checkboxs {
92
+//   background-color: #EF273A !important;
93
+// }
94 94
 
95 95
 .img {
96 96
   position: absolute;

+ 1
- 1
src/pages/activity/drainage/components/styles.less 查看文件

@@ -1,6 +1,6 @@
1 1
 
2 2
   .CheckboxStytle {
3
-    color: #EF273A;
3
+    // color: #EF273A;
4 4
     
5 5
   }
6 6
 

+ 1
- 1
src/pages/channel/independentList/style.css 查看文件

@@ -1,5 +1,5 @@
1 1
 .SubmitButton {
2
-  background: #ef273a;
2
+  /* background: #ef273a; */
3 3
   border-radius: 7px;
4 4
   border: 0px;
5 5
 }

+ 2
- 2
src/pages/customer/customerlist/style.css 查看文件

@@ -1,10 +1,10 @@
1 1
 .SubmitButton {
2
-  background: #ef273a;
2
+  /* background: #ef273a; */
3 3
   border-radius: 7px;
4 4
   border: 0px;
5 5
 }
6 6
 .text {
7
-  color: #ef273a;
7
+  /* color: #ef273a; */
8 8
 }
9 9
 .SelectFrom {
10 10
   width: 180px;

+ 3
- 0
src/pages/property/bill/index.jsx 查看文件

@@ -0,0 +1,3 @@
1
+import React from 'react'
2
+
3
+

+ 221
- 0
src/pages/property/bill/list/index.jsx 查看文件

@@ -0,0 +1,221 @@
1
+import React, { useRef, useState } from 'react'
2
+import { Spin, Form, Input, Divider, Button } from 'antd'
3
+import router from 'umi/router'
4
+import { fetch, fetchList, apis } from '@/utils/request'
5
+import Search from '../../components/Search'
6
+import List from '../../components/List'
7
+
8
+
9
+const Condition = props => {
10
+  return (    
11
+    <Search
12
+      onSearch={props.onSearch}
13
+      onReset={props.onReset}
14
+      render={({ form }) => {
15
+        const { getFieldDecorator } = form
16
+
17
+        return (
18
+          <>
19
+            <Form.Item label="收费组编号">
20
+            {
21
+              getFieldDecorator('billId')(<Input />)
22
+            }
23
+            </Form.Item>
24
+            <Form.Item label="收费组名">
25
+            {
26
+              getFieldDecorator('billName')(<Input />)
27
+            }
28
+            </Form.Item>
29
+            <Form.Item label="收费组说明">
30
+            {
31
+              getFieldDecorator('billExplain')(<Input />)
32
+            }
33
+            </Form.Item>
34
+          </>
35
+        )
36
+      }}
37
+    />
38
+  )
39
+}
40
+
41
+const TableList = props => {
42
+  const columns = [
43
+    {
44
+      title: '收费组编号',
45
+      dataIndex: 'id',
46
+      key: 'id',
47
+      align: 'center',
48
+    },
49
+    {
50
+      title: '收费组名称',
51
+      dataIndex: 'billName',
52
+      key: 'billName',
53
+    },
54
+    {
55
+      title: '收费组说明',
56
+      dataIndex: 'billExplain',
57
+      key: 'billExplain',
58
+    },
59
+    {
60
+      title: '应缴户数',
61
+      dataIndex: 'payTotalNum',
62
+      key: 'payTotalNum',
63
+    },
64
+    {
65
+      title: '已缴户数',
66
+      dataIndex: 'payedNum',
67
+      key: 'payedNum',
68
+    },
69
+    {
70
+      title: '未缴户数',
71
+      dataIndex: 'unpayedNum',
72
+      key: 'unpayedNum',
73
+    },
74
+    {
75
+      title: '收费组状态',
76
+      key: 'billStatus',
77
+      render: (t, row) => {
78
+        switch (row.billStatus) {
79
+          case '0':
80
+            return '正在收费'
81
+          case '1':
82
+            return '收费完成'
83
+          case '2':
84
+            return '草稿'
85
+          default:
86
+            return '异常'
87
+        }
88
+      }
89
+    },
90
+    {
91
+      title: '发布时间',
92
+      dataIndex: 'createDate',
93
+      key: 'createDate',
94
+      render: dt => (dt || '').substr(0, 16)
95
+    },
96
+    {
97
+      title: '截止时间',
98
+      dataIndex: 'endDate',
99
+      key: 'endDate',
100
+      render: dt => (dt || '').substr(0, 16)
101
+    },
102
+    {
103
+      title: '操作',
104
+      key: 'action',
105
+      render: (_, row) => {
106
+        return (
107
+          <span>
108
+            <Button type="link" size="small" onClick={() => props.onDetail(row)}>详情</Button>
109
+            <Divider type="vertical" />
110
+            <Popconfirm
111
+              title="确认删除当前记录?"
112
+              onConfirm={() => props.onDeleteRow(row)}
113
+              okText="Yes"
114
+              cancelText="No"
115
+            >
116
+              <Button type="link" size="small">删除</Button>
117
+            </Popconfirm>
118
+          </span>
119
+        )
120
+      }
121
+    },
122
+  ]
123
+
124
+  return (
125
+    <List
126
+      {...props}
127
+      columns={columns}
128
+      rowKey="id"
129
+    />
130
+  )
131
+}
132
+
133
+const defaultPage = { pageNum: 1, pageSize: 10, total: 0 }
134
+const FetchBillList = fetchList(apis.bill.fetchBillList)
135
+const deleteBillBeach = fetch(apis.bill.deleteBillBeach)
136
+
137
+export default props => {
138
+  const [loading, setLoading] = useState(false)
139
+  const [listData, setListData] = useState([])
140
+  const [pagination, setPagination] = useState(defaultPage)
141
+  
142
+  const queryRef = useRef()
143
+
144
+  const getListData = params => {
145
+    setLoading(true)
146
+
147
+    const opts = params || {
148
+      pageNum: pagination.pageNum,
149
+      pageSize: pagination.pageSize,
150
+      ...queryRef.current
151
+    }
152
+
153
+    FetchBillList(opts).then(res => {
154
+      setListData(res.billList)
155
+      setPagination({
156
+        ...pagination,
157
+        total: res.total
158
+      })
159
+      setLoading(false)
160
+    })
161
+  }
162
+
163
+  const handleQuery = (vals) => {
164
+    queryRef.current = vals
165
+    setPagination(defaultPage)
166
+    getListData({
167
+      ...defaultPage,
168
+      ...pageRef.current,
169
+    })
170
+  }
171
+
172
+  const handlePageChange = (pageNum, pageSize) => {
173
+    setPagination({ pageNum, pageSize, ...pagination })
174
+    
175
+    getListData({
176
+      pageNum,
177
+      pageSize,
178
+      ...pageRef.current,
179
+    })
180
+  }
181
+
182
+  const handleDetail = row => {
183
+    if (row.billStatus === '2') {
184
+      router.push(`/bill/management/edi?id=${row.billId}`)
185
+    } else {
186
+      router.push(`/bill/management/info?id=${row.billId}`);
187
+    }
188
+  }
189
+
190
+  const handleAddRow = () => {
191
+    router.push(`/bill/management/add`)
192
+  }
193
+
194
+  const handleDeleteRow = row => {
195
+    setLoading(true)
196
+    deleteBillBeach({ data: [row.id] }).then(res => {
197
+      setLoading(false)
198
+      getListData()
199
+    })
200
+  }
201
+
202
+  return (
203
+    <div>
204
+      <Condition onReset={handleQuery} onSearch={handleQuery} />
205
+      <div style={{ margin: '16px 0' }}>
206
+        <Row type="flex" justify="end">
207
+          <Button type="primary" onClick={handleAddRow}>新增</Button>
208
+        </Row>
209
+      </div>
210
+      <Spin loading={loading}>
211
+        <TableList
212
+          dataSource={listData}
213
+          pagination={pagination}
214
+          onPageChange={handlePageChange}
215
+          onDetail={handleDetail}
216
+          onDeleteRow={handleDeleteRow}
217
+        />
218
+      </Spin>
219
+    </div>
220
+  )
221
+}

+ 102
- 0
src/pages/property/building/BatchImport.jsx 查看文件

@@ -0,0 +1,102 @@
1
+import React, { useRef, useState } from 'react'
2
+import { Button, Spin, Table, notification } from 'antd'
3
+import router from 'umi/router'
4
+import { fetch, apis } from '@/utils/request'
5
+
6
+const { Column } = Table
7
+const spaceStyle = { marginLeft: '16px' }
8
+
9
+const buildingDownloadExcel = fetch(apis.buildingOwnerInfo.buildingDownloadExcel)
10
+const uploadBuildingExcel = fetch(apis.buildingOwnerInfo.uploadBuildingExcel)
11
+const submitBuildingExcel = fetch(apis.buildingOwnerInfo.submitBuildingExcel)
12
+
13
+export default props => {
14
+  const [loading, setLoading] = useState(false)
15
+  const [dataList, setDataList] = useState([])
16
+  const [pagenavi, setPagenavi] = useState({ pageSize: 10, total: 0 })
17
+
18
+  const excelRef = useRef()
19
+
20
+  const downloadExcel = () => {
21
+    buildingDownloadExcel().then(res => {
22
+      const url = window.URL.createObjectURL(new Blob([res]))
23
+      const link = document.createElement('a')
24
+      link.href = url
25
+      link.setAttribute('download', '业主资料库.xlsx')
26
+      link.click()
27
+    }).catch(err => {
28
+      console.error(err)
29
+    })
30
+  }
31
+
32
+  const importExcel = () => {
33
+    const input = document.createElement('input')
34
+    input.setAttribute('type', 'file')
35
+    input.addEventListener('input', e => {
36
+      const files = t.target.files
37
+      if (files && files[0]) {
38
+        excelRef.current = files[0]
39
+        const formData = new FormData()
40
+        formData.append('file', excelRef.current)
41
+        
42
+        setLoading(true)
43
+        uploadBuildingExcel({ data: formData }).then(res => {
44
+          setDataList(res.list)
45
+          setPagenavi({
46
+            ...pagenavi,
47
+            pageSize: res.size,
48
+            total: res.total
49
+          })
50
+          setLoading(false)
51
+        }).catch(() => {
52
+          setLoading(false)
53
+        })
54
+      }
55
+    })
56
+    input.click()
57
+  }
58
+
59
+  const submitExcel = () => {
60
+    if (!excelRef.current) {
61
+      notification.warning({ message: '没有选择文件' })
62
+      return
63
+    }
64
+
65
+    const formData = new FormData()
66
+    formData.append('file', excelRef.current)
67
+
68
+    setLoading(true)
69
+    submitBuildingExcel({ data: formData }).then(res => {
70
+      notification.success({ message: '提交成功' })
71
+
72
+      setLoading(false)
73
+    }).catch(() => {
74
+      setLoading(false)
75
+    })
76
+  }
77
+
78
+  return (
79
+    <div>
80
+      <div style={{ marginBottom: '24px' }}>
81
+        <Button type="primary" onClick={downloadExcel}>下载模板</Button>
82
+        <Button type="primary" onClick={importExcel} style={spaceStyle}>选取文件并预览</Button>
83
+        <Button type="primary" onClick={submitExcel} style={spaceStyle}>提交</Button>
84
+        <Button style={spaceStyle} onClick={() => router.go(-1)}>取消</Button>
85
+      </div>
86
+
87
+      <Spin spinning={loading}>
88
+        <Table dataSource={dataList} pagination={pagenavi}>
89
+          <Column key="phaseName" title="期/区" dataIndex="phaseName" />
90
+          <Column key="buildingName" title="栋" dataIndex="buildingName" />
91
+          <Column key="unitName" title="单元" dataIndex="unitName" />
92
+          <Column key="levelName" title="楼层" dataIndex="levelName" />
93
+          <Column key="roomNoName" title="户号" dataIndex="roomNoName" />
94
+          <Column key="ownerName" title="户主姓名" dataIndex="ownerName" />
95
+          <Column key="roleName" title="身份" dataIndex="roleName" />
96
+          <Column key="ownerTel" title="手机号" dataIndex="ownerTel" />
97
+        </Table>
98
+      </Spin>
99
+    </div>
100
+  )
101
+
102
+}

+ 34
- 0
src/pages/property/building/components/NodeLabel.jsx 查看文件

@@ -0,0 +1,34 @@
1
+import React from 'react';
2
+import { Modal, Button, Menu, Dropdown, Icon } from 'antd';
3
+
4
+export default props => {
5
+  const handleMenuClick = e => {
6
+    if (e.key === 'add') {
7
+      props.onAdd(props.data)
8
+    } else {
9
+      Modal.confirm({
10
+        title: '删除',
11
+        content: '确认进行此操作?',
12
+        onOk: () => {
13
+          props.onDelete(props.data)
14
+        }
15
+      })
16
+    }
17
+  }
18
+
19
+  const menu = (
20
+    <Menu onClick={handleMenuClick}>
21
+      <Menu.Item key="add">增加</Menu.Item>
22
+      <Menu.Item key="delete">删除</Menu.Item>
23
+    </Menu>
24
+  );
25
+
26
+  return (
27
+    <Dropdown menu={menu} size="small">
28
+      <Button type="link" size="small">
29
+        <span>{props.data.title}</span>
30
+        <Icon type="edit" />
31
+      </Button>
32
+    </Dropdown>
33
+  )
34
+}

+ 101
- 0
src/pages/property/building/index.jsx 查看文件

@@ -0,0 +1,101 @@
1
+import React, { useState, useEffect, useCallback, useRef } from 'react'
2
+import { Tree, Button } from 'antd'
3
+import router from 'umi/router'
4
+import Prompt from '@/components/Prompt'
5
+import { fetch, fetchList, apis } from '@/utils/request'
6
+import NodeLabel from './components/NodeLabel'
7
+
8
+const getTrees = fetchList(apis.buildingOwnerInfo.getTrees)
9
+const addNode = fetch(apis.buildingOwnerInfo.addNode)
10
+const deleteNode = fetch(apis.buildingOwnerInfo.deleteNode)
11
+
12
+export default props => {
13
+  const nodeRef = useRef()
14
+  const [promptVisible, setPromptVisible] = useState(false)
15
+  const [treeData, setTreeData] = useState()
16
+
17
+  const getTreeData = nodeData => {
18
+    const query = nodeData ? {
19
+      id: nodeData.id,
20
+      name: nodeData.name,
21
+      treeType: nodeData.treeType,
22
+      nodeNumber: nodeData.nodeNumber,
23
+    } : { treeType: 'phase' }
24
+
25
+    getTrees(query).then(res => {
26
+      setTreeData(res.filter(x => x && Object.keys(x).length))
27
+    })
28
+  }
29
+
30
+  const showPrompt = (data) => {
31
+    nodeRef.current = data
32
+    setPromptVisible(true)
33
+  }
34
+
35
+  const handleNodeAdd = (promptData) => {
36
+    setPromptVisible(false)
37
+    const nodeData = nodeRef.current
38
+    addNode({ data: {
39
+      id: nodeData.id,
40
+      name: nodeData.name,
41
+      treeType: nodeData.treeType,
42
+      nodeNumber: promptData,
43
+    }}).then(() => {
44
+      // 刷新页面, 重新请求数据
45
+      getTreeData()
46
+    })
47
+  }
48
+
49
+  const handleNodeDelete = (nodeData) => {
50
+    deleteNode({ data: {
51
+      id: nodeData.id,
52
+      name: nodeData.name,
53
+      treeType: nodeData.treeType,
54
+      nodeNumber: nodeData.nodeNumber,
55
+    }}).then(() => {
56
+      // 刷新页面, 重新请求数据
57
+      getTreeData()
58
+    })
59
+  }
60
+
61
+  const handleBatchImport = () => {
62
+    router.push('/property/buildingInfo/importExcel')
63
+  }
64
+
65
+  useEffect(() => {
66
+    getTreeData()
67
+  }, [])
68
+
69
+  const renderTreeNodes = data => data.map(node => {
70
+    return (      
71
+      <Tree.TreeNode
72
+        {...node}
73
+        key={node.key}
74
+        dataRef={node}
75
+        title={(<NodeLabel data={node} onAdd={showPrompt} onDelete={handleNodeDelete} />)}
76
+      >
77
+        {
78
+          node.children ? renderTreeNodes(node.children) : null
79
+        }
80
+      </Tree.TreeNode>
81
+    )
82
+  })
83
+
84
+  return (
85
+    <>
86
+      <div>
87
+        <Button type="primary" onClick={handleBatchImport}>批量导入小区楼栋信息</Button>
88
+      </div>
89
+      {
90
+        treeData && treeData.length ? (
91
+          <Tree loadData={getTreeData}>
92
+            {renderTreeNodes(treeData)}
93
+          </Tree>
94
+        ) : (
95
+          <p style={{ color: '#aaa', fontSize: '0.8em', textAlign: 'center', marginTop: '16px' }}>暂无数据</p>
96
+        )
97
+      }
98
+      <Prompt visible={promptVisible} onOk={handleNodeAdd} />
99
+    </>
100
+  )
101
+}

+ 22
- 0
src/pages/property/components/List.jsx 查看文件

@@ -0,0 +1,22 @@
1
+import React from 'react'
2
+import { Table } from 'antd'
3
+
4
+export default props => {
5
+  const { onPageChange, pagination = {}, ...leftProps } = props
6
+
7
+  const pgSetting = {
8
+    ...props.pagination,
9
+    onChange: (page, pageSize) => {
10
+      props.onPageChange(page, pageSize)
11
+    }
12
+  }
13
+
14
+  return (
15
+    <Table
16
+      {...leftProps}
17
+      pagination={pgSetting}
18
+    >
19
+      {props.children}
20
+    </Table>
21
+  )
22
+}

+ 38
- 0
src/pages/property/components/Search.jsx 查看文件

@@ -0,0 +1,38 @@
1
+import React from 'react'
2
+import { Form, Button, Row } from 'antd'
3
+
4
+export default Form.create()(props => {
5
+  const handleSubmit = e => {
6
+    e.preventDefault();
7
+    props.form.validateFields((err, values) => {
8
+      if (!err && props.onSearch) {
9
+        props.onSearch(values)
10
+      }
11
+    });
12
+  }
13
+
14
+  const handleReset = e => {
15
+    props.form.resetFields()
16
+    if (props.onReset) {
17
+      props.onReset(props.form.getFieldsValue())
18
+    }
19
+  }
20
+
21
+  return (
22
+    <Form layout="inline" onSubmit={handleSubmit}>
23
+      <div style={{ display: 'flex', width: '100%' }}>
24
+        <div style={{ flex: 'none', maxWidth: 'calc(100% - 180px)' }}>
25
+          {props.render(props.form)}
26
+        </div>
27
+        <div style={{ flex: 'none', width: '180px' }}>
28
+          <Form.Item>
29
+            <Button type="primary" htmlType="submit">搜索</Button>
30
+          </Form.Item>
31
+          <Form.Item>
32
+            <Button onClick={handleReset}>重置</Button>
33
+          </Form.Item>
34
+        </div>
35
+      </div>
36
+    </Form>
37
+  )
38
+})

+ 43
- 0
src/pages/property/proprietor/Detail.jsx 查看文件

@@ -0,0 +1,43 @@
1
+import React, { useState } from 'react'
2
+import { Button, Descriptions } from 'antd'
3
+import Section from './components/Section'
4
+
5
+export default props => {
6
+  const [roomName, setRoomName] = useState('1期1号楼1单元13层1331')
7
+
8
+  return (
9
+    <div>
10
+      <Section title="基本信息">
11
+        <Descriptions column={3}>
12
+          <Descriptions.Item label="姓名">测试</Descriptions.Item>
13
+          <Descriptions.Item label="性别">男</Descriptions.Item>
14
+          <Descriptions.Item label="手机号">1382383843</Descriptions.Item>
15
+          <Descriptions.Item label="微信昵称">Big Big</Descriptions.Item>
16
+          <Descriptions.Item label="微信ID">iwnxlspqpsisnxghgys</Descriptions.Item>
17
+          <Descriptions.Item label="身份证">320101200001011234</Descriptions.Item>
18
+          <Descriptions.Item label="头像">
19
+            <img src="" alt=""/>
20
+          </Descriptions.Item>
21
+        </Descriptions>
22
+      </Section>
23
+      <Section title="在当前房屋" subTitle={roomName} action={<Button type="link">修改</Button>}>
24
+        <Descriptions column={3}>
25
+          <Descriptions.Item label="身份">户主</Descriptions.Item>
26
+          <Descriptions.Item label="审核状态">未审核</Descriptions.Item>
27
+          <Descriptions.Item label="资料手机">1382383843</Descriptions.Item>
28
+          <Descriptions.Item label="人脸">
29
+            <img src="" alt=""/>
30
+          </Descriptions.Item>
31
+        </Descriptions>
32
+      </Section>
33
+      <Section title="关联本小区其他房屋">
34
+
35
+      </Section>
36
+      <p style={{ color: '#888' }}>
37
+        若想修改户主登录手机号,需要户主自己登录APP在个人中心修改。
38
+        或者联系荟房网络运营人员核实后修改,因为此手机号可能在其他社区在用。
39
+        若想修改成员为其他成员的手机号,请删除此成员后添加新成员。 
40
+      </p>
41
+    </div>
42
+  )
43
+}

+ 20
- 0
src/pages/property/proprietor/components/Section.jsx 查看文件

@@ -0,0 +1,20 @@
1
+import React from 'react'
2
+import classNames from 'classnames'
3
+import Styles from './style.less'
4
+
5
+export default props => {
6
+  return (
7
+    <div className={Styles['pro-sec']}>
8
+      <div className={classNames(Styles['sec-head'], Styles.title)}>
9
+        {props.title}
10
+      </div>
11
+      <div className={Styles['sec-body']}>
12
+        <div className={Styles['sub-title']}>{props.subTitle}</div>
13
+        {props.children}
14
+      </div>
15
+      <div className={Styles['sec-action']}>
16
+        {props.action}
17
+      </div>
18
+    </div>
19
+  )
20
+}

+ 37
- 0
src/pages/property/proprietor/components/style.less 查看文件

@@ -0,0 +1,37 @@
1
+
2
+.pro-sec {
3
+  padding: 16px;
4
+  border-bottom: 1px solid #FF7E48;
5
+  display: flex;
6
+
7
+  // & + .pro-sec {
8
+  //   margin-top: 16px;
9
+  // }
10
+
11
+  .sec-head {
12
+    flex: none;
13
+    width: 180px;
14
+  }
15
+
16
+  .sec-body {
17
+    flex: auto;
18
+  }
19
+  
20
+  .sec-action {
21
+    max-width: 100px;
22
+    flex: auto;
23
+    line-height: 40px;
24
+  }
25
+
26
+  .title {
27
+    color: #606266;
28
+    font-weight: 700;
29
+    line-height: 40px;
30
+  }
31
+
32
+  .sub-title {
33
+    color: #888;
34
+    font-weight: 400;
35
+    line-height: 40px;
36
+  }
37
+}

+ 213
- 0
src/pages/property/proprietor/index.jsx 查看文件

@@ -0,0 +1,213 @@
1
+import React, { useState, useEffect } from 'react'
2
+import { Select, Spin, Table, Button, Form, Input } from 'antd'
3
+import NavLink from 'umi/navlink'
4
+import { fetchList, apis } from '@/utils/request'
5
+import Search from '../components/Search'
6
+import List from '../components/List'
7
+
8
+const fetchPhaseList = fetchList(apis.buildingOwnerInfo.getPhaseList)
9
+const fetchBuildingList = fetchList(apis.buildingOwnerInfo.getBuildingList)
10
+const fetchUnitList = fetchList(apis.buildingOwnerInfo.getUnitList)
11
+const fetchLevelList = fetchList(apis.buildingOwnerInfo.getLevelList)
12
+const fetchRoomNoList = fetchList(apis.buildingOwnerInfo.getRoomNoList)
13
+
14
+const Condition = props => {
15
+  const [phaseList, setPhaseList] = useState([])
16
+  const [buildingList, setBuildingList] = useState([])
17
+  const [unitList, setUnitList] = useState([])
18
+  const [levelList, setLevelList] = useState([])
19
+  const [roomNoList, setRoomNoList] = useState([])
20
+
21
+  useEffect(() => {
22
+    // getPhaseList()
23
+  }, [])
24
+
25
+  return (    
26
+    <Search
27
+      onSearch={props.onSearch}
28
+      onReset={props.onReset}
29
+      render={form => {
30
+        const { getFieldDecorator, setFieldsValue } = form
31
+        
32
+        const getPhaseList = () => {}
33
+        const getBuildingList = () => {}
34
+        const getUnitList = () => {}
35
+        const getLevelList = () => {}
36
+        const getRoomNoList  = () => {}
37
+
38
+        return (
39
+          <>
40
+            <Form.Item>
41
+            {
42
+              getFieldDecorator('phaseId')(
43
+                <Select onChange={getBuildingList} style={{ minWidth: '120px' }} placeholder="期/区">
44
+                  {
45
+                    phaseList.map(x => (<Select.Option key={x.id} value={x.id}>{x.name}</Select.Option>))
46
+                  }
47
+                </Select>
48
+              )
49
+            }
50
+            </Form.Item>
51
+            <Form.Item>
52
+            {
53
+              getFieldDecorator('buildingId')(
54
+                <Select onChange={getUnitList} style={{ minWidth: '120px' }} placeholder="栋">
55
+                  {
56
+                    buildingList.map(x => (<Select.Option key={x.id} value={x.id}>{x.name}</Select.Option>))
57
+                  }
58
+                </Select>
59
+              )
60
+            }
61
+            </Form.Item>
62
+            <Form.Item>
63
+            {
64
+              getFieldDecorator('unitId')(
65
+                <Select onChange={getLevelList} style={{ minWidth: '120px' }} placeholder="单元">
66
+                  {
67
+                    unitList.map(x => (<Select.Option key={x.id} value={x.id}>{x.name}</Select.Option>))
68
+                  }
69
+                </Select>
70
+              )
71
+            }
72
+            </Form.Item>
73
+            <Form.Item>
74
+            {
75
+              getFieldDecorator('levelId')(
76
+                <Select onChange={getRoomNoList} style={{ minWidth: '120px' }} placeholder="楼层">
77
+                  {
78
+                    levelList.map(x => (<Select.Option key={x.id} value={x.id}>{x.name}</Select.Option>))
79
+                  }
80
+                </Select>
81
+              )
82
+            }
83
+            </Form.Item>
84
+            <Form.Item>
85
+            {
86
+              getFieldDecorator('roomNoId')(
87
+                <Select style={{ minWidth: '120px' }} placeholder="户号">
88
+                  {
89
+                    roomNoList.map(x => (<Select.Option key={x.id} value={x.id}>{x.name}</Select.Option>))
90
+                  }
91
+                </Select>
92
+              )
93
+            }
94
+            </Form.Item>
95
+            <Form.Item>
96
+            {
97
+              getFieldDecorator('ownerName')(<Input style={{ width: '160px' }} placeholder="姓名" />)
98
+            }
99
+            </Form.Item>
100
+            <Form.Item>
101
+            {
102
+              getFieldDecorator('ownerTel')(<Input style={{ width: '160px' }} placeholder="手机号" />)
103
+            }
104
+            </Form.Item>
105
+            <Form.Item>
106
+            {
107
+              getFieldDecorator('idCard')(<Input style={{ width: '200px' }} placeholder="身份证" />)
108
+            }
109
+            </Form.Item>
110
+          </>
111
+        )
112
+      }}
113
+    />
114
+  )
115
+}
116
+
117
+const verifyStatusDict = {
118
+  '0': '未审核',
119
+  '1': '审核通过',
120
+  '2': '审核不通过'
121
+}
122
+
123
+export default props => {
124
+  const [loading, setLoading] = useState(false)
125
+  const [listData, setListData] = useState([])
126
+
127
+  const handleSearch = () => {
128
+
129
+  }
130
+
131
+  const handleDeleteRow = row => {
132
+
133
+  }
134
+
135
+  const handlePageChange = (pageNum, pageSize) => {
136
+
137
+  }
138
+
139
+  return (
140
+    <div>
141
+      <Condition onSearch={handleSearch} onReset={handleSearch} />
142
+      <div style={{ margin: '24px 0' }}>
143
+        <NavLink to={`/xxx`}>
144
+          <Button type="primary">添加</Button>
145
+        </NavLink>
146
+        <Button style={{ marginLeft: '24px' }}>批量导入业主资料</Button>
147
+      </div>
148
+      <Spin spinning={loading}>
149
+        <List dataSource={listData} onPageChange={handlePageChange} rowKey="userVerifyId">
150
+          <Table.Column title="编号" dataIndex="userVerifyId" key="userVerifyId" />
151
+          <Table.Column
152
+            title="姓名"
153
+            dataIndex="ownerName"
154
+            key="ownerName"
155
+            render={(_, row) => {
156
+              return (
157
+                <NavLink to={`/xxx?id=${row.userVerifyId}`}>
158
+                  <Button type="link">{row.ownerName}</Button>
159
+                </NavLink>
160
+              )
161
+            }}
162
+          />
163
+          <Table.Column title="手机号" dataIndex="ownerTel" key="ownerTel" />
164
+          <Table.Column title="身份证" dataIndex="idCard" key="idCard" />
165
+          <Table.Column
166
+            title="房间号"
167
+            dataIndex="roomNoName"
168
+            key="roomNoName"
169
+            render={(_, row) => {
170
+              return (
171
+                <span>
172
+                  {row.phaseName + row.buildingName + row.unitName + row.levelName + row.roomNoName}
173
+                </span>
174
+              )
175
+            }}
176
+          />
177
+          <Table.Column title="身份" dataIndex="roleName" key="roleName" />
178
+          <Table.Column
179
+            title="审核状态"
180
+            dataIndex="verifyStatus"
181
+            key="verifyStatus"
182
+            render={(_, row) => {
183
+              return (
184
+                <span>
185
+                  {verifyStatusDict[row.verifyStatus] || ''}
186
+                </span>
187
+              )
188
+            }}
189
+          />
190
+          <Table.Column title="编辑人" dataIndex="updateName" key="updateName" />
191
+          <Table.Column title="编辑时间" dataIndex="createDate" key="createDate" />
192
+          <Table.Column
193
+            title="操作"
194
+            key="action"
195
+            render={(_, row) => {
196
+              return (
197
+                <Popconfirm
198
+                  title="确认进行删除操作?"
199
+                  onConfirm={() => handleDeleteRow(row)}
200
+                  okText="删除"
201
+                  cancelText="取消"
202
+                >
203
+                  <Button type="link">删除</Button>
204
+                </Popconfirm>
205
+              )
206
+            }}
207
+          />
208
+        </List>
209
+      </Spin>
210
+
211
+    </div>
212
+  )
213
+}

+ 1
- 1
src/pages/recommend/recommendCustomer/style.css 查看文件

@@ -1,5 +1,5 @@
1 1
 .SubmitButton {
2
-  background: #ef273a;
2
+  /* background: #ef273a; */
3 3
   border-radius: 7px;
4 4
   border: 0px;
5 5
 }

+ 1
- 1
src/pages/record/report/style.css 查看文件

@@ -1,5 +1,5 @@
1 1
 .SubmitButton {
2
-  background: #ef273a;
2
+  /* background: #ef273a; */
3 3
   border-radius: 7px;
4 4
   border: 0px;
5 5
 }

+ 1
- 1
src/pages/user/login/components/Login/LoginSubmit.jsx 查看文件

@@ -9,7 +9,7 @@ const LoginSubmit = ({ className, ...rest }) => {
9 9
   const clsString = classNames(styles.submit, className);
10 10
   return (
11 11
     <FormItem>
12
-      <Button size="large" className={clsString} type="primary" htmlType="submit" {...rest} style={{ backgroundColor: '#EF273A', borderRadius: '4px', border: 'none' }} />
12
+      <Button size="large" className={clsString} type="primary" htmlType="submit" {...rest} style={{ borderRadius: '4px', border: 'none' }} />
13 13
     </FormItem>
14 14
   );
15 15
 };

+ 1
- 1
src/pages/user/login/components/Login/index.less 查看文件

@@ -93,7 +93,7 @@ position: relative;
93 93
   .prefixIcon {
94 94
     color: #fff;
95 95
     font-size:  0.106rem;
96
-    background-color: #EF273A;
96
+    // background-color: #EF273A;
97 97
     padding: 3px 4px;
98 98
   }
99 99
 

+ 4
- 0
src/services/apis.js 查看文件

@@ -1,4 +1,6 @@
1 1
 import { APIBaseURL, AMapAPIPrefix } from '../utils/constant'
2
+import bill from './bill'
3
+import buildingOwnerInfo from './buildingOwnerInfo'
2 4
 
3 5
 const prefix = `${APIBaseURL}api/admin`
4 6
 
@@ -7,6 +9,8 @@ const prefix = `${APIBaseURL}api/admin`
7 9
 const amapPrefix = AMapAPIPrefix
8 10
 
9 11
 export default {
12
+  bill: bill(prefix),
13
+  buildingOwnerInfo: buildingOwnerInfo(prefix),
10 14
   image: {
11 15
     uploadForAnt: {
12 16
       url: `${prefix}/antd/image`,

+ 44
- 0
src/services/bill.js 查看文件

@@ -0,0 +1,44 @@
1
+
2
+export default prefix => ({
3
+  fetchBillList: {
4
+    url: `${prefix}/bills`,
5
+    method: 'get',
6
+    action: 'admin.bills'
7
+  },
8
+
9
+  // 保存草稿 或者 发布账单
10
+  billUploadExcelAdd: {
11
+    url: `${prefix}/bill/uploadExcel/add`,
12
+    method: 'post',
13
+    action: 'admin.bill.add'
14
+  },
15
+
16
+  // 根据 id 修改缴费项状态
17
+  updateBillStatus: {
18
+    url: `${prefix}/bill/updateBillStatus/:id`,
19
+    method: 'put',
20
+    action: 'admin.bill.status'
21
+  },
22
+
23
+  //  根据 id集合 删除缴费项
24
+  deleteBillBeach: {
25
+    url: `${prefix}/bill/deleteBillBeach`,
26
+    method: 'post',
27
+    action: 'admin.bill.delete'
28
+  },
29
+
30
+  // 下载excel模板
31
+  billDownloadExcel: {
32
+    url: `${prefix}/bill/downloadExcel`,
33
+    method: 'get',
34
+    action: 'admin.bill.downloadExcel'
35
+  },
36
+
37
+  // 根据收费项ID查询,收费项详情
38
+  getBillInfoBydId: {
39
+    url: `${prefix}/bill/:id`,
40
+    method: 'get',
41
+    action: 'admin.bill.get'
42
+  }
43
+
44
+})

+ 178
- 0
src/services/buildingOwnerInfo.js 查看文件

@@ -0,0 +1,178 @@
1
+
2
+const moduleName = 'buildingInfo'
3
+
4
+export default prefix => {
5
+  return {
6
+    getTrees: {
7
+      url: `${prefix}/${moduleName}/trees`,
8
+      method: 'get',
9
+      action: `admin.${moduleName}.trees`
10
+    },
11
+
12
+    //  查询 楼栋/单元/楼层/户号
13
+    getPhaseList: {
14
+      url: `${prefix}/${moduleName}/phase`,
15
+      method: 'get',
16
+      action: `admin.${moduleName}.phase`
17
+    },
18
+
19
+    //  查询 楼栋/单元/楼层/户号
20
+    getBuildingList: {  
21
+      url: `${prefix}/${moduleName}/building`,
22
+      method: 'get',
23
+      action: `admin.${moduleName}.building`
24
+    },
25
+
26
+    //  查询 楼栋/单元/楼层/户号
27
+    getUnitList: {  
28
+      url: `${prefix}/${moduleName}/unit`,
29
+      method: 'get',
30
+      action: `admin.${moduleName}.unit`
31
+    },
32
+
33
+    //  查询 楼栋/单元/楼层/户号
34
+    getLevelList: {
35
+      url: `${prefix}/${moduleName}/level`,
36
+      method: 'get',
37
+      action: `admin.${moduleName}.level`
38
+    },
39
+
40
+    //  查询 楼栋/单元/楼层/户号
41
+    getRoomNoList: {
42
+      url: `${prefix}/${moduleName}/roomno`,
43
+      method: 'get',
44
+      action: `admin.${moduleName}.roomno`
45
+    },
46
+
47
+    // 获取楼栋户主信息列表
48
+    buildingList: {
49
+      url: `${prefix}/${moduleName}/list`,
50
+      method: 'post',
51
+      action: `admin.${moduleName}.list.post`
52
+    },
53
+
54
+    // 认证通过户主信息
55
+    userPassCertification: {
56
+      url: `${prefix}/${moduleName}/userPassCertification`,
57
+      method: 'post',
58
+      action: `admin.${moduleName}.userPassCertification.post`
59
+    },
60
+
61
+    // 修改停用或启用
62
+    updataPassCertification: {  
63
+      url: `${prefix}/${moduleName}/updataPassCertification`,
64
+      method: 'post',
65
+      action: `admin.${moduleName}.updataPassCertification.post`
66
+    },
67
+
68
+    // 批量删除 楼栋户主信息
69
+    deleteBuilding: {
70
+      url: `${prefix}/${moduleName}/delete`,
71
+      method: 'delete',
72
+      action: `admin.${moduleName}.delete`
73
+    },
74
+
75
+    // 添加楼栋户主信息
76
+    addBuilding: {
77
+      url: `${prefix}/${moduleName}/add`,
78
+      method: 'post',
79
+      action: `admin.${moduleName}.add`
80
+    },
81
+
82
+    // 修改楼栋户主信息
83
+    updateBuilding: {
84
+      url: `${prefix}/${moduleName}/update`,
85
+      method: 'put',
86
+      action: `admin.${moduleName}.update`
87
+    },
88
+
89
+    // 根据楼栋信息 id 查询
90
+    getByIdBuildingId: {
91
+      url: `${prefix}/${moduleName}/verify/:buildingId`,
92
+      method: 'get',
93
+      action: `admin.${moduleName}.verify`
94
+    },
95
+    
96
+    // 获取楼栋户主信息列表
97
+    communityBuildinglist: {
98
+      url: `${prefix}/${moduleName}/buildinglist`,
99
+      method: 'post',
100
+      action: `admin.${moduleName}.buildinglist`
101
+    },
102
+    
103
+    // 查询小区楼栋资料库
104
+    buildingHouse: {
105
+      url: `${prefix}/${moduleName}/buildinghouse`,
106
+      method: 'post',
107
+      action: `admin.${moduleName}.buildinghouse`
108
+    },
109
+
110
+    // 查询小区楼栋资料库
111
+    communityBuildingAdd: {
112
+      url: `${prefix}/${moduleName}/communitybuilding/update`,
113
+      method: 'post',
114
+      action: `admin.${moduleName}.communitybuilding.update`
115
+    },
116
+
117
+    // 下载excel模板
118
+    buildingDownloadExcel: {
119
+      url: `${prefix}/${moduleName}/downloadExcel`,
120
+      method: 'get',
121
+      action: `admin.${moduleName}.downloadExcel.update`
122
+    },
123
+
124
+    // 添加当前期/栋/单元/层/户/节点
125
+    addNode: {
126
+      url: `${prefix}/${moduleName}/addnode`,
127
+      method: 'post',
128
+      action: `admin.${moduleName}.addnode`
129
+    },
130
+
131
+    // 删除当前期/栋/单元/层/户/节点
132
+    deleteNode: {
133
+      url: `${prefix}/${moduleName}/deletenode`,
134
+      method: 'post',
135
+      action: `admin.${moduleName}.deletenode`
136
+    },
137
+
138
+    // 查新楼栋信息详情
139
+    buildingDetails: {
140
+      url: `${prefix}/${moduleName}/details`,
141
+      method: 'post',
142
+      action: `admin.${moduleName}.details`
143
+    },
144
+
145
+    // 楼栋详情审核用户
146
+    verifyinfoAdd: {
147
+      url: `${prefix}/${moduleName}/user/verifyinfo/:userVerifyId`,
148
+      method: 'put',
149
+      action: `admin.${moduleName}.user.verifyinfo`
150
+    },
151
+
152
+    //
153
+    uploadBuildingExcel: {
154
+      url: `${prefix}/${moduleName}/building/uploadExcel`,
155
+      method: 'post',
156
+      action: `admin.${moduleName}.building.uploadExcel`
157
+    },
158
+
159
+    submitBuildingExcel: {
160
+      url: `${prefix}/${moduleName}/building/submitExcel`,
161
+      method: 'post',
162
+      action: `admin.${moduleName}.building.submitExcel`
163
+    },
164
+
165
+    uploadBuildingTreeExcel: {
166
+      url: `${prefix}/${moduleName}/tree/uploadExcel`,
167
+      method: 'post',
168
+      action: `admin.${moduleName}.tree.uploadExcel`
169
+    },
170
+
171
+    submitBuildingTreeExcel: {
172
+      url: `${prefix}/${moduleName}/tree/submitExcel`,
173
+      method: 'post',
174
+      action: `admin.${moduleName}.tree.submitExcel`
175
+    }
176
+
177
+  }
178
+}