0.0.50 • Published 12 months ago

@portalx/core v0.0.50

Weekly downloads
-
License
MIT
Repository
-
Last release
12 months ago

@portalx/core 说明文档

1. 状态管理

说明

  • 主动调用

    • 使用方式和使用【函数】一样,获取的是调用的那个时间的 state
    • 可以使用在任意的 js 文件中(js、jsx、ts、tsx)
    const { menuTree, menuList, getMenu } = useStoreMenu.getState();
  • 被动监听

    • 使用方式和使用【useSelector】一样,数据发生变化时,强制更新组件
    • 只能使用在组件中
    const menuTree = useStoreMenu((store) => store.menuTree);
    ...
    const getMenu = useStoreMenu((store) => store.getMenu);

1.1 Menu

  • 数据结构

    // 后端返回的菜单原始数据
    type IRawMenuAttr = {
      // 通用
      iconUrl?: string; // 菜单图标
      partyId: number; // key值
      partyName: string; // 菜单名称
      portalId: number;
      seq: number; // 同层级的排序
      state: CommonStateEnum;
      stateDate: string;
      type: MenuType; // 菜单类型
      // 叶子菜单独有
      menuType?: MenuOpenType; // 菜单打开类型
      parentId?: number; // 父级菜单id
      parentName?: string; // 父级菜单name
      privCode?: string; // code码,用于生成path
      url?: string;
    };
    // 菜单属性
    type IMenuAttr = IRawMenuAttr & {
      path?: string;
      name: string;
      children?: IMenuAttr[];
      idPath: Array<number>; // 从父级开始的菜单id列表(有层级顺序)
      namePath: Array<string>; // 从父级开始的菜单name列表(有层级顺序)
    };
  • 【数据】menuTree

    Array<IMenuAttr>; // 当前菜单树
  • 【数据】menuList
    Array<IMenuAttr>; // 当前菜单列表,平铺
  • 【函数】generateMenuTree
    // 生成菜单树,并进行部分数据填充数据填充,包含children列表
    (rawMenuList: Array<IRawMenuAttr>) => Array<IMenuAttr>;
  • 【函数】generateMenuList
    // 根据菜单树,生成扁平化菜单列表,不包含children列表
    (menuTree: Array<IMenuAttr>) => Array<IMenuAttr>;
  • 【函数】init
    // 初始化
    () => Promise<void>;
  • 【函数】getMenu

    // 获取菜单的参数
    type IGetMenuOpt = {
      menuId?: number;
      menuUrl?: string;
      path?: string;
      privCode?: string;
    };
    ...
    // 根据参数或对应的菜单
    (opt: IGetMenuOpt) => IMenuAttr | undefined;
  • 【函数】getRootMenuNode

    // 获取根节点
    () => IMenuAttr;
  • 【函数】getFirstMenuLeaf

    // 获取第一个菜单叶子节点
    () => IMenuAttr | undefined;

