fix: 物料页的「撤销」按钮文案改成「撤销作废」
「撤销」在中文 UI 里默认指撤销上一步(Ctrl+Z),看不出在撤销什么;这一页又 没有状态列(文案即状态),用户看到一行数据和绿色「撤销」按钮,无从判断这条 物料被作废了。改成「撤销作废」后,按钮自身就说明了这条物料怎么了。 只改这一处按钮文案。全站其他实体(仓库与库位、主数据、组织、角色、往来单位) 仍用「停用/启用」,那是另一套配对,跟这里的「作废/撤销作废」不冲突。 测试补 1 条,同时锁住两个入口的互斥关系(作废的那行不该再有「作废」,有效的 那行不该有「撤销作废」)。变异验证两处:文案改回「撤销」、以及把作废按钮的 状态条件去掉让两个入口同时出现,断言都变红。
This commit is contained in:
parent
43f680219e
commit
b9c0681c47
|
|
@ -1,6 +1,6 @@
|
||||||
import { flushPromises, mount } from '@vue/test-utils'
|
import { flushPromises, mount } from '@vue/test-utils'
|
||||||
import ElementPlus, { ElMessage, ElMessageBox } from 'element-plus'
|
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 Materials from './Materials.vue'
|
||||||
import { codeRulesApi, materialCategoriesApi, unitsApi } from '../api/masterData'
|
import { codeRulesApi, materialCategoriesApi, unitsApi } from '../api/masterData'
|
||||||
|
|
||||||
|
|
@ -324,3 +324,41 @@ describe('物料检索框的候选项', () => {
|
||||||
wrapper.unmount()
|
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()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@
|
||||||
<el-button size="small" @click="showDetail(row)">详情</el-button>
|
<el-button size="small" @click="showDetail(row)">详情</el-button>
|
||||||
<el-button v-if="authStore.isAdmin" size="small" type="primary" @click="showEditModal(row)">编辑</el-button>
|
<el-button v-if="authStore.isAdmin" size="small" type="primary" @click="showEditModal(row)">编辑</el-button>
|
||||||
<el-button v-if="authStore.isAdmin && row.status !== 'obsolete'" size="small" type="danger" @click="handleDelete(row.id)">作废</el-button>
|
<el-button v-if="authStore.isAdmin && row.status !== 'obsolete'" size="small" type="danger" @click="handleDelete(row.id)">作废</el-button>
|
||||||
<el-button v-if="authStore.isAdmin && row.status === 'obsolete'" size="small" type="success" @click="handleRestore(row.id)">撤销</el-button>
|
<el-button v-if="authStore.isAdmin && row.status === 'obsolete'" size="small" type="success" @click="handleRestore(row.id)">撤销作废</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</BaseTable>
|
</BaseTable>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user