From 178ff96be4e3a2ceb30aba2ba91a830a636f167b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E8=87=AA=E8=BE=BE?= <980324341@qq.com> Date: Sat, 5 Sep 2026 21:27:26 +0800 Subject: [PATCH] =?UTF-8?q?task-255(admin.html=E8=A7=82=E6=84=9F=E5=AF=B9?= =?UTF-8?q?=E9=BD=90):=20=E5=93=81=E7=89=8C=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E9=A1=B5=E5=AF=B9=E9=BD=90=EF=BC=88=E5=88=86=E7=BB=84=E7=AD=9B?= =?UTF-8?q?=E9=80=89/=E6=9D=A5=E6=BA=90=E6=A0=87=E7=AD=BE/=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=AF=BC=E5=85=A5=E8=AE=B0=E5=BD=95=E5=88=86=E7=BB=84?= =?UTF-8?q?=E9=94=81=E5=AE=9A/=E5=88=A0=E9=99=A4=E6=96=87=E6=A1=88?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/asin/AsinInvalidPage.vue | 221 ++++++++++++++++++ admin-frontend-vue/tests/task-255.test.ts | 56 +++++ 2 files changed, 277 insertions(+) create mode 100644 admin-frontend-vue/src/pages/asin/AsinInvalidPage.vue create mode 100644 admin-frontend-vue/tests/task-255.test.ts diff --git a/admin-frontend-vue/src/pages/asin/AsinInvalidPage.vue b/admin-frontend-vue/src/pages/asin/AsinInvalidPage.vue new file mode 100644 index 00000000..86d63eb1 --- /dev/null +++ b/admin-frontend-vue/src/pages/asin/AsinInvalidPage.vue @@ -0,0 +1,221 @@ + + + + + diff --git a/admin-frontend-vue/tests/task-255.test.ts b/admin-frontend-vue/tests/task-255.test.ts new file mode 100644 index 00000000..8cbd594d --- /dev/null +++ b/admin-frontend-vue/tests/task-255.test.ts @@ -0,0 +1,56 @@ +import test from 'node:test' +import assert from 'node:assert/strict' +import { readSource } from './helpers.ts' + +// module 13 task 255:品牌数据库(不符合ASIN)页对齐 admin panel-invalid-asin-data —— +// 分组筛选、来源列用 recordSourceLabel、自动导入记录编辑隐藏分组、删除文案用模型辅助。 + +test('test_task_255_invalidasin_normal_primary_path', () => { + const page = readSource('src/pages/asin/AsinInvalidPage.vue') + assert.match(page, /分组/, '筛选需含分组下拉') + assert.match(page, /recordSourceLabel/, '来源列需用 recordSourceLabel 文案') + assert.match(page, /el-tag/, '来源宜用 tag 形态') +}) + +test('test_task_255_invalidasin_normal_variant_input', () => { + const page = readSource('src/pages/asin/AsinInvalidPage.vue') + assert.match(page, /invalidAsinDeleteText/, '删除需用模型删除文案') + assert.match(page, /includeGroup/, '更新提交需按来源决定是否迁组') + assert.match(page, /MANUAL/, '需判断来源是否为手动新增') +}) + +test('test_task_255_invalidasin_normal_repeated_operation_is_idempotent', () => { + const page = readSource('src/pages/asin/AsinInvalidPage.vue') + assert.ok(page.includes('分组')) + assert.ok(page.includes('分组')) +}) + +test('test_task_255_invalidasin_boundary_empty_input', () => { + const page = readSource('src/pages/asin/AsinInvalidPage.vue') + assert.match(page, /filter\.brand|品牌/, '需保留品牌筛选') + assert.match(page, /filter\.dataValue|ASIN/, '需保留 ASIN 筛选') + assert.match(page, /requireGroup/, '新建需校验分组必选') +}) + +test('test_task_255_invalidasin_boundary_single_item', () => { + // 边界:自动导入(非 MANUAL)记录编辑时不应展示分组字段(admin 语义)。 + const page = readSource('src/pages/asin/AsinInvalidPage.vue') + assert.match(page, /editingSource|recordSource/, '需记录当前编辑行来源以控制分组显隐') +}) + +test('test_task_255_invalidasin_boundary_limit_or_missing_field', () => { + const api = readSource('src/pages/invalidasin/invalid-asin-api.ts') + assert.match(api, /groupId/, '查询适配需支持分组筛选参数') +}) + +test('test_task_255_invalidasin_invalid_input_rejected', () => { + const page = readSource('src/pages/asin/AsinInvalidPage.vue') + assert.equal(page.includes('MANUAL') && page.includes('recordSourceLabel'), true, '来源展示必须统一走映射') +}) + +test('test_task_255_invalidasin_dependency_failure_returns_actionable_message', () => { + // 依赖失败:模型已提供记录来源与删除文案纯函数,页面不得自造不一致文案。 + const model = readSource('src/pages/invalidasin/invalid-asin-model.ts') + assert.match(model, /recordSourceLabel/, '模型需提供来源标签函数') + assert.match(model, /手动新增/, '手动新增文案存在') +})