Vue+elementuiはドロップダウンテーブルの複数選択と検索機能を実現します

Vue+elementuiはドロップダウンテーブルの複数選択と検索機能を実現します

この記事では、ドロップダウンテーブルの複数選択と検索を実現するためのvue+elementuiの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

elementuiに基づいてドロップダウンボックスとテーブルを組み合わせる

テンプレート

<el-フォーム 
:model="データフォーム" 
:rules="データルール" 
ref="データフォーム" 
@keyup.enter.native="dataFormSubmit()"
ラベル幅="120px" 
id="テーブルを選択" 
@click.native="クローズアップ">
<el-選択 
 v-model="dataForm.processDefinitionId" 
 placeholder="選択してください" 
 @change="handselect" 
 ref="選択"
 @click.native="deptogglePanel($event)" 
 複数 
 折りたたみタグ 
 サイズ="中">
  <el-オプション 
  v-for="(item,index) プロセス定義内" 
  :key="インデックス" 
  :label="アイテム名"
  :value="アイテムID">
  </el-option>
 </el-select>
 <div v-if="showTree" class="treeDiv" ref="tableList">
  <el-input placeholder="検索" 
  v-model="ss" 
  @input="手入力" 
  サイズ="中">
  </el-input>
  <el-テーブル 
  @select="ハンドル選択クリック" 
  @row-click="ハンドルリージョンノードクリック"
  @selection-change="ハンドル変更" 
  ref="moviesTable" :data="memberList" 境界
  :row-key="行キーを取得" 
  :cell-style="getCellStyle" 
  :header-cell-style="getHeaderCellStyle"
  @select-all="すべて選択">
   <el-テーブル列 
   タイプ="選択" 
   ヘッダーの位置合わせ="center" 
   align="center" 
   :reserve-selection="true"
   幅="50">
   </el-table-column>
   <el-テーブル列 
   v-for="(item, index) in Columns" 
   :key="インデックス" 
   :prop="アイテム.prop"
   :label="アイテム.ラベル" 
   :show-overflow-tooltip="true">
   </el-table-column>
 </el-table>
</div>
</el-form>

js

