Преглед изворни кода

[new]谈话详情增加点击模板切换谈话总结功能

zk пре 1 година
родитељ
комит
c188d5a468

+ 5 - 0
lib/data/api/atmob_api.dart

@@ -18,6 +18,7 @@ import 'package:electronic_assistant/data/api/request/talk_paginate_request.dart
 import 'package:electronic_assistant/data/api/request/talk_query_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_rename_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_request.dart';
+import 'package:electronic_assistant/data/api/request/talk_summary_generate_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_translate_request.dart';
 import 'package:electronic_assistant/data/api/request/template_delete_request.dart';
 import 'package:electronic_assistant/data/api/request/template_update_request.dart';
@@ -179,6 +180,10 @@ abstract class AtmobApi {
 
   @POST("/project/secretary/v1/template/delete")
   Future<BaseResponse> templateDelete(@Body() TemplateDeleteRequest request);
+
+  @POST("/project/secretary/v1/talk/summary/generate")
+  Future<BaseResponse<TalkBean>> talkSummaryGenerate(
+      @Body() TalkSummaryGenerateRequest request);
 }
 
 final atmobApi = AtmobApi(defaultDio, baseUrl: Constants.baseUrl);

+ 18 - 0
lib/data/api/request/talk_summary_generate_request.dart

@@ -0,0 +1,18 @@
+import 'package:electronic_assistant/base/app_base_request.dart';
+import 'package:json_annotation/json_annotation.dart';
+
+part 'talk_summary_generate_request.g.dart';
+
+@JsonSerializable()
+class TalkSummaryGenerateRequest extends AppBaseRequest {
+  @JsonKey(name: 'id')
+  String id;
+
+  @JsonKey(name: 'templateId')
+  int templateId;
+
+  TalkSummaryGenerateRequest(this.id, this.templateId);
+
+  @override
+  Map<String, dynamic> toJson() => _$TalkSummaryGenerateRequestToJson(this);
+}

+ 7 - 0
lib/data/repositories/talk_repository.dart

@@ -22,6 +22,7 @@ import '../api/request/talk_generate_request.dart';
 import '../api/request/talk_paginate_request.dart';
 import '../api/request/talk_rename_request.dart';
 import '../api/request/talk_request.dart';
+import '../api/request/talk_summary_generate_request.dart';
 import '../api/response/talk_check_electric_response.dart';
 import '../api/response/talk_info_response.dart';
 import '../api/response/talk_paginate_response.dart';
