张延森 před 4 roky
rodič
revize
72196edd44

+ 32
- 0
config/routes.js Zobrazit soubor

@@ -574,6 +574,38 @@ export default [
574 574
                 component: './property/proprietor/Detail',
575 575
                 hideInMenu: true,
576 576
               },
577
+              {
578
+                path: 'notice',
579
+                name: '公告管理',
580
+                component: './property/notice'
581
+              },
582
+              {
583
+                path: 'notice/edit',
584
+                name: '公告管理详情',
585
+                component: './property/notice/Edit',
586
+                hideInMenu: true,
587
+              },
588
+              {
589
+                path: 'bill/management',
590
+                name: '收费组管理',
591
+                component: './property/bill/list',
592
+              },
593
+              {
594
+                path: 'bill/management/add',
595
+                name: '新增收费组',
596
+                component: './property/bill/edit',
597
+                hideInMenu: true,
598
+              },
599
+              {
600
+                path: 'bill/order',
601
+                name: '订单管理',
602
+                component: './property/bill/order',
603
+              },
604
+              {
605
+                path: 'bill/ticket',
606
+                name: '工单管理',
607
+                component: './property/ticket',
608
+              },
577 609
             ]
578 610
           },
579 611
           // {

+ 23
- 24
src/global.less Zobrazit soubor

@@ -70,24 +70,23 @@ ol {
70 70
 }
71 71
  
