From 21deb676625eef63caed1caafb2b93cb09e153af Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Mon, 09 Feb 2026 15:57:36 +0800
Subject: [PATCH] feat: 免密登陆

---
 applications/drone-command/src/page/login/index.vue       |    4 
 /dev/null                                                 |  133 --------------------------
 applications/drone-command/src/store/modules/user.js      |    1 
 applications/drone-command/src/page/login/loginByUser.vue |   33 ++++++
 applications/drone-command/src/page/login/userlogin.vue   |   76 +--------------
 applications/drone-command/src/router/page/index.js       |   10 ++
 6 files changed, 51 insertions(+), 206 deletions(-)

diff --git a/applications/drone-command/src/page/login/index.vue b/applications/drone-command/src/page/login/index.vue
index ad005da..f2dad62 100644
--- a/applications/drone-command/src/page/login/index.vue
+++ b/applications/drone-command/src/page/login/index.vue
@@ -74,10 +74,10 @@
   created() {
     this.handleLogin();
     this.getTime();
-   if(!loginTitle) { 
+   if(!loginTitle) {
     this.getSysConfigInfo();
   }
- 
+
   },
   mounted() {},
   computed: {
diff --git a/applications/drone-command/src/page/login/loginByUser.vue b/applications/drone-command/src/page/login/loginByUser.vue
new file mode 100644
index 0000000..2f954ac
--- /dev/null
+++ b/applications/drone-command/src/page/login/loginByUser.vue
@@ -0,0 +1,33 @@
+<template>
+	<div style="width: 100%; height: 100%; background: #05050f"></div>
+</template>
+<script setup>
+import { useStore } from 'vuex'
+import { ElLoading } from 'element-plus'
+
+const store = useStore()
+const router = useRouter()
+const userName = window.localStorage?.userName
+const route = useRoute()
+let loading = ElLoading.service({ background: 'rgba(0, 0, 0, 0.3)', text: '加载中...' })
+const tagWel = computed(() => store.state.tags.tagWel)
+const redirect = route.query.redirect
+store
+	.dispatch('LoginByUsername', {
+		username: userName,
+		password: 'jadk@2026',
+		tenantId: '000000',
+		type: 'account',
+	})
+	.then(() => {
+		loading.close()
+		router.push(redirect || tagWel.value)
+	})
+	.catch(err => {
+		loading.close()
+		// 返回上一个路由
+		window.history.go(-1)
+	})
+</script>
+
+<style scoped lang="scss"></style>
diff --git a/applications/drone-command/src/page/login/userlogin.vue b/applications/drone-command/src/page/login/userlogin.vue
index ddeaf20..5759c1d 100644
--- a/applications/drone-command/src/page/login/userlogin.vue
+++ b/applications/drone-command/src/page/login/userlogin.vue
@@ -7,24 +7,12 @@
     :model="loginForm"
     label-width="0"
   >
-    <!-- <el-form-item v-if="tenantMode" prop="tenantId">
-      <el-input
-        @keyup.enter="handleLogin"
-        v-model="loginForm.tenantId"
-        auto-complete="off"
-        :placeholder="$t('login.tenantId')"
-      >
-        <template #prefix>
-          <i class="icon-quanxian" />
-        </template>
-      </el-input>
-    </el-form-item> -->
     <el-form-item prop="username">
       <el-input
         @keyup.enter="handleLogin"
         v-model="loginForm.username"
         auto-complete="off"
-        :placeholder="$t('login.username')"
+        placeholder="请输入账号"
       >
         <template #prefix>
           <i class="icon-yonghu" />
@@ -37,7 +25,7 @@
         :type="passwordType"
         v-model="loginForm.password"
         auto-complete="off"
-        :placeholder="$t('login.password')"
+        placeholder="请输入密码"
       >
         <template #suffix>
           <i class="el-icon-view el-input__icon" @click="showPassword" />
@@ -47,49 +35,15 @@
         </template>
       </el-input>
     </el-form-item>
-    <!-- <el-form-item v-if="this.website.captchaMode" prop="code">
-      <el-row :span="24">
-        <el-col :span="16">
-          <el-input
-            @keyup.enter="handleLogin"
-            v-model="loginForm.code"
-            auto-complete="off"
-            :placeholder="$t('login.code')"
-          >
-            <template #prefix>
-              <i class="icon-yanzhengma" />
-            </template>
-          </el-input>
-        </el-col>
-        <el-col :span="8">
-          <div class="login-code">
-            <img :src="loginForm.image" class="login-code-img" @click="refreshCode" />
-          </div>
-        </el-col>
-      </el-row>
-    </el-form-item> -->
     <el-form-item>
       <el-button
         style="width: 100%;"
         type="primary"
         @click.prevent="handleLogin"
         :class="this.registerMode ? 'login-submit' : 'btn-submit'"
-        >{{ $t('login.submit') }}
+        >登 录
       </el-button>
-      <!-- <el-button
-        v-if="this.registerMode"
-        type="danger"
-        @click.prevent="handleRegister"
-        class="register-submit"
-        >{{ $t('login.register') }}
-      </el-button> -->
     </el-form-item>
-    <!-- <el-dialog title="用户信息选择" append-to-body v-model="userBox" width="350px">
-      <avue-form :option="userOption" v-model="userForm" @submit="submitLogin" />
-    </el-dialog>
-    <el-dialog title="用户信息注册" append-to-body v-model="registerBox" width="350px">
-      <avue-form :option="registerOption" v-model="registerForm" @submit="submitRegister" />
-    </el-dialog> -->
   </el-form>
 </template>
 
@@ -338,30 +292,10 @@
     handleLogin() {
       this.$refs.loginForm.validate(valid => {
         if (valid) {
-          const loading = this.$loading({
-            lock: true,
-            text: '登录中,请稍后',
-            background: 'rgba(0, 0, 0, 0.7)',
-          });
-          this.$store
-            .dispatch('LoginByUsername', this.loginForm)
+          const loading = this.$loading({ lock: true, text: '登录中,请稍后', background: 'rgba(0, 0, 0, 0.7)' });
+          this.$store.dispatch('LoginByUsername', this.loginForm)
             .then(() => {
-              if (this.website.switchMode) {
-                const deptId = this.userInfo.dept_id;
-                const roleId = this.userInfo.role_id;
-                if (deptId.includes(',') || roleId.includes(',')) {
-                  this.loginForm.deptId = deptId;
-                  this.loginForm.roleId = roleId;
-                  this.userBox = true;
-                  this.$store.dispatch('LogOut').then(() => {
-                    loading.close();
-                  });
-                  return false;
-                }
-              }
               loading.close();
-              //加载工作流路由集
-              this.loadFlowRoutes();
               this.$router.push(this.tagWel);
             })
             .catch(err => {
diff --git a/applications/drone-command/src/permission copy 2.js b/applications/drone-command/src/permission copy 2.js
deleted file mode 100644
index d732623..0000000
--- a/applications/drone-command/src/permission copy 2.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * @Author: GuLiMmo 2820890765@qq.com
- * @Date: 2024-08-23 10:51:53
- * @LastEditors: GuLiMmo 2820890765@qq.com
- * @LastEditTime: 2024-08-29 14:10:56
- * @FilePath: /drone-command/src/permission.js
- * @Description:
- * Copyright (c) 2024 by GuLiMmo, All Rights Reserved.
- */
-import router from './router/'
-import store from './store'
-import { getToken } from '@/utils/auth'
-import { getUrlParams } from './utils/validate'
-import NProgress from 'nprogress' // progress bar
-import 'nprogress/nprogress.css' // progress bar style
-NProgress.configure({ showSpinner: false })
-const lockPage = '/lock' //锁屏页
-const urlParams = getUrlParams(window.location.href)
-
-router.beforeEach((to, from, next) => {
-  const meta = to.meta || {}
-  const isMenu = meta.menu === undefined ? to.query.menu : meta.menu
-  store.commit('SET_IS_MENU', isMenu === undefined)
-  if (getToken()) {
-    if (store.getters.isLock && to.path !== lockPage) {
-      //如果系统激活锁屏,全部跳转到锁屏页
-      next({ path: lockPage })
-    } else if (to.path === '/login') {
-      //如果登录成功访问登录页跳转到主页
-      next({ path: '/' })
-    } else {
-      const systemToken = store.getters.token || urlParams?.token
-      if (systemToken === 0) {
-        store.dispatch('FedLogOut').then(() => {
-          next({ path: '/login' })
-        })
-      } else {
-        const meta = to.meta || {}
-        const query = to.query || {}
-        if (meta.target) {
-          window.open(query.url.replace(/#/g, '&'))
-          return
-        } else if (meta.isTab !== false) {
-          store.commit('ADD_TAG', {
-            name: query.name || to.name,
-            path: to.path,
-            fullPath: to.path,
-            params: to.params,
-            query: to.query,
-            meta: meta,
-          })
-        }
-        next()
-      }
-    }
-  } else {
-    //判断是否需要认证,没有登录访问去登录页
-    if (meta.isAuth === false) {
-      next()
-    } else {
-      next('/login')
-    }
-  }
-})
-
-router.afterEach(to => {
-  NProgress.done()
-  let title = router.$avueRouter.generateTitle(to, { label: 'name' })
-  router.$avueRouter.setTitle(title)
-  store.commit('SET_IS_SEARCH', false)
-})
diff --git a/applications/drone-command/src/permission copy.js b/applications/drone-command/src/permission copy.js
deleted file mode 100644
index cb2384e..0000000
--- a/applications/drone-command/src/permission copy.js
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * @Author: GuLiMmo 2820890765@qq.com
- * @Date: 2024-08-23 10:51:53
- * @LastEditors: GuLiMmo 2820890765@qq.com
- * @LastEditTime: 2024-08-29 14:10:56
- * @FilePath: /drone-command/src/permission.js
- * @Description:
- * Copyright (c) 2024 by GuLiMmo, All Rights Reserved.
- */
-
-import { getStore } from '@/utils/store'
-import router from './router/'
-import store from './store'
-import { getToken } from '@/utils/auth'
-import { getUrlParams } from './utils/validate'
-import NProgress from 'nprogress' // progress bar
-import 'nprogress/nprogress.css' // progress bar style
-NProgress.configure({ showSpinner: false })
-const lockPage = '/lock' //锁屏页
-const urlParams = getUrlParams(window.location.href)
-
-function findRouteByPath (routes, targetPath) {
-  // 遍历数组中的每个路由对象
-  for (const route of routes) {
-    // 如果当前路由的path匹配目标路径,直接返回
-    if (route.path === targetPath) {
-      return route
-    }
-
-    // 如果有子路由,递归查找
-    if (route.children && route.children.length > 0) {
-      const foundInChildren = findRouteByPath(route.children, targetPath)
-      if (foundInChildren) {
-        return foundInChildren
-      }
-    }
-  }
-
-  // 遍历完所有路由都没找到,返回null
-  return null
-}
-
-router.beforeEach((to, from, next) => {
-  const meta = to.meta || {}
-  const isMenu = meta.menu === undefined ? to.query.menu : meta.menu
-  store.commit('SET_IS_MENU', isMenu === undefined)
-
-  const menuAll = getStore({ name: 'menuAll' })
-
-  if (!menuAll) {
-    store.dispatch('GetMenu').then(data => {
-      if (data.length !== 0) {
-        router.$avueRouter.formatRoutes(data, true)
-
-        let newMenu = getStore({ name: 'menuAll' })
-
-        let firstMenu = newMenu[0]
-
-        let toMenu = findRouteByPath(newMenu, to.path)
-
-        store.commit('ADD_TAG', {
-          name: firstMenu.name,
-          path: firstMenu.path,
-          fullPath: firstMenu.path,
-          params: firstMenu.params || {},
-          query: firstMenu.query || {},
-          meta: firstMenu.meta || {},
-        })
-
-        store.commit('ADD_TAG', {
-          name: toMenu.name,
-          path: toMenu.path,
-          fullPath: toMenu.path,
-          params: toMenu.params || {},
-          query: toMenu.query || {},
-          meta: toMenu.meta || {},
-        })
-
-        next(to.fullPath)
-      }
-    })
-
-    return
-  }
-
-  if (getToken()) {
-    if (store.getters.isLock && to.path !== lockPage) {
-      //如果系统激活锁屏,全部跳转到锁屏页
-      next({ path: lockPage })
-    } else if (to.path === '/login') {
-      //如果登录成功访问登录页跳转到主页
-      next({ path: '/' })
-    } else {
-      const systemToken = store.getters.token || urlParams?.token
-      if (systemToken === 0) {
-        store.dispatch('FedLogOut').then(() => {
-          next({ path: '/login' })
-        })
-      } else {
-        const meta = to.meta || {}
-        const query = to.query || {}
-        if (meta.target) {
-          window.open(query.url.replace(/#/g, '&'))
-          return
-        } else if (meta.isTab !== false) {
-          store.commit('ADD_TAG', {
-            name: query.name || to.name,
-            path: to.path,
-            fullPath: to.path,
-            params: to.params,
-            query: to.query,
-            meta: meta,
-          })
-        }
-        next()
-      }
-    }
-  } else {
-    //判断是否需要认证,没有登录访问去登录页
-    if (meta.isAuth === false) {
-      next()
-    } else {
-      next('/login')
-    }
-  }
-})
-
-router.afterEach(to => {
-  NProgress.done()
-  let title = router.$avueRouter.generateTitle(to, { label: 'name' })
-  router.$avueRouter.setTitle(title)
-  store.commit('SET_IS_SEARCH', false)
-})
diff --git a/applications/drone-command/src/router/page/index.js b/applications/drone-command/src/router/page/index.js
index 14400b3..f0d2709 100644
--- a/applications/drone-command/src/router/page/index.js
+++ b/applications/drone-command/src/router/page/index.js
@@ -12,6 +12,16 @@
       isAuth: false,
     },
   },
+	{
+		path: '/logInByUser',
+		name: '按用户登录',
+		component: () => import('@/page/login/loginByUser.vue'),
+		meta: {
+			keepAlive: false,
+			isTab: false,
+			isAuth: false,
+		},
+	},
   {
     path: '/oauth/redirect/:source',
     name: '第三方登录',
diff --git a/applications/drone-command/src/store/modules/user.js b/applications/drone-command/src/store/modules/user.js
index 4dbd240..70af2ea 100644
--- a/applications/drone-command/src/store/modules/user.js
+++ b/applications/drone-command/src/store/modules/user.js
@@ -283,6 +283,7 @@
           const data = res.data.data;
           let menu = deepClone(data);
           if (!res.data?.data?.length){
+						ElMessage.warning('当前角色没有配置菜单,请联系管理员配置')
             errLogOut()
             return
           }

--
Gitblit v1.9.3