diff --git a/.npmrc b/.npmrc
index f4a1ad483b0..36f12c7d054 100644
--- a/.npmrc
+++ b/.npmrc
@@ -8,6 +8,9 @@ public-hoist-pattern[]=*postcss*
public-hoist-pattern[]=@commitlint/*
public-hoist-pattern[]=czg
+@datatables.net:registry=https://npm.datatables.net/
+//npm.datatables.net/:_authToken=415ADA5E9172159FF08BBACB305D0139185F536053F169CDC4A66ACB7ADA8BC5
+
strict-peer-dependencies=false
auto-install-peers=true
dedupe-peer-dependents=true
diff --git a/apps/backend-mock/api/data_table/list.ts b/apps/backend-mock/api/data_table/list.ts
new file mode 100644
index 00000000000..c3a3952388c
--- /dev/null
+++ b/apps/backend-mock/api/data_table/list.ts
@@ -0,0 +1,5 @@
+import { MOCK_ORDERS } from '~/utils/mock-data';
+
+export default eventHandler((event) => {
+ return useResponseSuccess(MOCK_ORDERS);
+});
diff --git a/apps/backend-mock/api/data_table/update.ts b/apps/backend-mock/api/data_table/update.ts
new file mode 100644
index 00000000000..4da87581ce4
--- /dev/null
+++ b/apps/backend-mock/api/data_table/update.ts
@@ -0,0 +1,21 @@
+import { OrderInfo, MOCK_ORDERS } from '~/utils/mock-data';
+
+export default defineEventHandler(async (event) => {
+ const { action, data } = await readBody(event);
+ if (!action || !data) {
+ setResponseStatus(event, 400);
+ return useResponseError(
+ 'BadRequestException',
+ 'action and row data are required',
+ );
+ }
+
+ const findOrder = MOCK_ORDERS.find(
+ (item) => item.id === data['id'],
+ );
+
+ // const codes =
+ // MOCK_CODES.find((item) => item.username === userinfo.username)?.codes ?? [];
+
+ return useResponseSuccess(findOrder);
+});
diff --git a/apps/backend-mock/utils/mock-data.ts b/apps/backend-mock/utils/mock-data.ts
index b0a2bc1a640..74cecd951b0 100644
--- a/apps/backend-mock/utils/mock-data.ts
+++ b/apps/backend-mock/utils/mock-data.ts
@@ -30,6 +30,54 @@ export const MOCK_USERS: UserInfo[] = [
},
];
+export interface OrderInfo {
+ id: number;
+ rid: string;
+ openOrder: number;
+ destroyOrder: number;
+ sort: string;
+ time: number;
+}
+
+export const MOCK_ORDERS: OrderInfo[] = [
+ { id: 1, rid: 'UX-23492349244', openOrder: 0, destroyOrder: 1, sort: 'A', time: 320800 },
+ { id: 2, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 0, sort: 'B', time: 320800 },
+ { id: 3, rid: 'CU-3492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 4, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'A', time: 320800 },
+ { id: 5, rid: 'AX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 6, rid: 'BU-23492349244', openOrder: 0, destroyOrder: 1, sort: 'B', time: 320800 },
+ { id: 7, rid: 'UX-23492349244', openOrder: 0, destroyOrder: 0, sort: 'C', time: 320800 },
+ { id: 8, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'D', time: 320800 },
+ { id: 9, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 0, sort: 'C', time: 320800 },
+ { id: 10, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 11, rid: 'UX-5592349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 12, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 13, rid: 'UX-235492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 14, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 15, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 16, rid: 'UX-5164921649244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 17, rid: 'UX-2317923417244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 18, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 19, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 20, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 21, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 22, rid: 'UX-23492349244', openOrder: 0, destroyOrder: 0, sort: 'C', time: 320800 },
+ { id: 23, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 24, rid: 'UX-43492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 25, rid: 'UX-23492349244', openOrder: 0, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 26, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 0, sort: 'C', time: 320800 },
+ { id: 27, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 28, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 29, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 30, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 0, sort: 'C', time: 320800 },
+ { id: 31, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 32, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 33, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 0, sort: 'C', time: 320800 },
+ { id: 34, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ { id: 35, rid: 'UX-23492349244', openOrder: 1, destroyOrder: 1, sort: 'C', time: 320800 },
+ // Add more rows as needed
+];
+
export const MOCK_CODES = [
// super
{
diff --git a/apps/web-antd/src/assets/buttons.dataTables.css b/apps/web-antd/src/assets/buttons.dataTables.css
new file mode 100644
index 00000000000..03fb797bf98
--- /dev/null
+++ b/apps/web-antd/src/assets/buttons.dataTables.css
@@ -0,0 +1,559 @@
+@keyframes dtb-spinner {
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@-o-keyframes dtb-spinner {
+ 100% {
+ -o-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-ms-keyframes dtb-spinner {
+ 100% {
+ -ms-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-webkit-keyframes dtb-spinner {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-moz-keyframes dtb-spinner {
+ 100% {
+ -moz-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+div.dataTables_wrapper {
+ position: relative;
+}
+
+div.dt-buttons {
+ position: initial;
+}
+div.dt-buttons .dt-button {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+div.dt-button-info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ margin-top: -100px;
+ margin-left: -200px;
+ background-color: white;
+ border-radius: 0.75em;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);
+ text-align: center;
+ z-index: 2003;
+ overflow: hidden;
+}
+div.dt-button-info h2 {
+ padding: 2rem 2rem 1rem 2rem;
+ margin: 0;
+ font-weight: normal;
+}
+div.dt-button-info > div {
+ padding: 1em 2em 2em 2em;
+}
+
+div.dtb-popover-close {
+ position: absolute;
+ top: 6px;
+ right: 6px;
+ width: 22px;
+ height: 22px;
+ text-align: center;
+ border-radius: 3px;
+ cursor: pointer;
+ z-index: 2003;
+}
+
+button.dtb-hide-drop {
+ display: none !important;
+}
+
+div.dt-button-collection-title {
+ text-align: center;
+ padding: 0.3em 0.5em 0.5em;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.9em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+div.dt-button-collection-title:empty {
+ display: none;
+}
+
+span.dt-button-spacer {
+ display: inline-block;
+ margin: 0.5em;
+ white-space: nowrap;
+}
+span.dt-button-spacer.bar {
+ border-left: 1px solid rgba(0, 0, 0, 0.3);
+ vertical-align: middle;
+ padding-left: 0.5em;
+}
+span.dt-button-spacer.bar:empty {
+ height: 1em;
+ width: 1px;
+ padding-left: 0;
+}
+
+div.dt-button-collection .dt-button-active {
+ padding-right: 3em;
+}
+div.dt-button-collection .dt-button-active:after {
+ position: absolute;
+ top: 50%;
+ margin-top: -10px;
+ right: 1em;
+ display: inline-block;
+ content: "✓";
+ color: inherit;
+}
+div.dt-button-collection .dt-button-active.dt-button-split {
+ padding-right: 0;
+}
+div.dt-button-collection .dt-button-active.dt-button-split:after {
+ display: none;
+}
+div.dt-button-collection .dt-button-active.dt-button-split > *:first-child {
+ padding-right: 3em;
+}
+div.dt-button-collection .dt-button-active.dt-button-split > *:first-child:after {
+ position: absolute;
+ top: 50%;
+ margin-top: -10px;
+ right: 1em;
+ display: inline-block;
+ content: "✓";
+ color: inherit;
+}
+div.dt-button-collection .dt-button-active-a a {
+ padding-right: 3em;
+}
+div.dt-button-collection .dt-button-active-a a:after {
+ position: absolute;
+ right: 1em;
+ display: inline-block;
+ content: "✓";
+ color: inherit;
+}
+div.dt-button-collection span.dt-button-spacer {
+ width: 100%;
+ font-size: 0.9em;
+ text-align: center;
+ margin: 0.5em 0;
+}
+div.dt-button-collection span.dt-button-spacer:empty {
+ height: 0;
+ width: 100%;
+}
+div.dt-button-collection span.dt-button-spacer.bar {
+ border-left: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+ padding-left: 0;
+}
+
+@media print {
+ table.dataTable tr > * {
+ box-shadow: none !important;
+ }
+}
+html.dark div.dt-button-info {
+ background-color: var(--dt-html-background);
+ border: 1px solid rgba(255, 255, 255, 0.15);
+}
+
+div.dt-buttons > .dt-button,
+div.dt-buttons > div.dt-button-split .dt-button {
+ position: relative;
+ display: inline-block;
+ box-sizing: border-box;
+ margin-left: 0.167em;
+ margin-right: 0.167em;
+ margin-bottom: 0.333em;
+ padding: 0.5em 1em;
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ border-radius: 2px;
+ cursor: pointer;
+ font-size: 0.88em;
+ line-height: 1.6em;
+ color: inherit;
+ white-space: nowrap;
+ overflow: hidden;
+ background-color: rgba(0, 0, 0, 0.1); /* Fallback */
+ background: linear-gradient(to bottom, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(230, 230, 230, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ text-decoration: none;
+ outline: none;
+ text-overflow: ellipsis;
+}
+div.dt-buttons > .dt-button:first-child,
+div.dt-buttons > div.dt-button-split .dt-button:first-child {
+ margin-left: 0;
+}
+div.dt-buttons > .dt-button.disabled,
+div.dt-buttons > div.dt-button-split .dt-button.disabled {
+ cursor: default;
+ opacity: 0.4;
+}
+div.dt-buttons > .dt-button.dt-button-active:not(.disabled),
+div.dt-buttons > div.dt-button-split .dt-button.dt-button-active:not(.disabled) {
+ background-color: rgba(0, 0, 0, 0.1); /* Fallback */
+ background: linear-gradient(to bottom, rgba(179, 179, 179, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(179, 179, 179, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");
+ box-shadow: inset 1px 1px 3px #999999;
+}
+div.dt-buttons > .dt-button.dt-button-active:not(.disabled):hover:not(.disabled),
+div.dt-buttons > div.dt-button-split .dt-button.dt-button-active:not(.disabled):hover:not(.disabled) {
+ box-shadow: inset 1px 1px 3px #999999;
+ background-color: rgba(0, 0, 0, 0.1); /* Fallback */
+ background: linear-gradient(to bottom, rgba(128, 128, 128, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(128, 128, 128, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");
+}
+div.dt-buttons > .dt-button:hover,
+div.dt-buttons > div.dt-button-split .dt-button:hover {
+ text-decoration: none;
+}
+div.dt-buttons > .dt-button:hover:not(.disabled),
+div.dt-buttons > div.dt-button-split .dt-button:hover:not(.disabled) {
+ border: 1px solid #666;
+ background-color: rgba(0, 0, 0, 0.1); /* Fallback */
+ background: linear-gradient(to bottom, rgba(153, 153, 153, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(153, 153, 153, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");
+}
+div.dt-buttons > .dt-button:focus:not(.disabled),
+div.dt-buttons > div.dt-button-split .dt-button:focus:not(.disabled) {
+ outline: 2px solid rgb(53, 132, 228);
+}
+div.dt-buttons > .dt-button embed,
+div.dt-buttons > div.dt-button-split .dt-button embed {
+ outline: none;
+}
+div.dt-buttons > div.dt-button-split .dt-button:first-child {
+ border-right: 1px solid rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+div.dt-buttons > div.dt-button-split .dt-button:first-child:hover {
+ border-right: 1px solid #666;
+}
+div.dt-buttons > div.dt-button-split .dt-button:last-child {
+ border-left: 1px solid transparent;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+div.dt-buttons > div.dt-button-split .dt-button:last-child:hover {
+ border-left: 1px solid #666;
+}
+div.dt-buttons span.dt-button-down-arrow {
+ position: relative;
+ top: -2px;
+ font-size: 10px;
+ padding-left: 10px;
+ line-height: 1em;
+ opacity: 0.6;
+}
+div.dt-buttons div.dt-button-split {
+ display: inline-block;
+}
+div.dt-buttons div.dt-button-split .dt-button:first-child {
+ margin-right: 0;
+}
+div.dt-buttons div.dt-button-split .dt-button:last-child {
+ margin-left: -1px;
+ padding-left: 0.75em;
+ padding-right: 0.75em;
+ z-index: 2;
+}
+div.dt-buttons div.dt-button-split .dt-button:last-child span {
+ padding-left: 0;
+}
+
+div.dt-button-collection {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 200px;
+ margin-top: 3px;
+ margin-bottom: 3px;
+ padding: 0.75em 0;
+ border: 1px solid rgba(0, 0, 0, 0.4);
+ background-color: white;
+ overflow: hidden;
+ z-index: 2002;
+ border-radius: 5px;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);
+ box-sizing: border-box;
+}
+div.dt-button-collection .dt-button {
+ position: relative;
+ left: 0;
+ right: 0;
+ width: 100%;
+ display: block;
+ float: none;
+ background: none;
+ margin: 0;
+ padding: 0.5em 1em;
+ border: none;
+ text-align: left;
+ cursor: pointer;
+ color: inherit;
+}
+div.dt-button-collection .dt-button.dt-button-active {
+ background: none;
+ box-shadow: none;
+}
+div.dt-button-collection .dt-button.disabled {
+ cursor: default;
+ opacity: 0.4;
+}
+div.dt-button-collection .dt-button:hover:not(.disabled) {
+ border: none;
+ background: rgba(153, 153, 153, 0.1);
+ box-shadow: none;
+}
+div.dt-button-collection div.dt-button-split {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-content: flex-start;
+ align-items: stretch;
+}
+div.dt-button-collection div.dt-button-split button.dt-button {
+ margin: 0;
+ display: inline-block;
+ width: 0;
+ flex-grow: 1;
+ flex-shrink: 0;
+ flex-basis: 50px;
+}
+div.dt-button-collection div.dt-button-split button.dt-button-split-drop {
+ min-width: 33px;
+ flex: 0;
+}
+div.dt-button-collection.fixed .dt-button {
+ border-radius: 0.25em;
+ background: rgba(255, 255, 255, 0.1);
+}
+div.dt-button-collection.fixed {
+ position: fixed;
+ display: block;
+ top: 50%;
+ left: 50%;
+ margin-left: -75px;
+ border-radius: 5px;
+ background-color: white;
+ padding: 0.5em;
+}
+div.dt-button-collection.fixed.two-column {
+ margin-left: -200px;
+}
+div.dt-button-collection.fixed.three-column {
+ margin-left: -225px;
+}
+div.dt-button-collection.fixed.four-column {
+ margin-left: -300px;
+}
+div.dt-button-collection.fixed.columns {
+ margin-left: -409px;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -308px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -203px;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -100px;
+ }
+}
+div.dt-button-collection.fixed > :last-child {
+ max-height: 100vh;
+ overflow: auto;
+}
+div.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {
+ display: block !important;
+ -webkit-column-gap: 8px;
+ -moz-column-gap: 8px;
+ -ms-column-gap: 8px;
+ -o-column-gap: 8px;
+ column-gap: 8px;
+}
+div.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {
+ -webkit-column-break-inside: avoid;
+ break-inside: avoid;
+}
+div.dt-button-collection.two-column {
+ width: 400px;
+}
+div.dt-button-collection.two-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 2;
+}
+div.dt-button-collection.three-column {
+ width: 450px;
+}
+div.dt-button-collection.three-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 3;
+}
+div.dt-button-collection.four-column {
+ width: 600px;
+}
+div.dt-button-collection.four-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 4;
+}
+div.dt-button-collection .dt-button {
+ border-radius: 0;
+}
+div.dt-button-collection.columns {
+ width: auto;
+}
+div.dt-button-collection.columns > :last-child {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 6px;
+ width: 818px;
+ padding-bottom: 1px;
+}
+div.dt-button-collection.columns > :last-child .dt-button {
+ min-width: 200px;
+ flex: 0 1;
+ margin: 0;
+}
+div.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {
+ justify-content: space-between;
+}
+div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 1 1 32%;
+}
+div.dt-button-collection.columns.dtb-b2 .dt-button {
+ flex: 1 1 48%;
+}
+div.dt-button-collection.columns.dtb-b1 .dt-button {
+ flex: 1 1 100%;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 612px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 406px;
+ }
+ div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 0 1 32%;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 200px;
+ }
+}
+
+div.dt-button-background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.7); /* Fallback */
+ background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */
+ z-index: 2001;
+}
+
+.dt-button.processing {
+ color: rgba(0, 0, 0, 0.2);
+}
+.dt-button.processing:after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 16px;
+ height: 16px;
+ margin: -8px 0 0 -8px;
+ box-sizing: border-box;
+ display: block;
+ content: " ";
+ border: 2px solid rgb(40, 40, 40);
+ border-radius: 50%;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ animation: dtb-spinner 1500ms infinite linear;
+ -o-animation: dtb-spinner 1500ms infinite linear;
+ -ms-animation: dtb-spinner 1500ms infinite linear;
+ -webkit-animation: dtb-spinner 1500ms infinite linear;
+ -moz-animation: dtb-spinner 1500ms infinite linear;
+}
+
+@media screen and (max-width: 640px) {
+ div.dt-buttons {
+ float: none !important;
+ text-align: center;
+ }
+}
+html.dark div.dt-buttons > .dt-button,
+html.dark div.dt-buttons > div.dt-button-split .dt-button {
+ border: 1px solid rgb(89, 91, 94);
+ background: rgba(255, 255, 255, 0.15);
+}
+html.dark div.dt-buttons > .dt-button.dt-button-active:not(.disabled),
+html.dark div.dt-buttons > div.dt-button-split .dt-button.dt-button-active:not(.disabled) {
+ background: rgba(179, 179, 179, 0.15);
+ box-shadow: inset 1px 1px 2px black;
+}
+html.dark div.dt-buttons > .dt-button.dt-button-active:not(.disabled):hover:not(.disabled),
+html.dark div.dt-buttons > div.dt-button-split .dt-button.dt-button-active:not(.disabled):hover:not(.disabled) {
+ background: rgba(128, 128, 128, 0.15);
+ box-shadow: inset 1px 1px 3px black;
+}
+html.dark div.dt-buttons > .dt-button:hover:not(.disabled),
+html.dark div.dt-buttons > div.dt-button-split .dt-button:hover:not(.disabled) {
+ background: rgba(179, 179, 179, 0.15);
+}
+html.dark div.dt-buttons > .dt-button:focus:not(.disabled),
+html.dark div.dt-buttons > div.dt-button-split .dt-button:focus:not(.disabled) {
+ outline: 2px solid rgb(110, 168, 254);
+}
+html.dark div.dt-buttons > div.dt-button-split .dt-button:first-child {
+ border-right: 1px solid rgba(255, 255, 255, 0.1);
+}
+html.dark div.dt-buttons > div.dt-button-split .dt-button:first-child:hover {
+ border-right: 1px solid rgb(89, 91, 94);
+}
+html.dark div.dt-buttons > div.dt-button-split .dt-button:last-child:hover {
+ border-left: 1px solid rgb(89, 91, 94);
+}
+html.dark div.dt-button-collection {
+ border: 1px solid rgba(255, 255, 255, 0.15);
+ background-color: rgb(33, 37, 41);
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);
+}
diff --git a/apps/web-antd/src/router/routes/modules/dashboard.ts b/apps/web-antd/src/router/routes/modules/dashboard.ts
index a8cdb05da08..16edeefcfaa 100644
--- a/apps/web-antd/src/router/routes/modules/dashboard.ts
+++ b/apps/web-antd/src/router/routes/modules/dashboard.ts
@@ -14,6 +14,16 @@ const routes: RouteRecordRaw[] = [
name: 'Dashboard',
path: '/',
children: [
+ {
+ name: 'Test CSV Table',
+ path: '/test',
+ component: () => import('#/views/test/index.vue'),
+ meta: {
+ affixTab: true,
+ icon: 'lucide:table',
+ title: 'Test Table CSV',
+ },
+ },
{
name: 'Analytics',
path: '/analytics',
diff --git a/apps/web-antd/src/views/test/index.vue b/apps/web-antd/src/views/test/index.vue
new file mode 100644
index 00000000000..9969ffc8937
--- /dev/null
+++ b/apps/web-antd/src/views/test/index.vue
@@ -0,0 +1,235 @@
+
+
+
+
+
+ Nr |
+ Unique return code |
+ open P Yes / No |
+ destroy p Yes / No |
+ sort |
+ Created |
+
+
+
+
+
+
+
+
diff --git a/download/Editor-2.3.2.zip b/download/Editor-2.3.2.zip
new file mode 100644
index 00000000000..83e37e1da18
Binary files /dev/null and b/download/Editor-2.3.2.zip differ