瀏覽代碼

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

Yansen 5 年之前
父節點
當前提交
9fbd5ceac8
共有 35 個文件被更改,包括 791 次插入49 次删除
  1. 28
    0
      config/routes.js
  2. 二進制
      src/assets/market/bargain.png
  3. 二進制
      src/assets/market/card.png
  4. 二進制
      src/assets/market/collage.png
  5. 二進制
      src/assets/market/draw.png
  6. 二進制
      src/assets/market/guess.png
  7. 二進制
      src/assets/market/lottery.png
  8. 二進制
      src/assets/market/seckill.png
  9. 二進制
      src/assets/market/shake.png
  10. 二進制
      src/assets/market/test.png
  11. 二進制
      src/assets/miniapp/code.png
  12. 二進制
      src/assets/miniapp/four.png
  13. 二進制
      src/assets/miniapp/one.png
  14. 二進制
      src/assets/miniapp/preview.png
  15. 二進制
      src/assets/miniapp/prototype1.png
  16. 二進制
      src/assets/miniapp/prototype2.png
  17. 二進制
      src/assets/miniapp/prototype3.png
  18. 二進制
      src/assets/miniapp/prototype4.png
  19. 二進制
      src/assets/miniapp/three.png
  20. 二進制
      src/assets/miniapp/two.png
  21. 二進制
      src/assets/miniapp/use.png
  22. 110
    0
      src/pages/marketingTools/components/step1.jsx
  23. 177
    0
      src/pages/marketingTools/components/step2.jsx
  24. 72
    0
      src/pages/marketingTools/components/step3.jsx
  25. 43
    0
      src/pages/marketingTools/components/step4.jsx
  26. 20
    0
      src/pages/marketingTools/components/style.less
  27. 55
    20
      src/pages/marketingTools/index.jsx
  28. 59
    0
      src/pages/marketingTools/lottery/add.jsx
  29. 3
    3
      src/pages/marketingTools/lottery/data.jsx
  30. 11
    10
      src/pages/marketingTools/lottery/index.jsx
  31. 38
    0
      src/pages/marketingTools/lottery/style.less
  32. 9
    16
      src/pages/marketingTools/style.less
  33. 122
    0
      src/pages/miniappTheme/index.jsx
  34. 22
    0
      src/pages/system/miniappManager/index.jsx
  35. 22
    0
      src/pages/system/miniappSetMeal/index.jsx

+ 28
- 0
config/routes.js 查看文件

@@ -544,6 +544,16 @@ export default [
544 544
                 hideInMenu: true,
545 545
                 component: './system/document/audit',
546 546
               },
547
+              {
548
+                path: '/system/miniappManager/index',
549
+                name: '小程序管理',
550
+                component: './system/miniappManager/index',
551
+              },
552
+              {
553
+                path: '/system/miniappSetMeal/index',
554
+                name: '购买套餐',
555
+                component: './system/miniappSetMeal/index',
556
+              },
547 557
               // {
548 558
               //   path: '/system/MiniappTheme',
549 559
               //   name: '小程序主题',
@@ -994,6 +1004,24 @@ export default [
994 1004
                 hideInMenu: true,
995 1005
                 component: './marketingTools/lottery/data',
996 1006
               },
1007
+              {
1008
+                path: '/marketingTools/lottery/add',
1009
+                name: '编辑',
1010
+                hideInMenu: true,
1011
+                component: './marketingTools/lottery/add',
1012
+              },
1013
+            ],
1014
+          },
1015
+          {
1016
+            path: '/miniappTheme',
1017
+            name: '小程序主题',
1018
+            component: '../layouts/BlankLayout',
1019
+            routes: [
1020
+              {
1021
+                path: '/miniappTheme/index',
1022
+                name: '主题模板',
1023
+                component: './miniappTheme/index',
1024
+              },
997 1025
             ],
998 1026
           },
999 1027
           // {

二進制
src/assets/market/bargain.png 查看文件


二進制
src/assets/market/card.png 查看文件


二進制
src/assets/market/collage.png 查看文件


二進制
src/assets/market/draw.png 查看文件


二進制
src/assets/market/guess.png 查看文件


二進制
src/assets/market/lottery.png 查看文件


二進制
src/assets/market/seckill.png 查看文件


二進制
src/assets/market/shake.png 查看文件


二進制
src/assets/market/test.png 查看文件


二進制
src/assets/miniapp/code.png 查看文件


二進制
src/assets/miniapp/four.png 查看文件


二進制
src/assets/miniapp/one.png 查看文件


二進制
src/assets/miniapp/preview.png 查看文件


二進制
src/assets/miniapp/prototype1.png 查看文件


二進制
src/assets/miniapp/prototype2.png 查看文件


二進制
src/assets/miniapp/prototype3.png 查看文件


二進制
src/assets/miniapp/prototype4.png 查看文件


二進制
src/assets/miniapp/three.png 查看文件


二進制
src/assets/miniapp/two.png 查看文件


二進制
src/assets/miniapp/use.png 查看文件


+ 110
- 0
src/pages/marketingTools/components/step1.jsx 查看文件

