203 lines
9.0 KiB
HTML
203 lines
9.0 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}我的评价 - 太白购物商城{% endblock %}
|
|
|
|
{% block head %}
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/review.css') }}">
|
|
{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="row">
|
|
<!-- 侧边栏 -->
|
|
<div class="col-md-3">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5><i class="bi bi-person-circle"></i> 个人中心</h5>
|
|
</div>
|
|
<div class="list-group list-group-flush">
|
|
<a href="{{ url_for('user.profile') }}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-person"></i> 基本信息
|
|
</a>
|
|
<a href="{{ url_for('user.orders') }}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-bag"></i> 我的订单
|
|
</a>
|
|
<a href="{{ url_for('address.index') }}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-geo-alt"></i> 收货地址
|
|
</a>
|
|
<a href="{{ url_for('review.my_reviews') }}" class="list-group-item list-group-item-action active">
|
|
<i class="bi bi-star"></i> 我的评价
|
|
</a>
|
|
<a href="{{ url_for('favorite.index') }}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-heart"></i> 我的收藏
|
|
</a>
|
|
<a href="{{ url_for('favorite.index') }}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-clock-history"></i> 浏览历史
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 主要内容 -->
|
|
<div class="col-md-9">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5><i class="bi bi-star"></i> 我的评价</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
{% if reviews.items %}
|
|
{% for review in reviews.items %}
|
|
<div class="review-item">
|
|
<div class="row">
|
|
<div class="col-md-3">
|
|
<img src="{{ review.product.main_image or '/static/images/default-product.jpg' }}"
|
|
class="img-fluid rounded" alt="{{ review.product.name }}">
|
|
</div>
|
|
<div class="col-md-9">
|
|
<h6 class="mb-2">
|
|
<a href="{{ url_for('main.product_detail', product_id=review.product_id) }}"
|
|
class="text-decoration-none">{{ review.product.name }}</a>
|
|
</h6>
|
|
|
|
<!-- 评分 -->
|
|
<div class="rating-display mb-2">
|
|
<span class="stars">{{ review.get_rating_stars() }}</span>
|
|
<span class="text-muted">{{ review.rating }}分</span>
|
|
</div>
|
|
|
|
<!-- 评价内容 -->
|
|
{% if review.content %}
|
|
<p class="review-content">{{ review.content }}</p>
|
|
{% endif %}
|
|
|
|
<!-- 评价图片 -->
|
|
{% if review.get_images() %}
|
|
<div class="review-images mb-2">
|
|
{% for image_url in review.get_images() %}
|
|
<img src="{{ image_url }}" class="review-image-thumb" alt="评价图片"
|
|
onclick="showImageModal('{{ image_url }}')">
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
<!-- 评价信息 -->
|
|
<div class="review-meta">
|
|
<small class="text-muted">
|
|
评价时间:{{ review.created_at.strftime('%Y-%m-%d %H:%M') }}
|
|
{% if review.is_anonymous %}
|
|
| 匿名评价
|
|
{% endif %}
|
|
</small>
|
|
<div class="float-end">
|
|
<button class="btn btn-outline-danger btn-sm"
|
|
onclick="deleteReview({{ review.id }})">
|
|
<i class="bi bi-trash"></i> 删除
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
|
|
<!-- 分页 -->
|
|
{% if reviews.pages > 1 %}
|
|
<nav aria-label="评价分页">
|
|
<ul class="pagination justify-content-center">
|
|
{% if reviews.has_prev %}
|
|
<li class="page-item">
|
|
<a class="page-link" href="{{ url_for('review.my_reviews', page=reviews.prev_num) }}">上一页</a>
|
|
</li>
|
|
{% endif %}
|
|
|
|
{% for page_num in reviews.iter_pages() %}
|
|
{% if page_num %}
|
|
{% if page_num != reviews.page %}
|
|
<li class="page-item">
|
|
<a class="page-link" href="{{ url_for('review.my_reviews', page=page_num) }}">{{ page_num }}</a>
|
|
</li>
|
|
{% else %}
|
|
<li class="page-item active">
|
|
<span class="page-link">{{ page_num }}</span>
|
|
</li>
|
|
{% endif %}
|
|
{% else %}
|
|
<li class="page-item disabled">
|
|
<span class="page-link">…</span>
|
|
</li>
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
{% if reviews.has_next %}
|
|
<li class="page-item">
|
|
<a class="page-link" href="{{ url_for('review.my_reviews', page=reviews.next_num) }}">下一页</a>
|
|
</li>
|
|
{% endif %}
|
|
</ul>
|
|
</nav>
|
|
{% endif %}
|
|
|
|
{% else %}
|
|
<div class="text-center empty-state">
|
|
<i class="bi bi-star display-1 text-muted"></i>
|
|
<h5 class="mt-3 text-muted">暂无评价</h5>
|
|
<p class="text-muted">您还没有发表过商品评价</p>
|
|
<a href="{{ url_for('main.index') }}" class="btn btn-primary">
|
|
<i class="bi bi-shop"></i> 去购物
|
|
</a>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 图片查看模态框 -->
|
|
<div class="modal fade" id="imageModal" tabindex="-1">
|
|
<div class="modal-dialog modal-lg">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title">查看图片</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
|
</div>
|
|
<div class="modal-body text-center">
|
|
<img id="modalImage" src="" class="img-fluid" alt="评价图片">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block scripts %}
|
|
<script src="{{ url_for('static', filename='js/review.js') }}"></script>
|
|
<script>
|
|
function showImageModal(imageUrl) {
|
|
document.getElementById('modalImage').src = imageUrl;
|
|
new bootstrap.Modal(document.getElementById('imageModal')).show();
|
|
}
|
|
|
|
function deleteReview(reviewId) {
|
|
if (confirm('确定要删除这条评价吗?')) {
|
|
fetch(`/review/delete/${reviewId}`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
}
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
showAlert(data.message, 'success');
|
|
setTimeout(() => {
|
|
window.location.reload();
|
|
}, 1000);
|
|
} else {
|
|
showAlert(data.message, 'error');
|
|
}
|
|
})
|
|
.catch(error => {
|
|
showAlert('删除失败', 'error');
|
|
});
|
|
}
|
|
}
|
|
</script>
|
|
{% endblock %}
|