feat: rename portal brand to shopee circle

This commit is contained in:
QiuSW
2026-07-08 17:05:20 +08:00
parent d5aa29e4d5
commit 5c9f070d15
19 changed files with 88 additions and 30 deletions
@@ -1,6 +1,6 @@
你好,
请打开下面的链接完成 cmhub 邮箱验证:
请打开下面的链接完成虾皮圈邮箱验证:
{{ activate_url }}
@@ -1 +1 @@
[cmhub] 验证你的邮箱
[虾皮圈] 验证你的邮箱
+1 -1
View File
@@ -1,6 +1,6 @@
{% extends "portal/base.html" %}
{% block title %}登录 - cmhub{% endblock %}
{% block title %}登录 - 虾皮圈{% endblock %}
{% block content %}
<section class="cmhub-panel">
+1 -1
View File
@@ -1,6 +1,6 @@
{% extends "portal/base.html" %}
{% block title %}退出 - cmhub{% endblock %}
{% block title %}退出 - 虾皮圈{% endblock %}
{% block content %}
<section class="cmhub-panel">
+1 -1
View File
@@ -1,6 +1,6 @@
{% extends "portal/base.html" %}
{% block title %}注册 - cmhub{% endblock %}
{% block title %}注册 - 虾皮圈{% endblock %}
{% block content %}
<section class="cmhub-panel">
@@ -1,6 +1,6 @@
{% extends "portal/base.html" %}
{% block title %}验证邮箱 - cmhub{% endblock %}
{% block title %}验证邮箱 - 虾皮圈{% endblock %}
{% block content %}
<section class="cmhub-panel">
+1 -1
View File
@@ -1,6 +1,6 @@
{% extends "portal/base.html" %}
{% block title %}API Key - cmhub{% endblock %}
{% block title %}API Key - 虾皮圈{% endblock %}
{% block content %}
<div class="d-flex flex-column gap-4">
+2 -2
View File
@@ -4,14 +4,14 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}cmhub{% endblock %}</title>
<title>{% block title %}虾皮圈{% endblock %}</title>
<link href="{% static 'portal/vendor/bootstrap/bootstrap.min.css' %}" rel="stylesheet">
<link href="{% static 'portal/brand.css' %}" rel="stylesheet">
</head>
<body class="{% block body_class %}{% endblock %}">
<nav class="navbar navbar-expand">
<div class="container">
<a class="navbar-brand fw-semibold" href="{% url 'portal-home' %}">cmhub</a>
<a class="navbar-brand fw-semibold" href="{% url 'portal-home' %}">虾皮圈</a>
<div class="ms-auto d-flex gap-2 flex-wrap justify-content-end">
{% with current_url=request.resolver_match.url_name %}
{% if user.is_authenticated %}
+1 -1
View File
@@ -1,6 +1,6 @@
{% extends "portal/base.html" %}
{% block title %}控制台 - cmhub{% endblock %}
{% block title %}控制台 - 虾皮圈{% endblock %}
{% block content %}
<div class="d-flex flex-column gap-4">
+3 -3
View File
@@ -1,6 +1,6 @@
{% extends "portal/base.html" %}
{% block title %}cmhub AI 电商生成台{% endblock %}
{% block title %}虾皮圈 AI 电商生成台{% endblock %}
{% block body_class %}home-page{% endblock %}
{% block body %}
@@ -9,7 +9,7 @@
<div class="home-container home-hero-grid">
<div>
<div class="home-eyebrow">AI 生成 / 点数计费 / 桌面端接入</div>
<h1>cmhub AI 电商生成台</h1>
<h1>虾皮圈 AI 电商生成台</h1>
<p class="home-lead">
把生成标题、生成主图能力封装成稳定的 HTTP API。桌面端填入 API Key 后按本地点数扣费,
余额不足直接拦截,失败自动退点。
@@ -140,7 +140,7 @@
<div class="home-download-box">
{% if current_release and current_release.has_download %}
<h3>Windows 客户端 {{ current_release.version }}</h3>
<p>当前版本已发布,可下载后填入 cmhub API Key 使用。</p>
<p>当前版本已发布,可下载后填入虾皮圈 API Key 使用。</p>
<div class="home-actions">
<a class="btn btn-primary" href="{{ current_release.download_url }}">下载客户端</a>
{% if current_import_template_download_url %}
+1 -1
View File
@@ -1,6 +1,6 @@
{% extends "portal/base.html" %}
{% block title %}可用模型 - cmhub{% endblock %}
{% block title %}可用模型 - 虾皮圈{% endblock %}
{% block content %}
<div class="d-flex align-items-center justify-content-between gap-3 mb-4">
+1 -1
View File
@@ -1,7 +1,7 @@
{% extends "portal/base.html" %}
{% load static %}
{% block title %}充值 - cmhub{% endblock %}
{% block title %}充值 - 虾皮圈{% endblock %}
{% block content %}
<div class="d-flex flex-column gap-4">
@@ -1,6 +1,6 @@
{% extends "portal/base.html" %}
{% block title %}充值记录 - cmhub{% endblock %}
{% block title %}充值记录 - 虾皮圈{% endblock %}
{% block content %}
<div class="d-flex flex-column gap-4">
@@ -1,6 +1,6 @@
{% extends "portal/base.html" %}
{% block title %}点数记录 - cmhub{% endblock %}
{% block title %}点数记录 - 虾皮圈{% endblock %}
{% block content %}
<div class="d-flex flex-column gap-4">
+40 -1
View File
@@ -166,6 +166,13 @@ class PortalAccountFlowTests(TestCase):
html,
)
def assert_portal_branding(self, response):
self.assertContains(response, "虾皮圈")
self.assertNotContains(response, ">cmhub</a>")
self.assertNotContains(response, " - cmhub</title>")
self.assertNotContains(response, "cmhub AI 电商生成台")
self.assertNotContains(response, "cmhub API Key")
def test_signup_rate_limit_is_configured(self):
self.assertEqual(settings.ACCOUNT_RATE_LIMITS["signup"], "20/m/ip")
@@ -273,7 +280,8 @@ class PortalAccountFlowTests(TestCase):
self.assertEqual(response.status_code, 200)
self.assertEqual(response.resolver_match.url_name, "portal-home")
self.assertContains(response, "cmhub AI 电商生成台")
self.assertContains(response, "虾皮圈 AI 电商生成台")
self.assert_portal_branding(response)
self.assertContains(response, "注册领 100 点")
self.assertContains(response, "注册送 100 点")
self.assertContains(response, "登录")
@@ -299,6 +307,37 @@ class PortalAccountFlowTests(TestCase):
self.assertContains(response, "b" * 64)
self.assertContains(response, "修复下载入口并补充 SHA256")
self.assertContains(response, "未知发布者")
self.assertContains(response, "填入虾皮圈 API Key 使用")
self.assertNotContains(response, "填入 cmhub API Key 使用")
def test_portal_pages_use_shopee_circle_branding(self):
user = self.create_verified_user()
UserWallet.objects.create(user=user, points_balance=10)
public_paths = ("/", "/signup", "/login")
for path in public_paths:
with self.subTest(path=path):
response = self.client.get(path)
self.assertEqual(response.status_code, 200)
self.assert_portal_branding(response)
self.client.force_login(user)
authenticated_paths = (
"/dashboard",
"/recharge",
"/apikeys",
"/models",
"/records/recharge",
"/records/usage",
"/logout",
)
for path in authenticated_paths:
with self.subTest(path=path):
response = self.client.get(path)
self.assertEqual(response.status_code, 200)
self.assert_portal_branding(response)
def test_homepage_shows_current_import_template_download_link(self):
self.create_download_release()