@@ -0,0 +1,110 @@
1
+import React, { useState, useEffect } from 'react';
2
+import { Form, Icon, Input, Button, DatePicker, InputNumber, Radio } from 'antd';
3
+import Styles from './style.less';
4
+
5
+function CreatActivity(props) {
6
+    const { getFieldDecorator } = props.form;
7
+    const { RangePicker } = DatePicker;
8
+
9
+    const [tab, setTab] = useState('0')
10
+    const formItemLayout = {
11
+        labelCol: {
12
+            xs: { span: 24 },
13
+            sm: { span: 5 },
14
+        },
15
+        wrapperCol: {
16
+            xs: { span: 24 },
17
+            sm: { span: 16 },
18
+        },
19
+    };
20
+
21
+
22
+    function handleSubmit(e) {
23
+        e.preventDefault();
24
+        props.form.validateFieldsAndScroll((err, values) => {
25
+            if (!err) {
26
+                props.onNext()
27
+            }
28
+        });
29
+    }
30
+
31
+    return (
32
+        <>
33
+            <Form {...formItemLayout} onSubmit={handleSubmit}>
34
+                <p className={Styles.title}>基本信息</p>
35
+                <Form.Item label="活动名称" >
36
+                    {getFieldDecorator('activityName', {
37
+                        rules: [{ required: true, message: '请输入活动名称' }],
38
+                    })(<Input />)}
39
+                </Form.Item>
40
+                <Form.Item label="活动时间">
41
+                    {getFieldDecorator('activityTime', {
42
+                        rules: [
43
+                            {
44
+                                required: true,
45
+                                message: '请选择活动时间',
46
+                            },
47
+                        ],
48
+                    })(<RangePicker format="YYYY-MM-DD HH:mm" />)}
49
+                </Form.Item>
50
+
51
+                <Form.Item label="参与身份" >
52
+                    {getFieldDecorator('role', {
53
+                        initialValue: 1,
54
+                    })(
55
+                        <Radio.Group>
56
+                            <Radio value={1}>所有用户</Radio>
57
+                            <Radio value={2}>新用户(未注册过手机号)</Radio>
58
+                        </Radio.Group>,
59
+                    )}
60
+                </Form.Item>
61
+
62
+                <Form.Item label="活动类型" >
63
+                    {getFieldDecorator('activityType', {
64
+                        initialValue: 1,
65
+                    })(
66
+                        <Radio.Group>
67
+                            <Radio value={1}>无线抽奖</Radio>
68
+                            <Radio value={2}>积分抽奖,消耗 {getFieldDecorator('integral')(<InputNumber min={1} />)} 积分</Radio>
69
+                        </Radio.Group>,
70
+                    )}
71
+                </Form.Item>
72
+
73
+                <Form.Item label="参与次数" >
74
+                    {getFieldDecorator('times', {
75
+                        initialValue: 1,
76
+                    })(
77
+                        <Radio.Group>
78
+                            <Radio value={1}>
79
+                                一天N次
80
+                                <div style={{ marginTop: '8px' }}>每人每天抽 {getFieldDecorator('times1')(<InputNumber min={1} />)} 次</div>
81
+                                <div>每天分享额外抽 {getFieldDecorator('times2')(<InputNumber min={1} />)} 次</div>
82
+                            </Radio>
83
+                            <Radio value={2}>
84
+                                一人N次
85
+                                        <div style={{ marginTop: '8px' }}>每人一共可抽 {getFieldDecorator('times3')(<InputNumber min={1} />)} 次</div>
86
+                                <div>每人分享额外抽 {getFieldDecorator('times4')(<InputNumber min={1} />)} 次</div>
87
+                            </Radio>
88
+                        </Radio.Group>,
89
+                    )}
90
+                </Form.Item>
91
+
92
+
93
+
94
+                <Form.Item style={{ width: '500px', margin: 'auto', display: 'flex', justifyContent: 'space-between' }}>
95
+                    <Button onClick={() => router.go(-1)} style={{ margin: '0 20px' }}>
96
+                        取消
97
+                    </Button>
98
+
99
+                    <Button type="primary" htmlType="submit">
100
+                        下一步
101
+                    </Button>
102
+                </Form.Item>
103
+            </Form>
104
+        </>
105
+    )
106
+}
107
+
108
+const WrappedCreatActivityForm = Form.create({ name: 'CreatActivity' })(CreatActivity);
109
+
110
+export default WrappedCreatActivityForm

+ 177
- 0
src/pages/marketingTools/components/step2.jsx 查看文件