1.2 MenuTab

  • 数据结构

    // 菜单Tab结构
    type IMenuTabAttr = {
      menuId: number | string; // 菜单ID,一般注册的菜单是number,临时菜单是string
      menuUrl: string; // 菜单url,截取完参数之后的纯净url
      menuType: MenuOpenType; // 菜单类型
      menuName: string | ReactNode; // 菜单名称
      path: string; // 菜单显示的path
      privCode: string; // 菜单唯一码,若为临时菜单,则取menuId一致
      state?: IMenuTabStateAttr; // 菜单携带的路由中的state内容
      comprivList?: Array<IComprivAttr>; // 菜单上的不可见组件列表
      closable?: boolean; // 可否关闭
    };
  • 【数据】menuTabMap

    Map<string, IMenuTabAttr>; // 当前已打开的菜单tab的Map,key为path
  • 【数据】activeMenuId

    string | number; // 当前激活菜单tab的Id
  • 【数据】activePath

    string; // 当前激活的菜单tab的path
  • 【数据】homeMenuTab

    IMenuTabAttr; // 首页菜单tab
  • 【数据】removedPathList

    Array<string>; // 已被删除的菜单tab的path
  • 【函数】init

    type IRootMenuAttr = {
    menuUrl?: string;
    menuType?: MenuOpenType;
    };
    ...
    // 初始化,设置首页,并挂载兼容函数
    (opt?: IRootMenuAttr) => void;
  • 【函数】updateMenuTab

    // 更新目标菜单tab
    (targetMenu: IMenuTabAttr) => void;
  • 【函数】updateActivePath

    // 更新当前激活的菜单tab的path
    (path: string) => void;
  • 【函数】updateRemovedPathList

    // 更新已被删除的菜单tab的path的列表
    (pathList: Array<string>) => void;
  • 【函数】findExistMenuTab

    type ISearchMenuAttr = {
    menuId?: number | string | null;
    menuUrl?: string; // 菜单原始url
    menuType?: MenuOpenType;
    menuName?: string;
    path?: string; // 前端路由
    params?: Record<string, any>;
    urlSearchParams?: string;
    };
    ...
    // 查找缓存中是否存在对应的菜单tab; exact 是否精确匹配
    // 有path,直接返回对应的path
    // 没有或者没有找到,则根据menuId去查找
    // 还没有找到,则根据 menuUrl、menuType和menuName三者来找(exact模式)或者根据menuUrl来查找
    // 最后若是 exact 模式,则会更新路由上的 state
    (searchOpt: ISearchMenuAttr, exact?: boolean) => IMenuTabAttr | undefined;
  • 【函数】createMenuTab

    // 根据参数生成菜单tab对象 (精确匹配模式)
    (opt: ISearchMenuAttr) => IMenuTabAttr | undefined;
  • 【函数】openMenuTab

    // 打开对应的菜单tab (精确匹配模式)
    // 若成功打开,则自动将新打开的菜单作为激活态菜单tab
    (opt: ISearchMenuAttr) => void;
  • 【函数】closeMenuTab

    // 删除对应的菜单tab (非精确匹配模式)
    // 删除成功后,若激活态菜单tab未删除,则激活态菜单tab的path不变
    // 删除成功后,若激活态菜单tab已删除,则激活态菜单tab的path变为之前的tab所在的下标位置的菜单tab的path,或者最后一个菜单tab的path
    (removeOptList: Array<ISearchMenuAttr>) => void;
  • 【函数】retainMenuTab

    // 保留对应的菜单tab,其余都删除 (内部调用closeMenuTab)
    (retainOptList: Array<ISearchMenuAttr>) => void;

2. 通用函数

2.1 api 拦截器

  • 请求拦截器
    • 自动添加部分头
      • 【X-Requested-With】避免后端不识别 ajax
      • 【csrf token】
      • 【数字签名】(具体参照 @whalecloud/foundation)
    • 自动添加【时间戳】
  • 响应拦截器
    • 返回通用结构体
    type ICommonRes<T = any> = {
      success?: boolean; // 是否成功
      data: T; // 实际返回结构
      stack?: string;
      message?: string; // 错误信息
      code?: number; // 错误码
      resultCode?: string;
      resultObject?: object;
      resultMsg?: string;
    };
    • 显示通用错误 notication
    • 特殊错误自动【重定向】
0.0.43

1 year ago

0.0.44

1 year ago

0.0.45

1 year ago

0.0.46

1 year ago

0.0.47

1 year ago

0.0.50

12 months ago

0.0.48

12 months ago

0.0.49

12 months ago

0.0.42

1 year ago

0.0.40

1 year ago

0.0.41

1 year ago

0.0.39

1 year ago

0.0.37

1 year ago

0.0.38

1 year ago

0.0.36

1 year ago

0.0.35

1 year ago

0.0.34

1 year ago

0.0.33

1 year ago

0.0.32

1 year ago

0.0.30

1 year ago

0.0.31

1 year ago

0.0.28

1 year ago

0.0.29

1 year ago

0.0.27

1 year ago

0.0.26

2 years ago

0.0.25

2 years ago

0.0.24

2 years ago

0.0.23

2 years ago

0.0.22

2 years ago

0.0.21

2 years ago

0.0.20

2 years ago

0.0.19

2 years ago

0.0.18

2 years ago

0.0.17

2 years ago

0.0.16

2 years ago

0.0.15

2 years ago

0.0.14

2 years ago

0.0.13

2 years ago

0.0.13-alpha.0

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago