nameChange

This commit is contained in:
“yuanmengy”
2026-06-05 17:20:59 +08:00
parent a225272d1e
commit a2e7fbdba3
9 changed files with 4 additions and 400 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -1,5 +0,0 @@
{
"enabledPlugins": {
"modern-webapp@cb_teams_marketplace": true
}
}

4
.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
.DS_Store
.codebuddy/
.workbuddy/

View File

@@ -1,36 +0,0 @@
# 2026-05-12 工作记录
## 主要变更:产品线分类 → 公司分类
### 用户需求
用户认为不需要按产品线TalkingQ Pro / TalkingQ Lite分类而是要按**不同公司/客户**来分类。
### 修改内容
1. **index.html**
- 侧边栏:新增"客户公司"导航支持展开子菜单设备管理、OTA升级
- Topbar租户选择器改为公司选择器
- 新增公司数据模型和切换逻辑
2. **styles/main.css**
- 新增公司导航样式company-selector、company-nav-item、company-submenu等
- 新增公司信息提示样式current-company-banner、all-companies-banner
3. **scripts/device.js**(完全重写)
- 移除产品线分类,改用公司分类
- 设备数据增加 companyId 和 companyName 字段
- 支持按当前选中的公司过滤设备
4. **scripts/ota.js**(完全重写)
- 移除产品线分类,改用公司分类
- 每个公司有独立的固件版本列表
- OTA任务按公司分类显示
5. **scripts/rbac.js**(完全重写)
- 移除产品级权限配置,改用公司级权限配置
- Client 角色可分配到特定公司
- Admin/Worker 可访问全部公司数据
### 新数据结构
- **公司列表**:智慧星科技、未来玩具厂、童趣电子
- **权限层级**Admin > Worker > Client按公司隔离

View File

