傅行帆 před 5 roky
rodič
revize
e8b4b999b1

+ 1
- 1
config/config.js Zobrazit soubor

264
                 },
264
                 },
265
                 {
265
                 {
266
                   path: '/activity/SignList',
266
                   path: '/activity/SignList',
267
-                  name: '报名列表',
267
+                  name: '',
268
                   component: './activity/SignList',
268
                   component: './activity/SignList',
269
                 },
269
                 },
270
               ],
270
               ],

+ 19
- 9
src/components/XForm/ImageUpload.jsx Zobrazit soubor

1
 import React from 'react';
1
 import React from 'react';
2
 import { Upload, Icon, message } from 'antd';
2
 import { Upload, Icon, message } from 'antd';
3
 import './style.less';
3
 import './style.less';
4
+import { uploaderProps } from '../../utils/upload';
5
+
6
+
4
 
7
 
5
 class ImageUpload extends React.Component {
8
 class ImageUpload extends React.Component {
6
   state = {
9
   state = {
7
-    loading: false
10
+    loading: false,
11
+    imageUrl: undefined,
8
   };
12
   };
9
 
13
 
10
   handleChange = info => {
14
   handleChange = info => {
14
     }
18
     }
15
 
19
 
16
     if (info.file.status === "done") {
20
     if (info.file.status === "done") {
17
-      const imageUrl = info.response.url
18
-
19
       this.setState({
21
       this.setState({
20
-        loading: false
22
+        loading: false,
21
       })
23
       })
22
 
24
 
23
-      this.props.onChange(imageUrl)
25
+      if (info.file.response && info.file.response.url) {
26
+        this.setState({
27
+          imageUrl: info.file.response.thumbUrl,
28
+        });
29
+
30
+        if (typeof this.props.onChange === 'function') {
31
+          this.props.onChange(info.file.response.url);
32
+        }
33
+      }
24
     }
34
     }
25
   };
35
   };
26
 
36
 
35
 
45
 