@@ -0,0 +1,177 @@
1
+import React, { useState, useEffect } from 'react';
2
+import { Form, Icon, Input, Button, Table, InputNumber, Radio } from 'antd';
3
+import Styles from './style.less';
4
+
5
+function Award(props) {
6
+    const { getFieldDecorator } = props.form;
7
+
8
+    const formItemLayout = {
9
+        labelCol: {
10
+            xs: { span: 24 },
11
+            sm: { span: 5 },
12
+        },
13
+        wrapperCol: {
14
+            xs: { span: 24 },
15
+            sm: { span: 16 },
16
+        },
17
+    };
18
+    const list = [
19
+        {
20
+            name: '特等奖',
21
+            award: '华为P30pro',
22
+            img: 'http://img1.imgtn.bdimg.com/it/u=3784469630,654971&fm=26&gp=0.jpg',
23
+            num: '2',
24
+            percent: '5%',
25
+            provide: '',
26
+            index: '1'
27
+        },
28
+        {
29
+            name: '一等奖',
30
+            award: '500元苏果卡',
31
+            img: 'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=637033601,3111670601&fm=26&gp=0.jpg',
32
+            num: '50',
33
+            percent: '20%',
34
+            provide: '',
35
+            index: '2'
36
+        },
37
+        {
38
+            name: '二等奖',
39
+            award: '300元苏果卡',
40
+            img: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1997215264,2437398566&fm=26&gp=0.jpg',
41
+            num: '20',
42
+            percent: '30%',
43
+            provide: '',
44
+            index: '3'
45
+        },
46
+        {
47
+            name: '三等奖',
48
+            award: '100积分',
49
+            img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591957675722&di=ff6e441952a79e88e7a78123bf185bc6&imgtype=0&src=http%3A%2F%2F588ku.izihun.com%2Felement_origin_min_pic%2F18%2F08%2F22%2F59423ed3bcf4af7517454958f989b912.jpg%2521%2Ffw%2F820%2Fquality%2F100%2Funsharp%2Ftrue%2Fcompress%2Ftrue%2Fformat%2Fjpeg',
50
+            num: '50',
51
+            percent: '50%',
52
+            provide: '',
53
+            index: '4'
54
+        },
55
+
56
+    ]
57
+
58
+
59
+    const columns = [
60
+        {
61
+            title: '名称',
62
+            dataIndex: 'name',
63
+            key: 'name',
64
+            align: 'center',
65
+        },
66
+        {
67
+            title: '奖品',
68
+            dataIndex: 'award',
69
+            key: 'award',
70
+            align: 'center',
71
+        },
72
+        {
73
+            title: '图片',
74
+            dataIndex: 'img',
75
+            key: 'img',
76
+            align: 'center',
77
+            render: (img) => <img style={{ width: '40px', height: '40px' }} src={img}></img>
78
+        },
79
+        {
80
+            title: '数量',
81
+            dataIndex: 'num',
82
+            key: 'num',
83
+            align: 'center',
84
+        },
85
+        {
86
+            title: '中奖概率',
87
+            dataIndex: 'percent',
88
+            key: 'percent',
89
+            align: 'center',
90
+        },
91
+        {
92
+            title: '已发放',
93
+            dataIndex: 'provide',
94
+            key: 'provide',
95
+            align: 'center',
96
+        },
97
+        {
98
+            title: '操作',
99
+            dataIndex: 'handle',
100
+            key: 'handle',
101
+            align: 'center',
102
+            render: () => <>
103
+                <span style={{ color: '#FF4A4A', marginRight: '6px' }}>编辑</span>
104
+                <span style={{ color: '#FF4A4A' }}>删除</span>
105
+            </>
106
+        },
107
+    ];
108
+
109
+    function handleSubmit(e) {
110
+        e.preventDefault();
111
+        props.form.validateFieldsAndScroll((err, values) => {
112
+            if (!err) {
113
+                props.onNext()
114
+            }
115
+        });
116
+    }
117
+
118
+
119
+    return (
120
+        <>
121
+            <Form {...formItemLayout} onSubmit={handleSubmit}>
122
+                <p className={Styles.title}>奖品设置</p>
123
+                <p className={Styles.blue}>添加奖品</p>
124
+                <Table className={Styles.table} bordered dataSource={list} columns={columns} pagination={false} rowKey={(x => x.index)} />
125
+                <p className={Styles.title} style={{ marginTop: '20px' }}>未中奖设置</p>
126
+                <Form.Item label="名称" >
127
+                    {getFieldDecorator('name', {
128
+                        rules: [{ required: true, message: '请输入名称' }],
129
+                    })(<Input placeholder='请输入名称' />)}
130
+                </Form.Item>
131
+                <Form.Item label="图片" >
132
+                    <img style={{ width: '120px', height: '120px', marginRight: '10px' }} src="https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2907552255,1679967258&fm=26&gp=0.jpg" alt="" />
133
+                    <span className={Styles.blue}>修改</span>
134
+                </Form.Item>
135
+                <Form.Item label="提示语" >
136
+                    {getFieldDecorator('tip')(<Input placeholder='请输入提示语' />)}
137
+                </Form.Item>
138
+                <Form.Item label="提示跳转" >
139
+                    {getFieldDecorator('role', {
140
+                        initialValue: 1,
141
+                    })(
142
+                        <Radio.Group>
143
+                            <Radio value={1}>无跳转</Radio>
144
+                            <Radio value={2}>有跳转 <span className={Styles.blue}>选择跳转界面</span> </Radio>
145
+                        </Radio.Group>,
146
+                    )}
147
+                </Form.Item>
148
+                <p className={Styles.title} style={{ marginTop: '20px' }}>参与送积分</p>
149
+
150
+                <Form.Item >
151
+                    参与送 {getFieldDecorator('jifen')(<InputNumber min={1} />)} 积分
152
+                </Form.Item>
153
+                <Form.Item>
154
+                    {getFieldDecorator('noaward')(
155
+                        <Radio.Group>
156
+                            <Radio value={1}>仅送给未中奖用户</Radio>
157
+                        </Radio.Group>,
158
+
159
+                    )}
160
+                </Form.Item>
161
+
162
+                <Form.Item style={{ width: '500px', margin: 'auto', display: 'flex', justifyContent: 'space-between' }}>
163
+                    <Button onClick={() => props.onPre()} style={{ margin: '0 20px' }}>
164
+                        上一步
165
+                    </Button>
166
+                    <Button type="primary" htmlType="submit">
167
+                        下一步
168
+                    </Button>
169
+                </Form.Item>
170
+            </Form>
171
+        </>
172
+    )
173
+}
174
+
175
+const WrappedAwardForm = Form.create({ name: 'Award' })(Award);
176
+
177
+export default WrappedAwardForm

