task-266/267(admin.html观感对齐): 店铺数据任务改每店铺卡片(单文件下载/删除/批量/合计)+筛选权限对齐

This commit is contained in:
2026-09-05 22:11:36 +08:00
parent af49cbda64
commit ad5c7c02f9
5 changed files with 368 additions and 83 deletions
+58
View File
@@ -0,0 +1,58 @@
import test from 'node:test'
import assert from 'node:assert/strict'
import { readSource } from './helpers.ts'
import { shopDataFilenameFromDisposition } from '../src/pages/tasks/shop-data-download.ts'
import { isTerminalStatus } from '../src/pages/tasks/image-video-view.ts'
// module 13 task 266:店铺数据任务视图改“每店铺卡片”,单文件下载/删除真实端点。
test('test_task_266_view_normal_primary_path', () => {
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
assert.match(page, /shop-card-grid/, '需每店铺卡片网格')
assert.match(page, /group\.results/, '卡片内遍历该店结果文件')
assert.match(page, /暂无结果文件/, '店空态')
})
test('test_task_266_view_normal_variant_input', () => {
const api = readSource('src/pages/tasks/shop-data-api.ts')
assert.match(api, /fetchShopDataResultDownload/, '单文件下载适配')
assert.match(api, /\/results\/\$\{resultId\}\/download/, '单文件下载走管理端真实端点')
assert.match(api, /deleteShopDataResultHistory/, '删除适配')
assert.match(api, /\/history\/\$\{resultId\}/, '删除走管理端真实端点')
})
test('test_task_266_view_normal_repeated_operation_is_idempotent', () => {
assert.equal(shopDataFilenameFromDisposition('attachment; filename="a.xlsx"', 'fallback.xlsx'), 'a.xlsx')
assert.equal(shopDataFilenameFromDisposition(undefined, 'fallback.xlsx'), 'fallback.xlsx')
})
test('test_task_266_view_boundary_empty_input', () => {
assert.equal(shopDataFilenameFromDisposition('', 'shop-data-task-9.xlsx'), 'shop-data-task-9.xlsx', '缺 header 回默认文件名')
assert.equal(shopDataFilenameFromDisposition('inline; filename="店铺.xlsx"', 'd.xlsx'), '店铺.xlsx')
})
test('test_task_266_view_boundary_single_item', () => {
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
assert.match(page, /fileReady/, '未就绪禁下载')
assert.match(page, /isTerminalStatus/, '终态门控下载/删除')
assert.equal(isTerminalStatus('SUCCESS'), true)
assert.equal(isTerminalStatus('RUNNING'), false)
})
test('test_task_266_delete_normal_primary_path', () => {
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
assert.match(page, /确认删除店铺/, '删除确认含店铺')
assert.match(page, /及结果文件/, '删除确认含结果文件')
assert.match(page, /删除成功/, '删除成功提示')
})
test('test_task_266_delete_boundary_limit_or_missing_field', () => {
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
assert.match(page, /正在删除任务/, '删除中有进行文案')
})
test('test_task_266_dependency_failure_returns_actionable_message', () => {
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
assert.equal(/<el-table[^>]*:data="(rows|allResultRows)"/.test(page), false, '结果文件不再用整表渲染')
assert.match(page, /暂无店铺数据任务/, '空态文案')
})
+63
View File
@@ -0,0 +1,63 @@
import test from 'node:test'
import assert from 'node:assert/strict'
import { readSource } from './helpers.ts'
import { toShopDataQuery } from '../src/pages/tasks/shop-data-filter.ts'
import { toShopDataZipRequest } from '../src/pages/tasks/shop-data-download.ts'
// module 13 task 267:店铺数据任务筛选/批量下载/权限/合计对齐。
test('test_task_267_filter_normal_primary_path', () => {
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
assert.match(page, /店铺(模糊搜索)/, '需店铺模糊筛选')
assert.match(page, /分组(模糊搜索)/, '需分组模糊筛选')
assert.match(page, /国家/, '需国家筛选')
assert.match(page, /创建时间/, '需创建时间范围')
assert.match(page, /查询/, '需查询')
assert.match(page, /reset/, '需重置')
})
test('test_task_267_filter_normal_variant_input', () => {
const query = toShopDataQuery({ shopName: ' 店A ', groupName: ' 组1 ', country: 'DE', createdFrom: '', createdTo: '2026-09-05T09:30' }, 1, 20)
assert.equal(query.shop_name, '店A')
assert.equal(query.group_name, '组1')
assert.equal(query.country, 'DE')
assert.equal(query.created_to, '2026-09-05T09:30')
assert.equal(query.created_from, undefined, '空日期不下发')
})
test('test_task_267_batch_normal_primary_path', () => {
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
assert.match(page, /全选可下载/, '全选可下载文件')
assert.match(page, /批量下载/, '批量下载')
assert.match(page, /requestShopDataZipDownload/, '批量走打包端点')
})
test('test_task_267_batch_boundary_empty_input', () => {
assert.deepEqual(toShopDataZipRequest(['3', '3', 'abc', 4]), { result_ids: [3, 4] }, '过滤非法/去重')
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
assert.match(page, /请先勾选要下载的结果文件/, '未勾选提示')
})
test('test_task_267_batch_boundary_limit_or_missing_field', () => {
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
assert.match(page, /包内错误清单/, '部分失败提示包内错误清单')
})
test('test_task_267_total_normal_primary_path', () => {
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
assert.match(page, /家店铺/, '合计为店铺数')
assert.match(page, /结果文件/, '展示结果文件数')
})
test('test_task_267_permission_normal_primary_path', () => {
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
assert.match(page, /权限配置/, '权限入口')
assert.match(page, /fetchShopDataTaskPermissionUsers/, '权限加载')
assert.match(page, /saveShopDataTaskPermissions/, '权限保存')
})
test('test_task_267_dependency_failure_returns_actionable_message', () => {
const api = readSource('src/pages/tasks/shop-data-api.ts')
assert.match(api, /\/download-zip/)
assert.match(api, /\/api\/admin\/shop-data-crawl-task-permissions/)
})