36
     return (
46
     return (
37
       <Upload
47
       <Upload
38
-        name="avatar"
39
         listType="picture-card"
48
         listType="picture-card"
40
         className="avatar-uploader"
49
         className="avatar-uploader"
41
         showUploadList={false}
50
         showUploadList={false}
42
-        action={this.props.action}
43
         beforeUpload={this.props.beforeUpload}
51
         beforeUpload={this.props.beforeUpload}
44
         onChange={this.handleChange}
52
         onChange={this.handleChange}
53
+
54
+        {...uploaderProps}
45
       >
55
       >
46
-        {value ? (
47
-          <img src={value} alt="avatar" style={{ width: "100%" }} />
56
+        {(this.state.imageUrl || value) ? (
57
+          <img src={this.state.imageUrl || value} alt="avatar" style={{ width: "100%" }} />
48
         ) : (
58
         ) : (
49
           uploadButton
59
           uploadButton
50
         )}
60
         )}

+ 107
- 26
src/pages/activity/editActivity.jsx Zobrazit soubor

1
-import React, { useState } from 'react';
2
-import { Form, Input, Button, Icon, Select, Tabs, Radio } from 'antd';
1
+import React, { useState, useEffect } from 'react';
2
+import { Form, Input, Button, Icon, Select, Tabs, Radio, DatePicker,message } from 'antd';
3
 import { FormattedMessage } from 'umi-plugin-react/locale';
3
 import { FormattedMessage } from 'umi-plugin-react/locale';
4
 import styles from '../style/GoodsList.less';
4
 import styles from '../style/GoodsList.less';
5
+import moment from 'moment';
6
+import router from 'umi/router';
7
+import BuildSelect from '../../components/SelectButton/BuildSelect'
5
 import XForm, { FieldTypes } from '../../components/XForm';
8
 import XForm, { FieldTypes } from '../../components/XForm';
6
 import Wangedit from '../../components/Wangedit/Wangedit'
9
 import Wangedit from '../../components/Wangedit/Wangedit'
10
+import request from '../../utils/request'
7
 
11
 
12
+const { MonthPicker, RangePicker, WeekPicker } = DatePicker;
8
 /**
13
 /**
9
  *
14
  *
10
  *
15
  *
12
  * @returns
17
  * @returns
13
  */
18
  */
14
  const Edit = (props) => {
19
  const Edit = (props) => {
15
-  const [ tab, changeTab ] = useState('basic');
20
+  const [ tab, changeTab ] = useState('basic')
16
   const dynamicId = props.location.query.dynamicId
21
   const dynamicId = props.location.query.dynamicId
17
-  console.log(dynamicId)
22
+  const [ dynamicData, setDynamicData ] = useState({})
23
+  if(dynamicId){
24
+    useEffect(() => {
25
+      getDynamicData(dynamicId);
26
+    },[])
27
+
28
+  // 查询列表
29
+  const getDynamicData = (dynamicId) => {
30
+    request({
31
+        url: '/api/admin/buildingDynamic/Details',
32
+        method: 'GET',
33
+        params: { dynamicId },
34
+    }).then((data) => {
35
+        console.log(data)
36
+        setDynamicData(data)
37
+    })
38
+  }
39
+  }
40
+
41
+  const cancelPage = () =>{
42
+    router.push({
43
+      pathname: '/activity/ActivityList',
44
+    });
45
+  }
18
 
46
 
19
   const Basic = (props) => {
47
   const Basic = (props) => {
20
     const fields = [
48
     const fields = [
21
       {
49
       {
22
         label: '所属项目',
50
         label: '所属项目',
23
-        name: 'org_id',
24
-        type: FieldTypes.Text
51
+        name: 'buildingId',
52
+        render: <BuildSelect />,
53
+        value: dynamicData.buildingId,
54
+        rules: [
55
+          {required: true, message: '请选择所属项目'},
56
+        ]
25
       },
57
       },
26
       {
58
       {
27
         label: '主图',
59
         label: '主图',
28
-        name: 'city_id',
60
+        name: 'imgUrl',
29
         type: FieldTypes.ImageUploader,
61
         type: FieldTypes.ImageUploader,
62
+        value: dynamicData.imgUrl,
30
       },
63
       },
31
       {
64
       {
32
         label: '活动标题',
65
         label: '活动标题',
33
-        name: 'share_num',
66
+        name: 'title',
34
         type: FieldTypes.Text,
67
         type: FieldTypes.Text,
35
-        placeholder: '不填, 默认使用手机号'
68
+        value: dynamicData.title,
69
+        rules: [
70
+          {required: true, message: '请输入活动标题'},
71
+        ]
36
       },
72
       },
37
       {
73
       {
38
         label: '活动时间',
74
         label: '活动时间',
39
-        name: 'save_num',
40
-        type: FieldTypes.Text,
75
+        name: 'activityTime',
76
+        type: FieldTypes.RangePicker,
77
+        value: dynamicData.startDate != null ?  [moment(dynamicData.startDate,'YYYY-MM-DD'),moment(dynamicData.endDate,'YYYY-MM-DD')] : null,
41
         rules: [
78
         rules: [
42
-          {required: true, message: '请填写手机号'}
79
+          {required: true, message: '请选择活动时间'},
43
         ]
80
         ]
44
       },
81
       },
45
       {
82
       {
46
         label: '活动地点',
83
         label: '活动地点',
47
-        name: 'pv_num',
48
-        type: FieldTypes.ImageUploader,
49
-        extra: '建议图片大小 128 * 128'
84
+        name: 'address',
85
+        type: FieldTypes.Text,
86
+        value: dynamicData.address,
87
+        rules: [
88
+          {required: true, message: '请输入活动地点'},
89
+        ]
50
       },
90
       },
51
       {
91
       {
52
         label: '活动人数',
92
         label: '活动人数',
53
-        name: 'favor_num',
54
-        type: FieldTypes.DatePicker,
93
+        name: 'enlistNum',
94
+        type: FieldTypes.Text,
95
+        value: dynamicData.enlistNum,
96
+        rules: [
97
+          {required: true, message: '请输入活动人数'},
98
+        ]
55
       },
99
       },
56
       {
100
       {
57
         label: '活动详情',
101
         label: '活动详情',
58
-        name: 'expDate',
102
+        name: 'desc',
59
         render: <Wangedit />,
103
         render: <Wangedit />,
60
-        value: "222222",
104
+        value: dynamicData.desc,
61
       },
105
       },
62
       {
106
       {
63
         label: '是否需要报名',
107
         label: '是否需要报名',
64
-        name: 'volume_rate',
65
-        type: FieldTypes.DatePicker,
108
+        name: 'isEnlist',
109
+        render: <Radio.Group name="radiogroup">
110
+                  <Radio value={1}>是</Radio>
111
+                  <Radio value={0}>否</Radio>
112
+                </Radio.Group>,
113
+        value: dynamicData.isEnlist != null ? dynamicData.isEnlist-0 : 1,
66
       },
114
       },
67
       {
115
       {
68
         label: '报名时间',
116
         label: '报名时间',
69
-        name: 'parking_rate',
70
-        type: FieldTypes.DatePicker,
117
+        name: 'signupTime',
118
+        type: FieldTypes.RangePicker,
119
+        value: dynamicData.enlistStart != null ?  [moment(dynamicData.enlistStart,'YYYY-MM-DD'),moment(dynamicData.enlistEnd,'YYYY-MM-DD')] : null,
120
+        rules: [
121
+          {required: true, message: '请选择报名时间'},
122
+        ]
71
       },
123
       },
72
     ]
124
     ]
73
   
125
   
74
-    const handleSubmit = val => {
75
-      window.console.log('submit data --->', val)
126
+    const handleSubmit = val => { 
127
+      let {activityTime,signupTime, ...submitValue} = val
128
+      const [startDate, endDate] = activityTime
129
+      submitValue.startDate = moment(startDate).format('YYYY-MM-DD');
130
+      submitValue.endDate = moment(endDate).format('YYYY-MM-DD');
131
+      const [enlistStart, enlistEnd] = signupTime
132
+      submitValue.enlistStart = moment(enlistStart).format('YYYY-MM-DD');
133
+      submitValue.enlistEnd = moment(enlistEnd).format('YYYY-MM-DD');
134
+      console.log('submit data --->', submitValue)
135
+      if(dynamicId){
136
+        submitValue.dynamicId = dynamicId
137
+        request({
138
+          url: '/api/admin/buildingDynamic/update',
139
+          method: 'PUT',
140
+          data: submitValue,
141
+        }).then((data) => {
142
+          cancelPage()
143
+        }).catch((err) => {
144
+          message.info(err.msg || err.message)
145
+        })
146
+      }else{
147
+        request({
148
+          url: '/api/admin/buildingDynamic/add',
149
+          method: 'POST',
150
+          data: submitValue,
151
+        }).then((data) => {
152
+          cancelPage()
153
+        }).catch((err) => {
154
+          message.info(err.msg || err.message)
155
+        })
156
+      }
76
     }
157
     }
77
-    return <XForm onSubmit={handleSubmit} fields={fields}></XForm>
158
+    return <XForm onSubmit={handleSubmit} onCancel={cancelPage} fields={fields}></XForm>
78
   }
159
   }
79
   
160
   
80
   const Poster = (props) => {
161
   const Poster = (props) => {

+ 6
- 0
src/services/apis.js Zobrazit soubor

1
 const prefix = '/api/admin'
1
 const prefix = '/api/admin'
2
 
2
 
3
 export default {
3
 export default {
4
+  image: {
5
+    upload: {
6
+      url: `${prefix}/antd/image`,
7
+      method: 'POST',
8
+    }
9
+  },
4
   user: {
10
   user: {
5
     current: {
11
     current: {
6
       method: 'GET',
12
       method: 'GET',

+ 11
- 0
src/utils/upload.js Zobrazit soubor

1
+import apis from '../services/apis';
2
+
3
+const uploaderProps = {
4
+  name: 'file',
5
+  action: apis.image.upload.url,
6
+  headers: {
7
+    Authorization: `Bearer ${window.localStorage.getItem('x-token')}`
8
+  }
9
+}
10
+
11
+export { uploaderProps }