跳过正文
  1. 工作笔记/
  2. E9 Ecode/

去掉组织结构 Tab

·578 字·3 分钟
E9 Ecode 代码片段
作者
molefool
目录

版本一:排除管理端
#

(function () {
  var ORG_TAB_NAME = '组织结构';

  var needHandleType = function (type) {
    return String(type) === '1' || String(type) === '17';
  };

  var removeOrgTab = function (tabs) {
    if (!Array.isArray(tabs)) return tabs || [];
    return tabs.filter(function (tab) {
      return tab && tab.name !== ORG_TAB_NAME;
    });
  };

  var isManagePage = function () {
    var url = (window.location.pathname + window.location.search + window.location.hash).toLowerCase();

    return (
      url.indexOf('/ecode') > -1 ||
      url.indexOf('/spa/hrm/engine') > -1 ||
      url.indexOf('/spa/workflow/engine') > -1 ||
      url.indexOf('/spa/portal') > -1 ||
      url.indexOf('#/main/system') > -1 ||
      url.indexOf('#/main/hrmengine') > -1 ||
      url.indexOf('#/main/workflowengine') > -1 ||
      url.indexOf('#/main/portalengine') > -1 ||
      url.indexOf('#/main/formmode') > -1
    );
  };

  var shouldOverwrite = function () {
    // 管理端、ecode开发端不生效
    if (isManagePage()) return false;

    return true;
  };

  var handleBrowserProps = function (props) {
    var nextProps = Object.assign({}, props || {});

    if (!shouldOverwrite()) {
      return nextProps;
    }

    if (needHandleType(nextProps.type)) {
      nextProps.tabs = removeOrgTab(nextProps.tabs);
      nextProps.noTooltip = true;
    }

    if (nextProps.selectLinkageDatas && typeof nextProps.selectLinkageDatas === 'object') {
      var nextSelectLinkageDatas = {};

      Object.keys(nextProps.selectLinkageDatas).forEach(function (key) {
        var item = nextProps.selectLinkageDatas[key] || {};
        var browserConditionParam = Object.assign({}, item.browserConditionParam || {});

        if (needHandleType(browserConditionParam.type)) {
          browserConditionParam.tabs = removeOrgTab(browserConditionParam.tabs);
          browserConditionParam.noTooltip = true;
        }

        nextSelectLinkageDatas[key] = Object.assign({}, item, {
          browserConditionParam: browserConditionParam
        });
      });

      nextProps.selectLinkageDatas = nextSelectLinkageDatas;
    }

    return nextProps;
  };

  ecodeSDK.overwritePropsFnQueueMapSet('WeaBrowser', {
    fn: function (newProps, name) {
      return handleBrowserProps(newProps);
    },
    order: 1,
    desc: 'PC端人力浏览按钮去掉组织结构tab,管理端不生效'
  });

  ecodeSDK.overwritePropsFnQueueMapSet('WeaSelectGroup', {
    fn: function (newProps, name) {
      return handleBrowserProps(newProps);
    },
    order: 1,
    desc: 'PC端联动浏览按钮去掉组织结构tab,管理端不生效'
  });

  var overwriteMobileBrowser = function (comName) {
    if (ecodeSDK.overwriteMobilePropsFnQueueMapSet) {
      ecodeSDK.overwriteMobilePropsFnQueueMapSet(comName, {
        fn: function (newProps) {
          return handleBrowserProps(newProps);
        },
        order: 1,
        desc: '移动端浏览按钮去掉组织结构tab,管理端不生效'
      });
      return;
    }

    if (ecodeSDK.overwriteMobileClassFnQueueMapSet) {
      ecodeSDK.overwriteMobileClassFnQueueMapSet(comName, {
        fn: function (Com, newProps) {
          return {
            com: Com,
            props: handleBrowserProps(newProps)
          };
        },
        order: 1,
        desc: '移动端浏览按钮去掉组织结构tab,管理端不生效'
      });
    }
  };

  overwriteMobileBrowser('BrowserHrm');
  overwriteMobileBrowser('Browser');
})();

版本二:仅流程前端启用
#

