YApi 接口多级目录改造

render(){
    ...
    ...

const loop = data => data.map((item) => {
  // if (item.list && item.list.length >= 0) {
  if (item.itemType === 'cat') { // 一级目录
    return (
      <TreeNode 
        title={
          <div
            className="container-title"
            onMouseEnter={() => this.enterItem(item._id)}
            onMouseLeave={this.leaveItem}
          >
            <Link
              className="interface-item"
              onClick={e => {
                e.stopPropagation();
                this.changeExpands();
              }}
              to={'/project/' + matchParams.id + '/interface/api/cat_' + item._id}
            >
              <Icon type="folder-open" style={{ marginRight: 5 }} />
              {item.name || item.title}
            </Link>
            <div className="btns">
              <Tooltip title="删除分类">
                <Icon
                  type="delete"
                  className="interface-delete-icon"
                  onClick={e => {
                    e.stopPropagation();
                    this.showDelCatConfirm(item._id);
                  }}
                  style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                />
              </Tooltip>
              <Tooltip title="修改分类">
                <Icon
                  type="edit"
                  className="interface-delete-icon"
                  style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                  onClick={e => {
                    e.stopPropagation();
                    this.changeModal('change_cat_modal_visible', true);
                    this.setState({
                      curCatdata: item
                    });
                  }}
                />
              </Tooltip>
              <Tooltip title="添加接口">
                <Icon
                  type="plus"
                  className="interface-delete-icon"
                  style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                  onClick={e => {
                    e.stopPropagation();
                    this.changeModal('visible', true);
                    this.setState({
                      curCatid: item._id,
                      parentid: null
                    });
                  }}
                />
              </Tooltip>
              <Tooltip title="创建目录">
                <Icon
                  type="folder"
                  className="interface-delete-icon"
                  style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                  onClick={e => {
                    e.stopPropagation();
                    this.changeModal('add_folder_modal_visible', true);
                    this.setState({
                      curCatid: item._id,
                      parentid: null
                    });
                  }}
                />
              </Tooltip>
              <Tooltip title="创建文档">
                <Icon
                  type="file"
                  className="interface-delete-icon"
                  style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                  onClick={e => {
                    e.stopPropagation();
                    this.changeModal('add_file_modal_visible', true);
                    this.setState({
                      curCatid: item._id,
                      parentid: null
                    });
                  }}
                />
              </Tooltip>
            </div>
          </div>
        }
        key={'cat_' + item._id}
        className={`interface-item-nav1`} 
        isLeaf={true}
        autoExpandParent
      >
        {loop(item.list)}
      </TreeNode>)
  } else if(item.record_type === 2) { //文件夹类型
    return (
      <TreeNode
        className={`interface-item-nav2`}
        title={
          <div
            className="container-title"
            onMouseEnter={() => this.enterItem(item._id)}
            onMouseLeave={this.leaveItem}
          >
            <div className="interface-item" onClick={e => e.stopPropagation()}>
              <Icon type="folder-open" style={{ marginRight: 5 }} />
              {item.title || item.name}
            </div>
            <div className="btns">
              <Tooltip title="删除">
                <Icon
                  type="delete"
                  className="interface-delete-icon"
                  onClick={e => {
                    e.stopPropagation();
                    this.showConfirm(item);
                  }}
                  style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                />
              </Tooltip>
              <Tooltip title="修改目录">
                <Icon
                  type="edit"
                  className="interface-delete-icon"
                  onClick={e => {
                    e.stopPropagation();
                    this.changeModal('change_dir_modal_visible', true);
                    this.setState({
                      curDirData: item
                    });
                  }}
                  style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                />
              </Tooltip>
              <Tooltip title="创建目录">
                <Icon
                  type="folder"
                  className="interface-delete-icon"
                  onClick={e => {
                    e.stopPropagation();
                    this.changeModal('add_folder_modal_visible', true);
                    this.setState({
                      curCatid: item.catid,
                      curParentId: item._id
                    });
                  }}
                  style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                />
              </Tooltip>
              <Tooltip title="创建接口">
                <Icon
                  type="plus"
                  className="interface-delete-icon"
                  onClick={e => {
                    e.stopPropagation();
                    this.changeModal('visible', true);
                    this.setState({
                      curCatid: item.catid,
                      curParentId: item._id
                    });
                  }}
                  style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                />
              </Tooltip>
              <Tooltip title="创建文档">
                <Icon
                  type="file"
                  className="interface-delete-icon"
                  onClick={e => {
                    e.stopPropagation();
                    this.changeModal('add_file_modal_visible', true);
                    this.setState({
                      curCatid: item.catid,
                      curParentId: item._id
                    });
                  }}
                  style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                />
              </Tooltip>
            </div>
          </div>
        }
        key={'cat_' + item._id}
        isLeaf={true}
        autoExpandParent
      >
        {item.list && loop(item.list)}
      </TreeNode>)
  } else {
    return ( //文档 api类型
      <TreeNode
        className={`interface-item-nav3`}
        title={
          <div
            className="container-title"
            onMouseEnter={() => this.enterItem(item._id)}
            onMouseLeave={this.leaveItem}
          >
            <Link
              className="interface-item"
              onClick={e => {
                e.stopPropagation();
                this.changeExpands();
              }}
              to={'/project/' + matchParams.id + '/interface/api/' + item._id}
            >
              {item.record_type == 0 ? (<Icon type={item.interface_type === 'http' ? 'api' : 'code'} style={{ marginRight: 5 }} />) : ('')}
              {item.record_type == 1 ? (<Icon type="file-text" style={{ marginRight: 5 }} />) : ('')}
              {item.title || item.name}
            </Link>
            <div className="btns">
              <Tooltip title="删除">
                <Icon
                  type="delete"
                  className="interface-delete-icon"
                  onClick={e => {
                    e.stopPropagation();
                    this.showConfirm(item);
                  }}
                  style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                />
              </Tooltip>
              {item.record_type === 0 ? (
                <Tooltip title="复制接口">
                  <Icon
                    type="copy"
                    className="interface-delete-icon"
                    onClick={e => {
                      e.stopPropagation();
                      this.copyInterface(item._id);
                    }}
                    style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }}
                  />
                </Tooltip>
                ) : ('')
              }
            </div>
          </div>
        }
        key={'' + item._id}
        isLeaf={true}
        autoExpandParent
      />)
  }

})





