From 34825444f2a464cc034e905b6e7cb14c2b56850b Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Thu, 26 Jun 2025 12:34:36 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A6=82=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/modules/meeting/views/overview_tab.dart | 191 +++++++++++++++++++- 1 file changed, 187 insertions(+), 4 deletions(-) diff --git a/lib/modules/meeting/views/overview_tab.dart b/lib/modules/meeting/views/overview_tab.dart index 8210352c7..3f65ed1a9 100644 --- a/lib/modules/meeting/views/overview_tab.dart +++ b/lib/modules/meeting/views/overview_tab.dart @@ -1,7 +1,10 @@ +import 'package:common_utils/common_utils.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import '../controllers/meeting_details_controller.dart'; +import 'generate_bottom_sheet.dart'; class OverviewTab extends StatefulWidget { const OverviewTab({super.key}); @@ -13,14 +16,194 @@ class OverviewTab extends StatefulWidget { class _OverviewTabState extends State { final _controller = Get.find(); + List _dataList = []; + + @override + void initState() { + super.initState(); + if (_controller.meetingDetails.value.overview.isNotEmpty) { + _dataList = _controller.meetingDetails.value.overview.split('\n'); + } + } + @override Widget build(BuildContext context) { - return SingleChildScrollView( + return Stack( + children: [ + _dataList.isNotEmpty + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(top: 5.w), + child: Text( + DateUtil.formatDateMs( + _controller.meetingData.value.creationtime, + format: DateFormats.y_mo_d_h_m, + ), + style: TextStyle( + color: Colors.black54, + fontSize: 12.sp, + ), + ), + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 10.w), + child: Text( + _controller.meetingData.value.title, + style: TextStyle( + fontSize: 20.sp, + fontWeight: FontWeight.bold, + ), + ), + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 10.w), + child: Divider( + height: 1, + color: Colors.grey[300], + ), + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 10.w), + child: Text( + '分析出${_dataList.length}个关键事件。', + style: TextStyle( + color: Colors.grey, + fontSize: 12.sp, + ), + ), + ), + Expanded( + child: ListView.builder( + itemCount: _dataList.length, + padding: EdgeInsets.fromLTRB(10.w, 10.w, 10.w, 80.w), + itemBuilder: (BuildContext context, int index) { + return _item(_dataList[index]); + }, + ), + ), + ], + ) + : _empty(), + Obx( + () => Positioned( + bottom: 20.w, + left: 0, + right: 0, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + if (_controller.meetingDetails.value.tasktype == 0) + SizedBox( + width: 150.w, + child: _button( + Icons.auto_awesome, + '生成', + () { + Get.bottomSheet( + const GenerateBottomSheet(), + isScrollControlled: true, + backgroundColor: Colors.grey[100], + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(12.r), + ), + ), + ); + }, + ), + ), + ], + ), + ), + ), + ], + ); + } + + Widget _item(String data) { + return Container( + padding: EdgeInsets.all(10.w), + margin: EdgeInsets.symmetric(vertical: 5.w), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12.w), + boxShadow: const [ + BoxShadow( + color: Color(0x1A3045C8), + offset: Offset(0.0, 0.0), + blurRadius: 10, + spreadRadius: 0.0, + ), + ], + ), + child: Text(data), + ); + } + + Widget _button(IconData icon, String title, Function() onTap) { + return GestureDetector( + onTap: onTap, + child: Container( + height: 42.w, + padding: EdgeInsets.symmetric(horizontal: 15.w), + margin: EdgeInsets.symmetric(horizontal: 4.w), + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(42.w), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + icon, + color: Colors.white, + size: 20.sp, + ), + 5.horizontalSpace, + Text( + title, + style: TextStyle( + color: Colors.white, + fontSize: 14.sp, + ), + ), + ], + ), + ), + ); + } + + Widget _empty() { + return Padding( + padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 30.w), child: Column( children: [ - Text('概览'), - Text('AI分析识别录音中的关键事件,让你选择重要事件进行AI生成。'), - Text(_controller.meetingDetails.value.overview), + Padding( + padding: EdgeInsets.only(bottom: 10.w), + child: Icon( + Icons.summarize, + color: Colors.grey, + size: 40.sp, + ), + ), + Text( + '概览', + style: TextStyle( + color: Colors.black87, + fontSize: 18.sp, + fontWeight: FontWeight.bold, + ), + ), + Text( + 'AI分析识别录音中的关键事件,让你选择重要事件进行AI生成。', + style: TextStyle( + color: Colors.grey, + fontSize: 14.sp, + ), + textAlign: TextAlign.center, + ), ], ), ); From c81b9d39333de5e89d67c048b72f16b4519dd347 Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Thu, 26 Jun 2025 15:00:07 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../meeting/controllers/meeting_details_controller.dart | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/modules/meeting/controllers/meeting_details_controller.dart b/lib/modules/meeting/controllers/meeting_details_controller.dart index 310257ef5..6224a72c9 100644 --- a/lib/modules/meeting/controllers/meeting_details_controller.dart +++ b/lib/modules/meeting/controllers/meeting_details_controller.dart @@ -252,7 +252,11 @@ class MeetingDetailsController extends GetxController verifyQuantity++; DeapsoundAIService().sendMessage( messages: [ - {'role': 'system', 'content': _systemPrompt}, + { + 'role': 'system', + 'content': + '您将扮演一名会议总结专家,拥有超强的信息归纳与细分能力。不仅能高效处理各类通用场景会议,精准提炼会议核心内容,为后续思维导图生成奠定坚实基础。若涉及人员,人员名称保留[]。并根据内容只输出对应语言。', + }, {'role': 'user', 'content': allText}, ], ).then((value) { From 879e0a5620914d162fe678b1a3d6cbc1058ffaa8 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Thu, 26 Jun 2025 15:55:07 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E4=BB=A3=E7=A0=81=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/data/services/network/api.dart | 9 +++++++++ lib/modules/pairing/controllers/pairing_controller.dart | 9 ++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/data/services/network/api.dart b/lib/data/services/network/api.dart index 1eb3f41a0..bed184ddc 100644 --- a/lib/data/services/network/api.dart +++ b/lib/data/services/network/api.dart @@ -135,4 +135,13 @@ class Api { params: params, ); } + + //绑定设备 + static bindauthcode([params]) { + return DioManager().request( + NWMethod.post, + '/api/home/user_bindauthcode', + params: params, + ); + } } diff --git a/lib/modules/pairing/controllers/pairing_controller.dart b/lib/modules/pairing/controllers/pairing_controller.dart index 1915aaba3..6ea666b8b 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -535,7 +535,6 @@ class PairingController extends GetxController { // 调用BLE管理器的自动绑定方法 final response = await Api.bindearphone({ "earphonemac": currentDevice?.address, - "earphoneauthcode": "", }); Logger.i(_tag, '手动授权结果 ${response}'); if (response != null) { @@ -551,7 +550,7 @@ class PairingController extends GetxController { /// 用户点击授权码输入框 void onAutoCodeInputTap() async { // 调用BLE管理器的自动绑定方法 - final response = await Api.bindearphone({ + final response = await Api.bindauthcode({ "earphonemac": currentDevice?.address, "earphoneauthcode": codeInputController.text.trim(), }); @@ -575,7 +574,7 @@ class PairingController extends GetxController { } catch (e) { Logger.e(_tag, '启动AgentService失败: $e'); } - + Get.offAllNamed(Routes.home); }); } @@ -634,7 +633,7 @@ class PairingController extends GetxController { /// 用户点击跳过按钮 void onSkipTap() async { Logger.i(_tag, '用户选择跳过配对'); - + // 启动AgentService服务 try { Logger.i(_tag, '启动AgentService服务'); @@ -642,7 +641,7 @@ class PairingController extends GetxController { } catch (e) { Logger.e(_tag, '启动AgentService失败: $e'); } - + Get.offAllNamed(Routes.home); }