|
|
|
@ -445,8 +445,8 @@ const headerColumns = [ |
|
|
|
debug |
|
|
|
debug |
|
|
|
> |
|
|
|
> |
|
|
|
<template #status="{ row }"> |
|
|
|
<template #status="{ row }"> |
|
|
|
<el-tag :type="row.status === 'active' ? 'success' : 'warning'" size="small"> |
|
|
|
<el-tag :type="row?.status === 'active' ? 'success' : 'warning'" size="small"> |
|
|
|
{{ row.status }} |
|
|
|
{{ row?.status }} |
|
|
|
</el-tag> |
|
|
|
</el-tag> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
<template #actions="{ row }"> |
|
|
|
<template #actions="{ row }"> |
|
|
|
@ -538,7 +538,7 @@ const i18nColumns = [ |
|
|
|
debug |
|
|
|
debug |
|
|
|
> |
|
|
|
> |
|
|
|
<template #combinedStatus="{ row }"> |
|
|
|
<template #combinedStatus="{ row }"> |
|
|
|
<el-tag :type="getStatusType(row.status)" size="small">{{ row.status }}</el-tag> |
|
|
|
<el-tag :type="getStatusType(row?.status)" size="small">{{ row?.status }}</el-tag> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
<template #combinedActions="{ row }"> |
|
|
|
<template #combinedActions="{ row }"> |
|
|
|
<el-button link type="primary" size="small">View</el-button> |
|
|
|
<el-button link type="primary" size="small">View</el-button> |
|
|
|
@ -615,7 +615,7 @@ import { |
|
|
|
HeaderCellRenderer, |
|
|
|
HeaderCellRenderer, |
|
|
|
HeaderCellRendererParams, |
|
|
|
HeaderCellRendererParams, |
|
|
|
} from "element-plus/es/components/table-v2/src/types.mjs"; |
|
|
|
} from "element-plus/es/components/table-v2/src/types.mjs"; |
|
|
|
import type { ListTableColumn } from "../../../packages/base/data/list-table-v2.vue"; |
|
|
|
import { type ListTableColumn } from "../../../packages/base/data/list-table-v2"; |
|
|
|
|
|
|
|
|
|
|
|
// --- Data Generator --- |
|
|
|
// --- Data Generator --- |
|
|
|
const generateRows = (count: number) => { |
|
|
|
const generateRows = (count: number) => { |
|
|
|
@ -752,7 +752,7 @@ const formatColumns = [ |
|
|
|
// ================================================================ |
|
|
|
// ================================================================ |
|
|
|
// SECTION 5: Custom Cell Renderer |
|
|
|
// SECTION 5: Custom Cell Renderer |
|
|
|
// ================================================================ |
|
|
|
// ================================================================ |
|
|
|
const statusRenderer: CellRenderer<T> = ({ cellData }) => { |
|
|
|
const statusRenderer: CellRenderer<any> = ({ cellData }) => { |
|
|
|
testResults.cellRenderer = true; |
|
|
|
testResults.cellRenderer = true; |
|
|
|
const status = cellData as string; |
|
|
|
const status = cellData as string; |
|
|
|
const type = |
|
|
|
const type = |
|
|
|
@ -764,7 +764,7 @@ const statusRenderer: CellRenderer<T> = ({ cellData }) => { |
|
|
|
); |
|
|
|
); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const actionRenderer: CellRenderer<T> = ({ rowData }) => { |
|
|
|
const actionRenderer: CellRenderer<any> = ({ rowData }) => { |
|
|
|
return ( |
|
|
|
return ( |
|
|
|
<div style="display: flex; gap: 4px;"> |
|
|
|
<div style="display: flex; gap: 4px;"> |
|
|
|
<ElButton size="small" link type="primary"> |
|
|
|
<ElButton size="small" link type="primary"> |
|
|
|
@ -777,8 +777,8 @@ const actionRenderer: CellRenderer<T> = ({ rowData }) => { |
|
|
|
); |
|
|
|
); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const rendererData = allRows.slice(0, 20); |
|
|
|
const rendererData = ref(allRows.slice(0, 20)); |
|
|
|
const rendererColumns: ListTableColumn<T>[] = [ |
|
|
|
const rendererColumns: ListTableColumn<any>[] = [ |
|
|
|
{ key: "id", name: "ID" }, |
|
|
|
{ key: "id", name: "ID" }, |
|
|
|
{ key: "caseName", name: "Case Name" }, |
|
|
|
{ key: "caseName", name: "Case Name" }, |
|
|
|
{ key: "status", name: "Status", cellRenderer: statusRenderer }, |
|
|
|
{ key: "status", name: "Status", cellRenderer: statusRenderer }, |
|
|
|
@ -786,7 +786,7 @@ const rendererColumns: ListTableColumn<T>[] = [ |
|
|
|
key: "priority", |
|
|
|
key: "priority", |
|
|
|
name: "Priority", |
|
|
|
name: "Priority", |
|
|
|
cellRenderer: ({ cellData }) => { |
|
|
|
cellRenderer: ({ cellData }) => { |
|
|
|
const colors: Record<string, string> = { high: "danger", medium: "warning", low: "info" }; |
|
|
|
const colors = { high: "danger" as const, medium: "warning" as const, low: "info" as const }; |
|
|
|
return ( |
|
|
|
return ( |
|
|
|
<ElTag type={colors[cellData] || "info"} size="small"> |
|
|
|
<ElTag type={colors[cellData] || "info"} size="small"> |
|
|
|
{cellData} |
|
|
|
{cellData} |
|
|
|
@ -800,13 +800,13 @@ const rendererColumns: ListTableColumn<T>[] = [ |
|
|
|
const testCellRendererResize = () => { |
|
|
|
const testCellRendererResize = () => { |
|
|
|
testResults.cellRendererMini = true; |
|
|
|
testResults.cellRendererMini = true; |
|
|
|
// Force re-render by toggling data |
|
|
|
// Force re-render by toggling data |
|
|
|
rendererData = [...allRows.slice(0, 20)]; |
|
|
|
rendererData.value = allRows.slice(0, 20); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// ================================================================ |
|
|
|
// ================================================================ |
|
|
|
// SECTION 6: Custom Header Renderer |
|
|
|
// SECTION 6: Custom Header Renderer |
|
|
|
// ================================================================ |
|
|
|
// ================================================================ |
|
|
|
const headerRenderer: HeaderCellRenderer<T> = ({ column }) => { |
|
|
|
const headerRenderer: HeaderCellRenderer<any> = ({ column }) => { |
|
|
|
testResults.headerRenderer = true; |
|
|
|
testResults.headerRenderer = true; |
|
|
|
return ( |
|
|
|
return ( |
|
|
|
<span> |
|
|
|
<span> |
|
|
|
@ -816,7 +816,7 @@ const headerRenderer: HeaderCellRenderer<T> = ({ column }) => { |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const headerData = allRows.slice(0, 20); |
|
|
|
const headerData = allRows.slice(0, 20); |
|
|
|
const headerColumns: ListTableColumn<T>[] = [ |
|
|
|
const headerColumns: ListTableColumn<any>[] = [ |
|
|
|
{ key: "id", name: "ID", headerCellRenderer: headerRenderer }, |
|
|
|
{ key: "id", name: "ID", headerCellRenderer: headerRenderer }, |
|
|
|
{ key: "caseName", name: "Case Name", headerCellRenderer: headerRenderer }, |
|
|
|
{ key: "caseName", name: "Case Name", headerCellRenderer: headerRenderer }, |
|
|
|
{ key: "taskName", name: "Task Name", headerCellRenderer: headerRenderer }, |
|
|
|
{ key: "taskName", name: "Task Name", headerCellRenderer: headerRenderer }, |
|
|
|
@ -842,7 +842,7 @@ const handleDynamicQuery = () => { |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const testResize = () => { |
|
|
|
const testResize = () => { |
|
|
|
dynamicData.data = [...allRows.slice(0, 10)]; |
|
|
|
dynamicData.data = allRows.slice(0, 10); |
|
|
|
testResults.dynamicHeight = true; |
|
|
|
testResults.dynamicHeight = true; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
@ -954,12 +954,12 @@ const runCombinedTest = () => { |
|
|
|
combinedExample.page = 1; |
|
|
|
combinedExample.page = 1; |
|
|
|
handleCombinedQuery(); |
|
|
|
handleCombinedQuery(); |
|
|
|
setTimeout(() => { |
|
|
|
setTimeout(() => { |
|
|
|
combinedData.data = [...allRows.slice(0, 10)]; |
|
|
|
combinedData.data = allRows.slice(0, 10); |
|
|
|
testResults.combined.renderer = true; |
|
|
|
testResults.combined.renderer = true; |
|
|
|
}, 100); |
|
|
|
}, 100); |
|
|
|
}; |
|
|
|
}; |
|
|
|
const reloadCombinedData = () => { |
|
|
|
const reloadCombinedData = () => { |
|
|
|
combinedData.data = [...allRows.slice(0, 10)]; |
|
|
|
combinedData.data = allRows.slice(0, 10); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// ================================================================ |
|
|
|
// ================================================================ |
|
|
|
@ -969,19 +969,19 @@ const rendererType = ref<"jsx" | "simple">("jsx"); |
|
|
|
const edgeExample = reactive({ page: 1, size: 10 }); |
|
|
|
const edgeExample = reactive({ page: 1, size: 10 }); |
|
|
|
const edgeData = reactive({ data: allRows.slice(0, 10), total: allRows.length }); |
|
|
|
const edgeData = reactive({ data: allRows.slice(0, 10), total: allRows.length }); |
|
|
|
|
|
|
|
|
|
|
|
const edgeIdRenderer: CellRenderer<T> = ({ cellData }) => { |
|
|
|
const edgeIdRenderer: CellRenderer<any> = ({ cellData }) => { |
|
|
|
return <span style="font-weight: bold; color: var(--el-color-primary)">#{cellData}</span>; |
|
|
|
return <span style="font-weight: bold; color: var(--el-color-primary)">#{cellData}</span>; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const edgeNameRenderer: CellRenderer<T> = ({ cellData }) => { |
|
|
|
const edgeNameRenderer: CellRenderer<any> = ({ cellData }) => { |
|
|
|
if (rendererType.value === "jsx") { |
|
|
|
if (rendererType.value === "jsx") { |
|
|
|
return <span style="font-style: italic">{cellData}</span>; |
|
|
|
return <span style="font-style: italic">{cellData}</span>; |
|
|
|
} |
|
|
|
} |
|
|
|
return <span>{cellData}</span>; |
|
|
|
return <span>{cellData}</span>; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const edgePriorityRenderer: CellRenderer<T> = ({ cellData }) => { |
|
|
|
const edgePriorityRenderer: CellRenderer<any> = ({ cellData }) => { |
|
|
|
const colors: Record<string, string> = { high: "danger", medium: "warning", low: "success" }; |
|
|
|
const colors = { high: "danger" as const, medium: "warning" as const, low: "success" as const }; |
|
|
|
return ( |
|
|
|
return ( |
|
|
|
<ElTag type={colors[cellData]} size="small"> |
|
|
|
<ElTag type={colors[cellData]} size="small"> |
|
|
|
{cellData} |
|
|
|
{cellData} |
|
|
|
@ -989,7 +989,7 @@ const edgePriorityRenderer: CellRenderer<T> = ({ cellData }) => { |
|
|
|
); |
|
|
|
); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const edgeActionsRenderer: CellRenderer<T> = () => { |
|
|
|
const edgeActionsRenderer: CellRenderer<any> = () => { |
|
|
|
return ( |
|
|
|
return ( |
|
|
|
<div style="display: flex; gap: 4px;"> |
|
|
|
<div style="display: flex; gap: 4px;"> |
|
|
|
<ElButton size="small" type="primary"> |
|
|
|
<ElButton size="small" type="primary"> |
|
|
|
@ -999,7 +999,7 @@ const edgeActionsRenderer: CellRenderer<T> = () => { |
|
|
|
); |
|
|
|
); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const edgeColumns: ListTableColumn<T>[] = [ |
|
|
|
const edgeColumns: ListTableColumn<any>[] = [ |
|
|
|
{ key: "id", name: "ID", fixed: "left" as const, width: 80, cellRenderer: edgeIdRenderer }, |
|
|
|
{ key: "id", name: "ID", fixed: "left" as const, width: 80, cellRenderer: edgeIdRenderer }, |
|
|
|
{ key: "caseName", name: "Case Name", cellRenderer: edgeNameRenderer }, |
|
|
|
{ key: "caseName", name: "Case Name", cellRenderer: edgeNameRenderer }, |
|
|
|
{ key: "priority", name: "Priority", cellRenderer: edgePriorityRenderer }, |
|
|
|
{ key: "priority", name: "Priority", cellRenderer: edgePriorityRenderer }, |
|
|
|
@ -1020,7 +1020,7 @@ const changePageRenderer = () => { |
|
|
|
|
|
|
|
|
|
|
|
const toggleRendererType = () => { |
|
|
|
const toggleRendererType = () => { |
|
|
|
rendererType.value = rendererType.value === "jsx" ? "simple" : "jsx"; |
|
|
|
rendererType.value = rendererType.value === "jsx" ? "simple" : "jsx"; |
|
|
|
edgeData.data = [...allRows.slice(0, 10)]; |
|
|
|
edgeData.data = allRows.slice(0, 10); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
onMounted(() => { |
|
|
|
onMounted(() => { |
|
|
|
|