whistle.mock-plugins 1.1.3-dev.4 → 1.1.3-dev.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -125,8 +125,6 @@
125
125
 
126
126
  /**![holder](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTMwMCAyNzYuNWE1NiA1NiAwIDEwNTYtOTcgNTYgNTYgMCAwMC01NiA5N3ptMCAyODRhNTYgNTYgMCAxMDU2LTk3IDU2IDU2IDAgMDAtNTYgOTd6TTY0MCAyMjhhNTYgNTYgMCAxMDExMiAwIDU2IDU2IDAgMDAtMTEyIDB6bTAgMjg0YTU2IDU2IDAgMTAxMTIgMCA1NiA1NiAwIDAwLTExMiAwek0zMDAgODQ0LjVhNTYgNTYgMCAxMDU2LTk3IDU2IDU2IDAgMDAtNTYgOTd6TTY0MCA3OTZhNTYgNTYgMCAxMDExMiAwIDU2IDU2IDAgMDAtMTEyIDB6IiAvPjwvc3ZnPg==) */
127
127
 
128
- /**![import](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNODgwIDkxMkgxNDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjE0NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmgzNjBjNC40IDAgOCAzLjYgOCA4djU2YzAgNC40LTMuNiA4LTggOEgxODR2NjU2aDY1NlY1MjBjMC00LjQgMy42LTggOC04aDU2YzQuNCAwIDggMy42IDggOHYzNjBjMCAxNy43LTE0LjMgMzItMzIgMzJ6TTY1My4zIDQyNC42bDUyLjIgNTIuMmE4LjAxIDguMDEgMCAwMS00LjcgMTMuNmwtMTc5LjQgMjFjLTUuMS42LTkuNS0zLjctOC45LTguOWwyMS0xNzkuNGMuOC02LjYgOC45LTkuNCAxMy42LTQuN2w1Mi40IDUyLjQgMjU2LjItMjU2LjJjMy4xLTMuMSA4LjItMy4xIDExLjMgMGw0Mi40IDQyLjRjMy4xIDMuMSAzLjEgOC4yIDAgMTEuM0w2NTMuMyA0MjQuNnoiIC8+PC9zdmc+) */
129
-
130
128
  /**![info-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0wIDgyMGMtMjA1LjQgMC0zNzItMTY2LjYtMzcyLTM3MnMxNjYuNi0zNzIgMzcyLTM3MiAzNzIgMTY2LjYgMzcyIDM3Mi0xNjYuNiAzNzItMzcyIDM3MnoiIC8+PHBhdGggZD0iTTQ2NCAzMzZhNDggNDggMCAxMDk2IDAgNDggNDggMCAxMC05NiAwem03MiAxMTJoLTQ4Yy00LjQgMC04IDMuNi04IDh2MjcyYzAgNC40IDMuNiA4IDggOGg0OGM0LjQgMCA4LTMuNiA4LThWNDU2YzAtNC40LTMuNi04LTgtOHoiIC8+PC9zdmc+) */
131
129
 
132
130
  /**![info-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiA2NEMyNjQuNiA2NCA2NCAyNjQuNiA2NCA1MTJzMjAwLjYgNDQ4IDQ0OCA0NDggNDQ4LTIwMC42IDQ0OC00NDhTNzU5LjQgNjQgNTEyIDY0em0zMiA2NjRjMCA0LjQtMy42IDgtOCA4aC00OGMtNC40IDAtOC0zLjYtOC04VjQ1NmMwLTQuNCAzLjYtOCA4LThoNDhjNC40IDAgOCAzLjYgOCA4djI3MnptLTMyLTM0NGE0OC4wMSA0OC4wMSAwIDAxMC05NiA0OC4wMSA0OC4wMSAwIDAxMCA5NnoiIC8+PC9zdmc+) */
