Преглед изворни кода

Merge branch 'dev' of http://git.ycjcjy.com/zhiyuxing/estateagents-admin-manager into dev

zhoulisen пре 5 година
родитељ
комит
f4d5b70a09

+ 4
- 1
src/components/GlobalHeader/AvatarDropdown.jsx Прегледај датотеку

@@ -42,10 +42,12 @@ class AvatarDropdown extends React.Component {
42 42
   }
43 43
 
44 44
   render() {
45
+    console.log(this.props, 'props')
45 46
     const {
46 47
       currentUser = {
47 48
         avatar: '',
48 49
         userName: '',
50
+        miniAppName: '',
49 51
       },
50 52
       menu,
51 53
     } = this.props;
@@ -80,7 +82,8 @@ class AvatarDropdown extends React.Component {
80 82
         <HeaderDropdown overlay={menuHeaderDropdown}>
81 83
             <span className={`${styles.action} ${styles.account}`}>
82 84
               <Avatar size="small" className={styles.avatar} src={currentUser.avatar === null ? currentUser.photo:currentUser.avatar} alt="avatar" />
83
-              <span className={styles.name}>{currentUser.userName}</span>
85
+              <span className={styles.name}>{currentUser.loginName}</span>
86
+              <span className={styles.name}>欢迎登录{currentUser.miniAppName}</span>
84 87
             </span>
85 88
         </HeaderDropdown>
86 89
 

+ 1
- 0
src/pages/building/list/add/components/base.jsx Прегледај датотеку

@@ -434,6 +434,7 @@ function AddBuilding(props) {
434 434
                 <Option value="待售">待售</Option>
435 435
                 <Option value="在售">在售</Option>
436 436
                 <Option value="售罄">售罄</Option>
437
+                <Option value="在租">在租</Option>
437 438
               </Select>,
438 439
             )}
439 440
           </Form.Item>

+ 3
- 1
src/pages/building/list/add/components/buildingProjectType.jsx Прегледај датотеку

@@ -98,12 +98,13 @@ class TypeForm extends React.Component {
98 98
                   <Radio.Group onChange={e => this.onChange(e, 'priceType')} >
99 99
                     <Radio value="average">均价</Radio>
100 100
                     <Radio value="total">总价</Radio>
101
+                    <Radio value="lease">租赁价</Radio>
101 102
                   </Radio.Group>
102 103
                 )}
103 104
               </Form.Item>
104 105
             <Form.Item label="价格区间" help='最高价与最低价一致时,只展示一个'>
105 106
               {getFieldDecorator('startPrice')(<Input type="number" placeholder="最低价" style={{width: '120px'}} maxLength="9" onChange={e => this.onChange(e, 'startPrice')} />)} --
106
-              {getFieldDecorator('endPrice')(<Input type="number" placeholder="最高价" style={{width: '120px'}} maxLength="9" onChange={e => this.onChange(e, 'endPrice')} />)}{this.props.type.priceType === "average" ? "元/㎡" : "万元/套"}
107
+              {getFieldDecorator('endPrice')(<Input type="number" placeholder="最高价" style={{width: '120px'}} maxLength="9" onChange={e => this.onChange(e, 'endPrice')} />)}{this.props.type.priceType === "average" ? "元/㎡" : this.props.type.priceType === "lease" ? "元/㎡/天" : "万元/套"}
107 108
             </Form.Item>
108 109
             <Form.Item label="销售状态" >
109 110
             {getFieldDecorator('marketStatus')(
@@ -111,6 +112,7 @@ class TypeForm extends React.Component {
111 112
                 <Option value="待售">待售</Option>
112 113
                 <Option value="在售">在售</Option>
113 114
                 <Option value="售罄">售罄</Option>
115
+                <Option value="在租">在租</Option>
114 116
               </Select>,
115 117
             )}
116 118
           </Form.Item>

+ 4
- 0
src/pages/building/list/add/components/imageSet.jsx Прегледај датотеку

@@ -23,6 +23,10 @@ const saleType = [
23 23
     id: 3,
24 24
     name: '在售',
25 25
   },
26
+  {
27
+    id: 4,
28
+    name: '在租',
29
+  },
26 30
 ]
27 31
 
