mirror of
https://github.com/wechat-article/wechat-article-exporter.git
synced 2026-06-10 01:22:47 +08:00
114 lines
2.8 KiB
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>
|