From e65a432f5c9fc11d15d53ae0e16e5f4b7d62400a Mon Sep 17 00:00:00 2001
From: wsj <593216709@qq.com>
Date: Sat, 17 Oct 2026 20:53:17 +0800
Subject: [PATCH] feat: api

---
 .claude/skills/new-page/templates/table-page/index.tsx |   77 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 77 insertions(+), 0 deletions(-)

diff --git a/.claude/skills/new-page/templates/table-page/index.tsx b/.claude/skills/new-page/templates/table-page/index.tsx
new file mode 100644
index 0000000..5bc99e8
--- /dev/null
+++ b/.claude/skills/new-page/templates/table-page/index.tsx
@@ -0,0 +1,77 @@
+import { useCallback, useMemo, useRef } from 'react';
+import { PlusOutlined } from '@ant-design/icons';
+import { ProTable } from '@ant-design/pro-components';
+import type { ActionType } from '@ant-design/pro-components';
+import { App as AntdApp, Button } from 'antd';
+import { createXxxColumns } from './columns';
+import { deleteXxx, getXxxList } from './server';
+import type { XxxQuery, XxxRecord } from './types';
+import './Xxx.scss';
+
+const Xxx = () => {
+  const actionRef = useRef<ActionType>();
+  const { message, modal } = AntdApp.useApp();
+
+  const handleDelete = useCallback(
+    (record: XxxRecord) => {
+      modal.confirm({
+        title: '删除记录',
+        content: `确定删除「${record.name}」吗?删除后不可恢复。`,
+        okText: '删除',
+        cancelText: '取消',
+        okButtonProps: { danger: true },
+        onOk: async () => {
+          await deleteXxx(record.key);
+          message.success('已删除');
+          actionRef.current?.reload();
+        },
+      });
+    },
+    [message, modal],
+  );
+
+  const columns = useMemo(
+    () => createXxxColumns({ onDelete: handleDelete }),
+    [handleDelete],
+  );
+
+  return (
+    <div className="xxx-page">
+      <div className="page-header">
+        <div>
+          <h1 className="page-header__title">页面标题</h1>
+          <p className="page-header__desc">页面说明。</p>
+        </div>
+      </div>
+
+      <ProTable<XxxRecord, XxxQuery>
+        rowKey="key"
+        actionRef={actionRef}
+        columns={columns}
+        cardProps={{ className: 'xxx-table-card' }}
+        search={{ labelWidth: 'auto', defaultCollapsed: false }}
+        scroll={{ x: 900 }}
+        options={false}
+        pagination={{
+          defaultPageSize: 10,
+          showSizeChanger: true,
+          hideOnSinglePage: false,
+          showTotal: (total) => `共 ${total} 条`,
+        }}
+        toolBarRender={() => [
+          <Button
+            key="create"
+            type="primary"
+            icon={<PlusOutlined />}
+            onClick={() => message.info('TODO: 打开新增表单')}
+          >
+            新增
+          </Button>,
+        ]}
+        request={(params) => getXxxList(params)}
+      />
+    </div>
+  );
+};
+
+export default Xxx;

--
Gitblit v1.9.3