@@ -158,5 +156,3 @@
158
156
  /**![setting](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkyNC44IDYyNS43bC02NS41LTU2YzMuMS0xOSA0LjctMzguNCA0LjctNTcuOHMtMS42LTM4LjgtNC43LTU3LjhsNjUuNS01NmEzMi4wMyAzMi4wMyAwIDAwOS4zLTM1LjJsLS45LTIuNmE0NDMuNzQgNDQzLjc0IDAgMDAtNzkuNy0xMzcuOWwtMS44LTIuMWEzMi4xMiAzMi4xMiAwIDAwLTM1LjEtOS41bC04MS4zIDI4LjljLTMwLTI0LjYtNjMuNS00NC05OS43LTU3LjZsLTE1LjctODVhMzIuMDUgMzIuMDUgMCAwMC0yNS44LTI1LjdsLTIuNy0uNWMtNTIuMS05LjQtMTA2LjktOS40LTE1OSAwbC0yLjcuNWEzMi4wNSAzMi4wNSAwIDAwLTI1LjggMjUuN2wtMTUuOCA4NS40YTM1MS44NiAzNTEuODYgMCAwMC05OSA1Ny40bC04MS45LTI5LjFhMzIgMzIgMCAwMC0zNS4xIDkuNWwtMS44IDIuMWE0NDYuMDIgNDQ2LjAyIDAgMDAtNzkuNyAxMzcuOWwtLjkgMi42Yy00LjUgMTIuNS0uOCAyNi41IDkuMyAzNS4ybDY2LjMgNTYuNmMtMy4xIDE4LjgtNC42IDM4LTQuNiA1Ny4xIDAgMTkuMiAxLjUgMzguNCA0LjYgNTcuMUw5OSA2MjUuNWEzMi4wMyAzMi4wMyAwIDAwLTkuMyAzNS4ybC45IDIuNmMxOC4xIDUwLjQgNDQuOSA5Ni45IDc5LjcgMTM3LjlsMS44IDIuMWEzMi4xMiAzMi4xMiAwIDAwMzUuMSA5LjVsODEuOS0yOS4xYzI5LjggMjQuNSA2My4xIDQzLjkgOTkgNTcuNGwxNS44IDg1LjRhMzIuMDUgMzIuMDUgMCAwMDI1LjggMjUuN2wyLjcuNWE0NDkuNCA0NDkuNCAwIDAwMTU5IDBsMi43LS41YTMyLjA1IDMyLjA1IDAgMDAyNS44LTI1LjdsMTUuNy04NWEzNTAgMzUwIDAgMDA5OS43LTU3LjZsODEuMyAyOC45YTMyIDMyIDAgMDAzNS4xLTkuNWwxLjgtMi4xYzM0LjgtNDEuMSA2MS42LTg3LjUgNzkuNy0xMzcuOWwuOS0yLjZjNC41LTEyLjMuOC0yNi4zLTkuMy0zNXpNNzg4LjMgNDY1LjljMi41IDE1LjEgMy44IDMwLjYgMy44IDQ2LjFzLTEuMyAzMS0zLjggNDYuMWwtNi42IDQwLjEgNzQuNyA2My45YTM3MC4wMyAzNzAuMDMgMCAwMS00Mi42IDczLjZMNzIxIDcwMi44bC0zMS40IDI1LjhjLTIzLjkgMTkuNi01MC41IDM1LTc5LjMgNDUuOGwtMzguMSAxNC4zLTE3LjkgOTdhMzc3LjUgMzc3LjUgMCAwMS04NSAwbC0xNy45LTk3LjItMzcuOC0xNC41Yy0yOC41LTEwLjgtNTUtMjYuMi03OC43LTQ1LjdsLTMxLjQtMjUuOS05My40IDMzLjJjLTE3LTIyLjktMzEuMi00Ny42LTQyLjYtNzMuNmw3NS41LTY0LjUtNi41LTQwYy0yLjQtMTQuOS0zLjctMzAuMy0zLjctNDUuNSAwLTE1LjMgMS4yLTMwLjYgMy43LTQ1LjVsNi41LTQwLTc1LjUtNjQuNWMxMS4zLTI2LjEgMjUuNi01MC43IDQyLjYtNzMuNmw5My40IDMzLjIgMzEuNC0yNS45YzIzLjctMTkuNSA1MC4yLTM0LjkgNzguNy00NS43bDM3LjktMTQuMyAxNy45LTk3LjJjMjguMS0zLjIgNTYuOC0zLjIgODUgMGwxNy45IDk3IDM4LjEgMTQuM2MyOC43IDEwLjggNTUuNCAyNi4yIDc5LjMgNDUuOGwzMS40IDI1LjggOTIuOC0zMi45YzE3IDIyLjkgMzEuMiA0Ny42IDQyLjYgNzMuNkw3ODEuOCA0MjZsNi41IDM5Ljl6TTUxMiAzMjZjLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2czc4LjggMTc2IDE3NiAxNzYgMTc2LTc4LjggMTc2LTE3Ni03OC44LTE3Ni0xNzYtMTc2em03OS4yIDI1NS4yQTExMS42IDExMS42IDAgMDE1MTIgNjE0Yy0yOS45IDAtNTgtMTEuNy03OS4yLTMyLjhBMTExLjYgMTExLjYgMCAwMTQwMCA1MDJjMC0yOS45IDExLjctNTggMzIuOC03OS4yQzQ1NCA0MDEuNiA0ODIuMSAzOTAgNTEyIDM5MGMyOS45IDAgNTggMTEuNiA3OS4yIDMyLjhBMTExLjYgMTExLjYgMCAwMTYyNCA1MDJjMCAyOS45LTExLjcgNTgtMzIuOCA3OS4yeiIgLz48L3N2Zz4=) */