(function () {
  var ORG_TAB_NAME = '组织结构';

  var needHandleType = function (type) {
    return String(type) === '1' || String(type) === '17';
  };

  var removeOrgTab = function (tabs) {
    if (!Array.isArray(tabs)) return tabs || [];
    return tabs.filter(function (tab) {
      return tab && tab.name !== ORG_TAB_NAME;
    });
  };

  var shouldOverwrite = function () {
    var pathname = window.location.pathname.toLowerCase();

    // 仅在 /spa/workflow/ 开头的页面启用,其他页面全部关闭
    return pathname.indexOf('/spa/workflow/') === 0;
  };

  var handleBrowserProps = function (props) {
    var nextProps = Object.assign({}, props || {});

    if (!shouldOverwrite()) {
      return nextProps;
    }

    if (needHandleType(nextProps.type)) {
      nextProps.tabs = removeOrgTab(nextProps.tabs);
      nextProps.noTooltip = true;
    }

    if (nextProps.selectLinkageDatas && typeof nextProps.selectLinkageDatas === 'object') {
      var nextSelectLinkageDatas = {};

      Object.keys(nextProps.selectLinkageDatas).forEach(function (key) {
        var item = nextProps.selectLinkageDatas[key] || {};
        var browserConditionParam = Object.assign({}, item.browserConditionParam || {});

        if (needHandleType(browserConditionParam.type)) {
          browserConditionParam.tabs = removeOrgTab(browserConditionParam.tabs);
          browserConditionParam.noTooltip = true;
        }

        nextSelectLinkageDatas[key] = Object.assign({}, item, {
          browserConditionParam: browserConditionParam
        });
      });

      nextProps.selectLinkageDatas = nextSelectLinkageDatas;
    }

    return nextProps;
  };

  ecodeSDK.overwritePropsFnQueueMapSet('WeaBrowser', {
    fn: function (newProps, name) {
      return handleBrowserProps(newProps);
    },
    order: 1,
    desc: 'PC端人力浏览按钮去掉组织结构tab,仅流程前端启用'
  });

  ecodeSDK.overwritePropsFnQueueMapSet('WeaSelectGroup', {
    fn: function (newProps, name) {
      return handleBrowserProps(newProps);
    },
    order: 1,
    desc: 'PC端联动浏览按钮去掉组织结构tab,仅流程前端启用'
  });

  var overwriteMobileBrowser = function (comName) {
    if (ecodeSDK.overwriteMobilePropsFnQueueMapSet) {
      ecodeSDK.overwriteMobilePropsFnQueueMapSet(comName, {
        fn: function (newProps) {
          return handleBrowserProps(newProps);
        },
        order: 1,
        desc: '移动端浏览按钮去掉组织结构tab,仅流程前端启用'
      });
      return;
    }

    if (ecodeSDK.overwriteMobileClassFnQueueMapSet) {
      ecodeSDK.overwriteMobileClassFnQueueMapSet(comName, {
        fn: function (Com, newProps) {
          return {
            com: Com,
            props: handleBrowserProps(newProps)
          };
        },
        order: 1,
        desc: '移动端浏览按钮去掉组织结构tab,仅流程前端启用'
      });
    }
  };

  overwriteMobileBrowser('BrowserHrm');
  overwriteMobileBrowser('Browser');
})();

作用
#

  • 只处理 type117 的浏览按钮。
  • tabs 中过滤名称为 组织结构 的 Tab。
  • 同步处理 selectLinkageDatas 里的联动浏览按钮参数。
  • 版本一通过 URL 判断排除管理端、Ecode 开发端和各类引擎配置页。
  • 版本二只在路径以 /spa/workflow/ 开头的流程前端页面生效。
  • PC 端覆盖 WeaBrowserWeaSelectGroup;移动端覆盖 BrowserHrmBrowser

配置调整
#

  • 修改 ORG_TAB_NAME 可以改要隐藏的 Tab 名称。
  • 修改 needHandleType 可以调整生效的浏览按钮类型。
  • 版本一修改 isManagePage 可以调整不生效的页面范围。
  • 版本二修改 shouldOverwrite 里的路径判断可以调整生效页面范围。
  • 修改 order 可以控制与其他 Ecode 覆盖逻辑的执行顺序。
  • 只需要 PC 或移动端时,删除对应的注册代码即可。

参考链接
#

相关文章