| // Licensed to the Apache Software Foundation (ASF) under one | |
| // or more contributor license agreements. See the NOTICE file | |
| // distributed with this work for additional information | |
| // regarding copyright ownership. The ASF licenses this file | |
| // to you under the Apache License, Version 2.0 (the | |
| // "License"); you may not use this file except in compliance | |
| // with the License. You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, | |
| // software distributed under the License is distributed on an | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| // KIND, either express or implied. See the License for the | |
| // specific language governing permissions and limitations | |
| // under the License. | |
| // import Vue from 'vue' | |
| import { deviceEnquire, DEVICE_TYPE } from '@/utils/device' | |
| import { mapState } from 'vuex' | |
| // const mixinsComputed = Vue.config.optionMergeStrategies.computed | |
| // const mixinsMethods = Vue.config.optionMergeStrategies.methods | |
| const mixin = { | |
| computed: { | |
| ...mapState({ | |
| layoutMode: state => state.app.layout, | |
| navTheme: state => state.app.theme, | |
| primaryColor: state => state.app.color, | |
| invertedMode: state => state.app.inverted, | |
| fixedHeader: state => state.app.fixedHeader, | |
| fixSiderbar: state => state.app.fixSiderbar, | |
| fixSidebar: state => state.app.fixSiderbar, | |
| contentWidth: state => state.app.contentWidth, | |
| autoHideHeader: state => state.app.autoHideHeader, | |
| sidebarOpened: state => state.app.sidebar, | |
| multiTab: state => state.app.multiTab | |
| }) | |
| }, | |
| methods: { | |
| isTopMenu () { | |
| return this.layoutMode === 'topmenu' | |
| }, | |
| isSideMenu () { | |
| return !this.isTopMenu() | |
| } | |
| } | |
| } | |
| const mixinDevice = { | |
| computed: { | |
| ...mapState({ | |
| device: state => state.app.device | |
| }) | |
| }, | |
| methods: { | |
| isMobile () { | |
| return this.device === DEVICE_TYPE.MOBILE | |
| }, | |
| isDesktop () { | |
| return this.device === DEVICE_TYPE.DESKTOP | |
| }, | |
| isTablet () { | |
| return this.device === DEVICE_TYPE.TABLET | |
| } | |
| } | |
| } | |
| const AppDeviceEnquire = { | |
| mounted () { | |
| const { $store } = this | |
| deviceEnquire(deviceType => { | |
| switch (deviceType) { | |
| case DEVICE_TYPE.DESKTOP: | |
| $store.commit('TOGGLE_DEVICE', 'desktop') | |
| $store.dispatch('setSidebar', true) | |
| break | |
| case DEVICE_TYPE.TABLET: | |
| $store.commit('TOGGLE_DEVICE', 'tablet') | |
| $store.dispatch('setSidebar', false) | |
| break | |
| case DEVICE_TYPE.MOBILE: | |
| default: | |
| $store.commit('TOGGLE_DEVICE', 'mobile') | |
| $store.dispatch('setSidebar', true) | |
| break | |
| } | |
| }) | |
| } | |
| } | |
| const mixinForm = { | |
| methods: { | |
| handleRemoveFields (form) { | |
| const formResult = {} | |
| Object.keys(form).forEach(field => { | |
| if (field in this.$refs && this.$refs[field] === null || this.$refs[field] === undefined) { | |
| return true | |
| } | |
| formResult[field] = form[field] | |
| }) | |
| return formResult | |
| } | |
| } | |
| } | |
| export { mixin, AppDeviceEnquire, mixinDevice, mixinForm } |