From 524de66ad327a10294dc619b77724ef36bbfc302 Mon Sep 17 00:00:00 2001 From: Timothy Yin Date: Thu, 19 Mar 2026 21:28:48 +0800 Subject: [PATCH] fix(csms): fix lint errors, clean up imports and improve code formatting --- apps/csms/src/routes/charge-points.ts | 22 +++++++++---------- apps/csms/src/routes/id-tags.ts | 1 - apps/csms/src/types/db.ts | 0 .../app/dashboard/charge-points/[id]/page.tsx | 6 ++--- .../app/dashboard/settings/pricing/page.tsx | 2 -- .../app/dashboard/topology/topology-flow.tsx | 4 ++-- apps/web/components/sidebar.tsx | 13 +---------- apps/web/proxy.ts | 8 +++---- 8 files changed, 20 insertions(+), 36 deletions(-) delete mode 100644 apps/csms/src/types/db.ts diff --git a/apps/csms/src/routes/charge-points.ts b/apps/csms/src/routes/charge-points.ts index eef92c6..de9285a 100644 --- a/apps/csms/src/routes/charge-points.ts +++ b/apps/csms/src/routes/charge-points.ts @@ -1,5 +1,5 @@ import { Hono } from "hono"; -import { desc, eq, sql, inArray } from "drizzle-orm"; +import { desc, eq, sql } from "drizzle-orm"; import dayjs from "dayjs"; import { useDrizzle } from "@/lib/db.js"; import { chargePoint, connector } from "@/db/schema.js"; @@ -81,12 +81,12 @@ app.post("/", async (c) => { if (body.feePerKwh !== undefined && (!Number.isInteger(body.feePerKwh) || body.feePerKwh < 0)) { return c.json({ error: "feePerKwh must be a non-negative integer" }, 400); } - if (body.pricingMode !== undefined && !['fixed', 'tou'].includes(body.pricingMode)) { + if (body.pricingMode !== undefined && !["fixed", "tou"].includes(body.pricingMode)) { return c.json({ error: "pricingMode must be 'fixed' or 'tou'" }, 400); } - const plainPassword = generateOcppPassword() - const passwordHash = await hashOcppPassword(plainPassword) + const plainPassword = generateOcppPassword(); + const passwordHash = await hashOcppPassword(plainPassword); const [created] = await db .insert(chargePoint) @@ -175,21 +175,19 @@ app.patch("/:id", async (c) => { } set.registrationStatus = body.registrationStatus as "Accepted" | "Pending" | "Rejected"; } - if (body.chargePointVendor !== undefined) set.chargePointVendor = body.chargePointVendor.trim() || "Unknown"; - if (body.chargePointModel !== undefined) set.chargePointModel = body.chargePointModel.trim() || "Unknown"; + if (body.chargePointVendor !== undefined) + set.chargePointVendor = body.chargePointVendor.trim() || "Unknown"; + if (body.chargePointModel !== undefined) + set.chargePointModel = body.chargePointModel.trim() || "Unknown"; if ("deviceName" in body) set.deviceName = body.deviceName?.trim() || null; if (body.pricingMode !== undefined) { - if (!['fixed', 'tou'].includes(body.pricingMode)) { + if (!["fixed", "tou"].includes(body.pricingMode)) { return c.json({ error: "pricingMode must be 'fixed' or 'tou'" }, 400); } set.pricingMode = body.pricingMode; } - const [updated] = await db - .update(chargePoint) - .set(set) - .where(eq(chargePoint.id, id)) - .returning(); + const [updated] = await db.update(chargePoint).set(set).where(eq(chargePoint.id, id)).returning(); if (!updated) return c.json({ error: "Not found" }, 404); diff --git a/apps/csms/src/routes/id-tags.ts b/apps/csms/src/routes/id-tags.ts index d13e0a7..2dbb343 100644 --- a/apps/csms/src/routes/id-tags.ts +++ b/apps/csms/src/routes/id-tags.ts @@ -3,7 +3,6 @@ import { desc, eq } from "drizzle-orm"; import dayjs from "dayjs"; import { useDrizzle } from "@/lib/db.js"; import { idTag } from "@/db/schema.js"; -import { zValidator } from "@hono/zod-validator"; import { z } from "zod"; import type { HonoEnv } from "@/types/hono.ts"; diff --git a/apps/csms/src/types/db.ts b/apps/csms/src/types/db.ts deleted file mode 100644 index e69de29..0000000 diff --git a/apps/web/app/dashboard/charge-points/[id]/page.tsx b/apps/web/app/dashboard/charge-points/[id]/page.tsx index 2ac14a1..0f76dc3 100644 --- a/apps/web/app/dashboard/charge-points/[id]/page.tsx +++ b/apps/web/app/dashboard/charge-points/[id]/page.tsx @@ -185,7 +185,7 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id dayjs().diff(dayjs(cp.lastHeartbeatAt), "second") < (cp.heartbeatInterval ?? 60) * 3; const commandChannelUnavailable = cp?.transportStatus === "unavailable"; const statusLabel = isOnline ? "在线" : commandChannelUnavailable ? "通道异常" : "离线"; - const statusDotClass = isOnline + const transportStatusDotClass = isOnline ? "bg-success animate-pulse" : commandChannelUnavailable ? "bg-warning" @@ -253,7 +253,7 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
{statusLabel}
@@ -445,7 +445,7 @@ export default function ChargePointDetailPage({ params }: { params: Promise<{ id
{statusLabel}
diff --git a/apps/web/app/dashboard/settings/pricing/page.tsx b/apps/web/app/dashboard/settings/pricing/page.tsx index c7ee6f1..64d5190 100644 --- a/apps/web/app/dashboard/settings/pricing/page.tsx +++ b/apps/web/app/dashboard/settings/pricing/page.tsx @@ -184,7 +184,6 @@ export default function PricingPage() { const [activeTier, setActiveTier] = useState("peak"); const [isDirty, setIsDirty] = useState(false); const [saving, setSaving] = useState(false); - const [showPayload, setShowPayload] = useState(false); // Populate state once remote tariff loads useEffect(() => { @@ -286,7 +285,6 @@ export default function PricingPage() { // ── Derived values ─────────────────────────────────────────────────────── const slots = scheduleToSlots(schedule); - const apiPayload: TariffConfig = { slots, prices }; // ── Admin gate ─────────────────────────────────────────────────────────── if (!isAdmin) { diff --git a/apps/web/app/dashboard/topology/topology-flow.tsx b/apps/web/app/dashboard/topology/topology-flow.tsx index 4e067bf..af9548e 100644 --- a/apps/web/app/dashboard/topology/topology-flow.tsx +++ b/apps/web/app/dashboard/topology/topology-flow.tsx @@ -8,7 +8,6 @@ import { Controls, Handle, MiniMap, - Panel, Position, type Node, type Edge, @@ -27,7 +26,8 @@ type ConnectionStatus = "online" | "stale" | "offline"; function getStatus(cp: ChargePoint, connected: string[]): ConnectionStatus { if (cp.transportStatus === "unavailable") return "stale"; - if (cp.transportStatus !== "online" || !connected.includes(cp.chargePointIdentifier)) return "offline"; + if (cp.transportStatus !== "online" || !connected.includes(cp.chargePointIdentifier)) + return "offline"; if (!cp.lastHeartbeatAt) return "stale"; return dayjs().diff(dayjs(cp.lastHeartbeatAt), "minute") < 5 ? "online" : "stale"; } diff --git a/apps/web/components/sidebar.tsx b/apps/web/components/sidebar.tsx index 8cf9ecd..304b3b0 100644 --- a/apps/web/components/sidebar.tsx +++ b/apps/web/components/sidebar.tsx @@ -3,18 +3,7 @@ import Link from "next/link"; import { usePathname } from "next/navigation"; import { useState } from "react"; -import { - CreditCard, - Gear, - ListCheck, - Person, - PlugConnection, - TagDollar, - Thunderbolt, - ThunderboltFill, - Xmark, - Bars, -} from "@gravity-ui/icons"; +import { CreditCard, Gear, TagDollar, Thunderbolt, Xmark, Bars } from "@gravity-ui/icons"; import SidebarFooter from "@/components/sidebar-footer"; import { useSession } from "@/lib/auth-client"; import { EvCharger, Gauge, Network, ReceiptText, UserCog, Users } from "lucide-react"; diff --git a/apps/web/proxy.ts b/apps/web/proxy.ts index 4b0a283..624e879 100644 --- a/apps/web/proxy.ts +++ b/apps/web/proxy.ts @@ -4,7 +4,7 @@ const CSMS_INTERNAL_URL = process.env.CSMS_INTERNAL_URL ?? process.env.NEXT_PUBLIC_CSMS_URL ?? "http://localhost:3001"; /** 检查 CSMS 是否已完成初始化(有用户存在)。 */ -async function isInitialized(request: NextRequest): Promise { +async function isInitialized(): Promise { try { const res = await fetch(`${CSMS_INTERNAL_URL}/api/setup`, { method: "GET", @@ -25,7 +25,7 @@ export async function proxy(request: NextRequest) { // /setup 页面:已初始化则跳转登录 if (pathname === "/setup") { - if (await isInitialized(request)) { + if (await isInitialized()) { return NextResponse.redirect(new URL("/login", request.url)); } return NextResponse.next(); @@ -33,7 +33,7 @@ export async function proxy(request: NextRequest) { // /dashboard 路由:检查 session,未登录跳转 /login if (pathname.startsWith("/dashboard")) { - if (!(await isInitialized(request))) { + if (!(await isInitialized())) { return NextResponse.redirect(new URL("/setup", request.url)); } @@ -53,7 +53,7 @@ export async function proxy(request: NextRequest) { // /login 路由:未初始化则跳转 /setup if (pathname === "/login") { - if (!(await isInitialized(request))) { + if (!(await isInitialized())) { return NextResponse.redirect(new URL("/setup", request.url)); } return NextResponse.next();