+ 72
- 0
src/pages/marketingTools/components/step3.jsx 查看文件

@@ -0,0 +1,72 @@
1
+import React, { useState, useEffect } from 'react';
2
+import { Form, Icon, Input, Button, Table, Radio } from 'antd';
3
+import Styles from './style.less';
4
+import Wangedit from '../../../components/Wangedit/Wangedit'
5
+
6
+function Award(props) {
7
+    const { getFieldDecorator } = props.form;
8
+
9
+
10
+    const formItemLayout = {
11
+        labelCol: {
12
+            xs: { span: 24 },
13
+            sm: { span: 4 },
14
+        },
15
+        wrapperCol: {
16
+            xs: { span: 24 },
17
+            sm: { span: 20 },
18
+        },
19
+    };
20
+
21
+
22
+    function handleSubmit(e) {
23
+        e.preventDefault();
24
+        props.form.validateFieldsAndScroll((err, values) => {
25
+            if (!err) {
26
+                props.onNext()
27
+            }
28
+        });
29
+    }
30
+
31
+
32
+    return (
33
+        <>
34
+            <Form style={{minWidth:'700px'}} {...formItemLayout} onSubmit={handleSubmit}>
35
+
36
+                <p className={Styles.title} style={{ marginTop: '20px' }}>页面装修</p>
37
+
38
+                <Form.Item label="图片" help='建议尺寸1125*1809像素,支持JPG、PNG、JPEG格式'>
39
+                    <img style={{ width: '120px', height: '120px', marginRight: '10px' }} src="https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2907552255,1679967258&fm=26&gp=0.jpg" alt="" />
40
+                    <span className={Styles.blue}>修改</span>
41
+                </Form.Item>
42
+
43
+                <Form.Item label="中奖名单" >
44
+                    {getFieldDecorator('show', {
45
+                        initialValue: 1,
46
+                    })(
47
+                        <Radio.Group>
48
+                            <Radio value={1}>展示</Radio>
49
+                            <Radio value={2}>不展示</Radio>
50
+                        </Radio.Group>,
51
+                    )}
52
+                </Form.Item>
53
+                <Form.Item label="活动说明">
54
+                    {getFieldDecorator('desc')(<Wangedit />)}
55
+                </Form.Item>
56
+
57
+                <Form.Item style={{ width: '500px', margin: 'auto', display: 'flex', justifyContent: 'space-between' }}>
58
+                    <Button onClick={() => props.onPre()} style={{ margin: '0 20px' }}>
59
+                        上一步
60
+                    </Button>
61
+                    <Button type="primary" htmlType="submit">
62
+                        下一步
63
+                    </Button>
64
+                </Form.Item>
65
+            </Form>
66
+        </>
67
+    )
68
+}
69
+
70
+const WrappedAwardForm = Form.create({ name: 'Award' })(Award);
71
+
72
+export default WrappedAwardForm

+ 43
- 0
src/pages/marketingTools/components/step4.jsx 查看文件

@@ -0,0 +1,43 @@
1
+import React, { useState } from 'react';
2
+import { Row, Col, Button, Modal } from 'antd';
3
+import router from 'umi/router';
4
+import Styles from './style.less';
5
+
6
+
7
+const Success = props => {
8
+
9
+    const [visible, setVisible] = useState(false)
10
+
11
+    const toLottery = () => {
12
+        router.push({
13
+            pathname: '/marketingTools/lottery/index',
14
+        });
15
+    }
16
+
17
+    return <>
18
+        <Modal
19
+            visible={visible}
20
+            title="推广二维码与推广链接"
21
+            onCancel={() => setVisible(false)}
22
+            footer={null}
23
+        >
24
+            <div style={{ textAlign: 'center' }}>
25
+                <img style={{ width: '200px', height: '200px' }} src='https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=3602624501,870193918&fm=26&gp=0.jpg' ></img>
26
+                <p>https://dev.fangdeal.cn/admin/#/activity/drainage/DrainageList <span style={{ color: '#1D74D9' }}>复制链接</span></p>
27
+            </div>
28
+        </Modal>
29
+        <div style={{ textAlign: 'center', width: '100%', marginTop: '30px' }}>
30
+            <img src='http://123.57.65.31:8081/axure/%E8%90%A5%E9%94%80%E4%BA%91/%e8%90%a5%e9%94%80%e4%ba%91V3.5.30%e6%a9%99%e8%95%89%e6%8e%a8%e5%b9%bf/images/%E5%AE%8C%E6%88%90_v3_5_30_/u5014.png'></img>
31
+            <p style={{ fontSize: '0.12rem', fontWeight: '800', marginTop: '30px' }}>创建成功</p>
32
+            <p>立即推广活动,获取更多客户</p>
33
+            <Button type="primary" onClick={() => setVisible(true)}>立即推广</Button>
34
+            <div style={{ marginTop: '16px', fontSize: '0.09rem' }}>
35
+                <span className={Styles.blue} style={{ marginRight: '16px', cursor: 'pointer' }} onClick={() => props.onRefresh()}>继续新建活动</span>
36
+                <span className={Styles.blue} style={{ cursor: 'pointer' }} onClick={() => toLottery()}>返回活动列表</span>
37
+            </div>
38
+        </div>
39
+
40
+    </>
41
+}
42
+
43
+export default Success

