20260927215912

This commit is contained in:
oneao committed 2026-09-27 21:59:13 +08:00
1 parent 27e49e2e45
commit f22e67fc85
294 files changed
+29247 -3576

No files matched your search

@@ -576,9 +576,7 @@ describe('模块管理:保存后的未保存判定', () => {
})
describe('模块管理:卡头信息与刷新', () => {
const LOCAL_DATETIME = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/
it('保存主表变更时写入 b_updated_at,且时间戳不进草稿、不会让表单重新变脏', async () => {
it('保存主表变更时前端不提交审计列,草稿也不会因此变脏', async () => {
const wrapper = await mountManagement()
await flushPromises()
wrapper.vm.moduleSelectedId = 'demo'
@@ -590,17 +588,14 @@ describe('模块管理:卡头信息与刷新', () => {
await settleConfigReload(wrapper)
const moduleReq = savedRequests.find((request) => request.table === 's_module')
expect(moduleReq.updates?.[0]).toMatchObject({
b_id: 'demo',
b_name: '改名后',
b_updated_at: expect.stringMatching(LOCAL_DATETIME),
})
// 时间戳若被写进草稿,重载后的基线与草稿就会不一致,这里会判定为仍有未保存改动
expect(moduleReq.updates?.[0]).toMatchObject({ b_id: 'demo', b_name: '改名后' })
// 审计列(b_updated_at 等)由后端按表列存在性统一维护(核心表结构设计 §1.6)
expect(moduleReq.updates?.[0]).not.toHaveProperty('b_updated_at')
expect(moduleReq.updates?.[0]).not.toHaveProperty('b_updated_by')
expect(wrapper.vm.hasUnsavedChanges()).toBe(false)
})
it('只改子表(多语言)时也刷新模块的最后保存时间', async () => {
it('只改子表(多语言)时也触碰主表行,让后端刷新「最后保存时间」', async () => {
const wrapper = await mountManagement()
await flushPromises()
wrapper.vm.moduleSelectedId = 'demo'
@@ -612,15 +607,13 @@ describe('模块管理:卡头信息与刷新', () => {
await wrapper.vm.handleSave()
await settleConfigReload(wrapper)
// 主表行本身没有变化,仍要补一条只写时间戳的 update,否则卡头时间会停在改主表的时刻
// 主表行本身没有变化:补一条只带主键的 update 触碰它,时间戳由后端补
const moduleReq = savedRequests.find((request) => request.table === 's_module')
expect(moduleReq.updates).toEqual([
{ b_id: 'demo', b_updated_at: expect.stringMatching(LOCAL_DATETIME) },
])
expect(moduleReq.updates).toEqual([{ b_id: 'demo' }])
expect(wrapper.vm.hasUnsavedChanges()).toBe(false)
})
it('库里还没有 b_updated_at 列时(迁移未执行)不补时间戳更新', async () => {
it('库里还没有 b_updated_at 列时(迁移未执行)不触碰主表行', async () => {
delete db.s_module.find((item) => item.b_id === 'demo').b_updated_at
const wrapper = await mountManagement()
@@ -634,7 +627,7 @@ describe('模块管理:卡头信息与刷新', () => {
await wrapper.vm.handleSave()
await settleConfigReload(wrapper)
// 只写不存在列的 update 会被后端以「没有可修改的字段」拒绝,整次保存回滚
// 只带主键的 update 在后端补不上任何可写列(审计列不存在),会被「没有可修改的字段」拒绝
expect(savedRequests.some((request) => request.table === 's_module')).toBe(false)
})