diff --git a/app/amazon/__pycache__/approve.cpython-312.pyc b/app/amazon/__pycache__/approve.cpython-312.pyc index 48da58c..cb0c49b 100644 Binary files a/app/amazon/__pycache__/approve.cpython-312.pyc and b/app/amazon/__pycache__/approve.cpython-312.pyc differ diff --git a/app/amazon/__pycache__/del_brand.cpython-312.pyc b/app/amazon/__pycache__/del_brand.cpython-312.pyc index 093aca3..79226b1 100644 Binary files a/app/amazon/__pycache__/del_brand.cpython-312.pyc and b/app/amazon/__pycache__/del_brand.cpython-312.pyc differ diff --git a/app/amazon/__pycache__/main.cpython-312.pyc b/app/amazon/__pycache__/main.cpython-312.pyc index d385bf6..c2a436a 100644 Binary files a/app/amazon/__pycache__/main.cpython-312.pyc and b/app/amazon/__pycache__/main.cpython-312.pyc differ diff --git a/app/blueprints/__pycache__/main.cpython-312.pyc b/app/blueprints/__pycache__/main.cpython-312.pyc index eef60da..81ddaad 100644 Binary files a/app/blueprints/__pycache__/main.cpython-312.pyc and b/app/blueprints/__pycache__/main.cpython-312.pyc differ diff --git a/backend-java/src/main/java/com/nanri/aiimage/config/DeleteBrandProgressProperties.java b/backend-java/src/main/java/com/nanri/aiimage/config/DeleteBrandProgressProperties.java index bd44b8d..349374e 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/config/DeleteBrandProgressProperties.java +++ b/backend-java/src/main/java/com/nanri/aiimage/config/DeleteBrandProgressProperties.java @@ -18,5 +18,5 @@ public class DeleteBrandProgressProperties { * 商品风险(PRODUCT_RISK_RESOLVE)RUNNING 超时自动收尾/失败,按分钟计算; * 与删除品牌共用同一定时调度。 */ - private long productRiskStaleTimeoutMinutes = 1; + private long productRiskStaleTimeoutMinutes = 10; } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/controller/ShopManageController.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/controller/ShopManageController.java index c645559..136bde4 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/controller/ShopManageController.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/controller/ShopManageController.java @@ -50,8 +50,10 @@ public class ShopManageController { }) public ApiResponse page( @Parameter(description = "页码") @RequestParam(defaultValue = "1") Long page, - @Parameter(description = "每页数量") @RequestParam(defaultValue = "15") Long pageSize) { - return ApiResponse.success(shopManageService.page(page, pageSize)); + @Parameter(description = "每页数量") @RequestParam(defaultValue = "15") Long pageSize, + @Parameter(description = "分组ID") @RequestParam(required = false) Long groupId, + @Parameter(description = "店铺名") @RequestParam(required = false) String shopName) { + return ApiResponse.success(shopManageService.page(page, pageSize, groupId, shopName)); } @PostMapping diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/ShopManageService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/ShopManageService.java index 661824b..967a7ba 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/ShopManageService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/ShopManageService.java @@ -28,15 +28,23 @@ public class ShopManageService { private final ShopCredentialCryptoService shopCredentialCryptoService; public ShopManagePageVo page(long page, long pageSize) { + return page(page, pageSize, null, null); + } + + public ShopManagePageVo page(long page, long pageSize, Long groupId, String shopName) { long safePage = Math.max(page, 1); long safePageSize = Math.min(Math.max(pageSize, 1), 100); + String safeShopName = shopName == null ? "" : shopName.trim(); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(groupId != null && groupId > 0, ShopManageEntity::getGroupId, groupId) + .like(!safeShopName.isEmpty(), ShopManageEntity::getShopName, safeShopName) .orderByDesc(ShopManageEntity::getId); Long total = shopManageMapper.selectCount(query); List rows = shopManageMapper .selectList(query.last("LIMIT " + ((safePage - 1) * safePageSize) + ", " + safePageSize)); -Map groupNameById = buildGroupNameMap(rows.stream() + Map groupNameById = buildGroupNameMap(rows.stream() .map(ShopManageEntity::getGroupId) .filter(id -> id != null && id > 0) .distinct() diff --git a/backend-java/src/main/resources/application.yml b/backend-java/src/main/resources/application.yml index a1fd856..ebccbec 100644 --- a/backend-java/src/main/resources/application.yml +++ b/backend-java/src/main/resources/application.yml @@ -81,7 +81,7 @@ aiimage: heartbeat-timeout-minutes: ${AIIMAGE_DELETE_BRAND_HEARTBEAT_TIMEOUT_MINUTES:15} stale-check-cron: ${AIIMAGE_DELETE_BRAND_STALE_CHECK_CRON:*/30 * * * * *} finalize-check-cron: ${AIIMAGE_DELETE_BRAND_FINALIZE_CHECK_CRON:30 */2 * * * *} - product-risk-stale-timeout-minutes: ${AIIMAGE_PRODUCT_RISK_STALE_TIMEOUT_MINUTES:1} + product-risk-stale-timeout-minutes: ${AIIMAGE_PRODUCT_RISK_STALE_TIMEOUT_MINUTES:10} module-cleanup: enabled: ${AIIMAGE_MODULE_CLEANUP_ENABLED:true} cron: ${AIIMAGE_MODULE_CLEANUP_CRON:0 0 0 * * *} diff --git a/backend/blueprints/__pycache__/admin_api.cpython-312.pyc b/backend/blueprints/__pycache__/admin_api.cpython-312.pyc index 7fa3a6a..7f09ff3 100644 Binary files a/backend/blueprints/__pycache__/admin_api.cpython-312.pyc and b/backend/blueprints/__pycache__/admin_api.cpython-312.pyc differ diff --git a/backend/blueprints/admin_api.py b/backend/blueprints/admin_api.py index 31a69f4..5b00eb5 100644 --- a/backend/blueprints/admin_api.py +++ b/backend/blueprints/admin_api.py @@ -947,10 +947,24 @@ def delete_dedupe_total_data(item_id): def list_shop_manages(): page = max(1, int(request.args.get('page', 1))) page_size = min(100, max(1, int(request.args.get('page_size', 15)))) + group_id_raw = (request.args.get('group_id') or '').strip() + shop_name = (request.args.get('shop_name') or '').strip() + + params = {'page': page, 'pageSize': page_size} + if group_id_raw: + try: + group_id = int(group_id_raw) + if group_id > 0: + params['groupId'] = group_id + except (TypeError, ValueError): + pass + if shop_name: + params['shopName'] = shop_name + result, error_response, status = _proxy_backend_java( 'GET', '/api/admin/shop-manages', - params={'page': page, 'pageSize': page_size}, + params=params, ) if error_response is not None: return error_response, status diff --git a/backend/web_source/admin.html b/backend/web_source/admin.html index d098ab0..6c27684 100644 --- a/backend/web_source/admin.html +++ b/backend/web_source/admin.html @@ -382,6 +382,19 @@

店铺列表

+
+
+ + +
+
+ + +
+ +
@@ -1456,20 +1469,32 @@ var shopManageGroups = []; function buildShopManageQuery(page) { - return 'page=' + (page || 1) + '&page_size=' + shopManagePageSize; + var query = 'page=' + (page || 1) + '&page_size=' + shopManagePageSize; + var groupId = (document.getElementById('shopManageFilterGroupId').value || '').trim(); + var shopName = (document.getElementById('shopManageFilterShopName').value || '').trim(); + if (groupId) query += '&group_id=' + encodeURIComponent(groupId); + if (shopName) query += '&shop_name=' + encodeURIComponent(shopName); + return query; } function refreshShopGroupSelects(selectedCreateId, selectedEditId) { var createSel = document.getElementById('shopManageGroupSelect'); var editSel = document.getElementById('editShopManageGroupSelect'); - var opts = ['']; + var filterSel = document.getElementById('shopManageFilterGroupId'); + var selectedFilterId = filterSel ? filterSel.value : ''; + var createOpts = ['']; + var filterOpts = ['']; shopManageGroups.forEach(function(g) { - opts.push(''); + var option = ''; + createOpts.push(option); + filterOpts.push(option); }); - createSel.innerHTML = opts.join(''); - editSel.innerHTML = opts.join(''); + createSel.innerHTML = createOpts.join(''); + editSel.innerHTML = createOpts.join(''); + if (filterSel) filterSel.innerHTML = filterOpts.join(''); if (selectedCreateId != null) createSel.value = String(selectedCreateId); if (selectedEditId != null) editSel.value = String(selectedEditId); + if (filterSel && selectedFilterId) filterSel.value = selectedFilterId; } function loadShopManageGroups(selectedCreateId, selectedEditId) { @@ -1603,6 +1628,15 @@ document.getElementById('btnManageShopGroups').onclick = openShopManageGroupModal; document.getElementById('btnManageShopGroupsFromEdit').onclick = openShopManageGroupModal; + document.getElementById('btnSearchShopManage').onclick = function() { + loadShopManage(1); + }; + document.getElementById('shopManageFilterShopName').addEventListener('keydown', function(e) { + if (e.key === 'Enter') { + e.preventDefault(); + loadShopManage(1); + } + }); document.getElementById('btnCloseShopManageGroupModal').onclick = function() { document.getElementById('shopManageGroupModal').classList.remove('show'); };