const db = require('./backend/db-sqlite'); async function fixDatabase() { console.log('开始修复云端数据库Schema...'); const fixes = [ // 物流公司表 - 添加缺失的code列 `ALTER TABLE logistics_companies ADD COLUMN code TEXT`, // 采购订单表 - 添加缺失的列 `ALTER TABLE purchase_orders ADD COLUMN project_id INTEGER`, `ALTER TABLE purchase_orders ADD COLUMN order_number TEXT`, `ALTER TABLE purchase_orders ADD COLUMN supplier_id INTEGER`, `ALTER TABLE purchase_orders ADD COLUMN total_amount REAL DEFAULT 0`, `ALTER TABLE purchase_orders ADD COLUMN currency TEXT DEFAULT 'CNY'`, `ALTER TABLE purchase_orders ADD COLUMN status TEXT DEFAULT 'draft'`, `ALTER TABLE purchase_orders ADD COLUMN priority TEXT DEFAULT 'normal'`, `ALTER TABLE purchase_orders ADD COLUMN delivery_date TEXT`, `ALTER TABLE purchase_orders ADD COLUMN delivery_address TEXT`, `ALTER TABLE purchase_orders ADD COLUMN remark TEXT`, `ALTER TABLE purchase_orders ADD COLUMN items TEXT`, `ALTER TABLE purchase_orders ADD COLUMN created_by TEXT`, `ALTER TABLE purchase_orders ADD COLUMN approved_by TEXT`, `ALTER TABLE purchase_orders ADD COLUMN approved_at TIMESTAMP`, // 付款计划表 - 添加缺失的列 `ALTER TABLE payment_plans ADD COLUMN payment_request_id INTEGER`, `ALTER TABLE payment_plans ADD COLUMN purchase_order_id INTEGER`, `ALTER TABLE payment_plans ADD COLUMN supplier_id INTEGER`, `ALTER TABLE payment_plans ADD COLUMN total_amount REAL DEFAULT 0`, `ALTER TABLE payment_plans ADD COLUMN paid_amount REAL DEFAULT 0`, `ALTER TABLE payment_plans ADD COLUMN currency TEXT DEFAULT 'CNY'`, `ALTER TABLE payment_plans ADD COLUMN status TEXT DEFAULT 'pending'`, `ALTER TABLE payment_plans ADD COLUMN payment_items TEXT`, `ALTER TABLE payment_plans ADD COLUMN plan_number TEXT`, `ALTER TABLE payment_plans ADD COLUMN title TEXT`, `ALTER TABLE payment_plans ADD COLUMN remark TEXT`, `ALTER TABLE payment_plans ADD COLUMN created_by TEXT`, // 退库记录表 `CREATE TABLE IF NOT EXISTS return_records ( id INTEGER PRIMARY KEY AUTOINCREMENT, return_number TEXT UNIQUE, product_id INTEGER, product_name TEXT, quantity REAL DEFAULT 0, unit TEXT DEFAULT '件', unit_price REAL DEFAULT 0, total_price REAL DEFAULT 0, return_date TEXT, reason TEXT, status TEXT DEFAULT 'pending', remark TEXT, created_by TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )`, // 采购订单项目表 `CREATE TABLE IF NOT EXISTS purchase_order_items ( id INTEGER PRIMARY KEY AUTOINCREMENT, order_id INTEGER NOT NULL, product_id INTEGER, product_name TEXT NOT NULL, specification TEXT, unit TEXT DEFAULT '件', quantity REAL DEFAULT 0, unit_price REAL DEFAULT 0, total_price REAL DEFAULT 0, delivery_date TEXT, remark TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (order_id) REFERENCES purchase_orders(id) )`, ]; for (const sql of fixes) { try { await db.query(sql); console.log('✅ 成功:', sql.substring(0, 80)); } catch (err) { if (err.message.includes('duplicate column') || err.message.includes('already exists')) { console.log('⏭️ 已存在:', sql.substring(0, 80)); } else { console.log('⚠️ 错误:', err.message.substring(0, 80)); } } } // 验证 const tables = await db.query("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"); console.log('\n当前数据库表:'); tables.rows.forEach(r => console.log(' -', r.name)); // 检查关键表结构 for (const table of ['logistics_companies', 'purchase_orders', 'payment_plans']) { const cols = await db.query(`PRAGMA table_info(${table})`); console.log(`\n${table} 列:`, cols.rows.map(r => r.name).join(', ')); } console.log('\n数据库Schema修复完成!'); process.exit(0); } fixDatabase().catch(err => { console.error('修复失败:', err); process.exit(1); });