swagger文档增删改开发
This commit is contained in:
@@ -14,5 +14,5 @@ import java.util.List;
|
||||
* @since 2021-10-15
|
||||
*/
|
||||
public interface SwaggerDocService extends IService<SwaggerDoc> {
|
||||
public List<SwaggerDoc> getSwaggerDocList();
|
||||
public List<SwaggerDoc> getSwaggerDocList(SwaggerDoc swaggerDoc);
|
||||
}
|
||||
|
||||
@@ -21,9 +21,12 @@ import java.util.List;
|
||||
public class SwaggerDocServiceImpl extends ServiceImpl<SwaggerDocMapper, SwaggerDoc> implements SwaggerDocService {
|
||||
|
||||
@Override
|
||||
public List<SwaggerDoc> getSwaggerDocList() {
|
||||
public List<SwaggerDoc> getSwaggerDocList(SwaggerDoc swaggerDoc) {
|
||||
QueryWrapper<SwaggerDoc> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("yn", 1);
|
||||
queryWrapper.eq(swaggerDoc.getDocType() != null, "doc_type", swaggerDoc.getDocType());
|
||||
queryWrapper.eq(swaggerDoc.getOpenVisit() != null, "open_visit", swaggerDoc.getOpenVisit());
|
||||
queryWrapper.eq(swaggerDoc.getDocStatus() != null, "doc_status", swaggerDoc.getDocStatus());
|
||||
return this.list(queryWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,8 +50,8 @@ public class SwaggerDocumentController {
|
||||
*/
|
||||
@ResponseBody
|
||||
@PostMapping(value = "/list")
|
||||
public ResponseJson<List<SwaggerDoc>> list() {
|
||||
List<SwaggerDoc> docList = swaggerDocService.getSwaggerDocList();
|
||||
public ResponseJson<List<SwaggerDoc>> list(SwaggerDoc swaggerDoc) {
|
||||
List<SwaggerDoc> docList = swaggerDocService.getSwaggerDocList(swaggerDoc);
|
||||
return DocResponseJson.ok(docList);
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ public class SwaggerProxyController {
|
||||
@RequestMapping("/swagger-resources")
|
||||
public List<SwaggerResource> swaggerResources() {
|
||||
Set<SwaggerResource> resourceList = new HashSet<>();
|
||||
List<SwaggerDoc> docList = swaggerDocService.getSwaggerDocList();
|
||||
List<SwaggerDoc> docList = swaggerDocService.getSwaggerDocList(new SwaggerDoc());
|
||||
for (SwaggerDoc swaggerDoc : docList) {
|
||||
SwaggerResource resource = new SwaggerResource();
|
||||
resource.setUrl("/doc-swagger/doc/content?id=" + swaggerDoc.getId());
|
||||
|
||||
@@ -4,5 +4,8 @@ export const zyplayerApi = {
|
||||
getSelfUserInfo: data => apiClient({url: '/user/info/selfInfo', method: 'post', data: data}),
|
||||
userLogout: data => apiClient({url: '/logout', method: 'post', data: data}),
|
||||
systemUpgradeInfo: data => apiClient({url: '/system/info/upgrade', method: 'post', data: data}),
|
||||
swaggerDocList: data => apiClient({url: '/doc-swagger/doc/list', method: 'post', data: data}),
|
||||
swaggerDocAdd: data => apiClient({url: '/doc-swagger/doc/add', method: 'post', data: data}),
|
||||
swaggerDocUpdate: data => apiClient({url: '/doc-swagger/doc/update', method: 'post', data: data}),
|
||||
};
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<img src="../../assets/logo.png">
|
||||
<h1>swagger文档管理</h1>
|
||||
</div>
|
||||
<menu-layout></menu-layout>
|
||||
<menu-layout :collapsed="appMenuCollapsed"></menu-layout>
|
||||
</a-layout-sider>
|
||||
<div ref="rightResize" class="right-resize" v-show="!appMenuCollapsed">
|
||||
<i ref="rightResizeBar">...</i>
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
<template>
|
||||
<div class="menu-layout">
|
||||
<div style="padding: 10px 5px;">
|
||||
<a-select placeholder="请选择分组" v-model:value="swaggerDocChoice" style="width: 100%;">
|
||||
<a-select-option :value="item.url" v-for="item in swaggerResourceList">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
<a-menu theme="light" mode="inline" :inline-collapsed="collapsed" v-model:openKeys="openKeys" v-model:selectedKeys="selectedKeys">
|
||||
<a-menu theme="light" mode="inline" :inline-collapsed="false" v-model:openKeys="openKeys" v-model:selectedKeys="selectedKeys">
|
||||
<menu-children-layout :menuItem="menuItem" v-for="menuItem in menuData"></menu-children-layout>
|
||||
</a-menu>
|
||||
<a-directory-tree :tree-data="treeData" v-model:expandedKeys="expandedKeys" @select="docChecked"></a-directory-tree>
|
||||
<a-divider style="margin: 6px 0;"/>
|
||||
<div v-show="!collapsed">
|
||||
<div style="padding: 10px 5px;">
|
||||
<a-select placeholder="请选择分组" v-model:value="swaggerDocChoice" style="width: 100%;">
|
||||
<a-select-option :value="item.url" v-for="item in swaggerResourceList">{{item.name}}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
<a-directory-tree :tree-data="treeData" v-model:expandedKeys="expandedKeys" @select="docChecked"></a-directory-tree>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -18,12 +21,17 @@
|
||||
|
||||
export default {
|
||||
name: 'MenuLayout',
|
||||
props: {
|
||||
collapsed: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
menuData: [],
|
||||
selectedKeys: [],
|
||||
openKeys: [],
|
||||
collapsed: false,
|
||||
// 文档树
|
||||
treeData: [
|
||||
{
|
||||
@@ -49,6 +57,9 @@
|
||||
},
|
||||
watch:{
|
||||
'$store.state.userInfo'(userInfo) {
|
||||
},
|
||||
collapsed(x) {
|
||||
console.log(x, this.collapsed)
|
||||
}
|
||||
},
|
||||
components: {MenuChildrenLayout},
|
||||
@@ -80,6 +91,8 @@
|
||||
if (this.swaggerResourceList.length > 0) {
|
||||
this.swaggerDocChoice = this.swaggerResourceList[0].url;
|
||||
}
|
||||
} else {
|
||||
this.$message.error('获取文档列表请求失败');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
<template>
|
||||
<div class="page-layout">
|
||||
<a-tabs type="card" v-model:activeKey="activePage" closable @tab-click="changePage" @edit="removePageTab" style="padding: 5px 10px 0;">
|
||||
<a-tab-pane :tab="pageTabNameMap[item.fullPath]||item.name" :name="getRouteRealPath(item)" :fullPath="item.fullPath" :key="item.fullPath" v-for="item in pageList"/>
|
||||
<a-tabs type="editable-card" hide-add v-model:activeKey="activePage" @tab-click="changePage" @edit="removePageTab" style="padding: 5px 10px 0;">
|
||||
<a-tab-pane closable :tab="pageTabNameMap[item.fullPath]||item.name" :name="getRouteRealPath(item)" :fullPath="item.fullPath" :key="item.fullPath" v-for="item in pageList"/>
|
||||
</a-tabs>
|
||||
<div class="page-body">
|
||||
<keep-alive>
|
||||
<router-view :key="$route.fullPath"/>
|
||||
</keep-alive>
|
||||
<router-view v-slot="{ Component }">
|
||||
<keep-alive>
|
||||
<component :is="Component" />
|
||||
</keep-alive>
|
||||
</router-view>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -81,13 +81,13 @@
|
||||
this.upgradeInfo = json.data;
|
||||
if (!!this.upgradeInfo.upgradeContent) {
|
||||
this.upgradeInfo.upgradeContent = this.upgradeInfo.upgradeContent.replaceAll(';', '\n');
|
||||
console.log("zyplayer-doc发现新版本:"
|
||||
+ "\n升级地址:" + json.data.upgradeUrl
|
||||
+ "\n当前版本:" + json.data.nowVersion
|
||||
+ "\n最新版本:" + json.data.lastVersion
|
||||
+ "\n升级内容:" + json.data.upgradeContent
|
||||
);
|
||||
}
|
||||
console.log("zyplayer-doc发现新版本:"
|
||||
+ "\n升级地址:" + json.data.upgradeUrl
|
||||
+ "\n当前版本:" + json.data.nowVersion
|
||||
+ "\n最新版本:" + json.data.lastVersion
|
||||
+ "\n升级内容:" + json.data.upgradeContent
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
@@ -1,45 +1,181 @@
|
||||
<template>
|
||||
<a-table :dataSource="dataSource" :columns="columns"></a-table>
|
||||
<a-card>
|
||||
<a-form layout="inline" style="margin-bottom: 20px;">
|
||||
<a-form-item label="文档类型">
|
||||
<a-select placeholder="请选择文档类型" v-model:value="searchParam.docType" style="width: 150px;">
|
||||
<a-select-option value="">全部</a-select-option>
|
||||
<a-select-option :value="1">URL添加</a-select-option>
|
||||
<a-select-option :value="2">JSON内容</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="开放访问">
|
||||
<a-select placeholder="请选择开放访问" v-model:value="searchParam.openVisit" style="width: 150px;">
|
||||
<a-select-option value="">全部</a-select-option>
|
||||
<a-select-option :value="0">否</a-select-option>
|
||||
<a-select-option :value="1">是</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="状态">
|
||||
<a-select placeholder="请选择状态" v-model:value="searchParam.docStatus" style="width: 150px;">
|
||||
<a-select-option value="">全部</a-select-option>
|
||||
<a-select-option :value="1">启用</a-select-option>
|
||||
<a-select-option :value="2">禁用</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item>
|
||||
<a-button @click="searchDocList" type="primary">查询</a-button>
|
||||
<a-button @click="openNewDoc" :style="{ marginLeft: '8px' }">新建</a-button>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
<a-table :dataSource="docList" :columns="docListColumns" size="middle"
|
||||
:loading="docListLoading"
|
||||
:scroll="{ x: 1200, y: 'calc(100vh - 340px)' }">
|
||||
<template #bodyCell="{ column, text, row }">
|
||||
<template v-if="column.dataIndex === 'operation'">
|
||||
<a-button type="link">编辑</a-button>
|
||||
<a-button type="link" danger @click="updateDocStatus(row)">删除</a-button>
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'docType'">
|
||||
<a-tag color="red" v-if="text === 1">URL添加</a-tag>
|
||||
<a-tag color="blue" v-else-if="text === 2">JSON内容</a-tag>
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'openVisit'">
|
||||
<a-tag color="pink" v-if="text === 0">未开放</a-tag>
|
||||
<a-tag color="green" v-else-if="text === 1">已开放</a-tag>
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'docStatus'">
|
||||
<a-tag color="green" v-if="text === 1">启用</a-tag>
|
||||
<a-tag color="pink" v-else-if="text === 2">禁用</a-tag>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
</a-card>
|
||||
<a-modal v-model:visible="newDocVisible" title="新增文档" @ok="handleNewDocOk" :width="600">
|
||||
<a-form layout="horizontal" ref="newDocFormRef" :rules="newDocRules" :model="docEdit" :label-col="{span: 6}" :wrapper-col="{span: 18}">
|
||||
<a-form-item label="文档名称" required name="name">
|
||||
<a-input placeholder="请输入文档名称" v-model:value="docEdit.name"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label="文档类型" required name="docType">
|
||||
<a-radio-group v-model:value="docEdit.docType">
|
||||
<a-radio :value="1">URL添加</a-radio>
|
||||
<a-radio :value="2">JSON内容</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item label="文档地址" required name="docUrl" v-if="docEdit.docType === 1">
|
||||
<a-input placeholder="请输入文档地址URL" v-model:value="docEdit.docUrl"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label="文档内容" required name="jsonContent" v-else-if="docEdit.docType === 2">
|
||||
<a-textarea placeholder="请输入JSON格式的swagger文档内容" v-model:value="docEdit.jsonContent"></a-textarea>
|
||||
</a-form-item>
|
||||
<a-form-item label="开放访问" required name="openVisit">
|
||||
<a-radio-group v-model:value="docEdit.openVisit">
|
||||
<a-radio :value="0">否</a-radio>
|
||||
<a-radio :value="1">开放</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item label="状态" required name="docStatus">
|
||||
<a-radio-group v-model:value="docEdit.docStatus">
|
||||
<a-radio :value="1">启用</a-radio>
|
||||
<a-radio :value="2">禁用</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { toRefs, ref, onMounted } from 'vue';
|
||||
import {zyplayerApi} from '../../api';
|
||||
|
||||
export default {
|
||||
setup() {
|
||||
let docList = ref([]);
|
||||
let docListLoading = ref(false);
|
||||
let searchParam = ref({docType: '', openVisit: '', docStatus: ''});
|
||||
const searchDocList = async () => {
|
||||
docListLoading.value = true;
|
||||
zyplayerApi.swaggerDocList(searchParam.value).then(res => {
|
||||
setTimeout(() => docListLoading.value = false, 500);
|
||||
docList.value = res.data || [];
|
||||
});
|
||||
}
|
||||
let docEdit = ref({});
|
||||
let newDocFormRef = ref();
|
||||
let newDocVisible = ref(false);
|
||||
const handleNewDocOk = async () => {
|
||||
newDocFormRef.value.validate().then(() => {
|
||||
zyplayerApi.swaggerDocAdd(docEdit.value).then(res => {
|
||||
searchDocList();
|
||||
newDocVisible.value = false;
|
||||
});
|
||||
}).catch(error => {
|
||||
console.log('error', error);
|
||||
});
|
||||
}
|
||||
const openNewDoc = async () => {
|
||||
newDocVisible.value = true;
|
||||
docEdit.value = {
|
||||
docType: 1, openVisit: 0, docStatus: 1,
|
||||
};
|
||||
}
|
||||
const updateDocStatus = async (row) => {
|
||||
zyplayerApi.swaggerDocUpdate({docStatus: 1}).then(res => {
|
||||
searchDocList();
|
||||
});
|
||||
}
|
||||
onMounted(() => {
|
||||
console.log('Component is mounted!');
|
||||
searchDocList();
|
||||
});
|
||||
return {
|
||||
dataSource: [
|
||||
searchParam,
|
||||
docList,
|
||||
docListLoading,
|
||||
newDocVisible,
|
||||
docEdit,
|
||||
newDocFormRef,
|
||||
searchDocList,
|
||||
openNewDoc,
|
||||
handleNewDocOk,
|
||||
updateDocStatus,
|
||||
newDocRules: {
|
||||
name: [{required: true, message: '请输入文档名称', trigger: 'change'}],
|
||||
docUrl: [{required: true, message: '请输入文档地址', trigger: 'change'}],
|
||||
jsonContent: [{required: true, message: '请输入JSON格式的swagger文档内容', trigger: 'change'}],
|
||||
docType: [{type: 'number', required: true, message: '请选择文档类型', trigger: 'change'}],
|
||||
openVisit: [{type: 'number', required: true, message: '请选择是否开放访问', trigger: 'change'}],
|
||||
docStatus: [{type: 'number', required: true, message: '请选择文档状态', trigger: 'change'}],
|
||||
},
|
||||
docListColumns: [
|
||||
{
|
||||
key: '1',
|
||||
name: '胡彦斌',
|
||||
age: 32,
|
||||
address: '西湖区湖底公园1号',
|
||||
},
|
||||
{
|
||||
key: '2',
|
||||
name: '胡彦祖',
|
||||
age: 42,
|
||||
address: '西湖区湖底公园1号',
|
||||
},
|
||||
],
|
||||
columns: [
|
||||
{
|
||||
title: '姓名',
|
||||
title: 'ID',
|
||||
dataIndex: 'id',
|
||||
width: 70,
|
||||
}, {
|
||||
title: '文档名称',
|
||||
dataIndex: 'name',
|
||||
key: 'name',
|
||||
},
|
||||
{
|
||||
title: '年龄',
|
||||
dataIndex: 'age',
|
||||
key: 'age',
|
||||
},
|
||||
{
|
||||
title: '住址',
|
||||
dataIndex: 'address',
|
||||
key: 'address',
|
||||
}, {
|
||||
title: '文档类型',
|
||||
dataIndex: 'docType',
|
||||
width: 90,
|
||||
}, {
|
||||
title: '文档地址',
|
||||
dataIndex: 'docUrl',
|
||||
}, {
|
||||
title: '目标域名',
|
||||
dataIndex: 'rewriteDomain',
|
||||
}, {
|
||||
title: '开放访问',
|
||||
dataIndex: 'openVisit',
|
||||
width: 90,
|
||||
}, {
|
||||
title: '状态',
|
||||
dataIndex: 'docStatus',
|
||||
width: 90,
|
||||
}, {
|
||||
title: '操作',
|
||||
dataIndex: 'operation',
|
||||
fixed: 'right',
|
||||
width: 170,
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user