<スクリプト>
 エクスポートデフォルト{
  データ() {
   戻る {
    ss: ''、
    表示: 偽、
    無効: false、
    データフォーム: {
     termName: '', //プロジェクト名processDefinitionId: []

    },
    データルール: {
     プロセス定義ID: [{
      必須: true、
      メッセージ:「ファイルを選択してください」
      トリガー: '変更'
     }],
     用語名: [{
      必須: true、
      メッセージ: 「プロジェクト名は空にできません」
      トリガー: 'ぼかし'
     }],
    },
    編曲: [],
    processDefinition: [], //プロセステンプレートのドロップダウンボックス memberList: [], //リスト
    表示ツリー: false、
    列: [{
      プロパティ: '数値'、
      ラベル: 'ファイルエンコーディング'
     },
     {
      プロパティ: '名前',
      ラベル: 'ファイル名'
     },
     {
      プロパティ: 'typename',
      ラベル: 'テンプレートタイプ'
     },
     {
      プロパティ: 'efilename',
      ラベル: 'ファイルタイプ'
     },
     {
      プロパティ: 'バージョン'、
      ラベル: 'バージョン'
     },
    ]、
    getRowKeys(行) {
     row.id を返します。
    },
    複数選択: [],
    isShowSelect: 真
   }
  },
  作成された() {},
  マウント() {
  },
  時計:
   isShowSelect(val) {
    // select に付属するドロップダウン ボックスを非表示にします。this.$refs.select.blur();
   },
  },
  メソッド: {
   初期化() {
    this.$nextTick(() => {
     this.$refs['dataForm'].resetFields();
     this.isDisabled = false;
     this.arr = [];
     this.multipleSelection = [];
    }).then(() => {
     //アーカイブファイルのドロップダウンボックス this.$axios.get("/term/getFileArchiveSelect").then((res) => {
      console.log('アーカイブファイルドロップダウンボックス:', res);
      (res.data.code != 200)の場合{
       this.memberList = []
      } それ以外 {
       this.processDefinition = res.data.page.list
       this.memberList = res.data.page.list // テーブルの割り当て}
     })
     if (!this.dataForm.id) {
      // 新規 // this.menuListTreeSetCurrentNode()
     } それ以外 {
      this.$axios.get("/term/getTermDeatil/" + this.dataForm.id).then((res) => {
       console.log("プロジェクトの詳細:", res);
       (res.data.code != 200)の場合{
        // this.$message.error(res.data.msg)
       } それ以外 {
        データを res.data.termResVO とします。
        if (data.fileArchiveIds != '') {
         this.dataForm.processDefinitionId = data.fileArchiveIds.split(',')
        } それ以外 {
         this.dataForm.processDefinitionId = []
        }
        this.multipleSelection = data.child;
        this.rowMultipleChecked(this.multipleSelection);
       }
      })
     }
    }).catch((エラー) => {
     コンソール.log(エラー);
    });
   },
   // テーブル CSS
   セルスタイルを取得する() {
    「text-align:center;」を返します
   },
   ヘッダーセルスタイルを取得します。
    「background: rgba(9, 37, 56,0.1);text-align:center; background: linear-gradient(to bottom,#ffffff 0,#eeeeee 100%);padding: 4px 5px;」を返します。
   },
   // 入力をクリックするとバブルが防止され、テーブルの表示と非表示が制御されます deptogglePanel(event) {
    this.isShowSelect = !this.isShowSelect; //元の選択ドロップダウンボックスイベントを非表示にする || (event = window.event)
    event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true)
    this.showTree ? this.tableHide() : this.tableShow()
   },
   //テーブルを表示する tableShow() {
    this.showTree = true
    document.addEventListener('click', this.tableHideList, false)
    this.rowMultipleChecked(this.multipleSelection);
   },
   //テーブルを非表示にする tableHide() {
    this.showTree = false
    document.addEventListener('click', this.tableHideList, false)
   },
   テーブルHideList(e) {
    (this.$refs.tableList && !this.$refs.tableList.contains(e.target)) の場合 {
     this.tableHide()
    }
   },
   // テーブルノードをクリック handleRegionNodeClick(data) {
    this.showTree = true
   },
   //複数選択 handleSelectClick(data) {
    this.showTree = true
   },
   //すべて選択 selectAll(data) {
    this.showTree = true
   },
   // 選択変更テーブル複数選択ボックス変更イベント handleChange(data){// テーブル内の選択された行 this.arr = [];
    for (let i in data) {
     this.arr.push(データ[i].id)
    }
    this.dataForm.processDefinitionId = this.arr; //割り当てを選択 this.multipleSelection = data; //確認してmultipleSelection配列に格納},
   //テーブル複数選択ボックス選択判定 rowMultipleChecked(multipleSelection) {
    console.log(複数選択)
    複数選択が null の場合
     (j = 0; j < multipleSelection.length; j++) の場合 {
      (i = 0 とします; i < this.memberList.length; i++) {
       if (multipleSelection[j].id == this.memberList[i].id){//バックエンドから送信された値にIDが存在する場合は、複数選択ボックスを選択します this.$nextTick(() =>{//必須 if (this.$refs.movi​​esTable != undefined) {
          this.$refs.movi​​esTable.toggleRowSelection(this.memberList[i], true);
         }
        })
       }
      }
     }
    }
   },
   //ファイルを削除します handselect(value){//Select はテーブルに関連付けられています let data = this.multipleSelection;
    arr = [] とします。
    if (value.length > 0){//multipleSelection 内の値を削除します (選択されたすべての値)
     (j = 0; j < data.length; j++) の場合 {
      (値のインデックスデータ[j].id)== -1の場合{
       データ.スプライス(j, 1)
      }
     }
     this.multipleSelection = データ
    } それ以外 {
     this.multipleSelection = [];
     データ = [];
    }
    for (let s in data) {
     arr.push(データ[s].id)
    }
    if (arr != null){//どの値をチェック解除する必要があるかを判断する必要があります (let i = 0; i < this.memberList.length; i++) {
      (arr.indexOf(this.memberList[i].id)== -1)の場合{
       this.$refs.movi​​esTable.toggleRowSelection(this.memberList[i], false);
      }
     }
    }
   },
   //検索 handinput() {
    コンソールにログ出力します。
    this.tableShow()
    this.$axios.get('/term/getFileArchiveSelect').then((res) => {
     コンソールログ(res);
     res.data.code != 200 の場合 {} そうでない場合 {
      this.processDefinition = res.data.page.list
      this.memberList = res.data.page.list
      console.log(メンバーリスト)
      resultData = this.memberList.filter(data => { とします。
       (data.number.indexOf(this.ss) != -1 || data.name.indexOf(this.ss) != -1 || の場合
        data.typename.indexOf(this.ss) != -1 || data.version.indexOf(this.ss) != -
        1 || data.efilename.indexOf(this.ss) != -1) { //判定条件を追加し続けることができます return true;
       }
      });
      this.memberList = 結果データ;
     }
    })
   },
   // フォーム送信 dataFormSubmit() {
    this.$refs['dataForm'].validate((valid) => {
     (有効)の場合{
      url = this.dataForm.id ? '/term/updateTerm' : '/term/addTerm' とします
      if (this.dataForm.id == '') {
       this.isDisabled = true;
      }
      this.dataForm.id = this.dataForm.id || 未定義;
      console.log(このデータフォーム);
     }
    })
   },
  },
 }
</スクリプト>

CS

