Browse Source

[new]增加谈话状态

zk 1 năm trước cách đây
mục cha
commit
3fb77d69ea

BIN
assets/anim/talk_analyse.gif


BIN
assets/images/icon_talk_electric_low.webp


BIN
assets/images/icon_talk_electric_low_txt.webp


+ 2 - 0
assets/string/base/string.xml

@@ -50,4 +50,6 @@
     <string name="talk_un_analyzed_tips">谈话提交分析后,可查看相关内容</string>
     <string name="talk_analyzed_btn_txt">小听分析</string>
     <string name="talk_analyzing">小听正在分析谈话,请稍等~</string>
+    <string name="talk_electric_low">电量不足无法分析谈话</string>
+    <string name="talk_go_store">去充电</string>
 </resources>

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

@@ -7,6 +7,7 @@ import 'package:electronic_assistant/data/api/request/agenda_status_request.dart
 import 'package:electronic_assistant/data/api/request/chat_history_request.dart';
 import 'package:electronic_assistant/data/api/request/login_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_delete_request.dart';
+import 'package:electronic_assistant/data/api/request/talk_generate_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_rename_request.dart';
 import 'package:electronic_assistant/data/api/request/user_info_update_request.dart';
@@ -17,7 +18,9 @@ import 'package:electronic_assistant/data/api/response/agenda_response.dart';
 import 'package:electronic_assistant/data/api/response/chat_history_response.dart';
 import 'package:electronic_assistant/data/api/response/home_info_response.dart';
 import 'package:electronic_assistant/data/api/response/login_response.dart';
+import 'package:electronic_assistant/data/api/response/talk_check_electric_response.dart';
 import 'package:electronic_assistant/data/api/response/talk_detail_response.dart';
+import 'package:electronic_assistant/data/api/response/talk_original_response.dart';
 import 'package:electronic_assistant/data/consts/constants.dart';
 import 'package:retrofit/http.dart';
 
@@ -69,6 +72,14 @@ abstract class AtmobApi {
   @POST("/project/secretary/v1/agenda/list/mime")
   Future<BaseResponse<AgendaListMineResponse>> agendaListMine(
       @Body() TalkRequest request);
+
+  @POST("/project/secretary/v1/talk/original")
+  Future<BaseResponse<TalkOriginalResponse>> talkOriginal(
+      @Body() TalkRequest request);
+
+  @POST("/project/secretary/v1/talk/check/electric")
+  Future<BaseResponse<TalkCheckElectricResponse>> checkElectric(
+      @Body() TalkGenerateRequest request);
 }
 
 final atmobApi = AtmobApi(defaultDio, baseUrl: Constants.baseUrl);

+ 18 - 0
lib/data/api/request/talk_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_generate_request.g.dart';
+
+@JsonSerializable()
+class TalkGenerateRequest extends AppBaseRequest {
+
+  @JsonKey(name: 'duration')
+  double duration;
+
+  TalkGenerateRequest(this.duration);
+
+
+  @override
+  Map<String, dynamic> toJson() => _$TalkGenerateRequestToJson(this);
+
+}

+ 14 - 0
lib/data/api/response/talk_check_electric_response.dart

@@ -0,0 +1,14 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'talk_check_electric_response.g.dart';
+
+@JsonSerializable()
+class TalkCheckElectricResponse {
+  @JsonKey(name: 'enough')
+  bool enough;
+
+  TalkCheckElectricResponse({required this.enough});
+
+  factory TalkCheckElectricResponse.fromJson(Map<String, dynamic> json) =>
+      _$TalkCheckElectricResponseFromJson(json);
+}

+ 16 - 0
lib/data/api/response/talk_original_response.dart

@@ -0,0 +1,16 @@
+import 'package:json_annotation/json_annotation.dart';
+
+import '../../bean/talk_original.dart';
+
+part 'talk_original_response.g.dart';
+
+@JsonSerializable()
+class TalkOriginalResponse {
+  @JsonKey(name: 'list')
+  List<TalkOriginal>? list;
+
+  TalkOriginalResponse({this.list});
+
+  factory TalkOriginalResponse.fromJson(Map<String, dynamic> json) =>
+      _$TalkOriginalResponseFromJson(json);
+}

