页面(
This commit is contained in:
@@ -59,7 +59,7 @@
|
|||||||
<div class="profile-details">
|
<div class="profile-details">
|
||||||
<p><span class="label">用户名:</span> {{ profile_user.username }}</p>
|
<p><span class="label">用户名:</span> {{ profile_user.username }}</p>
|
||||||
<p><span class="label">用户ID:</span> {{ profile_user.user_id }}</p>
|
<p><span class="label">用户ID:</span> {{ profile_user.user_id }}</p>
|
||||||
<p><span class="label">所属班级:</span> {{ user_class|default:"未填写" }}</p>
|
<p><span class="label">所属:</span> {{ profile_user.key|join:"、"|default:"未填写" }}</p>
|
||||||
<p><span class="label">权限级别:</span> {{ permission_name }}</p>
|
<p><span class="label">权限级别:</span> {{ permission_name }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -74,6 +74,9 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
<div style="height: 150px; background: #eee; display: flex; align-items: center; justify-content: center; color: #ccc;">无图片</div>
|
<div style="height: 150px; background: #eee; display: flex; align-items: center; justify-content: center; color: #ccc;">无图片</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<div style="padding: 8px; text-align: center;">
|
||||||
|
<a href="{% url 'elastic:manage_page' %}?id={{ item.id }}" style="display: inline-block; padding: 4px 12px; background: #eef2ff; color: #4f46e5; text-decoration: none; border-radius: 4px; font-size: 12px; transition: background 0.2s;">管理此条</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -90,16 +90,11 @@ def profile_page(request):
|
|||||||
raw_results = [r for r in search_all() if str(r.get("writer_id", "")) == str(session_user_id)]
|
raw_results = [r for r in search_all() if str(r.get("writer_id", "")) == str(session_user_id)]
|
||||||
achievements = _attach_image_urls(request, raw_results)
|
achievements = _attach_image_urls(request, raw_results)
|
||||||
|
|
||||||
# 提取班级信息 (key 字段中的第一个值)
|
|
||||||
keys = user.get("key") or []
|
|
||||||
user_class = keys[0] if keys else ""
|
|
||||||
|
|
||||||
permission_name = "管理员" if int(user.get("permission", 1)) == 0 else "普通用户"
|
permission_name = "管理员" if int(user.get("permission", 1)) == 0 else "普通用户"
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
"username": request.session.get("username"),
|
"username": request.session.get("username"),
|
||||||
"profile_user": user,
|
"profile_user": user,
|
||||||
"user_class": user_class,
|
|
||||||
"permission_name": permission_name,
|
"permission_name": permission_name,
|
||||||
"achievements": achievements,
|
"achievements": achievements,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -793,25 +793,6 @@ def write_user_data(user_data):
|
|||||||
print(f"用户数据写入失败: {str(e)}")
|
print(f"用户数据写入失败: {str(e)}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get_user_by_id(user_id):
|
|
||||||
try:
|
|
||||||
search = UserDocument.search()
|
|
||||||
search = search.query("term", user_id=user_id)
|
|
||||||
response = search.execute()
|
|
||||||
|
|
||||||
if response.hits:
|
|
||||||
hit = response.hits[0]
|
|
||||||
return {
|
|
||||||
"user_id": hit.user_id,
|
|
||||||
"username": hit.username,
|
|
||||||
"permission": hit.permission
|
|
||||||
}
|
|
||||||
return None
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
print(f"获取用户数据失败: {str(e)}")
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_user_by_username(username):
|
def get_user_by_username(username):
|
||||||
"""
|
"""
|
||||||
根据用户名获取用户数据
|
根据用户名获取用户数据
|
||||||
|
|||||||
@@ -307,7 +307,7 @@ function renderTable(data) {
|
|||||||
|
|
||||||
if (!data || data.length === 0) {
|
if (!data || data.length === 0) {
|
||||||
const row = document.createElement('tr');
|
const row = document.createElement('tr');
|
||||||
row.innerHTML = '<td colspan="5" style="text-align: center; color: #999;">暂无数据</td>';
|
row.innerHTML = '<td colspan="4" style="text-align: center; color: #999;">暂无数据</td>';
|
||||||
tableBody.appendChild(row);
|
tableBody.appendChild(row);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -335,7 +335,16 @@ function renderTable(data) {
|
|||||||
</table>
|
</table>
|
||||||
`;
|
`;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
displayData = `<pre style="white-space:pre-wrap; word-wrap:break-word; max-height: 100px; overflow-y: auto; font-size: 12px; margin: 0;">${escapeHtml(displayData)}</pre>`;
|
displayData = `
|
||||||
|
<table class="inner-table">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>原始数据</td>
|
||||||
|
<td>${escapeHtml(displayData)}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
row.innerHTML = `
|
row.innerHTML = `
|
||||||
|
|||||||
@@ -23,6 +23,36 @@ from .es_connect import (
|
|||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
|
|
||||||
|
def _filter_results_for_user(request, results):
|
||||||
|
session_user_id = request.session.get("user_id")
|
||||||
|
if session_user_id is None:
|
||||||
|
return []
|
||||||
|
|
||||||
|
me = get_user_by_id(session_user_id) or {}
|
||||||
|
is_admin = int(request.session.get("permission", 1)) == 0
|
||||||
|
|
||||||
|
if is_admin:
|
||||||
|
return results
|
||||||
|
|
||||||
|
uid = str(session_user_id)
|
||||||
|
manage_keys = me.get("manage_key", []) or []
|
||||||
|
|
||||||
|
filtered = []
|
||||||
|
for r in results:
|
||||||
|
# 1. 自己的提交
|
||||||
|
if str(r.get("writer_id", "")) == uid:
|
||||||
|
filtered.append(r)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 2. 管理的提交
|
||||||
|
if manage_keys:
|
||||||
|
r_data = str(r.get("data", ""))
|
||||||
|
for mk in manage_keys:
|
||||||
|
if mk and str(mk) in r_data:
|
||||||
|
filtered.append(r)
|
||||||
|
break
|
||||||
|
return filtered
|
||||||
|
|
||||||
def _image_ref_to_url(request, image_ref: str) -> str:
|
def _image_ref_to_url(request, image_ref: str) -> str:
|
||||||
s = str(image_ref or '').strip()
|
s = str(image_ref or '').strip()
|
||||||
if not s:
|
if not s:
|
||||||
@@ -132,6 +162,7 @@ def search(request):
|
|||||||
return JsonResponse({"status": "error", "message": "搜索关键词不能为空"}, status=400)
|
return JsonResponse({"status": "error", "message": "搜索关键词不能为空"}, status=400)
|
||||||
|
|
||||||
results = search_data(query)
|
results = search_data(query)
|
||||||
|
results = _filter_results_for_user(request, results)
|
||||||
data = _attach_writer_names(_attach_image_urls(request, results))
|
data = _attach_writer_names(_attach_image_urls(request, results))
|
||||||
return JsonResponse({"status": "success", "data": data})
|
return JsonResponse({"status": "success", "data": data})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -147,6 +178,7 @@ def fuzzy_search(request):
|
|||||||
return JsonResponse({"status": "error", "message": "搜索关键词不能为空"}, status=400)
|
return JsonResponse({"status": "error", "message": "搜索关键词不能为空"}, status=400)
|
||||||
|
|
||||||
results = search_by_any_field(keyword)
|
results = search_by_any_field(keyword)
|
||||||
|
results = _filter_results_for_user(request, results)
|
||||||
data = _attach_writer_names(_attach_image_urls(request, results))
|
data = _attach_writer_names(_attach_image_urls(request, results))
|
||||||
return JsonResponse({"status": "success", "data": data})
|
return JsonResponse({"status": "success", "data": data})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -156,7 +188,13 @@ def fuzzy_search(request):
|
|||||||
def get_all_data(request):
|
def get_all_data(request):
|
||||||
"""获取所有数据"""
|
"""获取所有数据"""
|
||||||
try:
|
try:
|
||||||
|
session_user_id = request.session.get("user_id")
|
||||||
|
if session_user_id is None:
|
||||||
|
return JsonResponse({"status": "error", "message": "未登录"}, status=401)
|
||||||
|
|
||||||
results = search_all()
|
results = search_all()
|
||||||
|
results = _filter_results_for_user(request, results)
|
||||||
|
|
||||||
data = _attach_writer_names(_attach_image_urls(request, results))
|
data = _attach_writer_names(_attach_image_urls(request, results))
|
||||||
return JsonResponse({"status": "success", "data": data})
|
return JsonResponse({"status": "success", "data": data})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -694,7 +732,23 @@ def manage_page(request):
|
|||||||
raw_results = search_all()
|
raw_results = search_all()
|
||||||
else:
|
else:
|
||||||
uid = str(session_user_id)
|
uid = str(session_user_id)
|
||||||
raw_results = [r for r in search_all() if str(r.get("writer_id", "")) == uid]
|
manage_keys = me.get("manage_key", []) or []
|
||||||
|
|
||||||
|
all_data = search_all()
|
||||||
|
raw_results = []
|
||||||
|
for r in all_data:
|
||||||
|
# 1. 自己的提交
|
||||||
|
if str(r.get("writer_id", "")) == uid:
|
||||||
|
raw_results.append(r)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 2. 管理的提交 (检查 data 中是否包含 manage_key)
|
||||||
|
if manage_keys:
|
||||||
|
r_data = str(r.get("data", ""))
|
||||||
|
for mk in manage_keys:
|
||||||
|
if mk and str(mk) in r_data:
|
||||||
|
raw_results.append(r)
|
||||||
|
break
|
||||||
|
|
||||||
results = []
|
results = []
|
||||||
for r in raw_results:
|
for r in raw_results:
|
||||||
|
|||||||
@@ -41,8 +41,10 @@
|
|||||||
<div class="navigation-links">
|
<div class="navigation-links">
|
||||||
<a href="{% url 'main:home' %}" onclick="return handleNavClick(this, '/');">主页</a>
|
<a href="{% url 'main:home' %}" onclick="return handleNavClick(this, '/');">主页</a>
|
||||||
<a href="{% url 'elastic:upload_page' %}" onclick="return handleNavClick(this, '/elastic/upload/');">图片上传与识别</a>
|
<a href="{% url 'elastic:upload_page' %}" onclick="return handleNavClick(this, '/elastic/upload/');">图片上传与识别</a>
|
||||||
|
{% if is_admin %}
|
||||||
<a href="{% url 'elastic:manage_page' %}" onclick="return handleNavClick(this, '/elastic/manage/');">数据管理</a>
|
<a href="{% url 'elastic:manage_page' %}" onclick="return handleNavClick(this, '/elastic/manage/');">数据管理</a>
|
||||||
<a href="{% url 'elastic:user_manage' %}" onclick="return handleNavClick(this, '/elastic/user_manage/');">用户管理</a>
|
<a href="{% url 'elastic:user_manage' %}" onclick="return handleNavClick(this, '/elastic/user_manage/');">用户管理</a>
|
||||||
|
{% endif %}
|
||||||
<a href="/accounts/profile/">个人中心</a>
|
<a href="/accounts/profile/">个人中心</a>
|
||||||
{% if is_admin %}
|
{% if is_admin %}
|
||||||
<a href="{% url 'elastic:registration_code_manage_page' %}" onclick="return handleNavClick(this, '/elastic/registration-codes/manage/');">注册码管理</a>
|
<a href="{% url 'elastic:registration_code_manage_page' %}" onclick="return handleNavClick(this, '/elastic/registration-codes/manage/');">注册码管理</a>
|
||||||
|
|||||||
Reference in New Issue
Block a user