请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

为谔谔
金牌服务用户   /  发表于:2025-3-4 11:38  /   查看:87  /  回复:6
1金币
需求就是右键时有个插入{输入框}行,让用户自己输入行,效果图如下;

image.png436296996.png

最佳答案

查看完整内容

看代码是一样的,您将自己的demo提供下,我们调研看看是否与框架有关。

6 个回复

倒序浏览
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-3-4 11:38:09
来自 5#
看代码是一样的,您将自己的demo提供下,我们调研看看是否与框架有关。
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-3-4 12:18:56
2#
本帖最后由 Matthew.Xue 于 2025-3-4 12:22 编辑

您好, 可以参考以下两个demo,demo分为有设计器和没有设计器两种,您可以按需参考,链接中有代码:
右键菜单插入指定行数-设计器
右键菜单插入指定行数-Spread
回复 使用道具 举报
为谔谔
金牌服务用户   /  发表于:2025-3-4 13:55:34
3#
image.png761986694.png 使用连接中的demo出不来输入框
回复 使用道具 举报
为谔谔
金牌服务用户   /  发表于:2025-3-4 13:57:15
4#
代码:<gc-spread-sheets-designer :styleInfo="styleInfo" :config="config" @designerInitialized="designerInitialized">
            </gc-spread-sheets-designer>
designerInitialized(designer) {
      this.spread = designer.getWorkbook()
      let spread = designer.getWorkbook()
      let spreadNS = GC.Spread.Sheets;

      let designerConfig = JSON.parse(JSON.stringify(GC.Spread.Sheets.Designer.DefaultConfig));
      designerConfig.commandMap = {
        "insertMutiRows": {
          text: "插入行",
          commandName: "insertMutiRows",
          visibleContext: "ClickRowHeader",
        }

      }
      designerConfig.contextMenu.push("insertMutiRows")
      let commandManager = spread.commandManager();
      var insertRowsByCounts = {
        canUndo: true,
        canExcute: function () {
          console.log(arguments)
        },
        execute: function (spread, options, isUndo) {
          var Commands = GC.Spread.Sheets.Commands;
          if (isUndo) {
            Commands.undoTransaction(spread, options);
            return true;
          } else {
            Commands.startTransaction(spread, options);
            if (options.commandOptions) {
              console.log('在上方插入' + options.commandOptions);
              var sheet = spread.getSheetFromName(options.sheetName);
              sheet.suspendPaint();
              sheet.addRows(options.activeRow, parseInt(options.commandOptions));
              sheet.resumePaint();

            }
            Commands.endTransaction(spread, options);
            return true;
          }
        }
      };
      commandManager.register("insertMutiRows", insertRowsByCounts, null, false, false, false, false);



      var oldCreateMenuItemElement = spread.contextMenu.menuView.createMenuItemElement;
      spread.contextMenu.menuView.createMenuItemElement = function (menuItemData) {
        var self = this;
        var menuItemView = oldCreateMenuItemElement.call(self, menuItemData);
        if (menuItemData.name === "insertMutiRows") {
          var supMenuItemContainer = menuItemView[0];

          var inputBlock = this.createInput();
          var btnupBlock = this.createBtn();

          supMenuItemContainer.appendChild(inputBlock);
          supMenuItemContainer.appendChild(btnupBlock);

        }
        return menuItemView;
      }

      var oldgetCommandOptions = spread.contextMenu.menuView.getCommandOptions;
      spread.contextMenu.menuView.getCommandOptions = function (menuItemData, host, event) {
        if (menuItemData && menuItemData.name === "insertMutiRows") {
          var ele = document.getElementsByClassName("inputBlock")[0]
          return ele.value;
        }
        else {
          return oldgetCommandOptions.apply(this, arguments)
        }
      };
      designer.setConfig(designerConfig)
    },
    createInput() {
      let inputBlock = document.createElement('input');
      inputBlock.type = 'text';
      inputBlock.value = '1';
      inputBlock.className = 'inputBlock';
      inputBlock.style = 'width: 20px';
      inputBlock.setAttribute('gcUIElement', 'gcContextMenu');
      inputBlock.onclick = function (ev) {
        if (ev.target) {
          ev.stopPropagation()
        }
      }
      return inputBlock;
    },
    createBtn() {
      let inputBlock = document.createElement('p');
      inputBlock.innerText = "行";
      inputBlock.className = 'btnBlock';
      inputBlock.style = 'display :inline;margin-left: 10px; ';
      return inputBlock;
    },
回复 使用道具 举报
为谔谔
金牌服务用户   /  发表于:2025-3-4 15:48:15
6#
我找到什么原因了,要先designer.setConfig(designerConfig),再去创建input才行
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-3-4 16:04:17
7#
为谔谔 发表于 2025-3-4 15:48
我找到什么原因了,要先designer.setConfig(designerConfig),再去创建input才行

问题解决了就好,那本帖就先结贴了, 有问题欢迎另开新帖交流。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部