@@ -1,146 +0,0 @@
# 2026-05-13 工作日志
## Bug修复
### 知识库列表页不显示问题
- **问题**`getPaginedData` 拼写错误,应为 `getPaginatedData`,导致 JS 报错
- **修复**scripts/knowledge-base.js 第103行
## 交互优化
### 全局 Tooltip 功能
- **样式优化**:更新 styles/main.css 中 [data-tooltip] 样式
- 添加阴影效果 `box-shadow: 0 2px 8px rgba(0,0,0,0.2)`
- 添加悬停动画 `transform: translateY(-2px)`
- 优化间距和圆角
- **应用范围**:更新以下页面的图标按钮为 `data-tooltip` 属性
- knowledge-base.js列表页、返回按钮
- agent-manage.js应用卡片操作按钮
- badcase.js查看、标注、关闭按钮
- prompt-manage.js编辑、版本记录按钮
- session.js回放、标记按钮
- privacy.js复制、撤销按钮
- kb-create.js重试、删除、返回按钮
- kb-detail.js查看切片、Meta信息、更多操作按钮
- agent-dev.js编辑名称、语音输入、移除技能/插件按钮)
---
## 知识库管理模块完善
### 完成内容
1. **CSS样式完善** (styles/main.css)
- 添加知识库列表页表格样式
- 添加批量操作栏、加载状态、空状态
- 添加知识库类型标签(文档搜索、数据查询、图片问答、音视频搜索)
- 添加文件状态徽章(已就绪、处理中、解析失败)
- 添加分页器样式
- 添加创建向导样式(步骤指示器、内容区、底部操作栏)
- 添加知识库类型卡片选择器
- 添加上传区域、文件列表、类目选择器
- 添加切片配置面板、范围滑块
- 添加详情页样式头部信息、Tab切换、切片列表
- 添加命中测试面板、历史记录
- 添加Tooltip样式、Switch开关、下拉菜单
2. **知识库列表页** (scripts/knowledge-base.js)
- 表格形式展示知识库列表
- 字段:名称、类型、数据量、状态、创建时间、更新时间、操作
- 支持排序、筛选、搜索、分页
- 支持批量选择和批量操作
- 支持查看详情、命中测试、编辑、删除
- 支持重建索引、导出
- 空状态、加载状态展示
- 添加知识库弹窗(列表+创建入口)
3. **创建知识库向导** (scripts/kb-create.js)
- 3步骤流程基础信息→数据选择→索引设置
- Step 1知识库名称必填、描述、类型选择带Tooltip
- Step 2数据连接器说明、3种数据来源文件上传/选择类目/选择文件)
- 文件上传:拖拽上传、进度、状态、删除、重试
- 支持按知识库类型限制文件格式和大小
- 解析方式配置(继承目录/默认/自定义)
- 自动同步开关
- Step 36种切片方式智能/按长度/按页/按标题/按正则/按符号)
- 各切片方式对应参数配置
- 高级参数折叠面板(向量模型、排序模型、排序模式、检索参数)
- 所有专业字段带Tooltip解释
- 支持保存草稿、离开确认
- 必填校验
4. **知识库详情页** (scripts/kb-detail.js)
- 返回按钮、面包屑导航
- 头部信息名称、描述、类型、ID、数据量、更新时间、标签
- 操作按钮(命中测试、编辑、更多菜单)
- Tab切换文件管理、标签管理
- 文件管理Tab
- 文件统计卡片(总数、已解析、解析中、失败)
- 批量操作栏
- 完整文件列表(文件名、格式、大小、数据量、状态、所属类目、切片数、索引时间)
- 支持查看切片、Meta信息、重新解析、删除
- 解析失败显示错误原因
- 标签管理Tab
- 标签列表(新增、删除)
- 批量操作
- 上传数据入口
- 命中测试弹窗:
- 测试参数配置
- 快捷问题标签
- 历史召回记录
### 技术要点
- 所有专业字段带Tooltip解释
- 支持返回上一级、取消操作、弹窗确认
- 保存草稿localStorage
- 离开页面二次确认
- 必填校验
- 空状态、加载状态、解析中状态、失败状态
- 企业级SaaS风格简洁现代
## 知识库管理前端更新完成
### 已更新的文件
1. `styles/main.css` - 完整的企业级样式系统
2. `scripts/knowledge-base.js` - 知识库列表页
3. `scripts/kb-create.js` - 创建知识库Step Form向导
4. `scripts/kb-detail.js` - 知识库详情页
5. `index.html` - 添加暗黑模式切换功能
### 实现的功能
**知识库列表页 (knowledge-base.js)**
- 知识库筛选、搜索、分页、排序
- 批量操作(批量删除、批量导出)
- 添加知识库弹窗(类型筛选、状态筛选、搜索)
- Skeleton加载状态
- Empty空状态
**创建知识库向导 (kb-create.js)**
- Step 1: 基础信息(名称、描述、类型选择)
- Step 2: 数据选择(文件上传、类目选择、文件选择)
- Step 3: 索引设置(切片方式、检索参数)
- 草稿自动保存/恢复
- 必填校验
- 离开确认弹窗
- API接口预留
**知识库详情页 (kb-detail.js)**
- Tab切换文件管理、标签管理、切片管理、统计信息
- 文件列表(状态流转、批量操作)
- 切片编辑(内容编辑、历史版本、回滚)
- 命中测试(快捷问题、历史记录)
- 统计信息切片统计、格式分布、Metadata统计
- API接口预留
**全局功能**
- 暗黑模式切换支持localStorage持久化
- Modal弹窗增强支持size和confirmClass参数
- Tooltip统一小问号样式
- 二次确认弹窗
- Loading/Empty/Error/Skeleton状态
### API预留
所有后端接口已在代码中注释说明,包含:
- GET/POST/DELETE/PUT 各操作的API路径
- Request和Response字段规范

View File

