diff --git a/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs b/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs index 3aee7bb..37ef489 100644 --- a/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs +++ b/src/modules/overseas-warehouse/views/ReturnOrdersView.test.mjs @@ -2,6 +2,7 @@ import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import test from 'node:test' import ts from 'typescript' +import { createRequire } from 'node:module' const view = readFileSync(new URL('./ReturnOrdersView.vue', import.meta.url), 'utf8') const api = readFileSync(new URL('../api/returnOrders.ts', import.meta.url), 'utf8') @@ -118,7 +119,7 @@ test('新建退货预报使用独立路由页面,编辑仍保留加宽弹框', test('新建预报铺满工作区,基础字段等宽对齐且数量输入保持紧凑', () => { assert.match(view, /return-create-surface \{ width:100%; min-width:0;[^}]*margin:0;/) - assert.match(view, //) + assert.match(view, /]*:model="form"[^>]*:rules="createFormRules"[^>]*label-position="top"/) assert.match(view, /return-create-form :deep\(\.el-input\), \.return-create-body \.return-create-form :deep\(\.el-select\) \{ width:100%; max-width:none;/) assert.match(view, /:deep\(\.el-table \.el-input-number\) \{ width:120px;/) assert.match(view, /]*>/) @@ -314,3 +315,37 @@ test('贴标入口保留完成入库门禁与退货来源,箱号只作为目 { name: 'overseas-labeling-create', query: { returnNo: 'RT-TEST', warehouseId: 'WH-TEST', cartonMark: 'RC-TEST' } }, ]) }) + +test('新增退货校验海外仓与联系人,空白联系人无效,客户参考号可选', async () => { + const { default: Schema } = createRequire(import.meta.resolve('element-plus'))('async-validator') + const source = view.slice(view.indexOf('const createFormRules:'), view.indexOf('const selectedOperationWarehouse =')) + const code = ts.transpileModule(source, { compilerOptions: { target: ts.ScriptTarget.ES2022 } }).outputText + const rules = new Function(code + '\nreturn createFormRules')() + const validator = new Schema(rules) + await assert.rejects(validator.validate({ overseasWarehouseId: '', warehouseContactName: ' ', warehouseContactPhone: '' }), error => { + assert.deepEqual(Object.keys(error.fields).sort(), ['overseasWarehouseId', 'warehouseContactName', 'warehouseContactPhone']) + return true + }) + await validator.validate({ overseasWarehouseId: 'WH', warehouseContactName: 'Contact', warehouseContactPhone: '123456', customerReferenceNo: '' }) +}) + +test('新增校验失败或正在提交时不继续创建,编辑保持既有校验路径', async () => { + const start = view.indexOf('async function submit()') + const end = view.indexOf(' const items =', start) + const code = view.slice(start, end) + '\nreturn "continue"\n}' + const creating = { value: false }, props = { createPage: true } + let validations = 0 + const formRef = { value: { validate: async () => { validations++; throw new Error('required') } } } + const submit = new Function('creating', 'props', 'createFormRef', code + '\nreturn submit')(creating, props, formRef) + assert.equal(await submit(), undefined) + assert.equal(validations, 1) + creating.value = true + assert.equal(await submit(), undefined) + assert.equal(validations, 1) + creating.value = false + props.createPage = false + assert.equal(await submit(), 'continue') + props.createPage = true + formRef.value.validate = async () => true + assert.equal(await submit(), 'continue') +}) diff --git a/src/modules/overseas-warehouse/views/ReturnOrdersView.vue b/src/modules/overseas-warehouse/views/ReturnOrdersView.vue index 45d7832..52013df 100644 --- a/src/modules/overseas-warehouse/views/ReturnOrdersView.vue +++ b/src/modules/overseas-warehouse/views/ReturnOrdersView.vue @@ -1,6 +1,6 @@