feat: grant signup bonus points

This commit is contained in:
QiuSW
2026-07-08 15:13:23 +08:00
parent 02aa12e8b9
commit ac8bec7b9c
29 changed files with 399 additions and 61 deletions
@@ -5,6 +5,9 @@
{% block content %}
<section class="cmhub-panel">
<h1 class="h4 mb-3">注册</h1>
<div class="alert alert-info">
注册成功后自动赠送 100 点试用点数,系统会写入注册赠点流水。
</div>
<form method="post" action="{% url 'portal-signup' %}">
{% csrf_token %}
{{ form.non_field_errors }}
+1 -1
View File
@@ -20,7 +20,7 @@
<a class="btn btn-sm {% if current_url == 'portal-apikeys' %}btn-primary{% else %}btn-outline-secondary{% endif %}"{% if current_url == 'portal-apikeys' %} aria-current="page"{% endif %} href="{% url 'portal-apikeys' %}">API Key</a>
<a class="btn btn-sm {% if current_url == 'portal-models' %}btn-primary{% else %}btn-outline-secondary{% endif %}"{% if current_url == 'portal-models' %} aria-current="page"{% endif %} href="{% url 'portal-models' %}">可用模型</a>
<a class="btn btn-sm {% if current_url == 'portal-recharge-records' %}btn-primary{% else %}btn-outline-secondary{% endif %}"{% if current_url == 'portal-recharge-records' %} aria-current="page"{% endif %} href="{% url 'portal-recharge-records' %}">充值记录</a>
<a class="btn btn-sm {% if current_url == 'portal-usage-records' %}btn-primary{% else %}btn-outline-secondary{% endif %}"{% if current_url == 'portal-usage-records' %} aria-current="page"{% endif %} href="{% url 'portal-usage-records' %}">消费记录</a>
<a class="btn btn-sm {% if current_url == 'portal-usage-records' %}btn-primary{% else %}btn-outline-secondary{% endif %}"{% if current_url == 'portal-usage-records' %} aria-current="page"{% endif %} href="{% url 'portal-usage-records' %}">点数记录</a>
<form method="post" action="{% url 'portal-logout' %}">
{% csrf_token %}
<button class="btn btn-sm btn-outline-secondary" type="submit">退出</button>
+7 -7
View File
@@ -28,8 +28,8 @@
</div>
<div class="col-md-3">
<div class="metric">
<div class="text-secondary small">入账点数</div>
<div class="display-6 fw-semibold">{{ recharge_points_total }}</div>
<div class="text-secondary small">获得点数</div>
<div class="display-6 fw-semibold">{{ credited_points_total }}</div>
</div>
</div>
<div class="col-md-3">
@@ -62,8 +62,8 @@
<div class="col-md-4">
<div class="metric d-flex flex-column gap-3">
<div>
<div class="text-secondary small">点数使用</div>
<div class="h5 mb-0">消费记录</div>
<div class="text-secondary small">点数账本</div>
<div class="h5 mb-0">点数记录</div>
</div>
<a class="btn btn-primary align-self-start" href="{% url 'portal-usage-records' %}">查看</a>
</div>
@@ -107,7 +107,7 @@
<section class="cmhub-surface">
<div class="d-flex justify-content-between align-items-center mb-3">
<h2 class="h5 mb-0">最近消费</h2>
<h2 class="h5 mb-0">最近点数变动</h2>
<a class="btn btn-sm btn-outline-secondary" href="{% url 'portal-usage-records' %}">全部</a>
</div>
{% if recent_usage_entries %}
@@ -126,7 +126,7 @@
{% for entry in recent_usage_entries %}
<tr>
<td>{{ entry.created_at|date:"Y-m-d H:i" }}</td>
<td>{{ entry.change_type }}</td>
<td>{{ entry.get_change_type_display }}</td>
<td>{{ entry.ref_call.alias|default:"-" }}</td>
<td>{{ entry.points_delta }}</td>
<td>{{ entry.balance_after }}</td>
@@ -136,7 +136,7 @@
</table>
</div>
{% else %}
<div class="text-secondary">暂无消费记录</div>
<div class="text-secondary">暂无点数记录</div>
{% endif %}
</section>
</div>
+3 -3
View File
@@ -18,7 +18,7 @@
{% if user.is_authenticated %}
<a class="btn btn-primary btn-lg" href="{% url 'portal-dashboard' %}">进入控制台</a>
{% else %}
<a class="btn btn-primary btn-lg" href="{% url 'portal-signup' %}">免费注册</a>
<a class="btn btn-primary btn-lg" href="{% url 'portal-signup' %}">注册领 100 点</a>
<a class="btn btn-outline-secondary btn-lg" href="{% url 'portal-login' %}">登录</a>
{% endif %}
{% if current_release and current_release.has_download %}
@@ -28,7 +28,7 @@
{% endif %}
</div>
<div class="home-proof" aria-label="服务要点">
<span class="home-chip">注册即可用</span>
<span class="home-chip">注册送 100 点</span>
<span class="home-chip">按点数扣点</span>
<span class="home-chip">API Key 接入</span>
</div>
@@ -70,7 +70,7 @@
<div class="home-step">
<div class="home-step-num">01</div>
<h3>注册账号</h3>
<p>邮箱注册后直接登录,系统创建 0 点钱包,不赠点、不写虚假流水。</p>
<p>邮箱注册后直接登录,系统通过点数账本发放 100 点试用额度并写注册赠点流水。</p>
</div>
<div class="home-step">
<div class="home-step-num">02</div>
@@ -1,11 +1,11 @@
{% extends "portal/base.html" %}
{% block title %}消费记录 - cmhub{% endblock %}
{% block title %}点数记录 - cmhub{% endblock %}
{% block content %}
<div class="d-flex flex-column gap-4">
<div>
<h1 class="h3 mb-1">消费记录</h1>
<h1 class="h3 mb-1">点数记录</h1>
<div class="text-secondary">{{ user.email }}</div>
</div>
@@ -31,7 +31,7 @@
</div>
<section class="cmhub-surface">
<h2 class="h5 mb-3">点数使用流水</h2>
<h2 class="h5 mb-3">点数流水</h2>
{% if usage_entries %}
<div class="table-responsive">
<table class="table align-middle mb-0">
@@ -51,7 +51,7 @@
{% for entry in usage_entries %}
<tr>
<td>{{ entry.created_at|date:"Y-m-d H:i" }}</td>
<td>{{ entry.change_type }}</td>
<td>{{ entry.get_change_type_display }}</td>
<td>
{% if entry.ref_call %}
{{ entry.ref_call.operation_type }}
@@ -89,7 +89,7 @@
</div>
{% include "portal/includes/pagination.html" %}
{% else %}
<div class="text-secondary">暂无消费记录</div>
<div class="text-secondary">暂无点数记录</div>
{% endif %}
</section>
</div>