@@ -1,59 +0,0 @@
# 2026-05-14 工作记录
## 修复登录页面CSS样式缺失
**问题**登录页面login page使用了大量CSS类名.login-center-wrapper, .login-form-card, .role-selector, .role-option 等),但 main.css 中完全没有这些类的定义,导致登录页看起来像裸 HTML所有元素堆在左上角。
**修复**:在 styles/main.css 末尾添加了完整的登录页样式约200行包括
- 登录页整体布局(居中、渐变背景)
- 品牌区域样式TalkingQ logo、标语
- 登录卡片(白色卡片、圆角、阴影)
- 角色选择器(三列角色卡片,选中状态高亮)
- 表单输入框(带图标、密码切换按钮)
- 记住登录状态复选框
- 登录按钮(全宽、大号)
- 页脚链接
- 移动端响应式适配
**根因**:之前开发时只写了登录页的 HTML/JS 结构,忘记写对应的 CSS 样式。类似问题已在智能体开发页面agent-dev.js出现过一次这次是登录页面。
---
## 修复侧边栏公司导航CSS样式缺失
**问题**:侧边栏"设备管理"区域的公司列表(.company-nav-item, .company-badge, .company-submenu, .submenu-item完全没有CSS定义导致公司名称、设备数量角标、设备管理/OTA升级子菜单都是纯文本堆叠没有布局、没有图标、没有交互样式。
**修复**:在 styles/main.css 登录页样式之后添加了完整的公司导航样式,包括:
- 公司项company-nav-itemflex布局、hover效果、active选中高亮绿色背景
- 设备数量角标company-badge圆角标签、active时绿色背景
- 子菜单company-submenu默认隐藏、展开时显示
- 子菜单项submenu-item设备管理/OTA升级链接样式
- 图标尺寸和颜色适配深色侧边栏
**根因**与登录页问题相同——HTML/JS结构写了CSS未同步。
---
## 调整侧边栏公司导航交互和颜色
**问题**
1. 未选中的公司项字体颜色太暗var(--text-sidebar) 是半透明灰色),用户希望直接显示白色
2. 子菜单默认隐藏,需要点击才展开,用户希望直接显示
**修复**
- CSS将 company-nav-item 默认颜色从 var(--text-sidebar) 改为 #fff(白色)
- CSS将 company-badge 默认颜色和背景调亮
- CSS将 company-submenu 默认 display 从 none 改为 flex始终展开
- CSS调整 submenu-item 颜色为 rgba(255,255,255,0.7)hover 变白
- JS移除点击公司项时切换子菜单展开/收起的逻辑,只保留选中状态切换
---
## 调整侧边栏公司导航为手风琴模式
**问题**:用户反馈不需要全部展开,希望点到哪个公司哪个展开(手风琴效果)。
**修复**
- CSS将 company-submenu 默认 display 改回 none收起状态
- JS恢复点击公司项时切换子菜单展开/收起的逻辑
- JS添加手风琴效果——展开一个公司时自动收起其他已展开的公司

View File

@@ -1,22 +0,0 @@
# 2026-05-15 工作记录
## 重写三角色权限控制 + 登录页角色改名
**改动列表**
1. **登录页角色卡片**
- 工人 → 员工(图标换为 usersdata-role 保持 worker
- 去掉三个角色的权限描述文字(.role-desc
2. **登录后跳转**:三个角色统一跳转 dashboard之前 client 跳 agent-manageworker 跳 session
3. **权限重新分配**`__updateSidebarForRole`完全重写):
- **管理员**:全部内容可见
- **员工worker**:仪表盘 + 设备管理 + 应用配置 + 会话分析 + 系统管理(隐私保护+系统设置,权限管理隐藏)
- **客户client**:仪表盘 + 会话分析(仅会话详情) + 设备管理仅设备管理无OTA顶部公司选择器隐藏
4. **客户特殊处理**
- `initCompanyNav` 增加 role 参数
- 客户只看自己公司mock: company_a无"全部公司"选项
- 客户的设备管理子菜单不显示 OTA 升级
- 顶部 company-selector 隐藏

View File

@@ -1,35 +0,0 @@
# MEMORY.md - TalkingQ平台 长期记忆
## 项目信息
- **项目名**: TalkingQ AI玩具运营与数据洞察平台
- **类型**: B端运营后台纯前端留后端接口
- **技术栈**: HTML + CSS + Vanilla JS + Chart.js + Lucide Icons
- **品牌色**: #52c41a(绿色,来自商标)、深色侧边栏 #141414
## 项目结构
- 单页应用index.html 入口
- styles/main.css 全局样式约4500行
- scripts/api.js 所有API接口定义mock实现
- 各页面模块单独js文件
## 已实现功能
数据仪表盘、智能体开发ASR/TTS/RAG/语言、智能体管理、Prompt管理、
设备管理、OTA升级、会话详情、Bad Case管理、RBAC权限、PII隐私保护、系统设置
## 用户偏好
- 颜色风格跟商标一致(绿色为主)
- 全前端实现,留接口供未来后端接入
- 智能体开发需要ASR、TTS、RAG挂载、语言选择功能
## 重要修复记录
### 2026-05-14 - UI 样式缺失修复
- **问题**: agent-dev.js 中使用的 CSS 类(如 `.agent-config-layout`, `.module-panel`, `.chat-test-panel`, `.skill-grid` 等)在 main.css 中完全缺失
- **修复**: 在 main.css 末尾添加了约950行缺失的样式定义包括
- 应用配置页面布局agent-config-layout, agent-config-left/right
- 模块标签和面板样式module-tabs, module-tab, module-panel
- 配置行和子区块样式config-row, config-subsection
- 场景模板网格scene-template-grid, scene-item
- 技能网格skill-grid, skill-item
- 对话测试面板chat-test-panel, chat-messages, chat-bubble
- 统计卡片stat-card, stat-value, stat-icon
- 其他缺失组件样式tooltip-box, device-status, firmware-version 等)

