修复用户实测反馈的4处问题:品牌名泄露、修改密码页注释泄露、安全提醒页未居中、群相关行间距

- 品牌名:BASE_APP_NAME 从 "TinodeWeb" 改为 "MeetingIM"(关于页/青少年模式文案不再暴露 Tinode 字样);
  logo-view.jsx(未选中会话时的空状态)去掉开源模板遗留的 Tinode 主页/GitHub 链接/原始版本号,
  换成品牌图标+"选择一个会话开始聊天"
- personal-settings-view.jsx:删除 ChangePassword 页面里被误当正文渲染的开发注释(提及 Tinode 协议),
  改回真正的代码注释
- base.css:.risk-info-page(安全提醒整页)补 margin:0 auto——原来复用模态弹窗的 .risk-dialog 样式,
  宽屏下整块内容贴左显示,没有居中
- base.css:.group-member-picker/.group-settings-header/.group-member-section-title 的 strong/small
  漏加入既有的 line-height:1.3 覆盖名单,继承通用 button{line-height:2.2rem},导致群成员列表/群聊设置
  头部的姓名与角色/简介文字行间距异常大、贴底部分割线过近

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Your Name
2026-09-05 13:06:18 +08:00
co-authored by Claude Sonnet 5
parent bede45fd7f
commit f2218a822e
10 changed files with 83 additions and 75 deletions
+3 -2
View File
@@ -1,7 +1,8 @@
import { PACKAGE_VERSION } from './version.js';
// Version-independent name of this application, used for Firebase app name.
export const BASE_APP_NAME = 'TinodeWeb';
// Version-independent name of this application, used for Firebase app name and shown to users
// (about page, youth-mode copy).
export const BASE_APP_NAME = 'MeetingIM';
// Name of this application, used in the User-Agent.
export const APP_NAME = BASE_APP_NAME + '/' + (PACKAGE_VERSION || '0.25');
+6 -13
View File
@@ -1,25 +1,18 @@
/* This is just a static page to display when no conversation is selected. */
/* Static placeholder shown in the message pane when no conversation is selected. */
import React from 'react';
import { FormattedMessage } from 'react-intl';
import { Tinode } from 'tinode-sdk';
import { BASE_APP_NAME } from '../config.js';
import { APP_NAME } from '../config.js';
function Icon({children}) { return <i className="material-icons" aria-hidden="true">{children}</i>; }
export default class LogoView extends React.PureComponent {
render() {
const version = APP_NAME + ' (' + Tinode.getLibrary() + ')';
return (
<div id="dummy-view">
<div>
<a href="https://github.com/tinode/chat/">
<img id="logo" alt="logo" src="img/logo.svg" />
<h2>Tinode Web</h2>
</a>
<p><FormattedMessage id="label_client" defaultMessage="Client:"
description="Label for a client version" /> {version}</p>
<p><FormattedMessage id="label_server" defaultMessage="Server:"
description="Label for a server version" /> {this.props.serverVersion} ({this.props.serverAddress})</p>
<span id="dummy-view-icon"><Icon>forum</Icon></span>
<h2>{BASE_APP_NAME}</h2>
<p>选择一个会话开始聊天</p>
</div>
</div>
);
+1 -3
View File
@@ -2127,9 +2127,7 @@ class MessagesView extends React.Component {
let component;
if (!this.state.topic) {
component = <LogoView
serverVersion={this.props.serverVersion}
serverAddress={this.props.serverAddress} />;
component = <LogoView />;
} else {
let component2;
+2 -1
View File
@@ -395,6 +395,8 @@ function ClearHistoryConfirm({tinode, chatList, onToast}) {
// (Tinode.updateAccountBasic), already wired end-to-end via tinode-web.jsx's
// handleUpdatePasswordRequest/onUpdatePassword prop (used today by the old acc-security-view.jsx).
// Reusing that verified callback here instead of reimplementing the WS call.
// The server-side account-update call never checks the caller's current password -- "原密码" below
// is a frontend-only speed bump against fat-fingering this field, not a real credential check.
function ChangePassword({onUpdatePassword, onToast}) {
const [oldPwd, setOldPwd] = React.useState('');
const [newPwd, setNewPwd] = React.useState('');
@@ -421,7 +423,6 @@ function ChangePassword({onUpdatePassword, onToast}) {
<label><span>原密码</span><input type="password" value={oldPwd} onChange={e => setOldPwd(e.target.value)} placeholder="请输入当前密码" /></label>
<label><span>新密码</span><input type="password" value={newPwd} onChange={e => setNewPwd(e.target.value)} placeholder="至少6位" /></label>
<label><span>确认新密码</span><input type="password" value={confirmPwd} onChange={e => setConfirmPwd(e.target.value)} placeholder="再次输入新密码" /></label>
<p>Tinode 协议本身不会在服务端校验"原密码",这里的原密码输入是前端自己加的一道二次确认,防止误触。</p>
</main></div>;
}