mirror of
https://gitee.com/xiarenalofs/squad-rain-ops-mini.git
synced 2026-08-06 21:36:25 +08:00
134 lines
5.0 KiB
HTML
134 lines
5.0 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>CDK 兑换 - RainOps Mini</title>
|
||
<link href="/lib/css/bootstrap.min.css" rel="stylesheet">
|
||
<link rel="stylesheet" href="/lib/css/font-awesome.min.css">
|
||
<script src="/lib/js/vue.global.prod.js"></script>
|
||
<style>
|
||
body {
|
||
background-color: #f8f9fa;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
min-height: 100vh;
|
||
}
|
||
.redeem-card {
|
||
width: 100%;
|
||
max-width: 500px;
|
||
border: none;
|
||
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
|
||
border-radius: 10px;
|
||
}
|
||
.card-header {
|
||
background-color: #0d6efd;
|
||
color: white;
|
||
border-radius: 10px 10px 0 0 !important;
|
||
padding: 20px;
|
||
text-align: center;
|
||
}
|
||
.card-body {
|
||
padding: 30px;
|
||
}
|
||
.form-label {
|
||
font-weight: 500;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div id="app" class="redeem-card card">
|
||
<div class="card-header">
|
||
<h3 class="mb-0"><i class="fa fa-gift me-2"></i>CDK 兑换中心</h3>
|
||
</div>
|
||
<div class="card-body">
|
||
<div v-if="successMessage" class="alert alert-success">
|
||
<i class="fa fa-check-circle me-2"></i>{{ successMessage }}
|
||
</div>
|
||
<div v-if="errorMessage" class="alert alert-danger">
|
||
<i class="fa fa-exclamation-circle me-2"></i>{{ errorMessage }}
|
||
</div>
|
||
|
||
<form @submit.prevent="redeem">
|
||
<div class="mb-3">
|
||
<label class="form-label">SteamID (64位)</label>
|
||
<input type="text" class="form-control form-control-lg" v-model="form.steamId" placeholder="例如:76561198000000000" required>
|
||
<div class="form-text">请确保输入的 SteamID 正确,否则无法到账。</div>
|
||
</div>
|
||
<div class="mb-4">
|
||
<label class="form-label">兑换码 (CDK)</label>
|
||
<input type="text" class="form-control form-control-lg font-monospace" v-model="form.code" placeholder="CDK..." required>
|
||
</div>
|
||
<div class="d-grid">
|
||
<button type="submit" class="btn btn-primary btn-lg" :disabled="loading">
|
||
<span v-if="loading" class="spinner-border spinner-border-sm me-2"></span>
|
||
{{ loading ? '兑换中...' : '立即兑换' }}
|
||
</button>
|
||
</div>
|
||
</form>
|
||
|
||
<div class="mt-4 text-center text-muted small">
|
||
<p class="mb-1">温馨提示:</p>
|
||
<ul class="list-unstyled">
|
||
<li>1. 每个批次的激活码同一个账号仅限激活一次。</li>
|
||
<li>2. 也可以在游戏内聊天直接发送 CDK 进行激活。</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
const { createApp, reactive, ref } = Vue;
|
||
|
||
createApp({
|
||
setup() {
|
||
const form = reactive({
|
||
steamId: '',
|
||
code: ''
|
||
});
|
||
const loading = ref(false);
|
||
const successMessage = ref('');
|
||
const errorMessage = ref('');
|
||
|
||
// Check URL params for auto-fill
|
||
const urlParams = new URLSearchParams(window.location.search);
|
||
if (urlParams.has('code')) {
|
||
form.code = urlParams.get('code');
|
||
}
|
||
|
||
const redeem = async () => {
|
||
loading.value = true;
|
||
successMessage.value = '';
|
||
errorMessage.value = '';
|
||
|
||
try {
|
||
const res = await fetch('/api/cdk/redeem', {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify(form)
|
||
});
|
||
|
||
const data = await res.json();
|
||
if (res.ok) {
|
||
successMessage.value = data.message || '兑换成功!';
|
||
form.code = ''; // Clear code after success
|
||
} else {
|
||
errorMessage.value = data.error || '兑换失败';
|
||
}
|
||
} catch (error) {
|
||
errorMessage.value = '请求失败,请稍后重试';
|
||
} finally {
|
||
loading.value = false;
|
||
}
|
||
};
|
||
|
||
return {
|
||
form, loading, successMessage, errorMessage, redeem
|
||
};
|
||
}
|
||
}).mount('#app');
|
||
</script>
|
||
</body>
|
||
</html>
|