<スタイル>
 .applicaWord .el-upload-list__item .el-icon-close-tip {
  表示: なし !重要;
 }
 .treeDiv {
  位置: 絶対;
  上: 52px;
  左: -1px;
  zインデックス: 1000;
  幅: 100%;
  オーバーフロー:自動;
  最大高さ: 280px;
  /* 境界線: 1px 実線 #ccc; */
  境界線の半径: 6px;
  背景: #FFFFFF;
 }

 .treeDiv::-webkit-スクロールバー{
  /*全体的なスクロールバーのスタイル*/
  幅: 4px;
  /*高さと幅はそれぞれ水平スクロールバーと垂直スクロールバーのサイズに対応します*/
  高さ: 4px;
 }

 .treeDiv::-webkit-スクロールバー-サムネイル {
  /*スクロールバー内の小さな四角*/
  境界線の半径: 5px;
  -webkit-box-shadow: インセット 0 0 5px rgba(0, 0, 0, 0.2);
  背景: rgba(0, 0, 0, 0.2);
 }

 .treeDiv::-webkit-スクロールバートラック{
  /*スクロールバートラック*/
  -webkit-box-shadow: インセット 0 0 5px rgba(0, 0, 0, 0.2);
  境界線の半径: 0;
  背景: rgba(0, 0, 0, 0.1);
 }

 .treeDiv .el-table {
  フォントサイズ: 14px;
 }

 .treeDiv .el-table /deep/ td {
  パディング: 4px 0;
 }

 #selectTable .el-select {
  幅: 100%;
 }

 #selectTable .el-input {
  幅: 100%;
 }

 #kuan .el-form-item__content {
  幅: 80%;
 }
</スタイル>

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

以下もご興味があるかもしれません:
  • Vue3+Element+Tsは、フォームの基本的な検索リセットやその他の機能を実装します
  • Vue+element はローカル検索機能付きのドロップダウン メニューを実装します
  • Vue elementuiは、検索バーのパブリックコンポーネントのカプセル化のサンプルコードを実装します。
  • Vue+Elementは検索キーワードの強調表示機能を実現
  • Vue 要素のグループ化 + 複数選択 + 検索可能な Select セレクタの実装例
  • vue + 要素を使用してテーブルページングとフロントエンド検索を実装する方法
  • vue Element-ui 入力リモート検索と変更提案表示テンプレートのサンプルコード
  • VUE+要素開発背景管理検索機能

<<:  CSS3+JavaScript を使用したクールな呼吸効果のサンプル コード

>>:  Linux の MariaDB データベースについて

推薦する

MySQL コマンドを使用してインデックスを作成、削除、およびクエリする方法の紹介

MySQL データベース テーブルでは、インデックスを作成、表示、再構築、削除できるため、クエリ速度...

Dockerコンテナを使用してホストネットワークにアクセスする方法

最近、nginx をリバース プロキシとして使用し、docker で nginx を実行するシステム...

MySQLデータの挿入、更新、削除の詳細

目次1. 挿入2. 更新3. 削除1. 挿入 顧客に挿入( 顧客.顧客住所、 顧客.cust_cit...

Linux で MongoDB のリモート自動バックアップを実装する方法

序文古いプロジェクトを引き継ぐ苦労 - MongoDB クラスターの学習と構築に関する前回の記事を読...

40 CSS/JSスタイルと機能的な技術処理

1-ドロップダウン選択ボックスのスタイル設定 - ドロップダウン リストを変更します。 2- <...

mysqlは、現在の時刻が開始時刻と終了時刻の間にあるかどうかを判断し、開始時刻と終了時刻が空であることが許可されます。

目次要件: 進行中のアクティビティ データを照会する次のSQLクエリは、上記の4つの要件を満たし、タ...

Linuxの同時実行は簡単です。このようにするだけです

並行処理関数 i の `grep server /etc/hosts | awk '{pri...

MySQL 作成ルーチン権限に関する注意事項

1. ユーザーにルーチン作成権限がある場合は、プロシージャ | 関数を作成できます。 2. ユーザー...

JS はシンプルなブロック崩しピンボールゲームを実装します

この記事では、ブロック崩しピンボールゲームを実装するためのJSの具体的なコードを参考までに紹介します...

CSS3 と JavaScript を使用して Web カラー ピッカーのサンプル コードを開発する

この例の Web カラー ピッカー機能は、ページ効果を実現するために CSS3 を使用します。つまり...

Zabbixを使用してOracleテーブルスペースの操作プロセスを監視する

0. 概要Zabbix は非常に強力なオープンソースの監視ツールです。以下では、Zabbix がテー...

CSS3はリストの無限スクロール/カルーセル効果を実現します

効果プレビューアイデア現在のリストを最後の項目までスクロールし、すぐに最初の項目に戻ります。問題1....

JVM 上の高性能データ形式ライブラリ パッケージである Apache Arrow の紹介とアーキテクチャ (Gkatziouras)

Apache Arrow は、BigQuery を含むさまざまなビッグデータ ツールで使用される一...

CentOS7でルートパスワードをリセットする方法

レンガを移動するプロセスでは、さまざまな環境および構成の問題があり、毎回異なるエラーが発生します。 ...

JavaScript はパスワードボックスの入力検証を実装します

サーバーの負荷を軽減するために、ユーザーが入力するときにフロントエンドページで簡単な検証を実行する必...