Initial commit: 风影 OA 全栈源码(API/Web/Flutter/IM)

含 Phase 1.1 IM seq 排序、断线重连、多端已读同步与微信式语音转文字 UI。
排除 node_modules、构建产物、安装包与 .env 密钥。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-02 10:04:03 +00:00
commit 76f266645d
507 changed files with 99891 additions and 0 deletions
@@ -0,0 +1,56 @@
-- AlterTable
ALTER TABLE "Contract" ADD COLUMN "legalEntityId" TEXT;
ALTER TABLE "Contract" ADD COLUMN "nasPath" TEXT;
ALTER TABLE "Contract" ADD COLUMN "remark" TEXT;
ALTER TABLE "Contract" ADD COLUMN "submittedAt" TIMESTAMP(3);
ALTER TABLE "Contract" ADD COLUMN "approvedAt" TIMESTAMP(3);
ALTER TABLE "Contract" ADD COLUMN "createdById" TEXT;
ALTER TABLE "Contract" ADD CONSTRAINT "Contract_legalEntityId_fkey" FOREIGN KEY ("legalEntityId") REFERENCES "LegalEntity"("id") ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE "Contract" ADD CONSTRAINT "Contract_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AlterTable
ALTER TABLE "SealRequest" ADD COLUMN "contractId" TEXT;
ALTER TABLE "SealRequest" ADD COLUMN "applicantId" TEXT;
ALTER TABLE "SealRequest" ADD CONSTRAINT "SealRequest_contractId_fkey" FOREIGN KEY ("contractId") REFERENCES "Contract"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AlterTable
ALTER TABLE "Project" ADD COLUMN "presalesCost" DECIMAL(18,2) NOT NULL DEFAULT 0;
-- CreateTable
CREATE TABLE "ContractReviewer" (
"id" TEXT NOT NULL,
"contractId" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"result" TEXT NOT NULL DEFAULT 'PENDING',
"comment" TEXT,
"decidedAt" TIMESTAMP(3),
CONSTRAINT "ContractReviewer_pkey" PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "ContractReviewer_contractId_userId_key" ON "ContractReviewer"("contractId", "userId");
CREATE INDEX "ContractReviewer_contractId_idx" ON "ContractReviewer"("contractId");
ALTER TABLE "ContractReviewer" ADD CONSTRAINT "ContractReviewer_contractId_fkey" FOREIGN KEY ("contractId") REFERENCES "Contract"("id") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "ContractReviewer" ADD CONSTRAINT "ContractReviewer_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- CreateTable
CREATE TABLE "ContractActionLog" (
"id" TEXT NOT NULL,
"contractId" TEXT NOT NULL,
"actorId" TEXT NOT NULL,
"action" TEXT NOT NULL,
"fromStatus" TEXT,
"toStatus" TEXT,
"comment" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "ContractActionLog_pkey" PRIMARY KEY ("id")
);
CREATE INDEX "ContractActionLog_contractId_idx" ON "ContractActionLog"("contractId");
ALTER TABLE "ContractActionLog" ADD CONSTRAINT "ContractActionLog_contractId_fkey" FOREIGN KEY ("contractId") REFERENCES "Contract"("id") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "ContractActionLog" ADD CONSTRAINT "ContractActionLog_actorId_fkey" FOREIGN KEY ("actorId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;