+ 36 - 0
lib/data/bean/talk_original.dart

@@ -0,0 +1,36 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'talk_original.g.dart';
+
+@JsonSerializable()
+class TalkOriginal {
+  @JsonKey(name: 'endMs')
+  int? endMs;
+
+  @JsonKey(name: 'startMs')
+  int? startMs;
+
+  @JsonKey(name: 'duration')
+  double? duration;
+
+  @JsonKey(name: 'speakerId')
+  int? speakerId;
+
+  @JsonKey(name: 'speaker')
+  String? speaker;
+
+  @JsonKey(name: 'sentence')
+  String? sentence;
+
+  TalkOriginal({
+    this.endMs,
+    this.startMs,
+    this.duration,
+    this.speakerId,
+    this.speaker,
+    this.sentence,
+  });
+
+  factory TalkOriginal.fromJson(Map<String, dynamic> json) =>
+      _$TalkOriginalFromJson(json);
+}

+ 6 - 8
lib/data/bean/talks.dart

@@ -54,13 +54,11 @@ class TalkBean {
       _$TalkBeanFromJson(json);
 }
 
-enum TalkStatus {
-  notAnalysis(0),
-  analysing(1),
-  analysisSuccess(2),
-  analysisFail(3);
+class TalkStatus {
+  TalkStatus._();
 
-  final int value;
-
-  const TalkStatus(this.value);
+  static int notAnalysis = 0;
+  static int analysing = 1;
+  static int analysisSuccess = 2;
+  static int analysisFail = 3;
 }

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

@@ -2,13 +2,22 @@ import 'package:electronic_assistant/data/api/atmob_api.dart';
 import 'package:electronic_assistant/data/api/request/talk_delete_request.dart';
 
 import '../../utils/http_handler.dart';
+import '../api/request/talk_generate_request.dart';
 import '../api/request/talk_rename_request.dart';
 import '../api/request/talk_request.dart';
+import '../api/response/talk_check_electric_response.dart';
 import '../api/response/talk_detail_response.dart';
 
 class TalkRepository {
   TalkRepository._();
 
+  // duration 音频时长,单位为秒
+  Future<TalkCheckElectricResponse> checkElectric(double duration) {
+    return atmobApi
+        .checkElectric(TalkGenerateRequest(duration))
+        .then(HttpHandler.handle(false));
+  }
+
   Future<TalkDetailResponse> talkInfo(String id) {
     return atmobApi.talkInfo(TalkRequest(id)).then(HttpHandler.handle(true));
   }

+ 41 - 1
lib/module/talk/controller.dart

@@ -1,8 +1,11 @@
-
 import 'package:electronic_assistant/base/base_controller.dart';
+import 'package:electronic_assistant/data/repositories/talk_repository.dart';
 import 'package:electronic_assistant/module/talk/summary/view.dart';
 import 'package:electronic_assistant/module/talk/todo/view.dart';
 import 'package:electronic_assistant/resource/string.gen.dart';
+import 'package:electronic_assistant/router/app_pages.dart';
+import 'package:electronic_assistant/utils/toast_util.dart';
+import 'package:flutter/cupertino.dart';
 import 'package:get/get.dart';
 import 'package:get/get_core/src/get_main.dart';
 
@@ -12,6 +15,10 @@ import 'original/view.dart';
 class TalkController extends BaseController {
   final talkBean = TalkBean().obs;
 
+  final analyseStatus = TalkStatus.notAnalysis.obs;
+
+  final isShowElectricLow = false.obs;
+
   final List<String> tabBeans = [
     StringName.talkTabSummary.tr,
     StringName.talkTabMyTask.tr,
@@ -26,9 +33,42 @@ class TalkController extends BaseController {
     getArguments();
   }
 
+  @override
+  void onReady() {
+    super.onReady();
+  }
+
   void getArguments() {
     if (Get.arguments is TalkBean) {
       talkBean.value = Get.arguments as TalkBean;
+      analyseStatus.value = talkBean.value.status ?? TalkStatus.notAnalysis;
     }
   }
+
+  void checkCanAnalyze() {
+    String? id = talkBean.value.id;
+    double? duration = talkBean.value.duration;
+    if (id == null || duration == null) {
+      return;
+    }
+    talkRepository.checkElectric(duration).then((data) {
+      if (data.enough) {
+        //提交分析
+        _requestAnalyze();
+      } else {
+        isShowElectricLow.value = true;
+      }
+    }).catchError((error) {
+      ToastUtil.showToast(error);
+    });
+  }
+
+  void _requestAnalyze() {
+    //提交文件
+  }
+
+  void goElectricStore() {
+    //TODO 跳转至商店页
+    Get.toNamed(RoutePath.login);
+  }
 }

+ 0 - 1
lib/module/talk/original/controller.dart

@@ -1,4 +1,3 @@
 import 'package:electronic_assistant/base/base_controller.dart';
-import 'package:get/get.dart';
 
 class OriginalController extends BaseController {}

+ 1 - 1
lib/module/talk/summary/controller.dart

@@ -28,6 +28,6 @@ class SummaryController extends BaseController {
     }).catchError((e) {
       ErrorHandler.toastError(e);
     });
-    agendaRepository.agendaListAll(id);
+    agendaRepository.agendaListAll(id).then((agenda) {});
   }
 }

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

