diff --git a/src/lib/api/httpClient.ts b/src/lib/api/httpClient.ts index 6b40a24..0b441e2 100644 --- a/src/lib/api/httpClient.ts +++ b/src/lib/api/httpClient.ts @@ -6,7 +6,7 @@ import { log } from '$lib/log.ts'; interface RequestOptions extends Omit { - body?: JsonObject | FormData; + body?: JsonObject | FormData | object; } const API_BASE_URL = import.meta.env.VITE_PUBLIC_API_URL || 'http://localhost:18888/api'; @@ -92,6 +92,7 @@ const httpRequest = async ( body: canHaveBody ? requestBody : undefined, ...rest }); + log.debug('API Response:', response) if (!response.ok) { let errorDetail; diff --git a/src/lib/api/services/deviceService.ts b/src/lib/api/services/deviceService.ts index 960819a..3884188 100644 --- a/src/lib/api/services/deviceService.ts +++ b/src/lib/api/services/deviceService.ts @@ -1,6 +1,7 @@ import { api } from '$lib/api/httpClient.ts'; import type { PageResult } from '$lib/types/dataTable.ts'; import type { CreateDeviceRequest, DeviceResponse } from '$lib/types/api.ts'; +import type { JsonValue } from '$lib/types/http.ts'; export const deviceService = { @@ -35,7 +36,7 @@ export const deviceService = { createDevice: async (device: CreateDeviceRequest,token:string) => { const result = await api.post('/devices',{ - body: JSON.stringify(device), + body: device, headers:{Authorization: `${token}`} }); if (result.code != 200 || !result.data){ diff --git a/src/lib/components/form/AddDevice.svelte b/src/lib/components/form/AddDevice.svelte index b1eb961..1eb4950 100644 --- a/src/lib/components/form/AddDevice.svelte +++ b/src/lib/components/form/AddDevice.svelte @@ -87,12 +87,39 @@ export function submitAndGetPayload(): CreateDeviceRequest | null { if (validate()) { - // 返回深拷贝的数据,防止后续修改影响 - return $state.snapshot(formData); + const snapshot = $state.snapshot(formData); + + fetch('/api/devices', { + method: 'POST', + headers: {}, + body: JSON.stringify(snapshot) + }).then(res => res.json()) + .then(res => { + if (res.ok) { + log.info('设备创建成功', res); + open = false; + } else { + log.error('设备创建失败', res); + } + }) + .catch(err => { + log.error('设备创建失败', err); + }); + return snapshot; } return null; // 验证失败 + + } + + const handleSubmit = () => { + const payload = submitAndGetPayload(); + if (payload) { + log.info('设备创建成功', payload); + open = false; + } + };
@@ -233,6 +260,6 @@
- +
\ No newline at end of file diff --git a/src/lib/types/http.ts b/src/lib/types/http.ts index 1a89b88..4ca0d6d 100644 --- a/src/lib/types/http.ts +++ b/src/lib/types/http.ts @@ -4,4 +4,4 @@ export interface JsonObject { [key:string] : JsonValue; } export type JsonArray = JsonValue[]; -export type JsonValue = JsonPrimitive | JsonObject | JsonArray; +export type JsonValue = JsonPrimitive | JsonObject | JsonArray | object; diff --git a/src/routes/api/devices/+server.ts b/src/routes/api/devices/+server.ts index ba77a99..a2fd41f 100644 --- a/src/routes/api/devices/+server.ts +++ b/src/routes/api/devices/+server.ts @@ -1,20 +1,29 @@ import { log } from '$lib/log.ts'; +import type { CreateDeviceRequest } from '$lib/types/api.ts'; +import { deviceService } from '$lib/api/services/deviceService.ts'; +import { COOKIE_TOKEN_KEY } from '$lib/components/constants/cookiesConstants.ts'; +import { redirect } from '@sveltejs/kit'; + + +export async function POST({ request ,cookies }) { + const data = await request.json() as CreateDeviceRequest; + const token = cookies.get(COOKIE_TOKEN_KEY); + + if (!token) { + throw redirect(302, '/auth/login'); + } -export async function POST({ request }) { - const data = await request.json(); // 实际应用中:将 data 存入数据库 log.info('client request data', data) + const device = await deviceService.createDevice( data, token ); + + + return new Response( - JSON.stringify({ message: 'User created successfully', user: data }), - { - status: 201, // 201 Created - headers: { - 'Content-Type': 'application/json' - } - } + JSON.stringify({ message: 'Device created successfully', device: device }), ); } \ No newline at end of file