1. 成果を達成する2. バックエンドの実装2.1 エンティティクラス@データ @ApiModel(説明 = "データ辞書") @テーブル名("辞書") パブリッククラスDict { プライベート静的最終long serialVersionUID = 1L; @ApiModelProperty(値 = "id") プライベートな Long ID; @ApiModelProperty(値 = "作成時間") @JsonFormat(パターン = "yyyy-MM-dd HH:mm:ss") @テーブルフィールド("create_time") プライベート日付createTime; @ApiModelProperty(値 = "更新時間") @TableField("更新時間") プライベート日付更新時間; @ApiModelProperty(値 = "論理削除 (1: 削除済み、0: 削除されていない)") @テーブルロジック @TableField("削除済み") プライベート整数 isDeleted; @ApiModelProperty(値 = "その他のパラメータ") @テーブルフィールド(存在する = false) プライベート Map<String,Object> パラメータ = new HashMap<>(); @ApiModelProperty(値 = "上位 ID") @テーブルフィールド("親ID") プライベート Long 親 ID; @ApiModelProperty(値 = "名前") @テーブルフィールド("名前") プライベート文字列名; @ApiModelProperty(値 = "値") @TableField("値") プライベート文字列値。 @ApiModelProperty(値 = "エンコーディング") @TableField("dict_code") プライベート文字列 dictCode; @ApiModelProperty(value = "子ノードを含めるかどうか") @テーブルフィールド(存在する = false) プライベートブール値hasChildren; } 上記には、データベースに存在しない場合でも、hasChildren プロパティを含める必要があります。これは、要素フレームワークによって必須です。 2.2 データベース内のデータ構造2.3 バックエンドインターフェースバックエンドで完全に実装されている場合は、階層構造に従ってすべてのデータをクエリし、それをカプセル化する再帰クエリを記述するだけです。しかし、要素のテーブル コンポーネントはいくつかのものをカプセル化しています。ここでは、親 ID に従ってサブデータ リストをクエリするだけで済みます。 コントローラーコード: //親 ID に従ってサブデータ リストを照会します @ApiOperation(value = "親 ID に従ってサブデータ リストを照会します") @GetMapping("子データ/{id} を検索") パブリック結果findChildData(@PathVariable Long id){ リスト<Dict> list = dictService.findChildData(id); Result.ok(リスト)を返します。 } サービス サービス実装クラス @サービス パブリッククラス DictServiceImpl は ServiceImpl<DictMapper, Dict> を拡張し、DictService を実装します { //親IDに従ってサブデータリストを照会する @Override パブリックリスト<Dict> findChildData(Long id) { QueryWrapper<Dict> wrapper = 新しい QueryWrapper<>(); wrapper.eq("parent_id",id); リスト<Dict> リスト = baseMapper.selectList(ラッパー); //リストコレクション内の各辞書オブジェクトにhasChildrenを設定します リスト.forEach(x->{ 長い dictId = x.getId(); ブール値 isChild = this.isChildren(dictId); x.setHasChildren(子が存在するかどうか) }); リストを返します。 } // id の下に子データがあるかどうかを判断 private boolean isChildren(Long id){ QueryWrapper<Dict> wrapper = 新しい QueryWrapper<>(); wrapper.eq("parent_id",id); 整数カウント = baseMapper.selectCount(ラッパー); カウント > 0 を返します。 } } 2.4 Swaggerはバックエンドの構造と機能が正常かどうかをテストします3. フロントエンドの実装3.1 ページにel-tableコンポーネントを導入するリスト.vue <テンプレート> <div class="アプリコンテナ"> <el-テーブル :data="リスト" スタイル="幅: 100%" 行キー="id" 国境 怠け者 :load="getChildrens" :tree-props="{children: 'children', hasChildren: 'hasChildren'}"> <el-table-column label="名前" width="230" align="left"> <テンプレート スロット スコープ="スコープ"> <span>{{ スコープ.行.名前 }}</span> </テンプレート> </el-table-column> <el-table-column label="エンコーディング" width="220"> <テンプレート スロット スコープ="{行}"> {{ row.dictCode }} </テンプレート> </el-table-column> <el-table-column ラベル="値" 幅="230" 配置="左"> <テンプレート スロット スコープ="スコープ"> <span>{{ スコープ.行.値 }}</span> </テンプレート> </el-table-column> <el-table-column label="作成時間" align="center"> <テンプレート スロット スコープ="スコープ"> <span>{{ スコープ.行.作成時間 }}</span> </テンプレート> </el-table-column> </el-table> </div> </テンプレート> <スクリプト> '@/api/dict' から dict をインポートします エクスポートデフォルト{ 名前: 'リスト', データ(){ 戻る { list:[], //データ辞書リスト配列 dialogImportVisible:false, //ポップアップボックスを表示するかどうかを設定します} }, 作成された() { this.getDictList(1) }, 方法:{ //データ辞書リスト getDictList(id){ dict.dictList(id) .then(応答=>{ this.list=レスポンスデータ }) }, getChildrens(ツリー、ツリーノード、解決) { dict.dictList(tree.id).then(応答 => { 解決(応答データ) }) }, } } </スクリプト> <スタイルスコープ> </スタイル> 上記の重要なメソッドは getChildrens メソッドです。このメソッドは、各レイヤーでバックエンド インターフェイスを呼び出して子ノード データを照会し、それをツリー構造のテーブル データに追加します。 バックエンド構造を呼び出すツールjsファイルdict.js '@/utils/request' からリクエストをインポートします エクスポートデフォルト{ //データ辞書リスト dictList(id){ リクエストを返す({ url: `/admin/cmn/dict/findChildData/${id}`, メソッド: 'get' }) }, } 3.2 実施効果フロントエンドとバックエンドのテストに問題はありません。遅延読み込みが使用されているため、子ノードのデータは親ノードがクリックされたときにのみ読み込まれ、データ量が多すぎることによるシステムのフリーズを回避できます。 Vue elementUI のツリー構造テーブルと遅延読み込みの実装に関するこの記事はこれで終わりです。Vue elementUI の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 新しい CSS :where および :is 疑似クラス関数とは何ですか?
1.0 Redis の永続性Redis はメモリ内データベースです。サーバー プロセスが終了すると、...
適切なデータベース仕様は、ソフトウェア実装の複雑さを軽減し、通信コストを削減するのに役立ちます。この...
CSS にカスケード メカニズムがあるのはなぜですか? CSS では、同じ要素の特定のプロパティに同...
目次ロックの概要ロックの分類データベース操作の粒度データ操作の種類MySQL ロックさまざまなストレ...
1. 要件の説明特定の要素については、背景background-imageを半透明にしたいが、テキス...
この記事の例では、製品の拡大鏡効果を実現するためのVueの具体的なコードを共有しています。具体的な内...
RGBカラーテーブル色英語名RGB 16色雪255 250 250 #FFFAFAゴーストホワイト2...
目次概要方法1: params経由でパラメータを渡す方法2: クエリを通じてパラメータを渡す方法3:...
ザビックスZabbix ([`zæbiks]) は、WEB インターフェースに基づいて分散システム監...
Vue foreach配列を記述し、jsで配列をトラバースする方法シナリオVueでAxiosを使用し...
目次実装のアイデア:ステップ 1: TabBar と TabBarItem のコンポーネント カプセ...
最も単純な hello world 出力イメージを作成することは最も簡単なスタートですが、実行中のコ...
目次これ方法オブジェクト内これを隠した厳密モードこれを変更してこれいつものように、まずはコードを見て...
1. RPM パッケージのインストール手順: 1. soft.version.rpm などの対応する...
Vue 言語と要素コンポーネントを使用して、コード コンテンツの入力を必要とし、ハイライト表示が可能...