@@ -41,6 +42,12 @@ class TalkRepository {
 
   RxList<TalkBean> get talkList => _talkList;
 
+  Future<TalkBean> talkSummaryGenerate(String id, int templateId) {
+    return atmobApi
+        .talkSummaryGenerate(TalkSummaryGenerateRequest(id, templateId))
+        .then(HttpHandler.handle(false));
+  }
+
   Future<TalkTranslateResponse> talkTranslate(String content) {
     return atmobApi
         .talkTranslate(TalkTranslateRequest(content))

+ 31 - 23
lib/module/talk/common_view.dart

@@ -369,7 +369,9 @@ List<Widget> getTalkAgendaNormalList(List<Agenda>? list) {
 }
 
 Widget buildTemplateView(List<TemplateBean>? templateList, int? id,
-    {bool? isShowAdd, VoidCallback? addCallback}) {
+    {bool? isShowAdd,
+    VoidCallback? addCallback,
+    Function(TemplateBean)? onTap}) {
   return SizedBox(
     height: 32.h,
     child: ListView(
@@ -378,28 +380,34 @@ Widget buildTemplateView(List<TemplateBean>? templateList, int? id,
       children: [
         SizedBox(width: 12.w),
         for (var item in templateList ?? <TemplateBean>[])
-          Container(
-            height: double.infinity,
-            decoration: item.id == id
-                ? BoxDecoration(
-                    color: ColorName.colorPrimary,
-                    borderRadius: BorderRadius.circular(6.w),
-                  )
-                : BoxDecoration(
-                    borderRadius: BorderRadius.circular(6.w),
-                    color: "#FAF9FB".toColor(),
-                    border: Border.all(color: '#F2EFF5'.toColor(), width: 1.w),
-                  ),
-            margin: EdgeInsets.only(right: 8.w),
-            padding: EdgeInsets.symmetric(horizontal: 8.w),
-            child: Center(
-              child: Text(item.name ?? '',
-                  style: TextStyle(
-                      height: 1,
-                      fontSize: 13.sp,
-                      color: item.id == id
-                          ? ColorName.white
-                          : ColorName.secondaryTextColor)),
+          GestureDetector(
+            onTap: () {
+              onTap?.call(item);
+            },
+            child: Container(
+              height: double.infinity,
+              decoration: item.id == id
+                  ? BoxDecoration(
+                      color: ColorName.colorPrimary,
+                      borderRadius: BorderRadius.circular(6.w),
+                    )
+                  : BoxDecoration(
+                      borderRadius: BorderRadius.circular(6.w),
+                      color: "#FAF9FB".toColor(),
+                      border:
+                          Border.all(color: '#F2EFF5'.toColor(), width: 1.w),
+                    ),
+              margin: EdgeInsets.only(right: 8.w),
+              padding: EdgeInsets.symmetric(horizontal: 8.w),
+              child: Center(
+                child: Text(item.name ?? '',
+                    style: TextStyle(
+                        height: 1,
+                        fontSize: 13.sp,
+                        color: item.id == id
+                            ? ColorName.white
+                            : ColorName.secondaryTextColor)),
+              ),
             ),
           ),
         isShowAdd == true

+ 25 - 0
lib/module/talk/controller.dart

@@ -871,6 +871,31 @@ class TalkController extends BaseController {
     isShowMindFullScreen.value = false;
   }
 
+  void selectTemplate(TemplateBean bean) {
+    String? id = talkBean.value?.id;
+    int? templateId = bean.id;
+    if (talkBean.value?.templateId == templateId) {
+      return;
+    }
+    if (id == null || templateId == null) {
+      ToastUtil.showToast('谈话信息获取异常,请退出页面重试!');
+      return;
+    }
+    LoadingDialog.show('生成总结中...');
+
+    talkRepository
+        .talkSummaryGenerate(id, templateId)
+        .timeout(const Duration(seconds: 30))
+        .then((data) {
+      LoadingDialog.hide();
+      talkBean.value = data;
+      ToastUtil.showToast('生成成功', displayType: SmartToastType.last);
+    }).catchError((error) {
+      LoadingDialog.hide();
+      ToastUtil.showToast('生成失败');
+    });
+  }
+
   @override
   void onClose() {
     super.onClose();

+ 10 - 2
lib/module/talk/mindmap/controller.dart

@@ -27,6 +27,8 @@ class MindMapController extends BaseController {
 
   StreamSubscription? _talkSummaryListener;
   StreamSubscription? _talkStatusListener;
+  StreamSubscription? _talkBeanListener;
+
   GlobalKey repaintKey = GlobalKey();
 
   bool _isWebViewLoaded = false;
@@ -35,6 +37,9 @@ class MindMapController extends BaseController {
   void onReady() async {
     super.onReady();
 
+    _talkBeanListener = talkController.talkBean.listen((bean) {
+      _dealTalkSummaryUpdate(bean?.summary.value);
+    });
     _talkStatusListener =
         talkController.talkBean.value?.status.listen((status) {
       if (status == TalkStatus.analysisSuccess) {
@@ -89,8 +94,6 @@ class MindMapController extends BaseController {
     _updateMindData(summary);
   }
 
-  void addTemplateClick() {}
-
   void fullScreenClick() {
     talkController.isShowMindFullScreen.value = true;
   }
@@ -99,9 +102,14 @@ class MindMapController extends BaseController {
     talkController.onExitMindFullScreen();
   }
 
+  void selectTemplate(TemplateBean bean) {
+    talkController.selectTemplate(bean);
+  }
+
   @override
   void onClose() {
     super.onClose();
+    _talkBeanListener?.cancel();
     _talkStatusListener?.cancel();
     _talkSummaryListener?.cancel();
   }

+ 0 - 1
lib/module/talk/mindmap/mind_util.dart

@@ -4,7 +4,6 @@ import 'dart:typed_data';
 import 'dart:ui';
 import 'package:dsbridge_flutter/dsbridge_flutter.dart';
 import 'package:electronic_assistant/resource/colors.gen.dart';
-import 'package:flutter/cupertino.dart';
 import 'package:flutter_svg/svg.dart';
 import 'package:path_provider/path_provider.dart';
 import 'package:webview_flutter/webview_flutter.dart';

+ 4 - 1
lib/module/talk/mindmap/view.dart

@@ -67,7 +67,10 @@ class MindMapView extends BasePage<MindMapController> {
             child: Container(
               margin: EdgeInsets.only(top: 14.h),
               child: buildTemplateView(
-                  controller.templateList, controller.templateSelectId),
+                  controller.templateList, controller.templateSelectId,
+                  onTap: (bean) {
+                controller.selectTemplate(bean);
+              }),
             ),
           );
         }),

+ 4 - 0
lib/module/talk/summary/controller.dart

@@ -128,4 +128,8 @@ class SummaryController extends BaseController {
     _talkStatusListener?.cancel();
     _talkBeanListener?.cancel();
   }
+
+  void selectTemplate(TemplateBean template) {
+    talkController.selectTemplate(template);
+  }
 }

+ 3 - 0
lib/module/talk/summary/view.dart

@@ -126,6 +126,9 @@ class SummaryView extends BasePage<SummaryController> {
           Obx(() {
             return buildTemplateView(
                 controller.templateList, controller.templateSelectId,
+                onTap: (template) {
+                  controller.selectTemplate(template);
+                },
                 isShowAdd: true, addCallback: () {
               controller.addTemplateClick();
             });

+ 0 - 1
lib/module/talk/view.dart

@@ -15,7 +15,6 @@ import '../../resource/assets.gen.dart';
 import '../../resource/string.gen.dart';
 import '../../router/app_pages.dart';
 import '../../utils/common_style.dart';
-import 'original/view.dart';
 
 class TalkPage extends BasePage<TalkController> {
   final String? talkId;