fix(pc-client,account-service): B-61 试用前小修 - 头像取首字/群头像拼格/近似灰Token收敛/重置密码踢下线,构建 v1.0.1 安装包
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
@@ -8,12 +8,12 @@ import { avatarList, getDefaultAvatar } from "@/utils/avatar";
|
||||
|
||||
const default_avatars = avatarList.map((item) => item.name);
|
||||
|
||||
// 头像文字:两个字以内原样显示;中文名取最后一个字,其他取首字母
|
||||
// 头像文字:与手机端一致,中文名取首字(王志远→王);非中文取首字母大写
|
||||
const getDisplayText = (text?: string) => {
|
||||
if (!text) return text;
|
||||
const trimmed = text.trim();
|
||||
if (trimmed.length <= 2) return trimmed;
|
||||
if (/^[一-龥]/.test(trimmed)) return trimmed.slice(-1);
|
||||
if (/^[一-龥]/.test(trimmed)) return trimmed[0];
|
||||
return trimmed[0].toUpperCase();
|
||||
};
|
||||
|
||||
@@ -62,6 +62,34 @@ const OIMAvatar: React.FC<IOIMAvatarProps> = (props) => {
|
||||
}
|
||||
};
|
||||
|
||||
// 群头像:与手机端一致,无真实头像(或加载失败)时用 2x2 蓝灰拼格(浅灰底 + 蓝/灰蓝交替小方块)
|
||||
const showGroupGrid = isgroup && (!src || errorHolder === default_group);
|
||||
if (showGroupGrid) {
|
||||
const cell = (size - 10) / 2;
|
||||
const gridColors = ["var(--primary)", "var(--avatar-gray)", "var(--avatar-gray)", "var(--primary)"];
|
||||
return (
|
||||
<div
|
||||
className={props.className}
|
||||
onClick={props.onClick}
|
||||
style={{
|
||||
width: `${size}px`,
|
||||
height: `${size}px`,
|
||||
backgroundColor: "var(--search-bg)",
|
||||
borderRadius: `${Math.round(size * 0.18)}px`,
|
||||
padding: "2px",
|
||||
display: "grid",
|
||||
gridTemplateColumns: `${cell}px ${cell}px`,
|
||||
gridTemplateRows: `${cell}px ${cell}px`,
|
||||
gap: "2px",
|
||||
}}
|
||||
>
|
||||
{gridColors.map((c, i) => (
|
||||
<div key={i} style={{ backgroundColor: c, borderRadius: "2px" }} />
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<AntdAvatar
|
||||
style={{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export const APP_NAME = "畅联";
|
||||
export const APP_VERSION = "v1.0.0";
|
||||
export const APP_VERSION = "v1.0.1";
|
||||
export const SDK_VERSION = "SDK(ffi) v3.8.3";
|
||||
export const isSaveLog = process.env.NODE_ENV !== "development";
|
||||
|
||||
@@ -55,7 +55,7 @@ const ConversationItem = ({ isActive, conversation }: IConversationProps) => {
|
||||
className={clsx(
|
||||
styles["conversation-item"],
|
||||
"border border-transparent",
|
||||
isActive ? `bg-[var(--primary-active)]` : "hover:bg-[#F3F5F7]",
|
||||
isActive ? `bg-[var(--primary-active)]` : "hover:bg-[var(--chat-bg)]",
|
||||
)}
|
||||
onClick={toSpecifiedConversation}
|
||||
>
|
||||
|
||||
@@ -152,7 +152,7 @@ const ConversationSider = () => {
|
||||
<div className="app-drag px-4 pt-4">
|
||||
<div className="pb-3 text-base font-bold">{t("placeholder.chat")}</div>
|
||||
<Input
|
||||
className="app-no-drag mb-2 rounded-md border-none !bg-[#F3F5F7]"
|
||||
className="app-no-drag mb-2 rounded-md border-none !bg-[var(--chat-bg)]"
|
||||
prefix={<SearchOutlined className="text-[var(--sub-text)]" rev={undefined} />}
|
||||
placeholder={t("placeholder.search")}
|
||||
allowClear
|
||||
|
||||
@@ -5,7 +5,7 @@ export const EmptyChat = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<Layout className="no-mobile flex items-center justify-center !bg-[#F3F5F7]">
|
||||
<Layout className="no-mobile flex items-center justify-center !bg-[var(--chat-bg)]">
|
||||
<div className="flex flex-col items-center">
|
||||
<div className="flex h-16 w-16 items-center justify-center rounded-2xl bg-[var(--primary)]">
|
||||
<svg width="34" height="34" viewBox="0 0 24 24" fill="none">
|
||||
|
||||
@@ -141,7 +141,7 @@ const ChatContent = () => {
|
||||
|
||||
return (
|
||||
<Layout.Content
|
||||
className="relative flex h-full overflow-hidden !bg-[#F3F5F7]"
|
||||
className="relative flex h-full overflow-hidden !bg-[var(--chat-bg)]"
|
||||
id="chat-main"
|
||||
>
|
||||
{renderBody()}
|
||||
|
||||
@@ -185,7 +185,7 @@ const ChatFooter: ForwardRefRenderFunction<unknown, unknown> = (_, ref) => {
|
||||
|
||||
{/* 录音条 */}
|
||||
{recording && (
|
||||
<div className="mx-4 mt-2 flex items-center rounded-md bg-[#F3F5F7] px-3 py-2">
|
||||
<div className="mx-4 mt-2 flex items-center rounded-md bg-[var(--chat-bg)] px-3 py-2">
|
||||
<span className="mr-2 h-2 w-2 animate-pulse rounded-full bg-[var(--warn-text)]" />
|
||||
<span className="flex-1 text-sm">
|
||||
{t("placeholder.microphone")} {seconds}″
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { RightOutlined } from "@ant-design/icons";
|
||||
import { RightOutlined } from "@ant-design/icons";
|
||||
import { Button, Divider, Upload } from "antd";
|
||||
import clsx from "clsx";
|
||||
import { t } from "i18next";
|
||||
@@ -97,7 +97,7 @@ const GroupSettings = ({
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Divider className="m-0 border-4 border-[#F4F5F7]" />
|
||||
<Divider className="m-0 border-4 border-[var(--chat-bg)]" />
|
||||
{currentGroupInfo && isJoinGroup && (
|
||||
<GroupMemberRow
|
||||
currentGroupInfo={currentGroupInfo}
|
||||
@@ -105,9 +105,9 @@ const GroupSettings = ({
|
||||
updateTravel={updateTravel}
|
||||
/>
|
||||
)}
|
||||
<Divider className="m-0 border-4 border-[#F4F5F7]" />
|
||||
<Divider className="m-0 border-4 border-[var(--chat-bg)]" />
|
||||
|
||||
<Divider className="m-0 border-4 border-[#F4F5F7]" />
|
||||
<Divider className="m-0 border-4 border-[var(--chat-bg)]" />
|
||||
<SettingRow className="pb-2" title={`${t("placeholder.group")}ID`}>
|
||||
<div className="flex items-center">
|
||||
<span className="mr-1 text-xs text-[var(--sub-text)]">
|
||||
@@ -131,11 +131,11 @@ const GroupSettings = ({
|
||||
</span>
|
||||
</SettingRow>
|
||||
|
||||
<Divider className="m-0 border-4 border-[#F4F5F7]" />
|
||||
<Divider className="m-0 border-4 border-[var(--chat-bg)]" />
|
||||
|
||||
{isOwner && (
|
||||
<>
|
||||
<Divider className="m-0 border-4 border-[#F4F5F7]" />
|
||||
<Divider className="m-0 border-4 border-[var(--chat-bg)]" />
|
||||
<SettingRow
|
||||
className="cursor-pointer"
|
||||
title={t("placeholder.transferGroup")}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { RightOutlined } from "@ant-design/icons";
|
||||
import { RightOutlined } from "@ant-design/icons";
|
||||
import { Button, Divider, Drawer } from "antd";
|
||||
import { t } from "i18next";
|
||||
import { forwardRef, ForwardRefRenderFunction, memo } from "react";
|
||||
@@ -110,13 +110,13 @@ const SingleSetting: ForwardRefRenderFunction<OverlayVisibleHandle, unknown> = (
|
||||
</div>
|
||||
<RightOutlined rev={undefined} />
|
||||
</div>
|
||||
<Divider className="m-0 border-4 border-[#F4F5F7]" />
|
||||
<Divider className="m-0 border-4 border-[var(--chat-bg)]" />
|
||||
<SettingRow
|
||||
title={t("placeholder.moveBlacklist")}
|
||||
value={isBlack}
|
||||
tryChange={updateBlack}
|
||||
/>
|
||||
<Divider className="m-0 border-4 border-[#F4F5F7]" />
|
||||
<Divider className="m-0 border-4 border-[var(--chat-bg)]" />
|
||||
|
||||
<div className="flex-1" />
|
||||
{isFriend && (
|
||||
|
||||
@@ -153,7 +153,7 @@ const GroupCardModal: ForwardRefRenderFunction<
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<div className="bg-[#F2F8FF] p-5.5">
|
||||
<div className="bg-[var(--call-wait-bg)] p-5.5">
|
||||
<div className="mb-3">{`${t("placeholder.groupMember")}:${
|
||||
groupData?.memberCount
|
||||
}`}</div>
|
||||
|
||||
@@ -87,7 +87,7 @@ export const RtcLayout = ({
|
||||
<div
|
||||
className={clsx(
|
||||
"flex h-full flex-col items-center justify-between bg-[#262729]",
|
||||
{ "!bg-[#F2F8FF]": isWaiting },
|
||||
{ "!bg-[var(--call-wait-bg)]": isWaiting },
|
||||
)}
|
||||
>
|
||||
{renderContent()}
|
||||
|
||||
@@ -91,7 +91,7 @@ const ContactSider = () => {
|
||||
"mx-2 flex cursor-pointer items-center rounded-lg px-3 py-2.5 text-sm",
|
||||
index === selectIndex
|
||||
? "bg-[var(--primary-active)]"
|
||||
: "hover:bg-[#F3F5F7]",
|
||||
: "hover:bg-[var(--chat-bg)]",
|
||||
)}
|
||||
onClick={() => {
|
||||
setSelectIndex(index);
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
--warn-text: #f53f3f;
|
||||
--moment-text: #6085b1;
|
||||
--searchbar-height: 2.5rem;
|
||||
--avatar-gray: #8593a8;
|
||||
--search-bg: #f2f3f5;
|
||||
--chat-bg: #f5f6f8;
|
||||
--call-wait-bg: #f2f8ff;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 600px) {
|
||||
|
||||
Reference in New Issue
Block a user