信呼OA v1.9.1部署与流程实战:中小团队生产级协同底座

简介:信呼协同办公OA系统v1.9.1是一款面向中小企业及IT运维/开发人员的开源办公平台解决方案,旨在解决多终端协作、流程标准化与系统可定制化等核心管理需求。资源包共1256个文件,主体为606个PHP后端逻辑文件、231个GIF/79个PNG/3个JPG等前端资源图,辅以148个HTML页面模板、146个JS交互脚本及27个CSS样式表(含bootstrap_cerulean.css、weui.min.css、font-awesome系列等主流UI框架),整体压缩包仅2.83MB,轻量易部署。目前已有481人学习下载,适合希望快速搭建私有化OA、研究开源协同系统架构或二次开发审批流/考勤模块的开发者。用户可直接运行完整Web应用,获取包含日程任务、文件共享、IM通讯、权限管控等全功能模块的可执行代码,同时通过清晰的目录结构与标准化命名(如webimcss.css、webmain.css)快速定位核心业务层与表现层实现逻辑。

1. 信呼协同办公OA系统 v1.9.1:不是又一个“能跑就行”的OA Demo,而是真正在中小团队里扛住日均300+流程、200人并发审批、自定义表单嵌套三级联动的生产级协同底座

你可能已经下载过十几个标着“开源OA”“免费协同系统”的压缩包,解压后点开index.html,界面清爽、菜单完整、甚至还有个“待办提醒”弹窗——但只要一导入真实业务数据,比如销售合同审批要关联客户档案+项目预算+法务条款库,再加个“超50万需副总二次确认”的动态节点,系统就卡在流程图编辑器里转圈,或者提交后状态永远停在“已发起”。信呼v1.9.1不是这样。它用ThinkPHP 5.1 + MySQL 5.7双栈稳扎稳打,把“流程可配置、表单可编程、权限可切片、接口可穿透”这四件事做成了默认能力,而不是插件开关。它不追求大屏可视化或AI摘要这类炫技功能,但当你需要把采购申请单里的“供应商类型”字段联动过滤“合格供应商名录”,且名录本身来自另一个审批流归档结果时,它原生支持JSON Schema驱动的字段联动规则引擎。适合正在从Excel+微信审批向轻量级数字化迁移的10–200人团队,尤其适配制造业现场班组长提报设备故障、教育机构教务员排课调课、技术服务公司工程师填工时日志这类强业务耦合场景。


2. 部署前必读:为什么选v1.9.1而非最新版?PHP版本、MySQL模式与Nginx重写规则的硬性对齐逻辑

信呼v1.9.1并非简单迭代,而是ThinkPHP 5.1生态下最后一个全面兼容PHP 7.2–7.4、且未强制要求PHP 8+类型声明的稳定分支。很多团队翻车,不是因为不会部署,而是没看清这个版本的技术锚点:它依赖MySQL的STRICT_TRANS_TABLES模式(非NO_ENGINE_SUBSTITUTION),且Nginx必须启用try_files指令兜底,否则所有路由跳转会404。下面拆解三个关键对齐点。

2.1 PHP环境:7.2–7.4是黄金区间,7.4.33为实测最稳小版本

v1.9.1核心类库中存在多处create_function()调用(虽已废弃但未移除),PHP 8.0+直接报致命错误;而PHP 7.1以下因openssl_encrypt参数差异,会导致登录态Token生成失败。我们实测过7.2.34、7.3.29、7.4.33三个小版本,其中7.4.33在CentOS 7.9 + OpenSSL 1.0.2k环境下启动最快,Session写入延迟低于8ms。若你当前是PHP 8.x,请降级——这不是倒退,是选型理性。

# 检查当前PHP版本及关键扩展 php -v php -m | grep -E "(pdo|mysql|openssl|curl|gd|mbstring|xml)" # 输出应包含:pdo, pdo_mysql, openssl, curl, gd, mbstring, xml

提示:mbstring扩展必须启用,否则中文表单字段名保存会截断;xml扩展用于Excel导入导出解析,缺失将导致批量导入失败但无明确报错。

2.2 MySQL配置:sql_mode必须显式设置,否则流程引擎写入崩溃

