最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Vue開發(fā)登錄頁面的完整指南

 更新時間:2025年04月20日 09:43:05   作者:·薯條大王  
Vue.js 是一個流行的前端JavaScript框架,用于構(gòu)建用戶界面,在這個"vue網(wǎng)頁登錄界面"的示例中,我們探討的是如何使用Vue.js創(chuàng)建一個簡單的登錄頁面,感興趣的小伙伴跟著小編一起來看看吧

一、項目搭建與基礎(chǔ)配置

  • 環(huán)境準備
    使用 Vue CLI 或 Vite 創(chuàng)建項目,推薦組合:Vue3 + Element Plus + Vue Router

npm create vue@latest
npm install element-plus @element-plus/icons-vue vue-router
  • 全局配置(main.js)
 
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import router from './router'
import 'element-plus/dist/index.css'
 
const app = createApp(App)
app.use(ElementPlus)
app.use(router)
app.mount('#app')

二、登錄頁面核心實現(xiàn)

  • 模板結(jié)構(gòu)(login.vue)
<template>
  <div class="login-container">
    <el-form ref="formRef" :model="form" :rules="rules">
      <h2 class="title">校園交易平臺</h2>
      
      <el-form-item prop="username">
        <el-input
          v-model="form.username"
          prefix-icon="User"
          placeholder="請輸入手機號"
        />
      </el-form-item>
 
      <el-form-item prop="password">
        <el-input
          v-model="form.password"
          prefix-icon="Lock"
          type="password"
          show-password
          placeholder="請輸入密碼"
          @keyup.enter="handleLogin"
        />
      </el-form-item>
 
      <el-button 
        type="primary" 
        :loading="loading"
        @click="handleLogin"
      >
        登錄
      </el-button>
 
      <div class="links">
        <router-link to="/register">立即注冊</router-link>
        <router-link to="/forgot">忘記密碼?</router-link>
      </div>
    </el-form>
  </div>
</template>
  • 數(shù)據(jù)與驗證邏輯
<script setup>
import { ref, reactive } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
 
const form = reactive({
  username: '',
  password: ''
})
 
const rules = reactive({
  username: [
    { required: true, message: '請輸入手機號', trigger: 'blur' },
    { pattern: /^1[3-9]\d{9}$/, message: '手機號格式錯誤' }
  ],
  password: [
    { required: true, message: '請輸入密碼', trigger: 'blur' },
    { min: 6, max: 16, message: '長度6-16位' }
  ]
})
 
const loading = ref(false)
const formRef = ref(null)
const router = useRouter()
 
const handleLogin = async () => {
  try {
    await formRef.value.validate()
    loading.value = true
    
    // 模擬API請求
    await new Promise(resolve => setTimeout(resolve, 1000))
    
    sessionStorage.setItem('token', 'demo_token')
    ElMessage.success('登錄成功')
    router.replace('/dashboard')
  } catch (error) {
    console.error('登錄失敗:', error)
  } finally {
    loading.value = false
  }
}
</script>
  • 樣式優(yōu)化要點
 
<style scoped>
.login-container {
  height: 100vh;
  display: grid;
  place-items: center;
  background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
}
 
.title {
  text-align: center;
  margin-bottom: 2rem;
  color: #2c3e50;
  font-size: 1.8rem;
}
 
:deep(.el-form) {
  width: 400px;
  padding: 2rem;
  background: rgba(255,255,255,0.95);
  border-radius: 12px;
  box-shadow: 0 4px 20px rgba(0,0,0,0.1);
}
 
.el-button {
  width: 100%;
  margin-top: 1rem;
}
 
.links {
  margin-top: 1.5rem;
  display: flex;
  justify-content: space-between;
  
  a {
    color: #409eff;
    text-decoration: none;
    transition: color 0.3s;
 
    &:hover {
      color: #66b1ff;
    }
  }
}
</style>

三、進階功能實現(xiàn)

  • 路由守衛(wèi)配置
// router/index.js
router.beforeEach((to) => {
  const isAuthenticated = sessionStorage.getItem('token')
  
  if (to.meta.requiresAuth && !isAuthenticated) {
    return '/login'
  }
  
  if (to.path === '/login' && isAuthenticated) {
    return '/dashboard'
  }
})
  • 安全增強方案
    • 密碼加密傳輸(使用crypto-js)

    • 添加驗證碼功能

    • 請求限流與防重放攻擊

import CryptoJS from 'crypto-js'
 
const encryptPassword = (password) => {
  return CryptoJS.SHA256(password).toString()
}
  • 第三方登錄集成
<template>
  <div class="oauth-login">
    <el-divider>第三方登錄</el-divider>
    <div class="oauth-buttons">
      <el-button @click="handleWechatLogin">
        <svg-icon icon-class="wechat" />
        微信登錄
      </el-button>
    </div>
  </div>
</template>

四、最佳實踐與注意事項

  • 表單驗證優(yōu)化

    •   異步驗證手機號是否注冊

    •  密碼強度實時檢測

const checkUsername = async (rule, value, callback) => {
  if (!value) return callback(new Error('請輸入手機號'))
  if (!/^1[3-9]\d{9}$/.test(value)) return callback(new Error('格式錯誤'))
  
  try {
    const { data } = await api.checkUsername(value)
    if (!data.exist) callback(new Error('該用戶未注冊'))
  } catch (error) {
    callback(new Error('驗證失敗'))
  }
}
  • 用戶體驗優(yōu)化
    • 自動填充最近登錄賬號

    • 記住密碼功能(加密存儲)

    • 加載狀態(tài)管理

