This commit is contained in:
2026-08-05 15:54:59 +08:00
parent eede351038
commit 4b31eb7786
43 changed files with 2117 additions and 851 deletions
@@ -136,10 +136,7 @@ async function mountView() {
}
async function selectScope(wrapper: VueWrapper) {
let toolbar = wrapper.findComponent(QueryToolbar)
toolbar.vm.$emit('update:modelValue', { ...(toolbar.props('modelValue') as QueryModel), customerId: tenantId })
await flushPromises()
toolbar = wrapper.findComponent(QueryToolbar)
const toolbar = wrapper.findComponent(QueryToolbar)
toolbar.vm.$emit('update:modelValue', { ...(toolbar.props('modelValue') as QueryModel), warehouseId })
await flushPromises()
const searchButton = toolbar.findAll('button').find((button) => button.text().trim() === '查询')
@@ -168,20 +165,19 @@ describe('LocationsView', () => {
})
})
it('starts with all customers and queries the full list without empty IDs', async () => {
it('loads all warehouses and queries the full location list without requiring a customer or warehouse', async () => {
const wrapper = await mountView()
const toolbar = wrapper.findComponent(QueryToolbar)
const fields = toolbar.props('fields') as QueryField[]
expect(listPlatformTenants).toHaveBeenCalledWith({ page: 1, size: 200 })
expect(wrapper.find('[aria-label="所属企业"]').exists()).toBe(true)
expect(fields[0]?.placeholder).toBe('全部客户')
expect((toolbar.props('modelValue') as QueryModel).customerId).toBe('')
expect(wrapper.find('[aria-label="所属企业"]').exists()).toBe(false)
expect(fields[0]?.placeholder).toBe('全部仓库')
expect(fields.map(({ key, width }) => [key, width])).toEqual([
['customerId', 260], ['warehouseId', 240], ['zoneCode', 210],
['warehouseId', 300], ['zoneCode', 210],
['locationCode', 220], ['locationType', 170], ['status', 160],
])
expect(listPlatformWarehouses).not.toHaveBeenCalled()
expect(listPlatformWarehouses).toHaveBeenCalledWith(undefined, 1, 200)
expect(listPlatformLocations).toHaveBeenCalledWith({
page: 1,
size: 20,
@@ -200,16 +196,15 @@ describe('LocationsView', () => {
expect(wrapper.text()).not.toContain('企业 ID')
})
it('loads the selected customer, warehouse, and location hierarchy without narrowing snowflake IDs', async () => {
it('filters by the selected warehouse without exposing or sending a customer id', async () => {
const wrapper = await mountView()
await selectScope(wrapper)
expect(wrapper.find('.table-panel .panel-heading').exists()).toBe(false)
expect(listPlatformWarehouses).toHaveBeenCalledWith(tenantId, 1, 200)
expect(listPlatformWarehouses).toHaveBeenCalledWith(undefined, 1, 200)
expect(listPlatformLocations).toHaveBeenLastCalledWith({
page: 1,
size: 20,
tenantId,
warehouseId,
zoneCode: '',
locationCode: '',
@@ -223,6 +218,19 @@ describe('LocationsView', () => {
])
})
it('opens creation without a list filter and requires the warehouse inside the form', async () => {
const wrapper = await mountView()
const createButton = wrapper.findAll('button').find((button) => button.text().trim() === '新增库位')
expect(createButton?.attributes('disabled')).toBeUndefined()
await createButton!.trigger('click')
await flushPromises()
expect(document.body.textContent).toContain('新增库位')
expect(document.body.textContent).toContain('所属仓库')
expect(document.body.textContent).toContain('请选择所属仓库')
})
it('keeps the operation column first and hides edit actions for occupied resources', async () => {
const wrapper = await mountView()
await selectScope(wrapper)
@@ -267,7 +275,7 @@ describe('LocationsView', () => {
expect(document.body.textContent).toContain('当前库位正在被业务使用,只允许查看。')
})
it('clears customer and warehouse on reset and immediately restores the full query', async () => {
it('clears the warehouse on reset and immediately restores the full query', async () => {
const wrapper = await mountView()
await selectScope(wrapper)
const toolbar = wrapper.findComponent(QueryToolbar)
@@ -277,7 +285,6 @@ describe('LocationsView', () => {
await flushPromises()
const model = wrapper.findComponent(QueryToolbar).props('modelValue') as QueryModel
expect(model.customerId).toBe('')
expect(model.warehouseId).toBe('')
expect(listPlatformLocations).toHaveBeenLastCalledWith({
page: 1,