159
157
 
160
158
  /**![sort-ascending](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTgzOS42IDQzMy44TDc0OSAxNTAuNWE5LjI0IDkuMjQgMCAwMC04LjktNi41aC03Ny40Yy00LjEgMC03LjYgMi42LTguOSA2LjVsLTkxLjMgMjgzLjNjLS4zLjktLjUgMS45LS41IDIuOSAwIDUuMSA0LjIgOS4zIDkuMyA5LjNoNTYuNGM0LjIgMCA3LjgtMi44IDktNi44bDE3LjUtNjEuNmg4OWwxNy4zIDYxLjVjMS4xIDQgNC44IDYuOCA5IDYuOGg2MS4yYzEgMCAxLjktLjEgMi44LS40IDIuNC0uOCA0LjMtMi40IDUuNS00LjYgMS4xLTIuMiAxLjMtNC43LjYtNy4xek02NjMuMyAzMjUuNWwzMi44LTExNi45aDYuM2wzMi4xIDExNi45aC03MS4yem0xNDMuNSA0OTIuOUg2NzcuMnYtLjRsMTMyLjYtMTg4LjljMS4xLTEuNiAxLjctMy40IDEuNy01LjR2LTM2LjRjMC01LjEtNC4yLTkuMy05LjMtOS4zaC0yMDRjLTUuMSAwLTkuMyA0LjItOS4zIDkuM3Y0M2MwIDUuMSA0LjIgOS4zIDkuMyA5LjNoMTIyLjZ2LjRMNTg3LjcgODI4LjlhOS4zNSA5LjM1IDAgMDAtMS43IDUuNHYzNi40YzAgNS4xIDQuMiA5LjMgOS4zIDkuM2gyMTEuNGM1LjEgMCA5LjMtNC4yIDkuMy05LjN2LTQzYTkuMiA5LjIgMCAwMC05LjItOS4zek00MTYgNzAyaC03NlYxNzJjMC00LjQtMy42LTgtOC04aC01NmMtNC40IDAtOCAzLjYtOCA4djUzMGgtNzZjLTYuNyAwLTEwLjUgNy44LTYuMyAxM2wxMTIgMTQxLjlhOCA4IDAgMDAxMi42IDBsMTEyLTE0MS45YzQuMS01LjIuNC0xMy02LjMtMTN6IiAvPjwvc3ZnPg==) */
