许成详 6 years ago
parent
commit
74ee8fc1f4

+ 6
- 2
package-lock.json View File

@@ -7976,8 +7976,7 @@
7976 7976
     "js-base64": {
7977 7977
       "version": "2.4.8",
7978 7978
       "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz",
7979
-      "integrity": "sha512-hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q==",
7980
-      "dev": true
7979
+      "integrity": "sha512-hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q=="
7981 7980
     },
7982 7981
     "js-beautify": {
7983 7982
       "version": "1.7.5",
@@ -7991,6 +7990,11 @@
7991 7990
         "nopt": "3.0.6"
7992 7991
       }
7993 7992
     },
7993
+    "js-md5": {
7994
+      "version": "0.7.3",
7995
+      "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz",
7996
+      "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
7997
+    },
7994 7998
     "js-tokens": {
7995 7999
       "version": "3.0.2",
7996 8000
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",

+ 17
- 5
src/components/siderBar/index.vue View File

@@ -8,14 +8,26 @@
8 8
           @open="handleOpen"
9 9
           @close="handleClose">
10 10
           <template v-for="(item,index) in menu">
11
-            <el-submenu v-if="item.children.length" :index="String(index)" :key="index">
11
+            <el-submenu v-if="item.children" :index="String(index)" :key="index">
12 12
               <template slot="title">
13 13
                 <span>{{item.MenuName}}</span>
14 14
               </template>
15 15
               <el-menu-item-group>
16
-                <el-menu-item v-for="(subItem,subIndex) in item.children" :key="subIndex" :index="String(index)+'-'+String(subIndex)">
17
-                  <router-link :to="{name:subItem.Url,query:{}}" active-class="active">{{subItem.MenuName}}</router-link>
18
-                </el-menu-item>
16
+                <template v-for="(subItem,subIndex) in item.children">
17
+                  <el-submenu v-if="subItem.children" :index="`${index}-${subIndex}`" :key="subIndex">
18
+                    <template slot="title">
19
+                      <span>{{subItem.MenuName}}</span>
20
+                    </template>
21
+                    <el-menu-item-group>
22
+                      <el-menu-item v-for="(it,inx) in subItem.children" :index="`${index}-${subIndex}-${inx}`" :key="inx">
23
+                        <router-link :to="{name:it.Url,query:{}}" active-class="active">{{it.MenuName}}</router-link>
24
+                      </el-menu-item>
25
+                    </el-menu-item-group>
26
+                  </el-submenu>
27
+                  <el-menu-item v-else :index="`${index}-${subIndex}`" :key="subIndex">
28
+                    <router-link :to="{name:subItem.Url,query:{}}" active-class="active">{{subItem.MenuName}}</router-link>
29
+                  </el-menu-item>
30
+                </template>
19 31
               </el-menu-item-group>
20 32
             </el-submenu>
21 33
             <el-menu-item v-else :index="String(index)" :key="index">
@@ -39,7 +51,7 @@ export default {
39 51
   },
40 52
   mounted () {
41 53
     this.$nextTick(function () {
42
-      // console.log(this.menu)
54
+      console.log(this.menu)
43 55
     })
44 56
   },
45 57
   methods: {

+ 4
- 195
src/pages/system/index.vue View File

@@ -31,113 +31,17 @@
31 31
 import breadCrumb from '@/components/breadCrumb/index'
32 32
 import siderBar from '@/components/siderBar/index'
33 33
 import routerData from '@/router/router'
34
-import { mapState, mapMutations, createNamespacedHelpers } from 'vuex'
35
-const { mapActions: mapSystemActions } = createNamespacedHelpers('system')
34
+import { mapState, mapMutations, mapActions } from 'vuex'
36 35
 export default {
37 36
   name: '',
38 37
   data () {
39 38
     return {
40
-      pageMenu: [
41
-        // {
42
-        //   title: '系统设置',
43
-        //   pathName: '',
44
-        //   children: [{
45
-        //     title: '用户管理',
46
-        //     pathName: 'userManager',
47
-        //     children: [],
48
-        //   }, {
49
-        //     title: '角色管理',
50
-        //     pathName: 'roleManager',
51
-        //     children: [],
52
-        //   }],
53
-        // }, {
54
-        //   title: '案场管理',
55
-        //   pathName: '',
56
-        //   children: [{
57
-        //     title: '案场信息',
58
-        //     pathName: 'caseInfo',
59
-        //     children: [],
60
-        //   }, {
61
-        //     title: '钥匙管理',
62
-        //     pathName: 'keyManager',
63
-        //     children: [],
64
-        //   }, {
65
-        //     title: '案场区域管理',
66
-        //     pathName: 'caseAreaManager',
67
-        //     children: [],
68
-        //   }, {
69
-        //     title: '案场桌位管理',
70
-        //     pathName: 'caseTableManager',
71
-        //     children: [],
72
-        //   }],
73
-        // }, {
74
-        //   title: '商品管理',
75
-        //   pathName: '',
76
-        //   children: [{
77
-        //     title: '商品类型管理',
78
-        //     pathName: 'goodsTypeManager',
79
-        //     children: [],
80
-        //   }, {
81
-        //     title: '商品规格管理',
82
-        //     pathName: 'goodsSpecManager',
83
-        //     children: [],
84
-        //   }],
85
-        // }, {
86
-        //   title: 'CMS管理',
87
-        //   pathName: '',
88
-        //   children: [{
89
-        //     title: '轮播图管理',
90
-        //     pathName: 'bannerManager',
91
-        //     children: [],
92
-        //   }, {
93
-        //     title: '售楼处项目专题',
94
-        //     pathName: 'majorProjects',
95
-        //     children: [],
96
-        //   }, {
97
-        //     title: '首页消息',
98
-        //     pathName: 'indexMsg',
99
-        //     children: [],
100
-        //   }, {
101
-        //     title: '资讯管理',
102
-        //     pathName: 'newsManager',
103
-        //     children: [],
104
-        //   }],
105
-        // }, {
106
-        //   title: '渠道管理',
107
-        //   pathName: '',
108
-        //   children: [{
109
-        //     title: '渠道列表',
110
-        //     pathName: 'channelList',
111
-        //     children: [],
112
-        //   }],
113
-        // }, {
114
-        //   title: '课程管理',
115
-        //   pathName: '',
116
-        //   children: [{
117
-        //     title: '全龄生活5A',
118
-        //     pathName: 'fiveA',
119
-        //     children: [],
120
-        //   }, {
121
-        //     title: '课程标签',
122
-        //     pathName: 'courseTag',
123
-        //     children: [],
124
-        //   }],
125
-        // }, {
126
-        //   title: '数据统计',
127
-        //   pathName: '',
128
-        //   children: [{
129
-        //     title: '前台用户列表',
130
-        //     pathName: 'frontEndUserList',
131
-        //     children: [],
132
-        //   }],
133
-        // }
134
-      ]
135 39
     }
136 40
   },
137 41
   computed: {
138 42
     ...mapState({
139 43
       breadCrumb: x => x.app.breadcrumb,
140
-      system: x => x.system,
44
+      pageMenu: x => x.app.menus,
141 45
     })
142 46
   },
143 47
   components: {
@@ -145,111 +49,16 @@ export default {
145 49
     siderBar,
146 50
   },
147 51
   created () {
148
-    this.getMenuData()
149
-    this.updateBread({ routerData, Url: this.$route.name })
150 52
     this.updateSystemInfo()
151
-    console.log(this.system)
53
+    this.updateBread({ routerData, Url: this.$route.name })
152 54
   },
153 55
   methods: {
154 56
     ...mapMutations([
155 57
       'updateBread'
156 58
     ]),
157
-    ...mapSystemActions([
59
+    ...mapActions([
158 60
       'updateSystemInfo'
159 61
     ]),
160
-    getMenuData () { // 获取用户角色权限内菜单
161
-      let menuData = [{
162
-        MenuId: '1',
163
-        MenuName: '系统',
164
-        Icon: '',
165
-        FatherID: '-1',
166
-        Url: 'system',
167
-        IsShow: 1
168
-      }, {
169
-        MenuId: '2',
170
-        MenuName: '系统设置',
171
-        Icon: '',
172
-        FatherID: '1',
173
-        Url: 'systemSet',
174
-        IsShow: 1
175
-      }, {
176
-        MenuId: '3',
177
-        MenuName: '用户管理',
178
-        Icon: '',
179
-        FatherID: '2',
180
-        Url: 'userManager',
181
-        IsShow: 1
182
-      }, {
183
-        MenuId: '4',
184
-        MenuName: '角色管理',
185
-        Icon: '',
186
-        FatherID: '2',
187
-        Url: 'roleManager',
188
-        IsShow: 1
189
-      }, {
190
-        MenuId: '5',
191
-        MenuName: '新增用户',
192
-        Icon: '',
193
-        FatherID: '3',
194
-        Url: 'addUser',
195
-        IsShow: 0
196
-      }, {
197
-        MenuId: '6',
198
-        MenuName: '编辑用户',
199
-        Icon: '',
200
-        FatherID: '3',
201
-        Url: 'editUser',
202
-        IsShow: 0
203
-      }, {
204
-        MenuId: '7',
205
-        MenuName: '案场管理',
206
-        Icon: '',
207
-        FatherID: '1',
208
-        Url: 'caseManager',
209
-        IsShow: 1
210
-      }, {
211
-        MenuId: '8',
212
-        MenuName: '案场信息',
213
-        Icon: '',
214
-        FatherID: '7',
215
-        Url: 'indexCase',
216
-        IsShow: 1
217
-      }, {
218
-        MenuId: '9',
219
-        MenuName: '新增案场',
220
-        Icon: '',
221
-        FatherID: '8',
222
-        Url: 'addIndexCase',
223
-        IsShow: 1
224
-      }, {
225
-        MenuId: '10',
226
-        MenuName: '编辑案场',
227
-        Icon: '',
228
-        FatherID: '8',
229
-        Url: 'editIndexCase',
230
-        IsShow: 1
231
-      }, {
232
-        MenuId: '11',
233
-        MenuName: '钥匙管理',
234
-        Icon: '',
235
-        FatherID: '7',
236
-        Url: 'keyManager',
237
-        IsShow: 1
238
-      }]
239
-      this.$store.state.app.menusRaw = menuData // 写入权限菜单数据
240
-      this.creatSlideMenu([...menuData])
241
-    },
242
-    creatSlideMenu (arr) { // 创建左侧菜单
243
-      for (var n = 0; n < arr.length; n++) {
244
-        arr[n].children = []
245
-        for (var a = 0; a < arr.length; a++) {
246
-          if (arr[n].MenuId === arr[a].FatherID) {
247
-            arr[n].children.push(arr[a])
248
-          }
249
-        }
250
-      }
251
-      this.pageMenu = arr[0].children
252
-    }
253 62
   }
254 63
 }
255 64
 </script>

+ 24
- 24
src/pages/system/page.js View File

@@ -10,9 +10,9 @@ import addRole from './systemSet/roleManager/add' // 添加角色
10 10
 import editRole from './systemSet/roleManager/edit' // 编辑角色
11 11
 
12 12
 import caseManager from './caseManager/index' // 案场管理
13
-import indexCase from './caseManager/caseInfo/index' // 案场信息
14
-import addIndexCase from './caseManager/caseInfo/addCase/index' // 新增案场
15
-import editIndexCase from './caseManager/caseInfo/editCase/index' // 新增案场
13
+import caseInfo from './caseManager/caseInfo/index' // 案场信息
14
+import addCase from './caseManager/caseInfo/addCase/index' // 新增案场
15
+import editCase from './caseManager/caseInfo/editCase/index' // 新增案场
16 16
 import keyManager from './caseManager/keyManager/index' // 钥匙管理
17 17
 import caseAreaManager from './caseManager/caseAreaManager/index' // 案场区域管理
18 18
 import addCaseArea from './caseManager/caseAreaManager/add' // 新增案场区域
@@ -33,9 +33,9 @@ import cmsManager from './cmsManager/index' // cms管理
33 33
 import bannerManager from './cmsManager/bannerManager/index' // 轮播图管理
34 34
 import addBanner from './cmsManager/bannerManager/add' // 添加轮播图
35 35
 import editBanner from './cmsManager/bannerManager/edit' // 编辑轮播图
36
-import majorProjects from './cmsManager/majorProjects/index' // 售楼处项目专题
37
-import addMajorProjects from './cmsManager/majorProjects/add' // 新增售楼处项目专题
38
-import editMajorProjects from './cmsManager/majorProjects/edit' // 编辑售楼处项目专题
36
+import indexCase from './cmsManager/majorProjects/index' // 售楼处项目专题
37
+import addIndexCase from './cmsManager/majorProjects/add' // 新增售楼处项目专题
38
+import editIndexCase from './cmsManager/majorProjects/edit' // 编辑售楼处项目专题
39 39
 import indexMsg from './cmsManager/indexMsg/index' // 首页消息
40 40
 import addIndexMsg from './cmsManager/indexMsg/add' // 新增首页消息
41 41
 import editIndexMsg from './cmsManager/indexMsg/edit' // 新增首页消息
@@ -105,18 +105,18 @@ export default {
105 105
         name: 'caseManager',
106 106
         component: caseManager,
107 107
         children: [{ // 案场信息
108
-          path: 'indexCase',
109
-          name: 'indexCase',
110
-          component: indexCase,
108
+          path: 'caseInfo',
109
+          name: 'caseInfo',
110
+          component: caseInfo,
111 111
           children: [{ // 新增案场
112
-            path: 'addIndexCase',
113
-            name: 'addIndexCase',
114
-            component: addIndexCase,
112
+            path: 'addCase',
113
+            name: 'addCase',
114
+            component: addCase,
115 115
             children: []
116 116
           }, { // 编辑案场
117
-            path: 'editIndexCase',
118
-            name: 'editIndexCase',
119
-            component: editIndexCase,
117
+            path: 'editCase',
118
+            name: 'editCase',
119
+            component: editCase,
120 120
             children: []
121 121
           }]
122 122
         }, { // 钥匙管理
@@ -210,18 +210,18 @@ export default {
210 210
             children: []
211 211
           }]
212 212
         }, { // 售楼处项目专题
213
-          path: 'majorProjects',
214
-          name: 'majorProjects',
215
-          component: majorProjects,
213
+          path: 'indexCase',
214
+          name: 'indexCase',
215
+          component: indexCase,
216 216
           children: [{ // 新增售楼处项目专题
217
-            path: 'addMajorProjects',
218
-            name: 'addMajorProjects',
219
-            component: addMajorProjects,
217
+            path: 'addIndexCase',
218
+            name: 'addIndexCase',
219
+            component: addIndexCase,
220 220
             children: []
221 221
           }, { // 编辑售楼处项目专题
222
-            path: 'editMajorProjects',
223
-            name: 'editMajorProjects',
224
-            component: editMajorProjects,
222
+            path: 'editIndexCase',
223
+            name: 'editIndexCase',
224
+            component: editIndexCase,
225 225
             children: []
226 226
           }]
227 227
         }, { // 首页消息

+ 45
- 1
src/store/app.js View File

@@ -16,17 +16,51 @@ function flatten (parent, data = [], menusRaw = []) {
16 16
   }, [])
17 17
 }
18 18
 
19
+function packChildren (data) {
20
+  let cp = data.slice()
21
+  const res = []
22
+
23
+  data.forEach((it, inx) => {
24
+    let found = false
25
+    for (let i = 0; i < cp.length; i += 1) {
26
+      if (cp[i].MenuId === it.FatherId) {
27
+        found = true
28
+        cp[i].children = [...(cp[i].children || []), cp[inx]]
29
+        break
30
+      }
31
+    }
32
+
33
+    if (!found) {
34
+      res.push(cp[inx])
35
+    }
36
+  })
37
+
38
+  return res
39
+}
40
+
19 41
 export default {
20 42
   state: {
21 43
     menusRaw: [],
22 44
     menus: [],
23 45
     breadcrumb: [],
46
+    cases: [],
47
+    roles: [],
48
+    user: {}
24 49
   },
25 50
   mutations: {
51
+    init (state, data) { // 这里的state对应着上面这个state
52
+      state.cases = data.cases
53
+      state.menusRaw = data.menus
54
+      state.roles = data.roles
55
+      state.user = data.user
56
+      state.menus = packChildren(data.menus)
57
+    },
58
+
26 59
     updateBread (state, { routerData, Url }) {
27 60
       // 扁平 routerData
28 61
       // 同时构造出 含有 title 的 parent 数据
29
-      const routeList = flatten([], routerData, state.menusRaw)
62
+      const routeList = flatten([], routerData[1].children, state.menusRaw)
63
+      console.log(state, routerData[1].children, routeList)
30 64
 
31 65
       // 过滤出与 name 相同的 route 节点
32 66
       const currentRoute = routeList.filter(x => x.Url === Url)[0]
@@ -34,5 +68,15 @@ export default {
34 68
       // 获取 面包屑
35 69
       if (currentRoute) state.breadcrumb = currentRoute.parent.slice(1).concat(currentRoute)
36 70
     }
71
+  },
72
+  actions: {
73
+    updateSystemInfo (context) { // 这里的context和我们使用的$store拥有相同的对象和方法
74
+      this.$ajax(this.$api.system.init.url, {
75
+        method: this.$api.system.init.method
76
+      })
77
+        .then(res => {
78
+          context.commit('init', res)
79
+        })
80
+    }
37 81
   }
38 82
 }

+ 1
- 2
src/store/index.js View File

@@ -12,8 +12,7 @@ const store = new Vuex.Store({
12 12
 Vuex.Store.prototype.$api = api
13 13
 Vuex.Store.prototype.$ajax = Ajax
14 14
 export const modules = {
15
-  app: () => require('./app').default,
16
-  system: () => require('./system').default
15
+  app: () => require('./app').default
17 16
 }
18 17
 
19 18
 Object.keys(modules).forEach((modKey) => {

+ 51
- 9
src/store/system/index.js View File

@@ -1,3 +1,51 @@
1
+
2
+const packChildren = (data) => {
3
+  // for (var x = 0; x < arr.length; x++) {
4
+  //   if (arr[x].FatherId === '-1') {
5
+  //     arr[x].FatherId = 'root'
6
+  //   }
7
+  // }
8
+  // arr.unshift({
9
+  //   MenuId: 'root',
10
+  //   MenuName: '根目录',
11
+  //   Icon: '',
12
+  //   FatherID: '-1',
13
+  //   Url: 'system',
14
+  //   IsShow: 1
15
+  // })
16
+  // console.log(JSON.stringify(arr))
17
+  // for (var n = 0; n < arr.length; n++) {
18
+  //   arr[n].children = []
19
+  //   for (var a = 0; a < arr.length; a++) {
20
+  //     if (arr[n].MenuId === arr[a].FatherId) {
21
+  //       arr[n].children.push(arr[a])
22
+  //     }
23
+  //   }
24
+  // }
25
+  // console.log(JSON.stringify(arr))
26
+  // return arr[0].children
27
+
28
+  let cp = data.slice()
29
+  const res = []
30
+
31
+  data.forEach((it, inx) => {
32
+    let found = false
33
+    for (let i = 0; i < cp.length; i += 1) {
34
+      if (cp[i].MenuId === it.FatherId) {
35
+        found = true
36
+        cp[i].children = [...(cp[i].children || []), cp[inx]]
37
+        break
38
+      }
39
+    }
40
+
41
+    if (!found) {
42
+      res.push(cp[inx])
43
+    }
44
+  })
45
+
46
+  return res
47
+}
48
+
1 49
 export default {
2 50
   namespaced: true,
3 51
   state: {
@@ -9,9 +57,10 @@ export default {
9 57
   mutations: {
10 58
     init (state, data) { // 这里的state对应着上面这个state
11 59
       state.cases = data.cases
12
-      state.menus = data.menus
60
+      state.menusRaw = data.menus
13 61
       state.roles = data.roles
14 62
       state.user = data.user
63
+      state.menus = packChildren(data.menus)
15 64
     }
16 65
   },
17 66
   actions: {
@@ -20,14 +69,7 @@ export default {
20 69
         method: this.$api.system.init.method
21 70
       })
22 71
         .then(res => {
23
-          console.log(res)
24
-          if (res.code === 400) {
25
-            this.$router.push({name: 'login'})
26
-          } else {
27
-            context.commit('init', res) // 你还可以在这里触发其他的mutations方法
28
-          }
29
-        }).catch(msg => {
30
-
72
+          context.commit('init', res)
31 73
         })
32 74
     }
33 75
   }

+ 38
- 14
src/util/ajax.js View File

@@ -1,6 +1,7 @@
1 1
 import axios from 'axios'
2 2
 import { Message } from 'element-ui'
3 3
 import qs from 'qs'
4
+import router from '../router'
4 5
 
5 6
 const Axios = axios.create({
6 7
   timeout: 60000,
@@ -45,18 +46,41 @@ Axios.interceptors.request.use((config) => {
45 46
   console.log(error)
46 47
 })
47 48
 
48
-Axios.interceptors.response.use((res) => {
49
-  if (res.data.code === 200) {
50
-    return res.data.result
51
-  } else {
52
-    Message({
53
-      message: res.data.message,
54
-      type: 'error'
55
-    })
56
-    return res.data
57
-  }
58
-}, (error) => {
59
-  console.log(error)
60
-})
49
+// Axios.interceptors.response.use((res) => {
50
+//   // return new Promise((resolve, reject) => {
51
+//   //   if (res.data.code === 200) {
52
+//   //     resolve(res.data.result)
53
+//   //   } else if (res.data.code === 401) {
54
+//   //     router.push({ name: 'login' })
55
+//   //     reject(res.data)
56
+//   //   } else {
57
+//   //     Message({
58
+//   //       message: res.data.message,
59
+//   //       type: 'error'
60
+//   //     })
61
+//   //     reject(res.data)
62
+//   //   }
63
+//   // })
64
+// }, (error) => {
65
+//   console.log(error)
66
+// })
67
+
68
+const ajax = (...args) => {
69
+  return new Promise((resolve, reject) => {
70
+    Axios(...args).then(({ data }) => {
71
+      const { code, message, result } = data
72
+      if (code === 200) {
73
+        resolve(result)
74
+      } else if (code === 401) {
75
+        router.push({ name: 'login' })
76
+      } else {
77
+        Message({
78
+          message: message,
79
+          type: 'error'
80
+        })
81
+      }
82
+    }).catch(reject)
83
+  })
84
+}
61 85
 
62
-export default Axios
86
+export default ajax