Files
Public/apps/native/lib/im/pinyin.dart
T
daiyongkang 76f266645d Initial commit: 风影 OA 全栈源码(API/Web/Flutter/IM)
含 Phase 1.1 IM seq 排序、断线重连、多端已读同步与微信式语音转文字 UI。
排除 node_modules、构建产物、安装包与 .env 密钥。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 10:04:03 +00:00

82 lines
6.6 KiB
Dart

/// 姓名首字母。按百家姓,避免大量同事被丢进「#」。
const _surnames = {
'': 'Z', '': 'Q', '': 'S', '': 'L', '': 'Z', '': 'W', '': 'Z', '': 'W',
'': 'F', '': 'C', '': 'C', '': 'W', '': 'J', '': 'S', '': 'H', '': 'Y',
'': 'Z', '': 'Q', '': 'Y', '': 'X', '': 'H', '': 'L', '': 'S', '': 'Z',
'': 'K', '': 'C', '': 'Y', '': 'H', '': 'J', '': 'W', '': 'T', '': 'J',
'': 'Q', '': 'X', '': 'Z', '': 'Y', '': 'B', '': 'S', '': 'D', '': 'Z',
'': 'Y', '': 'S', '': 'P', '': 'G', '': 'X', '': 'F', '': 'P', '': 'L',
'': 'L', '': 'W', '': 'C', '': 'M', '': 'M', '': 'F', '': 'H', '': 'F',
'': 'Y', '': 'R', '': 'Y', '': 'L', '': 'F', '': 'B', '': 'S', '': 'T',
'': 'F', '': 'L', '': 'C', '': 'X', '': 'L', '': 'H', '': 'N', '': 'T',
'': 'T', '': 'Y', '': 'L', '': 'B', '': 'H', '': 'W', '': 'A', '': 'C',
'': 'Y', '': 'Y', '': 'S', '': 'F', '': 'P', '': 'B', '': 'Q', '': 'K',
'': 'W', '': 'Y', '': 'Y', '': 'B', '': 'G', '': 'M', '': 'P', '': 'H',
'': 'H', '': 'M', '': 'X', '': 'Y', '': 'Y', '': 'S', '': 'Z', '': 'W',
'': 'Q', '': 'M', '': 'Y', '': 'D', '': 'M', '': 'B', '': 'M', '': 'Z',
'': 'J', '': 'F', '': 'C', '': 'D', '': 'T', '': 'S', '': 'M', '': 'P',
'': 'X', '': 'J', '': 'S', '': 'Q', '': 'X', '': 'Z', '': 'D', '': 'L',
'': 'D', '': 'R', '': 'L', '': 'M', '': 'X', '': 'J', '': 'M', '': 'Q',
'': 'J', '': 'L', '': 'L', '': 'W', '': 'J', '': 'T', '': 'Y', '': 'G',
'': 'M', '': 'S', '': 'L', '': 'D', '': 'Z', '': 'X', '': 'Q', '': 'L',
'': 'G', '': 'X', '': 'C', '': 'T', '': 'F', '': 'H', '': 'L', '': 'H',
'': 'Y', '': 'W', '': 'Z', '': 'K', '': 'Z', '': 'G', '': 'L', '': 'M',
'': 'J', '': 'F', '': 'Q', '': 'M', '': 'G', '': 'X', '': 'Y', '': 'Z',
'': 'D', '': 'X', '': 'B', '': 'D', '': 'Y', '': 'S', '': 'H', '': 'H',
'': 'B', '': 'Z', '': 'Z', '': 'S', '': 'C', '': 'J', '': 'N', '': 'G',
'': 'C', '': 'J', '': 'X', '': 'H', '': 'P', '': 'L', '': 'R', '': 'W',
'': 'X', '': 'Y', '': 'Y', '': 'H', '': 'Z', '': 'Q', '': 'J', '': 'F',
'': 'R', '羿': 'Y', '': 'C', '': 'J', '': 'J', '': 'B', '': 'M', '': 'S',
'': 'J', '': 'D', '': 'F', '': 'W', '': 'W', '': 'J', '': 'B', '': 'G',
'': 'M', '': 'K', '': 'S', '': 'G', '': 'C', '': 'H', '': 'M', '': 'P',
'': 'Q', '': 'X', '': 'B', '': 'Y', '': 'Q', '': 'Z', '': 'Y', '': 'G',
'': 'N', '': 'Q', '': 'L', '': 'B', '': 'G', '': 'T', '': 'L', '': 'R',
'': 'Z', '': 'W', '': 'F', '': 'L', '': 'J', '': 'Z', '': 'S', '': 'L',
'': 'Y', '': 'X', '': 'S', '': 'S', '': 'G', '': 'L', '': 'J', '': 'B',
'': 'Y', '宿': 'S', '': 'B', '怀': 'H', '': 'P', '': 'T', '': 'C', '': 'E',
'': 'S', '': 'X', '': 'J', '': 'L', '': 'Z', '': 'L', '': 'T', '': 'M',
'': 'C', '': 'Q', '': 'Y', '': 'X', '': 'N', '': 'C', '': 'S', '': 'W',
'': 'S', '': 'D', '': 'Z', '': 'T', '': 'G', '': 'L', '': 'P', '': 'J',
'': 'S', '': 'F', '': 'D', '': 'R', '': 'Z', '': 'L', '': 'Y', '': 'X',
'': 'Q', '': 'S', '': 'G', '': 'P', '': 'N', '寿': 'S', '': 'T', '': 'B',
'': 'H', '': 'Y', '': 'J', '': 'J', '': 'P', '': 'S', '': 'N', '': 'W',
'': 'B', '': 'Z', '': 'Y', '': 'C', '': 'Q', '': 'Y', '': 'C', '': 'M',
'': 'L', '': 'R', '': 'X', '': 'H', '': 'A', '': 'Y', '': 'R', '': 'X',
'': 'G', '': 'Y', '': 'S', '': 'G', '': 'L', '': 'Y', '': 'Z', '': 'J',
'': 'J', '': 'H', '': 'B', '': 'D', '': 'G', '': 'M', '': 'H', '': 'K',
'': 'G', '': 'W', '': 'K', '广': 'G', '': 'L', '': 'Q', '': 'D', '': 'O',
'': 'S', '': 'W', '': 'L', '': 'W', '': 'Y', '': 'K', '': 'L', '': 'S',
'': 'G', '': 'S', '': 'N', '': 'C', '': 'G', '': 'A', '': 'R', '': 'L',
'': 'Z', '': 'X', '': 'K', '': 'N', '': 'J', '': 'R', '': 'K', '': 'Z',
'': 'W', '': 'S', '': 'N', '': 'Y', '': 'J', '': 'X', '': 'F', '': 'C',
'': 'G', '': 'K', '': 'X', '': 'Z', '': 'H', '': 'J', '': 'H', '': 'Y',
'': 'Z', '': 'Q', '': 'L', '': 'G', '': 'Y', '': 'H', '': 'G', '万俟': 'M',
'司马': 'S', '上官': 'S', '欧阳': 'O', '夏侯': 'X', '诸葛': 'Z', '闻人': 'W', '东方': 'D',
'赫连': 'H', '皇甫': 'H', '尉迟': 'Y', '公羊': 'G', '澹台': 'T', '公冶': 'G', '宗政': 'Z',
'濮阳': 'P', '淳于': 'C', '单于': 'C', '太叔': 'T', '申屠': 'S', '公孙': 'G', '仲孙': 'Z',
'轩辕': 'X', '令狐': 'L', '钟离': 'Z', '宇文': 'Y', '长孙': 'Z', '慕容': 'M', '鲜于': 'X',
'闾丘': 'L', '司徒': 'S', '司空': 'S', '丌官': 'Q', '司寇': 'S', '': 'Z', '': 'D',
'子车': 'Z', '颛孙': 'Z', '端木': 'D', '巫马': 'W', '公西': 'G', '漆雕': 'Q', '乐正': 'Y',
'壤驷': 'R', '公良': 'G', '拓跋': 'T', '夹谷': 'J', '宰父': 'Z', '谷梁': 'G', '': 'J',
'': 'C', '': 'Y', '': 'F', '': 'R', '': 'Y', '': 'T', '': 'Q', '段干': 'D',
'百里': 'B', '东郭': 'D', '南门': 'N', '呼延': 'H', '': 'G', '': 'H', '羊舌': 'Y',
'微生': 'W', '': 'Y', '': 'S', '': 'G', '': 'K', '': 'K', '': 'Y',
'': 'Q', '梁丘': 'L', '左丘': 'Z', '东门': 'D', '西门': 'X', '': 'S', '': 'M',
'': 'S', '': 'N', '': 'B', '': 'S', '南宫': 'N', '': 'M', '': 'H', '': 'Q',
'': 'D', '': 'N', '': 'A', '': 'Y', '': 'T', '': 'Y', '': 'F', '西': 'X',
'': 'N', '': 'B',
};
String letterOf(String name) {
final n = name.trim();
if (n.isEmpty) return '#';
if (n.length >= 2) {
final two = _surnames[n.substring(0, 2)];
if (two != null) return two;
}
final c = n[0];
if (RegExp(r'[A-Za-z]').hasMatch(c)) return c.toUpperCase();
if (RegExp(r'[0-9]').hasMatch(c)) return '#';
return _surnames[c] ?? '#';
}