diff --git a/frontend/src/views/Materials.test.js b/frontend/src/views/Materials.test.js
index 2a76caad..3411c495 100644
--- a/frontend/src/views/Materials.test.js
+++ b/frontend/src/views/Materials.test.js
@@ -1,6 +1,6 @@
import { flushPromises, mount } from '@vue/test-utils'
import ElementPlus, { ElMessage, ElMessageBox } from 'element-plus'
-import { beforeEach, describe, expect, test, vi } from 'vitest'
+import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
import Materials from './Materials.vue'
import { codeRulesApi, materialCategoriesApi, unitsApi } from '../api/masterData'
@@ -324,3 +324,41 @@ describe('物料检索框的候选项', () => {
wrapper.unmount()
})
})
+
+describe('物料列表的作废入口文案', () => {
+ beforeEach(() => {
+ materialCategoriesApi.list.mockResolvedValue({ data: categories })
+ unitsApi.list.mockResolvedValue({ data: [] })
+ materialsStore.materials = [
+ { id: 1, material_code: 'A010201', name: '作废物料', status: 'obsolete' },
+ { id: 2, material_code: 'A010202', name: '有效物料', status: 'active' }
+ ]
+ })
+
+ afterEach(() => {
+ materialsStore.materials = []
+ })
+
+ // 按钮文案得精确匹配:「撤销作废」里也含「作废」,用 includes 会把两个按钮看成同一个。
+ function exactButton(wrapper, text) {
+ return wrapper.findAll('button').find(button => button.text().trim() === text)
+ }
+
+ // 这一页没有状态列(文案即状态),所以按钮文案本身得说清这条物料怎么了。
+ // 「撤销」在中文 UI 里默认指撤销上一步(Ctrl+Z),看不出在撤销什么;「撤销作废」
+ // 才读得出「这条被作废了,点这里撤销那次作废」。
+ test('作废的那行显示「撤销作废」,有效的那行显示「作废」', async () => {
+ const wrapper = mountMaterials()
+ await flushPromises()
+
+ const restore = exactButton(wrapper, '撤销作废')
+ const obsolete = exactButton(wrapper, '作废')
+
+ expect(restore).toBeTruthy()
+ expect(obsolete).toBeTruthy()
+ // 两个入口互斥:作废的那行不该再有「作废」,有效的那行不该有「撤销作废」。
+ expect(restore.element.closest('tr').textContent).toContain('作废物料')
+ expect(obsolete.element.closest('tr').textContent).toContain('有效物料')
+ wrapper.unmount()
+ })
+})
diff --git a/frontend/src/views/Materials.vue b/frontend/src/views/Materials.vue
index f2a12e9e..f1743286 100644
--- a/frontend/src/views/Materials.vue
+++ b/frontend/src/views/Materials.vue
@@ -62,7 +62,7 @@
详情
编辑
作废
- 撤销
+ 撤销作废