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