426 lines
16 KiB
HTML
426 lines
16 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>锡林郭勒盟智慧养殖API测试页面</title>
|
|
<style>
|
|
body {
|
|
font-family: 'Microsoft YaHei', Arial, sans-serif;
|
|
margin: 20px;
|
|
background-color: #f5f5f5;
|
|
}
|
|
.container {
|
|
max-width: 1200px;
|
|
margin: 0 auto;
|
|
background: white;
|
|
padding: 20px;
|
|
border-radius: 8px;
|
|
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
|
}
|
|
h1 {
|
|
color: #2c3e50;
|
|
text-align: center;
|
|
}
|
|
.section {
|
|
margin: 20px 0;
|
|
padding: 15px;
|
|
border: 1px solid #ddd;
|
|
border-radius: 5px;
|
|
}
|
|
.section h3 {
|
|
color: #34495e;
|
|
margin-top: 0;
|
|
}
|
|
button {
|
|
background-color: #3498db;
|
|
color: white;
|
|
border: none;
|
|
padding: 10px 15px;
|
|
border-radius: 5px;
|
|
cursor: pointer;
|
|
margin: 5px;
|
|
}
|
|
button:hover {
|
|
background-color: #2980b9;
|
|
}
|
|
.result {
|
|
background-color: #f8f9fa;
|
|
border: 1px solid #e9ecef;
|
|
border-radius: 5px;
|
|
padding: 10px;
|
|
margin: 10px 0;
|
|
white-space: pre-wrap;
|
|
font-family: monospace;
|
|
font-size: 12px;
|
|
max-height: 200px;
|
|
overflow-y: auto;
|
|
}
|
|
.success {
|
|
border-color: #28a745;
|
|
background-color: #d4edda;
|
|
}
|
|
.error {
|
|
border-color: #dc3545;
|
|
background-color: #f8d7da;
|
|
}
|
|
.token-display {
|
|
background-color: #fff3cd;
|
|
border: 1px solid #ffeaa7;
|
|
padding: 10px;
|
|
border-radius: 5px;
|
|
margin: 10px 0;
|
|
word-break: break-all;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<h1>🐄 锡林郭勒盟智慧养殖产业平台 API 测试</h1>
|
|
|
|
<div class="section">
|
|
<h3>🔧 系统状态检查</h3>
|
|
<button onclick="checkHealth()">检查系统健康状态</button>
|
|
<button onclick="checkDatabase()">检查数据库状态</button>
|
|
<div id="health-result" class="result"></div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<h3>🔐 用户认证</h3>
|
|
<button onclick="login()">管理员登录</button>
|
|
<button onclick="getProfile()">获取用户信息</button>
|
|
<button onclick="getPermissions()">获取用户权限</button>
|
|
<div id="token-display" class="token-display" style="display:none;">
|
|
<strong>当前Token:</strong> <span id="current-token"></span>
|
|
</div>
|
|
<div id="auth-result" class="result"></div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<h3>👥 用户管理</h3>
|
|
<button onclick="getUserList()">获取用户列表</button>
|
|
<button onclick="getRoleList()">获取角色列表</button>
|
|
<button onclick="createTestUser()">创建测试用户</button>
|
|
<div id="user-result" class="result"></div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<h3>🐮 牛只档案管理</h3>
|
|
<button onclick="getCattleList()">获取牛只列表</button>
|
|
<button onclick="getCattleStats()">获取牛只统计</button>
|
|
<button onclick="createTestCattle()">创建测试牛只</button>
|
|
<button onclick="getCattleDetail()">获取牛只详情</button>
|
|
<div id="cattle-result" class="result"></div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<h3>📊 大屏数据</h3>
|
|
<button onclick="getRegions()">获取区域数据</button>
|
|
<button onclick="getRegionDetail()">获取区域详情</button>
|
|
<div id="dashboard-result" class="result"></div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<h3>💰 金融服务监管</h3>
|
|
<button onclick="getLoanList()">获取贷款列表</button>
|
|
<button onclick="getFinanceStats()">获取金融统计</button>
|
|
<button onclick="createTestLoan()">创建测试贷款</button>
|
|
<div id="finance-result" class="result"></div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<h3>📝 交易管理</h3>
|
|
<button onclick="getTransactionList()">获取交易列表</button>
|
|
<button onclick="getTradingStats()">获取交易统计</button>
|
|
<button onclick="getContractList()">获取合同列表</button>
|
|
<div id="trading-result" class="result"></div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<h3>🏢 政府监管</h3>
|
|
<button onclick="getFarmSupervision()">获取牧场监管</button>
|
|
<button onclick="getInspectionList()">获取检查记录</button>
|
|
<button onclick="getGovStats()">获取监管统计</button>
|
|
<button onclick="getPolicyList()">获取政策法规</button>
|
|
<div id="government-result" class="result"></div>
|
|
</div>
|
|
|
|
<div class="section">
|
|
<h3>🛍️ 商城管理</h3>
|
|
<button onclick="getProductList()">获取商品列表</button>
|
|
<button onclick="getOrderList()">获取订单列表</button>
|
|
<button onclick="getMallStats()">获取商城统计</button>
|
|
<button onclick="getProductDetail()">获取商品详情</button>
|
|
<div id="mall-result" class="result"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
const API_BASE = 'http://localhost:8889';
|
|
let currentToken = '';
|
|
|
|
function displayResult(elementId, data, isSuccess = true) {
|
|
const element = document.getElementById(elementId);
|
|
element.textContent = JSON.stringify(data, null, 2);
|
|
element.className = isSuccess ? 'result success' : 'result error';
|
|
}
|
|
|
|
function updateToken(token) {
|
|
currentToken = token;
|
|
document.getElementById('current-token').textContent = token;
|
|
document.getElementById('token-display').style.display = 'block';
|
|
}
|
|
|
|
async function apiRequest(url, options = {}) {
|
|
try {
|
|
const response = await fetch(API_BASE + url, {
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'Authorization': currentToken ? `Bearer ${currentToken}` : '',
|
|
...options.headers
|
|
},
|
|
...options
|
|
});
|
|
const data = await response.json();
|
|
return { data, status: response.status };
|
|
} catch (error) {
|
|
return { error: error.message, status: 0 };
|
|
}
|
|
}
|
|
|
|
async function checkHealth() {
|
|
const result = await apiRequest('/health');
|
|
displayResult('health-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function checkDatabase() {
|
|
const result = await apiRequest('/api/v1/database/status');
|
|
displayResult('health-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function login() {
|
|
const result = await apiRequest('/api/v1/auth/login', {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
username: 'admin',
|
|
password: 'admin123'
|
|
})
|
|
});
|
|
|
|
if (result.data && result.data.success) {
|
|
updateToken(result.data.data.token);
|
|
}
|
|
|
|
displayResult('auth-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getProfile() {
|
|
if (!currentToken) {
|
|
alert('请先登录');
|
|
return;
|
|
}
|
|
|
|
const result = await apiRequest('/api/v1/auth/profile');
|
|
displayResult('auth-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getPermissions() {
|
|
if (!currentToken) {
|
|
alert('请先登录');
|
|
return;
|
|
}
|
|
|
|
const result = await apiRequest('/api/v1/auth/permissions');
|
|
displayResult('auth-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getUserList() {
|
|
if (!currentToken) {
|
|
alert('请先登录');
|
|
return;
|
|
}
|
|
|
|
const result = await apiRequest('/api/v1/users');
|
|
displayResult('user-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getRoleList() {
|
|
if (!currentToken) {
|
|
alert('请先登录');
|
|
return;
|
|
}
|
|
|
|
const result = await apiRequest('/api/v1/users/roles/list');
|
|
displayResult('user-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function createTestUser() {
|
|
if (!currentToken) {
|
|
alert('请先登录');
|
|
return;
|
|
}
|
|
|
|
const result = await apiRequest('/api/v1/users', {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
username: 'test_farmer',
|
|
password: 'test123',
|
|
real_name: '测试养殖户',
|
|
user_type: 'farmer',
|
|
email: 'test@example.com'
|
|
})
|
|
});
|
|
displayResult('user-result', result.data || result.error, result.status === 201);
|
|
}
|
|
|
|
async function getCattleList() {
|
|
if (!currentToken) {
|
|
alert('请先登录');
|
|
return;
|
|
}
|
|
|
|
const result = await apiRequest('/api/v1/cattle');
|
|
displayResult('cattle-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getCattleStats() {
|
|
if (!currentToken) {
|
|
alert('请先登录');
|
|
return;
|
|
}
|
|
|
|
const result = await apiRequest('/api/v1/cattle/stats/overview');
|
|
displayResult('cattle-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function createTestCattle() {
|
|
if (!currentToken) {
|
|
alert('请先登录');
|
|
return;
|
|
}
|
|
|
|
const result = await apiRequest('/api/v1/cattle', {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
ear_tag: 'TEST' + Date.now(),
|
|
name: '测试牛只',
|
|
breed: '西门塔尔牛',
|
|
gender: 'female',
|
|
birth_date: '2023-01-01',
|
|
color: '黄白花',
|
|
weight: 350.5,
|
|
farm_location: '测试牧场'
|
|
})
|
|
});
|
|
displayResult('cattle-result', result.data || result.error, result.status === 201);
|
|
}
|
|
|
|
async function getCattleDetail() {
|
|
if (!currentToken) {
|
|
alert('请先登录');
|
|
return;
|
|
}
|
|
|
|
const result = await apiRequest('/api/v1/cattle/1');
|
|
displayResult('cattle-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getRegions() {
|
|
const result = await apiRequest('/api/v1/dashboard/map/regions');
|
|
displayResult('dashboard-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getRegionDetail() {
|
|
const result = await apiRequest('/api/v1/dashboard/map/region/xlg');
|
|
displayResult('dashboard-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
// 金融服务测试函数
|
|
async function getLoanList() {
|
|
const result = await apiRequest('/api/v1/finance/loans');
|
|
displayResult('finance-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getFinanceStats() {
|
|
const result = await apiRequest('/api/v1/finance/statistics');
|
|
displayResult('finance-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function createTestLoan() {
|
|
const result = await apiRequest('/api/v1/finance/loans', {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
loan_type: 'cattle',
|
|
loan_amount: 500000,
|
|
purpose: '购买优质肉牛',
|
|
term_months: 24
|
|
})
|
|
});
|
|
displayResult('finance-result', result.data || result.error, result.status === 201 || result.status === 200);
|
|
}
|
|
|
|
// 交易管理测试函数
|
|
async function getTransactionList() {
|
|
const result = await apiRequest('/api/v1/trading/transactions');
|
|
displayResult('trading-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getTradingStats() {
|
|
const result = await apiRequest('/api/v1/trading/statistics');
|
|
displayResult('trading-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getContractList() {
|
|
const result = await apiRequest('/api/v1/trading/contracts');
|
|
displayResult('trading-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
// 政府监管测试函数
|
|
async function getFarmSupervision() {
|
|
const result = await apiRequest('/api/v1/government/farms/supervision');
|
|
displayResult('government-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getInspectionList() {
|
|
const result = await apiRequest('/api/v1/government/inspections');
|
|
displayResult('government-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getGovStats() {
|
|
const result = await apiRequest('/api/v1/government/statistics');
|
|
displayResult('government-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getPolicyList() {
|
|
const result = await apiRequest('/api/v1/government/policies');
|
|
displayResult('government-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
// 商城管理测试函数
|
|
async function getProductList() {
|
|
const result = await apiRequest('/api/v1/mall/products');
|
|
displayResult('mall-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getOrderList() {
|
|
const result = await apiRequest('/api/v1/mall/orders');
|
|
displayResult('mall-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getMallStats() {
|
|
const result = await apiRequest('/api/v1/mall/statistics');
|
|
displayResult('mall-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
async function getProductDetail() {
|
|
const result = await apiRequest('/api/v1/mall/products/1');
|
|
displayResult('mall-result', result.data || result.error, result.status === 200);
|
|
}
|
|
|
|
// 页面加载时自动检查系统状态
|
|
window.onload = function() {
|
|
checkHealth();
|
|
};
|
|
</script>
|
|
</body>
|
|
</html> |