バックエンド管理システムを構築するためのvue-element-adminの実装手順

バックエンド管理システムを構築するためのvue-element-adminの実装手順

最近、カンファレンスの健康申告システムに取り組んでいたとき、バックエンドを構築する必要があり、vue-element-admin テンプレートを使用しました。私は PanJianChen (ソースコード アドレス: https://github.com/PanJiaChen/vue-admin-template) を使用しました。

最初のステップ: ソースコードをダウンロードします。ダウンロードアドレス: https://github.com/PanJiaChen/vue-admin-template

ステップ2: 実際の状況に応じて、ログインページ、ログインインターフェース(/store/modules/admin.js/login())を変更し、ユーザー情報インターフェース(/store/modules/admin.js/getInfo())を変更します。

ステップ3: 権限ルーティングを変更する

1. ルーティングファイル内の設定を削除し、const constantRoutesをエクスポートして、基本的な/login、/404を保持します。

2. 動的ルーティングがクリアされ、export const asyncRoutes=[]

3. 生成されたルーティングメソッドを/store/modules/permission.jsで定義します。

/**
 * バックグラウンドでクエリされたメニューデータは、ルーティング形式のデータに組み立てられます* @param ルート
 */
エクスポート関数generaMenu(ルート、データ) {
 
    データ.forEach(アイテム => {
        メニューを = {
            パス: item.url、
            子供たち: []、
            名前: 'menu_' + アイテムID,
            meta: { title: item.name、 id: item.id、 icon:item.icon}
        }
        // console.log(item.url.indexOf('ダッシュボード'))
 
        // コンソールログ(item.children)
        if (item.children) {
            // console.log(item.children.length)
            (アイテムの子供の長さ>0)の場合{
                menu.redirect = item.children[0].url
                menu.component = レイアウト
            } それ以外 {
                // menu.component = () => import(`@/views${item.url}/index`)
                menu.component = () => Promise.resolve(require(`@/views${item.url}`).default)
 
            }
            if (item.url && item.url.indexOf('ダッシュボード') != -1) {
                メニュー = {
                    パス: '/'、
                    コンポーネント: レイアウト、
                    リダイレクト: '/dashboard',
                    子供たち: [{
                        パス: 'ダッシュボード',
                        名前: 'ダッシュボード'、
                        コンポーネント: () => import('@/views/dashboard/index'),
                        meta: { title: 'ダッシュボード', icon: 'ダッシュボード' }
                    }]
                }
            }
            generaMenu(メニュー.children、アイテム.children)
        } それ以外 {
            console.log('子なし')
        }
        ルート.push(メニュー)
    })
}

バックグラウンドインターフェースに従ってアクションに動的ルーティングをロードする

アクション: {
        ルートを生成する({コミット},データ){
            新しいPromiseを返します(resolve => {
 
                定数loadMenuData = []
                getAuthMenu().then(res => {
                    データ = res.data とします
                    console.log('menu=>', データ)
                    コンソールログ('asyncRoutes=>>', asyncRoutes)
                    let newRoutes = [] //以前のルートをクリアする hereObject.assign(loadMenuData, data)
                    メニューを生成します(新しいルート、メニューデータを読み込みます)
                    newRoutes.push({ パス: '*'、リダイレクト: '/404'、非表示: true })
                    accessedRouters = newRoutes || [] とします
                    console.log('アクセスされたルーター', アクセスされたルーター)
                    commit('SET_ROUTERS', アクセスされたルーター)
                    解決する()
                })
 
            })
        },
        reset_routers({ コミット }) {
            新しいPromiseを返します(resolve => {
                コミット('RESET_ROUTERS')
                解決する()
            })
        }
    }

ステップ4. /permission.jsに動的ルーティングを追加する

router.beforeEach(非同期(to, from, next) => {
    // プログレスバーを開始
    NProgress.start()
 
    // ページタイトルを設定する
    document.title = getPageTitle(to.meta.title)
 
    // ユーザーがログインしているかどうかを判定する
    定数hasToken = getToken()
 
    (トークンを持っている場合){
        to.path === '/login'の場合{
            // ログインしている場合はホームページにリダイレクトします
            次へ({ パス: '/' })
            NProgress.done()
        } それ以外 {
            const hasGetUserInfo = store.getters.name
            (hasGetUserInfo) の場合 {
                次()
            } それ以外 {
                試す {
                    // ユーザー情報を取得する
                    ストアを待機します。dispatch('admin/getInfo')
 
                    store.dispatch('GenerateRoutes', {}).then(() => { // アクセス可能なルーティングテーブルを生成する router.addRoutes(store.getters.addRouters) // アクセス可能なルーティングテーブルを動的に追加する console.log('to=',store.getters.addRouters)
                        next({ ...to, replace: true }) // addRoutes が完了したことを確認するためのハックメソッド。replace: true を設定して、ナビゲーションが履歴レコードを残さないようにします。
                        NProgress.done()
                    })
 
                    // 次()
                } キャッチ(エラー){
                    // トークンを削除し、ログインページに移動して再度ログインします
                    store.dispatch('admin/resetToken') を待機します。
                    Message.error(error || 'エラーあり')
                    次へ(`/login?redirect=${to.path}`)
                    NProgress.done()
                }
            }
        }
    } それ以外 {
        /* トークンがありません*/
 
        (whiteList.indexOf(to.path) !== -1) の場合 {
            // 無料ログインホワイトリストでは、直接
            次()
        } それ以外 {
            // アクセス権限のない他のページはログイン ページにリダイレクトされます。
            次へ(`/login?redirect=${to.path}`)
            NProgress.done()
        }
    }
})

その後は好きなようにプレイできます。

これで、バックエンド管理システムを構築するための vue-element-admin の実装手順に関するこの記事は終了です。バックエンド管理システムを構築するための vue-element-admin に関するより関連性の高い記事については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue-Element-Adminはログインジャンプを実現するために独自のインターフェースを統合しています
  • vue-element-admin でデフォルト言語を設定する方法
  • vue-element-admin を中国語に変換する方法
  • vue-element-admin グローバル読み込み待機中
  • vue-element-admin ログイン フルプロセス共有

<<:  Net Core実装プロセス分析のDoc​​kerインストールと展開

>>: 

推薦する

JavaScriptはフォームデータの非同期送信を実装します

この記事では、フォームデータの非同期送信を実装するためのJavaScriptの具体的なコードを参考ま...

webpackのモバイル適応ソリューションの概要

目次レムフォルクスワーゲンサードパーティのUIフレームワークに適応する結論モバイル開発における最も一...

スネークゲームを作るための Pygame コード

目次使用されるPygame関数スクリーンの作成ヘビの作成ヘビを動かすゲームオーバーの処理食事を増やす...

Web ページのデザインを学ぶときに習得すべきコードは何ですか?

この記事では、Web ページ制作を学ぶ過程で習得すべきテクニックの一部を詳しく紹介します。これらの内...

Nginxはリバースプロキシを使用して負荷分散プロセス分析を実装します

導入dockerコンテナとdocker-composeに基づいて、Linux環境でのdockerの基...

Docker JVM メモリ使用量の表示

1. Docker コンテナのホスト マシンに入り、指定されたイメージを実行しているコンテナ ID ...

SpringBootをDockerにデプロイし、jarパッケージを置き換える方法の詳細な説明

目次プロジェクトディレクトリDockerファイルファイルの展開画像を生成するコンテナを起動するウェブ...

Apple の携帯電話のロックを解除するときに光沢のあるフォント効果を実現するために CSS3 を使用する例

0. はじめに2016 年 8 月 18 日 今日、iPhone をスライドさせてロックを解除すると...

JavaScript 非同期プログラミングにおける Promise の初期の使用法の詳細な説明

1. 概要Promise オブジェクトは、ES6 で提案された非同期プログラミングの仕様です。非同期...

Web ページのエンコーディングで gbk や gb2312 ではなく utf-8 が使用されるのはなぜですか?

選択肢がある場合は、UTF-8を使用することをお勧めします。実際、Windows システム自体のプロ...

ウェブデザインでテキストのサイズを合わせる方法: 小さなテキスト、大きな体験

iPadなどのモバイル端末の普及により、人々がモバイル端末で読書に費やす時間はますます長くなり、読...

IDEA2020.1.2 Webプロジェクトの作成とTomcatの設定に関する詳細なチュートリアル

この記事は、IDEA で Web プロジェクトを作成し、Tomcat を構成する方法についての統合記...

MySQL ストレステストツール Mysqlslap の使用

1. MySQL独自のストレステストツールMysqlslap mysqlslap は、mysql に...

Dockerfile に基づいて Tomcat イメージを構築する方法

Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...

MySQL メタデータで Hive テーブル作成ステートメントのコメント スクリプトを生成する方法

序文この記事は主にMySQLメタデータ生成Hiveテーブル作成ステートメントコメントスクリプトに関す...