diff --git a/lib/core/utils/synchrodata.dart b/lib/core/utils/synchrodata.dart index f8dba5c87..4d8d2e3af 100644 --- a/lib/core/utils/synchrodata.dart +++ b/lib/core/utils/synchrodata.dart @@ -1,5 +1,8 @@ +import 'dart:convert'; + import 'package:get_storage/get_storage.dart'; +import '../../data/services/db/sqflite_api.dart'; import '../../data/services/network/api.dart'; class Synchrodata { @@ -43,6 +46,7 @@ class Synchrodata { foundElement.addAll({ ...params, 'id': id, + 'number': params['id'], }); } else { _records.add({ @@ -68,9 +72,23 @@ class Synchrodata { if (_isSynchro) return; _isSynchro = true; if (_records.isNotEmpty || _delids.isNotEmpty) { + // 获取需要修改的全部数据 + List putRecords = []; + for (var element in _records) { + final result = await SqfliteApi.getMeetingDetails(element['number']); + final speakerList = + await SqfliteApi.getMeetingSpeaker(element['number']); + putRecords.add({ + ...result, + ...result['details'], + 'rtype': result['type'], + 'original': jsonEncode(speakerList), + ...element, + }); + } var result = await Api.putOperationRecord({ 'delids': _delids, - 'records': _records, + 'records': putRecords, }); if (result != null) { _records = []; diff --git a/lib/data/services/db/database_helper.dart b/lib/data/services/db/database_helper.dart index 0773d9c12..0d6c3aa54 100644 --- a/lib/data/services/db/database_helper.dart +++ b/lib/data/services/db/database_helper.dart @@ -39,14 +39,6 @@ class DatabaseHelper { synctime INTEGER ) '''); - // 操作记录 - batch.execute(''' - CREATE TABLE IF NOT EXISTS operationrecord ( - id INTEGER PRIMARY KEY, - method TEXT, - data TEXT - ) - '''); // 商务会议助手列表 batch.execute(''' CREATE TABLE IF NOT EXISTS meeting ( diff --git a/lib/data/services/db/sqflite_api.dart b/lib/data/services/db/sqflite_api.dart index 001931360..5857b3a7a 100644 --- a/lib/data/services/db/sqflite_api.dart +++ b/lib/data/services/db/sqflite_api.dart @@ -101,6 +101,10 @@ class SqfliteApi { where: 'meetingid = ?', whereArgs: [id], ); + Synchrodata.saveOperationRecord('update', { + ...meeting, + 'id': id, + }); return true; } catch (e) { Get.snackbar( diff --git a/lib/modules/meeting/controllers/meeting_details_controller.dart b/lib/modules/meeting/controllers/meeting_details_controller.dart index 8577525ba..81c4c1841 100644 --- a/lib/modules/meeting/controllers/meeting_details_controller.dart +++ b/lib/modules/meeting/controllers/meeting_details_controller.dart @@ -10,6 +10,7 @@ import 'package:get_storage/get_storage.dart'; import 'package:http/http.dart' as http; import '../../../core/utils/logger.dart'; +import '../../../core/utils/synchrodata.dart'; import '../../../core/utils/upload_oss.dart'; import '../../../data/models/appconfig.dart'; import '../../../data/services/db/sqflite_api.dart'; @@ -208,6 +209,10 @@ class MeetingDetailsController extends GetxController textList[index] = dataMap; } } + Synchrodata.saveOperationRecord('update', { + 'original': jsonEncode(textList), + 'id': id, + }); isSpeakerText.value = false; editSpeakerTextId.value = 0; editSpeakerTextList = []; @@ -417,6 +422,10 @@ class MeetingDetailsController extends GetxController await SqfliteApi.editMeeting(id, {'tasktype': 2, 'personnel': personnel}); List speakerList = await SqfliteApi.getMeetingSpeaker(id); textList.value = List.from(speakerList); + Synchrodata.saveOperationRecord('update', { + 'original': jsonEncode(textList), + 'id': id, + }); meetingDetails.value.tasktype = 2; meetingDetails.value.personnel = personnel; meetingDetails.refresh(); diff --git a/lib/modules/meeting/views/share_bottom_sheet.dart b/lib/modules/meeting/views/share_bottom_sheet.dart index 229d83501..42b377255 100644 --- a/lib/modules/meeting/views/share_bottom_sheet.dart +++ b/lib/modules/meeting/views/share_bottom_sheet.dart @@ -6,6 +6,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:get_storage/get_storage.dart'; import 'package:path_provider/path_provider.dart'; import 'package:share_plus/share_plus.dart'; @@ -71,7 +72,16 @@ class _ShareBottomSheetState extends State { child: Column( children: [ _box([ - _shareItem(Icons.link, '分享链接', isBorder: false), + _shareItem(Icons.link, '分享链接', isBorder: false, onTap: () { + final GetStorage storage = GetStorage(); + String token = storage.read("logintoken") ?? ''; + String userId = ''; + Map? userInfo = storage.read("user_info"); + if (userInfo != null) { + userId = userInfo['user']['uid']; + } + String id = '${userId}_${_controller.meetingData.value.id}'; + }), ]), _box([ _shareItem(Icons.copy, '复制转写', onTap: () { diff --git a/lib/modules/meeting/views/speaker_all_bottom_sheet.dart b/lib/modules/meeting/views/speaker_all_bottom_sheet.dart index 93b89c0f3..1d7a7c03b 100644 --- a/lib/modules/meeting/views/speaker_all_bottom_sheet.dart +++ b/lib/modules/meeting/views/speaker_all_bottom_sheet.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:common_utils/common_utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; @@ -6,6 +8,7 @@ import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:lottie/lottie.dart'; +import '../../../core/utils/synchrodata.dart'; import '../../../data/services/db/sqflite_api.dart'; import '../controllers/meeting_details_controller.dart'; @@ -556,6 +559,10 @@ class _SpeakerAllBottomSheetState extends State { bool isEditSummary = false; String summaryText = _controller.meetingDetails.value.summary; _controller.textList.value = newTextList; + Synchrodata.saveOperationRecord('update', { + 'original': jsonEncode(_controller.textList), + 'id': _controller.meetingData.value.id, + }); for (var element in personnelList) { if (summaryText.contains('[${element['original']}]')) { summaryText = summaryText.replaceAll( diff --git a/lib/modules/meeting/views/speaker_bottom_sheet.dart b/lib/modules/meeting/views/speaker_bottom_sheet.dart index 0a0a40871..2e814e26f 100644 --- a/lib/modules/meeting/views/speaker_bottom_sheet.dart +++ b/lib/modules/meeting/views/speaker_bottom_sheet.dart @@ -1,9 +1,12 @@ +import 'dart:convert'; + import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; +import '../../../core/utils/synchrodata.dart'; import '../../../data/services/db/sqflite_api.dart'; import '../controllers/meeting_details_controller.dart'; @@ -331,6 +334,10 @@ class _SpeakerBottomSheetState extends State { dataMap['speaker'] = _speakerController.text; _controller.textList[index] = dataMap; } + Synchrodata.saveOperationRecord('update', { + 'original': jsonEncode(_controller.textList), + 'id': _controller.meetingData.value.id, + }); _addHistorySpeaker(); Get.back(); } @@ -361,6 +368,10 @@ class _SpeakerBottomSheetState extends State { var result = await SqfliteApi.editMeetingSpeaker(editSpeakerList); if (result != null) { _controller.textList.value = newTextList; + Synchrodata.saveOperationRecord('update', { + 'original': jsonEncode(_controller.textList), + 'id': _controller.meetingData.value.id, + }); if (_controller.meetingDetails.value.summary .contains('[${widget.speakerName}]')) { String summaryText = _controller.meetingDetails.value.summary