diff --git a/go-backend/internal/store/repo/repository.go b/go-backend/internal/store/repo/repository.go index 445d565..e3be6e4 100644 --- a/go-backend/internal/store/repo/repository.go +++ b/go-backend/internal/store/repo/repository.go @@ -261,7 +261,7 @@ func prepareSQLiteLegacyColumns(db *gorm.DB) error { m := db.Migrator() if m.HasTable(&model.Node{}) { - for _, field := range []string{"ServerIPV4", "ServerIPV6", "ExtraIPs", "TCPListenAddr", "UDPListenAddr", "Inx", "IsRemote", "RemoteURL", "RemoteToken", "RemoteConfig", "Remark", "ExpiryTime", "RenewalCycle"} { + for _, field := range []string{"ServerIPV4", "ServerIPV6", "ExtraIPs", "TCPListenAddr", "UDPListenAddr", "Inx", "IsRemote", "RemoteURL", "RemoteToken", "RemoteConfig", "Remark", "ExpiryTime", "RenewalCycle", "ExpiryReminderDismissed"} { if m.HasColumn(&model.Node{}, field) { continue } diff --git a/vite-frontend/src/pages/node.tsx b/vite-frontend/src/pages/node.tsx index 143e902..0e76ee2 100644 --- a/vite-frontend/src/pages/node.tsx +++ b/vite-frontend/src/pages/node.tsx @@ -1,5 +1,6 @@ import { useState, useEffect, useMemo, useCallback } from "react"; import toast from "react-hot-toast"; +import { parseDate } from "@internationalized/date"; import { DndContext, KeyboardSensor, @@ -39,6 +40,7 @@ import { Progress } from "@/shadcn-bridge/heroui/progress"; import { Accordion, AccordionItem } from "@/shadcn-bridge/heroui/accordion"; import { Select, SelectItem } from "@/shadcn-bridge/heroui/select"; import { Checkbox } from "@/shadcn-bridge/heroui/checkbox"; +import { DatePicker } from "@/shadcn-bridge/heroui/date-picker"; import { createNode, getNodeList, @@ -2374,26 +2376,37 @@ export default function NodePage() { - 0 - ? new Date(form.expiryTime).toISOString().slice(0, 16) - : "" - } - variant="bordered" - onChange={(e) => - setForm((prev) => ({ - ...prev, - expiryTime: e.target.value - ? new Date(e.target.value).getTime() - : 0, - })) + ? (parseDate( + new Date(form.expiryTime).toISOString().split("T")[0], + ) as any) + : null } + onChange={(date) => { + if (date) { + const jsDate = new Date( + date.year, + date.month - 1, + date.day, + ); + setForm((prev) => ({ + ...prev, + expiryTime: jsDate.getTime(), + })); + } else { + setForm((prev) => ({ + ...prev, + expiryTime: 0, + })); + } + }} />