修改完善这个专利部分
This commit is contained in:
@@ -5,6 +5,7 @@ import json
|
||||
import os
|
||||
import re
|
||||
import threading
|
||||
from urllib.parse import quote
|
||||
|
||||
import requests
|
||||
from requests.adapters import HTTPAdapter
|
||||
@@ -1217,7 +1218,9 @@ def list_product_categories():
|
||||
_, _, denied = _ensure_product_category_access()
|
||||
if denied:
|
||||
return denied
|
||||
result, error_response, status = _proxy_backend_java('GET', '/api/admin/product-categories')
|
||||
keyword = (request.args.get('keyword') or '').strip()
|
||||
query = f'?keyword={quote(keyword)}' if keyword else ''
|
||||
result, error_response, status = _proxy_backend_java('GET', f'/api/admin/product-categories{query}')
|
||||
if error_response is not None:
|
||||
return error_response, status
|
||||
payload = result.get('data') or {}
|
||||
@@ -1225,6 +1228,76 @@ def list_product_categories():
|
||||
'success': True,
|
||||
'tree': [_format_product_category_item(item) for item in (payload.get('tree') or [])],
|
||||
'items': [_format_product_category_item(item, include_children=False) for item in (payload.get('items') or [])],
|
||||
'total': payload.get('total') or 0,
|
||||
'page': payload.get('page') or 1,
|
||||
'page_size': payload.get('pageSize') or 0,
|
||||
'has_more': bool(payload.get('hasMore')),
|
||||
})
|
||||
|
||||
|
||||
@admin_api.route('/product-categories/children')
|
||||
@login_required
|
||||
def list_product_category_children():
|
||||
_ensure_product_category_schema()
|
||||
_, _, denied = _ensure_product_category_access()
|
||||
if denied:
|
||||
return denied
|
||||
parent_id_raw = (request.args.get('parent_id') or request.args.get('parentId') or '').strip()
|
||||
page = max(1, int(request.args.get('page', 1)))
|
||||
page_size = min(100, max(1, int(request.args.get('page_size', request.args.get('pageSize', 20)))))
|
||||
params = {
|
||||
'page': page,
|
||||
'pageSize': page_size,
|
||||
}
|
||||
if parent_id_raw:
|
||||
params['parentId'] = parent_id_raw
|
||||
result, error_response, status = _proxy_backend_java(
|
||||
'GET',
|
||||
'/api/admin/product-categories/children',
|
||||
params=params,
|
||||
)
|
||||
if error_response is not None:
|
||||
return error_response, status
|
||||
payload = result.get('data') or {}
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'items': [_format_product_category_item(item, include_children=False) for item in (payload.get('items') or [])],
|
||||
'total': payload.get('total') or 0,
|
||||
'page': payload.get('page') or page,
|
||||
'page_size': payload.get('pageSize') or page_size,
|
||||
'has_more': bool(payload.get('hasMore')),
|
||||
})
|
||||
|
||||
|
||||
@admin_api.route('/product-categories/search')
|
||||
@login_required
|
||||
def search_product_categories():
|
||||
_ensure_product_category_schema()
|
||||
_, _, denied = _ensure_product_category_access()
|
||||
if denied:
|
||||
return denied
|
||||
keyword = (request.args.get('keyword') or '').strip()
|
||||
page = max(1, int(request.args.get('page', 1)))
|
||||
page_size = min(100, max(1, int(request.args.get('page_size', request.args.get('pageSize', 20)))))
|
||||
result, error_response, status = _proxy_backend_java(
|
||||
'GET',
|
||||
'/api/admin/product-categories/search',
|
||||
params={
|
||||
'keyword': keyword,
|
||||
'page': page,
|
||||
'pageSize': page_size,
|
||||
},
|
||||
)
|
||||
if error_response is not None:
|
||||
return error_response, status
|
||||
payload = result.get('data') or {}
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'items': [_format_product_category_item(item, include_children=False) for item in (payload.get('items') or [])],
|
||||
'total': payload.get('total') or 0,
|
||||
'page': payload.get('page') or page,
|
||||
'page_size': payload.get('pageSize') or page_size,
|
||||
'has_more': bool(payload.get('hasMore')),
|
||||
})
|
||||
|
||||
|
||||
@@ -2415,6 +2488,54 @@ def list_query_asins():
|
||||
})
|
||||
|
||||
|
||||
@admin_api.route('/query-asins/export')
|
||||
@login_required
|
||||
def export_query_asins():
|
||||
role, current_row, denied = _ensure_backend_menu_access('query-asin')
|
||||
if denied:
|
||||
return denied
|
||||
params = {
|
||||
'operatorId': current_row.get('id') if current_row else None,
|
||||
'superAdmin': 'true' if role == 'super_admin' else 'false',
|
||||
}
|
||||
group_id_raw = (request.args.get('group_id') or request.args.get('groupId') or '').strip()
|
||||
shop_name = (request.args.get('shop_name') or request.args.get('shopName') or '').strip()
|
||||
asin = (request.args.get('asin') or '').strip()
|
||||
if group_id_raw:
|
||||
params['groupId'] = group_id_raw
|
||||
if shop_name:
|
||||
params['shopName'] = shop_name
|
||||
if asin:
|
||||
params['asin'] = asin
|
||||
|
||||
url = f"{backend_java_base_url}/api/admin/query-asins/export"
|
||||
try:
|
||||
resp = _get_backend_java_session().get(url, params=params, timeout=60)
|
||||
except requests.RequestException:
|
||||
return jsonify({'success': False, 'error': 'backend-java 服务不可用'}), 502
|
||||
if resp.status_code >= 400:
|
||||
try:
|
||||
data = resp.json()
|
||||
error = data.get('message') or data.get('error') or '导出失败'
|
||||
except ValueError:
|
||||
error = '导出失败'
|
||||
return jsonify({'success': False, 'error': error}), resp.status_code
|
||||
|
||||
headers = {}
|
||||
disposition = resp.headers.get('Content-Disposition')
|
||||
if disposition:
|
||||
headers['Content-Disposition'] = disposition
|
||||
return Response(
|
||||
resp.content,
|
||||
status=resp.status_code,
|
||||
headers=headers,
|
||||
content_type=resp.headers.get(
|
||||
'Content-Type',
|
||||
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def _format_query_asin_import_progress(progress):
|
||||
return {
|
||||
'status': progress.get('status') or 'pending',
|
||||
|
||||
Reference in New Issue
Block a user