feat: 增加wiki 导出功能

This commit is contained in:
gaoxiaolin.gao 2018-07-19 20:02:16 +08:00
parent 75b0823cda
commit 84f43a54dd
5 changed files with 84 additions and 16 deletions

View File

@ -3,6 +3,22 @@
### 公共信息
sdasda
1232312
1232131123
12121244
| 9 | 9 | |
| --- | --- | --- |
| 231312313 | 1212 | |
123231331321131312313
123123
313123123123
# %u516C%u5171%u5206%u7C7B1
[TOC]

View File

@ -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&nbsp;<Tooltip title="开启后 html 和 markdown 数据导出会带上wiki数据">
<Icon type="question-circle-o" />
</Tooltip>{' '}
</Checkbox>
</div>
) : (
<Button disabled className="export-button" type="primary" size="large">

View File

@ -65,6 +65,10 @@
width: 100px;
height:35px;
}
.wiki-btn {
margin-left: 8px;
}
}
}

View File

@ -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;
}

View File

@ -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;