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 |
|