v1.9.1的流程实例表(flow_run)含json类型字段,但其SQL建表语句未加DEFAULT NULL,依赖MySQL严格模式校验空值插入。若sql_mode含STRICT_TRANS_TABLES,插入空JSON字段会自动转为NULL;若为NO_ENGINE_SUBSTITUTION,则写入空字符串"",后续流程引擎解析时触发json_decode("")===null误判,导致节点卡死。这是线上最隐蔽的“假成功”问题。

-- 登录MySQL后执行,确认当前模式 SELECT @@sql_mode; -- 正确输出应包含 STRICT_TRANS_TABLES,且不含 NO_ENGINE_SUBSTITUTION -- 若不满足,修改 /etc/my.cnf 在 [mysqld] 下添加: sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" -- 注意:NO_ENGINE_SUBSTITUTION 必须保留,但 STRICT_TRANS_TABLES 必须在最前

2.3 Nginx重写:try_files是唯一可靠方案,.htaccess在Nginx下完全失效

Apache用户习惯把重写规则写进.htaccess,但Nginx不读该文件。v1.9.1的URL路由全靠/index.php?s=/path/to/action伪静态支撑,若Nginx未配置try_files,访问/admin/会返回403或空白页。必须在server块内显式声明:

server { listen 80; server_name oa.example.com; root /var/www/xinhoo/public; index index.php; # 关键:必须用 try_files,不能用 rewrite ^(.*)$ /index.php?s=$1 last; location / { try_files $uri $uri/ /index.php?s=$uri&$args; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

注意:try_files末尾的&$args不可省略,否则带查询参数的URL(如/flow/run?flowid=5)会丢失flowid值,导致流程页面白屏。


3. 安装与初始化:三步走完数据库导入、管理员创建与基础权限切片,跳过Web安装向导的玄学等待

信呼v1.9.1提供两种安装路径:Web端点击式向导(易上手但易卡在“检测环境”环节),和命令行直导(可控、可复现、适合CI/CD)。我们推荐后者——它绕开了前端JS检测的兼容性陷阱,且所有步骤可写入部署脚本。

3.1 数据库初始化:用install.sql而非data.sql,避免权限表缺失

项目包中通常含data.sql(示例数据)和install.sql(结构+基础权限)。新手常误用data.sql,导致auth_rule(权限规则表)为空,登录后看不到任何菜单。正确做法是先执行install.sql建库建表,再按需导入data.sql。

# 假设数据库名为 xinhoo_oa,用户 xinhoo_user,密码 xinhoo_pass mysql -u xinhoo_user -p xinhoo_oa < /var/www/xinhoo/install.sql # 验证关键表是否存在 mysql -u xinhoo_user -p -e "USE xinhoo_oa; SHOW TABLES LIKE 'auth_%';" # 应输出 auth_group, auth_group_access, auth_rule, auth_user

3.2 管理员账户创建:绕过Web注册,用SQL直插避免邮箱验证阻塞

Web安装向导要求输入邮箱并发送验证码,但很多内网环境无SMTP服务,导致卡死。v1.9.1的管理员本质是auth_user表中status=1 AND group_id=1的记录,可直接SQL插入:

INSERT INTO `auth_user` ( `username`, `password`, `email`, `realname`, `mobile`, `status`, `group_id`, `create_time` ) VALUES ( 'admin', 'd033e22ae348aeb5660fc2140aec35850c4da997', -- '123456' 的SHA1哈希 'admin@local', '系统管理员', '13800138000', 1, 1, UNIX_TIMESTAMP() );

提示:密码哈希值d033e22ae348aeb5660fc2140aec35850c4da997对应明文123456,若需其他密码,用echo -n "yourpwd" | sha1sum生成。group_id=1对应超级管理员组,此ID由auth_group表中title='超级管理员'的记录确定,务必核对。

3.3 权限切片初始化:用AuthRule类批量注册菜单,而非手动点“同步权限”

v1.9.1的权限体系基于RBAC,但菜单项(auth_rule中type=1)需主动注册。Web后台的“权限管理→同步权限”按钮常因PHP内存限制超时失败。更可靠的方式是运行内置命令行工具:

# 进入项目根目录(非public目录) cd /var/www/xinhoo php think init:rule # 输出应类似:[Success] 已注册 87 条菜单规则 # 若报错 Class 'think\console\Command' not found,说明未正确加载thinkphp核心,检查vendor/autoload.php路径

该命令会扫描application/admin/controller/下所有控制器,按注释@title提取菜单名,按@group分组,自动生成auth_rule记录。例如:

<?php // application/admin/controller/System.php namespace app\admin\controller; /** * @title 系统设置 * @group 系统管理 */ class System extends Base { // ... }

注意:控制器类必须继承app\admin\controller\Base,且命名空间为app\admin\controller\,否则扫描失败。


4. 流程引擎实战:从零搭建“设备维修申请”流程,覆盖三级审批、表单联动与超时自动升级

信呼v1.9.1的流程引擎是其核心竞争力,但文档极简。我们以“设备维修申请”为例,还原一个真实可用的流程:一线员工提报 → 班组长初审 → 设备科长复审 → 超24小时未处理则自动转交分管副总。全程不写一行PHP,纯配置完成。

4.1 表单设计:用JSON Schema定义字段联动,让“故障类型”决定“维修等级”选项

进入【流程管理→表单设计】,新建表单“设备维修申请”。关键字段如下:

字段名类型JSON Schema约束说明
fault_typeselect"enum": ["机械故障","电气故障","软件异常"]故障类型,单选
repair_levelselect"dependencies": {"fault_type": {"enum": ["机械故障"]}}, "enum": ["一级","二级"]仅当fault_type为“机械故障”时显示,且选项为两级

提示:dependencies是JSON Schema标准语法,信呼v1.9.1原生支持。若fault_type选“电气故障”,repair_level字段自动隐藏,无需JS干预。

4.2 流程图绘制:用“条件分支”实现动态节点,而非硬编码审批人

在【流程管理→流程设计】中拖拽节点:

  • 开始 → 员工填写表单(自动节点)
  • 分支1:fault_type == "机械故障"→ 班组长 → 设备科长 → 结束
  • 分支2:fault_type == "电气故障"→ 班组长 → 电气工程师 → 结束
  • 超时升级:在“班组长”节点右键 → “设置超时” → 24小时 → “超时操作”选“转交” → 指定“分管副总”

关键点:所有审批人不写死,而是绑定角色。例如“班组长”节点的处理人设为role:team_leader,实际审批人由用户所属部门的“班组长”角色成员动态决定。

4.3 权限绑定:用“部门+角色”二维切片,让张三只能审自己车间的单

【权限管理→部门权限】中,为“制造一部”部门开启“流程审批”权限,并勾选“仅审批本部门发起的流程”。再为用户张三分配“制造一部→班组长”角色。此时张三登录后,【我的待办】只显示“制造一部”员工发起的维修单,即使他有全局角色权限。

注意:此功能依赖auth_group_access表中uid与group_id的映射,以及auth_rule中condition字段的SQL条件(如department_id=:department_id)。若未生效,检查application/config/auth.php中auth_group_access_table配置是否指向正确表名。


5. 避坑指南:五个血泪经验总结,解决90%线上部署后“能登录但不能用”的隐形故障

部署完成≠可用。我们统计了20+个真实上线案例,整理出以下高频、难定位、但修复极快的问题。每一条都来自某开发者凌晨三点的服务器日志截图。

5.1 现象:登录后首页空白,F12看Network发现/admin/index/index返回500

原因:runtime目录权限不足,ThinkPHP无法写入缓存文件。v1.9.1默认将模板编译缓存写入runtime/view/,若该目录属主为root而PHP-FPM以www-data运行,则写入失败。
解决:chown -R www-data:www-data /var/www/xinhoo/runtime,并确保runtime及其子目录权限为755。

5.2 现象:流程提交后状态卡在“已发起”,流程图中节点无高亮

原因:crontab未配置定时任务,导致流程引擎的“心跳检测”未运行。v1.9.1依赖php think flow:check每5分钟扫描超时/异常流程,若未配置,流程状态不会自动推进。
解决:crontab -e添加*/5 * * * * cd /var/www/xinhoo && php think flow:check >> /dev/null 2>&1。

5.3 现象:Excel导入人员时提示“字段不匹配”,但字段名完全一致

原因:Excel文件编码为UTF-8 with BOM,PHP读取时BOM字符污染第一列字段名(如用户名实际为用户名),导致匹配失败。
解决:用LibreOffice打开Excel → 另存为 → 编码选“UTF-8(无BOM)”;或用iconv -f UTF-8 -t UTF-8//IGNORE input.xlsx > output.xlsx清洗。

5.4 现象:自定义表单中上传附件,提交后文件列表为空

原因:php.ini中upload_max_filesize和post_max_size未同步调大。信呼前端限制单文件≤20MB,但若post_max_size=8M,则整个POST被截断,后端收不到任何字段。
解决:php.ini中设upload_max_filesize = 20M,post_max_size = 25M(需大于前者),重启PHP-FPM。

5.5 现象:手机端H5访问白屏,PC端正常

原因:Nginx配置了gzip on,但未排除application/json响应类型,导致流程引擎返回的JSON被gzip压缩后,部分安卓WebView解析失败。
解决:在Nginxgzip配置块中添加gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/json application/vnd.api+json;,显式包含application/json。


6. 进阶技巧:用think命令行工具做流程灰度发布与数据一致性校验,把上线风险关进笼子

上线新流程前,最怕什么?不是功能做错,而是旧数据与新规则冲突——比如历史维修单的fault_type字段存的是“电机损坏”,而新表单只认“机械故障”,导致老单无法打开。v1.9.1的think命令行工具提供了两个关键能力:流程预检与数据快照,我把它们组合成一套灰度发布checklist。

6.1 流程预检:用flow:verify扫描所有流程节点,提前暴露JSON Schema语法错误

每次修改表单JSON Schema后,不要急着保存,先本地校验:

# 进入项目根目录 cd /var/www/xinhoo # 校验ID为12的流程(设备维修申请) php think flow:verify 12 # 输出示例: # [Info] 正在校验流程 #12:设备维修申请 # [Success] 表单JSON Schema语法正确 # [Warning] 字段 repair_level 的 dependencies 引用 fault_type,但 fault_type 未在表单中定义 → 修复后重试

该命令会解析flow_form表中form_data字段的JSON,用json_decode($json, true)验证语法,并递归检查dependencies引用字段是否存在。比肉眼排查快10倍,且能发现"enum":["A","B",]末尾逗号这种隐藏错误。

6.2 数据快照:用data:snapshot导出关键表,为回滚留“后悔药”

上线前,我强制自己执行一次快照,不是全库dump,而是只导出与流程强相关的5张表:

表名作用是否必导
flow_run当前所有流程实例✅
flow_run_data实例对应的表单数据(JSON)✅
flow_node_log每个节点的审批记录✅
auth_user用户基础信息(防权限错乱)✅
department部门树(影响审批人计算)✅
# 生成带时间戳的快照SQL php think data:snapshot flow_run,flow_run_data,flow_node_log,auth_user,department # 输出:snapshot_20240520_143022.sql 已生成,大小 2.1MB # 该SQL文件可直接用 mysql -u user -p db < snapshot_*.sql 回滚

提示:data:snapshot命令会自动添加SET FOREIGN_KEY_CHECKS=0;和TRUNCATE TABLE前缀,确保导入时清空旧数据。但注意——它不备份flow_template(流程模板),因模板变更属配置范畴,应通过Git管理。

6.3 灰度发布checklist:三步验证法,从“能跑”到“可信”

我把每次上线新流程的验证固化为三步,写在便签贴在显示器边框:

  1. 流程图验证:用flow:verify扫一遍,确保无语法错误;
  2. 沙箱测试:在测试环境用flow:run --template=12 --user=1001模拟提交,检查节点流转、短信通知、超时升级是否触发;
  3. 快照比对:上线后1小时内,用data:snapshot再导一次,用diff -u snapshot_pre.sql snapshot_post.sql | grep "INSERT"确认只有预期的新数据插入,无意外更新。

从那以后我每次上线新流程,都强制走一遍这三步。不是信不过自己写的JSON Schema,而是信不过人类在凌晨两点的判断力。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

jstat实战:用JDK自带工具监控JVM内存与GC

jstat实战:用JDK自带工具监控JVM内存与GC

在Java服务卡顿、内存飙高、接口超时的时候&#xff0c;绝大多数人第一反应是抓一把jstack看线程&#xff0c;或者拉一份heap dump慢慢分析。但很多时候&#xff0c;问题的根源根本不在某个线程卡在哪行代码&#xff0c;而是整个堆的“新陈代谢”出了问题——对象疯狂创建、回收…

2026/10/20 5:22:05 阅读更多 →
Yume1.5交互式世界生成实战:单卡12FPS实时渲染与部署全解析

Yume1.5交互式世界生成实战:单卡12FPS实时渲染与部署全解析

第一次在某个开源项目页里看到“单卡 12 FPS 实时交互渲染”这句话&#xff0c;我还以为是拿预渲染视频抽帧充数。直到自己把提示词敲进去&#xff0c;生成出一片雨夜小巷&#xff0c;拖动路灯&#xff0c;地上的积水反光跟着偏移角度的那一刻&#xff0c;我才确定&#xff1a;…

2026/10/20 5:22:05 阅读更多 →
c++11学习

c++11学习

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 5:22:05 阅读更多 →

最新新闻

从单体到弹性扩展:高并发架构改造的完整实战复盘

从单体到弹性扩展:高并发架构改造的完整实战复盘

1. 项目背景与架构需求拆解1.1 最初的系统&#xff0c;和它一步步暴露出的问题先说下背景。这个代号为"arch-system"的架构改造项目&#xff0c;源于团队负责的一条核心业务链路。最初的系统是典型的三层单体&#xff1a;一个应用服务承载所有接口&#xff0c;MySQL …

2026/10/20 6:03:23 阅读更多 →
PPT-Master:用PowerPoint构建业务操作系统的方法论

PPT-Master:用PowerPoint构建业务操作系统的方法论

1. “PPT-Master”不是软件名&#xff0c;而是一类人的生存状态最近在几个技术协作群和设计交流社区里&#xff0c;“PPT-Master”这个词高频出现&#xff0c;但没人把它当产品名说——它更像一句带点自嘲又透着狠劲的行业暗号。我第一次听到是在某次跨部门复盘会上&#xff0c…

2026/10/20 6:03:23 阅读更多 →
图灵奖60年:人机环境系统智能的演进与落地

图灵奖60年:人机环境系统智能的演进与落地

六十年前&#xff0c;那个以一位计算机先驱命名的奖项第一次颁出时&#xff0c;大概没有人想到&#xff0c;它会成为一部无声的“智能观变迁史”。这六十年间&#xff0c;获奖成果背后的工作其实都在回答同一个问题&#xff1a;机器到底怎样才算有智能&#xff1f;答案从“会算…

2026/10/20 6:03:23 阅读更多 →
浙江高考VB排序系列:冒泡与选择排序代码实现及应试技巧

浙江高考VB排序系列:冒泡与选择排序代码实现及应试技巧

1. 从一道排序题说起&#xff1a;为什么VB排序值得单独拎出来讲每年到了技术科目备考的冲刺阶段&#xff0c;总有一批同学在排序算法这块反复栽跟头。选择题里问“冒泡排序第三轮结束后序列长什么样”&#xff0c;填空题里给一段残缺代码让你补全循环边界&#xff0c;上机操作题…

2026/10/20 6:03:23 阅读更多 →
图灵奖六十年:从机器能否思考到人机环境系统智能的跃迁

图灵奖六十年:从机器能否思考到人机环境系统智能的跃迁

图灵奖整整六十年了。作为计算机科学领域最负盛名的荣誉&#xff0c;它这些年一直被当作衡量学术巅峰的标尺。可如果你把六十年来历届获奖者所代表的方向串成一条时间线&#xff0c;会发现一个远比"学术成就"更有意思的东西正在浮现&#xff1a;整个领域对"智能…

2026/10/20 6:03:23 阅读更多 →
主动学习新思路:损失预测模块如何精准筛选高价值样本

主动学习新思路:损失预测模块如何精准筛选高价值样本

1. 为什么主动学习要换一种采样思路做深度学习项目&#xff0c;尤其在数据标注预算有限的时候&#xff0c;大家最先想到的办法多半是“先随便标一部分&#xff0c;训练一版模型&#xff0c;再用模型挑一些‘难样本’送给标注员”。这套逻辑本身没问题&#xff0c;难就难在“难样…

2026/10/20 6:02:23 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →