feat(B批收尾): B1门禁可信/B7-1菜单环防护/B2空值守卫/B7-2分页/B7-3字段清洗/B3空态/B4索引key/B5-3 comment三集合选A新建schema(漂移清零)/B6清理+admin配置+changelog
This commit is contained in:
@@ -1,186 +1,184 @@
|
||||
<template>
|
||||
<view>
|
||||
<uni-nav-menu :active="value" activeKey="value" :activeTextColor="activeTextColor" :uniqueOpened="uniqueOpened"
|
||||
@select="onSelect">
|
||||
<uni-menu-sidebar :data="userMenu"></uni-menu-sidebar>
|
||||
<uni-menu-sidebar :data="staticMenu"></uni-menu-sidebar>
|
||||
</uni-nav-menu>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
mapActions
|
||||
} from 'vuex'
|
||||
import {
|
||||
buildMenus
|
||||
} from './util.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
menus: [],
|
||||
userMenu: [],
|
||||
famliy: [],
|
||||
|
||||
};
|
||||
},
|
||||
mixins: [uniCloud.mixinDatacom],
|
||||
props: {
|
||||
// 当前激活菜单的 url
|
||||
value: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
// 当前激活菜单的文字颜色
|
||||
activeTextColor: {
|
||||
type: String,
|
||||
default: '#42B983'
|
||||
},
|
||||
// 是否只保持一个子菜单的展开
|
||||
uniqueOpened: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
staticMenu: {
|
||||
type: Array,
|
||||
default () {
|
||||
return []
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
localdata: {
|
||||
handler(newval) {
|
||||
if (this.hasLocalData(newval)) {
|
||||
this.userMenu = newval
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
// TODO 暂时无需监听,需要看后面会出现什么问题
|
||||
// #ifdef H5
|
||||
menus: {
|
||||
immediate: true,
|
||||
handler(newVal,oldVal) {
|
||||
const item = this.menus.find(m => m.value === this.$route.path)
|
||||
// 设置面包屑
|
||||
if(item){
|
||||
this.getMenuAncestor(item.menu_id, newVal)
|
||||
item && this.setRoutes && this.setRoutes(this.famliy)
|
||||
}
|
||||
}
|
||||
},
|
||||
// #endif
|
||||
$route: {
|
||||
immediate: false,
|
||||
handler(val, old) {
|
||||
if (val.fullPath !== old.fullPath) {
|
||||
this.famliy = []
|
||||
const menu = this.menus.find(m => m.value === val.path)
|
||||
const menu_id = menu && menu.menu_id
|
||||
this.getMenuAncestor(menu_id, this.menus)
|
||||
this.setRoutes && this.setRoutes(this.famliy)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
if (this.hasLocalData(this.localdata)) return
|
||||
// #ifndef H5
|
||||
this.load()
|
||||
// #endif
|
||||
},
|
||||
// computed:{
|
||||
// userMenu() {
|
||||
// return this.getUserMenu(this.menus)
|
||||
// }
|
||||
// },
|
||||
methods: {
|
||||
...mapActions({
|
||||
setRoutes: 'app/setRoutes'
|
||||
}),
|
||||
getUserMenu(menuList) {
|
||||
const {
|
||||
permission,
|
||||
role
|
||||
} = uniCloud.getCurrentUserInfo()
|
||||
// 标记叶子节点
|
||||
menuList.map(item => {
|
||||
if (!menuList.some(subMenuItem => subMenuItem.parent_id === item.menu_id)) {
|
||||
item.isLeafNode = true
|
||||
}
|
||||
})
|
||||
|
||||
// 删除无权限访问的菜单
|
||||
if (!role.includes('admin')) {
|
||||
menuList = menuList.filter(item => {
|
||||
if (item.isLeafNode) {
|
||||
if (item.permission && item.permission.length) {
|
||||
return item.permission.some(item => permission.indexOf(item) > -1)
|
||||
}
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
return buildMenus(menuList)
|
||||
},
|
||||
onSelect(menu) {
|
||||
|
||||
this.famliy = []
|
||||
this.getMenuAncestor(menu.menu_id, this.menus)
|
||||
this.emit(menu)
|
||||
},
|
||||
emit(menu) {
|
||||
this.$emit('select', menu, this.famliy)
|
||||
this.$emit('input', menu.value)
|
||||
},
|
||||
hasLocalData(value) {
|
||||
return Array.isArray(value) && value.length > 0
|
||||
},
|
||||
load() {
|
||||
if (this.mixinDatacomLoading == true) {
|
||||
return
|
||||
}
|
||||
this.mixinDatacomLoading = true
|
||||
this.mixinDatacomGet().then((res) => {
|
||||
this.mixinDatacomLoading = false
|
||||
const {
|
||||
data,
|
||||
count
|
||||
} = res.result
|
||||
this.menus = data
|
||||
this.userMenu = this.getUserMenu(this.menus)
|
||||
}).catch((err) => {
|
||||
this.mixinDatacomLoading = false
|
||||
this.mixinDatacomErrorMessage = err
|
||||
})
|
||||
},
|
||||
getMenuAncestor(menuId, menus) {
|
||||
menus.forEach(item => {
|
||||
if (item.menu_id === menuId) {
|
||||
const route = {
|
||||
name: item.text
|
||||
}
|
||||
const path = item.value
|
||||
if (path) {
|
||||
route.to = {
|
||||
path
|
||||
}
|
||||
}
|
||||
this.famliy.unshift(route)
|
||||
const parent_id = item.parent_id
|
||||
if (parent_id) {
|
||||
this.getMenuAncestor(parent_id, menus)
|
||||
}
|
||||
}
|
||||
})
|
||||
// return famliy
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
<template>
|
||||
<view>
|
||||
<uni-nav-menu :active="value" activeKey="value" :activeTextColor="activeTextColor" :uniqueOpened="uniqueOpened"
|
||||
@select="onSelect">
|
||||
<uni-menu-sidebar :data="userMenu"></uni-menu-sidebar>
|
||||
<uni-menu-sidebar :data="staticMenu"></uni-menu-sidebar>
|
||||
</uni-nav-menu>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
mapActions
|
||||
} from 'vuex'
|
||||
import {
|
||||
buildMenus
|
||||
} from './util.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
menus: [],
|
||||
userMenu: [],
|
||||
famliy: [],
|
||||
|
||||
};
|
||||
},
|
||||
mixins: [uniCloud.mixinDatacom],
|
||||
props: {
|
||||
// 当前激活菜单的 url
|
||||
value: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
// 当前激活菜单的文字颜色
|
||||
activeTextColor: {
|
||||
type: String,
|
||||
default: '#42B983'
|
||||
},
|
||||
// 是否只保持一个子菜单的展开
|
||||
uniqueOpened: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
staticMenu: {
|
||||
type: Array,
|
||||
default () {
|
||||
return []
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
localdata: {
|
||||
handler(newval) {
|
||||
if (this.hasLocalData(newval)) {
|
||||
this.userMenu = newval
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
// TODO 暂时无需监听,需要看后面会出现什么问题
|
||||
// #ifdef H5
|
||||
menus: {
|
||||
immediate: true,
|
||||
handler(newVal,oldVal) {
|
||||
const item = this.menus.find(m => m.value === this.$route.path)
|
||||
// 设置面包屑
|
||||
if(item){
|
||||
this.getMenuAncestor(item.menu_id, newVal)
|
||||
item && this.setRoutes && this.setRoutes(this.famliy)
|
||||
}
|
||||
}
|
||||
},
|
||||
// #endif
|
||||
$route: {
|
||||
immediate: false,
|
||||
handler(val, old) {
|
||||
if (val.fullPath !== old.fullPath) {
|
||||
this.famliy = []
|
||||
const menu = this.menus.find(m => m.value === val.path)
|
||||
const menu_id = menu && menu.menu_id
|
||||
this.getMenuAncestor(menu_id, this.menus)
|
||||
this.setRoutes && this.setRoutes(this.famliy)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
if (this.hasLocalData(this.localdata)) return
|
||||
this.load()
|
||||
},
|
||||
// computed:{
|
||||
// userMenu() {
|
||||
// return this.getUserMenu(this.menus)
|
||||
// }
|
||||
// },
|
||||
methods: {
|
||||
...mapActions({
|
||||
setRoutes: 'app/setRoutes'
|
||||
}),
|
||||
getUserMenu(menuList) {
|
||||
const userInfo = uniCloud.getCurrentUserInfo() || {}
|
||||
const permission = Array.isArray(userInfo.permission) ? userInfo.permission : []
|
||||
const role = Array.isArray(userInfo.role) ? userInfo.role : []
|
||||
menuList = Array.isArray(menuList) ? menuList : []
|
||||
// 标记叶子节点
|
||||
menuList.map(item => {
|
||||
if (!menuList.some(subMenuItem => subMenuItem.parent_id === item.menu_id)) {
|
||||
item.isLeafNode = true
|
||||
}
|
||||
})
|
||||
|
||||
// 删除无权限访问的菜单
|
||||
if (!role.includes('admin')) {
|
||||
menuList = menuList.filter(item => {
|
||||
if (item.isLeafNode) {
|
||||
if (Array.isArray(item.permission) && item.permission.length) {
|
||||
return item.permission.some(item => permission.indexOf(item) > -1)
|
||||
}
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
return buildMenus(menuList)
|
||||
},
|
||||
onSelect(menu) {
|
||||
|
||||
this.famliy = []
|
||||
this.getMenuAncestor(menu.menu_id, this.menus)
|
||||
this.emit(menu)
|
||||
},
|
||||
emit(menu) {
|
||||
this.$emit('select', menu, this.famliy)
|
||||
this.$emit('input', menu.value)
|
||||
},
|
||||
hasLocalData(value) {
|
||||
return Array.isArray(value) && value.length > 0
|
||||
},
|
||||
load() {
|
||||
if (this.mixinDatacomLoading == true) {
|
||||
return
|
||||
}
|
||||
this.mixinDatacomLoading = true
|
||||
this.mixinDatacomGet().then((res) => {
|
||||
this.mixinDatacomLoading = false
|
||||
const {
|
||||
data,
|
||||
count
|
||||
} = res.result
|
||||
this.menus = data
|
||||
this.userMenu = this.getUserMenu(this.menus)
|
||||
}).catch((err) => {
|
||||
this.mixinDatacomLoading = false
|
||||
this.mixinDatacomErrorMessage = err && err.message ? err.message : String(err || '请求服务失败')
|
||||
})
|
||||
},
|
||||
getMenuAncestor(menuId, menus) {
|
||||
menus.forEach(item => {
|
||||
if (item.menu_id === menuId) {
|
||||
const route = {
|
||||
name: item.text
|
||||
}
|
||||
const path = item.value
|
||||
if (path) {
|
||||
route.to = {
|
||||
path
|
||||
}
|
||||
}
|
||||
this.famliy.unshift(route)
|
||||
const parent_id = item.parent_id
|
||||
if (parent_id) {
|
||||
this.getMenuAncestor(parent_id, menus)
|
||||
}
|
||||
}
|
||||
})
|
||||
// return famliy
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user