View File

@@ -1,97 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>TalkingQ - Test</title>
<style>
body { font-family: sans-serif; padding: 20px; background: #f5f5f5; }
.login-wrapper { display: flex; width: 100%; height: 100vh; overflow: hidden; }
.login-container { width: 460px; padding: 60px 50px; background: #fff; display: flex; flex-direction: column; justify-content: center; }
.login-bg { flex: 1; background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%); display: flex; align-items: center; justify-content: center; color: #fff; }
.login-title { font-size: 28px; font-weight: 700; margin-bottom: 8px; }
.login-subtitle { font-size: 14px; color: #666; margin-bottom: 40px; }
.form-group { margin-bottom: 18px; }
.form-label { display: block; font-size: 13px; font-weight: 500; margin-bottom: 6px; }
.form-control { width: 100%; padding: 10px 12px; border: 1px solid #d9d9d9; border-radius: 6px; font-size: 14px; }
.btn-primary { width: 100%; padding: 12px; background: #52c41a; color: #fff; border: none; border-radius: 6px; font-size: 15px; cursor: pointer; }
.btn-primary:hover { background: #389e0d; }
.error-box { background: #fff2f0; border: 1px solid #ffccc7; padding: 20px; border-radius: 8px; margin-bottom: 20px; color: #ff4d4f; }
</style>
</head>
<body>
<div id="error-container"></div>
<div id="app"></div>
<script>
// Simple test to check for errors
window.onerror = function(msg, url, line, col, error) {
document.getElementById('error-container').innerHTML = '<div class="error-box"><strong>JS Error:</strong><br>' + msg + '<br><small>Line: ' + line + '</small></div>';
return true;
};
</script>
<script src="scripts/api.js"></script>
<script>
console.log('API loaded');
</script>
<script src="scripts/login.js"></script>
<script>
console.log('Login loaded');
</script>
<script src="scripts/app.js"></script>
<script>
console.log('App loaded, registering pages...');
// Check if registerPage exists
if (typeof registerPage !== 'function') {
document.getElementById('error-container').innerHTML += '<div class="error-box">ERROR: registerPage function not found!</div>';
} else {
console.log('registerPage exists');
}
// Check if login page renderer exists
console.log('Checking pageRenderers:', typeof pageRenderers);
// Init
document.addEventListener('DOMContentLoaded', function() {
console.log('DOMContentLoaded fired');
// Show login directly
const app = document.getElementById('app');
app.innerHTML = `
<div class="login-wrapper">
<div class="login-container">
<div class="login-header">
<h1 class="login-title">欢迎回来</h1>
<p class="login-subtitle">AI 玩具智能运营平台</p>
</div>
<form id="testLoginForm">
<div class="form-group">
<label class="form-label">用户名 / 邮箱</label>
<input type="text" class="form-control" id="testUsername" placeholder="请输入用户名或邮箱">
</div>
<div class="form-group">
<label class="form-label">密码</label>
<input type="password" class="form-control" id="testPassword" placeholder="请输入密码">
</div>
<button type="submit" class="btn-primary">登 录</button>
</form>
</div>
<div class="login-bg">
<h2>智能运营,尽在掌控</h2>
</div>
</div>
`;
document.getElementById('testLoginForm').addEventListener('submit', function(e) {
e.preventDefault();
var username = document.getElementById('testUsername').value;
var password = document.getElementById('testPassword').value;
console.log('Login attempt:', username);
alert('登录功能测试中...');
});
});
</script>
</body>
</html>