备份:修复前完整项目快照 2026-04-19
This commit is contained in:
+112
@@ -0,0 +1,112 @@
|
||||
const db = require('./backend/db-sqlite');
|
||||
async function fix() {
|
||||
const fixes = [
|
||||
// projects - missing columns
|
||||
"ALTER TABLE projects ADD COLUMN code TEXT DEFAULT ''",
|
||||
"ALTER TABLE projects ADD COLUMN location TEXT DEFAULT ''",
|
||||
"ALTER TABLE projects ADD COLUMN contract_amount REAL DEFAULT 0",
|
||||
"ALTER TABLE projects ADD COLUMN start_date TEXT DEFAULT ''",
|
||||
"ALTER TABLE projects ADD COLUMN end_date TEXT DEFAULT ''",
|
||||
"ALTER TABLE projects ADD COLUMN description TEXT DEFAULT ''",
|
||||
"ALTER TABLE projects ADD COLUMN manager_id INTEGER DEFAULT 0",
|
||||
"ALTER TABLE projects ADD COLUMN customer_id INTEGER DEFAULT 0",
|
||||
|
||||
// budget_quotations table
|
||||
`CREATE TABLE IF NOT EXISTS budget_quotations (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
project_id INTEGER,
|
||||
version INTEGER DEFAULT 1,
|
||||
quotation_date TEXT DEFAULT '',
|
||||
amount REAL DEFAULT 0,
|
||||
currency TEXT DEFAULT 'CNY',
|
||||
status TEXT DEFAULT 'draft',
|
||||
file_url TEXT DEFAULT '',
|
||||
remark TEXT DEFAULT '',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)`,
|
||||
|
||||
// budget_projects - missing columns
|
||||
"ALTER TABLE budget_projects ADD COLUMN manager_id INTEGER DEFAULT 0",
|
||||
"ALTER TABLE budget_projects ADD COLUMN location TEXT DEFAULT ''",
|
||||
"ALTER TABLE budget_projects ADD COLUMN survey_date TEXT DEFAULT ''",
|
||||
"ALTER TABLE budget_projects ADD COLUMN intermediary TEXT DEFAULT ''",
|
||||
"ALTER TABLE budget_projects ADD COLUMN intermediary_fee_type TEXT DEFAULT ''",
|
||||
"ALTER TABLE budget_projects ADD COLUMN intermediary_fee_value REAL DEFAULT 0",
|
||||
"ALTER TABLE budget_projects ADD COLUMN customer_requirements TEXT DEFAULT ''",
|
||||
"ALTER TABLE budget_projects ADD COLUMN project_overview TEXT DEFAULT ''",
|
||||
"ALTER TABLE budget_projects ADD COLUMN attachments TEXT DEFAULT '[]'",
|
||||
"ALTER TABLE budget_projects ADD COLUMN survey_photos TEXT DEFAULT '[]'",
|
||||
"ALTER TABLE budget_projects ADD COLUMN status TEXT DEFAULT 'negotiating'",
|
||||
"ALTER TABLE budget_projects ADD COLUMN updated_at DATETIME DEFAULT CURRENT_TIMESTAMP",
|
||||
|
||||
// exchange_rates - missing columns
|
||||
"ALTER TABLE exchange_rates ADD COLUMN pair_key TEXT DEFAULT ''",
|
||||
"ALTER TABLE exchange_rates ADD COLUMN effective_date TEXT DEFAULT ''",
|
||||
"ALTER TABLE exchange_rates ADD COLUMN updated_at DATETIME DEFAULT CURRENT_TIMESTAMP",
|
||||
|
||||
// project_contracts table
|
||||
`CREATE TABLE IF NOT EXISTS project_contracts (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
project_id INTEGER,
|
||||
contract_code TEXT DEFAULT '',
|
||||
contract_amount REAL DEFAULT 0,
|
||||
currency TEXT DEFAULT 'CNY',
|
||||
settlement_method TEXT DEFAULT 'lump_sum',
|
||||
contract_period INTEGER DEFAULT 180,
|
||||
start_date TEXT DEFAULT '',
|
||||
end_date TEXT DEFAULT '',
|
||||
warranty_deposit_percentage REAL DEFAULT 5,
|
||||
warranty_period INTEGER DEFAULT 12,
|
||||
contract_file TEXT DEFAULT '',
|
||||
other_info TEXT DEFAULT '',
|
||||
tax_included INTEGER DEFAULT 1,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)`,
|
||||
|
||||
// project_milestones table
|
||||
`CREATE TABLE IF NOT EXISTS project_milestones (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
project_id INTEGER,
|
||||
milestone_name TEXT DEFAULT '',
|
||||
condition TEXT DEFAULT '',
|
||||
percentage REAL DEFAULT 0,
|
||||
amount REAL DEFAULT 0,
|
||||
expected_date TEXT DEFAULT '',
|
||||
status TEXT DEFAULT 'pending',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)`,
|
||||
|
||||
// project_materials table
|
||||
`CREATE TABLE IF NOT EXISTS project_materials (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
project_id INTEGER,
|
||||
product_name TEXT DEFAULT '',
|
||||
unit TEXT DEFAULT '',
|
||||
budget_quantity REAL DEFAULT 0,
|
||||
average_price REAL DEFAULT 0,
|
||||
total_amount REAL DEFAULT 0,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
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();
|
||||
Reference in New Issue
Block a user