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
+77
View File
@@ -0,0 +1,77 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
/// 企业微信 / 微信手机端配色。
const kInk = Color(0xFF191919);
const kPaper = Color(0xFFEDEDED);
const kBind = Color(0xFF267EF0);
const kBind2 = Color(0xFF1A6FD4);
const kWeGreen = Color(0xFF07C160);
const kMute = Color(0xFF888888);
const kLine = Color(0xFFE5E5E5);
const kBubbleMine = Color(0xFFC9E7FF);
const kDanger = Color(0xFFFA5151);
const kHeader = Colors.white;
ThemeData buildTheme() {
const scheme = ColorScheme.light(
primary: kBind,
secondary: kBind2,
surface: Colors.white,
onPrimary: Colors.white,
onSurface: kInk,
);
return ThemeData(
colorScheme: scheme,
useMaterial3: true,
scaffoldBackgroundColor: kPaper,
splashFactory: NoSplash.splashFactory,
highlightColor: const Color(0x14267EF0),
pageTransitionsTheme: const PageTransitionsTheme(
builders: {
TargetPlatform.android: CupertinoPageTransitionsBuilder(),
TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
TargetPlatform.linux: CupertinoPageTransitionsBuilder(),
TargetPlatform.windows: CupertinoPageTransitionsBuilder(),
},
),
fontFamily: null,
appBarTheme: const AppBarTheme(
backgroundColor: kHeader,
foregroundColor: kInk,
elevation: 0,
scrolledUnderElevation: 0,
centerTitle: true,
titleTextStyle: TextStyle(color: kInk, fontSize: 17, fontWeight: FontWeight.w600),
systemOverlayStyle: SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarIconBrightness: Brightness.dark,
),
),
dividerColor: kLine,
cardTheme: const CardThemeData(
color: Colors.white,
elevation: 0,
margin: EdgeInsets.zero,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(8))),
),
inputDecorationTheme: InputDecorationTheme(
filled: true,
fillColor: Colors.white,
hintStyle: const TextStyle(color: Color(0xFFB2B2B2), fontSize: 15),
contentPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 10),
border: OutlineInputBorder(borderRadius: BorderRadius.circular(6), borderSide: BorderSide.none),
enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6), borderSide: BorderSide.none),
focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(6), borderSide: const BorderSide(color: kBind)),
),
filledButtonTheme: FilledButtonThemeData(
style: FilledButton.styleFrom(
backgroundColor: kBind,
foregroundColor: Colors.white,
elevation: 0,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)),
),
),
);
}