// 自動填充
const lastUsername = localStorage.getItem('lastUsername')
if (lastUsername) form.username = lastUsername
 
// 記住密碼
const savePassword = ref(false)
watch(savePassword, (val) => {
  if (val) {
    localStorage.setItem('remembered', JSON.stringify(form))
  } else {
    localStorage.removeItem('remembered')
  }
})
  • 錯誤處理規(guī)范
try {
  const res = await loginApi(formData)
  if (res.code === 1001) {
    ElMessage.warning('該賬號已被凍結(jié)')
  }
} catch (err) {
  ElMessage.error({
    message: `登錄失敗: ${err.message}`,
    grouping: true  // 相同錯誤合并顯示
  })
}

五、典型問題解決方案

  • 跨域問題處理

// vite.config.js
export default defineConfig({
  server: {
    proxy: {
      '/api': {
        target: 'http://backend.example.com',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
      }
    }
  }
})
  • 響應(yīng)式布局適配
@media (max-width: 768px) {
  .login-container {
    padding: 1rem;
    
    :deep(.el-form) {
      width: 100%;
      margin: 0 1rem;
    }
  }
}
  • 瀏覽器兼容問題

    • 使用@vitejs/plugin-legacy處理ES6+語法

    • 添加autoprefixer自動補全CSS前綴

到此這篇關(guān)于使用Vue開發(fā)登錄頁面的完整指南的文章就介紹到這了,更多相關(guān)Vue開發(fā)登錄頁面內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue3中unref的寫法代碼示例

    Vue3中unref的寫法代碼示例

    Vue3中多種響應(yīng)式實現(xiàn)方式,包括ref、unref、isRef、reactive等,這篇文章主要介紹了Vue3中unref寫法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-06-06
  • vue3:setup的兩個注意點詳解

    vue3:setup的兩個注意點詳解

    這篇文章主要介紹了vue3.0中setup的兩個注意點,本文通過兩種用法給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • Vue使用Pinia輕松實現(xiàn)狀態(tài)管理

    Vue使用Pinia輕松實現(xiàn)狀態(tài)管理

    pinia,一個基于Vue3的狀態(tài)管理庫,它可以幫助開發(fā)人員管理Vue應(yīng)用程序的狀態(tài),本文主要為大家介紹了Pinia的用法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • Vue 關(guān)閉當前頁、關(guān)閉當前標簽tagsView的實現(xiàn)方法

    Vue 關(guān)閉當前頁、關(guān)閉當前標簽tagsView的實現(xiàn)方法

    這篇文章主要介紹了Vue 關(guān)閉當前頁、關(guān)閉當前標簽tagsView,主要有兩種方式,一種是在vue頁面直接實現(xiàn),另一種在js文件中寫自定義函數(shù),在vue頁面中調(diào)用,本文通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 利用Vue.js框架實現(xiàn)火車票查詢系統(tǒng)(附源碼)

    利用Vue.js框架實現(xiàn)火車票查詢系統(tǒng)(附源碼)

    這篇文章主要介紹了利用Vue.js框架實現(xiàn)火車票查詢系統(tǒng)的相關(guān)資料,,文中給出了詳細的介紹與示例代碼,并在文章結(jié)尾給出了完整的項目下載,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • vue-cli如何關(guān)閉Uncaught?error的全屏提示

    vue-cli如何關(guān)閉Uncaught?error的全屏提示

    這篇文章主要介紹了vue-cli如何關(guān)閉Uncaught?error的全屏提示問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Vue登錄功能實現(xiàn)全套詳解(含封裝axios)

    Vue登錄功能實現(xiàn)全套詳解(含封裝axios)

    登錄功能對于前端剛?cè)腴T不久的同學(xué)來說較為困難,下面這篇文章主要給大家介紹了關(guān)于Vue登錄功能實現(xiàn)(含封裝axios)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • vue 檢測用戶上傳圖片寬高的方法

    vue 檢測用戶上傳圖片寬高的方法

    這篇文章主要介紹了vue 檢測用戶上傳圖片寬高的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • vue實現(xiàn)div單選多選功能

    vue實現(xiàn)div單選多選功能

    這篇文章主要為大家詳細介紹了vue實現(xiàn)div單選多選功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • vue3中使用keepAlive緩存路由組件不生效的問題解決

    vue3中使用keepAlive緩存路由組件不生效的問題解決

    這篇文章主要介紹了vue3中使用keepAlive緩存路由組件不生效的問題解決,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-06-06

最新評論

卢龙县| 黄平县| 阿拉善盟| 崇州市| 清涧县| 克东县| 洪泽县| 怀仁县| 成安县| 元谋县| 雅江县| 沅江市| 永嘉县| 宜川县| 湖南省| 南漳县| 响水县| 阿勒泰市| 梁河县| 郸城县| 综艺| 夹江县| 微山县| 玉环县| 曲水县| 邛崃市| 西盟| 禹州市| 合水县| 湛江市| 湟源县| 临海市| 全州县| 察隅县| 新绛县| 九江县| 县级市| 南乐县| 巴中市| 府谷县| 泽库县|