You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

166 lines
4.9 KiB

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);
}
}
}