张延森 3 gadus atpakaļ
vecāks
revīzija
809018e654

+ 65
- 7
src/components/Poster/Form.jsx Parādīt failu

1
-import React from 'react'
2
-import { Button, Form, Input } from 'antd'
1
+import React, { useEffect, useState } from 'react'
2
+import { Button, Form, Input, message } from 'antd'
3
 import ImageUpload from '@/components/XForm/ImageUpload'
3
 import ImageUpload from '@/components/XForm/ImageUpload'
4
+import { fetch, apis } from '@/utils/request'
4
 
5
 
5
 const formItemLayout = {
6
 const formItemLayout = {
6
   labelCol: {
7
   labelCol: {
13
   },
14
   },
14
 }
15
 }
15
 
16
 
17
+const getData = fetch(apis.activity.poster)
18
+const saveData = fetch(apis.activity.addPoster)
19
+const updateData = fetch(apis.activity.updatePoster)
20
+
16
 const PosterForm = (props) => {
21
 const PosterForm = (props) => {
17
-  const { form } = props
18
-  const { getFieldDecorator } = form
22
+  const { form, targetId, targetType } = props
23
+  const { getFieldDecorator, resetFields, setFieldsValue, validateFields } = form
24
+
25
+  const [formData, setFormData] = useState()
26
+  const [loading, setLoading] = useState(false)
19
 
27
 
20
   const handleImageChange = (img) => {
28
   const handleImageChange = (img) => {
21
     props.onImageChange(img)
29
     props.onImageChange(img)
22
   }
30
   }
23
 
31
 
32
+  const handleSubmit = (e) => {
33
+    e.preventDefault();
34
+    validateFields((err, values) => {
35
+      if (err) {
36
+        console.error(err)
37
+        return
38
+      }
39
+
40
+      const request = formData.posterId ? updateData : saveData
41
+      const urlData = formData.posterId ? { id: formData.posterId } : undefined
42
+      const data = {
43
+        targetId,
44
+        targetType,
45
+        ...(formData || {}),
46
+        ...values,
47
+      }
48
+
49
+      setLoading(true)
50
+      request({ urlData, data }).then((res) => {
51
+        setLoading(false)
52
+        setFormData(res)
53
+        message.success('操作成功')
54
+      }).catch((err) => {
55
+        setLoading(false)
56
+        console.error(err)
57
+      })
58
+    })
59
+  }
60
+
61
+  useEffect(() => {
62
+    if (targetId && targetType) {
63
+      setLoading(true)
64
+      getData({ params: { targetId, targetType } }).then((res) => {
65
+        setFormData(res ? res[0] : undefined)
66
+        setLoading(false)
67
+      }).catch((err) => {
68
+        console.error(err)
69
+        setLoading(false)
70
+      })
71
+    }
72
+  }, [targetId, targetType])
73
+
74
+  useEffect(() => {
75
+    const { posterImg, posterTitle, posterDescription } = formData || {}
76
+
77
+    resetFields()
78
+    setFieldsValue({ posterImg, posterTitle, posterDescription })
79
+    handleImageChange(posterImg)
80
+  }, [formData])
81
+
24
   return (
82
   return (
25
-    <Form {...formItemLayout}>
83
+    <Form {...formItemLayout} onSubmit={handleSubmit}>
26
       <Form.Item label="海报图" help="图片建议尺寸:1080*1925px,比例9:16,格式:jpg">
84
       <Form.Item label="海报图" help="图片建议尺寸:1080*1925px,比例9:16,格式:jpg">
27
       {getFieldDecorator('posterImg', {
85
       {getFieldDecorator('posterImg', {
28
           rules: [{ required: true, message: '请楼盘海报图' }],
86
           rules: [{ required: true, message: '请楼盘海报图' }],
35
       {getFieldDecorator('posterDescription')(<Input.TextArea row={4} />)}
93
       {getFieldDecorator('posterDescription')(<Input.TextArea row={4} />)}
36
       </Form.Item>
94
       </Form.Item>
37
       <Form.Item label=" " colon={false} style={{marginTop: '2em'}}>
95
       <Form.Item label=" " colon={false} style={{marginTop: '2em'}}>
38
-        <Button style={{marginLeft: '4em'}} type="primary" htmlType="submit">保存</Button>
39
-        <Button style={{marginLeft: '2em'}} onClick={props.onCancel}>取消</Button>
96
+        <Button loading={loading} style={{marginLeft: '4em'}} type="primary" htmlType="submit">保存</Button>
97
+        {/* <Button style={{marginLeft: '2em'}} onClick={props.onCancel}>取消</Button> */}
40
       </Form.Item>
98
       </Form.Item>
41
     </Form>
99
     </Form>
42
   )
100
   )

+ 12
- 7
src/components/Poster/index.jsx Parādīt failu

1
-import React, { useMemo, useState } from 'react'
1
+import React, { useState } from 'react'
2
 import { getImgURL } from '@/utils/image'
2
 import { getImgURL } from '@/utils/image'
3
 import Preview from './Preview'
3
 import Preview from './Preview'
4
 import Form from './Form'
4
 import Form from './Form'
5
 import Styles from './style.less'
5
 import Styles from './style.less'
6
 
6
 
7
+const noop = x => x;
8
+
7
 export default (props) => {
9
 export default (props) => {
8
-  const { target } = props
10
+  const { target, onCancel = noop } = props
9
   const { id: targetId, type: targetType } = target
11
   const { id: targetId, type: targetType } = target
10
 
12
 
11
-  const [poster, setPoster] = useState()
12
-
13
-  const posterImage = useMemo(() => (poster ? getImgURL(poster) : undefined), [poster]);
13
+  const [posterImg, setPosterImg] = useState()
14
 
14
 
15
   return (
15
   return (
16
     <div className={Styles['building-poster']}>
16
     <div className={Styles['building-poster']}>
17
       <div className={Styles['poster-preview']}>
17
       <div className={Styles['poster-preview']}>
18
-        <Preview img={posterImage} />
18
+        <Preview img={getImgURL(posterImg)} />
19
       </div>
19
       </div>
20
       <div className={Styles['poster-form']}>
20
       <div className={Styles['poster-form']}>
21
-        <Form onImageChange={setPoster} />
21
+        <Form
22
+          targetId={targetId}
23
+          targetType={targetType}
24
+          onImageChange={setPosterImg}
25
+          onCancel={onCancel}
26
+        />
22
       </div>
27
       </div>
23
     </div>
28
     </div>
24
   )
29
   )

+ 64
- 8
src/components/Share/index.jsx Parādīt failu

1
-import React from 'react'
1
+import React, { useState, useEffect } from 'react'
2
 import { Button, Form, Input } from 'antd'
2
 import { Button, Form, Input } from 'antd'
3
 import ImageUpload from '@/components/XForm/ImageUpload'
3
 import ImageUpload from '@/components/XForm/ImageUpload'
4
+import { fetch, apis } from '@/utils/request'
4
 
5
 
5
 const formItemLayout = {
6
 const formItemLayout = {
6
   labelCol: {
7
   labelCol: {
12
     sm: { span: 19 },
13
     sm: { span: 19 },
13
   },
14
   },
14
 }
15
 }
16
+const getData = fetch(apis.activity.shareContent)
17
+const saveData = fetch(apis.activity.addShareContent)
18
+const updateData = fetch(apis.activity.updateShareContent)
15
 
19
 
16
 const ShareForm = (props) => {
20
 const ShareForm = (props) => {
17
   const { target, form } = props
21
   const { target, form } = props
18
-  const { id: targetId, type: shareContentType } = target
19
-  const { getFieldDecorator } = form
22
+  const { id: targetId, type: targetType } = target
23
+  const { getFieldDecorator, resetFields, setFieldsValue, validateFields } = form
24
+
25
+  const [formData, setFormData] = useState()
26
+  const [loading, setLoading] = useState(false)
27
+
28
+  const handleSubmit = (e) => {
29
+    e.preventDefault();
30
+    validateFields((err, values) => {
31
+      if (err) {
32
+        console.error(err)
33
+        return
34
+      }
35
+
36
+      const request = formData.shareContentId ? updateData : saveData
37
+      const urlData = formData.shareContentId ? { id: formData.shareContentId } : undefined
38
+      const data = {
39
+        targetId,
40
+        shareContentType: targetType,
41
+        ...(formData || {}),
42
+        ...values,
43
+      }
44
+
45
+      setLoading(true)
46
+      request({ urlData, data }).then((res) => {
47
+        setLoading(false)
48
+        setFormData(res)
49
+        message.success('操作成功')
50
+      }).catch((err) => {
51
+        setLoading(false)
52
+        console.error(err)
53
+      })
54
+    })
55
+  }
56
+
57
+  useEffect(() => {
58
+    if (targetId && targetType) {
59
+      setLoading(true)
60
+      getData({ params: { targetId, targetType } }).then((res) => {
61
+        setFormData(res ? res[0] : undefined)
62
+        setLoading(false)
63
+      }).catch((err) => {
64
+        console.error(err)
65
+        setLoading(false)
66
+      })
67
+    }
68
+  }, [targetId, targetType])
69
+
70
+  useEffect(() => {
71
+    const { shareContentImg, shareContentTitle } = formData || {}
72
+
73
+    resetFields()
74
+    setFieldsValue({ shareContentImg, shareContentTitle })
75
+  }, [formData])
20
 
76
 
21
   return (
77
   return (
22
-    <Form {...formItemLayout}>
78
+    <Form {...formItemLayout} onSubmit={handleSubmit}>
23
       <Form.Item label="分享标题">
79
       <Form.Item label="分享标题">
24
       {getFieldDecorator('shareContentTitle', {
80
       {getFieldDecorator('shareContentTitle', {
25
         rules: [{required: true, message: '请填写分享标题'}]
81
         rules: [{required: true, message: '请填写分享标题'}]
26
-      })(<Input />)}
82
+      })(<Input placeholder="建议不要超过20字" />)}
27
       </Form.Item>
83
       </Form.Item>
28
       <Form.Item label="分享图" help="建议图片尺寸:750*600px,比例5:4,格式:jpg">
84
       <Form.Item label="分享图" help="建议图片尺寸:750*600px,比例5:4,格式:jpg">
29
-      {getFieldDecorator('posterImg', {
85
+      {getFieldDecorator('shareContentImg', {
30
           rules: [{ required: true, message: '请上传分享图' }],
86
           rules: [{ required: true, message: '请上传分享图' }],
31
       })(<ImageUpload />)}
87
       })(<ImageUpload />)}
32
       </Form.Item>
88
       </Form.Item>
33
       <Form.Item label=" " colon={false} style={{marginTop: '2em'}}>
89
       <Form.Item label=" " colon={false} style={{marginTop: '2em'}}>
34
-        <Button style={{marginLeft: '4em'}} type="primary" htmlType="submit">保存</Button>
35
-        <Button style={{marginLeft: '2em'}} onClick={props.onCancel}>取消</Button>
90
+        <Button loading={loading} style={{marginLeft: '4em'}} type="primary" htmlType="submit">保存</Button>
91
+        {/* <Button style={{marginLeft: '2em'}} onClick={props.onCancel}>取消</Button> */}
36
       </Form.Item>
92
       </Form.Item>
37
     </Form>
93
     </Form>
38
   )
94
   )

+ 6
- 9
src/pages/building/Edit/Apartment/Form.jsx Parādīt failu

12
 const updateData = fetch(apis.building.buildingApartmentUpdate)
12
 const updateData = fetch(apis.building.buildingApartmentUpdate)
13
 
13
 
14
 const AMForm = (props) => {
14
 const AMForm = (props) => {
15
-  const { visible, onCancel, form, onSubmit } = props
15
+  const { visible, onCancel, form, formData, onSuccess } = props
16
   const { getFieldDecorator, setFieldsValue, resetFields, validateFields } = form
16
   const { getFieldDecorator, setFieldsValue, resetFields, validateFields } = form
17
 
17
 
18
   const [loading, setLoading] = useState(false)
18
   const [loading, setLoading] = useState(false)
25
         return
25
         return
26
       }
26
       }
27
 
27
 
28
-      const request = props.formData.apartmentId ? updateData : saveData
28
+      const request = formData && formData.apartmentId ? updateData : saveData
29
       const data = {
29
       const data = {
30
-        ...(props.formData),
30
+        ...(formData || {}),
31
         ...values,
31
         ...values,
32
       }
32
       }
33
 
33
 
35
       request({ data }).then((res) => {
35
       request({ data }).then((res) => {
36
         setLoading(false)
36
         setLoading(false)
37
         message.success('操作成功')
37
         message.success('操作成功')
38
-        props.onSuccess(res)
38
+        onSuccess(res)
39
       }).catch((err) => {
39
       }).catch((err) => {
40
         setLoading(false)
40
         setLoading(false)
41
         console.error(err)
41
         console.error(err)
45
 
45
 
46
   useEffect(() => {
46
   useEffect(() => {
47
     resetFields()
47
     resetFields()
48
-    setFieldsValue(props.formData || {})
49
-  }, [props.formData])
48
+    setFieldsValue(formData || {})
49
+  }, [formData])
50
 
50
 
51
   return (
51
   return (
52
     <ModalForm
52
     <ModalForm
55
       onCancel={onCancel}
55
       onCancel={onCancel}
56
       onSubmit={handleSubmit}
56
       onSubmit={handleSubmit}
57
     >
57
     >
58
-      <Form.Item label="编号" style={{ display: 'none' }}>
59
-          {getFieldDecorator('apartmentId')(<Input />)}
60
-      </Form.Item>
61
       <Form.Item label="户型名称">
58
       <Form.Item label="户型名称">
62
         {getFieldDecorator('apartmentName', {
59
         {getFieldDecorator('apartmentName', {
63
           rules: [
60
           rules: [

+ 1
- 1
src/pages/building/Edit/Apartment/index.jsx Parādīt failu

62
   return (
62
   return (
63
     <div>
63
     <div>
64
       <div>
64
       <div>
65
-        <Button type="primary" onClick={handleEdit}>新增户型</Button>
65
+        <Button type="primary" onClick={() => handleEdit()}>新增户型</Button>
66
       </div>
66
       </div>
67
       <Form visible={visible} onCancel={() => setVisible(false)} formData={apartmentRef.current} onSuccess={handleSuccess} />
67
       <Form visible={visible} onCancel={() => setVisible(false)} formData={apartmentRef.current} onSuccess={handleSuccess} />
68
       <List loading={loading} dataSource={list} onEdit={handleEdit} onDelete={handleDelete} />
68
       <List loading={loading} dataSource={list} onEdit={handleEdit} onDelete={handleDelete} />

+ 5
- 1
src/pages/building/Edit/index.jsx Parādīt failu

15
 const { TabPane } = Tabs
15
 const { TabPane } = Tabs
16
 
16
 
17
 export default (props) => {
17
 export default (props) => {
18
-  const target = { id: '', type: 'building' }
18
+  const { history } = props
19
+  const { query } = history.location
20
+  const { id } = query
21
+
22
+  const target = { id, type: 'building' }
19
 
23
 
20
   return (
24
   return (
21
     <Card>
25
     <Card>

+ 4
- 2
src/utils/image.js Parādīt failu

1
 
1
 
2
+const host = process.env.NODE_ENV !== 'production' ? 'https://xlk.njyz.tech' : ''
3
+
2
 export function getImgURL(img) {
4
 export function getImgURL(img) {
3
     if (!img) return undefined;
5
     if (!img) return undefined;
6
+    if (img.indexOf('http') === 0) return img;
4
 
7
 
5
-    const isProd = process.env.NODE_ENV === 'production'
6
-    return isProd ? img : `https://xlk.njyz.tech${img}`;
8
+    return `${host}${img}`;
7
 }
9
 }