优化采购品目列表懒加载显示

This commit is contained in:
吴红兵
2026-02-23 10:40:19 +08:00
parent f893b9efc9
commit c80fb3d5c1
2 changed files with 55 additions and 10 deletions

View File

@@ -18,7 +18,7 @@
import request from '/@/utils/request'; import request from '/@/utils/request';
/** /**
* 获取树形列表 * 获取树形列表(全量,数据量大时建议用懒加载接口)
* @param params 查询参数 * @param params 查询参数
*/ */
export function getTree(params?: any) { export function getTree(params?: any) {
@@ -29,6 +29,28 @@ export function getTree(params?: any) {
}); });
} }
/**
* 获取树根节点(懒加载用)
*/
export function getTreeRoots() {
return request({
url: '/purchase/purchasingcategory/tree/roots',
method: 'get'
});
}
/**
* 获取子节点(懒加载用)
* @param parentCode 父节点编码
*/
export function getTreeChildren(parentCode: string) {
return request({
url: '/purchase/purchasingcategory/tree/children',
method: 'get',
params: { parentCode }
});
}
/** /**
* 新增 * 新增
* @param obj 对象数据 * @param obj 对象数据

View File

@@ -21,12 +21,14 @@
</div> </div>
</template> </template>
<!-- 树形表格 --> <!-- 树形表格懒加载仅首屏加载根节点展开时再加载子节点 -->
<el-table <el-table
ref="tableRef" ref="tableRef"
:data="state.dataList" :data="state.dataList"
v-loading="state.loading" v-loading="state.loading"
stripe stripe
lazy
:load="loadTreeNode"
:cell-style="tableStyle.cellStyle" :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" :header-cell-style="tableStyle.headerCellStyle"
class="modern-table" class="modern-table"
@@ -88,7 +90,7 @@
<script setup lang="ts" name="PurchasingCategory"> <script setup lang="ts" name="PurchasingCategory">
import { ref, reactive, defineAsyncComponent } from 'vue' import { ref, reactive, defineAsyncComponent } from 'vue'
import { BasicTableProps, useTable } from "/@/hooks/table"; import { BasicTableProps, useTable } from "/@/hooks/table";
import { getTree, delObj } from "/@/api/finance/purchasingcategory"; import { getTreeRoots, getTreeChildren, delObj } from "/@/api/finance/purchasingcategory";
import { useMessage, useMessageBox } from "/@/hooks/message"; import { useMessage, useMessageBox } from "/@/hooks/message";
import { List, Document, DocumentCopy, EditPen } from '@element-plus/icons-vue' import { List, Document, DocumentCopy, EditPen } from '@element-plus/icons-vue'
@@ -100,19 +102,40 @@ const tableRef = ref()
const formDialogRef = ref() const formDialogRef = ref()
/** /**
* 查询树形数据方法 * 查询树根节点(懒加载:首屏只加载根节点)
* @param params - 查询参数
* @returns Promise<any>
*/ */
const queryTree = (params?: any) => { const queryTreeRoots = () => {
return getTree(params); return getTreeRoots().then((res: any) => {
const list = res?.data ?? [];
return { data: Array.isArray(list) ? list : [] };
});
};
/**
* 懒加载子节点:展开某行时按需请求子节点
* @param row 当前行
* @param treeNode 树节点信息
* @param resolve 回调,传入子节点数组
*/
const loadTreeNode = (row: any, treeNode: any, resolve: (data: any[]) => void) => {
const parentCode = row?.code;
if (!parentCode) {
resolve([]);
return;
}
getTreeChildren(parentCode)
.then((res: any) => {
const list = res?.data ?? [];
resolve(Array.isArray(list) ? list : []);
})
.catch(() => resolve([]));
}; };
/** /**
* 定义响应式表格数据 * 定义响应式表格数据
*/ */
const state: BasicTableProps = reactive<BasicTableProps>({ const state: BasicTableProps = reactive<BasicTableProps>({
pageList: queryTree, pageList: queryTreeRoots,
queryForm: {}, queryForm: {},
isPage: false, // 树形表格不分页 isPage: false, // 树形表格不分页
}); });