return(


。。。




。。。


            <Tree
              className="interface-list"
              defaultExpandedKeys={currentKes.expands}
              defaultSelectedKeys={currentKes.selects}
              //expandedKeys={currentKes.expands}
              selectedKeys={currentKes.selects}
              onSelect={this.onSelect}
              onExpand={this.onExpand}
              draggable
              onDrop={this.onDrop}
              autoExpandParent
            >
              <TreeNode
                className="item-all-interface"
                title={
                  <Link
                    onClick={e => {
                      e.stopPropagation();
                      this.changeExpands();
                    }}
                    to={'/project/' + matchParams.id + '/interface/api'}
                  >
                    <Icon type="folder" style={{ marginRight: 5 }} />
                    全部接口
                  </Link>
                }
                key="root"
              />
              {loop(menuList)}
            </Tree>


)

}



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
感谢您的提问,以下是Yapi接口文档和部署笔记: ## Yapi接口文档 Yapi是一个开源的、高效的、易用的接口管理平台,可以帮助团队更好地协作开发、测试和部署。它提供了丰富的接口管理、文档生成和Mock数据等功能,可以大大提升团队的开发效率和项目质量。 Yapi支持多种类型的接口,包括RESTful API、GraphQL API、RPC API等,可以满足不同的业务需求。同时,Yapi还支持多人协作、权限管理、版本控制等功能,可以让团队更加高效地进行接口开发和测试。 在使用Yapi时,您可以通过创建项目、添加接口、编写文档、生成Mock数据等方式来管理接口。Yapi还提供了丰富的插件和扩展,可以让您更加灵活地使用和定制Yapi。 ## Yapi部署笔记 Yapi的部署比较简单,您只需要按照以下步骤即可完成: 1. 安装Node.js和MongoDB Yapi是基于Node.js和MongoDB开发的,因此您需要先安装它们。您可以到官网下载Node.js和MongoDB的安装包,并按照官方文档进行安装。 2. 下载Yapi源码 您可以从Yapi的官方Github仓库中下载源码: ``` git clone https://github.com/YMFE/yapi.git vendors/yapi ``` 3. 安装依赖 进入Yapi的源码目录,执行以下命令安装依赖: ``` cd vendors/yapi npm install --production ``` 4. 配置Yapi 在Yapi的源码目录中,有一个`config.json`文件,它包含了Yapi的各种配置信息,您可以根据自己的需求进行修改。其中,重要的配置项包括: ``` { "port": "3000", // Yapi服务的端口号 "adminAccount": { // 管理员账号信息 "username": "admin", "password": "ymfe.org" }, "db": { // MongoDB的配置信息 "servername": "127.0.0.1", "port": 27017, "DATABASE": "yapi" } } ``` 5. 启动Yapi 在Yapi的源码目录中,执行以下命令启动Yapi: ``` node server/app.js ``` 然后,您就可以在浏览器中访问`http://localhost:3000`来使用Yapi了。 以上就是Yapi的简单部署笔记,希望对您有所帮助。如果您想了解更多关于Yapi的内容,可以参考官方文档:https://hellosean1025.github.io/yapi/。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值