const sqlite3 = require('sqlite3').verbose(); const db = new sqlite3.Database('company_finance.db'); // 修改 payment_requests 表的约束,允许 bank_account 和 bank_name 为空 db.serialize(() => { console.log('开始修改 payment_requests 表约束...'); // 由于 SQLite 不支持直接修改列约束,我们需要创建新表并迁移数据 db.run(` CREATE TABLE IF NOT EXISTS payment_requests_new ( id INTEGER PRIMARY KEY AUTOINCREMENT, request_code TEXT UNIQUE NOT NULL, applicant TEXT NOT NULL, payee TEXT NOT NULL, bank_account TEXT DEFAULT '', bank_name TEXT DEFAULT '', amount REAL NOT NULL, amount_cny REAL DEFAULT 0, currency TEXT DEFAULT 'CNY', payment_date DATE NOT NULL, reason TEXT NOT NULL, detail_items TEXT, attachments TEXT, status TEXT DEFAULT 'pending', payee_type TEXT DEFAULT 'other', payee_id INTEGER, expense_type TEXT DEFAULT 'company', expense_category TEXT DEFAULT '', project_id INTEGER, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) `, (err) => { if (err) { console.error('创建新表失败:', err.message); db.close(); return; } console.log('✓ 新表创建成功'); // 迁移数据 db.run(` INSERT INTO payment_requests_new ( id, request_code, applicant, payee, bank_account, bank_name, amount, amount_cny, currency, payment_date, reason, detail_items, attachments, status, payee_type, payee_id, expense_type, expense_category, project_id, created_at, updated_at ) SELECT id, request_code, applicant, payee, COALESCE(bank_account, ''), COALESCE(bank_name, ''), amount, amount_cny, currency, payment_date, reason, detail_items, attachments, status, COALESCE(payee_type, 'other'), payee_id, COALESCE(expense_type, 'company'), COALESCE(expense_category, ''), project_id, created_at, updated_at FROM payment_requests `, (err) => { if (err) { console.error('迁移数据失败:', err.message); db.close(); return; } console.log('✓ 数据迁移成功'); // 删除旧表 db.run('DROP TABLE payment_requests', (err) => { if (err) { console.error('删除旧表失败:', err.message); db.close(); return; } console.log('✓ 旧表删除成功'); // 重命名新表 db.run('ALTER TABLE payment_requests_new RENAME TO payment_requests', (err) => { if (err) { console.error('重命名表失败:', err.message); db.close(); return; } console.log('✓ 表重命名成功'); console.log('\n✓ 表约束修改完成'); db.close(); }); }); }); }); });