Vue Element-ui テーブルはツリー構造テーブルを実現します

Vue Element-ui テーブルはツリー構造テーブルを実現します

この記事では、ツリー構造テーブルを実現するためのElement-uiテーブルの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

フロントエンドエフェクト表示:

el-tableではツリー型のデータの表示がサポートされています。行に children フィールドが含まれている場合、その行はツリー データと見なされます。ツリー データをレンダリングするときは、行キーを指定する必要があります。子ノード データの非同期読み込みをサポートします。

行の hasChildren フィールドを指定することで、子ノードを含む行を指定できます。 children と hasChildren は両方とも tree-props を介して設定できます。

row-key="id" および :tree-props="{children: 'children', hasChildren: 'hasChildren'} は必須です。

以下は Vue のテーブルツリーです。

 <!--表-->  
       <el-行>
            <el-table :data="tableData" style="width: 100%;" row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
                        <el-table-column prop="privilegeName" label="権限名" >
                        </el-table-column>
                        <el-table-column prop="privilegeCode" label="権限コード" >
                        </el-table-column>
                        <el-table-column prop="privilegeType" label="権限カテゴリ" :formatter="formatPrivilegeType" >
                        </el-table-column>
 
                        <el-table-column label="操作">
                            <テンプレート スロット スコープ="スコープ">
                                
                                <el-button type="primary" size="mini" @click="toAdd(scope)">追加</el-button>
                                <el-button type="primary" size="mini" @click="toEdit(scope)">編集</el-button>
                            </テンプレート>
                        </el-table-column>
                    </el-table>
                    <br>
                    <el-ページネーション
                        @size-change="ハンドルサイズ変更"
                        @current-change="現在の変更を処理する"
                        :current-page="ページ区切りページインデックス"
                        :ページサイズ="[5, 10, 20, 30, 40]"
                        :page-size=ページネーション.ページサイズ
                        レイアウト="合計、前、ページ、次"
                        :total=ページネーション合計>
                    </el-pagination>
</el-row>

バックエンドコード: データ構造クエリを実装するための SpringBoot+MyPlus+MySQL8

すべてのフロントエンドコード:

<スタイル>
</スタイル>
<テンプレート>
  <div id="権限マネージャー">
   <!--トップメニューバー-->
    <el-form :inline="true" class="demo-form-inline">
          <el-form-item>
            <el-ボタン
              クラス="el-icon-refresh"
              タイプ="プライマリ"
              @click="toAdd()">追加</el-button>
          </el-form-item>
      </el-form>
      <!--表-->  
       <el-行>
            <el-table :data="tableData" style="width: 100%;" row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
                        <el-table-column prop="privilegeName" label="権限名" >
                        </el-table-column>
                        <el-table-column prop="privilegeCode" label="権限コード" >
                        </el-table-column>
                        <el-table-column prop="privilegeType" label="権限カテゴリ" :formatter="formatPrivilegeType" >
                        </el-table-column>
 
                        <el-table-column label="操作">
                            <テンプレート スロット スコープ="スコープ">
                                
                                <el-button type="primary" size="mini" @click="toAdd(scope)">追加</el-button>
                                <el-button type="primary" size="mini" @click="toEdit(scope)">編集</el-button>
                            </テンプレート>
                        </el-table-column>
                    </el-table>
                    <br>
                    <el-ページネーション
                        @size-change="ハンドルサイズ変更"
                        @current-change="現在の変更を処理する"
                        :current-page="ページ区切りページインデックス"
                        :ページサイズ="[5, 10, 20, 30, 40]"
                        :page-size=ページネーション.ページサイズ
                        レイアウト="合計、前、ページ、次"
                        :total=ページネーション合計>
                    </el-pagination>
        </el-row>
 
 
  </div>
</テンプレート>
 
<スクリプト>
エクスポートデフォルト{
    名前: '特権マネージャー'、
    データ () {
     戻る {
        テーブルデータ: [],
        dialogFormEdit: false、
        ダイアログフォーム追加:false、
        特権:
          id: ''、
          権限名: ''、
          特権コード: ''、
          権限タイプ: ''、
          プロセスID: '0'
        },
        ページネーション:
            ページインデックス: 1,
            ページサイズ: 10,
            合計: 0,
        }
      }
    },
    方法:{
         初期化(){
        var 自己 = これ
         this.$axios({
            メソッド:'post',
            url:'/api/baoan/privilege/getPage',
            データ:{"page":this.pagination.pageIndex,"limit":this.pagination.pageSize, "pid": this.privilege.pid},
            ヘッダー:{
                'Content-Type':'application/json;charset=utf-8' //ここを変更するだけです}
        }).then(res => {
           コンソールログ(res);
           自己ページネーション合計 = res.data.datas.data.total;
           self.tableData = res.data.datas.data.records;
        })
          .catch(関数 (エラー) {
            コンソール.log(エラー)
          })
        },
        ハンドルサイズ変更(val) {
                console.log(`ページあたり${val}項目`);
                this.pagination.pageSize = val;
                this.pagination.pageIndex = 1;
                これを初期化します。
        },
        現在の変更を処理する(val) {
                 console.log(`現在のページ: ${val}`);
                this.pagination.pageIndex = val;
                これを初期化します。
        },
        //権限タイプの変換形式PrivilegeType: function( row, column) {
                 if(row.privilegeType === '1'){
                     'ディレクトリ' を返す
                 } そうでない場合、row.privilegeType === '2' の場合 {
                     'メニュー' を返す
                 } そうでない場合 (row.privilegeType === '3') {
                     'ボタン'を返す
                 } それ以外 {
                     戻る ''
                 }
        }
    },
    マウント: 関数 () {
      この.init()
  }
 
 
}
</スクリプト>