28 32
 const houseType = [

+ 4
- 0
src/pages/building/list/add/components/modalImage.jsx Прегледај датотеку

@@ -40,6 +40,10 @@ const saleType = [
40 40
     id: 3,
41 41
     name: '在售',
42 42
   },
43
+  {
44
+    id: 4,
45
+    name: '在租',
46
+  },
43 47
 ]
44 48
 
45 49
 const houseType = [

+ 37
- 6
src/pages/customer/customerlist/index.jsx Прегледај датотеку

@@ -374,7 +374,8 @@ function body(props) {
374 374
       key: 'picture',
375 375
       align: 'center',
376 376
       width: '15%',
377
-      render: (_, record) => <Avatar shape="square" style={{ color: 'blue', cursor: 'pointer' }} onClick={() => publicCustomerDetail(record)} src={customerType === 'private' ? record.picture : record.avatarurl} size={64} icon="user" />,
377
+      // render: (_, record) => <Avatar shape="square" style={{ color: 'blue', cursor: 'pointer' }} onClick={() => publicCustomerDetail(record)} src={customerType === 'private' ? record.picture : record.avatarurl} size={64} icon="user" />,
378
+      render: (_, record) => <Avatar shape="square" style={{ color: 'blue', cursor: 'pointer' }} onClick={() => publicCustomerDetail(record)} src={record.picture } size={64} icon="user" />,
378 379
     },
379 380
     {
380 381
       title: '姓名',
@@ -383,7 +384,7 @@ function body(props) {
383 384
       align: 'center',
384 385
       width: '10%',
385 386
       // eslint-disable-next-line no-nested-ternary
386
-      render: (_, record) => <><span style={{ color: 'blue', cursor: 'pointer' }} onClick={() => publicCustomerDetail(record)} >{customerType === 'private' ? record.name : record.nickname}</span></>,
387
+      // render: (_, record) => <><span style={{ color: 'blue', cursor: 'pointer' }} onClick={() => publicCustomerDetail(record)} >{customerType === 'private' ? record.name : record.nickname}</span></>,
387 388
     },
388 389
     {
389 390
       title: '电话',
@@ -392,6 +393,21 @@ function body(props) {
392 393
       align: 'center',
393 394
       width: '15%',
394 395
     },
396
+    {
397
+      title: '是否归属项目',
398
+      dataIndex: '',
399
+      key: '',
400
+      align: 'center',
401
+      width: '15%',
402
+      render: (_, record) => <><span>{record.buildingId != null ? '是' : '否'}</span></>,
403
+    },
404
+    {
405
+      title: '归属项目',
406
+      dataIndex: 'buildingName',
407
+      key: 'buildingName',
408
+      align: 'center',
409
+      width: '15%',
410
+    },
395 411
     {
396 412
       title: '推广人员',
397 413
       dataIndex: 'sharePersonName',
@@ -401,12 +417,12 @@ function body(props) {
401 417
     },
402 418
     {
403 419
       title: '性别',
404
-      dataIndex: 'gender',
405
-      key: 'gender',
420
+      dataIndex: 'sex',
421
+      key: 'sex',
406 422
       align: 'center',
407 423
       width: '10%',
408 424
       // eslint-disable-next-line no-nested-ternary
409
-      render: (_, record) => <><span>{record.gender === '1' ? '男' : record.gender === '2' ? '女' : '未知'}</span></>,
425
+      render: (_, record) => <><span>{record.sex === '1' ? '男' : record.sex === '2' ? '女' : '未知'}</span></>,
410 426
     },
411 427
     {
412 428
       title: '操作',
@@ -484,6 +500,13 @@ function body(props) {
484 500
         </>
485 501
       ),
486 502
     },
503
+    {
504
+      title: '归属项目',
505
+      dataIndex: 'buildingName',
506
+      key: 'buildingName',
507
+      align: 'center',
508
+      width: '15%',
509
+    },
487 510
     {
488 511
       title: '推广人员',
489 512
       dataIndex: 'sharePersonName',
@@ -542,6 +565,14 @@ function body(props) {
542 565
   return (
543 566
     <>
544 567
       <Form layout="inline" onSubmit={e => handleSubmit(e, props)}>
568
+      {customerType === 'public' && <Form.Item>
569
+          {getFieldDecorator('belongStatus')(
570
+            <Select style={{ width: '180px' }} placeholder="是否归属项目" onChange={handleSelectChange}>
571
+              <Option value={1}>是</Option>
572
+              <Option value={0}>否</Option>
573
+            </Select>,
574
+          )}
575
+        </Form.Item>}
545 576
         <Form.Item>
546 577
           {getFieldDecorator('buildingId')(
547 578
             <BuildSelect />,
@@ -654,7 +685,7 @@ function body(props) {
654 685
           //     onClick: () => publicCustomerDetail(record),
655 686
           //   };
656 687
           // }}
657
-          dataSource={dataSource.records} columns={publicColumns} pagination={{ current: dataSource.current, total: dataSource.total, pageSize: dataSource.size, onChange }} rowKey={r => r.personId} />
688
+          dataSource={dataSource.records} columns={publicColumns} pagination={{ current: dataSource.current, total: dataSource.total, pageSize: dataSource.size, onChange }} rowKey={r => r.customerId} />
658 689
       }
659 690
 
660 691
       {/* 调整归属 */}

+ 140
- 0
src/pages/staff/components/BatchAssistConsultant.jsx Прегледај датотеку

@@ -0,0 +1,140 @@
1
+import React, { useState, useEffect } from 'react';
2
+import { Form, Icon, Input, Button, DatePicker, Select, Card, Row, Col, Pagination, Alert, Table, Avatar, Radio, Modal, Descriptions, notification } from 'antd';
3
+import moment from 'moment';
4
+import request from '../../../utils/request';
5
+import apis from '../../../services/apis';
6
+
7
+
8
+const { Option } = Select;
9
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
10
+const { Meta } = Card;
11
+
12
+/**
13
+ * 分配置业顾问
14
+ *
15
+ * @param {*} props
16
+ * @returns
17
+ */
18
+class ModalAttribution extends React.Component {
19
+  constructor(props) {
20
+    super(props);
21
+    // console.log(props, 'props')
22
+    this.state = {
23
+       dataSource: { records: [] },
24
+       visibleData: { visible: false, buildingId: '' },
25
+    }
26
+  }
27
+
28
+  // 挂载之后
29
+  componentDidMount() {
30
+    // this.getList({ pageNumber: 1, pageSize: 5 })
31
+  }
32
+
33
+  componentDidUpdate(preProps, preState) {
34
+    console.log(this.props.preState,"111111111111111")
35
+    if (this.props.visible !== preState.visibleData.visible) {
36
+      this.getList({ pageNumber: 1, pageSize: 5, buildingId: this.props.buildingId })
37
+      this.setState({ visibleData: { visible: this.props.visible, buildingId: this.props.buildingId } });
38
+    }
39
+  }
40
+
41
+  // 弹框确定按钮
42
+  // eslint-disable-next-line react/sort-comp
43
+  handleOk() {
44
+    this.props.onCancel()
45
+  }
46
+
47
+  // 弹框取消按钮
48
+  handleCancel() {
49
+    this.props.onCancel()
50
+  }
51
+
52
+  getUserList(params){
53
+    console.log('params: ', params)
54
+    if (params.buildingId === '' || params.buildingId === null || params.buildingId === undefined) {
55
+      return
56
+    }
57
+    // 网路请求
58
+    request({ ...apis.customer.buildingConsultant, params: { ...params } }).then(res => {
59
+      this.setState({ dataSource: res })
60
+    }).catch(err => {
61
+      
62
+    })
63
+  }
64
+
65
+  getList(params) {
66
+    // 网路请求
67
+    console.log('params: ', params)
68
+    request({ ...apis.customer.buildingConsultant }).then(res => {
69
+      this.setState({ dataSource: res })
70
+    }).catch(err => {
71
+      
72
+    })
73
+  }
74
+
75
+  openNotificationWithIcon = (type, message) => {
76
+    notification[type]({
77
+      message,
78
+      description:
79
+        '',
80
+    });
81
+  };
82
+
83
+   // 分页
84
+  onChange(pageNum) {
85
+
86
+    this.getUserList({ pageNumber: pageNum, pageSize: 5, buildingId: this.state.visibleData.buildingId })
87
+  }
88
+
89
+  // 提交
90
+  submitGm(record) {
91
+    console.log(record,"111111")
92
+  }
93
+
94
+  render() {
95
+    const columns = [
96
+      {
97
+        title: '姓名',
98
+        dataIndex: 'userName',
99
+        key: 'userName',
100
+      },
101
+      {
102
+        title: '电话',
103
+        dataIndex: 'phone',
104
+        key: 'phone',
105
+      },
106
+      {
107
+        title: '部门',
108
+        dataIndex: 'department',
109
+        key: 'department',
110
+      },
111
+      {
112
+        title: '岗位',
113
+        dataIndex: 'position',
114
+        key: 'position',
115
+      },
116
+      {
117
+        title: '操作',
118
+        dataIndex: 'personId',
119
+        key: 'personId',
120
+        // eslint-disable-next-line no-nested-ternary
121
+        render: (_, record) => <>{ <Button type="danger" onClick={() => this.submitGm(record)}>确定</Button>}</>, },
122
+    ]
123
+    return (
124
+      <>
125
+        <Modal
126
+            title="分配置业顾问"
127
+            width={500}
128
+            destroyOnClose="true"
129
+            footer={null}
130
+            visible={this.state.visibleData.visible}
131
+            onCancel={(e) => this.handleCancel(e)}
132
+          >
133
+            <Table rowKey="BatchAssistConsultant" dataSource={this.state.dataSource.records} columns={columns} pagination={{pageSize: 5, total: this.state.dataSource.total, onChange: e => this.onChange(e) }} />
134
+          </Modal>
135
+      </>
136
+    );
137
+  }
138
+}
139
+
140
+export default ModalAttribution

+ 63
- 0
src/pages/staff/components/CustomerChange.jsx Прегледај датотеку

@@ -0,0 +1,63 @@
1
+import React, { Component, useState, useEffect } from 'react';
2
+import echarts from 'echarts/lib/echarts';
3
+import EChart from '../../../components/EchartsTest/EChart';
4
+import request from '../../../utils/request';
5
+import apis from '../../../services/apis';
6
+import moment from 'moment';
7
+import router from 'umi/router';
8
+import { Table, Select, Row, Col, Menu, Dropdown, Button, Icon, message } from 'antd';
9
+import BatchAssistConsultant from './BatchAssistConsultant'
10
+
11
+const CustomerChange = (props) => {
12
+  const [data, setData] = useState([])
13
+  const [consultantVisible, setConsultantVisible] = useState(false)
14
+
15
+  const rowSelection = {
16
+    onChange: (selectedRowKeys, selectedRows) => {
17
+      console.log('selectedRowKeys:', selectedRowKeys, 'selectedRows: ', selectedRows);
18
+    },
19
+  };
20
+
21
+  const columns = [
22
+    {
23
+      title: '用户名',
24
+      dataIndex: 'name',
25
+      key: 'name',
26
+      align: 'center',
27
+    },
28
+    {
29
+      title: '手机号',
30
+      dataIndex: 'phone',
31
+      key: 'phone',
32
+      align: 'center',
33
+    },
34
+    {
35
+      title: '状态',
36
+      dataIndex: 'status',
37
+      key: 'status',
38
+      align: 'center',
39
+    },
40
+    {
41
+      title: '调整后归属',
42
+      dataIndex: 'buildingId',
43
+      key: 'buildingId',
44
+      align: 'center',
45
+    }
46
+  ];
47
+
48
+  useEffect(() => {
49
+    request({ ...apis.staff.check, params: { userId: props.userId, personId: props.consultantPersonId, buildingId: props.buildingId } }).then(data => {
50
+       setData(data)
51
+   })
52
+  }, [props.userId])
53
+
54
+  return (
55
+    <div>
56
+        <Button type="primary" onClick={() => setConsultantVisible(true)} style={{ float: 'right', margin: '20px 0', marginLeft: '20px', zIndex: 1 }}>分配置业顾问</Button>
57
+        <Table rowSelection={rowSelection} dataSource={data} columns={columns} rowKey="customerId" pagination={false} scroll={{ y: 500 }}/>
58
+        <BatchAssistConsultant visible={consultantVisible} buildingId={props.buildingId} />
59
+    </div>
60
+  )
61
+}
62
+
63
+export default CustomerChange;

+ 85
- 47
src/pages/staff/list/StaffList.jsx Прегледај датотеку

@@ -9,6 +9,7 @@ import apis from '../../../services/apis';
9 9
 import request from '../../../utils/request'
10 10
 import Styles from './style.less';
11 11
 import BuildingSelect from '@/components/SelectButton/BuildSelect';
12
+import CustomerChange from '../components/CustomerChange'
12 13
 
13 14
 const { Meta } = Card;
14 15
 const { Option } = Select;
@@ -32,22 +33,39 @@ const toEditStaff = userId => () => {
32 33
  */
33 34
 const CartBody = props => {
34 35
   const { data } = props
36
+  const [visible, setVisible] = useState(false)
35 37
   // console.log("data11:", data)
36 38
 
37 39
   const confirm = data => () => {
38 40
     // console.log(data, "11111")
39 41
     if (data.status === 1) {
40
-      Modal.confirm({
41
-        title: '停用后无法登录后台系统',
42
-        okText: '确认',
43
-        cancelText: '取消',
44
-        onOk () {
45
-          request({ ...apis.staff.change, urlData: { id: data.userId, type: 'off' } }).then(data => {
46
-            message.info('操作成功')
47
-            props.onFresh()
48
-          })
49
-        },
50
-      });
42
+      if(data.isConsultant){
43
+        request({ ...apis.staff.check, params: { userId: data.userId, personId: data.consultantPersonId, buildingId: data.buildingId } }).then(data => {
44
+          if(data){
45
+            Modal.confirm({
46
+              title: '此置业顾问下有私客,是否转移私客?',
47
+              okText: '确认',
48
+              cancelText: '取消',
49
+              onOk () {
50
+                setVisible(true)
51
+              },
52
+            });
53
+          }
54
+       })
55
+      }else{
56
+        const titleMessahe = data.isConsultant ? '停用后此员工无法继续登录后台(若为置业顾问停用后在小程序端将成为普通用户)确认进行停用操作?' : '停用后此员工无法继续登录后台,确认进行停用操作?';
57
+        Modal.confirm({
58
+          title: titleMessahe,
59
+          okText: '确认',
60
+          cancelText: '取消',
61
+          onOk () {
62
+            request({ ...apis.staff.change, urlData: { id: data.userId, type: 'off' } }).then(data => {
63
+              message.info('操作成功')
64
+              props.onFresh()
65
+            })
66
+          },
67
+        });
68
+      }
51 69
     } else {
52 70
       Modal.confirm({
53 71
         title: '确认启用该角色?',
@@ -95,45 +113,55 @@ const CartBody = props => {
95 113
   }
96 114
 
97 115
   return (
116
+    <div>
117
+      <Card className={Styles.card}>
118
+        <div>
119
+          <Avatar src={data.photo} style={{ width: '0.48rem', height: '0.48rem' }} />
120
+          <AuthButton name="admin.user.put" noRight={null}>
121
+          <Button type="link" style={{ color: '#FF925C', fontSize: '0.106rem', position: 'absolute', top: '40px', left: '0.56rem' }} onClick={toEditStaff(data.userId)}>
122
+            编辑
123
+                  <Icon type="form" style={{ color: '#C0C4CC', marginLeft: '0.04rem' }} />
124
+          </Button>
125
+          </AuthButton>
126
+          {/* <Button type="link" style={{ fontSize: ' 0.106rem', color: '#cacaca', position: 'absolute', top: '40px', right: '0' }} onClick={() => departure(data)}>
127
+            离职
128
+                  <Icon type="exclamation-circle" style={{ color: '#C0C4CC', marginLeft: '0.04rem' }} />
129
+          </Button> */}
130
+          <AuthButton name="admin.user.publish" noRight={null}>
131
+          <Button type="link" style={{ fontSize: ' 0.106rem', color: '#cacaca', position: 'absolute', top: '40px', right: '0' }} onClick={confirm(data)}>
132
+            {data.status === 1 ? '停用' : '启用'}
133
+            <Icon type={data.status === 1 ? 'close-circle' : 'form'} style={{ color: '#C0C4CC', marginLeft: '0.04rem' }} />
134
+          </Button>
135
+          </AuthButton>
136
+        </div>
137
+        <div>
98 138
 
99
-    <Card className={Styles.card}>
100
-      <div>
101
-        <Avatar src={data.photo} style={{ width: '0.48rem', height: '0.48rem' }} />
102
-        <AuthButton name="admin.user.put" noRight={null}>
103
-        <Button type="link" style={{ color: '#FF925C', fontSize: '0.106rem', position: 'absolute', top: '40px', left: '0.56rem' }} onClick={toEditStaff(data.userId)}>
104
-          编辑
105
-                <Icon type="form" style={{ color: '#C0C4CC', marginLeft: '0.04rem' }} />
106
-        </Button>
107
-        </AuthButton>
108
-        {/* <Button type="link" style={{ fontSize: ' 0.106rem', color: '#cacaca', position: 'absolute', top: '40px', right: '0' }} onClick={() => departure(data)}>
109
-          离职
110
-                <Icon type="exclamation-circle" style={{ color: '#C0C4CC', marginLeft: '0.04rem' }} />
111
-        </Button> */}
112
-        <AuthButton name="admin.user.publish" noRight={null}>
113
-        <Button type="link" style={{ fontSize: ' 0.106rem', color: '#cacaca', position: 'absolute', top: '40px', right: '0' }} onClick={confirm(data)}>
114
-          {data.status === 1 ? '停用' : '启用'}
115
-          <Icon type={data.status === 1 ? 'close-circle' : 'form'} style={{ color: '#C0C4CC', marginLeft: '0.04rem' }} />
116
-        </Button>
117
-        </AuthButton>
118
-      </div>
119
-      <div>
139
+          <span>
140
+            {
141
+              data.taTagsList.map((item, index) => <Tag className={Styles.cardTag} color={item.tagColor}>{item.tagName}</Tag>)
142
+            }
143
+          </span>
120 144
 
121
-        <span>
122
-          {
123
-            data.taTagsList.map((item, index) => <Tag className={Styles.cardTag} color={item.tagColor}>{item.tagName}</Tag>)
124
-          }
125
-        </span>
126
-
127
-        <p className={Styles.cardText} >姓名 : {data.userName}
128
-        </p>
129
-        {/* <p className={Styles.statusText} > 状态 : {data.status === 1 ? '启用' : '停用'} </p> */}
130
-        <p className={Styles.statusText} > 绑定状态 : {data.miniStatus === 1 ? '已绑定' : '未绑定'} </p>
131
-        <p className={Styles.phoneText} >
132
-          电话 : {data.phone}
133
-        </p>
134
-      </div>
145
+          <p className={Styles.cardText} >姓名 : {data.userName}
146
+          </p>
147
+          {/* <p className={Styles.statusText} > 状态 : {data.status === 1 ? '启用' : '停用'} </p> */}
148
+          <p className={Styles.statusText} > 绑定状态 : {data.miniStatus === 1 ? '已绑定' : '未绑定'} </p>
149
+          <p className={Styles.phoneText} >
150
+            电话 : {data.phone}
151
+          </p>
152
+        </div>
135 153
 
136
-    </Card>
154
+      </Card>
155
+      <Modal
156
+        visible={visible}
157
+        title="分配归属"
158
+        onCancel={() => setVisible(false)}
159
+        footer={null}
160
+        width={900}
161
+      >
162
+          <CustomerChange userId={data.userId} consultantPersonId={data.consultantPersonId} buildingId={data.buildingId} />
163
+      </Modal>
164
+    </div>
137 165
   )
138 166
 }
139 167
 
@@ -219,6 +247,16 @@ const header = props => {
219 247
           )}
220 248
         </Form.Item>
221 249
 
250
+        <Form.Item>
251
+
252
+          {getFieldDecorator('miniStatus')(
253
+            <Select style={{ width: '180px' }} placeholder="是否绑定" >
254
+              <Option value="0">未绑定</Option>
255
+              <Option value="1">已绑定</Option>
256
+            </Select>,
257
+          )}
258
+        </Form.Item>
259
+
222 260
         <Form.Item>
223 261
         <AuthButton name="admin.user.search" noRight={null}>
224 262
           <Button type="primary" htmlType="submit" className={styles.searchBtn}>

+ 5
- 0
src/services/apis.js Прегледај датотеку

@@ -831,6 +831,11 @@ export default {
831 831
       method: 'PUT',
832 832
       action: 'admin.turn.taUser.put',
833 833
     },
834
+    check: {
835
+      url: `${prefix}/consultant/customer/list`,
836
+      method: 'GET',
837
+      action: 'admin.consultant.customer.list.put',
838
+    },
834 839
     departure: {
835 840
       url: `${prefix}/user/departure/:id`,
836 841
       method: 'PUT',