张延森 4 年之前
父節點
當前提交
46d32bc5b9
共有 5 個文件被更改,包括 242 次插入67 次删除
  1. 71
    66
      config/routes.js
  2. 73
    0
      src/pages/mpSetting/components/MiniAppMedia.jsx
  3. 85
    0
      src/pages/mpSetting/index.jsx
  4. 12
    0
      src/services/apis.js
  5. 1
    1
      src/utils/request.js

+ 71
- 66
config/routes.js 查看文件

704
             ],
704
             ],
705
           },
705
           },
706
           
706
           
707
-          // {
708
-          //   path: '/system',
709
-          //   name: '系统管理',
710
-          //   component: '../layouts/BlankLayout',
711
-          //   routes: [
712
-          //     {
713
-          //       path: '/system/person-level-setting',
714
-          //       name: '用户等级',
715
-          //       component: './system/personLevelSetting'
716
-          //     },
717
-          //     {
718
-          //       path: '/system/person-level-setting/detail',
719
-          //       name: '等级详情',
720
-          //       component: './system/personLevelSetting/detail',
721
-          //       hideInMenu: true,
722
-          //     },
723
-          //     {
724
-          //       path: '/system/messageList',
725
-          //       name: '客户留言',
726
-          //       component: './system/messageList',
727
-          //     },
728
-          //     {
729
-          //       path: '/system/report',
730
-          //       name: '报表数据',
731
-          //       component: './system/report',
732
-          //     },
733
-          //     {
734
-          //       path: '/system/intention',
735
-          //       name: '意向值',
736
-          //       component: './system/intention',
737
-          //     },
738
-          //     {
739
-          //       path: '/system/housingPolicy',
740
-          //       name: '购房须知',
741
-          //       component: './system/housingPolicy',
742
-          //     },
743
-          //     {
744
-          //       path: '/system/editPolicy',
745
-          //       name: '购房政策编辑',
746
-          //       hideInMenu: true,
747
-          //       component: './system/editPolicy',
748
-          //     },
749
-          //     {
750
-          //       path: '/system/document/list',
751
-          //       name: '客户资料',
752
-          //       component: './system/document/list',
753
-          //     },
754
-          //     {
755
-          //       path: '/system/document/audit',
756
-          //       name: '客户资料审核',
757
-          //       hideInMenu: true,
758
-          //       component: './system/document/audit',
759
-          //     },
760
-          //     // {
761
-          //     //   path: '/system/MiniappTheme',
762
-          //     //   name: '小程序主题',
763
-          //     //   component: './system/MiniappTheme',
764
-          //     // },
765
-          //     // {
766
-          //     //   path: '/system/MiniappTheme/Detail',
767
-          //     //   name: '小程序主题编辑',
768
-          //     //   component: './system/MiniappTheme/Detail',
769
-          //     //   hideInMenu: true,
770
-          //     // },
771
-          //   ],
772
-          // },
707
+          {
708
+            path: '/system',
709
+            name: '系统管理',
710
+            component: '../layouts/BlankLayout',
711
+            routes: [
712
+              {
713
+                path: 'mp-setting',
714
+                name: '公众号设置',
715
+                component: './mpSetting'
716
+              },
717
+              // {
718
+              //   path: '/system/person-level-setting',
719
+              //   name: '用户等级',
720
+              //   component: './system/personLevelSetting'
721
+              // },
722
+              // {
723
+              //   path: '/system/person-level-setting/detail',
724
+              //   name: '等级详情',
725
+              //   component: './system/personLevelSetting/detail',
726
+              //   hideInMenu: true,
727
+              // },
728
+              // {
729
+              //   path: '/system/messageList',
730
+              //   name: '客户留言',
731
+              //   component: './system/messageList',
732
+              // },
733
+              // {
734
+              //   path: '/system/report',
735
+              //   name: '报表数据',
736
+              //   component: './system/report',
737
+              // },
738
+              // {
739
+              //   path: '/system/intention',
740
+              //   name: '意向值',
741
+              //   component: './system/intention',
742
+              // },
743
+              // {
744
+              //   path: '/system/housingPolicy',
745
+              //   name: '购房须知',
746
+              //   component: './system/housingPolicy',
747
+              // },
748
+              // {
749
+              //   path: '/system/editPolicy',
750
+              //   name: '购房政策编辑',
751
+              //   hideInMenu: true,
752
+              //   component: './system/editPolicy',
753
+              // },
754
+              // {
755
+              //   path: '/system/document/list',
756
+              //   name: '客户资料',
757
+              //   component: './system/document/list',
758
+              // },
759
+              // {
760
+              //   path: '/system/document/audit',
761
+              //   name: '客户资料审核',
762
+              //   hideInMenu: true,
763
+              //   component: './system/document/audit',
764
+              // },
765
+              // {
766
+              //   path: '/system/MiniappTheme',
767
+              //   name: '小程序主题',
768
+              //   component: './system/MiniappTheme',
769
+              // },
770
+              // {
771
+              //   path: '/system/MiniappTheme/Detail',
772
+              //   name: '小程序主题编辑',
773
+              //   component: './system/MiniappTheme/Detail',
774
+              //   hideInMenu: true,
775
+              // },
776
+            ],
777
+          },
773
           {
778
           {
774
             path: '/record',
779
             path: '/record',
775
             name: '数据记录',
780
             name: '数据记录',

+ 73
- 0
src/pages/mpSetting/components/MiniAppMedia.jsx 查看文件

1
+import React, { useEffect, useMemo, useState, useCallback } from 'react'
2
+import { Icon, Upload, Modal } from 'antd'
3
+import { fetch, apis } from '@/utils/request'
4
+
5
+const postMiniApp = fetch(apis.mp.miniapp)
6
+
7
+export default props => {
8
+  const [previewVisible, setPreviewVisible] = useState(false)
9
+  const [previewImage, setPreviewImage] = useState()
10
+  const [imageUrl, setImageUrl] = useState()
11
+  const [fileList, setFileList] = useState([])
12
+
13
+  const uploadButton = useMemo(() => {
14
+    return (
15
+      <div>
16
+        <Icon type="plus" />
17
+        <div>Upload</div>
18
+      </div>
19
+    )
20
+  }, [])
21
+  
22
+  const customRequest = useCallback(({file, onError, onSuccess}) => {
23
+    const data = new FormData()
24
+    data.append('file', file)
25
+
26
+    postMiniApp({ data }).then((res) => {
27
+      setImageUrl(res.url)
28
+      setFileList([{
29
+        uid: '-1',
30
+        name: 'image.png',
31
+        status: 'done',
32
+        url: res.url,
33
+      }])
34
+      props.onChange(res)
35
+      onSuccess(res.url, file)
36
+    }).catch(onError)
37
+
38
+    return {
39
+      abort() {
40
+        console.log('upload progress is aborted.');
41
+      },
42
+    }
43
+  }, [])
44
+
45
+  useEffect(() => {
46
+    if (props.value) {
47
+      setFileList([{
48
+        uid: '-1',
49
+        name: 'image.png',
50
+        status: 'done',
51
+        url: props.value,
52
+      }])
53
+    }
54
+  }, [props.value])
55
+
56
+  return (
57
+    <div>
58
+      <Upload
59
+        name="file"
60
+        accept=".png, .jpg, .jpeg, .gif"
61
+        listType="picture-card"
62
+        fileList={fileList}
63
+        customRequest={customRequest}
64
+        onPreview={() => setPreviewVisible(true)}
65
+      >
66
+        {fileList.length >= 1 ? null : uploadButton}
67
+      </Upload>
68
+      <Modal visible={previewVisible} footer={null} onCancel={() => setPreviewVisible(false)}>
69
+        <img alt="" style={{ width: '100%' }} src={previewImage} />
70
+      </Modal>
71
+    </div>
72
+  )
73
+}

+ 85
- 0
src/pages/mpSetting/index.jsx 查看文件

1
+import React, { useEffect, useState } from 'react'
2
+import { Form, Modal, Button, Input, InputNumber, Select, Radio, PageHeader } from 'antd'
3
+import { fetch, apis } from '@/utils/request'
4
+import MiniAppMedia from './components/MiniAppMedia'
5
+
6
+const formItemLayout = {
7
+  labelCol: {
8
+    xs: { span: 24 },
9
+    sm: { span: 6 },
10
+  },
11
+  wrapperCol: {
12
+    xs: { span: 24 },
13
+    sm: { span: 12 },
14
+  },
15
+}
16
+
17
+const tailFormItemLayout = {
18
+  wrapperCol: {
19
+    xs: {
20
+      span: 24,
21
+      offset: 0,
22
+    },
23
+    sm: {
24
+      span: 16,
25
+      offset: 6,
26
+    },
27
+  },
28
+}
29
+
30
+const mpDetail = fetch(apis.mp.detail)
31
+
32
+export default Form.create()(props => {
33
+  const [detailData, setDetailData] = useState({})
34
+
35
+  const handleMiniAppChange = vals => {
36
+    setDetailData({
37
+      ...detailData,
38
+      miniappMedia: vals.mediaId,
39
+      miniappUrl: vals.url
40
+    })
41
+  }
42
+
43
+  useEffect(() => {
44
+    mpDetail().then(res => {
45
+      setDetailData(res)
46
+      props.form.setFieldsValue(res)
47
+    })
48
+  }, [])
49
+
50
+  return (
51
+    <div>
52
+      <PageHeader title="公众号设置" backIcon={false} />
53
+      <Form {...formItemLayout}>
54
+        {/* <Form.Item label="名称">
55
+          {
56
+            props.form.getFieldDecorator('name')(<Input placeholder="请填写名称" readOnly />)
57
+          }
58
+        </Form.Item> */}
59
+        <Form.Item label="APPID">
60
+          {
61
+            props.form.getFieldDecorator('appid')(<Input placeholder="请填写 APPID" readOnly />)
62
+          }
63
+        </Form.Item>
64
+        <Form.Item label="SECRET">
65
+          {
66
+            props.form.getFieldDecorator('secret')(<Input placeholder="请填写 SECRET" readOnly />)
67
+          }
68
+        </Form.Item>
69
+        <Form.Item label="TOKEN">
70
+          {
71
+            props.form.getFieldDecorator('token')(<Input placeholder="请填写 TOKEN" readOnly />)
72
+          }
73
+        </Form.Item>
74
+        <Form.Item label="AES_KEY">
75
+          {
76
+            props.form.getFieldDecorator('aesKey')(<Input placeholder="请填写 AES_KEY" readOnly />)
77
+          }
78
+        </Form.Item>
79
+        <Form.Item label="小程序封面">
80
+          <MiniAppMedia onChange={handleMiniAppChange} value={detailData.miniapp_url} />
81
+        </Form.Item>
82
+      </Form>
83
+    </div>
84
+  )
85
+})

+ 12
- 0
src/services/apis.js 查看文件

19
   announcement: announcement(prefix),
19
   announcement: announcement(prefix),
20
   ticket: ticket(prefix),
20
   ticket: ticket(prefix),
21
   propNews: propNews(prefix),
21
   propNews: propNews(prefix),
22
+  mp: {
23
+    detail: {
24
+      url: `${prefix}/mp/taMpInfo`,
25
+      method: 'GET',
26
+      action: 'admin.taMpInfo.get',
27
+    },
28
+    miniapp: {
29
+      url: `${prefix}/mp/material/miniapp`,
30
+      method: 'POST',
31
+      action: 'admin.mp-material.miniapp',
32
+    }
33
+  },
22
   person: {
34
   person: {
23
     getPersonList: {
35
     getPersonList: {
24
       url: `${prefix}/person-list`,
36
       url: `${prefix}/person-list`,

+ 1
- 1
src/utils/request.js 查看文件

110
         }
110
         }
111
       }
111
       }
112
 
112
 
113
-      if (data && data.token) {
113
+      if (data && data.token && data.token.split('.').length === 3) {
114
         window.localStorage.setItem('test-foobar', mixStr(data.token))
114
         window.localStorage.setItem('test-foobar', mixStr(data.token))
115
       }
115
       }
116
 
116