const db = require('./backend/db-sqlite'); async function fix() { const fixes = [ // return_records - applicant column "ALTER TABLE return_records ADD COLUMN applicant TEXT DEFAULT ''", "ALTER TABLE return_records ADD COLUMN department TEXT DEFAULT ''", "ALTER TABLE return_records ADD COLUMN approver TEXT DEFAULT ''", "ALTER TABLE return_records ADD COLUMN status TEXT DEFAULT 'pending'", // payment_requests table (needed by payment_plans) `CREATE TABLE IF NOT EXISTS payment_requests ( id INTEGER PRIMARY KEY AUTOINCREMENT, code TEXT DEFAULT '', payment_type TEXT DEFAULT '', purchase_order_id INTEGER DEFAULT 0, amount REAL DEFAULT 0, currency TEXT DEFAULT 'CNY', applicant TEXT DEFAULT '', request_date TEXT DEFAULT '', status TEXT DEFAULT 'pending', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP )`, // payment_plans - add missing columns used by route "ALTER TABLE payment_plans ADD COLUMN stage TEXT DEFAULT ''", "ALTER TABLE payment_plans ADD COLUMN planned_date TEXT DEFAULT ''", "ALTER TABLE payment_plans ADD COLUMN planned_amount REAL DEFAULT 0", "ALTER TABLE payment_plans ADD COLUMN planned_percentage REAL DEFAULT 0", "ALTER TABLE payment_plans ADD COLUMN actual_amount REAL DEFAULT 0", "ALTER TABLE payment_plans ADD COLUMN actual_date TEXT DEFAULT ''", "ALTER TABLE payment_plans ADD COLUMN payment_request_id INTEGER", "ALTER TABLE payment_plans ADD COLUMN currency TEXT DEFAULT 'CNY'", "ALTER TABLE payment_plans ADD COLUMN updated_at DATETIME DEFAULT CURRENT_TIMESTAMP", // projects - add more "ALTER TABLE projects ADD COLUMN created_at DATETIME DEFAULT CURRENT_TIMESTAMP", "ALTER TABLE projects ADD COLUMN updated_at DATETIME DEFAULT CURRENT_TIMESTAMP", ]; for (const sql of fixes) { try { await db.query(sql); console.log('OK:', sql.substring(0, 70)); } catch(e) { const msg = e.message || ''; if (msg.includes('duplicate') || msg.includes('already exists')) { console.log('SKIP:', sql.substring(0, 70)); } else { console.log('ERR:', msg.substring(0, 100)); } } } console.log('\nDone!'); process.exit(); } fix();