@@ -1,14 +1,9 @@
-import 'package:electronic_assistant/base/base_controller.dart';
 import 'package:electronic_assistant/base/base_page.dart';
-import 'package:electronic_assistant/dialog/rename_dialog.dart';
-import 'package:electronic_assistant/resource/assets.gen.dart';
 import 'package:electronic_assistant/resource/colors.gen.dart';
 import 'package:electronic_assistant/resource/string.gen.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
-
-import '../../../utils/common_style.dart';
 import 'controller.dart';
 
 class SummaryView extends BasePage<SummaryController> {
@@ -18,41 +13,6 @@ class SummaryView extends BasePage<SummaryController> {
   Widget buildBody(BuildContext context) {
     return Stack(
       children: [
-        //谈话未分析
-        // SizedBox(
-        //   width: double.infinity,
-        //   child: Column(
-        //     children: [
-        //       SizedBox(height: 119.h),
-        //       SizedBox(
-        //           width: 100.w,
-        //           height: 100.w,
-        //           child: Assets.images.iconTalkSummaryUnanalyzed.image()),
-        //       SizedBox(height: 4.h),
-        //       Text(StringName.talkUnAnalyzed.tr,
-        //           style: TextStyle(
-        //               fontSize: 15.sp, color: ColorName.primaryTextColor)),
-        //       SizedBox(height: 2.h),
-        //       Text(StringName.talkUnAnalyzedTips.tr,
-        //           style: TextStyle(
-        //               fontSize: 12.sp, color: ColorName.secondaryTextColor)),
-        //       SizedBox(height: 24.h),
-        //       Container(
-        //         decoration: getPrimaryBtnDecoration(8),
-        //         width: 240.w,
-        //         height: 48.w,
-        //         child: Center(
-        //           child: Text(
-        //             StringName.talkAnalyzedBtnTxt.tr,
-        //             style: TextStyle(fontSize: 16.sp, color: ColorName.white),
-        //           ),
-        //         ),
-        //       )
-        //     ],
-        //   ),
-        // ),
-
-        //谈话生成中
         SizedBox(
           width: double.infinity,
           child: Column(

+ 108 - 4
lib/module/talk/view.dart

@@ -15,7 +15,9 @@ import 'package:get/get_core/src/get_main.dart';
 
 import '../../data/bean/talks.dart';
 import '../../resource/assets.gen.dart';
+import '../../resource/string.gen.dart';
 import '../../router/app_pages.dart';
+import '../../utils/common_style.dart';
 
 class TalkPage extends BasePage<TalkController> {
   TalkPage({super.key});
@@ -101,10 +103,8 @@ class TalkPage extends BasePage<TalkController> {
                             color: const Color(0xFFf6f6f6),
                             indent: 12.w,
                             endIndent: 12.w),
-                        Expanded(
-                            child: TabBarView(
-                          children: controller.pages,
-                        ))
+                        SizedBox(height: 8.h),
+                        buildTalkContentView()
                       ],
                     )))
           ],
@@ -131,4 +131,108 @@ class TalkPage extends BasePage<TalkController> {
           ),
         ));
   }
