Commit Graph

249 Commits

Author SHA1 Message Date
Pine f7bcbfa170 ui: 算力中心平台中继令牌说明改为平台中继接口
避免在 UI 上出现'平台中继令牌'字样(该令牌由系统管理,不对外展示)。
后端已过滤该令牌的列表展示和删除操作。
2026-09-08 00:08:36 +08:00
Pine d384bf256a fix: 修复清理调试日志后残留的 console.log( 语法错误 2026-09-07 23:34:54 +08:00
Pine 114b5fa484 chore: 移除外链调试页 /ext-debug 及相关调试日志
- 删除 ExternalLinkDebugPage.tsx 调试页
- 移除 App.tsx / builtinRoutes.tsx 中的 /ext-debug 路由注册
- 移除 Sidebar.tsx 底部「外链调试」入口按钮
- 清理 osRouteStore/osWindowStore/WebPage/openExternalLink 中的
  [ext-debug] 调试日志
2026-09-07 23:33:48 +08:00
Pine f2871a2153 fix: 移除禁用系统浏览器后未使用的 invoke/常量 import 2026-09-07 23:30:13 +08:00
Pine f135a07ebe build: macOS 打包脚本确保生成 DMG 安装包
根因:build_macos_pyinstaller.sh Step 3 显式指定 --bundles app,覆盖了
tauri.conf.json 里的 dmg target,只生成 .app 然后手动打 ZIP,完全没生成 DMG。

修复:
1. --bundles app → --bundles app,dmg(同时构建 .app 和 .dmg)
2. Step 4 增加 DMG 产物收集:从 bundle/dmg/*.dmg 复制到 dist/,
   命名 YunOPC-Hub-{VERSION}-macOS.dmg,输出大小和路径
3. 构建完成摘要增加 DMG 路径
4. package.json 增加快捷脚本:tauri:dev / tauri:build /
   tauri:build:mac / tauri:build:mac:debug
5. tauri.conf.json bundle.macOS.dmg 增加专业配置:
   windowSize [640,440] + applicationFolder=true(DMG 内显示
   /Applications 快捷方式,支持拖拽安装)

macOS DMG 打包依赖系统自带 hdiutil,无需额外安装。
2026-09-07 23:29:53 +08:00
Pine c8a704d65d security: 桌面端绝对禁止调用系统浏览器
堵死所有系统浏览器调用路径:
1. Rust open_external_link 命令改为 no-op(不再调用 app.shell().open,只记录日志)
2. capabilities 移除 shell:allow-open 权限(前端无法直接调用 shell.open)
3. 前端 fallbackToSystem 改为 no-op(容器打开失败时仅日志,不做任何外部打开)
4. 前端 openExternalLinkInternal 的 tauri 分支不再 invoke 系统浏览器命令
5. WebPage 容器移除「系统浏览器打开」按钮(blocked 提示保留但无操作按钮)

配合原生层 on_new_window=Deny(已在上次提交)+ 前端 window.open 守卫 + <a> 点击拦截器,
形成完整的系统浏览器禁用策略:所有外部 HTTP(S) 链接统一由应用内容器 WebPage 沙箱接管。
2026-09-07 23:22:28 +08:00
Pine 4496bac2db fix: 原生层拦截 new_window=Deny,彻底阻止系统浏览器双开
- tauri.conf.json windows=[]:不再自动创建主窗口
- lib.rs setup 中用 WebviewWindowBuilder 手动创建主窗口,builder 上设置
  .on_new_window(|_, _| NewWindowResponse::Deny)——从原生层阻止 window.open /
  target=_blank 被 Tauri 转给系统浏览器(这是唯一可靠的方式,Webview 实例的
  on_new_window 被 unstable feature 门控不可用)
- 窗口配置保持原样:标题云超服、1280x800、最小 960x600、可调整大小
- 配合前端 window.open 守卫 + <a> 点击拦截器,形成原生+前端双层拦截
2026-09-07 23:08:04 +08:00
Pine 0132cbfd04 fix: 前端 window.open 守卫从源头阻止 Tauri 新窗口/系统浏览器双开
- 新增 windowOpenGuard.ts:覆盖 window.open,外部 HTTP(S) 链接统一走
  openExternalLink(应用内容器 WebPage 沙箱),同源/相对/mailto/tel 放行
- App 启动时 installWindowOpenGuard() + 预加载黑白名单规则
- 回退 Rust 端 unstable feature / on_new_window 方案(API 被 unstable 门控,
  编译路径复杂;前端守卫更可靠且无需重新打包 Tauri)
- 配合 interceptBlankLinkClicks(<a> 点击 capture preventDefault)形成完整接管
2026-09-07 22:57:21 +08:00
Pine 62375ed7db fix: tauri.conf new_window 配置路径修正(WindowConfig 直接字段,非 webview 子对象) 2026-09-07 22:43:55 +08:00
Pine fe0af6f964 fix: 网页容器三问题修复
1. 双重打开:tauri.conf webview.new_window=deny,阻止 target=_blank/window.open
   被 Tauri 转给系统浏览器(需重新打包 Tauri 生效)
2. 黑名单未静默:openExternalLink/openInAppWebView 加同步缓存黑名单判定
   (getCachedUrlRulesSync + classifyUrl),命中立即 return 无任何动作;
   App 启动预加载 loadUrlRules,避免首次点击异步等待
3. 加载慢:iframe 不再 visibility:hidden,立即渲染;loading 改半透明覆盖层;
   blockedTimer 6s→15s 减少误报系统浏览器打开
2026-09-07 22:38:58 +08:00
Pine c32490e213 feat: URL 名单支持通配 *.gov.cn 与正则 /pattern/ 判定
- parseHostList 保留正则/通配形态
- hostRuleMatches:正则 /pattern/、通配 *、普通域名后缀匹配三态
2026-09-07 22:25:25 +08:00
Pine 641d2f19ff feat: URL 黑白名单接入应用端(黑名单静默拦截)
- urlTrust:loadUrlRules 读取 site.url_whitelist/blacklist;classifyUrl 返回
  block/trusted/third-party(黑名单优先)
- openExternalLink / openInAppWebView / 全局锚点拦截器:命中黑名单静默不打开
- WebPage 判定改用 classifyUrl;黑名单防御直接关闭
2026-09-07 22:19:36 +08:00
Pine 2290c103db fix: 白屏崩溃 + shell.open 权限
1. WebViewOverlayHost 内 WebPage 是 lazy 组件,脱离 Suspense 边界渲染
   → React 抛错整树卸载(纯背景无内容)。包 Suspense fallback=null。
2. Rust 端 app.shell().open 缺 shell:allow-open 权限
   → invoke open_external_link 被拒(shell.open not allowed)。补权限。
2026-09-07 22:05:19 +08:00
Pine f27085ac6b fix: 网页容器覆盖层宿主上移到全局(BrowserRouter 内)
根因:诊断页 /ext-debug 在 MainLayout 外壳之外,覆盖层宿主只挂在
MainLayout 顶层,诊断页里 open 容器后无宿主渲染 → 只有 invoke 系统浏览器
可用。将 WebViewOverlayHost 移到 BrowserRouter 内(所有路由共享),
移除 MainLayout 内宿主避免双渲染。
2026-09-07 21:16:19 +08:00
Pine b75bb620f9 debug: 独立外链诊断页 /ext-debug(侧边栏入口),移除全局调试面板
- 新增 ExternalLinkDebugPage:环境快照(tauri/osPath/internals/pywebview/
  origin/pathname/overlayUrl)+ 8 种调用按钮(openExternalLink 百度/白名单/
  pinesound、openInAppWebView、window.open、Tauri invoke 直调、关闭覆盖层)
  + 带时间戳日志列表
- 路由:builtinRoutes + App.tsx 注册 /ext-debug;Sidebar 底部「外链调试」入口
- 移除 App 全局 ExternalLinkDebug 面板
2026-09-07 21:04:25 +08:00
Pine 0277d51ed3 fix: 网页容器支持 MainLayout 覆盖层模式(桌面端主界面)
根因:桌面端实际运行在 MainLayout(/console 路径),无 OS 桌面窗口系统,
openApp 打开的 core.web-view 窗口无处渲染 → 外链点击无反应。
- 新增 webViewStore:MainLayout/浏览器模式以全屏覆盖层渲染 WebPage
- openInAppWebView 分流:/os 模式 → OS 窗口;否则 → 覆盖层(回到原页面)
- MainLayout 顶层挂载 {url && <WebPage/>};WebPage 支持 overlay 模式退出
- 调试面板移到 App 全局层(MainLayout 与 OS 均可见)
2026-09-07 20:58:33 +08:00
Pine f910ab292d debug: 外链调起诊断面板+全链路日志(临时)
桌面左上角固定调试面板:显示 tauri/osPath/pywebview/pathname 环境判定,
三个按钮分别走 openExternalLink(百度/白名单资讯)与 openInAppWebView;
面板内实时展示最近日志。关键链路埋点 [ext-debug]:
openExternalLink 判定 → openInAppWebView → osRouteStore.openApp →
osWindowStore.open(含当前窗口列表)→ WebPage mount。
2026-09-07 18:27:23 +08:00
Pine b852157651 fix: 桌面端外部链接全面接管到应用内网页容器
- 拦截器扩展:不再只拦 target=_blank,所有指向外部 http/https/mailto/tel
  的 <a> 点击(含无 target 的普通外链)统一 preventDefault 交给
  openExternalLink,修复 Tauri WebView 静默吞掉普通外链导致「没反应」
- openInAppWebView 改静态 import(消除动态 import 失败可能),打开失败
  时兜底走系统浏览器,绝不让链接无响应
- CSP 增加 frame-src https: http: data:,允许容器 iframe 嵌入任意第三方
  站点(原先 default-src 'self' 会把容器内容直接拦成白屏)
2026-09-07 18:22:47 +08:00
Pine 05d37ffd35 fix: 桌面端内置后端补算力接口转发(/compute/* 全量 + /opc/compute 缺漏)
- 新增 compute_forward 转发模块:覆盖 rbac_compute_pricing 全部接口(运营端
  admin、载体端 tenant、企业端 enterprise 余额/充值/分配/订单/转账、个人端、
  内部 price/deduct)
- opc.py 补齐 /opc/compute/usage/logs 与 /opc/compute/usage/trend 转发
2026-09-07 18:13:40 +08:00
Pine ebffd957ed fix: 桌面端内置后端补企业身份链路转发路由(/admin/ent/*、/ent/teams/*)
桌面应用 pineagents 后端对 hall/community 为纯转发,但企业认领/入驻/团队
接口未注册转发路由导致 404。新增 ent_onboard 转发模块,覆盖 rbac_enterprise/
rbac_ent_onboard/rbac_teams 全部 26 条接口,字面路径先于 {tid}/{cid} 注册。
2026-09-07 18:01:20 +08:00
Pine 504e668bcd fix: web 容器退出按钮硬退出页面本身(OS 关闭窗口 / 非 OS 回首页),阻止冒泡与历史回退 2026-09-07 17:37:02 +08:00
Pine baf1d91563 style: web 网页容器去除顶部页眉,仅保留页脚说明条与关闭按钮 2026-09-07 17:27:05 +08:00
Pine 7a7759fe17 feat: 应用内网页容器接管第三方页面(复用个人主页结构)
- 新增 core.web-view 网页容器:顶部标识条(favicon+域名+认证Tag)+ 沙箱 iframe
  + 底部来源说明条(白名单→平台认证页面 / 非白名单→第三方网页内容请注意甄别)
  + 右上角胶囊(刷新/更多/系统浏览器打开/返回)
- 白名单:site.url_whitelist 配置 + 平台默认域名(pinesound/infoepoch 系列),同源恒可信
- openExternalLink 接管:桌面环境(Tauri/OS 模式)http(s) 链接一律进应用内容器,
  mailto/tel 保持系统行为;容器内「系统浏览器打开」强制走系统
- 路由:/webpage 窗口路由 + App 路由均注册
2026-09-07 17:23:58 +08:00
Pine 473450fac5 fix: 园区列表改用公开接口 /community/carriers(普通用户可访问)
adminParkTenants 原调 /admin/park/tenants 需 operator 角色导致我的企业/转园加载不到园区
2026-09-07 16:49:47 +08:00
Pine 1f6e168e46 fix: BuildingOutlined 不存在,改用 ApartmentOutlined 2026-09-07 16:42:33 +08:00
Pine 316901ef7f feat: 个人资料归属企业空态增加认领/入驻/创建团队引导入口 2026-09-07 16:26:16 +08:00
Pine f3493b158b feat: 桌面端企业身份链路(认领/入驻/团队/审核)
- 我的企业:未绑定态 4 入口(认领企业搜索式/入驻企业/入驻园区/创建团队)
  + 我的申请记录 + 团队管理(成员/退出/升级企业)
- 园区审核:新增「企业认领审核」「企业入驻审核」页面(园区管理员)
- 企业管理:成员管理页新增成员认领审核(企业管理员)
- ent.ts:认领/入驻申请/团队 API 全量封装
2026-09-07 16:21:55 +08:00
Pine 942a58a045 fix: 语音模型分组将 realtime/streaming 模型归入实时对话组
qwen3-asr-flash-realtime 等实时模型只走 WebSocket/流式通道,
不支持 OpenAI 兼容 HTTP 转写(/audio/transcriptions),
之前因名字含 'asr' 被误分进转写组,用户选择后百炼返回 404。
现优先按 realtime/streaming/s2s/omni 判定归入 voice_chat,
ASR 组仅保留支持兼容转写的标准模型(qwen3-asr-flash 系列)。
2026-09-07 15:21:09 +08:00
Pine 92688e13bd fix: 补回首次挂载加载语音转写配置的 useEffect
根因:e8991c4 加二级模型下拉时,误把原有
useEffect(() => { fetchSettings(); }, []) 整段替换掉,
导致 loading 初始为 true 且永远无人调用 fetchSettings,
页面一直停留在加载动画。
现补回挂载即加载配置;模型目录拉取 effect 保持
[providerType, selectedProviderId] 稳定依赖,不循环。
2026-09-07 15:12:03 +08:00
Pine 233aae0929 fix: 语音转写客户端携带登录态(JWT)鉴权头
- 复用 provider._client()(含 PineAgents custom_headers 注入的 JWT),server-core 才能归户到用户算力令牌计量
- 非 OpenAIProvider 回退原 base_url+api_key 逻辑
2026-09-07 14:52:51 +08:00
Pine e8991c4d27 feat: 语音转写页面支持 PineAgents 二级语音模型选择
- 后端:GET /transcription-provider-models 按 TTS/ASR/实时对话 分组返回 PineAgents(算力中心) 语音模型;PUT /transcription-provider 支持 model 字段
- 前端:ProviderSelectCard 选提供商后显示二级模型下拉(分组+搜索),保存供应商+模型到 config.json
2026-09-07 14:48:00 +08:00
Pine 903c4f93b9 线上社区帖子详情+评论交流:点击卡片打开详情抽屉,支持点赞/评论/楼中楼回复 2026-09-07 14:36:16 +08:00
Pine 0b7d232696 feat: 人才大厅加回类型切换(全部/OPC超级个体/求职者)
服务端 talents?type=opc|seeker 过滤,卡片按 talentType 显示 OPC/求职者标签
2026-09-07 14:25:25 +08:00
Pine d656028fed feat: 创建 API 令牌弹窗支持自定义名称(留空自动编号) 2026-09-07 14:08:04 +08:00
Pine 0d2b0ef958 fix: 算力中心图表文本/金额/充值交互
- 趋势图/24h柱状图改真实 viewBox 等比例渲染,去除 preserveAspectRatio=none 文本变形;Y轴金额刻度+日期字号修正
- 近7天消耗、日均/最高/最低、消耗明细金额统一微元转元
- 模型调用分布图例改占比百分比,环形图中心显示调用次数(不再误显 %)
- 快捷充值点击打开充值弹窗并直接下单
- 充值弹窗支持自定义金额(amount_yuan)
- 消耗账单新增渠道列(桌面端 / Key·令牌名)
2026-09-07 14:03:05 +08:00
Pine c2645f459b feat: 社区tab UI优化(交流社区风格)+ 筛选栏下边距修正
- 线上社区:分类改为毛玻璃胶囊工具条,选中渐变高亮;发帖按钮渐变胶囊
- 帖子卡片:独立社区样式(毛玻璃+圆角16),置顶帖左侧琥珀渐变条+📌徽标
- 帖子头部作者信息/分类彩色/时间;标题16px醒目,正文两行省略
- 互动条:点赞(心形可点)+评论数
- 修正筛选栏 .pageHeader 下边距(16px),撤销此前对 tabs 间距的误改
2026-09-07 13:26:25 +08:00
Pine 5cf45b14c9 feat: 沉浸式浏览人才主页 + 人才类型统一 + 大厅间距优化
- 人才大厅:新增「沉浸式浏览」按钮,从第一个人主页开始,页眉左右切换/位置指示;退出直达人才大厅
- 去除人才大厅「全部/OPC/求职者」筛选 tabs,档案类型改为下拉「人才/求职者」,一套资料按类型判断归属展示
- 大厅二级 tabs 与主内容区间距加大(gap 32px)
- usershome 加载/空态垂直水平居中(min-height 100vh)
2026-09-07 13:18:34 +08:00
Pine 14a8ca844e fix: mySocialStats 返回类型引用 UserPageSocialStats;Waveform→AudioWaveform
- 修复 build 类型不匹配(recentLikers/recentGreets 缺 nickname/avatar 字段)
2026-09-07 12:46:31 +08:00
Pine f6ca04f8c8 feat: 人才-我的沟通加入打招呼访客记录
- 会话列表上方展示打招呼的访客(头像/昵称/内容/时间)
- 每条提供「发起沟通」按钮,一键打开私聊
- mySocialStats 类型补充访客 nickname/avatar
2026-09-07 12:42:16 +08:00
Pine eeb4c0f477 fix: 8088 转发层补充个人主页社交互动路由
- /pages/me/social/stats (GET) 本人互动数据
- /pages/{user_id}/view|like|greet (POST) 流量/点赞/打招呼
- 此前缺失导致桌面端 POST 405、主页数据弹窗提示加载数据失败
2026-09-07 12:37:08 +08:00
Pine c9c59f1b61 feat: 个人主页固定页眉右侧社交互动
- 访客视角:点赞(一人一赞可取消)+ 打招呼按钮置于固定页眉右侧
- 本人视角:流量/点赞/招呼统计按钮 + 主页数据弹窗(近7日趋势/最近打招呼)
- 打开他人主页自动上报流量(当日同访客去重)
- pagesApi 新增 view/like/greet/mySocialStats
2026-09-07 12:28:42 +08:00
Pine 0d8e7e57b1 修复 UserHomePage 导入不存在的 lucide-react Waveform 图标 → AudioWaveform 2026-09-07 12:28:04 +08:00
Pine c53d88e626 fix: 应用中心与OPC个人主页改为独立路由渲染,修复打包后被侧边栏页眉遮蔽;补充返回入口并清理编译警告 2026-09-07 10:14:07 +08:00
Pine be6798d8ae 进件支持小微商户/个人主体类型
微信支付规则确认:
1. 特约商户进件API(applyment4sub)支持三种主体类型:
   - SUBJECT_TYPE_ENTERPRISE(企业)- 有营业执照
   - SUBJECT_TYPE_INDIVIDUAL(个体工商户)- 有营业执照
   - SUBJECT_TYPE_MICRO(小微商户/个人)- 无营业执照,免工商注册

2. 小微商户进件特殊要求:
   - 超级管理员必须是经营者本人
   - 结算账户只能是经营者个人银行卡
   - 需要小微辅助证明材料(经营类型+门店照片/线上店铺等)
   - 商户名称规则:商户_经营者姓名
   - 收款额度:初始1万/日,交易良好可自动提升

前端修改:
1. 主体类型选择增加「小微商户/个人」选项
2. 根据主体类型动态显示表单字段:
   - 企业/个体工商户:营业执照+法人身份证正面
   - 小微商户:身份证正反面+经营场所证明
3. 小微商户增加经营类型选择(门店/流动/线上)
4. 门店场所类型增加门头照片和店内环境照片上传
5. 结算账户:小微商户强制个人银行卡,不需要省市编码
6. 提交逻辑根据主体类型构建不同的微信API请求参数

后端无需修改,submit_applyment函数透传参数,已兼容小微商户参数结构。
2026-09-06 23:41:13 +08:00
Pine 44653f6048 关闭个人微信收款功能,当前阶段要求所有用户必须完成特约商户进件
修改内容:
1. 前端移除「个人微信收款」Tab,仅保留「我的收款方式」和「特约商户开户」
2. 移除个人微信收款相关的状态、函数和表单
3. 更新空状态提示,引导用户完成进件
4. 更新页面标题和副标题,强调完成进件后即可收款

业务决策:
- 暂时关闭个人微信零钱收款(PERSONAL_OPENID分账)
- 当前阶段所有用户(包括个人用户)必须完成特约商户进件才能收款
- 后续版本有必要时再开放个人微信收款
2026-09-06 23:33:27 +08:00
Pine d53486e8d6 fix: 修复桌面端编译33个错误(ent.ts重新导出语法/未使用导入/MyBalance样式路径) 2026-09-06 18:38:52 +08:00
Pine d2a0101bbf 修复桌面端编译42个错误
API模块:
- compute.ts:添加computeApi统一导出对象
- ent.ts:添加entApi统一导出对象

导入路径修复:
- 企业管理页面:从../../../../api/modules改为../../../api/modules
- MyBalance.tsx:修复API路径和OpcPageHeader路径
- UserCompaniesSection.tsx:修复API路径

类型错误修复:
- Discounts.tsx:ParkPageWrapper children改为函数形式
- 移除所有未使用的导入

TypeScript类型检查通过
2026-09-06 18:29:29 +08:00
Pine ea6d049eb7 载体折扣设置+个人资料扩展+我的余额页面
载体端:
- Discounts.tsx:载体折扣设置页面(默认折扣/企业折扣/账号折扣)
- 菜单和路由配置

个人资料扩展:
- UserCompaniesSection.tsx:归属企业组件(企业列表/角色/余额/退出企业)
- Profile.tsx:集成归属企业模块

我的余额页面:
- MyBalance.tsx:余额总览/企业余额明细/算力使用记录
- 菜单和路由配置

TypeScript类型检查通过
2026-09-06 18:13:41 +08:00
Pine 440f4ae246 企业管理功能 - 桌面端核心实现
API模块:
- compute.ts:算力多级折扣与余额API(运营/载体/企业/个人/内部接口)
- ent.ts:企业管理API(信息/成员/转园/余额)

企业管理页面:
- Layout.tsx:企业管理布局组件(自动加载企业上下文,未绑定显示提示)
- Info.tsx:企业信息页面(展示/编辑企业资料、员工统计)
- Members.tsx:成员管理页面(成员列表、添加成员、移除成员)
- Compute.tsx:算力余额页面(余额总览、充值、成员分配/回收、记录)

菜单和路由:
- 新增企业管理菜单分组(企业信息/成员管理/算力余额)
- 新增3个企业管理路由
- 所有登录用户可见菜单,页面内部检查企业管理员权限

设计规范:
- 毛玻璃材质卡片
- 苹果风格按钮
- 渐变配色
- TypeScript类型检查通过
2026-09-06 18:07:04 +08:00
Pine be39b884c3 修复园区管理样式文件引用和路由重定向
- 恢复ParkWorkbench.module.less样式文件并移动到park目录
- 修改所有16个页面的样式引用路径从../改为./
- 将/carrier路由重定向到/carrier/companies(企业管理默认页)
- 删除未使用的ParkLayoutPage路由导入
- TypeScript类型检查通过
2026-09-06 17:28:05 +08:00