+ 20
- 0
src/pages/marketingTools/components/style.less 查看文件

@@ -0,0 +1,20 @@
1
+.title{
2
+    font-weight: 600;
3
+    border-bottom: 1px solid #eee;
4
+    font-size: 15px;
5
+    padding-bottom: 6px;
6
+    margin-bottom: 20px;
7
+}
8
+.blue{
9
+    color: #1D74D9;
10
+}
11
+
12
+.table  {
13
+    tr{
14
+        td{
15
+            padding: 6px 8px;
16
+            overflow-wrap: break-word;
17
+        }
18
+    }
19
+  
20
+}

+ 55
- 20
src/pages/marketingTools/index.jsx 查看文件

@@ -2,32 +2,66 @@ import React, { useState, useEffect } from 'react';
2 2
 import { Row, Col } from 'antd';
3 3
 import router from 'umi/router';
4 4
 import Styles from './style.less';
5
+import bargain from '../../assets/market/bargain.png'
6
+import card from '../../assets/market/card.png'
7
+import collage from '../../assets/market/collage.png'
8
+import draw from '../../assets/market/draw.png'
9
+import guess from '../../assets/market/guess.png'
10
+import lottery from '../../assets/market/lottery.png'
11
+import seckill from '../../assets/market/seckill.png'
12
+import shake from '../../assets/market/shake.png'
13
+import test from '../../assets/market/test.png'
5 14
 
6 15
 
