parent
60a4172c6a
commit
91a685d860
@ -1,21 +1,21 @@
|
||||
import RPi.GPIO as GPIO
|
||||
from mfrc522 import SimpleMFRC522
|
||||
# import RPi.GPIO as GPIO
|
||||
# from mfrc522 import SimpleMFRC522
|
||||
import random
|
||||
import time
|
||||
# reader = SimpleMFRC522()
|
||||
|
||||
reader = SimpleMFRC522()
|
||||
def read():
|
||||
try:
|
||||
while True:
|
||||
id, text = reader.read()
|
||||
return id, text
|
||||
finally:
|
||||
GPIO.cleanup()
|
||||
|
||||
previous_id = None # 存储先前的卡号
|
||||
|
||||
try:
|
||||
while True:
|
||||
id, text = reader.read()
|
||||
|
||||
if id != previous_id:
|
||||
print("===================================")
|
||||
print("新卡号: {}".format(id))
|
||||
print("===================================")
|
||||
previous_id = id
|
||||
|
||||
print("文本信息: {}".format(text))
|
||||
print("-----------------------------------")
|
||||
finally:
|
||||
GPIO.cleanup()
|
||||
def readTest():
|
||||
time.sleep(2)
|
||||
random_id = random.randint(1, 1000000000)
|
||||
random_value = random.randint(1, 4)
|
||||
return random_id, str(random_value)
|
||||
|
@ -1,3 +1,2 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
@ -0,0 +1,328 @@
|
||||
<!-- product_management.html -->
|
||||
{% extends 'back/base.html' %}
|
||||
|
||||
{% block content %}
|
||||
<style>
|
||||
/* 页面样式 */
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: 10px;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
#add-product-btn,
|
||||
#refresh-button {
|
||||
padding: 10px 20px;
|
||||
margin-bottom: 10px;
|
||||
background-color: #4CAF50;
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.modal {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 999;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background-color: #fefefe;
|
||||
margin: 15% auto;
|
||||
padding: 20px;
|
||||
border: 1px solid #888;
|
||||
width: 400px;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.close {
|
||||
color: #888;
|
||||
float: right;
|
||||
font-size: 28px;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.close:hover,
|
||||
.close:focus {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#product-form label {
|
||||
display: block;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#product-form input[type="text"],
|
||||
#product-form input[type="number"],
|
||||
#product-form input[type="checkbox"] {
|
||||
width: 100%;
|
||||
padding: 5px;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.modal-buttons {
|
||||
margin-top: 20px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.modal-buttons button {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
/* 其他样式 */
|
||||
.overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
z-index: 999;
|
||||
}
|
||||
.loading{
|
||||
position: fixed;
|
||||
top: 60%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: 999;
|
||||
}
|
||||
</style>
|
||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||
<h2>商品管理</h2>
|
||||
<button id="add-product-btn" style="display: none">分析商品</button>
|
||||
<button id="refresh-button">刷新</button>
|
||||
<table id="product-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>商品名</th>
|
||||
<th>单价(单位:分)</th>
|
||||
<th>剩余库存</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{# {% for user_profile in user_profiles %}#}
|
||||
{# <tr>#}
|
||||
{# <td>{{ user_profile.user.id }}</td>#}
|
||||
{# <td>{{ user_profile.user.username }}</td>#}
|
||||
{# <td>{{ user_profile.balance }}</td>#}
|
||||
{# <td>{% if user_profile.is_vip %}是{% else %}否{% endif %}</td>#}
|
||||
{# <td>{{ user_profile.face_id }}</td>#}
|
||||
{# <td>#}
|
||||
{# <button class="edit-button" data-user-id="{{ user_profile.user.id }}">修改</button>#}
|
||||
{# <button class="delete-button" data-user-id="{{ user_profile.user.id }}">删除</button>#}
|
||||
{# </td>#}
|
||||
{# </tr>#}
|
||||
{# {% endfor %}#}
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>可乐</td>
|
||||
<td>300</td>
|
||||
<td>20</td>
|
||||
<td>
|
||||
<button class="edit-button" data-product-id="1">分析</button>
|
||||
<button class="delete-button" data-product-id="1">删除</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td>雪碧</td>
|
||||
<td>300</td>
|
||||
<td>20</td>
|
||||
<td>
|
||||
<button class="edit-button" data-product-id="2">分析</button>
|
||||
<button class="delete-button" data-product-id="2">删除</button>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- 弹窗 -->
|
||||
<div id="product-modal" class="modal">
|
||||
<div class="modal-content">
|
||||
<span class="close">×</span>
|
||||
<h3 id="modal-title">分析商品</h3>
|
||||
<form id="product-form">
|
||||
<!-- 商品信息表单字段 -->
|
||||
<input type="hidden" id="product-id" name="product-id">
|
||||
<label for="productname">商品名:</label>
|
||||
<label for="productname">可乐</label>
|
||||
|
||||
<label for="price">单价(单位:分)</label>
|
||||
<label for="price">3.00</label>
|
||||
|
||||
<label for="stock">库存:</label>
|
||||
<label for="stock">20</label>
|
||||
<br>
|
||||
<label for="time">分析时间:</label>
|
||||
<select name="time">
|
||||
<option value="1">一个月</option>
|
||||
<option value="2">一年</option>
|
||||
</select>
|
||||
<!-- 保存和取消按钮 -->
|
||||
<div class="modal-buttons">
|
||||
<button type="submit" class="save-button">分析</button>
|
||||
<button type="button" class="cancel-button">取消</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 预测结果图片 -->
|
||||
<div class="modal-img" style="display: none">
|
||||
<img src="https://ooo.0x0.ooo/2023/11/14/OeRNLj.png" alt="预测结果" width="100%">
|
||||
<img src="https://ooo.0x0.ooo/2023/11/14/OeRAFU.png" alt="预测结果" width="100%">
|
||||
</div>
|
||||
|
||||
<div class="loading" style="display: none">
|
||||
<img src="https://www.sucaijishi.com/uploadfile/2018/0919/20180919030732302.gif" alt="加载中..." >
|
||||
</div>
|
||||
<script>
|
||||
// 弹窗显示和隐藏
|
||||
var modal = document.getElementById("product-modal");
|
||||
var btn = document.getElementById("add-product-btn");
|
||||
var span = document.getElementsByClassName("close")[0];
|
||||
var form = document.getElementById("product-form");
|
||||
var modalTitle = document.getElementById("modal-title");
|
||||
var productIdField = document.getElementById("product-id");
|
||||
|
||||
btn.onclick = function () {
|
||||
modalTitle.textContent = "添加商品";
|
||||
form.reset();
|
||||
modal.style.display = "block";
|
||||
}
|
||||
|
||||
span.onclick = function () {
|
||||
modal.style.display = "none";
|
||||
}
|
||||
|
||||
window.onclick = function (event) {
|
||||
if (event.target == modal) {
|
||||
modal.style.display = "none";
|
||||
}
|
||||
}
|
||||
|
||||
// 刷新按钮点击事件
|
||||
var refreshButton = document.getElementById("refresh-button");
|
||||
refreshButton.addEventListener("click", function () {
|
||||
// 在这里可以执行获取最新内容的操作
|
||||
// 例如:通过 AJAX 请求获取最新的商品列表数据并刷新表格内容
|
||||
});
|
||||
|
||||
// 页面加载完成后执行的操作
|
||||
window.addEventListener("load", function () {
|
||||
// 在这里可以执行页面加载完成后的操作
|
||||
// 例如:初始化页面、获取初始数据等
|
||||
});
|
||||
|
||||
// 修改按钮点击事件
|
||||
var editButtons = document.querySelectorAll(".edit-button");
|
||||
editButtons.forEach(function (button) {
|
||||
button.addEventListener("click", function () {
|
||||
var productId = button.getAttribute("data-product-id");
|
||||
modalTitle.textContent = "分析商品";
|
||||
productIdField.value = productId;
|
||||
// 根据商品ID获取其他商品信息并填充到表单中
|
||||
// 可以通过 AJAX 请求获取商品信息
|
||||
// 然后将商品信息填充到表单字段中
|
||||
modal.style.display = "block";
|
||||
});
|
||||
});
|
||||
|
||||
// 删除按钮点击事件
|
||||
var deleteButtons = document.querySelectorAll(".delete-button");
|
||||
deleteButtons.forEach(function (button) {
|
||||
button.addEventListener("click", function () {
|
||||
var productId = button.getAttribute("data-product-id");
|
||||
// 根据商品ID执行删除商品操作
|
||||
// 可以通过 AJAX 请求将商品ID发送到后端进行删除
|
||||
// 然后可以根据返回的结果刷新商品列表或进行其他操作
|
||||
});
|
||||
});
|
||||
|
||||
// 添加/编辑商品表单提交
|
||||
form.addEventListener("submit", function (event) {
|
||||
event.preventDefault();
|
||||
var productId = productIdField.value;
|
||||
// 在这里可以通过 JavaScript 获取表单字段的值,进行保存等操作
|
||||
// 例如:通过 AJAX 请求将表单数据发送到后端进行保存
|
||||
// 然后可以根据返回的结果刷新商品列表或进行其他操作
|
||||
modal.style.display = "none";
|
||||
});
|
||||
|
||||
// 取消按钮点击事件
|
||||
var cancelButton = document.querySelector(".cancel-button");
|
||||
cancelButton.addEventListener("click", function () {
|
||||
modal.style.display = "none";
|
||||
});
|
||||
$(document).ready(function() {
|
||||
// 添加商品按钮点击事件
|
||||
$('#add-product-btn').click(function() {
|
||||
// 显示弹窗
|
||||
$('#product-modal').show();
|
||||
$('.overlay').show();
|
||||
$('#modal-title').text('分析商品');
|
||||
});
|
||||
|
||||
// 关闭弹窗按钮点击事件
|
||||
$('.close').click(function() {
|
||||
// 隐藏弹窗
|
||||
$('#product-modal').hide();
|
||||
$('.overlay').hide();
|
||||
});
|
||||
|
||||
// 取消按钮点击事件
|
||||
$('.cancel-button').click(function() {
|
||||
// 隐藏弹窗
|
||||
$('#product-modal').hide();
|
||||
$('.overlay').hide();
|
||||
});
|
||||
|
||||
//保存按钮点击事件
|
||||
$('.save-button').click(function() {
|
||||
// 隐藏弹窗
|
||||
//控制台输出
|
||||
console.log("分析商品");
|
||||
$('.loading').show();
|
||||
$('#product-modal').hide();
|
||||
$('.overlay').hide();
|
||||
//延时三秒
|
||||
setTimeout(function() {
|
||||
//显示图片
|
||||
$('.loading').hide();
|
||||
$('.modal-img').show();
|
||||
}, 5000);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
@ -0,0 +1,232 @@
|
||||
/************************************************************
|
||||
** 登录页 CSS **
|
||||
************************************************************/
|
||||
|
||||
html {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',
|
||||
'Droid Sans', 'Helvetica Neue', 'Microsoft Yahei', sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
body * {
|
||||
box-sizing: border-box;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.flex-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.flex-col {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.justify-start {
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
|
||||
.justify-between {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.items-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.self-center {
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
/** 清理默认样式 **/
|
||||
|
||||
a {
|
||||
color: unset;
|
||||
text-decoration: unset;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: unset;
|
||||
border-style: unset;
|
||||
background-color: unset;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin: unset;
|
||||
font-size: unset;
|
||||
font-weight: unset;
|
||||
}
|
||||
|
||||
input,
|
||||
textarea {
|
||||
padding: unset;
|
||||
outline: unset;
|
||||
border-style: unset;
|
||||
background-color: unset;
|
||||
resize: unset;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: unset;
|
||||
}
|
||||
|
||||
select {
|
||||
outline: unset;
|
||||
border-style: unset;
|
||||
}
|
||||
|
||||
table {
|
||||
border-spacing: unset;
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
margin: unset;
|
||||
padding: unset;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.page {
|
||||
padding: 25px 14px 30px 17px;
|
||||
background-image: linear-gradient(90deg, #e7e5c300 35.9%, #e6dfdc 64.1%);
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
height: 100%;
|
||||
}
|
||||
.space-y-26 > *:not(:first-child) {
|
||||
margin-top: 26px;
|
||||
}
|
||||
.section {
|
||||
padding: 22px 21px 22px 25px;
|
||||
background-color: #43cf7ccc;
|
||||
border-radius: 15px;
|
||||
}
|
||||
.space-x-24 > *:not(:first-child) {
|
||||
margin-left: 24px;
|
||||
}
|
||||
.logo-img {
|
||||
width: 157px;
|
||||
height: 157px;
|
||||
}
|
||||
.space-y-16 > *:not(:first-child) {
|
||||
margin-top: 16px;
|
||||
}
|
||||
.text {
|
||||
color: #ffffff;
|
||||
font-size: 72px;
|
||||
font-family: SourceHanSansCN;
|
||||
font-weight: 700;
|
||||
line-height: 68.5px;
|
||||
}
|
||||
.text_3 {
|
||||
color: #ffffff;
|
||||
font-size: 40px;
|
||||
font-family: HarmonyOSSansSC;
|
||||
font-weight: 700;
|
||||
line-height: 31px;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
.text-wrapper {
|
||||
padding: 32px 0 34px;
|
||||
background-color: #00baad8a;
|
||||
border-radius: 10px;
|
||||
height: 139px;
|
||||
}
|
||||
.text_2 {
|
||||
margin-left: 26px;
|
||||
margin-right: 20px;
|
||||
color: #ffffff;
|
||||
font-size: 80px;
|
||||
font-family: AlimamaShuHeiTi;
|
||||
line-height: 74px;
|
||||
}
|
||||
.text-wrapper_2 {
|
||||
padding: 28px 0 24px;
|
||||
background-color: #00baad8a;
|
||||
border-radius: 15px;
|
||||
}
|
||||
.font_1 {
|
||||
font-size: 45px;
|
||||
font-family: SourceHanSansCN;
|
||||
font-weight: 800;
|
||||
color: #ffffff;
|
||||
}
|
||||
.text_4 {
|
||||
line-height: 43.5px;
|
||||
}
|
||||
.section_2 {
|
||||
padding: 93px 134px 148px;
|
||||
background-image: linear-gradient(225.1deg, #6d819c 21.1%, #55967e 79.8%);
|
||||
border-radius: 15px;
|
||||
}
|
||||
.image_2 {
|
||||
width: 480px;
|
||||
height: 360px;
|
||||
}
|
||||
.text-wrapper_3 {
|
||||
margin-top: 83px;
|
||||
padding: 28px 0 22px;
|
||||
background-color: #cccccca6;
|
||||
border-radius: 15px;
|
||||
}
|
||||
.text_5 {
|
||||
line-height: 46.5px;
|
||||
letter-spacing: 1.5px;
|
||||
}
|
||||
.text-wrapper_4 {
|
||||
align-self: center;
|
||||
margin-top: 79px;
|
||||
}
|
||||
.view {
|
||||
padding: 42px 0 40px;
|
||||
background-color: #43cf7c99;
|
||||
border-radius: 15px;
|
||||
width: 399px;
|
||||
}
|
||||
.footer-img {
|
||||
border-radius: 15px;
|
||||
/* width: 1048px;
|
||||
height: 492px;
|
||||
margin: auto; */
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
.button {
|
||||
color: #ffffff;
|
||||
font-size: 60px;
|
||||
font-family: SourceHanSansCN;
|
||||
font-weight: 800;
|
||||
line-height: 58px;
|
||||
letter-spacing: 2px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.button:hover {
|
||||
background-color: #43cf7bdf;
|
||||
}
|
||||
.overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
@ -0,0 +1,264 @@
|
||||
/************************************************************
|
||||
** 登录页面 CSS **
|
||||
************************************************************/
|
||||
|
||||
html {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans',
|
||||
'Droid Sans', 'Helvetica Neue', 'Microsoft Yahei', sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
body * {
|
||||
box-sizing: border-box;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.flex-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.flex-col {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.justify-start {
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.justify-between {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.items-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.self-center {
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
/** 清理默认样式 **/
|
||||
|
||||
a {
|
||||
color: unset;
|
||||
text-decoration: unset;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: unset;
|
||||
border-style: unset;
|
||||
background-color: unset;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin: unset;
|
||||
font-size: unset;
|
||||
font-weight: unset;
|
||||
}
|
||||
|
||||
input,
|
||||
textarea {
|
||||
padding: unset;
|
||||
outline: unset;
|
||||
border-style: unset;
|
||||
background-color: unset;
|
||||
resize: unset;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: unset;
|
||||
}
|
||||
|
||||
select {
|
||||
outline: unset;
|
||||
border-style: unset;
|
||||
}
|
||||
|
||||
table {
|
||||
border-spacing: unset;
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
margin: unset;
|
||||
padding: unset;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.page {
|
||||
padding: 25px 14px 30px 17px;
|
||||
background-image: linear-gradient(90deg, #e7e5c300 35.9%, #e6dfdc 64.1%);
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
height: 100%;
|
||||
}
|
||||
.space-y-26 > *:not(:first-child) {
|
||||
margin-top: 26px;
|
||||
}
|
||||
.section {
|
||||
padding: 22px 21px 22px 25px;
|
||||
background-color: #43cf7ccc;
|
||||
border-radius: 15px;
|
||||
}
|
||||
.space-x-24 > *:not(:first-child) {
|
||||
margin-left: 24px;
|
||||
}
|
||||
.logo-img {
|
||||
width: 157px;
|
||||
height: 157px;
|
||||
}
|
||||
.space-y-16 > *:not(:first-child) {
|
||||
margin-top: 16px;
|
||||
}
|
||||
.text {
|
||||
color: #ffffff;
|
||||
font-size: 72px;
|
||||
font-family: SourceHanSansCN;
|
||||
font-weight: 700;
|
||||
line-height: 68.5px;
|
||||
}
|
||||
.text_3 {
|
||||
color: #ffffff;
|
||||
font-size: 40px;
|
||||
font-family: SourceHanSansCN;
|
||||
font-weight: 700;
|
||||
line-height: 31px;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
.text-wrapper {
|
||||
padding: 32px 0 34px;
|
||||
background-color: #00baad8a;
|
||||
border-radius: 10px;
|
||||
height: 139px;
|
||||
}
|
||||
.text_2 {
|
||||
margin-left: 26px;
|
||||
margin-right: 20px;
|
||||
color: #ffffff;
|
||||
font-size: 80px;
|
||||
font-family: AlimamaShuHeiTi;
|
||||
line-height: 74px;
|
||||
}
|
||||
.text-wrapper_2 {
|
||||
padding: 28px 0 22px;
|
||||
background-color: #00baad8a;
|
||||
border-radius: 15px;
|
||||
}
|
||||
.font_1 {
|
||||
font-size: 45px;
|
||||
font-family: SourceHanSansCN;
|
||||
letter-spacing: 2px;
|
||||
line-height: 52px;
|
||||
font-weight: 800;
|
||||
color: #ffffff;
|
||||
}
|
||||
.text_4 {
|
||||
line-height: 46px;
|
||||
letter-spacing: unset;
|
||||
}
|
||||
.section_2 {
|
||||
padding: 72px 248px 60px;
|
||||
background-image: linear-gradient(225.1deg, #6d819c 21.1%, #55967e 79.8%);
|
||||
border-radius: 15px;
|
||||
}
|
||||
.text_5 {
|
||||
line-height: 51.5px;
|
||||
}
|
||||
.view_1 {
|
||||
margin-right: 3px;
|
||||
margin-top: 26px;
|
||||
}
|
||||
.text_6 {
|
||||
margin-top: 40px;
|
||||
}
|
||||
.view {
|
||||
margin-right: 4px;
|
||||
margin-top: 26px;
|
||||
}
|
||||
.section_3 {
|
||||
background-color: #cccccca6;
|
||||
border-radius: 15px;
|
||||
height: 96px;
|
||||
}
|
||||
.text_7 {
|
||||
margin-top: 40px;
|
||||
}
|
||||
.text-wrapper_3 {
|
||||
align-self: center;
|
||||
margin-top: 54px;
|
||||
}
|
||||
.view_3 {
|
||||
padding: 44px 0 38px;
|
||||
background-color: #43cf7c99;
|
||||
border-radius: 15px;
|
||||
width: 315px;
|
||||
}
|
||||
.text_9 {
|
||||
align-self: center;
|
||||
margin-top: 36px;
|
||||
color: #e5e5e5;
|
||||
font-size: 36px;
|
||||
font-family: SourceHanSansCN;
|
||||
font-weight: 800;
|
||||
line-height: 34.5px;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
.text_9:hover {
|
||||
color: #e5e5e597;
|
||||
}
|
||||
.footer-img {
|
||||
border-radius: 15px;
|
||||
/* width: 1048px;
|
||||
height: 492px;
|
||||
margin: auto; */
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
.input {
|
||||
padding: 10px 10px 10px 10px;
|
||||
color: #ffffff;
|
||||
font-size: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
.button {
|
||||
color: #ffffff;
|
||||
font-size: 60px;
|
||||
font-family: SourceHanSansCN;
|
||||
font-weight: 800;
|
||||
line-height: 57.5px;
|
||||
letter-spacing: 2px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.button:hover {
|
||||
background-color: #43cf7bdf;
|
||||
}
|
||||
|
||||
.overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<title>欢迎使用 - 无人超市</title>
|
||||
<link rel="stylesheet" href="../static/css/logIn.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="flex-col page space-y-26">
|
||||
<div class="flex-row justify-between items-center section">
|
||||
<div class="flex-row items-center space-x-24">
|
||||
<img class="logo-img" src="../static/img/logo.png"/>
|
||||
<div class="flex-col items-center space-y-16">
|
||||
<span class="text">无人超市</span>
|
||||
<span class="text_3">Smart Market</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-col justify-start text-wrapper"><span class="text_2">用户登录</span></div>
|
||||
</div>
|
||||
<div class="flex-col justify-start items-center text-wrapper_2">
|
||||
<span class="font_1 text_4">欢迎使用无人超市</span>
|
||||
</div>
|
||||
<div class="flex-col section_2">
|
||||
<img
|
||||
class="self-center image_2"
|
||||
src="../static/img/face-unscreen.gif"
|
||||
/>
|
||||
<div class="flex-col justify-start items-center text-wrapper_3">
|
||||
<span class="font_1 text_5">请靠近机器,以进行人脸识别</span>
|
||||
</div>
|
||||
<button class="flex-col justify-start items-center text-wrapper_4 view button"
|
||||
onclick="location.href=('../sign')">新用户注册
|
||||
</button>
|
||||
</div>
|
||||
<img class="footer-img" src="../static/img/7x24.png"/>
|
||||
</div>
|
||||
</body>
|
||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||
<script>
|
||||
// JavaScript代码显示和隐藏蒙版
|
||||
|
||||
$(document).ready(function () {
|
||||
// 发送GET请求到API
|
||||
$.get('/rec/', function (data) {
|
||||
if (data.error) {
|
||||
alert('API请求失败');
|
||||
} else {
|
||||
$('.text_5').text('欢迎,' + data.username);
|
||||
//三秒后跳转到/cart/
|
||||
setTimeout(function () {
|
||||
window.location.href = "/cart/?username=" + data.username;
|
||||
$.get('/cleanrfid/', function (data) {
|
||||
if (data.error) {
|
||||
alert('API请求失败');
|
||||
}
|
||||
});
|
||||
}, 3000);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</html>
|
@ -0,0 +1,78 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<title>用户注册 - 无人超市</title>
|
||||
<link rel="stylesheet" href="../static/css/signUp.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="flex-col page space-y-26">
|
||||
<div class="flex-row justify-between items-center section">
|
||||
<div class="flex-row items-center space-x-24">
|
||||
<img class="logo-img" src="../static/img/logo.png">
|
||||
<div class="flex-col items-center space-y-16">
|
||||
<span class="text">无人超市</span>
|
||||
<span class="text_3">Smart Market</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-col justify-start text-wrapper"><span class="text_2">用户注册</span></div>
|
||||
</div>
|
||||
<div class="flex-col justify-start items-center text-wrapper_2">
|
||||
<span class="font_1 text_4">注册会员,开始享受便捷的购物体验吧!</span>
|
||||
</div>
|
||||
<form onsubmit="return false;">
|
||||
<div class="flex-col section_2">
|
||||
<span class="self-center font_1 text_5">用户名 | User Name</span>
|
||||
<input class="view_1 section_3 input" name="用户名" maxlength="12" type="text" value=""
|
||||
placeholder="请输入用户名"/>
|
||||
<span class="self-center font_1 text_6">密码 | Password</span>
|
||||
<input class="view section_3 input" name="密码" maxlength="16" type="password" placeholder="请输入密码"/>
|
||||
<span class="self-center font_1 text_7">确认密码 | Confirm</span>
|
||||
<input class="view_1 section_3 input" name="确认密码" maxlength="16" type="password"
|
||||
placeholder="请再次输入密码"/>
|
||||
<button class="flex-col justify-start items-center text-wrapper_3 view_3 button" name="提交"
|
||||
onclick="onClick()">提交
|
||||
</button>
|
||||
<a class="text_9" href="../login">返回登录</a>
|
||||
</div>
|
||||
</form>
|
||||
<img class="footer-img" src="../static/img/7x24.png"/>
|
||||
</div>
|
||||
<div class="overlay">
|
||||
<div class="flex-col section_2">
|
||||
<img
|
||||
class="self-center image_2"
|
||||
src="../static/img/face-unscreen.gif"
|
||||
/>
|
||||
<div class="flex-col justify-start items-center text-wrapper_3">
|
||||
<span class="font_1 text_5">请靠近机器,以进行人脸识别</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||
<script>
|
||||
$('.overlay').hide();
|
||||
|
||||
function onClick() {
|
||||
$('.overlay').show();
|
||||
var username = document.querySelector('input[name="用户名"]').value;
|
||||
var postData = {
|
||||
username: username
|
||||
};
|
||||
$.post('/reg/', postData, function (data) {
|
||||
if (data.error) {
|
||||
alert('API请求失败');
|
||||
} else {
|
||||
$('.text_5').text('欢迎,' + postData.username);
|
||||
//三秒后跳转到/cart/
|
||||
setTimeout(function () {
|
||||
window.location.href = "/login";
|
||||
}, 3000);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
After Width: | Height: | Size: 491 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 9.5 KiB |
Loading…
Reference in new issue