mirror of
https://github.com/YMFE/yapi.git
synced 2025-02-23 13:59:28 +08:00
feat: 增加wiki 导出功能
This commit is contained in:
parent
75b0823cda
commit
84f43a54dd
16
a.markdown
16
a.markdown
@ -3,6 +3,22 @@
|
||||
|
||||
|
||||
|
||||
### 公共信息
|
||||
|
||||
sdasda
|
||||
1232312
|
||||
1232131123
|
||||
12121244
|
||||
|
||||
| 9 | 9 | |
|
||||
| --- | --- | --- |
|
||||
| 231312313 | 1212 | |
|
||||
|
||||
123231331321131312313
|
||||
123123
|
||||
313123123123
|
||||
|
||||
|
||||
# %u516C%u5171%u5206%u7C7B1
|
||||
[TOC]
|
||||
|
||||
|
@ -1,5 +1,18 @@
|
||||
import React, { PureComponent as Component } from 'react';
|
||||
import { Upload, Icon, message, Select, Tooltip, Button, Spin, Switch, Modal, Radio, Input } from 'antd';
|
||||
import {
|
||||
Upload,
|
||||
Icon,
|
||||
message,
|
||||
Select,
|
||||
Tooltip,
|
||||
Button,
|
||||
Spin,
|
||||
Switch,
|
||||
Modal,
|
||||
Radio,
|
||||
Input,
|
||||
Checkbox
|
||||
} from 'antd';
|
||||
import PropTypes from 'prop-types';
|
||||
import { connect } from 'react-redux';
|
||||
import './ProjectData.scss';
|
||||
@ -18,13 +31,13 @@ const importDataModule = {};
|
||||
const exportDataModule = {};
|
||||
const HandleImportData = require('common/HandleImportData');
|
||||
|
||||
function handleExportRouteParams(url, value) {
|
||||
function handleExportRouteParams(url, status, isWiki) {
|
||||
if (!url) {
|
||||
return;
|
||||
}
|
||||
let urlObj = URL.parse(url, true),
|
||||
query = {};
|
||||
query = Object.assign(query, urlObj.query, { status: value });
|
||||
query = Object.assign(query, urlObj.query, { status, isWiki });
|
||||
return URL.format({
|
||||
pathname: urlObj.pathname,
|
||||
query
|
||||
@ -61,7 +74,8 @@ class ProjectData extends Component {
|
||||
dataSync: false,
|
||||
exportContent: 'all',
|
||||
isSwaggerUrl: false,
|
||||
swaggerUrl: ''
|
||||
swaggerUrl: '',
|
||||
isWiki: false
|
||||
};
|
||||
}
|
||||
static propTypes = {
|
||||
@ -198,7 +212,8 @@ class ProjectData extends Component {
|
||||
|
||||
handleExportType = val => {
|
||||
this.setState({
|
||||
curExportType: val
|
||||
curExportType: val,
|
||||
isWiki: false
|
||||
});
|
||||
};
|
||||
|
||||
@ -223,16 +238,13 @@ class ProjectData extends Component {
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
// url导入上传
|
||||
onUrlUpload = async () => {
|
||||
|
||||
if (!this.state.curImportType) {
|
||||
return message.error('请选择导入数据的方式');
|
||||
}
|
||||
|
||||
if(!this.state.swaggerUrl) {
|
||||
if (!this.state.swaggerUrl) {
|
||||
return message.error('url 不能为空');
|
||||
}
|
||||
if (this.state.selectCatid) {
|
||||
@ -257,10 +269,18 @@ class ProjectData extends Component {
|
||||
}
|
||||
};
|
||||
|
||||
// 处理导出接口是全部还是公开
|
||||
handleChange = e => {
|
||||
this.setState({ exportContent: e.target.value });
|
||||
};
|
||||
|
||||
// 处理是否开启wiki导出
|
||||
handleWikiChange = e => {
|
||||
this.setState({
|
||||
isWiki: e.target.checked
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
@ -281,7 +301,7 @@ class ProjectData extends Component {
|
||||
this.state.curExportType &&
|
||||
exportDataModule[this.state.curExportType] &&
|
||||
exportDataModule[this.state.curExportType].route;
|
||||
let exportHref = handleExportRouteParams(exportUrl, this.state.exportContent);
|
||||
let exportHref = handleExportRouteParams(exportUrl, this.state.exportContent, this.state.isWiki);
|
||||
|
||||
// console.log('inter', this.state.exportContent);
|
||||
return (
|
||||
@ -360,7 +380,12 @@ class ProjectData extends Component {
|
||||
placeholder="http://demo.swagger.io/v2/swagger.json"
|
||||
onChange={e => this.swaggerUrlInput(e.target.value)}
|
||||
/>
|
||||
<Button type="primary" className="url-btn" onClick={this.onUrlUpload} loading={this.state.showLoading}>
|
||||
<Button
|
||||
type="primary"
|
||||
className="url-btn"
|
||||
onClick={this.onUrlUpload}
|
||||
loading={this.state.showLoading}
|
||||
>
|
||||
上传
|
||||
</Button>
|
||||
</div>
|
||||
@ -410,6 +435,7 @@ class ProjectData extends Component {
|
||||
})}
|
||||
</Select>
|
||||
</div>
|
||||
|
||||
<div className="dataExport">
|
||||
<RadioGroup defaultValue="all" onChange={this.handleChange}>
|
||||
<Radio value="all">全部接口</Radio>
|
||||
@ -426,6 +452,16 @@ class ProjectData extends Component {
|
||||
导出{' '}
|
||||
</Button>
|
||||
</a>
|
||||
<Checkbox
|
||||
checked={this.state.isWiki}
|
||||
onChange={this.handleWikiChange}
|
||||
className="wiki-btn"
|
||||
disabled = {this.state.curExportType === 'json'}
|
||||
>
|
||||
添加wiki <Tooltip title="开启后 html 和 markdown 数据导出会带上wiki数据">
|
||||
<Icon type="question-circle-o" />
|
||||
</Tooltip>{' '}
|
||||
</Checkbox>
|
||||
</div>
|
||||
) : (
|
||||
<Button disabled className="export-button" type="primary" size="large">
|
||||
|
@ -65,6 +65,10 @@
|
||||
width: 100px;
|
||||
height:35px;
|
||||
}
|
||||
|
||||
.wiki-btn {
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -280,12 +280,16 @@ function createInterMarkdown(basepath, listItem, isToc) {
|
||||
return mdTemplate;
|
||||
}
|
||||
|
||||
function createProjectMarkdown(curProject) {
|
||||
function createProjectMarkdown(curProject, wikiData) {
|
||||
let mdTemplate = ``;
|
||||
// 项目名、项目描述
|
||||
let title = `<h1 class="curproject-name"> ${curProject.name} </h1>`;
|
||||
|
||||
mdTemplate += `\n ${title} \n ${curProject.desc || ''}\n\n`;
|
||||
|
||||
// 增加公共wiki信息展示
|
||||
mdTemplate += wikiData ? `\n### 公共信息\n\n ${wikiData.markdown || ''}\n\n`: '';
|
||||
|
||||
return mdTemplate;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
const baseController = require('controllers/base.js');
|
||||
const interfaceModel = require('models/interface.js');
|
||||
const projectModel = require('models/project.js');
|
||||
|
||||
// const wikiModel = require('../yapi-plugin-wiki/wikiModel.js');
|
||||
const interfaceCatModel = require('models/interfaceCat.js');
|
||||
const yapi = require('yapi.js');
|
||||
const markdownIt = require('markdown-it');
|
||||
@ -17,6 +17,7 @@ class exportController extends baseController {
|
||||
this.catModel = yapi.getInst(interfaceCatModel);
|
||||
this.interModel = yapi.getInst(interfaceModel);
|
||||
this.projectModel = yapi.getInst(projectModel);
|
||||
// this.wikiModel = yapi.getInst(wikiModel);
|
||||
}
|
||||
|
||||
async handleListClass(pid, status) {
|
||||
@ -70,14 +71,21 @@ class exportController extends baseController {
|
||||
let pid = ctx.request.query.pid;
|
||||
let type = ctx.request.query.type;
|
||||
let status = ctx.request.query.status;
|
||||
let isWiki = ctx.request.query.isWiki;
|
||||
|
||||
if (!pid) {
|
||||
ctx.body = yapi.commons.resReturn(null, 200, 'pid 不为空');
|
||||
}
|
||||
let curProject;
|
||||
let curProject, wikiData;
|
||||
let tp = '';
|
||||
try {
|
||||
curProject = await this.projectModel.get(pid);
|
||||
console.log('curProject', curProject)
|
||||
if(isWiki === 'true') {
|
||||
|
||||
const wikiModel = require('../yapi-plugin-wiki/wikiModel.js');
|
||||
wikiData = await yapi.getInst(wikiModel).get(pid);
|
||||
}
|
||||
|
||||
ctx.set('Content-Type', 'application/octet-stream');
|
||||
const list = await this.handleListClass(pid, status);
|
||||
|
||||
@ -168,7 +176,7 @@ class exportController extends baseController {
|
||||
let mdTemplate = ``;
|
||||
try {
|
||||
// 项目名称信息
|
||||
mdTemplate += md.createProjectMarkdown(curProject);
|
||||
mdTemplate += md.createProjectMarkdown(curProject, wikiData);
|
||||
// 分类信息
|
||||
mdTemplate += md.createClassMarkdown(curProject, list, isToc);
|
||||
return mdTemplate;
|
||||
|
Loading…
Reference in New Issue
Block a user