import db from "../utils/db"; export default { createTalbe() { return db.executeSql(` CREATE TABLE IF NOT EXISTS chat_groups ( group_id INTEGER, user_id INTEGER, realname TEXT, avatar TEXT, displayName TEXT, email TEXT, unread INTEGER, name_py TEXT, owner_id INTEGER, notice TEXT, is_blacklist TEXT, role INTEGER, is_notice INTEGER, is_top INTEGER, setting TEXT, id INTEGER, account TEXT, is_group TEXT, group_index TEXT, is_online INTEGER, is_at INTEGER, type TEXT, lastContent TEXT, lastSendTime INTEGER, location TEXT, last_login_ip TEXT ) `) }, async getList() { try { const res = await db.selectSql('select * from chat_groups'); console.log('原始查询结果:', res); // 查看原始数据结构 return res; } catch (error) { console.error('查询失败:', error); return []; } }, async deleteallList(){ try { await db.executeSql('DELETE FROM chat_groups'); return true; }catch (error) { console.error('删除失败:', error); return false; } }, // 批量插入/更新数据 async batchInsertOrUpdate(groupData) { if (!Array.isArray(groupData)) { throw new Error('数据必须为数组格式'); } const dbInstance = await db.createDatabase(); try { // 开启事务 await db.executeSql('BEGIN IMMEDIATE TRANSACTION'); // 清空旧数据(根据需求决定是否需要) await db.executeSql('DELETE FROM chat_groups'); // console.log('DELETE 操作执行完成'); const [checkRes] = await db.selectSql('SELECT COUNT(*) AS count FROM chat_groups'); // console.info('删除表中记录',checkRes.count); if (checkRes.count !== 0) { throw new Error('数据删除验证失败,表中仍存在记录'); return true; } // console.info(groupData); // 构建批量插入语句 const insertPromises = groupData.map(async (item) => { // 字段值预处理 const processedItem = { group_id: item.group_id ?? null, user_id: item.user_id ?? null, realname: item.realname || '', avatar: item.avatar || '', displayName: item.displayName || '', email: item.email || '', unread: Number(item.unread) || 0, name_py: item.name_py || '', owner_id: Number(item.owner_id) || 0, notice: item.notice || '', is_blacklist: item.is_blacklist || null, role: Number(item.role) || 0, is_notice: item.is_notice || null, is_top: JSON.stringify(item.is_top) || null, setting: item.setting ? JSON.stringify(item.setting) : '{}', id: item.id, account: item.account || '', is_group: JSON.stringify(item.is_group) || '', group_index: String(item.index || ''), is_online: item.is_online || null, is_at: JSON.stringify(item.is_at) || null, type: item.type || null, lastContent: item.lastContent||'', lastSendTime: Number(item.lastSendTime) || Date.now(), location: item.location || '', last_login_ip: item.last_login_ip || '' }; // 删除原接口中的index字段 // delete processedItem.index; // 提取值数组(注意顺序要与SQL语句中的字段顺序一致) const values = [ processedItem.group_id, processedItem.user_id, processedItem.realname, processedItem.avatar, processedItem.displayName, processedItem.email, processedItem.unread, processedItem.name_py, processedItem.owner_id, processedItem.notice, processedItem.is_blacklist, processedItem.role, processedItem.is_notice, processedItem.is_top, processedItem.setting, processedItem.id, processedItem.account, processedItem.is_group, processedItem.group_index, processedItem.is_online, processedItem.is_at, processedItem.type, processedItem.lastContent, processedItem.lastSendTime, processedItem.location, processedItem.last_login_ip ]; let value_str = "'" + values.join("','") + "'" // console.info(values); // 构建INSERT语句 const sql = ` INSERT OR REPLACE INTO chat_groups ( group_id,user_id, realname, avatar, displayName, email, unread, name_py, owner_id, notice, is_blacklist, role, is_notice, is_top, setting, id, account, is_group, group_index, is_online, is_at, type, lastContent, lastSendTime,location,last_login_ip ) VALUES (` + value_str + `) `; return db.executeSql(sql); }); // console.info(insertPromises,'1111'); await Promise.all(insertPromises); await db.executeSql('COMMIT'); console.log('首页数据同步成功,插入/更新', groupData.length, '条记录'); return true; } catch (error) { await db.executeSql('ROLLBACK'); console.error('数据同步失败:', error); throw new Error('数据同步失败: ' + error.message); } } }