要約:

1. フロントエンド テーブルで変更する必要があるのは次の点です。

2. バックエンドの主な変更点は次のとおりです。

(1) ビューレイヤーにビューレイヤーコレクション属性を追加します。フロントエンドがツリー構造にレンダリングできるように、children という名前を付ける必要があることに注意してください。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueは要素ツリーコントロールを通じてツリーテーブルを実装します
  • Vue要素ツリーコントロールに点線を追加する詳細な説明
  • Vue コンポーネント ライブラリ ElementUI はテーブル読み込みツリー データのチュートリアルを実装します
  • Vue+element UI でツリーテーブルを実現
  • Vue+Element UI ツリー コントロールはドロップダウン機能メニュー (ツリー + ドロップダウン + 入力) を統合します。
  • Vue Element-ui はツリーコントロールノードを実装し、アイコンを追加します。詳細な説明

<<:  MySQLクエリ条件におけるonとwhereの配置の違いの分析

>>:  WindowsはVMwareを使用してLinux仮想マシンを作成し、CentOS7.2オペレーティングシステムをインストールします。

推薦する

SHTML 簡潔なチュートリアル

SHTMLとASPは似ています。SHTMLという名前のファイルでは、SSIの命令がASPの命令と同じ...

nginx+php-fpm サービスの HTTP ステータス コード 502 の詳細な分析

弊社の Web プロジェクトの 1 つでは、新しい都市の増加によりトラフィックと DB 負荷が増加し...

マップタグパラメータの詳細な紹介と使用例

マップ タグはペアで表示する必要があります。 <map> ....</map>...

JS で単一ファイルコンポーネントを実装する方法

目次概要単一ファイルコンポーネント基本概念シンプルなローダーコンポーネントコンテンツの解析コンポーネ...

Windows での MySQL の詳細なインストール手順と基本的な使用方法

目次1. MySQLをダウンロードする2. MySQLをインストールする3. MySQL の基本的な...

Vue プロジェクトでのスキャンコード決済の実装例 (デモ付き)

目次需要背景思考分析UI 表示始める1. 支払いコンポーネントテンプレートを作成する2. 支払いコン...

webpackの遅延読み込みとプリロードの詳細な説明

目次通常の読み込み遅延読み込みプリロードプリロードを使用しないプリロードの使用要約する通常の読み込み...

MySQLの主キーと外部キーの使用と説明を簡単に説明します

目次1. 外部キー制約外部キーとは何ですか?外部キーを使用する条件:外部キーの定義構文は次のとおりで...

ウェブページのカラーマッチングにおけるオーバーラップとソフトカラーマッチングの手法を詳しく説明

この記事には、細かい点は一切なく、カラーマッチングのテクニックをシェアするだけです。とてもシンプルで...

Nginxを使ってサーバー内で複数コンテナの共存を実現する方法

背景Tencent Linux クラウド ホストがあり、その上に Docker (ServiceDo...

テーブルを使用する場合と CSS を使用する場合 (経験の共有)

TW のメインテキスト ページは、以前は小さなモニターと低解像度のユーザーを考慮して幅が 850 ピ...

HTML iframe と frameset の違い_PowerNode Java Academy

導入1.<iframe> タグ: iframe は、ページ内に内部フレームを生成するイン...

WindowsでcmdからDOSウィンドウに入り、MySQLデータベースにアクセスします。

1. win + R を押して cmd と入力し、DOS ウィンドウに入ります。 2. MySQL...

CSS3 フィルター (フィルタ) ウェブページのグレーまたは黒モードのサンプルコードを実現

フロントエンドcss3 フィルターは、Web ページのグレー効果を実現できるだけでなく、ナイト モー...

ローカル Docker に Postgres 12 + pgadmin をインストールする方法 (Apple M1 をサポート)

目次導入Intel CPUをサポートApple M1のサポートテスト導入このプロジェクトでは最近、P...