7
-const market = props => {
16
+const Market = props => {
8 17
 
9 18
     const list = [
10 19
         {
11
-            img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591876471373&di=ceb7710067a87ee0fb182c4e7e753c04&imgtype=0&src=http%3A%2F%2Fa3.att.hudong.com%2F14%2F75%2F01300000164186121366756803686.jpg',
20
+            img: draw,
12 21
             title: '幸运大抽奖',
13 22
             desc: '常见的转盘式抽奖方法',
14 23
             url: '/marketingTools/lottery/index'
15 24
         },
16 25
         {
17
-            img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591876471373&di=ceb7710067a87ee0fb182c4e7e753c04&imgtype=0&src=http%3A%2F%2Fa3.att.hudong.com%2F14%2F75%2F01300000164186121366756803686.jpg',
26
+            img: seckill,
18 27
             title: '秒杀',
19 28
             desc: '快速抢购引导顾客更多消费'
20 29
         },
21 30
         {
22
-            img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591876471373&di=ceb7710067a87ee0fb182c4e7e753c04&imgtype=0&src=http%3A%2F%2Fa3.att.hudong.com%2F14%2F75%2F01300000164186121366756803686.jpg',
31
+            img: card,
23 32
             title: '刮刮卡',
24 33
             desc: '通过刮开卡片的方式进行抽奖的玩法'
25 34
         },
26 35
         {
27
-            img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591876471373&di=ceb7710067a87ee0fb182c4e7e753c04&imgtype=0&src=http%3A%2F%2Fa3.att.hudong.com%2F14%2F75%2F01300000164186121366756803686.jpg',
36
+            img: test,
28 37
             title: '趣味测试',
29 38
             desc: '趣味小测试,互动吸粉'
30 39
         },
40
+        {
41
+            img: shake,
42
+            title: '摇一摇',
43
+            desc: '让客户摇一摇进行抽奖'
44
+        },
45
+        {
46
+            img: lottery,
47
+            title: '0元抽奖',
48
+            desc: '拼团成功即可获得抽奖机会'
49
+        },
50
+        {
51
+            img: guess,
52
+            title: '疯狂猜猜猜',
53
+            desc: '回答问题,按答题情况给奖励'
54
+        },
55
+        {
56
+            img: collage,
57
+            title: '多人拼团',
58
+            desc: '引导用户邀请好友参加'
59
+        },
60
+        {
61
+            img: bargain,
62
+            title: '砍价0元购',
63
+            desc: '邀请好友砍价后购买'
64
+        },
31 65
     ]
32 66
 
33 67
     const handleItem = (url) => {
@@ -40,21 +74,22 @@ const market = props => {
40 74
     return <>
41 75
         <p>营销工具:抓取客户,社交裂变</p>
42 76
 
43
-        <div className={Styles.flex}>
44
-            {
45
-                list.map((item, _) => (
46
-                    <div className={Styles.itemBox} onClick={() => handleItem(item.url)}>
47
-                        <img className={Styles.img} src={item.img} ></img>
48
-                        <div>
49
-                            <p style={{ fontSize: '18px' }}>{item.title}</p>
50
-                            <p style={{ fontSize: '15px', color: '#999', marginBottom: '0px' }}>{item.desc}</p>
51
-                        </div>
52
-                    </div>
53
-                ))
54
-            }
55
-
56
-        </div>
77
+            <Row style={{width:'100%'}}>
78
+                {
79
+                    list.map((item, index) => (
80
+                        <Col span={8}>
81
+                            <div key={index} className={Styles.itemBox} onClick={() => handleItem(item.url)}>
82
+                                <img className={Styles.img} src={item.img} ></img>
83
+                                <div>
84
+                                    <p style={{ fontSize: '18px' }}>{item.title}</p>
85
+                                    <p style={{ fontSize: '15px', color: '#999', marginBottom: '0px' }}>{item.desc}</p>
86
+                                </div>
87
+                            </div>
88
+                        </Col>
89
+                    ))
90
+                }
91
+            </Row>
57 92
     </>
58 93
 }
59 94
 
60
-export default market
95
+export default Market

+ 59
- 0
src/pages/marketingTools/lottery/add.jsx 查看文件

@@ -0,0 +1,59 @@
1
+import React, { useState, useEffect } from 'react';
2
+import { Form, Icon, Input, Button, Table, DatePicker, InputNumber, Radio } from 'antd';
3
+import Styles from './style.less';
4
+import Step1 from '../components/step1'
5
+import Step2 from '../components/step2'
6
+import Step3 from '../components/step3'
7
+import Step4 from '../components/step4'
8
+
9
+function AddActivity(props) {
10
+    const { getFieldDecorator } = props.form;
11
+    const { RangePicker } = DatePicker;
12
+
13
+    const [tab, setTab] = useState('0')
14
+
15
+
16
+    const tabTitle = [
17
+        { title: '1.创建活动', value: '0' },
18
+        { title: '2.奖项设置', value: '1' },
19
+        { title: '3.页面装修', value: '2' },
20
+        { title: '4.完成', value: '3' },
21
+    ]
22
+
23
+
24
+    const img = 'http://123.57.65.31:8081/axure/%E8%90%A5%E9%94%80%E4%BA%91/%e8%90%a5%e9%94%80%e4%ba%91V3.5.30%e6%a9%99%e8%95%89%e6%8e%a8%e5%b9%bf/images/%E6%96%B0%E5%A2%9E%E5%B9%B8%E8%BF%90%E5%A4%A7%E6%8A%BD%E5%A5%96_v3_5_30_/u4584.png'
25
+    return (
26
+        <>
27
+            <div className={Styles.tabBox}>
28
+                {
29
+                    tabTitle.map((item, index) => (
30
+                        <span key={index} className={tab == index ? Styles.active : Styles.tabItem}>{item.title}</span>
31
+                    ))
32
+                }
33
+            </div>
34
+            <div className={Styles.content}>
35
+                {tab != '3' && <>
36
+                    <div className={Styles.img}>
37
+                        <img src={img}></img>
38
+                    </div>
39
+                </>}
40
+
41
+                {tab == '0' && <><Step1 onNext={() => setTab('1')} /></>}
42
+                {tab == '1' && <>
43
+                    <Step2 onPre={() => setTab('0')} onNext={() => setTab('2')} />
44
+                </>}
45
+                {tab == '2' && <>
46
+                    <Step3 onPre={() => setTab('1')} onNext={() => setTab('3')} />
47
+                </>}
48
+                {tab == '3' && <>
49
+                    <Step4 onRefresh={() => setTab('0')} />
50
+                </>}
51
+
52
+            </div>
53
+        </>
54
+    )
55
+}
56
+
57
+const WrappedAddActivityForm = Form.create({ name: 'AddActivity' })(AddActivity);
58
+
59
+export default WrappedAddActivityForm

+ 3
- 3
src/pages/marketingTools/lottery/data.jsx 查看文件

@@ -1,7 +1,7 @@
1 1
 import React, { useState, useEffect } from 'react';
2 2
 import { Form, Icon, Input, Button, Pagination, Tabs, Radio, Table } from 'antd';
3 3
 
4
-function Data(props) {
4
+function Datalist(props) {
5 5
 
6 6
     const [tab, setTab] = useState('base')
7 7
 
@@ -185,6 +185,6 @@ function Data(props) {
185 185
     )
186 186
 }
187 187
 
188
-const WrappedDataForm = Form.create({ name: 'Data' })(Data);
188
+const WrappedDatalistForm = Form.create({ name: 'Datalist' })(Datalist);
189 189
 
190
-export default WrappedDataForm
190
+export default WrappedDatalistForm

+ 11
- 10
src/pages/marketingTools/lottery/index.jsx 查看文件

@@ -4,7 +4,7 @@ import router from 'umi/router';
4 4
 
5 5
 const { Option } = Select;
6 6
 
7
-const lottery = (props) => {
7
+const Lottery = (props) => {
8 8
 
9 9
     const [visible, setVisible] = useState(false)
10 10
 
@@ -38,9 +38,14 @@ const lottery = (props) => {
38 38
         },
39 39
 
40 40
     ]
41
-    const toData = ()=>{
42
-          router.push({
43
-            pathname: '/marketingTools/lottery/data',
41
+    const toData = () => {
42
+        router.push({
43
+            pathname: '/marketingTools/Lottery/data',
44
+        });
45
+    }
46
+    const toEdit = () => {
47
+        router.push({
48
+            pathname: '/marketingTools/Lottery/add',
44 49
         });
45 50
     }
46 51
 
@@ -92,7 +97,7 @@ const lottery = (props) => {
92 97
             render: () => <>
93 98
                 <span style={{ color: '#FF4A4A', marginRight: '6px', cursor: 'pointer' }} onClick={() => toData()}>数据</span>
94 99
                 <span style={{ color: '#FF4A4A', marginRight: '6px', cursor: 'pointer' }} onClick={() => setVisible(true)}>推广</span>
95
-                <span style={{ color: '#FF4A4A', marginRight: '6px' }}>编辑</span>
100
+                <span style={{ color: '#FF4A4A', marginRight: '6px' }} onClick={() => toEdit()}>编辑</span>
96 101
                 <span style={{ color: '#FF4A4A' }}>删除</span>
97 102
             </>
98 103
         },
@@ -108,10 +113,6 @@ const lottery = (props) => {
108 113
 
109 114
     }
110 115
 
111
-    const toEdit = () => {
112
-
113
-    }
114
-
115 116
     //重置搜索
116 117
     function handleReset() {
117 118
 
@@ -174,6 +175,6 @@ const lottery = (props) => {
174 175
         </>
175 176
     )
176 177
 }
177
-const WrappedHeader = Form.create({ name: 'lottery' })(lottery);
178
+const WrappedHeader = Form.create({ name: 'Lottery' })(Lottery);
178 179
 
179 180
 export default WrappedHeader

+ 38
- 0
src/pages/marketingTools/lottery/style.less 查看文件

@@ -0,0 +1,38 @@
1
+.tabBox{
2
+    width: 800px;
3
+    border-top: 1px solid  #FF7E48;
4
+    border-bottom: 1px solid  #FF7E48;
5
+    border-left: 1px solid  #FF7E48;
6
+    border-radius: 6px;
7
+    line-height: 40px;
8
+    display: flex;
9
+    align-items: center;
10
+    .tabItem{
11
+        width: 200px;
12
+        border-right: 1px solid #FF7E48;
13
+        color: #FF7E48;
14
+        text-align: center;
15
+    }
16
+    .active{
17
+        width: 200px;
18
+        border-right: 1px solid #FF7E48;
19
+        color: #fff;
20
+        background-color: #FF7E48;
21
+        text-align: center;
22
+    }
23
+}
24
+.content{
25
+    display: flex;
26
+    padding: 60px 10%;
27
+  
28
+}
29
+.title{
30
+    font-weight: 600;
31
+    border-bottom: 1px solid #eee;
32
+    font-size: 15px;
33
+    padding-bottom: 6px;
34
+    margin-bottom: 20px;
35
+}
36
+.img{
37
+    margin-right: 80px;
38
+}

+ 9
- 16
src/pages/marketingTools/style.less 查看文件

@@ -1,26 +1,19 @@
1
-.flex{
2
- 
3
-    display: flex;
4
-    flex-wrap: wrap;
5
-    align-content: flex-start;
6
-    justify-content: space-between;
7
-       
8
-}
1
+
9 2
 .itemBox{
10
-    flex: 0 0 30%;
11
-    height: 120px;
3
+    height: 132px;
12 4
     box-sizing: border-box;
13
-    border-radius: 4px;
5
+    border-radius: 8px;
14 6
     border:1px solid #eee;
15
-    padding: 10px;
16
-    margin-bottom: 30px;
7
+    margin: 15px;
17 8
     display: flex;
18 9
     align-items: center;
19
-    min-width: 300px;
10
+    min-width: 460px;
11
+    box-shadow: rgba(0, 0, 0, 0.12) 0px 0px 16px 2px;
12
+    background-color: #fff;
20 13
 
21 14
     .img{
22
-        height: 100px;
23
-        width: 100px;
15
+        height: 100%;
24 16
         margin-right: 16px;
17
+        border-radius: 8px 0 0 8px;
25 18
     }
26 19
 }

+ 122
- 0
src/pages/miniappTheme/index.jsx 查看文件

@@ -0,0 +1,122 @@
1
+import React, { useState, useEffect } from 'react';
2
+import { Row, Col, Card, Modal, Button, message } from 'antd';
3
+import router from 'umi/router';
4
+import one from '../../assets/miniapp/one.png'
5
+import two from '../../assets/miniapp/two.png'
6
+import three from '../../assets/miniapp/three.png'
7
+import four from '../../assets/miniapp/four.png'
8
+import preview from '../../assets/miniapp/preview.png'
9
+import code from '../../assets/miniapp/code.png'
10
+import prototype1 from '../../assets/miniapp/prototype1.png'
11
+import prototype2 from '../../assets/miniapp/prototype2.png'
12
+import prototype3 from '../../assets/miniapp/prototype3.png'
13
+import prototype4 from '../../assets/miniapp/prototype4.png'
14
+import use from '../../assets/miniapp/use.png'
15
+
16
+const MiniAppTheme = props => {
17
+    const [active, setActive] = useState({})
18
+    const [visible, setVisible] = useState(false)
19
+
20
+    const list = [
21
+        {
22
+            title: '橙蕉小程序驼色调',
23
+            img: one,
24
+            index: '1',
25
+            used: true,
26
+            previewImg: prototype1,
27
+        },
28
+        {
29
+            title: '橙蕉小程序橙色调',
30
+            img: two,
31
+            index: '2',
32
+            previewImg: prototype2,
33
+        },
34
+        {
35
+            title: '橙蕉小程序蓝色调',
36
+            img: three,
37
+            index: '3',
38
+            previewImg: prototype3,
39
+        },
40
+        {
41
+            title: '橙蕉小程序深色调',
42
+            img: four,
43
+            index: '4',
44
+            previewImg: prototype4,
45
+        },
46
+    ]
47
+
48
+    return <>
49
+        <Modal
50
+            visible={visible}
51
+            title="主题模板使用"
52
+            width='1200px'
53
+            onCancel={() => setVisible(false)}
54
+            footer={[
55
+                <div style={{ textAlign: 'center' }}>
56
+                    <Button type="primary" style={{ margin: '0 20px' }} onClick={() => message.info('操作成功!') && setVisible(false)}>
57
+                        使用
58
+                </Button>
59
+                    <Button onClick={() => setVisible(false)}>
60
+                        取消
61
+                </Button>
62
+                </div>
63
+            ]}
64
+        >
65
+            <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
66
+                <div style={{ textAlign: 'center', marginRight: '50px' }}>
67
+                    <img style={{ width: '240px' }} src={active.previewImg} />
68
+                    <p style={{ fontWeight: '600', marginTop: '10px' }}>{active.title}</p>
69
+                </div>
70
+                <div style={{ textAlign: 'center' }}>
71
+                    <img style={{ width: '88px' }} src={code} />
72
+                    <p style={{ margin: '6px 0 10px 0' }}>扫描二维码预览</p>
73
+                    <p >预览效果仅供参考,请以实际投放标准为准</p>
74
+                </div>
75
+            </div>
76
+        </Modal>
77
+
78
+        <Row style={{ width: '100%' }}>
79
+            {
80
+                list.map((item, index) => (
81
+                    <Col key={index} span={6}>
82
+                        <Card
83
+                            hoverable
84
+                            style={{ minWidth: '330px', borderRadius: '12px', margin: '10px', boxShadow: '0px 0px 16px 2px rgba(0,0,0,0.12)' }}
85
+                        >
86
+                            <div style={{ padding: '20px' }} onMouseEnter={() => setActive(item)}>
87
+                                <img style={{ width: '100%', height: '100%' }} src={item.img}></img>
88
+                                {
89
+                                    active.index === item.index && <div style={{ position: 'absolute', top: '20px', right: '14px' }}>
90
+                                        <img onClick={() => setVisible(true)} style={{ padding: '8px', backgroundColor: '#fff', marginRight: '20px', borderRadius: '6px', }} src={preview} />
91
+                                        <img style={{ width: '90px', height: '40px' }} onClick={() => message.info('操作成功!')} src={use} />
92
+                                    </div>
93
+                                }
94
+
95
+                                {
96
+                                    item.used && <div style={{
97
+                                        display: 'flex',
98
+                                        alignItems: 'center',
99
+                                        width: '90%',
100
+                                        justifyContent: 'space-between',
101
+                                        position: 'absolute',
102
+                                        padding: '10px',
103
+                                        backgroundColor: '#fff',
104
+                                        bottom: '0'
105
+                                    }}>
106
+                                        <p style={{ fontSize: '0.1rem', fontWeight: '600', marginBottom: '0px' }}>{item.title}</p>
107
+                                        <p style={{ color: '#FF7E48', marginBottom: '0px' }}>使用中</p>
108
+                                    </div>
109
+                                }
110
+                            </div>
111
+
112
+                        </Card>
113
+                    </Col>
114
+                ))
115
+            }
116
+        </Row>
117
+
118
+
119
+    </>
120
+}
121
+
122
+export default MiniAppTheme

+ 22
- 0
src/pages/system/miniappManager/index.jsx 查看文件

@@ -0,0 +1,22 @@
1
+import React, { useState, useEffect } from 'react';
2
+import { Form, Icon, Input, Button, DatePicker, Select, Modal, message, Card, Row, Col, Pagination, Alert } from 'antd';
3
+import moment from 'moment';
4
+import router from 'umi/router';
5
+import request from '../../../utils/request';
6
+import apis from '../../../services/apis';
7
+import Prompt from 'umi/prompt';
8
+
9
+/**
10
+ *
11
+ *
12
+ * @param {*} props
13
+ * @returns
14
+ */
15
+const body = (props)  => {
16
+  return (
17
+     <div><span>小程序管理页面</span></div>
18
+  );
19
+}
20
+const WrappedBody = Form.create({ name: 'body' })(body);
21
+
22
+export default WrappedBody

+ 22
- 0
src/pages/system/miniappSetMeal/index.jsx 查看文件

@@ -0,0 +1,22 @@
1
+import React, { useState, useEffect } from 'react';
2
+import { Form, Icon, Input, Button, DatePicker, Select, Modal, message, Card, Row, Col, Pagination, Alert } from 'antd';
3
+import moment from 'moment';
4
+import router from 'umi/router';
5
+import request from '../../../utils/request';
6
+import apis from '../../../services/apis';
7
+import Prompt from 'umi/prompt';
8
+
9
+/**
10
+ *
11
+ *
12
+ * @param {*} props
13
+ * @returns
14
+ */
15
+const body = (props)  => {
16
+  return (
17
+     <div><span>购买套餐管理页面</span></div>
18
+  );
19
+}
20
+const WrappedBody = Form.create({ name: 'body' })(body);
21
+
22
+export default WrappedBody