在 SpreadJS 里新增右键菜单,把业务动作放到用户手边

简介: 本Demo演示如何在SpreadJS默认右键菜单中动态追加/过滤菜单项(如“提交当前行”),通过`onOpenMenu`钩子与`commandManager.register`解耦UI与逻辑,支持基于选区、行列、状态的上下文操作,提升后台系统交互精准性与可维护性。

表格应用里,很多操作不适合永远摆在工具栏上。它们只在某个单元格、某一行或某个状态下才有意义,比如“提交当前行”“查看审批记录”“插入业务明细”“复制为系统格式”。Spread新增右键菜单 这个 demo 演示了一个很基础但很关键的扩展点:在 SpreadJS 默认右键菜单打开前,追加自己的菜单项,并把它绑定到自定义命令。

为什么这个细节重要

右键菜单的优势是上下文明确。用户在哪里点,系统就知道他大概率想处理哪里。对产品经理来说,这能减少页面按钮数量,让工具栏保持安静;对开发者来说,菜单项可以按选区、行列、锁定状态、数据类型动态出现,避免用户点到不该点的操作。

demo 中有两个动作:一是在菜单里追加“自定义右键菜单”和 yustest,二是当当前选区位于第二行时清空菜单项。后者看起来简单,却展示了权限和状态控制的雏形:同一个右键入口,不同位置可以有不同结果。

这类能力对后台系统很常见。表格行可能代表订单、合同、人员或设备,不同状态下可执行的动作不同。与其让用户先选中数据再去远处找按钮,不如把可用动作放在他正在查看的位置。

SpreadJS 的实现思路

实现分两步。第一步保存原来的 spread.contextMenu.onOpenMenu,再重写它;第二步用 spread.commandManager().register 注册菜单项对应的命令。这样菜单 UI 和业务动作不会混在一起。

let oldF = spread.contextMenu.onOpenMenu;

spread.contextMenu.onOpenMenu = function (menuData, itemsDataForShown, hitInfo, spread) {
  itemsDataForShown.push({
    text: "自定义右键菜单",
    name: "customContextMenu",
    command: "customCommand"
  });

  let sel = spread.getActiveSheet().getSelections()[0];
  if (sel.row === 1) {
    itemsDataForShown.splice(0, itemsDataForShown.length);
  }
  oldF.apply(this, arguments);
};

itemsDataForShown 是即将展示的菜单项数组,向里面 push 就能追加入口;hitInfo 可用于判断右键发生的位置;getSelections()[0] 则拿到当前选择区域。demo 里用 splice 清空菜单,实际项目也可以只删除某些菜单项,或根据单元格值决定是否显示。

spread.commandManager().register("customCommand", {
  canUndo: false,
  execute: function (spread, options) {
    console.log(arguments);
  }
});

可以扩展到哪些场景

这个模式可以用于行级审批、单元格批注、批量插入、查看修改记录、跳转详情页、复制特殊格式、触发后端流程。它也适合做“保护状态下仍允许部分操作”的精细控制:比如锁定单元格不能编辑,但仍允许查看说明或提交反馈。

需要注意,菜单只是入口,真正的数据修改最好放在命令里,并按需要支持撤销。demo 的 canUndo: false 很适合日志、弹窗、跳转这类动作;如果命令会改表格数据,建议结合 SpreadJS 的事务命令设计撤销和重做。

另外,菜单文本最好和业务语言一致,不要只写“操作一”“处理”。右键菜单出现的时间很短,命名越具体,用户越不需要猜。
图标和分隔线也应服务于识别,而不是装饰。

给开发者的关键词

SpreadJS、ContextMenu、contextMenu.onOpenMenu、itemsDataForShown、hitInfo、getSelections、commandManager().register、canUndo、右键菜单扩展、JavaScript 电子表格控件。

小结

Spread新增右键菜单 展示的是把表格操作接到业务里的入口设计。它不需要重做整套菜单系统,只要在默认菜单打开前追加或过滤项,再让命令管理器承接动作,就能让 SpreadJS 的右键交互更贴近业务流程。

相关文章
|
6天前
|
云安全 人工智能 运维
当攻击全面Agent化,你的安全防御能否跟上AI Speed?
多起客户侧AK泄露事件应急的真实观察
1294 6
|
4天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
|
9天前
|
存储 人工智能 安全
千问办公官网入口网页版登录:qwenwork.cn 注册送2000积分、登录送100积分
阿里云千问办公(QwenWork)是AI智能工作平台,支持一句话生成PPT、表格、网页、视频及数据分析。个人免费版送2000积分+每日登录赠100分,含1GB存储、5个发布页;企业版198元/席/月起。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
|
29天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9875 33
|
15天前
|
存储 人工智能 并行计算
大模型本地部署终端选型方法论:以 Qwen3.8-27B 为例的四档分层完整流程
本文提出一套大模型本地部署终端选型方法论:定约束、定档位、定框架、定参数四步决策法,配合入门、主力、质量、无损四档分层模型。以 Qwen3.8-27B 实测数据为例,逐环节解读显存、带宽、存储、散热、系统、预算等要素,给出面向不同预算的优选方案、决策自查清单与市场观察框架。文末前瞻 AI 笔记本的 CPU+GPU 与统一内存两条路线,论证四步决策法在新品类上的延续性。
|
6天前
|
Web App开发 人工智能 JavaScript
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
REA(Reverse Engineer Anything)是近期爆火的开源AI逆向工具,4月发布,1个月内斩获15万+ Star。它让AI Agent无需源码即可分析二进制、APK、JS/Electron、HAR包等17类目标,自动反编译、生成可运行代码,并强制返回带证据与局限的结论。全本地执行,MIT协议,支持Hopper/Ghidra/IDA等引擎,一行命令即可上手。
705 2
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
|
4天前
|
人工智能 开发者
Qoder CN 大使计划正式开启|无限创造,等你一起
全年免费积分、优先内测、活动支持与更多共创机会,邀请用 Qoder 把想法变成现实的你。
472 0
|
14天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型深度拆解:原理解读、实战测评与保姆级落地教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为**System One Model(系统一模型)**,对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
996 1