161
-
162
- /**![unordered-list](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkxMiAxOTJIMzI4Yy00LjQgMC04IDMuNi04IDh2NTZjMCA0LjQgMy42IDggOCA4aDU4NGM0LjQgMCA4LTMuNiA4LTh2LTU2YzAtNC40LTMuNi04LTgtOHptMCAyODRIMzI4Yy00LjQgMC04IDMuNi04IDh2NTZjMCA0LjQgMy42IDggOCA4aDU4NGM0LjQgMCA4LTMuNiA4LTh2LTU2YzAtNC40LTMuNi04LTgtOHptMCAyODRIMzI4Yy00LjQgMC04IDMuNi04IDh2NTZjMCA0LjQgMy42IDggOCA4aDU4NGM0LjQgMCA4LTMuNiA4LTh2LTU2YzAtNC40LTMuNi04LTgtOHpNMTA0IDIyOGE1NiA1NiAwIDEwMTEyIDAgNTYgNTYgMCAxMC0xMTIgMHptMCAyODRhNTYgNTYgMCAxMDExMiAwIDU2IDU2IDAgMTAtMTEyIDB6bTAgMjg0YTU2IDU2IDAgMTAxMTIgMCA1NiA1NiAwIDEwLTExMiAweiIgLz48L3N2Zz4=) */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "whistle.mock-plugins",
3
- "version": "1.1.3-dev.4",
3
+ "version": "1.1.3-dev.6",
4
4
  "description": "Whistle 插件,用于快速创建 API 模拟数据",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -9,8 +9,7 @@ import {
9
9
  import {
10
10
  PlusOutlined, EditOutlined, DeleteOutlined,
11
11
  FileTextOutlined, PlusCircleOutlined, SettingOutlined,
12
- SearchOutlined, FilterOutlined, AppstoreOutlined,
13
- UnorderedListOutlined, ReloadOutlined
12
+ SearchOutlined, FilterOutlined, ReloadOutlined
14
13
  } from '@ant-design/icons';
15
14
  import '../styles/interface-management.css';
16
15
  import axios from 'axios';
@@ -78,9 +77,8 @@ const InterfaceManagement = () => {
78
77
  const [previewContent, setPreviewContent] = useState(null);
79
78
  const [currentResponseId, setCurrentResponseId] = useState(null);
80
79
 
81
- // 搜索和视图状态
80
+ // 搜索状态
82
81
  const [searchValue, setSearchValue] = useState('');
83
- const [viewMode, setViewMode] = useState('table'); // 'table' or 'card'
84
82
  const [selectedRowKeys, setSelectedRowKeys] = useState([]);
85
83
  const [drawerVisible, setDrawerVisible] = useState(false);
86
84
 
@@ -605,10 +603,7 @@ const InterfaceManagement = () => {
605
603
  setSelectedRowKeys(selectedKeys);
606
604
  };
607
605
 
608
- // 切换视图模式
609
- const toggleViewMode = () => {
610
- setViewMode(viewMode === 'table' ? 'card' : 'table');
611
- };
606
+
612
607
 
613
608
  // 刷新数据
614
609
  const refreshData = () => {
@@ -1004,12 +999,7 @@ const InterfaceManagement = () => {
1004
999
  loading={interfacesLoading}
1005
1000
  />
1006
1001
  </Tooltip>
1007
- <Tooltip title={viewMode === 'table' ? '切换到卡片视图' : '切换到表格视图'}>
1008
- <Button
1009
- icon={viewMode === 'table' ? <AppstoreOutlined /> : <UnorderedListOutlined />}
1010
- onClick={toggleViewMode}
1011
- />
1012
- </Tooltip>
1002
+
1013
1003
  <Button
1014
1004
  type="primary"
1015
1005
  icon={<PlusOutlined />}
@@ -1232,154 +1222,32 @@ const InterfaceManagement = () => {
1232
1222
  </div>
1233
1223
 
1234
1224
  <Card className="list-container-card" bordered={false} bodyStyle={{ padding: 0 }}>
1235
- {/* 表格视图 */}
1236
- {viewMode === 'table' && (
1237
- <div className="interface-list-container">
1238
- <Table
1239
- columns={columns}
1240
- dataSource={filteredInterfaces}
1241
- rowKey="id"
1242
- loading={interfacesLoading}
1243
- onChange={handleTableChange}
1244
- rowSelection={{
1245
- selectedRowKeys,
1246
- onChange: onSelectChange,
1247
- }}
1248
- size="middle"
1249
- pagination={{
1250
- current: tableConfig.current,
1251
- pageSize: tableConfig.pageSize,
1252
- showSizeChanger: true,
1253
- showQuickJumper: true,
1254
- showTotal: (total, range) => `共 ${total} 个接口,显示第 ${range[0]}-${range[1]} 个`,
1255
- pageSizeOptions: ['10', '20', '50', '100'],
1256
- size: 'default'
1257
- }}
1258
- locale={{ emptyText: '暂无接口配置' }}
1259
- sortDirections={['ascend', 'descend']}
1260
- className="interface-table"
1261
- />
1262
- </div>
1263
- )}
1264
-
1265
- {/* 卡片视图 */}
1266
- {viewMode === 'card' && (
1267
- <div className="interface-card-view">
1268
- <Row gutter={[16, 16]} style={{ padding: 16 }}>
1269
- {interfacesLoading ? (
1270
- [1,2,3,4,5,6].map(i => (
1271
- <Col xs={24} sm={12} md={8} lg={8} xl={6} key={`loading-${i}`}>
1272
- <Card loading style={{ height: 180 }} />
1273
- </Col>
1274
- ))
1275
- ) : filteredInterfaces.length === 0 ? (
1276
- <Col span={24}>
1277
- <div className="empty-data">暂无接口配置</div>
1278
- </Col>
1279
- ) : (
1280
- filteredInterfaces.map(item => (
1281
- <Col xs={24} sm={12} md={8} lg={8} xl={6} key={item.id}>
1282
- <Card
1283
- className={`interface-card ${item.active === false ? 'inactive' : ''}`}
1284
- hoverable
1285
- >
1286
- <div className="interface-card-header">
1287
- <Switch
1288
- checked={item.active !== false}
1289
- onChange={(checked) => handleToggleActive(item.id, item.active !== false)}
1290
- size="small"
1291
- className="interface-card-switch"
1292
- />
1293
- <div className="interface-card-title">{item.name}</div>
1294
- {item.group && (
1295
- <Tag
1296
- color="blue"
1297
- className="interface-card-group"
1298
- onClick={() => setSelectedGroup(item.group)}
1299
- >
1300
- {item.group}
1301
- </Tag>
1302
- )}
1303
- </div>
1304
-
1305
- <div className="interface-card-content">
1306
- <div className="url-pattern-container">
1307
- <Tooltip title={item.urlPattern}>
1308
- <div className="url-pattern">{item.urlPattern}</div>
1309
- </Tooltip>
1310
- </div>
1311
-
1312
- <div className="interface-card-info">
1313
- <div className="info-item">
1314
- <span className="info-label">处理方式:</span>
1315
- <Badge
1316
- color={proxyTypes.find(t => t.value === item.proxyType)?.color || '#999'}
1317
- text={proxyTypes.find(t => t.value === item.proxyType)?.label || item.proxyType}
1318
- className="info-value"
1319
- />
1320
- </div>
1321
- <div className="info-item">
1322
- <span className="info-label">状态码:</span>
1323
- <span className={`status-badge status-${item.httpStatus >= 400 ? 'error' : item.httpStatus >= 300 ? 'warning' : 'success'}`}>
1324
- {item.httpStatus || 200}
1325
- </span>
1326
- </div>
1327
- </div>
1328
- </div>
1329
-
1330
- <div className="interface-card-actions">
1331
- <Button
1332
- type="primary"
1333
- size="small"
1334
- icon={<EditOutlined />}
1335
- onClick={() => handleEditInterface(item)}
1336
- >
1337
- 编辑
1338
- </Button>
1339
- <Popconfirm
1340
- title="确定要删除此接口吗?"
1341
- onConfirm={() => handleDeleteInterface(item.id)}
1342
- okText="确定"
1343
- cancelText="取消"
1344
- >
1345
- <Button
1346
- danger
1347
- size="small"
1348
- icon={<DeleteOutlined />}
1349
- >
1350
- 删除
1351
- </Button>
1352
- </Popconfirm>
1353
- </div>
1354
- </Card>
1355
- </Col>
1356
- ))
1357
- )}
1358
- </Row>
1359
-
1360
- {/* 卡片视图分页 */}
1361
- {filteredInterfaces.length > 0 && (
1362
- <div className="card-pagination">
1363
- <Pagination
1364
- current={tableConfig.current}
1365
- pageSize={tableConfig.pageSize}
1366
- total={filteredInterfaces.length}
1367
- showSizeChanger
1368
- showQuickJumper
1369
- showTotal={(total, range) => `共 ${total} 个接口,显示第 ${range[0]}-${range[1]} 个`}
1370
- pageSizeOptions={['10', '20', '50', '100']}
1371
- size="default"
1372
- onChange={(page, pageSize) => {
1373
- saveTableConfig({
1374
- current: page,
1375
- pageSize: pageSize
1376
- });
1377
- }}
1378
- />
1379
- </div>
1380
- )}
1381
- </div>
1382
- )}
1225
+ <div className="interface-list-container">
1226
+ <Table
1227
+ columns={columns}
1228
+ dataSource={filteredInterfaces}
1229
+ rowKey="id"
1230
+ loading={interfacesLoading}
1231
+ onChange={handleTableChange}
1232
+ rowSelection={{
1233
+ selectedRowKeys,
1234
+ onChange: onSelectChange,
1235
+ }}
1236
+ size="middle"
1237
+ pagination={{
1238
+ current: tableConfig.current,
1239
+ pageSize: tableConfig.pageSize,
1240
+ showSizeChanger: true,
1241
+ showQuickJumper: true,
1242
+ showTotal: (total, range) => `共 ${total} 个接口,显示第 ${range[0]}-${range[1]} 个`,
1243
+ pageSizeOptions: ['10', '20', '50', '100'],
1244
+ size: 'default'
1245
+ }}
1246
+ locale={{ emptyText: '暂无接口配置' }}
1247
+ sortDirections={['ascend', 'descend']}
1248
+ className="interface-table"
1249
+ />
1250
+ </div>
1383
1251
  </Card>
1384
1252
 
1385
1253
  {/* 接口编辑/创建模态框 */}
@@ -15,8 +15,7 @@ import {
15
15
  import {
16
16
  PlusOutlined, EditOutlined, DeleteOutlined,
17
17
  FileTextOutlined, PlusCircleOutlined, SettingOutlined,
18
- SearchOutlined, FilterOutlined, AppstoreOutlined,
19
- UnorderedListOutlined, ReloadOutlined
18
+ SearchOutlined, FilterOutlined, ReloadOutlined
20
19
  } from '@ant-design/icons';
21
20
  import '../styles/interface-management.css';
22
21
  import axios from 'axios';
@@ -84,9 +83,8 @@ const InterfaceManagement = () => {
84
83
  const [previewContent, setPreviewContent] = useState(null);
85
84
  const [currentResponseId, setCurrentResponseId] = useState(null);
86
85
 
87
- // 搜索和视图状态
86
+ // 搜索状态
88
87
  const [searchValue, setSearchValue] = useState('');
89
- const [viewMode, setViewMode] = useState('table'); // 'table' or 'card'
90
88
  const [selectedRowKeys, setSelectedRowKeys] = useState([]);
91
89
  const [drawerVisible, setDrawerVisible] = useState(false);
92
90
 
@@ -611,10 +609,7 @@ const InterfaceManagement = () => {
611
609
  setSelectedRowKeys(selectedKeys);
612
610
  };
613
611
 
614
- // 切换视图模式
615
- const toggleViewMode = () => {
616
- setViewMode(viewMode === 'table' ? 'card' : 'table');
617
- };
612
+
618
613
 
619
614
  // 刷新数据
620
615
  const refreshData = () => {
@@ -1025,12 +1020,7 @@ const InterfaceManagement = () => {
1025
1020
  loading={interfacesLoading}
1026
1021
  />
1027
1022
  </Tooltip>
1028
- <Tooltip title={viewMode === 'table' ? '切换到卡片视图' : '切换到表格视图'}>
1029
- <Button
1030
- icon={viewMode === 'table' ? <AppstoreOutlined /> : <UnorderedListOutlined />}
1031
- onClick={toggleViewMode}
1032
- />
1033
- </Tooltip>
1023
+
1034
1024
  <Button
1035
1025
  type="primary"
1036
1026
  icon={<PlusOutlined />}
@@ -1252,155 +1242,33 @@ const InterfaceManagement = () => {
1252
1242
  </Popover>
1253
1243
  </div>
1254
1244
 
1255
- <Card className="list-container-card" bordered={false} bodyStyle={{ padding: 0 }}>
1256
- {/* 表格视图 */}
1257
- {viewMode === 'table' && (
1258
- <div className="interface-list-container">
1259
- <Table
1260
- columns={columns}
1261
- dataSource={filteredInterfaces}
1262
- rowKey="id"
1263
- loading={interfacesLoading}
1264
- onChange={handleTableChange}
1265
- rowSelection={{
1266
- selectedRowKeys,
1267
- onChange: onSelectChange,
1268
- }}
1269
- size="middle"
1270
- pagination={{
1271
- current: tableConfig.current,
1272
- pageSize: tableConfig.pageSize,
1273
- showSizeChanger: true,
1274
- showQuickJumper: true,
1275
- showTotal: (total, range) => `共 ${total} 个接口,显示第 ${range[0]}-${range[1]} 个`,
1276
- pageSizeOptions: ['10', '20', '50', '100'],
1277
- size: 'default'
1278
- }}
1279
- locale={{ emptyText: '暂无接口配置' }}
1280
- sortDirections={['ascend', 'descend']}
1281
- className="interface-table"
1282
- />
1283
- </div>
1284
- )}
1285
-
1286
- {/* 卡片视图 */}
1287
- {viewMode === 'card' && (
1288
- <div className="interface-card-view">
1289
- <Row gutter={[16, 16]} style={{ padding: 16 }}>
1290
- {interfacesLoading ? (
1291
- [1,2,3,4,5,6].map(i => (
1292
- <Col xs={24} sm={12} md={8} lg={8} xl={6} key={`loading-${i}`}>
1293
- <Card loading style={{ height: 180 }} />
1294
- </Col>
1295
- ))
1296
- ) : filteredInterfaces.length === 0 ? (
1297
- <Col span={24}>
1298
- <div className="empty-data">暂无接口配置</div>
1299
- </Col>
1300
- ) : (
1301
- filteredInterfaces.map(item => (
1302
- <Col xs={24} sm={12} md={8} lg={8} xl={6} key={item.id}>
1303
- <Card
1304
- className={`interface-card ${item.active === false ? 'inactive' : ''}`}
1305
- hoverable
1306
- >
1307
- <div className="interface-card-header">
1308
- <Switch
1309
- checked={item.active !== false}
1310
- onChange={(checked) => handleToggleActive(item.id, item.active !== false)}
1311
- size="small"
1312
- className="interface-card-switch"
1313
- />
1314
- <div className="interface-card-title">{item.name}</div>
1315
- {item.group && (
1316
- <Tag
1317
- color="blue"
1318
- className="interface-card-group"
1319
- onClick={() => setSelectedGroup(item.group)}
1320
- >
1321
- {item.group}
1322
- </Tag>
1323
- )}
1324
- </div>
1325
-
1326
- <div className="interface-card-content">
1327
- <div className="url-pattern-container">
1328
- <Tooltip title={item.urlPattern}>
1329
- <div className="url-pattern">{item.urlPattern}</div>
1330
- </Tooltip>
1331
- </div>
1332
-
1333
- <div className="interface-card-info">
1334
- <div className="info-item">
1335
- <span className="info-label">处理方式:</span>
1336
- <Badge
1337
- color={proxyTypes.find(t => t.value === item.proxyType)?.color || '#999'}
1338
- text={proxyTypes.find(t => t.value === item.proxyType)?.label || item.proxyType}
1339
- className="info-value"
1340
- />
1341
- </div>
1342
- <div className="info-item">
1343
- <span className="info-label">状态码:</span>
1344
- <span className={`status-badge status-${item.httpStatus >= 400 ? 'error' : item.httpStatus >= 300 ? 'warning' : 'success'}`}>
1345
- {item.httpStatus || 200}
1346
- </span>
1347
- </div>
1348
- </div>
1349
- </div>
1350
-
1351
- <div className="interface-card-actions">
1352
- <Button
1353
- type="primary"
1354
- size="small"
1355
- icon={<EditOutlined />}
1356
- onClick={() => handleEditInterface(item)}
1357
- >
1358
- 编辑
1359
- </Button>
1360
- <Popconfirm
1361
- title="确定要删除此接口吗?"
1362
- onConfirm={() => handleDeleteInterface(item.id)}
1363
- okText="确定"
1364
- cancelText="取消"
1365
- >
1366
- <Button
1367
- danger
1368
- size="small"
1369
- icon={<DeleteOutlined />}
1370
- >
1371
- 删除
1372
- </Button>
1373
- </Popconfirm>
1374
- </div>
1375
- </Card>
1376
- </Col>
1377
- ))
1378
- )}
1379
- </Row>
1380
-
1381
- {/* 卡片视图分页 */}
1382
- {filteredInterfaces.length > 0 && (
1383
- <div className="card-pagination">
1384
- <Pagination
1385
- current={tableConfig.current}
1386
- pageSize={tableConfig.pageSize}
1387
- total={filteredInterfaces.length}
1388
- showSizeChanger
1389
- showQuickJumper
1390
- showTotal={(total, range) => `共 ${total} 个接口,显示第 ${range[0]}-${range[1]} 个`}
1391
- pageSizeOptions={['10', '20', '50', '100']}
1392
- size="default"
1393
- onChange={(page, pageSize) => {
1394
- saveTableConfig({
1395
- current: page,
1396
- pageSize: pageSize
1397
- });
1398
- }}
1399
- />
1400
- </div>
1401
- )}
1402
- </div>
1403
- )}
1245
+ <Card className="list-container-card" bordered={false} bodyStyle={{ padding: 0 }}>
1246
+ <div className="interface-list-container">
1247
+ <Table
1248
+ columns={columns}
1249
+ dataSource={filteredInterfaces}
1250
+ rowKey="id"
1251
+ loading={interfacesLoading}
1252
+ onChange={handleTableChange}
1253
+ rowSelection={{
1254
+ selectedRowKeys,
1255
+ onChange: onSelectChange,
1256
+ }}
1257
+ size="middle"
1258
+ pagination={{
1259
+ current: tableConfig.current,
1260
+ pageSize: tableConfig.pageSize,
1261
+ showSizeChanger: true,
1262
+ showQuickJumper: true,
1263
+ showTotal: (total, range) => `共 ${total} 个接口,显示第 ${range[0]}-${range[1]} 个`,
1264
+ pageSizeOptions: ['10', '20', '50', '100'],
1265
+ size: 'default'
1266
+ }}
1267
+ locale={{ emptyText: '暂无接口配置' }}
1268
+ sortDirections={['ascend', 'descend']}
1269
+ className="interface-table"
1270
+ />
1271
+ </div>
1404
1272
  </Card>
1405
1273
 
1406
1274
  {/* 接口编辑/创建模态框 */}