diff --git a/backend/app/main.py b/backend/app/main.py
index c152ba2..b21db6d 100644
--- a/backend/app/main.py
+++ b/backend/app/main.py
@@ -1039,6 +1039,11 @@ def _ask_assignment_data(
"product_name": assignment.task.product_name,
"product_link": assignment.task.product_link,
"product_qr": _product_qr_data(assignment.task),
+ "creator_name": (
+ assignment.task.owner.display_name
+ if assignment.task.owner
+ else "运营后台"
+ ),
"user_id": _public_user_id(assignment.user),
"taobao_id": assignment.user.taobao_id,
"phone": _public_user_account(assignment.user),
@@ -2915,7 +2920,9 @@ def admin_task_board(
answer_filter = or_(
AnswerSubmission.submission_no.like(pattern),
AnswerSubmission.shop_name.like(pattern),
- AnswerSubmission.product_name.like(pattern),
+ AnswerSubmission.questions.any(
+ AnswerRecognizedQuestion.product_title.like(pattern)
+ ),
AnswerSubmission.user.has(or_(
AnswerUser.taobao_id.like(pattern),
AnswerUser.public_id.like(pattern),
diff --git a/backend/tests/test_auth.py b/backend/tests/test_auth.py
index b8020bc..64379a5 100644
--- a/backend/tests/test_auth.py
+++ b/backend/tests/test_auth.py
@@ -413,6 +413,9 @@ def test_ask_review_detail_loads_screenshots_from_protected_endpoint():
)
db.add_all([public_user, task])
db.flush()
+ task_id = task.id
+ task_no = task.task_no
+ creator_name = owner.display_name
question = main_module.AskQuestion(
task_id=task.id,
sequence_no=1,
@@ -456,17 +459,25 @@ def test_ask_review_detail_loads_screenshots_from_protected_endpoint():
])
db.commit()
batch_id = batch.id
+ assignment_id = assignment.id
detail = client.get(f"/api/admin/ask-batch-reviews/{batch_id}")
assert detail.status_code == 200
data = detail.json()["data"]
assert "base64" not in detail.text
+ assert data["creator_name"] == creator_name
question_url = data["question_screenshots"][0]["data_url"]
payment_url = data["payment_screenshots"][0]["data_url"]
assert question_url.startswith("/api/admin/ask-batch-screenshots/")
assert client.get(question_url).content == b"ask-question-image"
assert client.get(payment_url).content == b"ask-payment-image"
+ search = client.get("/api/admin/task-board", params={"keyword": task_no})
+ assert search.status_code == 200
+ assert search.json()["data"]["total"] == 1
+ assert search.json()["data"]["items"][0]["task_id"] == task_no
+ assert search.json()["data"]["items"][0]["creator_name"] == creator_name
+
decision = client.post(
f"/api/admin/ask-batch-reviews/{batch_id}/decision",
json={"approved": True},
@@ -475,6 +486,13 @@ def test_ask_review_detail_loads_screenshots_from_protected_endpoint():
assert "base64" not in decision.text
assert decision.json()["data"]["latest_review"]["approved"] is True
+ deleted = client.delete(f"/api/admin/task-board/ask-tasks/{task_id}")
+ assert deleted.status_code == 200
+ with main_module.SessionLocal() as db:
+ assert db.get(main_module.AskTask, task_id) is None
+ assert db.get(main_module.AskAssignment, assignment_id) is None
+ assert db.get(main_module.AskAssignmentBatch, batch_id) is None
+
def test_failed_answer_recognition_has_no_fake_questions_and_can_retry(monkeypatch):
unique = uuid4().hex[:10]
diff --git a/frontend/src/ReviewCenterPage.jsx b/frontend/src/ReviewCenterPage.jsx
index c185779..b075a12 100644
--- a/frontend/src/ReviewCenterPage.jsx
+++ b/frontend/src/ReviewCenterPage.jsx
@@ -284,6 +284,7 @@ function AskReviewDetail({ record, close, api, onDecision, hasNext, onNext, next
{record.user_id}
{record.task_id}
商品:{record.product_name}
+ 创建人:{record.creator_name || "运营后台"}
提交时间:{formatTime(record.updated_at)}