72 72
 .ant-layout{
73
-  .ant-menu-vertical .ant-menu-item,
74
-.ant-menu-vertical-left .ant-menu-item,
75
-.ant-menu-vertical-right .ant-menu-item,
76
-.ant-menu-inline .ant-menu-item,
77
-.ant-menu-vertical .ant-menu-submenu-title,
78
-.ant-menu-vertical-left .ant-menu-submenu-title,
79
-.ant-menu-vertical-right .ant-menu-submenu-title,
80
-.ant-menu-inline .ant-menu-submenu-title,
81
-.ant-input ,.ant-btn,.ant-select,.ant-table,.ant-form-item,.ant-form label,.ant-tabs-nav-container {
82
-  font-size: 0.096rem;
83
-  
84
-}
85
-.ant-input{
86
-  height: 32px;
87
-  border-radius: 4px;
88
-  padding: 0 0 0 10px;
89
-  align-items: center;
90
-}
73
+//   .ant-menu-vertical .ant-menu-item,
74
+// .ant-menu-vertical-left .ant-menu-item,
75
+// .ant-menu-vertical-right .ant-menu-item,
76
+// .ant-menu-inline .ant-menu-item,
77
+// .ant-menu-vertical .ant-menu-submenu-title,
78
+// .ant-menu-vertical-left .ant-menu-submenu-title,
79
+// .ant-menu-vertical-right .ant-menu-submenu-title,
80
+// .ant-menu-inline .ant-menu-submenu-title,
81
+// .ant-input ,.ant-btn,.ant-select,.ant-table,.ant-form-item,.ant-form label,.ant-tabs-nav-container {
82
+//   font-size: 0.096rem;  
83
+// }
84
+// .ant-input{
85
+//   height: 32px;
86
+//   border-radius: 4px;
87
+//   padding: 0 0 0 10px;
88
+//   align-items: center;
89
+// }
91 90
 // .ant-radio-button-wrapper{
92 91
 //   color: #FF7E48;
93 92
 //   border: 1px solid #FF7E48;
@@ -108,12 +107,12 @@ ol {
108 107
 //   border-color: #FF7E48;
109 108
 //   color: #FF7E48; ;
110 109
 // }
111
-.ant-row.ant-form-item .ant-form-item-label.ant-col-sm-3{
112
-  min-width: 100px;
113
-}
114
-.ant-card-body{
115
-  padding: 0;
116
-}
110
+// .ant-row.ant-form-item .ant-form-item-label.ant-col-sm-3{
111
+//   min-width: 100px;
112
+// }
113
+// .ant-card-body{
114
+//   padding: 0;
115
+// }
117 116
 .antd-pro-pages-index-echarts-styles-pie,.antd-pro-pages-index-echarts-styles-bar{
118 117
   padding: 40px;
119 118
   margin-bottom: 40px;

+ 36
- 0
src/pages/property/bill/edit/components/AddOn.jsx Zobrazit soubor

@@ -0,0 +1,36 @@
1
+import React, { useState } from 'react'
2
+import { Button, Upload, Icon, Table } from 'antd'
3
+import List from '../../../components/List'
4
+
5
+const Section = props => {
6
+  return (
7
+    <p style={{ color: '#99a9bf', fontSize: '13px' }}>
8
+      {props.children}
9
+    </p>
10
+  )
11
+}
12
+
13
+export default props => {
14
+  const [listData, setListData] = useState([])
15
+
16
+  return (
17
+    <div>
18
+      <Section>
19
+        <span>如果还未制作账单,请先下载账单模板,按规则填写费用后再上传</span>
20
+        <Button type="link" size="small" style={{ marginLeft: '6px' }}><Icon type="download" />下载模板</Button>
21
+        <Button type="link" size="small"><Icon type="upload" />选取账单文件并预览</Button>
22
+      </Section>
23
+      <Section>
24
+        <span>如果想修改下表的内容,请重新下载excel模板填写金额后上传,系统会直接删除下表所有旧数据,以新的excel内容为准</span>
25
+      </Section>
26
+      <List dataSource={listData} size="small" bordered>
27
+        <Table.Column align="center" title="房屋信息" dataIndex="phase" key="phase" render={(_, row) => (row.phase + row.building + row.unit + row.level + row.roomNo)} />
28
+        <Table.Column align="center" title="收费说明" dataIndex="billExplain" key="billExplain" />
29
+        <Table.Column align="center" title="收费金额(元)" dataIndex="payPrice" key="payPrice" render={payPrice => (payPrice === null || payPrice === undefined ? '' : Number(payPrice/100).toFixed(2))} />
30
+      </List>
31
+      <Section>
32
+        <span>点击发送后账单会发送给对应家庭,家庭中的成员都可以查看到他们家的收费项,缴费成功无法线上退款,只能线下当面退款,请先保存为草稿,核对无误后再发送账单给住户</span>
33
+      </Section>
34
+    </div>
35
+  )
36
+}

+ 94
- 0
src/pages/property/bill/edit/index.jsx Zobrazit soubor

@@ -0,0 +1,94 @@
1
+import React from 'react'
2
+import router from 'umi/router'
3
+import { Button, Form, Input, DatePicker } from 'antd'
4
+import AddOn from './components/AddOn'
5
+
6
+const formItemLayout = {
7
+  labelCol: {
8
+    xs: { span: 24 },
9
+    sm: { span: 6 },
10
+  },
11
+  wrapperCol: {
12
+    xs: { span: 24 },
13
+    sm: { span: 12 },
14
+  },
15
+}
16
+
17
+const tailFormItemLayout = {
18
+  wrapperCol: {
19
+    xs: {
20
+      span: 24,
21
+      offset: 0,
22
+    },
23
+    sm: {
24
+      span: 16,
25
+      offset: 6,
26
+    },
27
+  },
28
+}
29
+
30
+export default Form.create()(props => {
31
+
32
+  const handleSubmit = values => {
33
+
34
+  }
35
+
36
+  const { getFieldDecorator } = props.form
37
+
38
+  return (
39
+    <div>
40
+      <Form {...formItemLayout} onSubmit={handleSubmit}>
41
+        <Form.Item label="收费组名称">
42
+        {
43
+          getFieldDecorator('billName', {
44
+            rules: [
45
+              {
46
+                required: true,
47
+                message: '请填写收费组名称',
48
+              },
49
+            ],
50
+          })(
51
+            <Input />
52
+          )
53
+        }
54
+        </Form.Item>
55
+        <Form.Item label="收费组说明">
56
+        {
57
+          getFieldDecorator('billExplain', {
58
+            rules: [
59
+              {
60
+                required: true,
61
+                message: '请填写收费组说明',
62
+              },
63
+            ],
64
+          })(
65
+            <Input />
66
+          )
67
+        }
68
+        </Form.Item>
69
+        <Form.Item label="截止时间">
70
+        {
71
+          getFieldDecorator('endDate', {
72
+            rules: [
73
+              {
74
+                required: true,
75
+                message: '请填写公告内容',
76
+              },
77
+            ],
78
+          })(
79
+            <DatePicker />
80
+          )
81
+        }
82
+        </Form.Item>
83
+        <Form.Item label=" " colon={false}>
84
+          <AddOn />
85
+        </Form.Item>
86
+        <Form.Item {...tailFormItemLayout} >
87
+          <Button type="primary" htmlType="submit">草稿</Button>
88
+          <Button type="danger" style={{ marginLeft: '24px' }}>发布</Button>
89
+          <Button style={{ marginLeft: '24px' }} onClick={() => router.go(-1)}>取消</Button>
90
+        </Form.Item>
91
+      </Form>
92
+    </div>
93
+  )
94
+})

+ 1
- 3
src/pages/property/bill/index.jsx Zobrazit soubor

@@ -1,3 +1 @@
1
-import React from 'react'
2
-
3
-
1
+import React, { useState, useEffect } from 'react'

+ 10
- 13
src/pages/property/bill/list/index.jsx Zobrazit soubor

@@ -1,6 +1,7 @@
1 1
 import React, { useRef, useState } from 'react'
2
-import { Spin, Form, Input, Divider, Button } from 'antd'
2
+import { Spin, Form, Input, Divider, Button, Row, Col } from 'antd'
3 3
 import router from 'umi/router'
4
+import NavLink from 'umi/navlink'
4 5
 import { fetch, fetchList, apis } from '@/utils/request'
5 6
 import Search from '../../components/Search'
6 7
 import List from '../../components/List'
@@ -11,7 +12,7 @@ const Condition = props => {
11 12
     <Search
12 13
       onSearch={props.onSearch}
13 14
       onReset={props.onReset}
14
-      render={({ form }) => {
15
+      render={form => {
15 16
         const { getFieldDecorator } = form
16 17
 
17 18
         return (
@@ -165,7 +166,7 @@ export default props => {
165 166
     setPagination(defaultPage)
166 167
     getListData({
167 168
       ...defaultPage,
168
-      ...pageRef.current,
169
+      ...queryRef.current,
169 170
     })
170 171
   }
171 172
 
@@ -175,7 +176,7 @@ export default props => {
175 176
     getListData({
176 177
       pageNum,
177 178
       pageSize,
178
-      ...pageRef.current,
179
+      ...queryRef.current,
179 180
     })
180 181
   }
181 182
 
@@ -187,10 +188,6 @@ export default props => {
187 188
     }
188 189
   }
189 190
 
190
-  const handleAddRow = () => {
191
-    router.push(`/bill/management/add`)
192
-  }
193
-
194 191
   const handleDeleteRow = row => {
195 192
     setLoading(true)
196 193
     deleteBillBeach({ data: [row.id] }).then(res => {
@@ -202,12 +199,12 @@ export default props => {
202 199
   return (
203 200
     <div>
204 201
       <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>
202
+      <div style={{ margin: '24px 0' }}>
203
+        <NavLink to={`/property/bill/management/add`}>
204
+          <Button type="primary">添加</Button>
205
+        </NavLink>
209 206
       </div>
210
-      <Spin loading={loading}>
207
+      <Spin spinning={loading}>
211 208
         <TableList
212 209
           dataSource={listData}
213 210
           pagination={pagination}

+ 146
- 0
src/pages/property/bill/order/index.jsx Zobrazit soubor

@@ -0,0 +1,146 @@
1
+import React, { useState, useEffect } from 'react'
2
+import { Select, Spin, Table, Button, Form, Input, Divider } 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 Condition = props => {
9
+  return (
10
+    <Search
11
+      onSearch={props.onSearch}
12
+      onReset={props.onReset}
13
+      render={form => {
14
+        const { getFieldDecorator, setFieldsValue } = form
15
+        
16
+        return (
17
+          <>
18
+            <Form.Item label="订单号">
19
+            {
20
+              getFieldDecorator('orderBumber')(<Input placeholder="公告编号" />)
21
+            }
22
+            </Form.Item>
23
+            <Form.Item label="缴费项目编号">
24
+            {
25
+              getFieldDecorator('billId')(<Input placeholder="缴费项目编号" />)
26
+            }
27
+            </Form.Item>
28
+            <Form.Item label="缴费项目名">
29
+            {
30
+              getFieldDecorator('billName')(<Input placeholder="缴费项目名" />)
31
+            }
32
+            </Form.Item>
33
+            <Form.Item label="收费单号">
34
+            {
35
+              getFieldDecorator('billInvoiceId')(<Input placeholder="收费单号" />)
36
+            }
37
+            </Form.Item>
38
+            <Form.Item label="缴费人手机号">
39
+            {
40
+              getFieldDecorator('payPhone')(<Input placeholder="缴费人手机号" />)
41
+            }
42
+            </Form.Item>
43
+          </>
44
+        )
45
+      }}
46
+    />
47
+  )
48
+}
49
+
50
+const StatusDict = {
51
+  '0': '未支付',
52
+  '1': '已支付',
53
+  '2': '支付中',
54
+  '3': '已关闭',
55
+}
56
+
57
+const PayTypeDict = {
58
+  '0': '微信缴费',
59
+  '1': '线下缴费',
60
+  '2': '支付宝缴费',
61
+}
62
+
63
+export default props => {
64
+  const [loading, setLoading] = useState(false)
65
+  const [listData, setListData] = useState([])
66
+
67
+  const handleSearch = () => {
68
+
69
+  }
70
+
71
+  const handleDeleteRow = row => {
72
+
73
+  }
74
+
75
+  const handleEditRow = row => {
76
+
77
+  }
78
+
79
+  const handlePageChange = (pageNum, pageSize) => {
80
+
81
+  }
82
+
83
+  const exportExcel = () => {
84
+
85
+  }
86
+
87
+  return (
88
+    <div>
89
+      <Condition onSearch={handleSearch} onReset={handleSearch} />
90
+      <div style={{ margin: '24px 0' }}>
91
+        <Button type="primary" onClick={exportExcel}>导出数据</Button>
92
+      </div>
93
+      <Spin spinning={loading}>
94
+        <List dataSource={listData} onPageChange={handlePageChange} rowKey="id">
95
+          <Table.Column
96
+            title="订单号"
97
+            dataIndex="id"
98
+            key="id"
99
+            render={(_, row) => {
100
+              return (
101
+                <NavLink to={`/xxx?id=${row.id}`}>
102
+                  <Button type="link">{row.orderBumber}</Button>
103
+                </NavLink>
104
+              )
105
+            }}
106
+          />
107
+          <Table.Column
108
+            title="收费组编号"
109
+            dataIndex="billId"
110
+            key="billId"
111
+            render={(_, row) => {
112
+              return (row.billIdList || []).map(item => (
113
+                <NavLink key={item} to={`/xxx?id=${item}`}>
114
+                  <Button type="link">{item}</Button>
115
+                </NavLink>
116
+              ))
117
+            }}
118
+          />
119
+          <Table.Column
120
+            title="收费单号"
121
+            dataIndex="billInvoiceId"
122
+            key="billInvoiceId"
123
+            render={(_, row) => {
124
+              return (row.billInvoiceIdList || []).map(item => (
125
+                <span key={item}>{item}</span>
126
+              ))
127
+            }}
128
+          />
129
+          <Table.Column title="总费用金额" dataIndex="sumPrice" key="sumPrice" render={sumPrice => (sumPrice === null || sumPrice === undefined ? '' : Number(sumPrice).toFixed(2))} />
130
+          <Table.Column
131
+            title="订单状态"
132
+            dataIndex="orderStatus"
133
+            key="orderStatus"
134
+            render={(_, row) => StatusDict[row.orderStatus]}
135
+          />
136
+          <Table.Column title="缴费人手机号" dataIndex="payPhone" key="payPhone" />
137
+          <Table.Column title="缴费备注" dataIndex="payRemark" key="payRemark" />
138
+          <Table.Column title="缴费方式" dataIndex="payType" key="payType" render={payType => PayTypeDict[payType]}/>
139
+          <Table.Column title="订单生成时间" dataIndex="createTime" key="createTime" />
140
+          <Table.Column title="缴费完成时间" dataIndex="updateDate" key="updateDate" />
141
+        </List>
142
+      </Spin>
143
+
144
+    </div>
145
+  )
146
+}

+ 2
- 1
src/pages/property/components/Search.jsx Zobrazit soubor

@@ -1,5 +1,6 @@
1 1
 import React from 'react'
2 2
 import { Form, Button, Row } from 'antd'
3
+import Styles from './style.less'
3 4
 
4 5
 export default Form.create()(props => {
5 6
   const handleSubmit = e => {
@@ -19,7 +20,7 @@ export default Form.create()(props => {
19 20
   }
20 21
 
21 22
   return (
22
-    <Form layout="inline" onSubmit={handleSubmit}>
23
+    <Form layout="inline" onSubmit={handleSubmit} className={Styles['x-search-form']}>
23 24
       <div style={{ display: 'flex', width: '100%' }}>
24 25
         <div style={{ flex: 'none', maxWidth: 'calc(100% - 180px)' }}>
25 26
           {props.render(props.form)}

+ 6
- 0
src/pages/property/components/style.less Zobrazit soubor

@@ -0,0 +1,6 @@
1
+
2
+.x-search-form {
3
+  // .ant-form-item {
4
+  //   margin-bottom: 16px;
5
+  // }
6
+}

+ 91
- 0
src/pages/property/notice/Edit.jsx Zobrazit soubor

@@ -0,0 +1,91 @@
1
+import React from 'react'
2
+import router from 'umi/router'
3
+import { Button, Form, Input } from 'antd'
4
+import Wangedit from '@/components/Wangedit/Wangedit'
5
+import ImageListUpload from '@/components/XForm/ImageListUpload'
6
+
7
+const formItemLayout = {
8
+  labelCol: {
9
+    xs: { span: 24 },
10
+    sm: { span: 6 },
11
+  },
12
+  wrapperCol: {
13
+    xs: { span: 24 },
14
+    sm: { span: 12 },
15
+  },
16
+}
17
+
18
+const tailFormItemLayout = {
19
+  wrapperCol: {
20
+    xs: {
21
+      span: 24,
22
+      offset: 0,
23
+    },
24
+    sm: {
25
+      span: 16,
26
+      offset: 6,
27
+    },
28
+  },
29
+}
30
+
31
+export default Form.create()(props => {
32
+
33
+  const handleSubmit = values => {
34
+
35
+  }
36
+
37
+  const { getFieldDecorator } = props.form
38
+
39
+  return (
40
+    <div>
41
+      <Form {...formItemLayout} onSubmit={handleSubmit}>
42
+        <Form.Item label="公告标题">
43
+        {
44
+          getFieldDecorator('announcementTitle', {
45
+            rules: [
46
+              {
47
+                required: true,
48
+                message: '请填写公告标题',
49
+              },
50
+            ],
51
+          })(
52
+            <Input placeholder="20个汉字以内" />
53
+          )
54
+        }
55
+        </Form.Item>
56
+        <Form.Item label="公告轮播图" help="轮播图为横幅位展示图片,不会显示在公告详情页,建议尺寸1080*500,大小200KB以内">
57
+        {
58
+          getFieldDecorator('announcementCarouselImg', {
59
+            rules: [
60
+              {
61
+                required: true,
62
+                message: '请上传公告轮播图',
63
+              },
64
+            ],
65
+          })(
66
+            <ImageListUpload />
67
+          )
68
+        }
69
+        </Form.Item>
70
+        <Form.Item label="公告内容">
71
+        {
72
+          getFieldDecorator('announcementContent', {
73
+            rules: [
74
+              {
75
+                required: true,
76
+                message: '请填写公告内容',
77
+              },
78
+            ],
79
+          })(
80
+            <Wangedit />
81
+          )
82
+        }
83
+        </Form.Item>
84
+        <Form.Item {...tailFormItemLayout} >
85
+          <Button type="primary" htmlType="submit">确定</Button>
86
+          <Button style={{ marginLeft: '24px' }} onClick={() => router.go(-1)}>取消</Button>
87
+        </Form.Item>
88
+      </Form>
89
+    </div>
90
+  )
91
+})

src/pages/property/proprietor/Notice.jsx → src/pages/property/notice/index.jsx Zobrazit soubor

@@ -1,11 +1,10 @@
1 1
 import React, { useState, useEffect } from 'react'
2
-import { Select, Spin, Table, Button, Form, Input } from 'antd'
2
+import { Select, Spin, Table, Button, Form, Input, Divider } from 'antd'
3 3
 import NavLink from 'umi/navlink'
4 4
 import { fetchList, apis } from '@/utils/request'
5 5
 import Search from '../components/Search'
6 6
 import List from '../components/List'
7 7
 
8
-
9 8
 const Condition = props => {
10 9
   return (
11 10
     <Search
@@ -51,6 +50,10 @@ export default props => {
51 50
 
52 51
   }
53 52
 
53
+  const handleEditRow = row => {
54
+
55
+  }
56
+
54 57
   const handlePageChange = (pageNum, pageSize) => {
55 58
 
56 59
   }
@@ -59,11 +62,9 @@ export default props => {
59 62
     <div>
60 63
       <Condition onSearch={handleSearch} onReset={handleSearch} />
61 64
       <div style={{ margin: '24px 0' }}>
62
-        <NavLink to={`/xxx`}>
65
+        <NavLink to={`/property/notice/edit`}>
63 66
           <Button type="primary">添加</Button>
64 67
         </NavLink>
65
-        <Button style={{ marginLeft: '24px' }}>修改</Button>
66
-        <Button type="danger" style={{ marginLeft: '24px' }}>修改</Button>
67 68
       </div>
68 69
       <Spin spinning={loading}>
69 70
         <List dataSource={listData} onPageChange={handlePageChange} rowKey="id">
@@ -93,34 +94,27 @@ export default props => {
93 94
               return StatusDict[row.status]
94 95
             }}
95 96
           />
96
-          <Table.Column title="身份" dataIndex="roleName" key="roleName" />
97
-          <Table.Column
98
-            title="审核状态"
99
-            dataIndex="verifyStatus"
100
-            key="verifyStatus"
101
-            render={(_, row) => {
102
-              return (
103
-                <span>
104
-                  {verifyStatusDict[row.verifyStatus] || ''}
105
-                </span>
106
-              )
107
-            }}
108
-          />
109
-          <Table.Column title="编辑人" dataIndex="updateName" key="updateName" />
110
-          <Table.Column title="编辑时间" dataIndex="createDate" key="createDate" />
97
+          <Table.Column title="发布时间" dataIndex="createDate" key="createDate" />
98
+          <Table.Column title="发布人" dataIndex="createUserName" key="createUserName" />
99
+          <Table.Column title="修改时间" dataIndex="updateDate" key="updateDate" />
100
+          <Table.Column title="修改人" dataIndex="updateDateName" key="updateDateName" />
111 101
           <Table.Column
112 102
             title="操作"
113 103
             key="action"
114 104
             render={(_, row) => {
115 105
               return (
116
-                <Popconfirm
117
-                  title="确认进行删除操作?"
118
-                  onConfirm={() => handleDeleteRow(row)}
119
-                  okText="删除"
120
-                  cancelText="取消"
121
-                >
122
-                  <Button type="link">删除</Button>
123
-                </Popconfirm>
106
+                <>
107
+                  <Popconfirm
108
+                    title="确认进行作废操作?"
109
+                    onConfirm={() => handleDeleteRow(row)}
110
+                    okText="作废"
111
+                    cancelText="取消"
112
+                  >
113
+                    <Button type="link">删除</Button>
114
+                  </Popconfirm>
115
+                  <Divider type="vertical" />
116
+                  <Button type="link" onClick={() => handleEdit(row)}>编辑</Button>
117
+                </>
124 118
               )
125 119
             }}
126 120
           />

+ 185
- 0
src/pages/property/ticket/index.jsx Zobrazit soubor

@@ -0,0 +1,185 @@
1
+import React, { useState, useEffect } from 'react'
2
+import { Select, Spin, Table, Button, Form, Input, Divider, Typography } 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 TypeDict = [
9
+  {
10
+    label: '投诉',
11
+    value: '1',
12
+  },
13
+  {
14
+    label: '报修',
15
+    value: '2',
16
+  },
17
+  {
18
+    label: '联系物业',
19
+    value: '3',
20
+  },
21
+]
22
+
23
+const StatusDict = [
24
+  {
25
+    label: '待分配',
26
+    value: '0',
27
+  },
28
+  {
29
+    label: '拒绝处理',
30
+    value: '1',
31
+  },
32
+  {
33
+    label: '正在处理',
34
+    value: '3',
35
+  },
36
+  {
37
+    label: '待评价',
38
+    value: '4',
39
+  },
40
+  {
41
+    label: '已评价',
42
+    value: '5',
43
+  },
44
+  {
45
+    label: '已终止',
46
+    value: '6',
47
+  },
48
+]
49
+
50
+const getDictValue = (dict, val) => dict.filter(x => x.value === val)[0]
51
+
52
+const Condition = props => {
53
+  return (
54
+    <Search
55
+      onSearch={props.onSearch}
56
+      onReset={props.onReset}
57
+      render={form => {
58
+        const { getFieldDecorator, setFieldsValue } = form
59
+        
60
+        return (
61
+          <>
62
+            <Form.Item label="工单编号">
63
+            {
64
+              getFieldDecorator('id')(<Input placeholder="工单编号" />)
65
+            }
66
+            </Form.Item>
67
+            <Form.Item label="类型">
68
+            {
69
+              getFieldDecorator('type')(
70
+                <Select placeholder="选择类型" style={{ width: '120px' }}>
71
+                  {
72
+                    TypeDict.map(x => (<Select.Option key={x.value} value={x.value}>{x.label}</Select.Option>))
73
+                  }
74
+                </Select>
75
+              )
76
+            }
77
+            </Form.Item>
78
+            <Form.Item label="工单标题">
79
+            {
80
+              getFieldDecorator('ticketTitle')(<Input placeholder="工单标题" />)
81
+            }
82
+            </Form.Item>
83
+            <Form.Item label="发起人">
84
+            {
85
+              getFieldDecorator('createUserNmae')(<Input placeholder="发起人" />)
86
+            }
87
+            </Form.Item>
88
+            <Form.Item label="流转状态">
89
+            {
90
+              getFieldDecorator('status')(
91
+                <Select placeholder="选择状态" style={{ width: '120px' }}>
92
+                  {
93
+                    TypeDict.map(x => (<Select.Option key={x.value} value={x.value}>{x.label}</Select.Option>))
94
+                  }
95
+                </Select>
96
+              )
97
+            }
98
+            </Form.Item>
99
+            <Form.Item label="处理人">
100
+            {
101
+              getFieldDecorator('updateUserNmae')(<Input placeholder="处理人" />)
102
+            }
103
+            </Form.Item>
104
+          </>
105
+        )
106
+      }}
107
+    />
108
+  )
109
+}
110
+
111
+export default props => {
112
+  const [loading, setLoading] = useState(false)
113
+  const [listData, setListData] = useState([])
114
+
115
+  const handleSearch = () => {
116
+
117
+  }
118
+
119
+  const handleDeleteRow = row => {
120
+
121
+  }
122
+
123
+  const handleEditRow = row => {
124
+
125
+  }
126
+
127
+  const handlePageChange = (pageNum, pageSize) => {
128
+
129
+  }
130
+
131
+  return (
132
+    <div>
133
+      <Condition onSearch={handleSearch} onReset={handleSearch} />
134
+      <div style={{ margin: '24px 0' }}>
135
+        {/* <NavLink to={`/property/notice/edit`}>
136
+          <Button type="primary">添加</Button>
137
+        </NavLink> */}
138
+      </div>
139
+      <Spin spinning={loading}>
140
+        <List dataSource={listData} onPageChange={handlePageChange} rowKey="id">
141
+          <Table.Column title="编号" dataIndex="id" key="id" />
142
+          <Table.Column title="类型" dataIndex="type" key="type" render={x => getDictValue(TypeDict, x)} />
143
+          <Table.Column
144
+            title="标题"
145
+            dataIndex="ticketTitle"
146
+            key="ticketTitle"
147
+            render={(_, row) => {
148
+              return (
149
+                <NavLink to={`/xxx?id=${row.id}`}>
150
+                  <Typography.Text ellipsis>{row.ticketTitle}</Typography.Text>
151
+                </NavLink>
152
+              )
153
+            }}
154
+          />
155
+          <Table.Column title="发起人" dataIndex="createUserNmae" key="createUserNmae" />
156
+          <Table.Column title="发起时间" dataIndex="createDate" key="createDate" />
157
+          <Table.Column title="流转状态" dataIndex="status" key="status" render={x => getDictValue(StatusDict, x)} />
158
+          <Table.Column title="当前处理人" dataIndex="tpUserNmae" key="tpUserNmae" />
159
+          <Table.Column title="最近操作时间" dataIndex="updateDate" key="updateDate" />
160
+          <Table.Column
161
+            title="操作"
162
+            key="action"
163
+            render={(_, row) => {
164
+              return (
165
+                <>
166
+                  <Popconfirm
167
+                    title="确认进行作废操作?"
168
+                    onConfirm={() => handleDeleteRow(row)}
169
+                    okText="作废"
170
+                    cancelText="取消"
171
+                  >
172
+                    <Button type="link">删除</Button>
173
+                  </Popconfirm>
174
+                  <Divider type="vertical" />
175
+                  <Button type="link" onClick={() => handleEdit(row)}>编辑</Button>
176
+                </>
177
+              )
178
+            }}
179
+          />
180
+        </List>
181
+      </Spin>
182
+
183
+    </div>
184
+  )
185
+}