Files
wechat-article-exporter/components/api/Document.vue

114 lines
2.8 KiB
Vue

<script setup lang="ts">
import CodeSegment from '~/components/api/CodeSegment.vue';
interface TParam {
name: string;
location: string;
label: string;
required: boolean;
default: string;
type: string;
remark: string;
}
interface Props {
index: number;
name: string;
description: string;
url: string;
method: string;
params: TParam[];
responseSample: any;
remark?: string;
}
defineProps<Props>();
const open = ref(false);
const host = window.location.protocol + '//' + window.location.host;
</script>
<template>
<div class="space-y-5">
<h2 class="flex items-center space-x-3 text-2xl font-semibold font-serif py-2">
<span>{{ index }}. {{ name }}</span>
<ApiDebugModal :initial-selected="name" />
</h2>
<div>
<p class="font-semibold mb-2">简要描述</p>
<p class="font-serif">{{ description }}</p>
</div>
<div v-if="remark">
<p class="font-semibold mb-2">备注:</p>
<p class="text-rose-500">{{ remark }}</p>
</div>
<div>
<p class="font-semibold mb-2">请求URL:</p>
<p class="font-mono border p-2 rounded-md">
<span class="text-gray-400">{{ host }}</span>
<span class="font-semibold">{{ url }}</span>
</p>
</div>
<div>
<p class="font-semibold mb-2">请求方式:</p>
<p class="font-mono border p-2 rounded-md">{{ method }}</p>
</div>
<div>
<p class="font-semibold mb-2">参数:</p>
<div class="border rounded-md overflow-hidden">
<table class="font-mono">
<thead>
<tr>
<th>参数名</th>
<th>参数位置</th>
<th>强制</th>
<th>默认值</th>
<th>类型</th>
<th>说明</th>
<th>备注</th>
</tr>
</thead>
<tbody>
<tr v-for="p in params" :key="p.name">
<td>{{ p.name }}</td>
<td>{{ p.location }}</td>
<td>{{ p.required ? '是' : '否' }}</td>
<td>{{ p.default }}</td>
<td>{{ p.type }}</td>
<td>{{ p.label }}</td>
<td>{{ p.remark }}</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<p class="font-semibold flex items-center mb-2">
<span class="mr-3">返回示例:</span>
<UToggle v-model="open" color="blue" on-icon="i-heroicons:eye" off-icon="i-heroicons:eye-slash" />
</p>
<CodeSegment v-if="open" :code="responseSample" lang="json" />
</div>
</div>
</template>
<style scoped>
table {
width: 100%;
border-collapse: collapse;
}
th,
td {
border: 1px solid #e5e7eb;
padding: 8px;
text-align: center;
}
thead {
background-color: #00005506;
}
tr:nth-child(even) {
background-color: #00005506;
}
</style>