Files
SOP/sop-website/sop-website-frontend/src/views/doc/api/index.vue
六如 85b33e7c3d 5.0
2024-11-27 10:08:24 +08:00

173 lines
5.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script setup lang="ts">
import {
contentShow,
content,
docDetail,
commonParams,
dataNodeType,
resultData,
handleChangeDocApp,
docAppId,
docAppList,
docTree,
handleNodeClick,
showUrl,
showProdUrl,
showSandBoxUrl
} from "./index";
import { ApiParamTable } from "@/components/ApiParamTable";
import MavonEditor from "mavon-editor";
const defaultProps = {
children: "children",
label: "docTitle"
};
</script>
<template>
<el-container class="doc-view">
<el-aside width="300px">
<el-select
v-show="docAppId > 0"
v-model="docAppId"
placeholder="Select"
size="large"
@change="handleChangeDocApp"
>
<el-option
v-for="item in docAppList"
:key="item.id"
:label="item.appName"
:value="item.id"
/>
</el-select>
<div style="margin-top: 10px">
<el-link type="primary" href="" target="_blank">签名算法</el-link>
</div>
<el-tree
:data="docTree"
:props="defaultProps"
style="margin-top: 10px"
@node-click="handleNodeClick"
/>
</el-aside>
<el-main
v-show="docDetail?.docInfoView?.url?.length > 0"
style="padding-top: 0"
>
<div v-show="contentShow">
<MavonEditor
v-model="content"
:box-shadow="false"
:subfield="false"
default-open="preview"
:editable="false"
:toolbars-flag="false"
/>
</div>
<div v-show="!contentShow">
<h2>
{{ docDetail.docInfoView.url + `(${docDetail.docInfoView.docName})` }}
</h2>
<div v-if="docDetail.docInfoView.description">
<h3>接口说明</h3>
<div
class="api-description"
v-html="docDetail.docInfoView.description"
/>
</div>
<el-descriptions border style="margin-top: 20px">
<el-descriptions-item label="接口名称">
{{ docDetail.docInfoView.url }}
</el-descriptions-item>
<el-descriptions-item label="版本号">
{{ docDetail.docInfoView.version }}
</el-descriptions-item>
</el-descriptions>
<el-descriptions
v-show="showUrl"
:column="1"
title="请求地址"
border
style="margin-top: 20px"
>
<el-descriptions-item v-show="showProdUrl">
<template #label>
<div class="cell-item">生产环境</div>
</template>
{{ docDetail.docInfoConfig.openProdUrl }}
</el-descriptions-item>
<el-descriptions-item v-show="showSandBoxUrl">
<template #label>
<div class="cell-item">沙箱环境</div>
</template>
{{ docDetail.docInfoConfig.openSandboxUrl }}
</el-descriptions-item>
</el-descriptions>
<h3>公共请求参数</h3>
<el-table :data="commonParams" border highlight-current-row>
<el-table-column prop="name" label="名称" width="200" />
<el-table-column prop="type" label="类型" width="100" />
<el-table-column prop="required" label="必须" width="60">
<template #default="scope">
<span :class="scope.row.required ? 'danger' : ''">
{{ scope.row.required ? `` : `` }}
</span>
</template>
</el-table-column>
<el-table-column prop="maxLength" label="最大长度" width="85" />
<el-table-column prop="description" label="描述">
<template #default="scope">
<span v-if="scope.row.name === 'sign'">
商户请求参数的签名串详见
<el-button type="primary" link>签名</el-button>
</span>
<span v-else>
{{ scope.row.description }}
</span>
</template>
</el-table-column>
<el-table-column prop="example" label="示例值" width="200" />
</el-table>
<h3>业务请求参数</h3>
<ApiParamTable :data="docDetail.docInfoView.requestParams" />
<h3>公共返回参数</h3>
<el-table :data="resultData" border highlight-current-row>
<el-table-column label="名称" prop="name" width="200" />
<el-table-column label="类型" prop="type" width="100">
<template #default="scope">
<span v-if="scope.row.name === 'data'">
{{ dataNodeType }}
</span>
<span v-else>
{{ scope.row.type }}
</span>
</template>
</el-table-column>
<el-table-column label="描述" prop="description">
<template #default="scope">
<span
v-if="scope.row.name === 'code' || scope.row.name === 'msg'"
>
{{ dataNodeType }}
</span>
<span v-else>
{{ scope.row.description }}
</span>
</template>
</el-table-column>
<el-table-column label="示例值" prop="example" width="200" />
</el-table>
<h4>业务返回参数</h4>
<ApiParamTable :data="docDetail.docInfoView.responseParams" />
</div>
</el-main>
</el-container>
</template>
<style lang="scss" scoped>
h3 {
margin: 20px 0;
}
h4 {
margin: 10px 0;
}
</style>