From 5ce42bf65181da43c7e93a8e5a01436895b46aea Mon Sep 17 00:00:00 2001 From: CrescentLeaf Date: Sat, 20 Sep 2025 16:57:17 +0800 Subject: [PATCH] updated MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 浪費了半天時間, 索性移除了聯絡人分組的支援 --- client/ui/App.tsx | 30 +++++++++++++++------ client/ui/main/ContactsList.tsx | 42 +++++++++++++---------------- client/ui/main/ContactsListItem.tsx | 5 +++- client/ui/main/RecentsList.tsx | 5 +++- client/ui/snackbar.ts | 2 +- server/data/User.ts | 27 +++++++------------ server/data/UserBean.ts | 2 +- 7 files changed, 60 insertions(+), 53 deletions(-) diff --git a/client/ui/App.tsx b/client/ui/App.tsx index ba9943d..a31c047 100644 --- a/client/ui/App.tsx +++ b/client/ui/App.tsx @@ -38,16 +38,16 @@ export default function App() { content: "成步堂君, 我又坐牢了(" }, { - id: '0', + id: '1', avatar: "https://www.court-records.net/mugshot/aa6-004-maya.png", title: "Maya Fey", content: "我是绫里真宵, 是一名灵媒师~" }, ] as RecentChat[]) - const [contactsMap, setContactsMap] = React.useState({ + const [contactsList, setContactsList] = React.useState({ 所有: [ { - id: '0', + id: '1', avatar: "https://www.court-records.net/mugshot/aa6-004-maya.png", nickname: "麻油衣酱", }, @@ -57,7 +57,19 @@ export default function App() { nickname: "Maya Fey", }, ], - } as unknown as { [key: string]: User[] }) + 所2有: [ + { + id: '1', + avatar: "https://www.court-records.net/mugshot/aa6-004-maya.png", + nickname: "麻油衣酱", + }, + { + id: '0', + avatar: "https://www.court-records.net/mugshot/aa6-004-maya.png", + nickname: "Maya Fey", + }, + ], + } as unknown as User[]) const [navigationItemSelected, setNavigationItemSelected] = React.useState('Recents') const navigationRailRef: React.MutableRefObject = React.useRef(null) @@ -140,8 +152,8 @@ export default function App() { - - + + @@ -157,7 +169,8 @@ export default function App() { }} display={navigationItemSelected == "Recents"} - recentsList={recentsList} /> + recentsList={recentsList} + setRecentsList={setRecentsList} /> } { // 联系人列表 @@ -166,7 +179,8 @@ export default function App() { setIsShowChatFragment(true) }} display={navigationItemSelected == "Contacts"} - contactsMap={contactsMap} /> + contactsList={contactsList} + setContactsList={setContactsList} /> } { diff --git a/client/ui/main/ContactsList.tsx b/client/ui/main/ContactsList.tsx index 6bb4efa..41cc975 100644 --- a/client/ui/main/ContactsList.tsx +++ b/client/ui/main/ContactsList.tsx @@ -1,14 +1,17 @@ +import React from "react" import User from "../../api/client_data/User.ts" import ContactsListItem from "./ContactsListItem.tsx" interface Args extends React.HTMLAttributes { - contactsMap: { [key: string]: User[] } + contactsList: User[] + setContactsList: React.Dispatch> display: boolean openChatFragment: (id: string) => void } export default function ContactsList({ - contactsMap, + contactsList, + setContactsList, display, openChatFragment, ...props @@ -17,28 +20,19 @@ export default function ContactsList({ overflowY: 'auto', paddingLeft: '10px', paddingRight: '10px', - display: display ? undefined : 'none' + display: display ? undefined : 'none', + height: '100%', }} {...props}> - - - 添加聯絡人 - { - Object.keys(contactsMap).map((v) => - - {v} - { - contactsMap[v].map((v2) => - - ) - } - - ) - } - + 添加聯絡人 + { + contactsList.map((v2) => + + ) + } } \ No newline at end of file diff --git a/client/ui/main/ContactsListItem.tsx b/client/ui/main/ContactsListItem.tsx index 5555e0a..353ebee 100644 --- a/client/ui/main/ContactsListItem.tsx +++ b/client/ui/main/ContactsListItem.tsx @@ -1,5 +1,6 @@ import User from "../../api/client_data/User.ts" import Avatar from "../Avatar.tsx" +import React from 'react' interface Args extends React.HTMLAttributes { contact: User @@ -8,8 +9,10 @@ interface Args extends React.HTMLAttributes { export default function ContactsListItem({ contact, openChatFragment }: Args) { const { id, nickname, avatar } = contact + const ref = React.useRef(null) + return ( - { recentsList: RecentChat[] + setRecentsList: React.Dispatch> display: boolean openChatFragment: (id: string) => void } export default function RecentsList({ recentsList, + setRecentsList, display, openChatFragment, ...props @@ -16,7 +18,8 @@ export default function RecentsList({ return { recentsList.map((v) => diff --git a/client/ui/snackbar.ts b/client/ui/snackbar.ts index d00e49d..ee583be 100644 --- a/client/ui/snackbar.ts +++ b/client/ui/snackbar.ts @@ -93,6 +93,6 @@ export function checkApiSuccessOrSncakbar(re: ApiCallbackMessage, msg_ahead: str } export function snackbar(opinions: SnackbarOptions) { - opinions.autoCloseDelay == null && (opinions.autoCloseDelay = 2500) + opinions.autoCloseDelay == null && (opinions.autoCloseDelay = 3500) return mduiSnackbar(opinions) } diff --git a/server/data/User.ts b/server/data/User.ts index 2da82ee..e67ea03 100644 --- a/server/data/User.ts +++ b/server/data/User.ts @@ -62,7 +62,7 @@ export default class User { username, nickname, avatar_file_hash, - contact_groups, + contacts_list, settings ) VALUES (?, ?, ?, ?, ?, ?, ?, ?);`).run( crypto.randomUUID(), @@ -71,17 +71,12 @@ export default class User { userName, nickName, null, - '{}', + '[]', "{}" ).lastInsertRowid )[0] ) avatar && user.setAvatar(avatar) - user.setContactGroups({ - 默認: [ - user.bean.id - ] - }) return user } @@ -120,21 +115,19 @@ export default class User { setUserName(userName: string) { this.setAttr("username", userName) } - getContactGroups() { + addContact(userId) { + + } + getContactsList() { try { - return JSON.parse(this.bean.contact_groups) + return JSON.parse(this.bean.contacts_list) } catch (e) { console.log(chalk.yellow(`警告: 聯絡人組解析失敗: ${(e as Error).message}`)) - return { - 默認: [ - this.bean.id - ] - } + return [ + this.bean.id + ] } } - setContactGroups(contactGroups: { [key: string]: string[] }) { - this.setAttr("contact_groups", JSON.stringify(contactGroups)) - } getNickName(): string { return this.bean.nickname } diff --git a/server/data/UserBean.ts b/server/data/UserBean.ts index e97d40d..0c861ab 100644 --- a/server/data/UserBean.ts +++ b/server/data/UserBean.ts @@ -6,7 +6,7 @@ export default class UserBean { declare registered_time: number declare nickname: string declare avatar_file_hash?: string - declare contact_groups: string + declare contacts_list: string declare settings: string [key: string]: unknown