From c1fda9bb7e524d2a8de79305f9111d7e13a358b4 Mon Sep 17 00:00:00 2001 From: liuyh Date: Tue, 18 Nov 2025 23:17:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BC=9A=E5=BC=95=E5=8F=91=E7=B1=BB=E5=9E=8B=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=9A=84=E6=97=A0=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cloud-dev/Dockerfile | 2 +- package.json | 4 +- simple_deploy.sh | 6 +- .../data-table/filters/range-filter.tsx | 122 ------------------ src/server/routers/upload.ts | 21 +-- 5 files changed, 5 insertions(+), 150 deletions(-) delete mode 100644 src/components/data-table/filters/range-filter.tsx diff --git a/.cloud-dev/Dockerfile b/.cloud-dev/Dockerfile index ccb810d..2616d56 100644 --- a/.cloud-dev/Dockerfile +++ b/.cloud-dev/Dockerfile @@ -108,7 +108,7 @@ RUN mkdir -p /var/run/sshd && \ RUN code-server --install-extension ms-ceintl.vscode-language-pack-zh-hans \ && code-server --install-extension bierner.markdown-mermaid \ && code-server --install-extension ms-python.python \ - && code-server --install-extension rooveterinaryinc.roo-cline \ + && code-server --install-extension saoudrizwan.claude-dev \ && code-server --install-extension dbaeumer.vscode-eslint \ && code-server --install-extension prisma.prisma \ && code-server --install-extension ecmel.vscode-html-css \ diff --git a/package.json b/package.json index 27de831..e472740 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "hair-keeper", - "version": "0.1.0", + "version": "1.1.0", "private": true, "scripts": { "dev": "next dev -p 3000 --turbo", "dev:attach": "DEV_TERMINAL=nextdev;tmux new-session -A -s $DEV_TERMINAL\\; send-keys \"pnpm run dev\" ^M", "build": "next build", "start": "next start -p 3000", - "lint": "eslint", + "lint": "next lint && tsc --noEmit", "db:seed": "tsx prisma/seed.ts", "build:analyze": "ANALYZE=true next build" }, diff --git a/simple_deploy.sh b/simple_deploy.sh index ab2ff99..089a916 100644 --- a/simple_deploy.sh +++ b/simple_deploy.sh @@ -1,6 +1,6 @@ #!/bin/bash # 此脚本用来一键部署到生产服务器 -# 需事先配置好ssh免密登录,目标服务器需要安装好node、pnpm和pm2来运行容器 +# 需事先配置好ssh免密登录,目标服务器需要安装好node、pnpm、tsx、pm2来运行容器 set -e # 配置 @@ -46,10 +46,6 @@ cd ${REMOTE_DIR} echo "📥 安装依赖..." pnpm install --prod -# 等待数据库启动 -echo "⏳ 等待数据库启动..." -sleep 5 - # 运行数据库迁移 echo "🗄️ 运行数据库迁移..." npx prisma migrate deploy diff --git a/src/components/data-table/filters/range-filter.tsx b/src/components/data-table/filters/range-filter.tsx deleted file mode 100644 index ac3890e..0000000 --- a/src/components/data-table/filters/range-filter.tsx +++ /dev/null @@ -1,122 +0,0 @@ -"use client"; - -import type { Column } from "@tanstack/react-table"; -import * as React from "react"; - -import { Input } from "@/components/ui/input"; -import { cn } from "@/lib/utils"; -import type { ExtendedColumnFilter } from "@/types/data-table"; - -interface DataTableRangeFilterProps extends React.ComponentProps<"div"> { - filter: ExtendedColumnFilter; - column: Column; - inputId: string; - onFilterUpdate: ( - filterId: string, - updates: Partial, "filterId">>, - ) => void; -} - -export function DataTableRangeFilter({ - filter, - column, - inputId, - onFilterUpdate, - className, - ...props -}: DataTableRangeFilterProps) { - const meta = column.columnDef.meta; - - const [min, max] = React.useMemo(() => { - const range = column.columnDef.meta?.filter?.range; - if (range) return range; - - const values = column.getFacetedMinMaxValues(); - if (!values) return [0, 100]; - - return [values[0], values[1]]; - }, [column]); - - const formatValue = React.useCallback( - (value: string | number | undefined) => { - if (value === undefined || value === "") return ""; - const numValue = Number(value); - return Number.isNaN(numValue) - ? "" - : numValue.toLocaleString(undefined, { - maximumFractionDigits: 0, - }); - }, - [], - ); - - const value = React.useMemo(() => { - if (Array.isArray(filter.value)) return filter.value.map(formatValue); - return [formatValue(filter.value), ""]; - }, [filter.value, formatValue]); - - const onRangeValueChange = React.useCallback( - (value: string, isMin?: boolean) => { - const numValue = Number(value); - const currentValues = Array.isArray(filter.value) - ? filter.value - : ["", ""]; - const otherValue = isMin - ? (currentValues[1] ?? "") - : (currentValues[0] ?? ""); - - if ( - value === "" || - (!Number.isNaN(numValue) && - (isMin - ? numValue >= min && numValue <= (Number(otherValue) || max) - : numValue <= max && numValue >= (Number(otherValue) || min))) - ) { - onFilterUpdate(filter.filterId, { - value: isMin ? [value, otherValue] : [otherValue, value], - }); - } - }, - [filter.filterId, filter.value, min, max, onFilterUpdate], - ); - - return ( -
- onRangeValueChange(event.target.value, true)} - /> - to - onRangeValueChange(event.target.value)} - /> -
- ); -} diff --git a/src/server/routers/upload.ts b/src/server/routers/upload.ts index 9b0c9c5..a9bb930 100644 --- a/src/server/routers/upload.ts +++ b/src/server/routers/upload.ts @@ -225,26 +225,7 @@ export function createDownloadProcedure(config: DownloadConfig) { * 提供文件上传相关的接口,使用工厂函数创建特定业务的上传接口 */ export const uploadRouter = createTRPCRouter({ - // 供给照片批量上传接口 - supplyPhotos: createBatchUploadProcedure({ - category: 'transfer/supply', - maxSize: 1 * 1024 * 1024, // 1MB - allowedContentType: 'image/*', - expirySeconds: 3600, - permission: Permissions.TRANSFER_SUPPLY_CREATE, - }), - supplyPdfs: createBatchUploadProcedure({ - category: 'transfer/supply', - maxSize: 1 * 1024 * 1024, // 1MB - allowedContentType: 'application/pdf', - expirySeconds: 3600, - permission: Permissions.TRANSFER_SUPPLY_CREATE, - }), - // 已上传的供给照片下载 - downloadSupplyPhotos: createDownloadProcedure({ - expirySeconds: 3600, - permission: Permissions.TRANSFER_SUPPLY_CREATE, - }) + }); export type SingleUploadProcedureInput = inferProcedureInput>; // createSingleUploadProcedure 创建的接口调用参数