zlisen 4 年前
父节点
当前提交
250aa19dd7

+ 2
- 2
src/components/QueryTable/index.jsx 查看文件

@@ -5,7 +5,7 @@ import TableList from '@/components/TableList'
5 5
 export default React.forwardRef((props, ref) => {
6 6
   const tableRef = useRef()
7 7
   const [searchData, setSearchData] = useState({})
8
-  const {api, searchFields, onPageChange, ...leftProps} = props
8
+  const {api, searchFields, params, onPageChange, ...leftProps} = props
9 9
   const handleSearch = (data) => setSearchData(data)
10 10
 
11 11
   useImperativeHandle(ref, () => ({
@@ -27,7 +27,7 @@ export default React.forwardRef((props, ref) => {
27 27
       <TableList
28 28
         ref={tableRef}
29 29
         api={api}
30
-        params={searchData}
30
+        params={Object.assign(searchData, params||{})}
31 31
         {...leftProps}
32 32
         onPageChange={onPageChange}
33 33
       />

+ 19
- 50
src/pages/building/type/index.jsx 查看文件

@@ -1,5 +1,5 @@
1
-import React, { useState, useEffect } from 'react';
2
-import { Button, Tag, notification, Modal } from 'antd';
1
+import React from 'react';
2
+import { Button, Tag,  Modal } from 'antd';
3 3
 
4 4
 import router from 'umi/router';
5 5
 import moment from 'moment';
@@ -7,13 +7,11 @@ import withActions from '@/components/ActionList';
7 7
 import EditIcon from '@/components/EditIcon';
8 8
 import AuthButton from '@/components/AuthButton';
9 9
 import TableList from '@/components/TableList';
10
-import request from '../../../utils/request';
10
+// import request from '../../../utils/request';
11 11
 import apis from '../../../services/apis';
12 12
 
13 13
 export default function BuildType() {
14
-  // eslint-disable-next-line react-hooks/rules-of-hooks
15
-  const [data, setData] = useState([{ records: [] }]);
16
-  const [page, setPage] = useState({ current: 1, pageSize: 10 });
14
+
17 15
 
18 16
   const columns = [
19 17
     {
@@ -21,7 +19,7 @@ export default function BuildType() {
21 19
       dataIndex: 'index',
22 20
       key: 'index',
23 21
       align: 'center',
24
-      render: (text, record, index) => <span>{index + 1}</span>,
22
+      render: (_text, _record, index) => <span>{index + 1}</span>,
25 23
     },
26 24
     {
27 25
       title: '类型名称',
@@ -57,35 +55,6 @@ export default function BuildType() {
57 55
     },
58 56
   ];
59 57
 
60
-  // eslint-disable-next-line react-hooks/rules-of-hooks
61
-  useEffect(() => {
62
-    getList({ pageNum: 1, pageSize: 10 });
63
-  }, []);
64
-
65
-  const openNotificationWithIcon = (type, message) => {
66
-    notification[type]({
67
-      message,
68
-      description: '',
69
-    });
70
-  };
71
-
72
-  function getList(params) {
73
-    request({ ...apis.buildingType.getList, params: { ...params } })
74
-      .then(res => {
75
-        setData(res);
76
-      })
77
-      .catch(err => {
78
-        // eslint-disable-next-line no-unused-expressions
79
-        // openNotificationWithIcon('error', err)
80
-      });
81
-  }
82
-
83
-  // 分页
84
-  function onChange(pageNumber) {
85
-    // eslint-disable-next-line no-console
86
-    console.log('Page: ', pageNumber);
87
-    getList({ pageNum: pageNumber, pageSize: 10 });
88
-  }
89 58
 
90 59
   function deleteType(row) {
91 60
     row.status = -1;
@@ -95,20 +64,20 @@ export default function BuildType() {
95 64
       okText: '确认',
96 65
       cancelText: '关闭',
97 66
       onOk: () => {
98
-        request({
99
-          ...apis.buildingType.update,
100
-          urlData: { id: row.buildingTypeId },
101
-          data: { ...row },
102
-        })
103
-          .then(() => {
104
-            getList({ pageNum: data.current, pageSize: 10 });
105
-          })
106
-          .then(() => {
107
-            openNotificationWithIcon('success', '操作成功');
108
-          })
109
-          .catch(err => {
110
-            // openNotificationWithIcon('error', err.message)
111
-          });
67
+        // request({
68
+        //   ...apis.buildingType.update,
69
+        //   urlData: { id: row.buildingTypeId },
70
+        //   data: { ...row },
71
+        // })
72
+        //   .then(() => {
73
+     
74
+        //   })
75
+        //   .then(() => {
76
+        //     openNotificationWithIcon('success', '操作成功');
77
+        //   })
78
+        //   .catch(err => {
79
+        //     // openNotificationWithIcon('error', err.message)
80
+        //   });
112 81
 
113 82
         modal.destroy();
114 83
       },

+ 152
- 0
src/pages/customer/Customer/PrivateCustomer/components/ChangeStatus.jsx 查看文件

@@ -0,0 +1,152 @@
1
+import React, { useState, useEffect } from 'react';
2
+import {
3
+  Button,
4
+  Radio,
5
+  Modal,
6
+  notification,
7
+} from 'antd';
8
+import request from '@/utils/request';
9
+import apis from '@/services/apis';
10
+
11
+const ChangeStatus = props => {
12
+  console.log(props, 'props');
13
+
14
+  const [value, setValue] = useState();
15
+
16
+  const { visible, data } = props.modelProps || {};
17
+
18
+  useEffect(() => {
19
+    console.log(data, 'data');
20
+    setValue(data?.status);
21
+  }, [data]);
22
+
23
+  const openNotificationWithIcon = (type, message) => {
24
+    notification[type]({
25
+      message,
26
+      description: '',
27
+    });
28
+  };
29
+
30
+const  submitButton = () => {
31
+    // 网路请求
32
+    request({
33
+      ...apis.customer.recommendEdit,
34
+      urlData: { id: data.customerId },
35
+      data: { customerId: data.customerId, status: value },
36
+    })
37
+      .then(() => {
38
+        // eslint-disable-next-line no-unused-expressions
39
+        openNotificationWithIcon('success', '操作成功');
40
+        props.handleCancel()
41
+      })
42
+      .catch(err => {
43
+        // eslint-disable-next-line no-unused-expressions
44
+        openNotificationWithIcon('error', err);
45
+      });
46
+  };
47
+
48
+  return (
49
+    <>
50
+      <Modal
51
+        title="变更状态"
52
+        width={800}
53
+        destroyOnClose="true"
54
+        footer={null}
55
+        visible={visible}
56
+        // onOk={() => this.handleOk()}
57
+        onCancel={() => props.onCancel()}
58
+      >
59
+        {data && (
60
+          <>
61
+            <Radio.Group value={value} onChange={e => setValue(e.target.value)}>
62
+              <Radio value={1}>客户报备</Radio>
63
+              <Radio value={2}>客户到访</Radio>
64
+              <Radio value={3}>客户认购</Radio>
65
+              <Radio value={4}>客户签约</Radio>
66
+            </Radio.Group>
67
+            <Button type="primary" onClick={submitButton}>
68
+              确定
69
+            </Button>
70
+          </>
71
+        )}
72
+      </Modal>
73
+    </>
74
+  );
75
+};
76
+
77
+export default ChangeStatus;
78
+
79
+// class ChangeStatus extends React.Component {
80
+//   constructor(props) {
81
+//     super(props)
82
+//     this.state = {
83
+//       value: '',
84
+//       visibleData: { visible: false, customerId: '' },
85
+//     }
86
+//   }
87
+
88
+//   componentDidUpdate(preProps, preState) {
89
+//     if (this.props.visibleData.customerId !== preState.visibleData.customerId) {
90
+//       this.setState({ visibleData: { ...this.props.visibleData } })
91
+//       this.setState({ value: this.props.visibleData.status })
92
+//     }
93
+//   }
94
+
95
+//   // 弹框取消按钮
96
+//   handleCancel() {
97
+//     this.props.onCancel()
98
+//   }
99
+
100
+//   onChange = e => {
101
+//     this.setState({
102
+//       value: e.target.value,
103
+//     });
104
+//   };
105
+
106
+//   openNotificationWithIcon = (type, message) => {
107
+//     notification[type]({
108
+//       message,
109
+//       description:
110
+//         '',
111
+//     });
112
+//   };
113
+
114
+//   submitButton = e => {
115
+//     // 网路请求
116
+//     request({ ...apis.customer.recommendEdit, urlData: { id: this.state.visibleData.customerId }, data: { customerId: this.state.visibleData.customerId, status: this.state.value } }).then(res => {
117
+//       // eslint-disable-next-line no-unused-expressions
118
+//       this.openNotificationWithIcon('success', '操作成功')
119
+//       this.handleCancel()
120
+//     }).catch(err => {
121
+//       // eslint-disable-next-line no-unused-expressions
122
+//       this.openNotificationWithIcon('error', err)
123
+//     })
124
+//   }
125
+
126
+//   render() {
127
+//     return (
128
+//       <>
129
+//           <Modal
130
+//             title="变更状态"
131
+//             width={800}
132
+//             // destroyOnClose="true"
133
+//             footer={null}
134
+//             visible={this.state.visibleData.visible}
135
+//             // onOk={() => this.handleOk()}
136
+//             onCancel={(e) => this.handleCancel(e)}
137
+//           >
138
+//             <Radio.Group onChange={this.onChange} value={this.state.value}>
139
+//               <Radio value={1}>客户报备</Radio>
140
+//               <Radio value={2}>客户到访</Radio>
141
+//               <Radio value={3}>客户认购</Radio>
142
+//               <Radio value={4}>客户签约</Radio>
143
+//             </Radio.Group>
144
+
145
+//             <Button type="danger" onClick={this.submitButton}>确定</Button>
146
+//           </Modal>
147
+//       </>
148
+//     )
149
+//   }
150
+// }
151
+
152
+// export default ChangeStatus

+ 189
- 143
src/pages/customer/Customer/PrivateCustomer/index.jsx 查看文件

@@ -1,165 +1,211 @@
1
-import React, { useState, useEffect, useMemo, useRef } from 'react';
2
-import { Avatar } from 'antd';
3
-
1
+import React, { useState, useMemo, useRef } from 'react';
2
+import { Avatar, Button } from 'antd';
4 3
 import QueryTable from '@/components/QueryTable';
5
-import request from '@/utils/request';
6 4
 import apis from '@/services/apis';
7
-import Navigate from '@/components/Navigate';
8
-import getTableColumns from './tableColumns'
5
+import withActions from '@/components/ActionList';
6
+import AuthButton from '@/components/AuthButton';
7
+import Styles from '../style.less';
8
+import ChangeStatus from './components/ChangeStatus';
9 9
 
10
-function PrivateCustomer(props) {
11
-    const ref = useRef()
12
-    const [page, setPage] = useState({current: 1, pageSize: 10})
13
-  const columns = [
14
-    {
15
-      title: '头像',
16
-      dataIndex: 'picture',
17
-      key: 'picture',
18
-      align: 'center',
19
-      width: '10%',
20
-      render: (_, record) => (
21
-        <Avatar
22
-          shape="square"
23
-          style={{ color: 'blue', cursor: 'pointer' }}
24
-          onClick={() => toCustomerDateil(record)}
25
-          src={record.picture}
26
-          size={64}
27
-          icon="user"
28
-        />
29
-      ),
30
-    },
31
-    {
32
-      title: '姓名',
33
-      dataIndex: 'name',
34
-      key: 'name',
35
-      align: 'center',
36
-      width: '10%',
37
-      // eslint-disable-next-line no-nested-ternary
38
-      render: (_, record) => (
39
-        <>
40
-          <Navigate onClick={() => toCustomerDateil(record)}>{record.name}</Navigate>
41
-        </>
42
-      ),
43
-    },
44
-    {
45
-      title: '电话',
46
-      dataIndex: 'phone',
47
-      key: 'phone',
48
-      align: 'center',
49
-      width: '10%',
50
-    },
51
-    {
52
-      title: '性别',
53
-      dataIndex: 'sex',
54
-      key: 'sex',
55
-      align: 'center',
56
-      width: '10%',
57
-      // eslint-disable-next-line no-nested-ternary
58
-      render: (_, record) => (
59
-        <>
60
-          <span>{record.sex === 1 ? '男' : record.sex === 2 ? '女' : '未知'}</span>
61
-        </>
62
-      ),
63
-    },
64
-    {
65
-      title: '置业顾问',
66
-      dataIndex: 'consultantName',
67
-      key: 'consultantName',
68
-      align: 'center',
69
-      width: '10%',
70
-      // eslint-disable-next-line no-nested-ternary
71
-      render: (_, record) => (
72
-        <>
73
-          <span>{record.consultantName}</span>
74
-          <br />
75
-          <span>{record.consultTel}</span>
76
-        </>
77
-      ),
78
-    },
79
-    {
80
-      title: '归属项目',
81
-      dataIndex: 'buildingName',
82
-      key: 'buildingName',
83
-      align: 'center',
84
-      width: '10%',
85
-    },
86
-    {
87
-      title: '推广人员',
88
-      dataIndex: 'sharePersonName',
89
-      key: 'sharePersonName',
90
-      align: 'center',
91
-      width: '10%',
92
-    },
93
-    {
94
-      title: '客户状态',
95
-      dataIndex: 'reportRecommendStatus',
96
-      key: 'reportRecommendStatus',
97
-      align: 'center',
98
-      width: '10%',
99
-      // eslint-disable-next-line no-nested-ternary
100
-      render: (text, records) => {
101
-        if (records.status === 1) {
102
-          return '报备';
103
-        }
104
-        if (records.status === 2) {
105
-          return '到访';
106
-        }
107
-        if (records.status === 3) {
108
-          return '认购';
109
-        }
110
-        if (records.status === 4) {
111
-          return '签约';
112
-        }
113
-      },
114
-    },
115
-    {
116
-      title: '操作',
117
-      dataIndex: 'customerId',
118
-      key: 'customerId',
119
-      align: 'center',
120
-      width: '20%',
121
-      //   render: withActions((text, record) => [
122
-      //     <EditIcon color="#FF4A4A" text="查看详情" onClick={() => toCustomerDateil(record)} />,
123
-      //     <AuthButton name="admin.customer.recommend.edit.id.put" noRight={null}>
124
-      //       <Button className={Styles.text} type="link" onClick={() => showStatus(record)}>变更状态</Button>
125
-      //     </AuthButton>,
10
+const actionList = {
11
+  changeStatus: 'changeStatus', // 变更状态
12
+};
126 13
 
127
-      //     <AuthButton name="admin.customer.recommend.belong" noRight={null}>
128
-      //       <Button className={Styles.text} type="link" onClick={() => showGM(record)}>调整归属</Button>
129
-      //     </AuthButton>,
14
+const PrivateCustomer = () => {
15
+  const ref = useRef();
130 16
 
131
-      //     <AuthButton name="admin.mine.taPointsRecords.point.record" noRight={null}>
132
-      //       <Button className={ Styles.text } type="link" onClick={() => showRecord(record)}>积分记录</Button>
133
-      //     </AuthButton>,
17
+  const [showModel, SetShowModel] = useState({
18
+    // changeStatus: { visible: true, data: {} },
19
+  });
134 20
 
135
-      //     <AuthButton name="admin.mine.taPointsRecords.id.get" noRight={null}>
136
-      //       <Button className={ Styles.text} type="link" onClick={() => showRecommend(record.personId)}>推荐客户</Button>
137
-      //     </AuthButton>
138
-      //   ]),
139
-    },
140
-  ];
21
+  const handShowModel = (record, actionType) => {
22
+    SetShowModel({
23
+      [actionList[actionType]]: {
24
+        visible: true,
25
+        data: record,
26
+      },
27
+    });
28
+  };
29
+  const columns = useMemo(() => {
30
+    return [
31
+      {
32
+        title: '头像',
33
+        dataIndex: 'picture',
34
+        key: 'picture',
35
+        align: 'center',
36
+        width: '10%',
37
+        render: (_, record) => (
38
+          <Avatar
39
+            shape="square"
40
+            style={{ color: 'blue' }}
41
+            src={record.picture}
42
+            size={64}
43
+            icon="user"
44
+          />
45
+        ),
46
+      },
47
+      {
48
+        title: '姓名',
49
+        dataIndex: 'name',
50
+        key: 'name',
51
+        align: 'center',
52
+        width: '10%',
53
+        // eslint-disable-next-line no-nested-ternary
54
+        // render: (_, record) => (
55
+        //   <>
56
+        //     <Navigate onClick={() => toCustomerDateil(record)}>{record.name}</Navigate>
57
+        //   </>
58
+        // ),
59
+      },
60
+      {
61
+        title: '电话',
62
+        dataIndex: 'phone',
63
+        key: 'phone',
64
+        align: 'center',
65
+        width: '10%',
66
+      },
67
+      {
68
+        title: '性别',
69
+        dataIndex: 'sex',
70
+        key: 'sex',
71
+        align: 'center',
72
+        width: '10%',
73
+        // eslint-disable-next-line no-nested-ternary
74
+        render: (_, record) => (
75
+          <>
76
+            <span>{record.sex === 1 ? '男' : record.sex === 2 ? '女' : '未知'}</span>
77
+          </>
78
+        ),
79
+      },
80
+      {
81
+        title: '置业顾问',
82
+        dataIndex: 'consultantName',
83
+        key: 'consultantName',
84
+        align: 'center',
85
+        width: '10%',
86
+        // eslint-disable-next-line no-nested-ternary
87
+        render: (_, record) => (
88
+          <>
89
+            <span>{record.consultantName}</span>
90
+            <br />
91
+            <span>{record.consultTel}</span>
92
+          </>
93
+        ),
94
+      },
95
+      {
96
+        title: '归属项目',
97
+        dataIndex: 'buildingName',
98
+        key: 'buildingName',
99
+        align: 'center',
100
+        width: '10%',
101
+      },
102
+      {
103
+        title: '推广人员',
104
+        dataIndex: 'sharePersonName',
105
+        key: 'sharePersonName',
106
+        align: 'center',
107
+        width: '10%',
108
+      },
109
+      {
110
+        title: '客户状态',
111
+        dataIndex: 'reportRecommendStatus',
112
+        key: 'reportRecommendStatus',
113
+        align: 'center',
114
+        width: '10%',
115
+        // eslint-disable-next-line no-nested-ternary
116
+        render: (_, records) => {
117
+          if (records.status === 1) {
118
+            return '报备';
119
+          }
120
+          if (records.status === 2) {
121
+            return '到访';
122
+          }
123
+          if (records.status === 3) {
124
+            return '认购';
125
+          }
126
+          if (records.status === 4) {
127
+            return '签约';
128
+          }
129
+        },
130
+      },
131
+      {
132
+        title: '操作',
133
+        dataIndex: 'customerId',
134
+        key: 'customerId',
135
+        align: 'center',
136
+        width: '20%',
137
+        render: withActions((_, record) => [
138
+          <AuthButton name="admin.customer.recommend.edit.id.put" noRight={null}>
139
+            <Button
140
+              className={Styles.text}
141
+              type="link"
142
+              onClick={() => handShowModel(record, actionList.changeStatus)}
143
+            >
144
+              变更状态
145
+            </Button>
146
+          </AuthButton>,
147
+
148
+          <AuthButton name="admin.customer.recommend.belong" noRight={null}>
149
+            <Button className={Styles.text} type="link" onClick={() => showGM(record)}>
150
+              调整归属
151
+            </Button>
152
+          </AuthButton>,
141 153
 
142
-  const tableColumns = useMemo(() => {
143
-    return getTableColumns()
144
-  }, [page])
154
+          <AuthButton name="admin.mine.taPointsRecords.point.record" noRight={null}>
155
+            <Button className={Styles.text} type="link" onClick={() => showRecord(record)}>
156
+              积分记录
157
+            </Button>
158
+          </AuthButton>,
145 159
 
160
+          <AuthButton name="admin.mine.taPointsRecords.id.get" noRight={null}>
161
+            <Button
162
+              className={Styles.text}
163
+              type="link"
164
+              onClick={() => showRecommend(record.personId)}
165
+            >
166
+              推荐客户
167
+            </Button>
168
+          </AuthButton>,
169
+        ]),
170
+      },
171
+    ];
172
+  }, []);
146 173
 
147
-//   const tableColumns = useMemo(()=>columns, []);
174
+  const searchFields = [
175
+    {
176
+      name: 'name',
177
+      label: '姓名',
178
+      placeholder: '请输入姓名',
179
+    }
180
+  ];
181
+  //操作成功请求数据
182
+  const handleCancel = () => {
183
+    SetShowModel({})
184
+    ref.current.reload();
185
+  };
148 186
 
149 187
   return (
150 188
     <>
151 189
       <QueryTable
152
-          ref={ref}
190
+        ref={ref}
153 191
         rowKey="customerId"
154 192
         api={apis.customer.customerRecommend}
155
-        // searchFields={{}}
156
-        params={{ customerType: 'private' }}
157
-        columns={tableColumns}
193
+        searchFields={searchFields}
194
+        params={{
195
+          customerType: 'private',
196
+        }}
197
+        columns={columns}
158 198
         //   actionRender={actionRender}
159 199
         //   onPageChange={(pg) => setPage(pg)}
160 200
       />
201
+
202
+      <ChangeStatus
203
+        modelProps={showModel[actionList.changeStatus]}
204
+        handleCancel={handleCancel}
205
+        onCancel={() => SetShowModel({})}
206
+      ></ChangeStatus>
161 207
     </>
162 208
   );
163
-}
209
+};
164 210
 
165 211
 export default PrivateCustomer;

+ 3
- 3
src/pages/customer/Customer/index.jsx 查看文件

@@ -1,8 +1,8 @@
1
-import React, { useState, useEffect } from 'react';
1
+import React, { useState } from 'react';
2 2
 import { Radio } from 'antd';
3 3
 import PrivateCustomer from './PrivateCustomer';
4 4
 
5
-function Customer(props) {
5
+const Customer = () => {
6 6
   const [customerType, setCustomerType] = useState('private');
7 7
 
8 8
   return (
@@ -24,6 +24,6 @@ function Customer(props) {
24 24
       </div>
25 25
     </>
26 26
   );
27
-}
27
+};
28 28
 
29 29
 export default Customer;

+ 239
- 0
src/pages/customer/Customer/style.less 查看文件

@@ -0,0 +1,239 @@
1
+.SubmitButton {
2
+  background: rgba(239,39,58,1);
3
+  border-radius: 7px;
4
+  border: 0px;
5
+}
6
+.text {
7
+  color: rgba(239,39,58,1);
8
+}
9
+.SelectFrom {
10
+  width: 180px;
11
+  background: #ffffff;
12
+  border-radius: 7px;
13
+  border: 1px solid #dbdbdb;
14
+}
15
+.addButton {
16
+  background: #50be00;
17
+  border-radius: 4px;
18
+  border: 0px;
19
+  margin: 10px 0px;
20
+}
21
+.cardText {
22
+  color: #333;
23
+  display: flex;
24
+  align-items: center;
25
+  position: relative;
26
+  line-height: 1.5;
27
+  font-size: 0.106rem;
28
+  margin-bottom: 0.08rem;
29
+
30
+}
31
+.cardItem{
32
+  color: #666;
33
+  display: flex;
34
+  align-items: center; 
35
+  line-height: 1.5;
36
+  font-size: 0.106rem;
37
+  margin-bottom: 0.08rem; 
38
+}
39
+.ediText {
40
+  font-size: 0.106rem;
41
+  color: #ff925c;
42
+  line-height: 24px;
43
+  position: absolute;
44
+  right: 0;
45
+}
46
+.title{
47
+  display: inline-block;
48
+  width:  0.54rem;
49
+  justify-content: space-between;
50
+  text-align: justify;
51
+  text-align-last:justify
52
+}
53
+
54
+.address { 
55
+  width: 400px;
56
+  height: 24px; 
57
+  text-overflow: ellipsis; 
58
+  white-space: nowrap;
59
+  overflow: hidden;
60
+}
61
+
62
+.pitchButton { 
63
+  border-color: rgba(255,126,72,1);
64
+  background-color: rgba(255,126,72,1);
65
+  color: rgba(255,255,255,1); 
66
+}
67
+.noButton {
68
+  border-color: rgba(255,126,72,1);
69
+  color: rgba(255,126,72,1);
70
+}
71
+.displayS {
72
+  display: none;
73
+}
74
+
75
+
76
+// 客户详情样式
77
+.cardBox{
78
+  display: flex;
79
+  .leftBox{
80
+    width:1000px;
81
+    min-width:350px;
82
+    height:1000px;
83
+    background:rgba(255,255,255,1);
84
+    box-shadow:0px 0px 16px 2px rgba(0,0,0,0.12);
85
+    border-radius:8px;
86
+    display: inline-block;
87
+    margin-right: 30px;
88
+    padding: 30px;
89
+    overflow: hidden;
90
+  }
91
+  .rightBox{
92
+    width:865px;
93
+    min-width:342px;
94
+    height:290px;
95
+    background:rgba(255,255,255,1);
96
+    box-shadow:0px 0px 16px 2px rgba(0,0,0,0.12);
97
+    border-radius:8px;
98
+    display: inline-block;
99
+    margin-right: 30px;
100
+    padding: 30px;
101
+    overflow: hidden;
102
+  }
103
+  .rightBox{
104
+    width:-webkit-fill-available;
105
+    height:315px;
106
+    min-width: 100%;
107
+    background:rgba(255,255,255,1);
108
+    box-shadow:0px 0px 16px 2px rgba(0,0,0,0.12);
109
+    border-radius:8px;
110
+    display: inline-block;
111
+    padding: 30px;
112
+    overflow: hidden;
113
+    position: relative;
114
+  }
115
+  .rightBoxCentre{
116
+    width:865px;
117
+    height:345px;
118
+    min-width: 60%;
119
+    background:rgba(255,255,255,1);
120
+    box-shadow:0px 0px 16px 2px rgba(0,0,0,0.12);
121
+    border-radius:8px;
122
+    display: inline-block;
123
+    padding: 30px;
124
+    overflow: hidden;
125
+    position: relative;
126
+  }
127
+  .leftBoxCentre{
128
+    width:100%;
129
+    height:345px;
130
+    background:rgba(255,255,255,1);
131
+    box-shadow:0px 0px 16px 2px rgba(0,0,0,0.12);
132
+    border-radius:8px;
133
+    display: inline-block;
134
+    padding: 30px;
135
+    overflow: hidden;
136
+    position: relative;
137
+  }
138
+  .tit{
139
+    font-size:0.15rem;
140
+    font-weight:600;
141
+    color:#222;
142
+    margin: 10px 0 0 0;
143
+  }
144
+  .flexBox{
145
+    display: flex;
146
+    align-items: end;
147
+  }
148
+  .touxiang{
149
+    width: 120px;
150
+    width: 120px;
151
+    border-radius: 6px;
152
+    margin: 30px 0 20px 0;
153
+  }
154
+  .touxiangphoto{
155
+    width: 80px;
156
+    height: 80px;
157
+    margin: 38px 0 0px 0;
158
+  }
159
+  .infoItem{
160
+    color:#666;
161
+    font-size: 0.1rem;
162
+    margin: 0 0 30px 0;
163
+    
164
+  }
165
+  .rightItem{
166
+    color:#666;
167
+    font-size: 0.1rem;
168
+    margin: 0 0 15px 0;
169
+  }
170
+  .right{
171
+    width: 25%;
172
+    min-width: 1.3rem;
173
+    margin-left: 0.1rem;
174
+    padding-top: 0.3rem;
175
+    // position: absolute;
176
+    // top:108px;
177
+    // left:170px;
178
+  }
179
+  .rightphone{
180
+  
181
+    position: absolute;
182
+    top:108px;
183
+    left:170px;
184
+  }
185
+  .left{
186
+    position: absolute;
187
+    top:108px;
188
+    left:60%;
189
+  
190
+  }
191
+  .rightInfo{
192
+    width: 25%;
193
+    min-width: 1.3rem;
194
+    margin-right: 0.1rem;
195
+    padding-top: 0.3rem;
196
+    // position: absolute;
197
+    // top:108px;
198
+    // left:80%;
199
+  }
200
+
201
+  .Centered{
202
+    width: 25%;
203
+    // position: absolute;
204
+    // top:108px;
205
+    // left:30%;
206
+    min-width: 1.3rem;
207
+    margin: 0 0 15px 0;
208
+    color:#666;
209
+    font-size: 0.1rem;
210
+    padding-top: 0.3rem;
211
+  }
212
+
213
+  .rightCentered{
214
+    // position: absolute;
215
+    // top:108px;
216
+    // left:55%;
217
+    width: 25%;
218
+    min-width: 1.3rem;
219
+    margin: 0 0 15px 0;
220
+    padding-top: 0.3rem;
221
+    color:#666;
222
+    font-size: 0.1rem;
223
+  }
224
+  
225
+}
226
+.recordBox{
227
+  width:100%;
228
+  background:rgba(255,255,255,1);
229
+  box-shadow:0px 0px 16px 2px rgba(0,0,0,0.12);
230
+  border-radius:8px;
231
+  margin-top: 30px;
232
+  padding: 30px;
233
+  .tableName{
234
+    font-size:24px;
235
+    font-weight:600;
236
+    color:#222;
237
+  }
238
+}
239
+