lilei пре 2 дана
родитељ
комит
a99e900523
6 измењених фајлова са 149 додато и 11 уклоњено
  1. 73 0
      src/config/router.config.js
  2. 53 0
      src/layouts/MobileLayout.vue
  3. 2 1
      src/layouts/index.js
  4. 4 4
      src/router/index.js
  5. 15 0
      src/utils/util.js
  6. 2 6
      src/views/user/Login.vue

+ 73 - 0
src/config/router.config.js

@@ -2,6 +2,7 @@
 import {
   UserLayout,
   BasicLayout,
+  MobileLayout,
   BlankLayout,
   BigScreen,
   PageView
@@ -82,6 +83,78 @@ export const asyncRouterMap = [
   }
 ]
 
+/**
+ * 移动端路由
+ * @type { *[] }
+ */
+export const asyncMobileRouterMap = [
+  {
+    path: '/',
+    name: 'index',
+    component: MobileLayout,
+    meta: {
+      title: '首页'
+    },
+    redirect: '/inventoryManagement',
+    children: [
+       {
+         path: '/inventoryManagement',
+         redirect: '/inventoryManagement/inventoryQuery',
+         component: PageView,
+         meta: {
+           title: '库存管理',
+           icon: 'shop',
+           permission: 'M_inventoryManagement'
+         },
+         children: [
+           {
+             path: '/inventoryManagement/inventoryQuery',
+             redirect: '/inventoryManagement/inventoryQuery/list',
+             name: 'inventoryQuery',
+             component: BlankLayout,
+             meta: {
+               title: '库存查询',
+               icon: 'monitor',
+               permission: 'M_inventoryQueryList'
+             },
+             hideChildrenInMenu: true,
+             children: [
+               {
+                 path: 'list',
+                 name: 'inventoryQueryList',
+                 component: () => import(/* webpackChunkName: "inventoryManagement" */ '@/views/inventoryManagement/inventoryQuery/list.vue'),
+                 meta: {
+                   title: '库存列表',
+                   icon: 'monitor',
+                   hidden: true,
+                   permission: 'M_inventoryQueryList'
+                 }
+               },
+               {
+                 path: 'warehouseDetail/:sn/:warehouseSn',
+                 name: 'inventoryQueryWarehouseDetail',
+                 component: () => import(/* webpackChunkName: "inventoryManagement" */ '@/views/inventoryManagement/inventoryQuery/warehouseDetail.vue'),
+                 meta: {
+                   title: '出入库明细',
+                   icon: 'monitor',
+                   replaceTab: true,
+                   hidden: true,
+                   permission: 'B_inventoryQuery_rkDetail'
+                 }
+               }
+             ]
+           },
+           ]
+       }
+    ]
+  },
+  {
+    path: '*',
+    redirect: '/404',
+    hidden: true
+  }
+]
+
 /**
  * 基础路由
  * @type { *[] }

+ 53 - 0
src/layouts/MobileLayout.vue

@@ -0,0 +1,53 @@
+<script>
+export default {
+  name: 'MobileLayout'
+}
+</script>
+
+<template>
+  <a-layout id="components-layout-mobile-fixed">
+    <a-layout-header :style="{ position: 'fixed', zIndex: 1, width: '100%',padding:'0 10px' }">
+      <div class="logo" />
+      <a-menu
+        theme="dark"
+        mode="horizontal"
+        :default-selected-keys="['2']"
+        :style="{ lineHeight: '64px' }"
+      >
+        <a-menu-item key="1">
+          nav 1
+        </a-menu-item>
+        <a-menu-item key="2">
+          nav 2
+        </a-menu-item>
+        <a-menu-item key="3">
+          nav 3
+        </a-menu-item>
+      </a-menu>
+    </a-layout-header>
+    <a-layout-content :style="{ padding: '0 50px', marginTop: '64px' }">
+      <a-breadcrumb :style="{ margin: '16px 0' }">
+        <a-breadcrumb-item>Home</a-breadcrumb-item>
+        <a-breadcrumb-item>List</a-breadcrumb-item>
+        <a-breadcrumb-item>App</a-breadcrumb-item>
+      </a-breadcrumb>
+      <div :style="{ background: '#fff', padding: '24px', minHeight: '380px' }">
+        <keep-alive>
+          <router-view :key="$route.name"></router-view>
+        </keep-alive>
+      </div>
+    </a-layout-content>
+    <a-layout-footer :style="{ textAlign: 'center' }">
+      Ant Design ©2018 Created by Ant UED
+    </a-layout-footer>
+  </a-layout>
+</template>
+<style>
+#components-layout-mobile-fixed .logo {
+  width: 120px;
+  height: 31px;
+  background: rgba(255, 255, 255, 0.2);
+  margin: 16px 24px 16px 0;
+  float: left;
+}
+</style>

+ 2 - 1
src/layouts/index.js

@@ -4,5 +4,6 @@ import BasicLayout from './BasicLayout'
 import RouteView from './RouteView'
 import PageView from './PageView'
 import BigScreen from './BigScreen'
+import MobileLayout from './MobileLayout'
 
-export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView, BigScreen }
+export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView, BigScreen, MobileLayout }

+ 4 - 4
src/router/index.js

@@ -1,7 +1,7 @@
 import Vue from 'vue'
 import Router from 'vue-router'
-import { constantRouterMap, asyncRouterMap } from '@/config/router.config'
-
+import { constantRouterMap, asyncRouterMap, asyncMobileRouterMap } from '@/config/router.config'
+import { isMobileDevice } from '@/utils/util'
 // hack router push callback
 const originalPush = Router.prototype.push
 Router.prototype.push = function push (location, onResolve, onReject) {
@@ -10,10 +10,10 @@ Router.prototype.push = function push (location, onResolve, onReject) {
 }
 
 Vue.use(Router)
-
+console.log(isMobileDevice()?asyncMobileRouterMap:asyncRouterMap)
 export default new Router({
   mode: 'history',
   base: process.env.BASE_URL,
   scrollBehavior: () => ({ y: 0 }),
-  routes: constantRouterMap.concat(asyncRouterMap)
+  routes: constantRouterMap.concat(isMobileDevice()?asyncMobileRouterMap:asyncRouterMap)
 })

+ 15 - 0
src/utils/util.js

@@ -56,6 +56,21 @@ export const getBrowserType = function () {
   return browserType
 }
 
+export function isMobileDevice() {
+    // 方法1:通过userAgent检测
+    const userAgent = navigator.userAgent || navigator.vendor || window.opera;
+    const mobileRegex = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;
+    
+    // 方法2:通过屏幕宽度检测(通常移动端宽度小于768px)
+    const isSmallScreen = window.innerWidth < 768;
+    
+    // 方法3:检测触摸支持
+    const hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
+    
+    // 综合判断
+    return mobileRegex.test(userAgent) || isSmallScreen || hasTouch;
+}
+
 export function timeFix () {
   const time = new Date()
   const hour = time.getHours()

+ 2 - 6
src/views/user/Login.vue

@@ -116,12 +116,12 @@
 </template>
 
 <script>
-import md5 from 'md5'
+// import md5 from 'md5'
 import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'
 import { mapActions } from 'vuex'
 import { timeFix } from '@/utils/util'
 import { getSmsCaptcha, get2step } from '@/api/login'
-import { updateTheme } from '@/components/SettingDrawer/settingConfig'
+// import { updateTheme } from '@/components/SettingDrawer/settingConfig'
 
 export default {
   components: {
@@ -159,7 +159,6 @@ export default {
     //   })
     // this.requiredTwoStepCaptcha = true
     const rem = this.$cookies.get('REMEMBER_ME')
-    console.log(rem)
     if (rem && rem.rememberMe) {
       this.username = rem.username
       this.password = rem.password
@@ -264,11 +263,9 @@ export default {
       })
     },
     loginSuccess (res) {
-      console.log(res)
       // check res.homePage define, set $router.push name res.homePage
       // Why not enter onComplete
       this.$router.push({ name: 'index' }, () => {
-        console.log('onComplete')
         this.$notification.success({
           message: '欢迎',
           description: `${timeFix()},欢迎回来`
@@ -277,7 +274,6 @@ export default {
       this.isLoginError = false
     },
     requestFailed (err) {
-      console.log(err, 'error')
       this.isLoginError = true
       this.$notification['error']({
         message: '提示',