Skip to main content
  1. Work Notes/
  2. E9 Ecode/

Remove Organization Structure Tab

·680 words·4 mins
E9 Ecode Code Snippets
Author
molefool
Table of Contents

Version 1: Exclude Admin Pages
#

(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');
})();

Version 2: Workflow Frontend Only
#

(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');
})();

What It Does
#

  • Handles only browser components whose type is 1 or 17.
  • Removes the tab whose name is 组织结构 from tabs.
  • Applies the same handling to linked browser parameters inside selectLinkageDatas.
  • Version 1 skips admin pages, Ecode development pages, and engine configuration pages by checking the URL.
  • Version 2 runs only when the path starts with /spa/workflow/.
  • Overrides WeaBrowser and WeaSelectGroup on PC, and BrowserHrm and Browser on mobile.

Configuration
#

  • Change ORG_TAB_NAME to hide a different tab name.
  • Change needHandleType to adjust the browser types affected.
  • In version 1, change isManagePage to adjust the pages where the override should not run.
  • In version 2, change the path check inside shouldOverwrite to adjust where the override should run.
  • Change order to control execution order against other Ecode overrides.
  • If only PC or mobile behavior is needed, remove the corresponding registration code.

References
#

Related