docs(README): 更新安装后端依赖说明
- 添加安装 Wails 最新版本的命令 - 更新 package.json.md5 校验值
This commit is contained in:
@@ -64,36 +64,36 @@ function CapturePage() {
|
||||
|
||||
const safeApiCall = async <T,>(
|
||||
apiCall: () => Promise<T>,
|
||||
errorMessage: string,
|
||||
fallbackValue: T
|
||||
): Promise<T> => {
|
||||
errorMessage: string
|
||||
): Promise<T | undefined> => {
|
||||
try {
|
||||
return await apiCall();
|
||||
} catch (error) {
|
||||
console.error(`${errorMessage}:`, error);
|
||||
showMessage('error', errorMessage);
|
||||
return fallbackValue;
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
const fetchInterfaces = async () => {
|
||||
setIsCapturing(false);
|
||||
setCapturedData([]);
|
||||
// setParsedData(null);
|
||||
setLoading(false);
|
||||
setInterfaceLoading(true);
|
||||
try {
|
||||
const response = await safeApiCall(
|
||||
() => GetNetworkInterfaces(),
|
||||
'获取网络接口失败,使用模拟数据',
|
||||
[
|
||||
{ name: 'eth0', description: 'Ethernet', addresses: ['192.168.1.100'], is_loopback: false },
|
||||
{ name: 'wlan0', description: 'Wireless', addresses: ['192.168.1.101'], is_loopback: false },
|
||||
{ name: 'lo', description: 'Loopback', addresses: ['127.0.0.1'], is_loopback: true }
|
||||
]
|
||||
'获取网络接口失败'
|
||||
);
|
||||
if (!response || response.length === 0) {
|
||||
showMessage('error', '未获取到任何网络接口');
|
||||
setInterfaces([]);
|
||||
setSelectedInterface('');
|
||||
return;
|
||||
}
|
||||
setInterfaces(response);
|
||||
let defaultSelected = '';
|
||||
console.log("获取的网卡:"+JSON.stringify(response))
|
||||
for (const iface of response) {
|
||||
if (iface.addresses && iface.addresses.some(ip => ip.includes('192.168'))) {
|
||||
defaultSelected = iface.name;
|
||||
@@ -106,13 +106,9 @@ function CapturePage() {
|
||||
setSelectedInterface(defaultSelected);
|
||||
} catch (error) {
|
||||
console.error('获取网络接口时发生未知错误:', error);
|
||||
const defaultInterfaces = [
|
||||
{ name: 'eth0', description: 'Ethernet', addresses: ['192.168.1.100'], is_loopback: false },
|
||||
{ name: 'wlan0', description: 'Wireless', addresses: ['192.168.1.101'], is_loopback: false },
|
||||
{ name: 'lo', description: 'Loopback', addresses: ['127.0.0.1'], is_loopback: true }
|
||||
];
|
||||
setInterfaces(defaultInterfaces);
|
||||
setSelectedInterface(defaultInterfaces[0].name);
|
||||
showMessage('error', '获取网络接口时发生未知错误');
|
||||
setInterfaces([]);
|
||||
setSelectedInterface('');
|
||||
} finally {
|
||||
setInterfaceLoading(false);
|
||||
}
|
||||
@@ -125,17 +121,20 @@ function CapturePage() {
|
||||
}
|
||||
setLoading(true);
|
||||
try {
|
||||
await safeApiCall(
|
||||
const result = await safeApiCall(
|
||||
() => StartCapture(selectedInterface),
|
||||
'开始抓包失败,但界面将继续工作',
|
||||
undefined
|
||||
'开始抓包失败'
|
||||
);
|
||||
if (result === undefined) {
|
||||
setIsCapturing(false);
|
||||
return;
|
||||
}
|
||||
setIsCapturing(true);
|
||||
showMessage('success', '开始抓包');
|
||||
} catch (error) {
|
||||
console.error('开始抓包时发生未知错误:', error);
|
||||
setIsCapturing(true);
|
||||
showMessage('success', '开始抓包(模拟模式)');
|
||||
setIsCapturing(false);
|
||||
showMessage('error', '开始抓包失败');
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@@ -145,20 +144,26 @@ function CapturePage() {
|
||||
setLoading(false);
|
||||
setIsCapturing(false);
|
||||
setCapturedData([]);
|
||||
// setParsedData(null);
|
||||
try {
|
||||
setLoading(true);
|
||||
await safeApiCall(
|
||||
const stopResult = await safeApiCall(
|
||||
() => StopCapture(),
|
||||
'停止抓包失败,但界面将继续工作',
|
||||
undefined
|
||||
'停止抓包失败'
|
||||
);
|
||||
if (stopResult === undefined) {
|
||||
setIsCapturing(false);
|
||||
return;
|
||||
}
|
||||
setIsCapturing(false);
|
||||
const data = await safeApiCall(
|
||||
() => GetCapturedData(),
|
||||
'获取抓包数据失败,使用模拟数据',
|
||||
['mock_data_1', 'mock_data_2', 'mock_data_3']
|
||||
'获取抓包数据失败'
|
||||
);
|
||||
if (!data || data.length === 0) {
|
||||
setCapturedData([]);
|
||||
showMessage('warning', '未捕获到数据');
|
||||
return;
|
||||
}
|
||||
setCapturedData(data);
|
||||
if (data && data.length > 0) {
|
||||
data.forEach((item, idx) => {
|
||||
@@ -174,31 +179,26 @@ function CapturePage() {
|
||||
if (data.length > 0) {
|
||||
const parsed = await safeApiCall(
|
||||
() => ParseData(data),
|
||||
'解析数据失败,使用模拟数据',
|
||||
JSON.stringify({
|
||||
items: [
|
||||
{ id: '1', code: 'SWORD001', ct: 100, e: 1500, g: 5, l: false, mg: 10, op: [], p: 25, s: 'Legendary', sk: 3 },
|
||||
{ id: '2', code: 'SHIELD002', ct: 80, e: 1200, g: 4, l: true, mg: 15, op: [], p: 20, s: 'Rare', sk: 2 },
|
||||
{ id: '3', code: 'HELMET003', ct: 60, e: 800, g: 3, l: false, mg: 8, op: [], p: 12, s: 'Common', sk: 1 }
|
||||
],
|
||||
heroes: []
|
||||
})
|
||||
'解析数据失败'
|
||||
);
|
||||
if (!parsed) {
|
||||
setParsedData({ items: [], heroes: [] });
|
||||
showMessage('error', '解析数据失败');
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const parsedData = JSON.parse(parsed);
|
||||
if (!parsedData || !Array.isArray(parsedData.items)) {
|
||||
setParsedData({ items: [], heroes: [] });
|
||||
showMessage('error', '解析数据失败');
|
||||
return;
|
||||
}
|
||||
setParsedData(parsedData);
|
||||
showMessage('success', '数据处理完成');
|
||||
} catch (parseError) {
|
||||
console.error('解析JSON失败:', parseError);
|
||||
setParsedData({
|
||||
items: [
|
||||
{ id: '1', code: 'SWORD001', ct: 100, e: 1500, g: 5, l: false, mg: 10, op: [], p: 25, s: 'Legendary', sk: 3 },
|
||||
{ id: '2', code: 'SHIELD002', ct: 80, e: 1200, g: 4, l: true, mg: 15, op: [], p: 20, s: 'Rare', sk: 2 },
|
||||
{ id: '3', code: 'HELMET003', ct: 60, e: 800, g: 3, l: false, mg: 8, op: [], p: 12, s: 'Common', sk: 1 }
|
||||
],
|
||||
heroes: []
|
||||
});
|
||||
showMessage('success', '数据处理完成(使用模拟数据)');
|
||||
setParsedData({ items: [], heroes: [] });
|
||||
showMessage('error', '解析数据失败');
|
||||
}
|
||||
} else {
|
||||
showMessage('warning', '未捕获到数据');
|
||||
@@ -207,7 +207,7 @@ function CapturePage() {
|
||||
console.error('停止抓包时发生未知错误:', error);
|
||||
setIsCapturing(false);
|
||||
setCapturedData([]);
|
||||
setParsedData(null);
|
||||
setParsedData({ items: [], heroes: [] });
|
||||
setLoading(false);
|
||||
showMessage('error', '抓包失败,已重置状态');
|
||||
return;
|
||||
@@ -223,15 +223,18 @@ function CapturePage() {
|
||||
}
|
||||
try {
|
||||
const filename = `equipment_data_${Date.now()}.json`;
|
||||
await safeApiCall(
|
||||
const result = await safeApiCall(
|
||||
() => ExportData(capturedData, filename),
|
||||
'导出数据失败',
|
||||
undefined
|
||||
'导出数据失败'
|
||||
);
|
||||
if (result === undefined) {
|
||||
showMessage('error', '导出数据失败');
|
||||
return;
|
||||
}
|
||||
showMessage('success', '数据导出成功');
|
||||
} catch (error) {
|
||||
console.error('导出数据时发生未知错误:', error);
|
||||
showMessage('success', '数据导出成功(模拟模式)');
|
||||
showMessage('error', '导出数据失败');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -433,9 +436,10 @@ function CapturePage() {
|
||||
<Card title="抓包状态" size="small" style={{ marginTop: 12 }}>
|
||||
<div>
|
||||
<p style={{ marginBottom: 4 }}>状态: {isCapturing ? '正在抓包...' : '准备就绪'}</p>
|
||||
<p style={{ marginBottom: 4 }}>捕获数据: {capturedData.length} 条</p>
|
||||
{/*<p style={{ marginBottom: 4 }}>捕获数据: {capturedData.length} 条</p>*/}
|
||||
<p style={{ marginBottom: 4 }}>英雄数目: {Array.isArray(parsedData?.heroes) ? parsedData.heroes.length : 0} 个</p>
|
||||
{parsedData && (
|
||||
<p style={{ marginBottom: 0 }}>解析装备: {parsedData.items.length} 件</p>
|
||||
<p style={{ marginBottom: 0 }}>解析装备: {Array.isArray(parsedData?.items) ? parsedData.items.length : 0} 件</p>
|
||||
)}
|
||||
</div>
|
||||
</Card>
|
||||
@@ -444,7 +448,7 @@ function CapturePage() {
|
||||
|
||||
<Content style={{ padding: '16px' }}>
|
||||
<Spin spinning={loading}>
|
||||
{parsedData && parsedData.items.length > 0 ? (
|
||||
{Array.isArray(parsedData?.items) && parsedData.items.length > 0 ? (
|
||||
<Card title="装备数据">
|
||||
<Table
|
||||
dataSource={parsedData.items}
|
||||
|
||||
Reference in New Issue
Block a user