+
+  Widget buildTalkContentView() {
+    return Obx(() {
+      if (controller.analyseStatus.value == TalkStatus.notAnalysis) {
+        if (controller.isShowElectricLow.value) {
+          return buildElectricLowView();
+        } else {
+          return buildNotAnalysisView();
+        }
+      } else {
+        return Expanded(
+          child: TabBarView(
+            children: controller.pages,
+          ),
+        );
+      }
+    });
+  }
+
+  Widget buildNotAnalysisView() {
+    return SizedBox(
+      width: double.infinity,
+      child: Column(
+        children: [
+          SizedBox(height: 119.h),
+          SizedBox(
+              width: 100.w,
+              height: 100.w,
+              child: Assets.images.iconTalkSummaryUnanalyzed.image()),
+          SizedBox(height: 4.h),
+          Text(StringName.talkUnAnalyzed.tr,
+              style: TextStyle(
+                  fontSize: 15.sp, color: ColorName.primaryTextColor)),
+          SizedBox(height: 2.h),
+          Text(StringName.talkUnAnalyzedTips.tr,
+              style: TextStyle(
+                  fontSize: 12.sp, color: ColorName.secondaryTextColor)),
+          SizedBox(height: 24.h),
+          GestureDetector(
+            onTap: () {
+              controller.checkCanAnalyze();
+            },
+            child: Container(
+              decoration: getPrimaryBtnDecoration(8),
+              width: 240.w,
+              height: 48.w,
+              child: Center(
+                child: Text(
+                  StringName.talkAnalyzedBtnTxt.tr,
+                  style: TextStyle(fontSize: 16.sp, color: ColorName.white),
+                ),
+              ),
+            ),
+          )
+        ],
+      ),
+    );
+  }
+
+  Widget buildElectricLowView() {
+    return Container(
+      color: const Color(0xFFDFE4FC),
+      padding: EdgeInsets.only(left: 16.w, right: 12.w, top: 8.h, bottom: 8.h),
+      child: Row(
+        children: [
+          SizedBox(
+              width: 46.w,
+              height: 56.w,
+              child: Assets.images.iconTalkElectricLow.image()),
+          SizedBox(width: 10.w),
+          IntrinsicHeight(
+            child: Column(
+              crossAxisAlignment: CrossAxisAlignment.start,
+              children: [
+                SizedBox(
+                    width: 90.w,
+                    height: 21.w,
+                    child: Assets.images.iconTalkElectricLowTxt.image()),
+                SizedBox(width: 1.w),
+                Text(StringName.talkElectricLow.tr,
+                    style: TextStyle(
+                        fontSize: 12.sp, color: ColorName.secondaryTextColor)),
+              ],
+            ),
+          ),
+          const Spacer(),
+          GestureDetector(
+            onTap: () {
+              controller.goElectricStore();
+            },
+            child: Container(
+                decoration: getPrimaryBtnDecoration(8),
+                width: 100.w,
+                height: 36.w,
+                child: Center(
+                  child: Text(StringName.talkGoStore.tr,
+                      style:
+                          TextStyle(fontSize: 16.sp, color: ColorName.white)),
+                )),
+          )
+        ],
+      ),
+    );
+  }
 }

+ 0 - 0
lib/utils/popup_util.dart