この記事の例では、vueシャトルボックスを上下に動かすための具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。 elementUIのツリーコンポーネントを使用する 機能要件: 1. 左側の子ノードを右側のテーブルに移動する 最初に遭遇する問題は、左側の子ノードだけにチェックボックスを表示する方法です。バックエンドから返されるパラメータを使用して、それが親ノードであるかどうかを判断します (実際には、バックエンドが親ノードに nocheck=true を追加する限り、問題ありません)。 // setLeftAgency: カプセル化されたリクエストインターフェース名 setLeftAgency(params).then((res) => { // 返されたコードが 0 の場合、成功を意味します if (res.data.code == 0) { データ = res.data とします。 data.forEach((item) => { //返されたデータを走査します。このパラメータがItemの場合、チェックボックスが表示されないように現在のデータにnocheck=trueを追加します。 if(item.Type!=='アイテム'){ アイテム.nocheck=true } // item.children を削除します。 }); this.parentNodes = data; // 変更されたデータを配列に入れて再度レンダリングします} 左側にツリー構造、中央にボタン、右側にテーブル(左側のツリー構造とテーブルはカプセル化され、直接インポートされます) <div class="leftTree"> // ここでの onCreated バインドは左ツリーの初期化関数であり、parentNodes は左ツリーのすべてのデータを格納します<ztree :setting="setting" @onCreated = 'onCreated' :parentNodes="parentNodes"></ztree> </div> <div class="centerBtn"> <el-button type="danger" plain icon="el-icon-arrow-right" @click="moveTable"></el-button> <el-button type="danger" plain icon="el-icon-d-arrow-left" @click="moveTreeAll"></el-button> <el-button type="danger" plain icon="el-icon-arrow-left" @click="moveTree"></el-button> <el-button type="danger" plain @click="moveUp(index)">上に移動</el-button> <el-button type="danger" plain @click="moveDown(index)">下へ移動</el-button> </div> <div class="rightTable"> <table :data.sync="tableData" // テーブル インターフェースによって返されるデータ ref="personListSettingPage" :loading='vxeLoading' v-model="selectGroups" // 右側のテーブルで選択された項目の配列をバインドします id="personListSettingPage" :showPagination= 'false' :height-full-screen = 'false' @sort-change="sortChange" @checkbox-change="selectChange" // 右側の選択項目の単一選択イベント @checkbox-all="selectAll" // 右側の選択項目の全選択イベント @data-refresh="getTableData()"> // 右側のテーブルデータを取得する関数 <vxe-table-column type="checkbox" width="60" align="center"></vxe-table-column> <table-column field="text" show-overflow="title" title="選択された指標" filterType='' > </テーブル列> </テーブル> </div> 使用されるパラメータ moveDownId:"", // 下に移動するときに保存されるデータmoveUpId:"", // 上に移動するときに右側のテーブルに保存されるデータselectGroups:[], // 右側の選択されたデータを保存するために使用されますtableData:[], // リクエストが返された後、左側のすべてのデータがこの配列に保存されますparentNodes:[], // 左側のツリーのすべてのデータtreeObj:"", 左のツリーの初期化と右のテーブルのチェックボックスの選択 // ztree を初期化する ツリーオブジェクトの作成時 this.treeObj = ツリーObj ノードを this.treeObj.getCheckedNodes(true); とします。 }, //チェックボックスイベント selectChange({checked, records}) { this.selectGroups = records // 選択したデータを配列に保存します}, //チェックボックスすべて選択イベント selectAll({checked, records}) { this.selectGroups = レコード }, 上へ移動 上へ移動(インデックス){ if(this.selectGroups.length>0){ // 右側に選択された項目があるかどうかを確認します。goOrnot = true this.selectGroups.find((seItem)=>{ //右側のタブで選択された項目を走査し、対応する ID を見つけます if(seItem.id==this.moveUpId.id){ this.$message.warning(this.moveUpId.text+"この行を上に移動する余地がありません") goOrnot = 偽 } }) if(行くか行かないか){ this.tableData.forEach((item,index)=>{ // 右側のテーブル内のすべてのデータを走査し、 this.$set(item,'rowIndex',index) //JavaScript の制限により、vue.js はオブジェクト プロパティの追加と削除を監視できないため、ビューが更新されるように $set または Object.assign(target, source) を使用する必要があります。}) フラグを true にする this.selectGroups.forEach((val,index2)=>{ this.tableData.find((itm,ind)=>{ if(val.id==itm.id){ if(itm.rowIndex==0){ // 右側の選択されたデータを走査し、すべてのデータと比較します。ID が同じ場合は、追加した rowIndex 属性の値を決定します。$message.warning(itm.text+"この行を上に移動する余地はありません") this.moveUpId = itm // 現在のデータを保存する flag = false 戻る }それ以外{ if(flag){ // 複数のデータ項目を移動できるようになりました let changeItem = JSON.parse(JSON.stringify(this.tableData[itm.rowIndex-1])) this.tableData.splice(itm.rowIndex-1,1); this.tableData.splice(itm.rowIndex,0,changeItem) } } } }) }) } }それ以外{ this.$message.warning('移動するデータを選択してください') } }, 下に移動 下へ移動(インデックス){ if(this.selectGroups.length>0){ 手放すOrnot = true this.selectGroups.find((seItem)=>{ if(seItem.id==this.moveDownId.id){ this.$message.warning(this.moveDownId.text+"この行を下に移動できる余地はありません") goOrnot = 偽 }それ以外{ this.moveFlag = true } }) if(行くか行かないか){ this.tableData.forEach((item,index)=>{ this.$set(item,'rowIndex',index) }) selectData = JSON.parse(JSON.stringify(this.tableData)) とします。 a = [...this.selectGroups] とします a.reverse().forEach((val,index2)=>{ selectData.find((itm,ind)=>{ if(val.id==itm.id){ itm.rowIndex==selectData.length-1の場合{ this.$message.warning(itm.text+"この行を下に移動できる余地はありません") this.moveDownId = itm this.moveFlag = false }それ以外{ if(this.moveFlag){ changeItem = itm とします delIndex=selectData.findIndex(i=>i.id == changeItem.id) とします。 this.tableData.splice(delIndex,1); this.tableData.splice(インデックス削除+1,0,項目変更) this.$refs.personListSettingPage.$refs.Table.setCheckboxRow(this.tableData[itm.rowIndex+1],true) // 右側のテーブルに ref=personListSettingPage を追加します } } } }) }) } }それ以外{ this.$message.warning('移動するデータを選択してください') } } テーブルをツリーに移動する /* ツリーに移動する */ ツリーを移動します(){ if(this.selectGroups.length>0){ this.selectGroups.forEach(item=>{ this.parentNodes.find(val=>{ if(val.id == item.pid){ /* ノードを追加 */ ノードを this.treeObj.getNodeByParam("id", val.id, null); にします。 this.treeObj.addNodes(ノード、アイテム) /* 新しく追加されたノードの選択状態を解除します*/ cancelNode を this.treeObj.getNodeByParam("id", item.id, null); this.treeObj.checkNode(cancelNode,false,true); } }) this.tableData.splice(this.tableData.findIndex(val => val.id === item.id), 1) }) }それ以外{ this.$message.warning('移動するデータを選択してください') } }, ツリーをテーブルに移動する /* テーブルに移動 */ テーブルを移動します(){ arr = [] とします ノードを this.treeObj.getCheckedNodes(true); とします。 ノードの長さが0以上の場合 ノード.forEach(item=>{ this.tableData.find(val=>{ arr.push(val.id) }) if(arr.indexOf(item.id)>-1) return this.$message.error("データが重複しています。再度追加しないでください") this.treeObj.removeNode(アイテム) this.tableData.push(this.filterObj(item,["checked","codeSetId",'id','img','infoItemFlag','isMult','itemType','locked','mult','orgCode','pid','sort','syrs','text'])) // 冗長なフィールドを削除するには、次のメソッドを呼び出します}) }それ以外{ this.$message.warning('データを確認してください') } }, カプセル化されたフィルターフィールド /* オブジェクトの冗長フィールドをフィルターする*/ フィルターオブジェクト(obj, arr) { 定数結果 = {} Object.keys(obj).filter((key) => arr.includes(key)).forEach((key) => { 結果[キー] = オブジェクト[キー] }) 結果を返す } 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Windows 10 64 ビット版に MySQL 5.6.35 をインストールするためのグラフィック チュートリアル
>>: Linux で top コマンドを使用する際のヒント
誰でも時々データをコピーして貼り付ける必要があると思います。コピーして貼り付けるためにファイルを開く...
目次背景技術的ソリューション具体的な実装要約する背景Element UI は、PC で人気の Vue...
効果デモ.html <html> <ヘッド> <メタ文字セット=&qu...
百度入力方式の担当者は、百度入力方式のオープンAPIの最大の利点は操作が便利であることであり、プラッ...
まず、例を挙げてみましょう(読みたくない場合は、以下の要約だけ読んでください)。 order_typ...
この記事では主に、Tencent TIM インスタント メッセージングを Vue と統合する方法を紹...
1. openssh-serverをインストールする yum インストール -y openssl o...
ハッシュ結合ハッシュ結合は実行にインデックスを必要とせず、ほとんどの場合、現在のブロックネストループ...
概要今日は主に、NGINX を Web サーバーとして設定する方法を共有します。内容は次のとおりです...
目次序文議論の基本概念議論の役割実パラメータと仮パラメータの数を取得する実際のパラメータ値を変更する...
この記事では、カルーセルマップの効果を実現するためのjQueryの具体的なコードを参考までに共有しま...
システムをコンピューターにインストールする方法がわからない場合は、Linux を学習したい場合は、仮...
序文Linux システムをインストールした後の最も一般的なタスクは、ネットワーク構成です。もちろん、...
とても嬉しいです。この問題に遭遇したとき、私はDockerコンテナのプロセス原理について話さなければ...
目次現状解決さらなる解決策やっと現状WeChat ミニプログラムには、ホームページ、個人ページ、いく...