Unverified Commit 274784cf by Sendya

fix(package): vue-cropper, move menu jsx

parent 185d31ac
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
"viser-vue": "^2.3.3", "viser-vue": "^2.3.3",
"vue": "^2.5.22", "vue": "^2.5.22",
"vue-clipboard2": "^0.2.1", "vue-clipboard2": "^0.2.1",
"vue-cropper": "^0.4.4", "vue-cropper": "0.4.4",
"vue-ls": "^3.2.0", "vue-ls": "^3.2.0",
"vue-router": "^3.0.1", "vue-router": "^3.0.1",
"vue-svg-component-runtime": "^1.0.1", "vue-svg-component-runtime": "^1.0.1",
......
import Menu from 'ant-design-vue/es/menu' import SMenu from './menu'
import Icon from 'ant-design-vue/es/icon' export default SMenu
const { Item, SubMenu } = Menu
export default {
name: 'SMenu',
props: {
menu: {
type: Array,
required: true
},
theme: {
type: String,
required: false,
default: 'dark'
},
mode: {
type: String,
required: false,
default: 'inline'
},
collapsed: {
type: Boolean,
required: false,
default: false
}
},
data () {
return {
openKeys: [],
selectedKeys: [],
cachedOpenKeys: []
}
},
computed: {
rootSubmenuKeys: vm => {
const keys = []
vm.menu.forEach(item => keys.push(item.path))
return keys
}
},
created () {
this.updateMenu()
},
watch: {
collapsed (val) {
if (val) {
this.cachedOpenKeys = this.openKeys.concat()
this.openKeys = []
} else {
this.openKeys = this.cachedOpenKeys
}
},
$route: function () {
this.updateMenu()
}
},
methods: {
// select menu item
onOpenChange (openKeys) {
// 在水平模式下时执行,并且不再执行后续
if (this.mode === 'horizontal') {
this.openKeys = openKeys
return
}
// 非水平模式时
const latestOpenKey = openKeys.find(key => !this.openKeys.includes(key))
if (!this.rootSubmenuKeys.includes(latestOpenKey)) {
this.openKeys = openKeys
} else {
this.openKeys = latestOpenKey ? [latestOpenKey] : []
}
},
updateMenu () {
const routes = this.$route.matched.concat()
if (routes.length >= 4 && this.$route.meta.hidden) {
routes.pop()
this.selectedKeys = [routes[2].path]
} else {
this.selectedKeys = [routes.pop().path]
}
const openKeys = []
if (this.mode === 'inline') {
routes.forEach(item => {
openKeys.push(item.path)
})
}
this.collapsed ? (this.cachedOpenKeys = openKeys) : (this.openKeys = openKeys)
},
// render
renderItem (menu) {
if (!menu.hidden) {
return menu.children && !menu.hideChildrenInMenu ? this.renderSubMenu(menu) : this.renderMenuItem(menu)
}
return null
},
renderMenuItem (menu) {
const target = menu.meta.target || null
const props = {
to: { name: menu.name },
target: target
}
return (
<Item {...{ key: menu.path }}>
<router-link {...{ props }}>
{this.renderIcon(menu.meta.icon)}
<span>{menu.meta.title}</span>
</router-link>
</Item>
)
},
renderSubMenu (menu) {
const itemArr = []
if (!menu.hideChildrenInMenu) {
menu.children.forEach(item => itemArr.push(this.renderItem(item)))
}
return (
<SubMenu {...{ key: menu.path }}>
<span slot="title">
{this.renderIcon(menu.meta.icon)}
<span>{menu.meta.title}</span>
</span>
{itemArr}
</SubMenu>
)
},
renderIcon (icon) {
if (icon === 'none' || icon === undefined) {
return null
}
const props = {}
typeof (icon) === 'object' ? props.component = icon : props.type = icon
return (
<Icon {... { props } }/>
)
}
},
render () {
const { mode, theme, menu } = this
const props = {
mode: mode,
theme: theme,
openKeys: this.openKeys
}
const on = {
select: obj => {
this.selectedKeys = obj.selectedKeys
this.$emit('select', obj)
},
openChange: this.onOpenChange
}
const menuTree = menu.map(item => {
if (item.hidden) {
return null
}
return this.renderItem(item)
})
// {...{ props, on: on }}
return (
<Menu vModel={this.selectedKeys} {...{ props, on: on }}>
{menuTree}
</Menu>
)
}
}
import Menu from 'ant-design-vue/es/menu'
import Icon from 'ant-design-vue/es/icon'
const { Item, SubMenu } = Menu
export default {
name: 'SMenu',
props: {
menu: {
type: Array,
required: true
},
theme: {
type: String,
required: false,
default: 'dark'
},
mode: {
type: String,
required: false,
default: 'inline'
},
collapsed: {
type: Boolean,
required: false,
default: false
}
},
data () {
return {
openKeys: [],
selectedKeys: [],
cachedOpenKeys: []
}
},
computed: {
rootSubmenuKeys: vm => {
const keys = []
vm.menu.forEach(item => keys.push(item.path))
return keys
}
},
created () {
this.updateMenu()
},
watch: {
collapsed (val) {
if (val) {
this.cachedOpenKeys = this.openKeys.concat()
this.openKeys = []
} else {
this.openKeys = this.cachedOpenKeys
}
},
$route: function () {
this.updateMenu()
}
},
methods: {
// select menu item
onOpenChange (openKeys) {
// 在水平模式下时执行,并且不再执行后续
if (this.mode === 'horizontal') {
this.openKeys = openKeys
return
}
// 非水平模式时
const latestOpenKey = openKeys.find(key => !this.openKeys.includes(key))
if (!this.rootSubmenuKeys.includes(latestOpenKey)) {
this.openKeys = openKeys
} else {
this.openKeys = latestOpenKey ? [latestOpenKey] : []
}
},
updateMenu () {
const routes = this.$route.matched.concat()
if (routes.length >= 4 && this.$route.meta.hidden) {
routes.pop()
this.selectedKeys = [routes[2].path]
} else {
this.selectedKeys = [routes.pop().path]
}
const openKeys = []
if (this.mode === 'inline') {
routes.forEach(item => {
openKeys.push(item.path)
})
}
this.collapsed ? (this.cachedOpenKeys = openKeys) : (this.openKeys = openKeys)
},
// render
renderItem (menu) {
if (!menu.hidden) {
return menu.children && !menu.hideChildrenInMenu ? this.renderSubMenu(menu) : this.renderMenuItem(menu)
}
return null
},
renderMenuItem (menu) {
const target = menu.meta.target || null
const props = {
to: { name: menu.name },
target: target
}
return (
<Item {...{ key: menu.path }}>
<router-link {...{ props }}>
{this.renderIcon(menu.meta.icon)}
<span>{menu.meta.title}</span>
</router-link>
</Item>
)
},
renderSubMenu (menu) {
const itemArr = []
if (!menu.hideChildrenInMenu) {
menu.children.forEach(item => itemArr.push(this.renderItem(item)))
}
return (
<SubMenu {...{ key: menu.path }}>
<span slot="title">
{this.renderIcon(menu.meta.icon)}
<span>{menu.meta.title}</span>
</span>
{itemArr}
</SubMenu>
)
},
renderIcon (icon) {
if (icon === 'none' || icon === undefined) {
return null
}
const props = {}
typeof (icon) === 'object' ? props.component = icon : props.type = icon
return (
<Icon {... { props } }/>
)
}
},
render () {
const { mode, theme, menu } = this
const props = {
mode: mode,
theme: theme,
openKeys: this.openKeys
}
const on = {
select: obj => {
this.selectedKeys = obj.selectedKeys
this.$emit('select', obj)
},
openChange: this.onOpenChange
}
const menuTree = menu.map(item => {
if (item.hidden) {
return null
}
return this.renderItem(item)
})
// {...{ props, on: on }}
return (
<Menu vModel={this.selectedKeys} {...{ props, on: on }}>
{menuTree}
</Menu>
)
}
}
...@@ -255,7 +255,7 @@ export const asyncRouterMap = [ ...@@ -255,7 +255,7 @@ export const asyncRouterMap = [
path: '/account/settings', path: '/account/settings',
name: 'settings', name: 'settings',
component: () => import('@/views/account/settings/Index'), component: () => import('@/views/account/settings/Index'),
meta: { title: '个人设置', hideHeader: true, keepAlive: true, permission: [ 'user' ] }, meta: { title: '个人设置', hideHeader: true, permission: [ 'user' ] },
redirect: '/account/settings/base', redirect: '/account/settings/base',
hideChildrenInMenu: true, hideChildrenInMenu: true,
children: [ children: [
...@@ -263,7 +263,7 @@ export const asyncRouterMap = [ ...@@ -263,7 +263,7 @@ export const asyncRouterMap = [
path: '/account/settings/base', path: '/account/settings/base',
name: 'BaseSettings', name: 'BaseSettings',
component: () => import('@/views/account/settings/BaseSetting'), component: () => import('@/views/account/settings/BaseSetting'),
meta: { title: '基本设置', hidden: true, keepAlive: true, permission: [ 'user' ] } meta: { title: '基本设置', hidden: true, permission: [ 'user' ] }
}, },
{ {
path: '/account/settings/security', path: '/account/settings/security',
......
...@@ -5,6 +5,7 @@ import config from '@/config/defaultSettings' ...@@ -5,6 +5,7 @@ import config from '@/config/defaultSettings'
// base library // base library
import Antd from 'ant-design-vue' import Antd from 'ant-design-vue'
import Viser from 'viser-vue' import Viser from 'viser-vue'
import VueCropper from 'vue-cropper'
import 'ant-design-vue/dist/antd.less' import 'ant-design-vue/dist/antd.less'
// ext library // ext library
...@@ -19,4 +20,5 @@ Vue.use(Viser) ...@@ -19,4 +20,5 @@ Vue.use(Viser)
Vue.use(VueStorage, config.storageOptions) Vue.use(VueStorage, config.storageOptions)
Vue.use(VueClipboard) Vue.use(VueClipboard)
Vue.use(PermissionHelper) Vue.use(PermissionHelper)
Vue.use(VueCropper)
...@@ -34,12 +34,14 @@ ...@@ -34,12 +34,14 @@
</a-modal> </a-modal>
</template> </template>
<script> <script>
import { VueCropper } from 'vue-cropper' // import { VueCropper } from 'vue-cropper'
export default { export default {
/*
components: { components: {
VueCropper VueCropper
}, },
*/
data () { data () {
return { return {
visible: false, visible: false,
...@@ -60,7 +62,7 @@ export default { ...@@ -60,7 +62,7 @@ export default {
edit (id) { edit (id) {
this.visible = true this.visible = true
this.id = id this.id = id
/* 获取原始头像 */ /* 获取原始头像 */
}, },
close () { close () {
this.id = null this.id = null
...@@ -77,7 +79,7 @@ export default { ...@@ -77,7 +79,7 @@ export default {
vm.confirmLoading = false vm.confirmLoading = false
vm.close() vm.close()
vm.$message.success('上传头像成功') vm.$message.success('上传头像成功')
}, 2000) }, 2000)
}, },
realTime (data) { realTime (data) {
...@@ -104,4 +106,4 @@ export default { ...@@ -104,4 +106,4 @@ export default {
height: 100%; height: 100%;
} }
} }
</style> </style>
...@@ -10300,10 +10300,10 @@ vue-clipboard2@^0.2.1: ...@@ -10300,10 +10300,10 @@ vue-clipboard2@^0.2.1:
dependencies: dependencies:
clipboard "^2.0.0" clipboard "^2.0.0"
vue-cropper@^0.4.4: vue-cropper@0.4.4:
version "0.4.8" version "0.4.4"
resolved "https://registry.yarnpkg.com/vue-cropper/-/vue-cropper-0.4.8.tgz#9bd26a93335cded988d135d9f25575a61a9fb795" resolved "https://registry.yarnpkg.com/vue-cropper/-/vue-cropper-0.4.4.tgz#63c85ba5c7f9d9779370930c8522b61deb177c97"
integrity sha512-xS+23lhyZvTSExmsO3x14lXra5xmykEoAy6iyjLiXH+5l+koP3F+aP8EjJmT9hGOvT5b8fVu9nts9pHAeXb78w== integrity sha512-5xJ3jWyTnsx3JM+lFV5mwdPjKfpYi2rvByEh4H0sFtCMILo3YTmMti2pq9YeoPLybJz04ho+wemYw5TqidYV5g==
dependencies: dependencies:
"@babel/core" "^7.1.2" "@babel/core" "^7.1.2"
"@babel/plugin-transform-runtime" "^7.1.0" "@babel/plugin-transform-runtime" "^7.1.0"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment