{
  "count": 94,
  "articles": [
    {
      "id": "https://blog.oneszhang.com/2026/10/21/e10-ones-ufc/",
      "title": "[泛微 Ecology10] Ones 万能组件 V1：让表单组件变成任何你想要的样子",
      "description": "Ones 万能组件是一个 E10 表单组件（不是 EB 页面组件）：管理员在配置里粘贴单文件 HTML/CSS/JS，运行态用 Shadow DOM 渲染，通过统一的 ctx 桥接读写当前表单字段；配置里内置 AI 提示词，需求 + 字段上下文一次复制给 AI，生成代码粘回即可。V1 已覆盖字段读写、只读/必填/隐藏、关联字段初始值、固定选项显示与写值、明细 rowId、保存前校验与 hook 去重，并给出已实测/未实测边界。",
      "llmSummary": "Ones 万能组件是 E10 表单组件，不是 EB 页面组件。它在表单设计器组件管理中创建，配置 4 项：单文件 HTML、运行 JS、调试、AI 生成（默认折叠）。运行态用 Shadow DOM 渲染，脚本只注入 ctx；ctx 统一封装 WeFormSDK 与 formStore，提供字段读写、只读/必填/隐藏、初始值、选项显示名映射、明细 rowId、字段变化/属性变化/保存前 hook。AI 面板用内置模板 + 需求 + 字段清单生成提示词，AI 返回的 HTML 粘回即可。V1 已实测渲染、字段读写、只读拦截、固定选项 valueKey 写值、明细写入、保存拦截、hook 去重；打印模板、整表单只读、真实移动端 H5、超大配置、多实例压力未完成。源码与示例在 GitHub：OnesZhang/e10-ones-ufc。",
      "url": "https://blog.oneszhang.com/2026/10/21/e10-ones-ufc/",
      "pubDate": "2026-10-21T01:45:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/10/21/e10-ones-ufc.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/10/15/touch-up-multi-finger-shortcuts/",
      "title": "Touch-Up：让任何触摸屏在 macOS 上即插即用，以及我做的那些修改",
      "description": "Touch-Up 是一个 macOS 用户态触摸屏驱动：读 USB HID 上报的原始数据解析成触摸点，再注入成系统级鼠标事件，不需要内核扩展。市面上绝大多数触摸屏在 Windows 上即插即用，接到 Mac 上却毫无反应，它就是补这个缺口。本文先介绍它是什么（Touch Up 工具 App + TouchUpCore 框架，默认交互借鉴 iPadOS），再记录我在 Fork 上提交的一个功能：给三指/四指手势加上可自定义的键盘快捷键映射——12 种手势、48 条 macOS 常用快捷键目录、映射存 UserDefaults、长按按住映射键不放直到抬指、手势会话期间整体抑制鼠标事件；同时记录过程中顺手修掉的三个 macOS 兼容坑：缺少输入监控权限时启动崩溃、合成方向键缺 numericPad 与 SecondaryFn 标志被调度中心忽略、修饰键状态残留把后续点击变成右键。",
      "llmSummary": "Touch-Up（shueber/Touch-Up）是一个 macOS 用户态触摸屏驱动，由 Sebastian Hueber 开发：市面上绝大多数触摸屏都遵循 USB HID，在 Windows 上插上就能用，接到 Mac 上却毫无反应，Touch-Up 就是补这个缺口——读取 HID 原始数据、解析成触摸点、注入成系统级鼠标事件，不需要内核扩展，安装后授予辅助功能权限即可使用。它有两个形态：Touch Up 工具 App（默认交互借鉴 iPadOS：轻点=点击、拂动=滚动、手指稍作停留再移动=拖拽、双指捏合=缩放、双指点击=右键，还可以开启「触摸窗口把它带到前台」）和 TouchUpCore 框架（把多点触摸数据暴露给开发者，App 本身就是集成示例，可参考 DebugView）。兼容性方面官方说法是「任何在 Windows 上能用的触摸屏都应该能用」，并在 Iiyama TF3222MC、T2336MSC-B2 和 3M C4667PW 上做过测试，Releases 页面提供带公证的构建包。本文记录我在 Fork（OnesZhang/Touch-Up，分支 feature/multi-finger-swipes，commit d7f2933，8 个文件约 +933/−15）上提交的功能：给三指/四指手势增加可自定义的键盘快捷键映射。做法分两层：TouchUpCore 里扩展 12 种可映射手势（三/四指上、下、左、右滑动 8 种，轻点 2 种，长按 2 种），委托协议 TUCTouchDelegate 新增 performKeyboardShortcutForGesture:（滑动识别完成触发一次）与 beginKeyboardHoldForGesture:/endKeyboardHoldForGesture:（长按按下映射键、手指全部抬起才松开），一次手势会话互斥地只判定为滑动/轻点/长按之一，手指移动超过阈值默认 10mm 判为滑动、几乎没动就抬起判为轻点、停住不动默认 0.35s 判为长按；手指按在屏上的整个会话期间鼠标事件被抑制，所以手势不会顺带移动光标或误点击。App 层整理了 48 条 macOS 常用快捷键目录 ShortcutPreset.catalog（含 8 个媒体键，走 NX_KEYTYPE_*），按调度中心与空间、窗口管理、应用切换、导航编辑、系统、媒体与功能键分类，每个手势可在设置里绑定任意预设或设为 Off 保留原光标行为，默认值接近触控板经典体验：三/四指滑动映射调度中心与空间切换、长按映射 fn、轻点关闭；映射持久化在 UserDefaults，设置界面新增 Multi-Finger Shortcuts 分区并适配新旧两套 SwiftUI 布局。此外顺手修了三个 macOS 兼容性问题：缺少输入监控权限时 HID 注册对 NULL 队列无防护导致启动崩溃（现在优雅降级并在设置页顶部显示权限横幅，点 Grant Access 深链到系统隐私面板）、合成方向键缺少真实方向键的 numericPad 标志且控制类快捷键需要 SecondaryFn 标志否则会被调度中心与空间功能丢弃（参考 SO 61872579 / 45704155）、发送合成快捷键后修饰键状态残留会把后续普通点击变成右键（现在显式释放修饰键，fn 的按住状态用不带 SecondaryFn 的 flagsChanged 释放事件清除）；并新增 GitHub Actions 工作流在 macOS runner 上自动构建 App，Fork 上还会把产物挂到滚动的 ci-build release 便于直接下载。",
      "url": "https://blog.oneszhang.com/2026/10/15/touch-up-multi-finger-shortcuts/",
      "pubDate": "2026-10-15T10:00:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/10/15/touch-up-multi-finger-shortcuts.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/10/15/weaver-e10-workflow-action-guide/",
      "title": "[泛微 Ecology10] 流程按钮说明浮标：绑定操作码而不是按钮名，改名和切语言都不失效",
      "description": "泛微 e-cology10 流程页右上角有一排操作按钮和「更多」菜单，可按钮名称能被管理员自定义、也会随界面语言变化——任何按名称写死的说明迟早失效。本文记录用 ecode 做一个悬浮说明入口的完整过程：数据取自平台官方口子 weappWorkflow.getFlowPageSDK().baseStore.operMenus，用稳定标识 menutype 绑定释义、用 istop 区分右上角按钮与「更多」菜单、显示名称取平台当前标题，语言用 weappUtils.getLang() 跟随界面且切换无需刷新；页面判定同样不看 URL，改用 baseParam.workflowId，让 e-builder 流程卡片页 /sp/ebdfpage/card/* 也能覆盖；同时记录两个实测定位置坑：写死 top 会在带「第 N 条(共 M 条)」条幅的页面上压住「更多」，而改贴容器底边又会偏下 13px。",
      "llmSummary": "泛微 E10（e-cology10）流程页右上角有一排操作按钮（提交/保存/删除/更多），「更多」菜单里还有十几项操作，业务用户看不懂；而按钮名称既可以被管理员自定义、也会随界面语言变化，因此任何按名称匹配的说明方案都会失效。本文给出的做法是做一个悬浮的 i 入口 + 下拉面板，数据来自平台官方口子 window.weappWorkflow.getFlowPageSDK().baseStore.operMenus，其字段 menutype 是稳定操作码（SUBMIT、SAVE_DATA、DELETE、REMIND 等），istop===1 表示渲染在右上角、否则进「更多」菜单，title 是平台当前显示名。实现上：面板每行的名称取平台 title（改名后与屏幕一致），释义按 menutype 查一张中英对照表；语言用 window.weappUtils.getLang()，zh* 走中文、其余走英文，每 800ms 重读一次，因此切换界面语言无需刷新页面；入口 top 不写死，取动作条内按钮的真实 bottom+8px，因为带「第 N 条(共 M 条)」条幅的页面会把工具条从约 30px 撑到 54px（实测写死 52px 会压住「更多」），而贴容器底边又会偏下（实测容器底部比按钮低 13px）。页面判定同样不看 URL：同一流程可以是 /sp/workflow/flowpage/view/{id}，也可以是 e-builder 流程卡片页 /sp/ebdfpage/card/0/{objId}/{requestId}，因此改用平台注入的流程上下文 getFlowPageSDK().baseStore.baseParam.workflowId 作为判据；实测 getFlowPageSDK() 在任何页面都返回对象（连门户都是），而动作条 .ui-title-right-container 在 e-builder 设计器页也存在，两者都不能用来判断；发起流程页 /sp/workflow/newflow、流程列表 /workflow/list/mine 与 /workflow/list/center、设计器页、门户均无 workflowId，判定为 false。降级链：拿不到 getFlowPageSDK() 时退回读 DOM（动作条 button）与 __WEAPP_AGENT_BRIDGE__.describe(menuId) 按名称匹配；表里没有的操作不渲染；页面无流程上下文或无动作条则不注入任何节点；节点被平台整块替换时下次 tick 自愈重挂。实测环境 @weapp/ecodesdk 0.1.54、@weapp/ui 0.0.389-hotfix11、agent bridge 0.2.0，面板层级 1050/1040（高于平台下拉 999、低于平台弹窗）。",
      "url": "https://blog.oneszhang.com/2026/10/15/weaver-e10-workflow-action-guide/",
      "pubDate": "2026-10-15T08:00:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/10/15/weaver-e10-workflow-action-guide.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/10/09/weaver-e10-workflow-submit-fail-modal/",
      "title": "[泛微 Ecology10] 流程提交失败提示弹窗化：不改平台 DOM，只加一个类名",
      "description": "泛微 E10 流程详情页提交失败时，平台会在页面顶部渲染一条内联红色横幅 div.wffp-operate-msgTip.form-msgtip，页面 URL 带 operResultType=FAIL_SHOW_ERROR_MSG。本文记录如何用 ecode 复写 weappWorkflow.FPDevBlockSlot 插槽，在不重写平台任何 DOM、不复制任何平台文案的前提下，只给平台已渲染的提示节点挂一个类名，由 CSS 把它变成居中弹窗，并给出全文最关键的层级坑：平台「条件」悬浮提示会被弹窗盖住，表现为「点了没反应」。",
      "llmSummary": "泛微 E10 流程详情页（PC /sp/workflow/flowpage/*）提交失败时，平台会在页面顶部渲染一条内联红色横幅 div.wffp-operate-msgTip.form-msgtip，页面 URL 带 operResultType=FAIL_SHOW_ERROR_MSG，同时占用表单顶部位置。文章给出的做法是复写官方二开插槽 weappWorkflow.FPDevBlockSlot：只在 blockType === 'Prompts' 且 slotPlace === 'after' 时挂载自定义组件，其余插槽原样透传 <Com {...props} ref={ref} />。组件不重写平台 DOM、不复制平台文案，只给平台已渲染的提示节点挂一个类名 wffp-submit-fail-modal-card，由 CSS 把它变成居中弹窗，因此平台原有文案、出口条件明细和「点击这里进行设置」跳转逻辑全部保留；平台若改了该类名，补丁只是静默失效退回内联提示，不会报错。文章还记录了 hidden/open/closed 状态机与 MutationObserver 同步、遮罩/×/Esc 关闭与右下角重开入口，以及两个取值细节：卡片需 position: fixed（实测祖先无 transform）、z-index 1100 要高于页面右侧悬浮工具（实测 998/999）。最容易踩的坑是平台「条件」悬浮提示 .ui-trigger-popupInner 为 z-index 999，会被卡片(1100)/遮罩(1050) 盖住而「悬停或点击没反应」，需在 body.wffp-submit-fail-modal-open 作用域下把它抬到 1200。实测环境 @weapp/ecodesdk 0.1.53、@weapp/ui 0.0.387-hotfix7，最终 JS 91 行 + CSS 109 行。",
      "url": "https://blog.oneszhang.com/2026/10/09/weaver-e10-workflow-submit-fail-modal/",
      "pubDate": "2026-10-09T04:40:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/10/09/weaver-e10-workflow-submit-fail-modal.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/09/20/weaver-e10-implicit-params/",
      "title": "[泛微 Ecology10] e-builder「隐式传参」拆解：参数不进 URL，藏在 sessionStorage",
      "description": "泛微 E10 e-builder 设计器里按钮配置「打开页面」并选择隐式传参时，参数不会拼到 URL 上，而是以目标链接地址为 key 写入 sessionStorage.jumplinkParams，URL 只带一个 jumplinkParamKey。文章先给出平台「隐式传参」选项的三条官方原文，再基于线上实测与运行时 JS 源码验证拆解写入端与读取端逻辑。关键突破：尽管官方称目标地址非 EB 内部地址（页面、布局、报表、视图、多级填报等）时不支持隐式传参，但写入端并不区分目标类型，e-code 自定义页面（/sp/custom/...）可通过手动读取 sessionStorage 突破该限制，附可直接复用的读取工具函数与 URL 传参对比。",
      "llmSummary": "泛微 E10 e-builder 设计器里按钮配置「打开页面」并选择隐式传参时，参数不会拼到 URL 上，而是以目标链接地址为 key 写入 sessionStorage.jumplinkParams，URL 只带一个 jumplinkParamKey。文章先给出平台「隐式传参」选项的三条官方原文（URL 不拼参数、非 EB 内部地址不支持隐式传参、URL 自定义拼接参数优先级高于参数设置），再基于线上实测与运行时 JS 源码验证拆解写入端与读取端逻辑。关键突破：尽管官方称目标地址非 EB 内部地址（页面、布局、报表、视图、多级填报等）时不支持隐式传参，但写入端并不区分目标类型，e-code 自定义页面（/sp/custom/...）可通过手动读取 sessionStorage 突破该限制，附可直接复用的读取工具函数与 URL 传参对比。",
      "url": "https://blog.oneszhang.com/2026/09/20/weaver-e10-implicit-params/",
      "pubDate": "2026-09-20T09:30:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/09/20/weaver-e10-implicit-params.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/08/13/210/",
      "title": "[泛微 Ecology9] CUS_FIELDDATA 自定义字段数据表解析",
      "description": "泛微 EC9 的 CUS_FIELDDATA 表用于跨模块存储自定义字段值，按 scope 区分归属：文档中心对应 DocCustomFieldBySecCategory，以目录 ID 和文档 ID 定位；人力资源对应 HrmCustomFieldByInfoType，以标签页和人员 ID 定位。文章提醒该表数据按需生成，无记录属正常，迁移组织架构和人员信息时必须同步此表，且默认禁止 DELETE，需修改配置文件加入白名单后方可删除。",
      "llmSummary": "泛微 EC9 的 CUS_FIELDDATA 表用于跨模块存储自定义字段值，按 scope 区分归属：文档中心对应 DocCustomFieldBySecCategory，以目录 ID 和文档 ID 定位；人力资源对应 HrmCustomFieldByInfoType，以标签页和人员 ID 定位。文章提醒该表数据按需生成，无记录属正常，迁移组织架构和人员信息时必须同步此表，且默认禁止 DELETE，需修改配置文件加入白名单后方可删除。",
      "url": "https://blog.oneszhang.com/2026/08/13/210/",
      "pubDate": "2026-08-13T01:59:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/08/13/210.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/08/07/209/",
      "title": "[泛微 Ecology9] 自定义接口在线编辑java代码保存没反应解决方案",
      "description": "泛微 EC9 中自定义接口在线编辑 Java 代码保存无反应、接口报 404，是安全机制拦截非白名单 IP 所致。文章给出三步处理：在 WEB-INF/prop 放入放行标记文件，从安全日志中查到本机出口 IP，再将其写入白名单配置文件；随后用 sysadmin 访问 updateRules.jsp 刷新规则，无需重启，集群环境需逐节点访问。文中还说明在线编辑代码存于数据库，各节点无需重复编辑。",
      "llmSummary": "泛微 EC9 中自定义接口在线编辑 Java 代码保存无反应、接口报 404，是安全机制拦截非白名单 IP 所致。文章给出三步处理：在 WEB-INF/prop 放入放行标记文件，从安全日志中查到本机出口 IP，再将其写入白名单配置文件；随后用 sysadmin 访问 updateRules.jsp 刷新规则，无需重启，集群环境需逐节点访问。文中还说明在线编辑代码存于数据库，各节点无需重复编辑。",
      "url": "https://blog.oneszhang.com/2026/08/07/209/",
      "pubDate": "2026-08-07T04:33:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/08/07/209.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/08/07/206/",
      "title": "[泛微 Ecology9] 获取IP地址-服务器IP-访问IP",
      "description": "泛微 EC9 中获取 IP 的两段 JSP 代码：一段用 InetAddress 取本机服务器 IP，便于在集群环境下确认请求落在哪台节点；另一段在登录态下输出 x-forwarded-for、getRemoteAddr、Util.getIpAddr 等取值，并遍历全部请求头，用于排查 OA 获取用户 IP 不准确的问题。",
      "llmSummary": "泛微 EC9 中获取 IP 的两段 JSP 代码：一段用 InetAddress 取本机服务器 IP，便于在集群环境下确认请求落在哪台节点；另一段在登录态下输出 x-forwarded-for、getRemoteAddr、Util.getIpAddr 等取值，并遍历全部请求头，用于排查 OA 获取用户 IP 不准确的问题。",
      "url": "https://blog.oneszhang.com/2026/08/07/206/",
      "pubDate": "2026-08-07T03:10:46.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/08/07/206.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/07/05/205/",
      "title": "[泛微 Ecology9] WorkflowToModeFormulaUtil 公式工具类使用指南",
      "description": "泛微 OA E9 的 WorkflowToModeFormulaUtil 是一个零外部依赖的纯 Java 公式工具类，可按包路径直接调用，用于脱离流程上下文完成日期、数值、文本三类字段的类型转换与计算。文章逐一说明 year、days、datedelta、sum、average、concatenate、replace 等方法的重载用法与返回 String 的特性，并给出合同到期提醒、费用汇总、编号生成等完整示例，还介绍了与 ExpressionEvaluator 组合做表达式计算的实践。使用时需注意 month 返回 1 至 12、replace 起始位置从 1 开始、average 可变参数分母异常等坑点。",
      "llmSummary": "泛微 OA E9 的 WorkflowToModeFormulaUtil 是一个零外部依赖的纯 Java 公式工具类，可按包路径直接调用，用于脱离流程上下文完成日期、数值、文本三类字段的类型转换与计算。文章逐一说明 year、days、datedelta、sum、average、concatenate、replace 等方法的重载用法与返回 String 的特性，并给出合同到期提醒、费用汇总、编号生成等完整示例，还介绍了与 ExpressionEvaluator 组合做表达式计算的实践。使用时需注意 month 返回 1 至 12、replace 起始位置从 1 开始、average 可变参数分母异常等坑点。",
      "url": "https://blog.oneszhang.com/2026/07/05/205/",
      "pubDate": "2026-07-05T12:10:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/07/05/205.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/06/25/204/",
      "title": "[泛微 Ecology9] 流程查看权限校验路径分析",
      "description": "泛微 EC9 通过 ViewRequestForwardSPA.jsp 查看流程时，权限校验集中在 RequestAuthenticationService.verifyRequest() 中。文章梳理了共享、操作者、创建者、监控督办、相关流程、建模授权等 14 条按优先级依次检查的校验路径，逐条给出触发参数与前置条件，并对比 SPA 与 JSP 路由的校验差异，说明 E9 签名令牌机制如何防止 desrequestid 被篡改。适合排查流程无权限查看问题的二次开发人员参考。",
      "llmSummary": "泛微 EC9 通过 ViewRequestForwardSPA.jsp 查看流程时，权限校验集中在 RequestAuthenticationService.verifyRequest() 中。文章梳理了共享、操作者、创建者、监控督办、相关流程、建模授权等 14 条按优先级依次检查的校验路径，逐条给出触发参数与前置条件，并对比 SPA 与 JSP 路由的校验差异，说明 E9 签名令牌机制如何防止 desrequestid 被篡改。适合排查流程无权限查看问题的二次开发人员参考。",
      "url": "https://blog.oneszhang.com/2026/06/25/204/",
      "pubDate": "2026-06-25T03:08:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/06/25/204.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/06/18/202/",
      "title": "[泛微 Ecology10] Ecology10使用ESB动作流&连接器使用doCreateRequest创建流程接口",
      "description": "这篇文章介绍在泛微 Ecology10 多租户场景下，如何借助 ESB 动作流配合开放平台连接器的 doCreateRequest 接口实现跨组织创建流程。内容涵盖连接器与接口配置、字段映射表维护、自定义函数组装传参，以及 fieldId、附件权限和文件上传等关键参数处理，适合做 E10 二开的开发人员参考，作者也说明这只是个人思路而非官方最佳实践。",
      "llmSummary": "这篇文章介绍在泛微 Ecology10 多租户场景下，如何借助 ESB 动作流配合开放平台连接器的 doCreateRequest 接口实现跨组织创建流程。内容涵盖连接器与接口配置、字段映射表维护、自定义函数组装传参，以及 fieldId、附件权限和文件上传等关键参数处理，适合做 E10 二开的开发人员参考，作者也说明这只是个人思路而非官方最佳实践。",
      "url": "https://blog.oneszhang.com/2026/06/18/202/",
      "pubDate": "2026-06-18T02:28:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/06/18/202.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/06/09/198/",
      "title": "[泛微 Ecology9] OA 附件 Base64 误杀事件排查复盘",
      "description": "排查泛微 EC9 创建流程接口上传 Base64 附件时出现 PARAM_ERROR 的问题，最终定位为 OA 安全过滤链将请求参数中命中敏感关键词的片段替换为全角字符，污染 Base64 导致解码失败。文章记录了从校验原始 Base64、短样本对照到边界变体验证的逐步排查过程，并给出通过 securityXML 配置跳过规则的解决方案及回归建议。",
      "llmSummary": "排查泛微 EC9 创建流程接口上传 Base64 附件时出现 PARAM_ERROR 的问题，最终定位为 OA 安全过滤链将请求参数中命中敏感关键词的片段替换为全角字符，污染 Base64 导致解码失败。文章记录了从校验原始 Base64、短样本对照到边界变体验证的逐步排查过程，并给出通过 securityXML 配置跳过规则的解决方案及回归建议。",
      "url": "https://blog.oneszhang.com/2026/06/09/198/",
      "pubDate": "2026-06-09T07:02:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/06/09/198.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/05/08/197/",
      "title": "[泛微 Ecology9] 丸子喂饭篇: restful 新建流程接口详解(/api/workflow/paService/doCreateRequest)",
      "description": "泛微E9中用于自动新建流程实例的 REST 接口 doCreateRequest，文章从请求头鉴权、请求方式与编码格式，到主表与明细表数据组装、返回值判断和常见报错排查做了完整拆解。适合做系统集成、数据迁移或定时发起流程的开发者参考，重点在于字段名必须与数据库字段名一致，并注意请求格式与用户创建权限，否则容易报参数或权限错误。",
      "llmSummary": "泛微E9中用于自动新建流程实例的 REST 接口 doCreateRequest，文章从请求头鉴权、请求方式与编码格式，到主表与明细表数据组装、返回值判断和常见报错排查做了完整拆解。适合做系统集成、数据迁移或定时发起流程的开发者参考，重点在于字段名必须与数据库字段名一致，并注意请求格式与用户创建权限，否则容易报参数或权限错误。",
      "url": "https://blog.oneszhang.com/2026/05/08/197/",
      "pubDate": "2026-05-08T12:43:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/05/08/197.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/03/03/195/",
      "title": "[泛微 Ecology10] 国际化与日期字段 displayFormat 冲突排查实录",
      "description": "泛微 Ecology10 中同一日期字段出现两种显示格式，排查确认并非数据源或字段配置问题，而是全局国际化日期与字段 displayFormat 在前端渲染时发生双重格式化：预格式化后的字符串二次解析失败便回退原值，导致格式不一甚至月日互换，ecode 适配也因输出路径不稳定而失效。文章给出抓 DOM、API 与运行时函数的排查思路，并指出应统一日期输入语义与格式化入口。",
      "llmSummary": "泛微 Ecology10 中同一日期字段出现两种显示格式，排查确认并非数据源或字段配置问题，而是全局国际化日期与字段 displayFormat 在前端渲染时发生双重格式化：预格式化后的字符串二次解析失败便回退原值，导致格式不一甚至月日互换，ecode 适配也因输出路径不稳定而失效。文章给出抓 DOM、API 与运行时函数的排查思路，并指出应统一日期输入语义与格式化入口。",
      "url": "https://blog.oneszhang.com/2026/03/03/195/",
      "pubDate": "2026-03-03T14:54:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/03/03/195.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/02/12/weaver-e10-permission-fix/",
      "title": "[泛微 Ecology10] \"对不起，没有使用权限\" 解决办法",
      "description": "泛微 E10 升级到基线 10.0.2512.01 后，部分人员虽已获得角色或群组权限，访问资源时仍提示没有使用权限，原因是权限缓存未同步刷新。文章给出临时方案：调用权限缓存刷新接口，传入租户 ID 和人员 ID 即可立即刷新该人员权限。作者提醒这只是临时处理，彻底解决需联系总部客服与技术排查，二次开发导致的问题可尝试调用刷新权限接口。",
      "llmSummary": "泛微 E10 升级到基线 10.0.2512.01 后，部分人员虽已获得角色或群组权限，访问资源时仍提示没有使用权限，原因是权限缓存未同步刷新。文章给出临时方案：调用权限缓存刷新接口，传入租户 ID 和人员 ID 即可立即刷新该人员权限。作者提醒这只是临时处理，彻底解决需联系总部客服与技术排查，二次开发导致的问题可尝试调用刷新权限接口。",
      "url": "https://blog.oneszhang.com/2026/02/12/weaver-e10-permission-fix/",
      "pubDate": "2026-02-12T08:41:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/02/12/weaver-e10-permission-fix.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/02/12/ai-writing-era/",
      "title": "博客新纪元：我的 AI 写手上线了",
      "description": "作者宣布博客进入 AI 辅助创作阶段：借助 OpenClaw 与 Claude，从口述想法、生成 Markdown 草稿到通过 Typecho 的 XML-RPC 接口自动发布，全流程耗时大幅缩短。文章强调 AI 只是工具，内容、观点和经验仍由本人把关，并介绍了背后的技术栈、工作流程以及提升更新频率的未来计划。",
      "llmSummary": "作者宣布博客进入 AI 辅助创作阶段：借助 OpenClaw 与 Claude，从口述想法、生成 Markdown 草稿到通过 Typecho 的 XML-RPC 接口自动发布，全流程耗时大幅缩短。文章强调 AI 只是工具，内容、观点和经验仍由本人把关，并介绍了背后的技术栈、工作流程以及提升更新频率的未来计划。",
      "url": "https://blog.oneszhang.com/2026/02/12/ai-writing-era/",
      "pubDate": "2026-02-12T02:41:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/02/12/ai-writing-era.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/02/12/openclaw-user-agent-fix/",
      "title": "OpenClaw 配置 AI 模型：5 分钟搞定 User-Agent 问题",
      "description": "给 OpenClaw 配置自定义 AI 模型（NEW API）时出现 403 报错，原因是代理服务器把请求识别为爬虫并拦截。文章给出的解决办法是在 provider 配置中添加自定义 User-Agent 请求头，可通过命令行写入 JSON 或直接编辑 ~/.openclaw/openclaw.json，之后重启网关并用测试命令验证。适合遇到同类调用失败的 OpenClaw 用户参考，同时提醒排查配置未生效与换用其他 User-Agent 等情况。",
      "llmSummary": "给 OpenClaw 配置自定义 AI 模型（NEW API）时出现 403 报错，原因是代理服务器把请求识别为爬虫并拦截。文章给出的解决办法是在 provider 配置中添加自定义 User-Agent 请求头，可通过命令行写入 JSON 或直接编辑 ~/.openclaw/openclaw.json，之后重启网关并用测试命令验证。适合遇到同类调用失败的 OpenClaw 用户参考，同时提醒排查配置未生效与换用其他 User-Agent 等情况。",
      "url": "https://blog.oneszhang.com/2026/02/12/openclaw-user-agent-fix/",
      "pubDate": "2026-02-12T02:31:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/02/12/openclaw-user-agent-fix.md"
    },
    {
      "id": "https://blog.oneszhang.com/2026/02/12/openclaw-auto-publish-test/",
      "title": "测试文章 - OpenClaw 自动发布",
      "description": "这篇测试文章由 OpenClaw AI 助手自动发布，用于验证自动发布功能是否已经可用。文中确认已支持 Markdown 格式与 Mirages 短代码，并含一个提示框示例，标注的测试时间为 2026 年 2 月 12 日。文章说明，能看到该内容即代表自动发布流程运行正常。",
      "llmSummary": "这篇测试文章由 OpenClaw AI 助手自动发布，用于验证自动发布功能是否已经可用。文中确认已支持 Markdown 格式与 Mirages 短代码，并含一个提示框示例，标注的测试时间为 2026 年 2 月 12 日。文章说明，能看到该内容即代表自动发布流程运行正常。",
      "url": "https://blog.oneszhang.com/2026/02/12/openclaw-auto-publish-test/",
      "pubDate": "2026-02-12T02:28:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2026/02/12/openclaw-auto-publish-test.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/12/11/189/",
      "title": "[泛微 Ecology10] 自定义一个可控的 Loading Message",
      "description": "泛微 Ecology10 的 UI 层改用 weappUi 后，只保留了全屏遮罩式的 Spin，缺少 E9 中 antd.message.loading 那种轻量可控的加载提示。文章利用 weappUi.Dialog.message 搭配 Spin 封装了一个伪 message.loading，返回可手动销毁的实例，避免全屏遮罩阻断操作，适合接口查询、短轮询等轻量异步场景，并指出 E10 虽移除了部分顺手的组件，却给前端扩展留下更多空间。",
      "llmSummary": "泛微 Ecology10 的 UI 层改用 weappUi 后，只保留了全屏遮罩式的 Spin，缺少 E9 中 antd.message.loading 那种轻量可控的加载提示。文章利用 weappUi.Dialog.message 搭配 Spin 封装了一个伪 message.loading，返回可手动销毁的实例，避免全屏遮罩阻断操作，适合接口查询、短轮询等轻量异步场景，并指出 E10 虽移除了部分顺手的组件，却给前端扩展留下更多空间。",
      "url": "https://blog.oneszhang.com/2025/12/11/189/",
      "pubDate": "2025-12-11T05:05:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/12/11/189.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/11/14/188/",
      "title": "《别拿你的工作碰瓷我的热爱》",
      "description": "这是一篇表明个人立场的随笔，围绕工作与热爱的边界展开，反对拿职业身份当作评判标准，去碰瓷、贬低他人的兴趣与热爱。作者认为工作与热爱本属两回事，不应混为一谈，更不该以工作之名绑架或消解别人的热情，适合对职场与个人兴趣关系有共鸣的读者一读。",
      "llmSummary": "这是一篇表明个人立场的随笔，围绕工作与热爱的边界展开，反对拿职业身份当作评判标准，去碰瓷、贬低他人的兴趣与热爱。作者认为工作与热爱本属两回事，不应混为一谈，更不该以工作之名绑架或消解别人的热情，适合对职场与个人兴趣关系有共鸣的读者一读。",
      "url": "https://blog.oneszhang.com/2025/11/14/188/",
      "pubDate": "2025-11-14T04:04:23.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/11/14/188.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/11/14/187/",
      "title": "[泛微 Ecology10] 浏览按钮搜索按钮样式处理（真按钮）",
      "description": "泛微 Ecology10 中可通过自定义 CSS 将浏览按钮的搜索图标改造成真按钮，包括调整输入框最小宽度、设置蓝色背景与圆角、用伪元素补充按钮文字并增加悬停效果。使用时需按实际编辑提示语和字段 ID 替换对应选择器，适合需要美化搜索入口的二次开发场景。",
      "llmSummary": "泛微 Ecology10 中可通过自定义 CSS 将浏览按钮的搜索图标改造成真按钮，包括调整输入框最小宽度、设置蓝色背景与圆角、用伪元素补充按钮文字并增加悬停效果。使用时需按实际编辑提示语和字段 ID 替换对应选择器，适合需要美化搜索入口的二次开发场景。",
      "url": "https://blog.oneszhang.com/2025/11/14/187/",
      "pubDate": "2025-11-14T00:57:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/11/14/187.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/11/14/180/",
      "title": "[泛微 Ecology10] 获取当前表单所有字段值的方法",
      "description": "介绍泛微 Ecology10 表单前端二次开发中获取当前表单全部字段值的做法演变：早期需要先遍历字段信息，再分别读取主表字段与明细表数据，如今只需调用表单数据仓库提供的方法，即可一次性取出包含主表与明细在内的全部数据。适合需要批量取值的开发场景，新写法明显更简洁。",
      "llmSummary": "介绍泛微 Ecology10 表单前端二次开发中获取当前表单全部字段值的做法演变：早期需要先遍历字段信息，再分别读取主表字段与明细表数据，如今只需调用表单数据仓库提供的方法，即可一次性取出包含主表与明细在内的全部数据。适合需要批量取值的开发场景，新写法明显更简洁。",
      "url": "https://blog.oneszhang.com/2025/11/14/180/",
      "pubDate": "2025-11-14T00:34:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/11/14/180.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/11/14/179/",
      "title": "[泛微 Ecology10] 丸子的 Ecology10 小本本",
      "description": "汇总泛微Ecology10前端二开常见技巧，涵盖表单数据状态检查、静默保存与数据获取、图片上传样式优化、ESB动作流调用、自定义弹窗及当前用户信息获取等。针对表单渲染后操作DOM的时机问题，给出基于React字段组件的处理思路，并记录矩阵维护入口、组织日志表与报表空白滚动优化方法，适合E10开发人员查阅。",
      "llmSummary": "汇总泛微Ecology10前端二开常见技巧，涵盖表单数据状态检查、静默保存与数据获取、图片上传样式优化、ESB动作流调用、自定义弹窗及当前用户信息获取等。针对表单渲染后操作DOM的时机问题，给出基于React字段组件的处理思路，并记录矩阵维护入口、组织日志表与报表空白滚动优化方法，适合E10开发人员查阅。",
      "url": "https://blog.oneszhang.com/2025/11/14/179/",
      "pubDate": "2025-11-14T00:32:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/11/14/179.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/10/20/177/",
      "title": "[泛微 Ecology9] [ 高阶精华 ]  泛微 Ecology9 新插件：kkfileview，让文件预览 “零门槛”",
      "description": "文章介绍在泛微 E9 中集成开源 kkfileview 实现统一文档预览：先自行编译部署 kkfileview 服务，再新建工具类生成带 ddcode 的文件下载地址，改造 index2file.jsp 拼接并 Base64 编码预览链接嵌入 iframe，最后通过 kkfileview.properties 配置开关与地址。适合做 E9 二开的读者参考，作者提醒方案安全性与稳定性尚未全面评估，生产使用前需充分测试，并注意并发、大文件和移动端适配。",
      "llmSummary": "文章介绍在泛微 E9 中集成开源 kkfileview 实现统一文档预览：先自行编译部署 kkfileview 服务，再新建工具类生成带 ddcode 的文件下载地址，改造 index2file.jsp 拼接并 Base64 编码预览链接嵌入 iframe，最后通过 kkfileview.properties 配置开关与地址。适合做 E9 二开的读者参考，作者提醒方案安全性与稳定性尚未全面评估，生产使用前需充分测试，并注意并发、大文件和移动端适配。",
      "url": "https://blog.oneszhang.com/2025/10/20/177/",
      "pubDate": "2025-10-20T04:13:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/10/20/177.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/10/17/169/",
      "title": "[泛微 Ecology9] GETE9LOG.jsp 直接查看当前Ecology9日志",
      "description": "介绍在泛微 E9 中通过自建 JSP 页面直接查看当前 ecology 日志的方法：将页面放入 ecology 目录后访问，带登录校验，可指定源编码与显示行数，读取 log/ecology 末尾日志并合并多行、统计日志级别。适合无 sysadmin 权限时快速排查测试环境问题，需注意日志文件路径与读取权限。",
      "llmSummary": "介绍在泛微 E9 中通过自建 JSP 页面直接查看当前 ecology 日志的方法：将页面放入 ecology 目录后访问，带登录校验，可指定源编码与显示行数，读取 log/ecology 末尾日志并合并多行、统计日志级别。适合无 sysadmin 权限时快速排查测试环境问题，需注意日志文件路径与读取权限。",
      "url": "https://blog.oneszhang.com/2025/10/17/169/",
      "pubDate": "2025-10-17T07:28:07.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/10/17/169.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/10/17/167/",
      "title": "[泛微 Ecology9] 开发踩坑：weaver.conn.RecordSet-报错\"字符串文字太长\"",
      "description": "文章记录了泛微OA集成AI流程审查时，将超长AI返回结果写入数据库报出Oracle字符串文字太长的排查过程。作者发现即便目标字段为CLOB，RecordSet更新仍受VARCHAR2四千字符限制，最终改用ConnStatement写入大字段解决，并建议按内容长度选择更新方式。",
      "llmSummary": "文章记录了泛微OA集成AI流程审查时，将超长AI返回结果写入数据库报出Oracle字符串文字太长的排查过程。作者发现即便目标字段为CLOB，RecordSet更新仍受VARCHAR2四千字符限制，最终改用ConnStatement写入大字段解决，并建议按内容长度选择更新方式。",
      "url": "https://blog.oneszhang.com/2025/10/17/167/",
      "pubDate": "2025-10-17T01:51:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/10/17/167.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/09/17/166/",
      "title": "[泛微 Ecology9] 流程数据建模同表同步 & SQL插入建模数据",
      "description": "泛微 EC9 中流程数据与建模模块打通的关键在于 formmodeid 字段。文章给出两种做法：建模模块直接绑定流程数据表，并在流程节点用 SQL 更新该字段值；或写入数据时一并带上该字段，避免建模无法识别。适合需要免转换同步或批量导入建模数据的开发与运维人员，重点是字段值与建模模块 ID 保持一致。",
      "llmSummary": "泛微 EC9 中流程数据与建模模块打通的关键在于 formmodeid 字段。文章给出两种做法：建模模块直接绑定流程数据表，并在流程节点用 SQL 更新该字段值；或写入数据时一并带上该字段，避免建模无法识别。适合需要免转换同步或批量导入建模数据的开发与运维人员，重点是字段值与建模模块 ID 保持一致。",
      "url": "https://blog.oneszhang.com/2025/09/17/166/",
      "pubDate": "2025-09-17T04:13:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/09/17/166.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/07/09/165/",
      "title": "[泛微 Ecology10]  明细表处理示例JS 1：字段联动后判断明细表数据隐藏选项",
      "description": "针对泛微 E10 表单中明细表的动态选项控制，文章以学生成绩表为例，介绍在数据联动事件触发后遍历明细表各行，判断分数为空或零时移除成绩类型下拉中的优秀与良好选项。核心是利用表单 SDK 获取字段标识、行标识并操作选项，适用于明细表联动场景，实际可按业务条件灵活调整。",
      "llmSummary": "针对泛微 E10 表单中明细表的动态选项控制，文章以学生成绩表为例，介绍在数据联动事件触发后遍历明细表各行，判断分数为空或零时移除成绩类型下拉中的优秀与良好选项。核心是利用表单 SDK 获取字段标识、行标识并操作选项，适用于明细表联动场景，实际可按业务条件灵活调整。",
      "url": "https://blog.oneszhang.com/2025/07/09/165/",
      "pubDate": "2025-07-09T03:00:19.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/07/09/165.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/07/07/164/",
      "title": "[泛微 Ecology10] 批量下载当前表单内所有附件",
      "description": "泛微 E10 表单默认只能按单个附件字段逐个下载，字段较多时效率低下。文章给出前端批量下载方案：借助 WeFormSDK 遍历指定字段收集附件 ID，调用平台异步批量下载接口创建任务，再轮询任务状态，完成后自动触发 ZIP 打包下载，并配有错误处理与消息提示，适合需要一次性导出表单全部附件的二次开发场景。",
      "llmSummary": "泛微 E10 表单默认只能按单个附件字段逐个下载，字段较多时效率低下。文章给出前端批量下载方案：借助 WeFormSDK 遍历指定字段收集附件 ID，调用平台异步批量下载接口创建任务，再轮询任务状态，完成后自动触发 ZIP 打包下载，并配有错误处理与消息提示，适合需要一次性导出表单全部附件的二次开发场景。",
      "url": "https://blog.oneszhang.com/2025/07/07/164/",
      "pubDate": "2025-07-07T00:18:18.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/07/07/164.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/06/09/161/",
      "title": "[泛微 Ecology9 ecode] 像批量增加选项一样去\"批量新增字段\"（半成品）",
      "description": "泛微E9 ecode 中尝试把批量增加选项的思路搬到批量新增字段，目标是在表单字段管理页面每行输入一个字段名、用回车分隔，一次添加多个字段。作者借助 ecodeSDK 覆写弹窗和搜索组组件，注入批量添加按钮与输入框，但目前只复用了原有添加按钮的点击逻辑，功能仍是半成品，提醒不要直接在 ecode 中运行，适合二次开发人员交流与继续完善。",
      "llmSummary": "泛微E9 ecode 中尝试把批量增加选项的思路搬到批量新增字段，目标是在表单字段管理页面每行输入一个字段名、用回车分隔，一次添加多个字段。作者借助 ecodeSDK 覆写弹窗和搜索组组件，注入批量添加按钮与输入框，但目前只复用了原有添加按钮的点击逻辑，功能仍是半成品，提醒不要直接在 ecode 中运行，适合二次开发人员交流与继续完善。",
      "url": "https://blog.oneszhang.com/2025/06/09/161/",
      "pubDate": "2025-06-09T01:41:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/06/09/161.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/05/26/158/",
      "title": "[泛微 Ecology10] 记首次发布APIdemo测试接口~",
      "description": "记录首次在泛微Ecology10中按官方ecode文档搭建后端二开环境并发布API测试接口的过程。针对3.1.3节未说明如何创建接口文件的问题，作者补充了在secondev-md-demo项目里新建package和HelloController、粘贴示例代码、处理报错后编译打包部署的步骤，适合二开新手参考。",
      "llmSummary": "记录首次在泛微Ecology10中按官方ecode文档搭建后端二开环境并发布API测试接口的过程。针对3.1.3节未说明如何创建接口文件的问题，作者补充了在secondev-md-demo项目里新建package和HelloController、粘贴示例代码、处理报错后编译打包部署的步骤，适合二开新手参考。",
      "url": "https://blog.oneszhang.com/2025/05/26/158/",
      "pubDate": "2025-05-26T14:43:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/05/26/158.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/04/23/151/",
      "title": "丸子开始泛微e9和e10并行开搞啦~",
      "description": "作者宣布自己已开始同时推进泛微 e-cology 9 与 e-cology 10 的相关工作，并为此新建了泛微 ecology10 讨论交流群，邀请正在使用 e10 的伙伴加入，以便集中交流与互助。内容偏向公告性质，主要面向泛微 OA 二次开发与运维人员。",
      "llmSummary": "作者宣布自己已开始同时推进泛微 e-cology 9 与 e-cology 10 的相关工作，并为此新建了泛微 ecology10 讨论交流群，邀请正在使用 e10 的伙伴加入，以便集中交流与互助。内容偏向公告性质，主要面向泛微 OA 二次开发与运维人员。",
      "url": "https://blog.oneszhang.com/2025/04/23/151/",
      "pubDate": "2025-04-23T13:49:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/04/23/151.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/04/05/145/",
      "title": "olmocr！成了，效果还行~",
      "description": "记录了在配备 NVIDIA A10 显卡的 Ubuntu 服务器上部署并试用 AllenAI 开源 OCR 项目 olmocr 的过程，前端借助 AI 生成的 Gradio 构建，单张示例图片识别耗时 45.7 秒。测试覆盖表格与公式识别场景，整体效果尚可，但作者表示首次尝试较乱，踩坑记录尚未整理。",
      "llmSummary": "记录了在配备 NVIDIA A10 显卡的 Ubuntu 服务器上部署并试用 AllenAI 开源 OCR 项目 olmocr 的过程，前端借助 AI 生成的 Gradio 构建，单张示例图片识别耗时 45.7 秒。测试覆盖表格与公式识别场景，整体效果尚可，但作者表示首次尝试较乱，踩坑记录尚未整理。",
      "url": "https://blog.oneszhang.com/2025/04/05/145/",
      "pubDate": "2025-04-05T07:49:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/04/05/145.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/03/31/137/",
      "title": "excalidraw画板 私有化部署（基于Docker，可协同）指南",
      "description": "以 Docker Compose 私有化部署支持协同的 Excalidraw 白板，将主应用、实时协同服务和第三方存储后端分别映射端口，并通过子域名反向代理及环境变量接入存储与 WebSocket 服务后启动使用。作者提示协同状态下可能出现后端保存异常，建议重要内容随时本地备份。",
      "llmSummary": "以 Docker Compose 私有化部署支持协同的 Excalidraw 白板，将主应用、实时协同服务和第三方存储后端分别映射端口，并通过子域名反向代理及环境变量接入存储与 WebSocket 服务后启动使用。作者提示协同状态下可能出现后端保存异常，建议重要内容随时本地备份。",
      "url": "https://blog.oneszhang.com/2025/03/31/137/",
      "pubDate": "2025-03-31T02:09:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/03/31/137.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/03/21/136/",
      "title": "[JS辅助方法] 校验字符串字符类型并返回结果及过滤后的字符串",
      "description": "这篇 JavaScript 工具函数通过类型编号映射表，把数字、字母、汉字、特殊符号和空格五类字符统一成检测与过滤两套正则，一次调用即可返回是否命中目标类型以及剔除这些字符后的字符串。文章给出使用示例、参数对照表和空数组等边界情况说明，并展示了清理输入、提取纯文本、密码强度校验等场景，适合需要在表单校验或数据清洗中复用字符过滤逻辑的前端开发者参考。",
      "llmSummary": "这篇 JavaScript 工具函数通过类型编号映射表，把数字、字母、汉字、特殊符号和空格五类字符统一成检测与过滤两套正则，一次调用即可返回是否命中目标类型以及剔除这些字符后的字符串。文章给出使用示例、参数对照表和空数组等边界情况说明，并展示了清理输入、提取纯文本、密码强度校验等场景，适合需要在表单校验或数据清洗中复用字符过滤逻辑的前端开发者参考。",
      "url": "https://blog.oneszhang.com/2025/03/21/136/",
      "pubDate": "2025-03-21T04:07:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/03/21/136.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/03/21/135/",
      "title": "Doris2.1.7单机部署-dockercompose部署！秒了！",
      "description": "用 Docker Compose 编排 Apache Doris 2.1.7 单机 FE 与 BE，完成端口、网络、数据与日志持久化及健康检查配置即可部署；部署前需在宿主机调大内存映射参数并关闭交换分区，内存不足则不建议尝试。文章还对比 2.x 与 3.x 的定位、性能、功能和升级差异，供读者按生产稳定或云原生湖仓等场景选版。",
      "llmSummary": "用 Docker Compose 编排 Apache Doris 2.1.7 单机 FE 与 BE，完成端口、网络、数据与日志持久化及健康检查配置即可部署；部署前需在宿主机调大内存映射参数并关闭交换分区，内存不足则不建议尝试。文章还对比 2.x 与 3.x 的定位、性能、功能和升级差异，供读者按生产稳定或云原生湖仓等场景选版。",
      "url": "https://blog.oneszhang.com/2025/03/21/135/",
      "pubDate": "2025-03-21T03:16:38.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/03/21/135.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/01/23/134/",
      "title": "[泛微 Ecology9] 退回流程拦截禁止再次提交",
      "description": "文章围绕泛微 Ecology EC9 流程退回后禁止再次提交的需求，对比了辅助字段与前端代码两种思路。作者通过阅读源码发现 rightMenu.lastnodeid 可标识上次退回的节点，据此在页面加载时置灰按钮并注册提交校验事件进行拦截。方案适合追求不加字段、便于复用的开发场景，同时提醒技术选型无绝对对错。",
      "llmSummary": "文章围绕泛微 Ecology EC9 流程退回后禁止再次提交的需求，对比了辅助字段与前端代码两种思路。作者通过阅读源码发现 rightMenu.lastnodeid 可标识上次退回的节点，据此在页面加载时置灰按钮并注册提交校验事件进行拦截。方案适合追求不加字段、便于复用的开发场景，同时提醒技术选型无绝对对错。",
      "url": "https://blog.oneszhang.com/2025/01/23/134/",
      "pubDate": "2025-01-23T07:29:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/01/23/134.md"
    },
    {
      "id": "https://blog.oneszhang.com/2025/01/15/132/",
      "title": "[泛微 Ecology9] 建模查询动态列测试（半成品）",
      "description": "该示例展示在泛微 Ecology ecode 中通过覆盖 Table 组件属性，实现建模查询表格按年月动态生成列的效果。核心做法是识别指定查询路径后，过滤排序年月数据，将业务数据转置，再动态替换表头与数据源。代码为半成品，需读者按实际场景调整。",
      "llmSummary": "该示例展示在泛微 Ecology ecode 中通过覆盖 Table 组件属性，实现建模查询表格按年月动态生成列的效果。核心做法是识别指定查询路径后，过滤排序年月数据，将业务数据转置，再动态替换表头与数据源。代码为半成品，需读者按实际场景调整。",
      "url": "https://blog.oneszhang.com/2025/01/15/132/",
      "pubDate": "2025-01-15T06:41:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2025/01/15/132.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/12/27/130/",
      "title": "[泛微 Ecology9] 拖拽上传附件功能拖拽显示优化",
      "description": "针对泛微 OA Ecology 中 ecode 拖拽上传附件缺少视觉反馈、用户易误以为不支持拖拽的问题，这里通过改写 index.js 做显示优化：用 React 组件包裹 WeaUpload，监听拖拽进入、悬停与离开事件切换状态，拖拽时显示蓝色虚线边框和高亮遮罩提示上传附件，适合 ecode 定制开发参考。",
      "llmSummary": "针对泛微 OA Ecology 中 ecode 拖拽上传附件缺少视觉反馈、用户易误以为不支持拖拽的问题，这里通过改写 index.js 做显示优化：用 React 组件包裹 WeaUpload，监听拖拽进入、悬停与离开事件切换状态，拖拽时显示蓝色虚线边框和高亮遮罩提示上传附件，适合 ecode 定制开发参考。",
      "url": "https://blog.oneszhang.com/2024/12/27/130/",
      "pubDate": "2024-12-27T03:41:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/12/27/130.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/12/26/127/",
      "title": "[泛微 Ecology9] [ 精华 ]  流程浏览按钮自定义参数自定义sql筛选",
      "description": "在泛微 Ecology E9 二次开发中，可借助流程浏览按钮的自定义参数 spellSqlWhere，通过 WfForm.appendBrowserDataUrlParam 向取数接口动态注入 SQL 条件，实现按流程节点、表单字段值等过滤浏览数据，文中给出了按节点和审批状态筛选的实例。该方式灵活易用，但仅适用于流程浏览框，作者建议配合 datas 查询 SQL 的拦截方案使用，否则参数容易失效。",
      "llmSummary": "在泛微 Ecology E9 二次开发中，可借助流程浏览按钮的自定义参数 spellSqlWhere，通过 WfForm.appendBrowserDataUrlParam 向取数接口动态注入 SQL 条件，实现按流程节点、表单字段值等过滤浏览数据，文中给出了按节点和审批状态筛选的实例。该方式灵活易用，但仅适用于流程浏览框，作者建议配合 datas 查询 SQL 的拦截方案使用，否则参数容易失效。",
      "url": "https://blog.oneszhang.com/2024/12/26/127/",
      "pubDate": "2024-12-26T06:14:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/12/26/127.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/12/25/125/",
      "title": "pnpm安装sharp报错处理办法",
      "description": "文章记录了 pnpm 安装 sharp 时因无法从 GitHub 下载 libvips 二进制包而报错的问题，典型表现是安装脚本执行失败并提示连接被拒绝。解决办法是通过 pnpm config 将 sharp 及其 libvips 的二进制下载地址改为 npmmirror 国内镜像源，适合国内网络环境下遇到同类依赖安装失败的开发者参考。",
      "llmSummary": "文章记录了 pnpm 安装 sharp 时因无法从 GitHub 下载 libvips 二进制包而报错的问题，典型表现是安装脚本执行失败并提示连接被拒绝。解决办法是通过 pnpm config 将 sharp 及其 libvips 的二进制下载地址改为 npmmirror 国内镜像源，适合国内网络环境下遇到同类依赖安装失败的开发者参考。",
      "url": "https://blog.oneszhang.com/2024/12/25/125/",
      "pubDate": "2024-12-25T09:57:04.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/12/25/125.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/12/24/124/",
      "title": "[泛微 Ecology9 Java] 流程强制归档方法",
      "description": "泛微 E9 二次开发中可通过专门类手动触发流程强制归档，先设置签字意见，再传入请求 ID 列表和当前用户执行归档并返回结果。适合需用 Java 代码归档以便调试或扩展功能的场景，示例还涉及当前用户与请求参数的校验，注意参数缺失时的处理。",
      "llmSummary": "泛微 E9 二次开发中可通过专门类手动触发流程强制归档，先设置签字意见，再传入请求 ID 列表和当前用户执行归档并返回结果。适合需用 Java 代码归档以便调试或扩展功能的场景，示例还涉及当前用户与请求参数的校验，注意参数缺失时的处理。",
      "url": "https://blog.oneszhang.com/2024/12/24/124/",
      "pubDate": "2024-12-24T06:04:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/12/24/124.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/12/20/121/",
      "title": "[泛微 Ecology9] 浏览按钮自定义单选字段增加添加数据“+”按钮",
      "description": "针对泛微 E9 流程中浏览按钮无法直接新增数据的痛点，文章介绍了通过 ecodeSDK 的 overwritePropsFnQueueMapSet 接口覆盖 WeaBrowser 组件默认属性的做法。核心步骤包括限定页面路径和目标字段、调整新建链接参数、开启 hasAddBtn 并绑定点击事件，在弹窗中提交数据后回填到表单字段。适用于 ecode 表单开发人员，需注意链接获取失败时的提示处理。",
      "llmSummary": "针对泛微 E9 流程中浏览按钮无法直接新增数据的痛点，文章介绍了通过 ecodeSDK 的 overwritePropsFnQueueMapSet 接口覆盖 WeaBrowser 组件默认属性的做法。核心步骤包括限定页面路径和目标字段、调整新建链接参数、开启 hasAddBtn 并绑定点击事件，在弹窗中提交数据后回填到表单字段。适用于 ecode 表单开发人员，需注意链接获取失败时的提示处理。",
      "url": "https://blog.oneszhang.com/2024/12/20/121/",
      "pubDate": "2024-12-20T07:13:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/12/20/121.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/12/19/119/",
      "title": "[泛微 Ecology9] 流程节点Html模板检查一致性比对",
      "description": "针对泛微 E9 流程节点 HTML 模板数量多、人工比对费时的问题，介绍了一个基于 ecodeSDK 的一致性比对小工具：在节点页面注入按钮，调用接口提取模板与脚本，用 Map 去重并生成彩色标签，直观标出相同模板与脚本的节点分组。适合 OA 工程师日常维护流程时快速排查模板差异，文中还修复了 Table 组件污染问题。",
      "llmSummary": "针对泛微 E9 流程节点 HTML 模板数量多、人工比对费时的问题，介绍了一个基于 ecodeSDK 的一致性比对小工具：在节点页面注入按钮，调用接口提取模板与脚本，用 Map 去重并生成彩色标签，直观标出相同模板与脚本的节点分组。适合 OA 工程师日常维护流程时快速排查模板差异，文中还修复了 Table 组件污染问题。",
      "url": "https://blog.oneszhang.com/2024/12/19/119/",
      "pubDate": "2024-12-19T01:41:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/12/19/119.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/12/18/118/",
      "title": "[泛微 Ecology9] Table 组件刷新 data 数据尝试",
      "description": "这篇文章记录了在泛微 ecode 中动态刷新 Table 组件数据的一次尝试。作者通过复写 ecodeSDK 的组件属性传递函数，先捕获 Table 的 props 存入全局变量，再向 WeaTop 注入自定义按钮，点击后修改表格 datas 并调用 onChange 强制刷新，并用路径校验限定生效范围。方案在指定流程节点路径下验证有效，但作者也指出直接改数据、依赖全局变量存在不够优雅和版本兼容风险，期待更标准的实现思路。",
      "llmSummary": "这篇文章记录了在泛微 ecode 中动态刷新 Table 组件数据的一次尝试。作者通过复写 ecodeSDK 的组件属性传递函数，先捕获 Table 的 props 存入全局变量，再向 WeaTop 注入自定义按钮，点击后修改表格 datas 并调用 onChange 强制刷新，并用路径校验限定生效范围。方案在指定流程节点路径下验证有效，但作者也指出直接改数据、依赖全局变量存在不够优雅和版本兼容风险，期待更标准的实现思路。",
      "url": "https://blog.oneszhang.com/2024/12/18/118/",
      "pubDate": "2024-12-18T15:52:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/12/18/118.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/12/17/117/",
      "title": "[泛微 Ecology9] 常用日志目录记录",
      "description": "整理泛微 Ecology 9 常用日志的目录、用途与命名规则，涵盖 SQL 日志、系统运行日志、Resin 日志、安全包日志、移动端与云桥日志等。文章还按启动运行、页面 500/403 及性能宕机等场景给出取日志清单，并说明管理员日志访问入口，便于运维人员按问题类型快速定位。",
      "llmSummary": "整理泛微 Ecology 9 常用日志的目录、用途与命名规则，涵盖 SQL 日志、系统运行日志、Resin 日志、安全包日志、移动端与云桥日志等。文章还按启动运行、页面 500/403 及性能宕机等场景给出取日志清单，并说明管理员日志访问入口，便于运维人员按问题类型快速定位。",
      "url": "https://blog.oneszhang.com/2024/12/17/117/",
      "pubDate": "2024-12-17T02:06:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/12/17/117.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/12/10/116/",
      "title": "[泛微 Ecology9] 流程右上角增加状态图签-全局",
      "description": "介绍泛微 Ecology ecode 中为流程表单右上角添加状态图签的做法：通过 register.js 前置加载，在 Menu 的 overwritePropsFnQueueMapSet 钩子里判断请求路径后，向表单容器追加状态图片，并用 index.css 绝对定位。当前为归档流程无条件全局生效，可自行加条件扩展，图片需放入项目 resources 目录。",
      "llmSummary": "介绍泛微 Ecology ecode 中为流程表单右上角添加状态图签的做法：通过 register.js 前置加载，在 Menu 的 overwritePropsFnQueueMapSet 钩子里判断请求路径后，向表单容器追加状态图片，并用 index.css 绝对定位。当前为归档流程无条件全局生效，可自行加条件扩展，图片需放入项目 resources 目录。",
      "url": "https://blog.oneszhang.com/2024/12/10/116/",
      "pubDate": "2024-12-10T09:36:58.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/12/10/116.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/10/30/110/",
      "title": "[泛微 Ecology9 ecode] 待办列表自定义流程标题颜色",
      "description": "在泛微EC9的ecode开发中，可通过重写Table组件属性来定制待办列表的流程标题样式。文章以退回流程标红为例，利用ecodeSDK遍历待办数据，识别标题中的退回标记并替换为红色加粗的HTML，实现视觉提醒。该方法适用于需要突出显示特定状态流程的OA二次开发场景，注意路径判断以确保仅对待办列表生效。",
      "llmSummary": "在泛微EC9的ecode开发中，可通过重写Table组件属性来定制待办列表的流程标题样式。文章以退回流程标红为例，利用ecodeSDK遍历待办数据，识别标题中的退回标记并替换为红色加粗的HTML，实现视觉提醒。该方法适用于需要突出显示特定状态流程的OA二次开发场景，注意路径判断以确保仅对待办列表生效。",
      "url": "https://blog.oneszhang.com/2024/10/30/110/",
      "pubDate": "2024-10-30T08:53:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/10/30/110.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/09/20/106/",
      "title": "Next.js项目run dev报错TypeError: fetch failed",
      "description": "文章记录了 Next.js 项目执行 npm run dev 时出现 fetch failed 报错的排查过程，原因是旧版淘宝镜像已停止服务。作者给出通过 npm 或 yarn 将 registry 切换为新的 npmmirror 镜像的解决办法，适合遇到同类网络请求失败的 Next.js 开发者参考。",
      "llmSummary": "文章记录了 Next.js 项目执行 npm run dev 时出现 fetch failed 报错的排查过程，原因是旧版淘宝镜像已停止服务。作者给出通过 npm 或 yarn 将 registry 切换为新的 npmmirror 镜像的解决办法，适合遇到同类网络请求失败的 Next.js 开发者参考。",
      "url": "https://blog.oneszhang.com/2024/09/20/106/",
      "pubDate": "2024-09-20T06:15:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/09/20/106.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/09/11/103/",
      "title": "[泛微 Ecology9] 移动建模手机号&身份证号校验js代码",
      "description": "在泛微 Ecology EC9 移动建模中，通过 $load 注册身份证号与手机号两个校验函数，并监听 sfzh、lxfs 字段的 change 事件，校验失败时用 Mobile_NS 提示并清空输入框。身份证校验除正则外还核验出生日期与校验码，手机号按号段正则判断，适合移动端表单提交前的即时校验。",
      "llmSummary": "在泛微 Ecology EC9 移动建模中，通过 $load 注册身份证号与手机号两个校验函数，并监听 sfzh、lxfs 字段的 change 事件，校验失败时用 Mobile_NS 提示并清空输入框。身份证校验除正则外还核验出生日期与校验码，手机号按号段正则判断，适合移动端表单提交前的即时校验。",
      "url": "https://blog.oneszhang.com/2024/09/11/103/",
      "pubDate": "2024-09-11T09:18:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/09/11/103.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/08/30/99/",
      "title": "[泛微 Ecology9] 使用页面引导组件/功能",
      "description": "介绍在泛微EC9中实现页面引导功能的两种途径：ecode方式与系统深度集成，适合全局化、需长期维护扩展的场景；纯JS方式更灵活轻量，可直接应用于建模或流程页面。文章重点讲解纯JS实现步骤，即引入WeaIntro相关组件、创建渲染容器、定义引导步骤及提示内容后启动引导，开发者可按需定制目标元素与文案，帮助新用户快速熟悉页面功能、提升使用体验。",
      "llmSummary": "介绍在泛微EC9中实现页面引导功能的两种途径：ecode方式与系统深度集成，适合全局化、需长期维护扩展的场景；纯JS方式更灵活轻量，可直接应用于建模或流程页面。文章重点讲解纯JS实现步骤，即引入WeaIntro相关组件、创建渲染容器、定义引导步骤及提示内容后启动引导，开发者可按需定制目标元素与文案，帮助新用户快速熟悉页面功能、提升使用体验。",
      "url": "https://blog.oneszhang.com/2024/08/30/99/",
      "pubDate": "2024-08-30T03:56:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/08/30/99.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/08/24/97/",
      "title": "[泛微 Ecology9] api/ec/dev/table/getxml拦截后解决方案",
      "description": "泛微Ecology9最新安全包拦截了/api/ec/dev/table/getxml接口，导致无法查看接口执行的SQL记录，作者给出JSP替代方案：先校验用户登录，再根据dataKey参数读取缓存数据，用正则解析sql标签属性并以表格展示，将文件放入ecology主目录即可通过URL访问。该方案适用于E9二次开发中快速调试SQL语句执行情况的场景。",
      "llmSummary": "泛微Ecology9最新安全包拦截了/api/ec/dev/table/getxml接口，导致无法查看接口执行的SQL记录，作者给出JSP替代方案：先校验用户登录，再根据dataKey参数读取缓存数据，用正则解析sql标签属性并以表格展示，将文件放入ecology主目录即可通过URL访问。该方案适用于E9二次开发中快速调试SQL语句执行情况的场景。",
      "url": "https://blog.oneszhang.com/2024/08/24/97/",
      "pubDate": "2024-08-24T01:14:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/08/24/97.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/08/16/96/",
      "title": "[泛微 Ecology9] 公式：获取当前日期是今年的第几周",
      "description": "介绍在泛微 Ecology 9 公式中实现的一个 JavaScript 函数，用于计算当前日期是今年的第几周，无需传入参数即可直接调用。其思路是以当年 1 月 1 日为起点，对齐到该日期所在的第一个完整周后按天数推算周数，其中 1 月 1 日所在周被视为第一周，适合在 OA 表单等需要周序号的场景中开箱即用。",
      "llmSummary": "介绍在泛微 Ecology 9 公式中实现的一个 JavaScript 函数，用于计算当前日期是今年的第几周，无需传入参数即可直接调用。其思路是以当年 1 月 1 日为起点，对齐到该日期所在的第一个完整周后按天数推算周数，其中 1 月 1 日所在周被视为第一周，适合在 OA 表单等需要周序号的场景中开箱即用。",
      "url": "https://blog.oneszhang.com/2024/08/16/96/",
      "pubDate": "2024-08-16T08:07:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/08/16/96.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/08/15/94/",
      "title": "[泛微 Ecology9] SSO单点登录到EcologyOA",
      "description": "介绍泛微Ecology E9基于Token认证实现SSO单点登录的完整流程：在统一认证中心开启Token认证并注册应用，配置IP白名单与账号映射规则，再通过浏览器控制台调用接口获取ssoToken拼接登录链接即可免密进入系统。注意开启认证会自动重启OA服务，生产环境需谨慎操作。",
      "llmSummary": "介绍泛微Ecology E9基于Token认证实现SSO单点登录的完整流程：在统一认证中心开启Token认证并注册应用，配置IP白名单与账号映射规则，再通过浏览器控制台调用接口获取ssoToken拼接登录链接即可免密进入系统。注意开启认证会自动重启OA服务，生产环境需谨慎操作。",
      "url": "https://blog.oneszhang.com/2024/08/15/94/",
      "pubDate": "2024-08-15T06:17:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/08/15/94.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/08/13/89/",
      "title": "[泛微 Ecology9] API接口开发（录入客户是否重复检测by电话）",
      "description": "介绍在泛微 Ecology 二次开发中实现客户录入查重的 API 接口：通过 GET 请求传入电话号码，接口查询客户管理建模表中是否存在相同联系方式的记录，返回 isValid 与 msg 的 JSON 结果。文章给出了接口文档与基于 JAX-RS 和 RecordSet 的 Java 实现，并对空号码、客户已存在、数据库异常等情况做了相应处理，适合需要在录入客户前进行重复校验的场景参考。",
      "llmSummary": "介绍在泛微 Ecology 二次开发中实现客户录入查重的 API 接口：通过 GET 请求传入电话号码，接口查询客户管理建模表中是否存在相同联系方式的记录，返回 isValid 与 msg 的 JSON 结果。文章给出了接口文档与基于 JAX-RS 和 RecordSet 的 Java 实现，并对空号码、客户已存在、数据库异常等情况做了相应处理，适合需要在录入客户前进行重复校验的场景参考。",
      "url": "https://blog.oneszhang.com/2024/08/13/89/",
      "pubDate": "2024-08-13T09:47:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/08/13/89.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/08/05/86/",
      "title": "[泛微 Ecology9] 为Table表格增加筛选功能（流程待办筛选当前节点）",
      "description": "介绍在泛微 Ecology ecode 开发中，利用 ecodeSDK.overwritePropsFnQueueMapSet 覆写 Table 组件属性的方法，为流程待办列表的当前节点列动态生成筛选项并实现本地筛选。文中通过路径校验定位页面、从数据中提取唯一节点构建过滤器、再配置列的过滤函数完成实现，并提示远程加载数据时需另行处理网络延迟与数据同步问题。",
      "llmSummary": "介绍在泛微 Ecology ecode 开发中，利用 ecodeSDK.overwritePropsFnQueueMapSet 覆写 Table 组件属性的方法，为流程待办列表的当前节点列动态生成筛选项并实现本地筛选。文中通过路径校验定位页面、从数据中提取唯一节点构建过滤器、再配置列的过滤函数完成实现，并提示远程加载数据时需另行处理网络延迟与数据同步问题。",
      "url": "https://blog.oneszhang.com/2024/08/05/86/",
      "pubDate": "2024-08-05T09:01:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/08/05/86.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/07/25/85/",
      "title": "移动云电脑，套娃保活！持久在线~",
      "description": "针对移动云电脑长时间未连接会自动关机下线的问题，文章介绍了套娃式保活方案：在云电脑中再装云电脑，通过 PowerShell 脚本定时结束并重启云电脑进程，再配合 Windows 任务计划程序每天凌晨自动执行，实现云电脑持久在线。适合需要云电脑全天候待机的用户参考，注意脚本路径需按实际安装位置调整。",
      "llmSummary": "针对移动云电脑长时间未连接会自动关机下线的问题，文章介绍了套娃式保活方案：在云电脑中再装云电脑，通过 PowerShell 脚本定时结束并重启云电脑进程，再配合 Windows 任务计划程序每天凌晨自动执行，实现云电脑持久在线。适合需要云电脑全天候待机的用户参考，注意脚本路径需按实际安装位置调整。",
      "url": "https://blog.oneszhang.com/2024/07/25/85/",
      "pubDate": "2024-07-25T02:29:07.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/07/25/85.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/07/08/80/",
      "title": "[泛微 Ecology9] 建模查询手机号字段必填查询检查拦截",
      "description": "这篇文章介绍在泛微 Ecology 建模查询页面中，通过 ecodeSDK 覆写 WeaInput 组件，对指定查询路径下 placeholder 为客户电话的输入框做手机号格式校验，在 onBlur 和 onPressEnter 事件中拦截非法号码并弹出提示，同时记录了改写接口数据的无效方案，适合做建模查询前端校验的开发者参考。",
      "llmSummary": "这篇文章介绍在泛微 Ecology 建模查询页面中，通过 ecodeSDK 覆写 WeaInput 组件，对指定查询路径下 placeholder 为客户电话的输入框做手机号格式校验，在 onBlur 和 onPressEnter 事件中拦截非法号码并弹出提示，同时记录了改写接口数据的无效方案，适合做建模查询前端校验的开发者参考。",
      "url": "https://blog.oneszhang.com/2024/07/08/80/",
      "pubDate": "2024-07-08T06:47:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/07/08/80.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/07/08/79/",
      "title": "[泛微 Ecology9] 流程浏览按钮跳转监控流程(ismonitor)",
      "description": "在泛微 Ecology 二次开发中，利用 ecodeSDK 覆盖 WeaBrowser 组件，当页面处于流程请求地址且流程 ID 在允许列表内时，为“多流程”浏览按钮的跳转链接添加监控标识参数，并把按钮文字改为“点击查看流程”，从而实现跳转至监控流程。适用于需对指定流程启用监控浏览的场景，需注意开关和流程 ID 白名单配置。",
      "llmSummary": "在泛微 Ecology 二次开发中，利用 ecodeSDK 覆盖 WeaBrowser 组件，当页面处于流程请求地址且流程 ID 在允许列表内时，为“多流程”浏览按钮的跳转链接添加监控标识参数，并把按钮文字改为“点击查看流程”，从而实现跳转至监控流程。适用于需对指定流程启用监控浏览的场景，需注意开关和流程 ID 白名单配置。",
      "url": "https://blog.oneszhang.com/2024/07/08/79/",
      "pubDate": "2024-07-08T06:44:48.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/07/08/79.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/07/08/78/",
      "title": "[泛微 Ecology9] 隐藏流程顶部与签字意见（纯表单）",
      "description": "这段泛微 Ecology 的 ecode 前端代码通过重写 WeaReqTop 组件，在指定表单路径且流程 ID 匹配时，隐藏流程顶部区域与签字意见输入框、清除顶部容器内边距，并同步修改页面标题。适用于纯表单模式下需要精简流程页面显示的场景，使用时需按实际流程 ID 和路径调整判断条件。",
      "llmSummary": "这段泛微 Ecology 的 ecode 前端代码通过重写 WeaReqTop 组件，在指定表单路径且流程 ID 匹配时，隐藏流程顶部区域与签字意见输入框、清除顶部容器内边距，并同步修改页面标题。适用于纯表单模式下需要精简流程页面显示的场景，使用时需按实际流程 ID 和路径调整判断条件。",
      "url": "https://blog.oneszhang.com/2024/07/08/78/",
      "pubDate": "2024-07-08T06:43:51.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/07/08/78.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/07/08/77/",
      "title": "[泛微 Ecology9] 隐藏新建流程页面的流程分组",
      "description": "通过 ecodeSDK 的 rewriteApiDataQueueSet 拦截新建流程页面的 wfinfo 接口返回数据，在回调中过滤掉指定分组 id（示例为 15），从而在页面上隐藏该流程分组。适用于泛微 Ecology 前端 ecode 二次开发中需要按需屏蔽流程分组的场景，使用时将 id 替换为实际要隐藏的分组即可。",
      "llmSummary": "通过 ecodeSDK 的 rewriteApiDataQueueSet 拦截新建流程页面的 wfinfo 接口返回数据，在回调中过滤掉指定分组 id（示例为 15），从而在页面上隐藏该流程分组。适用于泛微 Ecology 前端 ecode 二次开发中需要按需屏蔽流程分组的场景，使用时将 id 替换为实际要隐藏的分组即可。",
      "url": "https://blog.oneszhang.com/2024/07/08/77/",
      "pubDate": "2024-07-08T06:42:52.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/07/08/77.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/07/08/76/",
      "title": "[泛微 Ecology9] 记Ecology如何简单写restful接口？",
      "description": "介绍在泛微 Ecology E9 中快速编写 RESTful 接口的方法：在 com.api.formmode.web 包下新建 Java 类，利用 JAX-RS 注解声明请求路径、方式和 JSON 返回格式，编译为 class 并重启服务后，即可通过 /api/formmode/custom/ 前缀的地址访问并获取 JSON 响应。适合 Ecology 二次开发人员参考。",
      "llmSummary": "介绍在泛微 Ecology E9 中快速编写 RESTful 接口的方法：在 com.api.formmode.web 包下新建 Java 类，利用 JAX-RS 注解声明请求路径、方式和 JSON 返回格式，编译为 class 并重启服务后，即可通过 /api/formmode/custom/ 前缀的地址访问并获取 JSON 响应。适合 Ecology 二次开发人员参考。",
      "url": "https://blog.oneszhang.com/2024/07/08/76/",
      "pubDate": "2024-07-08T06:25:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/07/08/76.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/07/03/75/",
      "title": "[泛微 Ecology9] 流程表单中实现增加按钮",
      "description": "介绍泛微 EC9 流程表单中增加自定义按钮的两种做法：主表可用 CSS 配合 jQuery 向指定单元格追加按钮并绑定点击事件，明细表则通过 WfForm 的 API 将按钮代理渲染到单行文本框字段并注册点击事件。前者简单直接，后者更规范灵活；官方不推荐 jQuery 与原生 DOM 操作，建议统一使用 API，以保证移动端兼容性。",
      "llmSummary": "介绍泛微 EC9 流程表单中增加自定义按钮的两种做法：主表可用 CSS 配合 jQuery 向指定单元格追加按钮并绑定点击事件，明细表则通过 WfForm 的 API 将按钮代理渲染到单行文本框字段并注册点击事件。前者简单直接，后者更规范灵活；官方不推荐 jQuery 与原生 DOM 操作，建议统一使用 API，以保证移动端兼容性。",
      "url": "https://blog.oneszhang.com/2024/07/03/75/",
      "pubDate": "2024-07-03T06:14:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/07/03/75.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/06/26/74/",
      "title": "[泛微 Ecology9] web.xml 内容格式化为表格",
      "description": "将泛微 Ecology EC9 的 web.xml 内容整理为 Markdown 表格，重点列出 Filters 中过滤器名称、实现类、URL 匹配规则及初始化参数，方便博客阅读和复制。适合 Ecology 二次开发或运维人员快速查阅配置，注意表格仅覆盖已整理出的过滤器内容。",
      "llmSummary": "将泛微 Ecology EC9 的 web.xml 内容整理为 Markdown 表格，重点列出 Filters 中过滤器名称、实现类、URL 匹配规则及初始化参数，方便博客阅读和复制。适合 Ecology 二次开发或运维人员快速查阅配置，注意表格仅覆盖已整理出的过滤器内容。",
      "url": "https://blog.oneszhang.com/2024/06/26/74/",
      "pubDate": "2024-06-26T07:48:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/06/26/74.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/06/18/73/",
      "title": "身份证号码校验及识别提取函数解析",
      "description": "文章围绕身份证号码的校验与信息提取展开，先给出校验函数，从正则格式、出生日期合理性和校验码三方面逐层判断，再通过提取函数从号码中解析籍贯、生日、性别与年龄，并附综合调用示例。适合需要在前端处理实名信息的开发者参考，同时提醒注意身份证号的保密与隐私保护。",
      "llmSummary": "文章围绕身份证号码的校验与信息提取展开，先给出校验函数，从正则格式、出生日期合理性和校验码三方面逐层判断，再通过提取函数从号码中解析籍贯、生日、性别与年龄，并附综合调用示例。适合需要在前端处理实名信息的开发者参考，同时提醒注意身份证号的保密与隐私保护。",
      "url": "https://blog.oneszhang.com/2024/06/18/73/",
      "pubDate": "2024-06-18T02:42:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/06/18/73.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/05/28/72/",
      "title": "Windows连接共享打印机，无法连接0x0000011b",
      "description": "针对 Windows 连接共享打印机时报 0x0000011b 错误，给出的办法是在已安装打印机的电脑上修改注册表，新建相应键值并设为 0，随后重启打印后台服务或电脑即可解决。操作时务必确认是在安装了打印机的主机上进行，适合被该错误困扰的共享打印用户参考。",
      "llmSummary": "针对 Windows 连接共享打印机时报 0x0000011b 错误，给出的办法是在已安装打印机的电脑上修改注册表，新建相应键值并设为 0，随后重启打印后台服务或电脑即可解决。操作时务必确认是在安装了打印机的主机上进行，适合被该错误困扰的共享打印用户参考。",
      "url": "https://blog.oneszhang.com/2024/05/28/72/",
      "pubDate": "2024-05-28T03:54:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/05/28/72.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/05/24/71/",
      "title": "Doris 2.0.3+版本 使用Dorker部署之巨坑！！！",
      "description": "使用 Doris 2.0.3 及以上版本通过 Docker 部署时，若照搬官方文档的 docker run 命令，会遇到 BE 注册失败、FE 心跳超时等报错。原因是官方文档未同步更新，命令中的环境变量与新版 init_be.sh 不匹配，旧变量已弃用。按提交记录换成新变量，并同步修改 docker-compose 的 environment 配置即可解决。",
      "llmSummary": "使用 Doris 2.0.3 及以上版本通过 Docker 部署时，若照搬官方文档的 docker run 命令，会遇到 BE 注册失败、FE 心跳超时等报错。原因是官方文档未同步更新，命令中的环境变量与新版 init_be.sh 不匹配，旧变量已弃用。按提交记录换成新变量，并同步修改 docker-compose 的 environment 配置即可解决。",
      "url": "https://blog.oneszhang.com/2024/05/24/71/",
      "pubDate": "2024-05-24T07:20:05.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/05/24/71.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/05/20/70/",
      "title": "[泛微 Ecology9] 建模查询触发“数据审批”接口！",
      "description": "在泛微 Ecology EC9 中，通过向建模查询的扩展接口发送 POST 请求，可以触发数据审批，实测可行。请求需携带页面扩展按钮、数据、模式、表单、查询等标识参数，并固定查询标识；作者记录了相关参数和示例，但各参数是否必填尚未确认。适用于需要将建模查询与审批流程联动开发的场景。",
      "llmSummary": "在泛微 Ecology EC9 中，通过向建模查询的扩展接口发送 POST 请求，可以触发数据审批，实测可行。请求需携带页面扩展按钮、数据、模式、表单、查询等标识参数，并固定查询标识；作者记录了相关参数和示例，但各参数是否必填尚未确认。适用于需要将建模查询与审批流程联动开发的场景。",
      "url": "https://blog.oneszhang.com/2024/05/20/70/",
      "pubDate": "2024-05-20T07:20:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/05/20/70.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/05/01/68/",
      "title": "今天！卸载小米手机中的快应用",
      "description": "文章记录作者为奶奶解决红米手机使用快手极速版时频繁自动跳转到快应用、且广告界面无法关闭的问题，并发现快应用权限列表中有大量条目。随后作者用电脑、数据线和 USB 调试连接手机，通过 adb 工具禁用快应用，并提到 Shizuku 可作后续方案。",
      "llmSummary": "文章记录作者为奶奶解决红米手机使用快手极速版时频繁自动跳转到快应用、且广告界面无法关闭的问题，并发现快应用权限列表中有大量条目。随后作者用电脑、数据线和 USB 调试连接手机，通过 adb 工具禁用快应用，并提到 Shizuku 可作后续方案。",
      "url": "https://blog.oneszhang.com/2024/05/01/68/",
      "pubDate": "2024-05-01T06:18:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/05/01/68.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/03/29/65/",
      "title": "[泛微 Ecology9] 一键重置流程转数据字段映射",
      "description": "介绍在泛微 Ecology 流程转数据配置页通过 ecodeSDK 注入重置字段映射按钮并复写保存请求、实现一键清空字段映射的二开方案。因映射下拉框实为 Table 组件无法直接复写，作者改用拦截请求参数的迂回思路实现，第二版还支持按表选择清空范围、修复状态未复位问题并限定按钮仅在字段映射页签显示，适合 Ecology 运维与 ecode 开发者参考。",
      "llmSummary": "介绍在泛微 Ecology 流程转数据配置页通过 ecodeSDK 注入重置字段映射按钮并复写保存请求、实现一键清空字段映射的二开方案。因映射下拉框实为 Table 组件无法直接复写，作者改用拦截请求参数的迂回思路实现，第二版还支持按表选择清空范围、修复状态未复位问题并限定按钮仅在字段映射页签显示，适合 Ecology 运维与 ecode 开发者参考。",
      "url": "https://blog.oneszhang.com/2024/03/29/65/",
      "pubDate": "2024-03-29T01:37:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/03/29/65.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/03/20/64/",
      "title": "[泛微 Ecology9] 开发辅助-ecode组件全局检索",
      "description": "针对泛微 ecode 开发中难以定位页面组件的问题，介绍了一套 PC 端组件全局检索高亮方案。借助全局开关和目标页面路径限定生效范围，监控指定组件并安全序列化打印其属性，同时在页面右下角添加搜索框，匹配到的组件会闪烁高亮，方便开发者快速确认组件名称、来源以及能否复写。",
      "llmSummary": "针对泛微 ecode 开发中难以定位页面组件的问题，介绍了一套 PC 端组件全局检索高亮方案。借助全局开关和目标页面路径限定生效范围，监控指定组件并安全序列化打印其属性，同时在页面右下角添加搜索框，匹配到的组件会闪烁高亮，方便开发者快速确认组件名称、来源以及能否复写。",
      "url": "https://blog.oneszhang.com/2024/03/20/64/",
      "pubDate": "2024-03-20T08:35:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/03/20/64.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/03/20/fwdml/",
      "title": "[泛微 Ecology9] 流程节点后附加DML接口动作",
      "description": "针对泛微 Ecology EC9 流程节点后附加 DML 动作，作者用存储过程实现案件收款录入流程向案件管理流程收款明细的跨流程数据同步：根据传入的案件名称、收款流程 ID 和核验标识，判断明细是否已存在，再分别执行插入两条记录或更新记录，最后通过 DML 语句在流程节点后调用。适合需要流程间数据回写的二次开发人员参考，文章标注尚未完工。",
      "llmSummary": "针对泛微 Ecology EC9 流程节点后附加 DML 动作，作者用存储过程实现案件收款录入流程向案件管理流程收款明细的跨流程数据同步：根据传入的案件名称、收款流程 ID 和核验标识，判断明细是否已存在，再分别执行插入两条记录或更新记录，最后通过 DML 语句在流程节点后调用。适合需要流程间数据回写的二次开发人员参考，文章标注尚未完工。",
      "url": "https://blog.oneszhang.com/2024/03/20/fwdml/",
      "pubDate": "2024-03-20T07:55:07.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/03/20/fwdml.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/03/15/pan-wei-ec9-custom-button-single-data-modification/",
      "title": "[泛微 Ecology9] 建模查询自定义按钮-单条数据修改值",
      "description": "在泛微 EC9 中，可为查询列表每条数据添加自定义按钮，以申请客户为例，通过 JavaScript 调用接口实现对单条记录指定字段的更新，避免整批操作。文章还建议提交前校验字段值是否已变更，并在失败时给出重试或联系管理员提示，以提升体验与数据安全性，适合泛微 OA 二次开发人员参考。",
      "llmSummary": "在泛微 EC9 中，可为查询列表每条数据添加自定义按钮，以申请客户为例，通过 JavaScript 调用接口实现对单条记录指定字段的更新，避免整批操作。文章还建议提交前校验字段值是否已变更，并在失败时给出重试或联系管理员提示，以提升体验与数据安全性，适合泛微 OA 二次开发人员参考。",
      "url": "https://blog.oneszhang.com/2024/03/15/pan-wei-ec9-custom-button-single-data-modification/",
      "pubDate": "2024-03-15T04:02:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/03/15/pan-wei-ec9-custom-button-single-data-modification.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/02/26/huahandaohang/",
      "title": "一个\"EcologyOA工程师导航\"网站",
      "description": "一位泛微OA工程师为解决技术资料分散、查找困难的问题，创建了导航网站 huahan.cc，汇总官方文档、技术论坛和教程等资源，界面简洁、分类明确，并设有反馈与资源贡献渠道。网站面向泛微OA同行，旨在提升资料查找与学习效率，未来还将持续扩展功能并邀请社区参与。",
      "llmSummary": "一位泛微OA工程师为解决技术资料分散、查找困难的问题，创建了导航网站 huahan.cc，汇总官方文档、技术论坛和教程等资源，界面简洁、分类明确，并设有反馈与资源贡献渠道。网站面向泛微OA同行，旨在提升资料查找与学习效率，未来还将持续扩展功能并邀请社区参与。",
      "url": "https://blog.oneszhang.com/2024/02/26/huahandaohang/",
      "pubDate": "2024-02-26T05:51:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/02/26/huahandaohang.md"
    },
    {
      "id": "https://blog.oneszhang.com/2024/01/11/photoshop-slice-tool-introduction/",
      "title": "关于PS中切片工具的简单使用介绍",
      "description": "这篇文章介绍 Photoshop 切片工具的基本用法，说明了切片工具的概念与作用，并给出打开工具、拖动创建切片、调整切片大小和位置，以及通过存储为 Web 所用格式导出切片、选择导出格式与质量的操作步骤。适合网页设计和图像处理的初学者阅读，文章提醒使用时要合理规划切片的大小与位置，以兼顾视觉效果和加载性能。",
      "llmSummary": "这篇文章介绍 Photoshop 切片工具的基本用法，说明了切片工具的概念与作用，并给出打开工具、拖动创建切片、调整切片大小和位置，以及通过存储为 Web 所用格式导出切片、选择导出格式与质量的操作步骤。适合网页设计和图像处理的初学者阅读，文章提醒使用时要合理规划切片的大小与位置，以兼顾视觉效果和加载性能。",
      "url": "https://blog.oneszhang.com/2024/01/11/photoshop-slice-tool-introduction/",
      "pubDate": "2024-01-11T00:52:03.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2024/01/11/photoshop-slice-tool-introduction.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/12/16/linux-nginx-oa/",
      "title": "[泛微 Ecology9] EcologyOA部署HTTPS过程（Linux'CentOS'使用Nginx部署）",
      "description": "这篇文章记录了在 CentOS 服务器上使用 Nginx 为泛微 Ecology E9 部署 HTTPS 的完整流程：先打快照并申请域名证书，再编译安装带 SSL 等模块的 Nginx，然后修改配置文件，为 ecology、emobile、emessage 及移动端等多个服务分别监听不同端口并反向代理到本地 HTTP 端口，最后用 nginx -t 校验并启动或重载。相比直接改造 OA，Nginx 方式无需重启 OA 服务、无需升级 JDK，可实现热部署，适合负责泛微运维的工程师参考。",
      "llmSummary": "这篇文章记录了在 CentOS 服务器上使用 Nginx 为泛微 Ecology E9 部署 HTTPS 的完整流程：先打快照并申请域名证书，再编译安装带 SSL 等模块的 Nginx，然后修改配置文件，为 ecology、emobile、emessage 及移动端等多个服务分别监听不同端口并反向代理到本地 HTTP 端口，最后用 nginx -t 校验并启动或重载。相比直接改造 OA，Nginx 方式无需重启 OA 服务、无需升级 JDK，可实现热部署，适合负责泛微运维的工程师参考。",
      "url": "https://blog.oneszhang.com/2023/12/16/linux-nginx-oa/",
      "pubDate": "2023-12-16T02:18:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/12/16/linux-nginx-oa.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/11/16/fw-ecode-treeok/",
      "title": "[泛微 Ecology9] 实现树形组件点击标题展开/收起功能",
      "description": "介绍如何在泛微EC9中借助ecodeSDK的overwritePropsFnQueueMapSet方法重写Tree组件属性，实现点击节点标题即可展开或收起子节点的交互优化。文章给出两版代码，第二版增加了展开前异步加载数据的处理，并说明了路径检查、保留原回调等核心逻辑。需注意代码并非通用，onSelect中selectedKeys存在异步取空值问题，仅供学习参考。",
      "llmSummary": "介绍如何在泛微EC9中借助ecodeSDK的overwritePropsFnQueueMapSet方法重写Tree组件属性，实现点击节点标题即可展开或收起子节点的交互优化。文章给出两版代码，第二版增加了展开前异步加载数据的处理，并说明了路径检查、保留原回调等核心逻辑。需注意代码并非通用，onSelect中selectedKeys存在异步取空值问题，仅供学习参考。",
      "url": "https://blog.oneszhang.com/2023/11/16/fw-ecode-treeok/",
      "pubDate": "2023-11-16T13:26:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/11/16/fw-ecode-treeok.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/10/31/excel-compress/",
      "title": "Excel文件太大打开太慢？试试这个脚本！",
      "description": "这篇分享了一个用 Python 批量压缩 Excel 文件的脚本，通过 openpyxl 遍历当前目录下所有 .xlsx 文件，删除其中的空行和空列，并以「_压缩后」为后缀另存，从而减小体积、加快打开速度。文中给出了安装依赖、放置文件、命令行运行等步骤，并提醒该方法无法解决图片导致的文件过大问题，运行前需备份原始文件。",
      "llmSummary": "这篇分享了一个用 Python 批量压缩 Excel 文件的脚本，通过 openpyxl 遍历当前目录下所有 .xlsx 文件，删除其中的空行和空列，并以「_压缩后」为后缀另存，从而减小体积、加快打开速度。文中给出了安装依赖、放置文件、命令行运行等步骤，并提醒该方法无法解决图片导致的文件过大问题，运行前需备份原始文件。",
      "url": "https://blog.oneszhang.com/2023/10/31/excel-compress/",
      "pubDate": "2023-10-31T11:49:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/10/31/excel-compress.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/09/09/54/",
      "title": "丸子的C语言学习-Day1",
      "description": "这篇学习笔记面向 C 语言初学者，记录了使用 Visual Studio 2019 搭建开发环境、创建控制台项目并运行 Hello World 的过程，并介绍主函数、变量、标识符、关键词、字面常量和 printf 等基础语法，强调每个程序只能有一个 main 函数、变量须先声明后使用、格式符要与参数匹配。",
      "llmSummary": "这篇学习笔记面向 C 语言初学者，记录了使用 Visual Studio 2019 搭建开发环境、创建控制台项目并运行 Hello World 的过程，并介绍主函数、变量、标识符、关键词、字面常量和 printf 等基础语法，强调每个程序只能有一个 main 函数、变量须先声明后使用、格式符要与参数匹配。",
      "url": "https://blog.oneszhang.com/2023/09/09/54/",
      "pubDate": "2023-09-09T01:24:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/09/09/54.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/08/27/53/",
      "title": "Typecho Mirages主题添加一些小功能",
      "description": "作者为方便复制自己博客代码，参考 LOGI 的博客，给 Typecho Mirages 主题添加了代码块复制按钮、链接预加载和评论框七彩打字动画三个小功能。相关脚本需分别加入主题头部或 body 结束前，若开启 PJAX，复制按钮还需单独添加回调。适合使用该主题的博客读者参考。",
      "llmSummary": "作者为方便复制自己博客代码，参考 LOGI 的博客，给 Typecho Mirages 主题添加了代码块复制按钮、链接预加载和评论框七彩打字动画三个小功能。相关脚本需分别加入主题头部或 body 结束前，若开启 PJAX，复制按钮还需单独添加回调。适合使用该主题的博客读者参考。",
      "url": "https://blog.oneszhang.com/2023/08/27/53/",
      "pubDate": "2023-08-27T07:54:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/08/27/53.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/08/23/52/",
      "title": "[泛微 Ecology9] SQL缓存页面报错500解决办法",
      "description": "泛微 Ecology EC9 中 SQL 缓存监控页面出现 500 报错时，可参考标准最新版出包，或将附件文件解压后覆盖到对应 commcache 目录，无需重启即可生效。操作前应做好备份，适合运维或二次开发人员快速修复该页面异常。",
      "llmSummary": "泛微 Ecology EC9 中 SQL 缓存监控页面出现 500 报错时，可参考标准最新版出包，或将附件文件解压后覆盖到对应 commcache 目录，无需重启即可生效。操作前应做好备份，适合运维或二次开发人员快速修复该页面异常。",
      "url": "https://blog.oneszhang.com/2023/08/23/52/",
      "pubDate": "2023-08-23T08:33:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/08/23/52.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/08/15/50/",
      "title": "[泛微 Ecology9] 组件重写-门户首页顶部导航栏欢迎词",
      "description": "介绍泛微 Ecology 门户首页顶部导航栏欢迎词的 ecode 组件重写实现，借助 ecodeSDK 复写 Ant Design Popover，按不同时间段随机显示带用户名的问候语，并支持国际化、走马灯和实时时间。文中说明复写时需带避免循环的参数，适合想无侵入优化门户交互的开发者参考。",
      "llmSummary": "介绍泛微 Ecology 门户首页顶部导航栏欢迎词的 ecode 组件重写实现，借助 ecodeSDK 复写 Ant Design Popover，按不同时间段随机显示带用户名的问候语，并支持国际化、走马灯和实时时间。文中说明复写时需带避免循环的参数，适合想无侵入优化门户交互的开发者参考。",
      "url": "https://blog.oneszhang.com/2023/08/15/50/",
      "pubDate": "2023-08-15T06:34:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/08/15/50.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/08/07/48/",
      "title": "[泛微 Ecology9] 字段联动-附件联动无感联动",
      "description": "针对泛微 Ecology 流程中附件字段联动的需求，文章给出基于 ecode 的实现思路：覆写 WeaUpload 组件并调用接口获取附件数据，再绑定字段变化事件回填到目标附件字段。V3 版本调整配置结构，支持同一节点下多组附件字段联动，同时提醒泛微官方已在 KB9002307 中提供标准功能。",
      "llmSummary": "针对泛微 Ecology 流程中附件字段联动的需求，文章给出基于 ecode 的实现思路：覆写 WeaUpload 组件并调用接口获取附件数据，再绑定字段变化事件回填到目标附件字段。V3 版本调整配置结构，支持同一节点下多组附件字段联动，同时提醒泛微官方已在 KB9002307 中提供标准功能。",
      "url": "https://blog.oneszhang.com/2023/08/07/48/",
      "pubDate": "2023-08-07T10:36:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/08/07/48.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/08/01/47/",
      "title": "创意与智能融合，“丸子小工具”助您事半功倍！",
      "description": "介绍作者开发的丸子小工具集合，面向泛微 E9 开发与业务人员，提供流程表单前端 JS 自动生成、接口 API 查询、数据库字典检索、AISQL 生成和 SQL 报错修复等在线工具，借助智能技术减少重复劳动、提升开发调试效率，并邀请读者按需访问使用。",
      "llmSummary": "介绍作者开发的丸子小工具集合，面向泛微 E9 开发与业务人员，提供流程表单前端 JS 自动生成、接口 API 查询、数据库字典检索、AISQL 生成和 SQL 报错修复等在线工具，借助智能技术减少重复劳动、提升开发调试效率，并邀请读者按需访问使用。",
      "url": "https://blog.oneszhang.com/2023/08/01/47/",
      "pubDate": "2023-08-01T02:13:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/08/01/47.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/08/01/e9notebook/",
      "title": "[泛微 Ecology9] 丸子的 Ecology9 小本本",
      "description": "一篇泛微 Ecology E9 二次开发的速查笔记，整理了 E9 单页地址拼接规则、新建流程与接口 URL、常用 SQL（流程节点查询、离职人员信息、选择框字段取值）等资料，并记录签字意见存储表、节点附加操作执行顺序、归档节点过滤离职人员配置、相关流程权限校验等细节，适合 E9 二开与运维人员日常查阅。",
      "llmSummary": "一篇泛微 Ecology E9 二次开发的速查笔记，整理了 E9 单页地址拼接规则、新建流程与接口 URL、常用 SQL（流程节点查询、离职人员信息、选择框字段取值）等资料，并记录签字意见存储表、节点附加操作执行顺序、归档节点过滤离职人员配置、相关流程权限校验等细节，适合 E9 二开与运维人员日常查阅。",
      "url": "https://blog.oneszhang.com/2023/08/01/e9notebook/",
      "pubDate": "2023-08-01T01:27:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/08/01/e9notebook.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/07/25/ecodeSDK/",
      "title": "[泛微 Ecology9] 之ecodeSDK API文档",
      "description": "面向泛微 Ecology9 二次开发人员的 ecodeSDK API 参考文档，整理了 PC 与移动端组件参数复写、组件重写、URL 匹配检查、接口请求参数与响应数据拦截、本地存储读取等常用接口，均附参数说明与调用示例，适合进行无侵入界面定制开发时查阅。内容由作者自行收集分析整理，可能存在错漏，使用前建议对照官方文档甄别核实。",
      "llmSummary": "面向泛微 Ecology9 二次开发人员的 ecodeSDK API 参考文档，整理了 PC 与移动端组件参数复写、组件重写、URL 匹配检查、接口请求参数与响应数据拦截、本地存储读取等常用接口，均附参数说明与调用示例，适合进行无侵入界面定制开发时查阅。内容由作者自行收集分析整理，可能存在错漏，使用前建议对照官方文档甄别核实。",
      "url": "https://blog.oneszhang.com/2023/07/25/ecodeSDK/",
      "pubDate": "2023-07-25T03:15:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/07/25/ecodeSDK.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/06/26/ecode1/",
      "title": "[泛微 Ecology9] 组件复写-隐藏流程保存按钮",
      "description": "针对泛微 Ecology EC9 流程保存按钮无法在后台直接关闭的需求，文章给出隐藏该按钮的方案演变：推荐做法是借助 CSS 的 :has 选择器隐藏顶部按钮与右键菜单中的保存项，仅做视觉隐藏、保存功能仍可被代码触发；同时回顾了通过 ecode SDK 复写 WeaReqTop 等组件属性来过滤按钮的旧方案，因其引发连锁 BUG 已不建议使用，供 EC9 二次开发人员参考。",
      "llmSummary": "针对泛微 Ecology EC9 流程保存按钮无法在后台直接关闭的需求，文章给出隐藏该按钮的方案演变：推荐做法是借助 CSS 的 :has 选择器隐藏顶部按钮与右键菜单中的保存项，仅做视觉隐藏、保存功能仍可被代码触发；同时回顾了通过 ecode SDK 复写 WeaReqTop 等组件属性来过滤按钮的旧方案，因其引发连锁 BUG 已不建议使用，供 EC9 二次开发人员参考。",
      "url": "https://blog.oneszhang.com/2023/06/26/ecode1/",
      "pubDate": "2023-06-26T10:29:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/06/26/ecode1.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/06/19/35/",
      "title": "[泛微 Ecology9] Html模板样式-碧蓝晴空By丸子",
      "description": "面向泛微e-cology二次开发，作者参考契约锁流程界面风格，制作并发布了Html模板样式碧蓝晴空V1，适用于高级模式下的流程模板美化。模板包含分组标题色块、字段缩进与行高配色等调整，并附有下载链接，作者也欢迎使用者反馈以共同改进。",
      "llmSummary": "面向泛微e-cology二次开发，作者参考契约锁流程界面风格，制作并发布了Html模板样式碧蓝晴空V1，适用于高级模式下的流程模板美化。模板包含分组标题色块、字段缩进与行高配色等调整，并附有下载链接，作者也欢迎使用者反馈以共同改进。",
      "url": "https://blog.oneszhang.com/2023/06/19/35/",
      "pubDate": "2023-06-19T10:12:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/06/19/35.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/06/15/34/",
      "title": "[泛微 Ecology9] 流程表单前端JS-AI生成之需求描述示例",
      "description": "面向泛微E9流程表单前端JS的AI生成场景，文章用明细字段赋值主表为例，对比模糊提问与带字段标识、触发事件的精确描述，展示后者能生成更贴合需求的代码。结论是向AI提需求时应尽量使用程序语言化、明确字段和事件，以提升生成效果。",
      "llmSummary": "面向泛微E9流程表单前端JS的AI生成场景，文章用明细字段赋值主表为例，对比模糊提问与带字段标识、触发事件的精确描述，展示后者能生成更贴合需求的代码。结论是向AI提需求时应尽量使用程序语言化、明确字段和事件，以提升生成效果。",
      "url": "https://blog.oneszhang.com/2023/06/15/34/",
      "pubDate": "2023-06-15T01:36:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/06/15/34.md"
    },
    {
      "id": "https://blog.oneszhang.com/2023/01/04/gravatar/",
      "title": "解决Typecho无法显示Gravatar头像的问题",
      "description": "针对 Gravatar 在国内被 DNS 污染、导致 Typecho 头像无法显示或加载缓慢的问题，可通过将默认头像源替换为第三方镜像来解决。推荐修改博客根目录的配置文件来指定镜像地址，也可直接修改程序源码中的头像地址；文中列出多个可用镜像，并提到 cravatar 支持 QQ 头像。适用于受此问题困扰的 Typecho 站长。",
      "llmSummary": "针对 Gravatar 在国内被 DNS 污染、导致 Typecho 头像无法显示或加载缓慢的问题，可通过将默认头像源替换为第三方镜像来解决。推荐修改博客根目录的配置文件来指定镜像地址，也可直接修改程序源码中的头像地址；文中列出多个可用镜像，并提到 cravatar 支持 QQ 头像。适用于受此问题困扰的 Typecho 站长。",
      "url": "https://blog.oneszhang.com/2023/01/04/gravatar/",
      "pubDate": "2023-01-04T11:04:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2023/01/04/gravatar.md"
    },
    {
      "id": "https://blog.oneszhang.com/2022/12/08/12306/",
      "title": "关于12306火车票订票时选择卧铺票上中下铺位的方法",
      "description": "这篇文章介绍在 12306 官网通过浏览器开发者工具修改卧铺席别下拉框代码，从而自行选择上中下铺的操作方法，需在电脑端先选好乘车人再粘贴代码。作者称经六次测试均符合预期，但文末提示该方法已于 2023 年 12 月失效，仅供读者参考甄别。",
      "llmSummary": "这篇文章介绍在 12306 官网通过浏览器开发者工具修改卧铺席别下拉框代码，从而自行选择上中下铺的操作方法，需在电脑端先选好乘车人再粘贴代码。作者称经六次测试均符合预期，但文末提示该方法已于 2023 年 12 月失效，仅供读者参考甄别。",
      "url": "https://blog.oneszhang.com/2022/12/08/12306/",
      "pubDate": "2022-12-08T11:12:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2022/12/08/12306.md"
    },
    {
      "id": "https://blog.oneszhang.com/2021/06/29/16/",
      "title": "Windows 11 发布首个预览版！有内味了！",
      "description": "作者记录收到 Windows 11 首个预览版推送后，为满足 TPM 等升级条件，用检查工具检测并进 BIOS 调整配置，最终顺利完成更新。更新后体验流畅顺滑，与泄露版 21996.1 相比进步明显，并提醒读者对照官方最低配置确认能否升级。",
      "llmSummary": "作者记录收到 Windows 11 首个预览版推送后，为满足 TPM 等升级条件，用检查工具检测并进 BIOS 调整配置，最终顺利完成更新。更新后体验流畅顺滑，与泄露版 21996.1 相比进步明显，并提醒读者对照官方最低配置确认能否升级。",
      "url": "https://blog.oneszhang.com/2021/06/29/16/",
      "pubDate": "2021-06-29T09:48:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2021/06/29/16.md"
    },
    {
      "id": "https://blog.oneszhang.com/2019/06/28/4/",
      "title": "WIN10数字权利激活工具HWIDGen",
      "description": "HWIDGen 是一款 Windows 10 数字权利激活工具，无需产品密钥即可永久激活；操作时在软件右上角选择 HWID 模式并点击 START，等待提示成功即可。激活前不能关闭系统更新，否则会失败；若失败可改用 KMS38 方式，仍不行则建议重装系统。",
      "llmSummary": "HWIDGen 是一款 Windows 10 数字权利激活工具，无需产品密钥即可永久激活；操作时在软件右上角选择 HWID 模式并点击 START，等待提示成功即可。激活前不能关闭系统更新，否则会失败；若失败可改用 KMS38 方式，仍不行则建议重装系统。",
      "url": "https://blog.oneszhang.com/2019/06/28/4/",
      "pubDate": "2019-06-28T15:04:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2019/06/28/4.md"
    },
    {
      "id": "https://blog.oneszhang.com/2019/06/02/3/",
      "title": "Markdown基础语法（自用）",
      "description": "作者为适应博客写作整理了一份 Markdown 基础语法笔记，涵盖标题、文字样式、引用、删除线、脚注、列表、表格、图片链接及行内与多行代码等常用写法，并提醒特殊符号后需加空格才能生效。适合刚开始用 Markdown 写博客的读者参考，便于快速上手。",
      "llmSummary": "作者为适应博客写作整理了一份 Markdown 基础语法笔记，涵盖标题、文字样式、引用、删除线、脚注、列表、表格、图片链接及行内与多行代码等常用写法，并提醒特殊符号后需加空格才能生效。适合刚开始用 Markdown 写博客的读者参考，便于快速上手。",
      "url": "https://blog.oneszhang.com/2019/06/02/3/",
      "pubDate": "2019-06-02T14:22:00.000Z",
      "tags": [],
      "markdownUrl": "https://blog.oneszhang.com/2019/06/02/3.md"
    }
  ]
}
