Przeglądaj źródła

[new]增加谈话详情tab配置显示

zk 1 rok temu
rodzic
commit
43753ae838

+ 15 - 0
lib/data/bean/config_talk_tabs.dart

@@ -0,0 +1,15 @@
+import 'package:electronic_assistant/data/bean/talk_tabs.dart';
+import 'package:json_annotation/json_annotation.dart';
+
+part 'config_talk_tabs.g.dart';
+
+@JsonSerializable()
+class ConfigTalkTabs {
+  @JsonKey(name: 'tabs')
+  List<TalkTabs>? tabs;
+
+  ConfigTalkTabs(this.tabs);
+
+  factory ConfigTalkTabs.fromJson(Map<String, dynamic> json) =>
+      _$ConfigTalkTabsFromJson(json);
+}

+ 39 - 0
lib/data/bean/talk_tabs.dart

@@ -0,0 +1,39 @@
+import 'package:json_annotation/json_annotation.dart';
+
+import '../../module/talk/controller.dart';
+
+part 'talk_tabs.g.dart';
+
+@JsonSerializable()
+class TalkTabs {
+  @JsonKey(name: 'name')
+  final String name;
+
+  @JsonKey(
+      name: 'type',
+      fromJson: _talkTabsTypeFromJson,
+      includeToJson: false,
+      includeFromJson: true)
+  final TalkBarType type;
+
+  @JsonKey(name: 'select')
+  final bool? select;
+
+  TalkTabs(this.name, this.type, this.select);
+
+  factory TalkTabs.fromJson(Map<String, dynamic> json) =>
+      _$TalkTabsFromJson(json);
+
+  static _talkTabsTypeFromJson(String? target) {
+    if (target == 'summary') {
+      return TalkBarType.summary;
+    } else if (target == 'mind') {
+      return TalkBarType.mindMap;
+    } else if (target == 'agenda') {
+      return TalkBarType.myTask;
+    } else if (target == 'original') {
+      return TalkBarType.original;
+    }
+    throw Exception('Unknown TalkTabs type: $target');
+  }
+}

+ 33 - 0
lib/data/repositories/config_repository.dart

@@ -1,20 +1,53 @@
 import 'package:electronic_assistant/base/app_base_request.dart';
 import 'package:electronic_assistant/data/api/atmob_api.dart';
+import 'package:electronic_assistant/data/bean/config_talk_tabs.dart';
+import 'package:electronic_assistant/resource/string.gen.dart';
 import 'package:electronic_assistant/utils/async_util.dart';
 import 'package:electronic_assistant/utils/http_handler.dart';
+import 'package:get/get.dart';
 
+import '../../module/talk/controller.dart';
 import '../../utils/app_info_util.dart';
 import '../api/request/config_request.dart';
 import '../api/response/config_response.dart';
 import '../api/response/example_info_response.dart';
 import '../bean/config_bean.dart';
+import '../bean/talk_tabs.dart';
 import '../bean/version_update_bean.dart';
 
 class ConfigRepository {
   ConfigRepository._();
 
+  List<TalkTabs>? _tabs;
   ExampleInfoResponse? _exampleInfo;
 
+  void refreshTalkTab() {
+    AsyncUtil.retryWithExponentialBackoff(() => configs(['talk_tab']), 5)
+        .then((value) {
+      if (value.list.isNotEmpty) {
+        ConfigBean configBean = value.list.first;
+        if (configBean.value is Map<String, dynamic>) {
+          ConfigTalkTabs talkTabs = ConfigTalkTabs.fromJson(configBean.value);
+          if (talkTabs.tabs?.isNotEmpty == true) {
+            _tabs = talkTabs.tabs;
+          }
+        }
+      }
+    });
+  }
+
+  List<TalkTabs> getTalkTabs() {
+    if (_tabs != null && _tabs!.isNotEmpty) {
+      return _tabs!;
+    }
+    return [
+      TalkTabs(StringName.talkTabSummary.tr, TalkBarType.summary, true),
+      TalkTabs(StringName.talkMindMap.tr, TalkBarType.mindMap, false),
+      TalkTabs(StringName.talkTabMyTask.tr, TalkBarType.myTask, false),
+      TalkTabs(StringName.talkTabOriginal.tr, TalkBarType.original, false),
+    ];
+  }
+
   Future<ExampleInfoResponse> getExampleInfo() async {
     if (_exampleInfo != null) {
       return _exampleInfo!;

+ 1 - 0
lib/module/main/controller.dart

@@ -89,6 +89,7 @@ class MainController extends BaseController {
   void onInit() {
     super.onInit();
     accountRepository;
+    configRepository.refreshTalkTab();
   }
 
   @override

+ 44 - 33
lib/module/talk/controller.dart

@@ -5,6 +5,7 @@ import 'package:dsbridge_flutter/dsbridge_flutter.dart';
 import 'package:electronic_assistant/base/base_controller.dart';
 import 'package:electronic_assistant/data/consts/event_report_id.dart';
 import 'package:electronic_assistant/data/repositories/account_repository.dart';
+import 'package:electronic_assistant/data/repositories/config_repository.dart';
 import 'package:electronic_assistant/data/repositories/task_repository.dart';
 import 'package:electronic_assistant/handler/event_handler.dart';
 import 'package:electronic_assistant/module/chat/view.dart';
@@ -38,6 +39,7 @@ import 'package:wakelock_plus/wakelock_plus.dart';
 import '../../data/api/request/agenda_update_bean.dart';
 import '../../data/bean/agenda.dart';
 import '../../data/bean/agenda_list_all_bean.dart';
+import '../../data/bean/talk_tabs.dart';
 import '../../data/bean/talks.dart';
 import '../../data/bean/template_bean.dart';
 import '../../data/repositories/agenda_repository.dart';
@@ -92,8 +94,6 @@ class TalkController extends BaseController {
 
   final isSearchModel = false.obs;
 
-  final defaultIndex = 0;
-
   final Rxn<TalkBarBean> checkTabBean = Rxn();
 
   final List<TalkBarBean> tabBeans = [];
@@ -168,6 +168,8 @@ class TalkController extends BaseController {
 
   Rxn<Pair<TalkBarType?, SearchOperationType>> searchOperationCallback = Rxn();
 
+  int defaultIndex = 0;
+
   @override
   void onInit() {
     super.onInit();
@@ -204,43 +206,16 @@ class TalkController extends BaseController {
   void _setMindMap(bool isShow, {String? version}) {
     isShowMindMap.value = isShow;
     String? talkId = talkBean.value != null ? talkBean.value!.id : paramId;
+    _fitTabsBean(isShow, talkId);
     if (isShow) {
-      pages.assignAll([
-        SummaryView(talkId),
-        MindMapView(talkId),
-        TodoView(talkId),
-        OriginalView(talkId),
-      ]);
-      tabBeans.assignAll([
-        TalkBarBean(TalkBarType.summary, StringName.talkTabSummary.tr,
-            isShowEdit: true),
-        TalkBarBean(TalkBarType.mindMap, StringName.talkMindMap.tr,
-            isDisallowScroll: true),
-        TalkBarBean(TalkBarType.myTask, StringName.talkTabMyTask.tr,
-            isShowEdit: true),
-        TalkBarBean(TalkBarType.original, StringName.talkTabOriginal.tr,
-            isShowSearch: true)
-      ]);
       EventHandler.report(EventId.event_101401, params: {EventId.id: version});
     } else {
-      pages.assignAll([
-        SummaryView(talkId),
-        TodoView(talkId),
-        OriginalView(talkId),
-      ]);
-      tabBeans.assignAll([
-        TalkBarBean(TalkBarType.summary, StringName.talkTabSummary.tr,
-            isShowEdit: true),
-        TalkBarBean(TalkBarType.myTask, StringName.talkTabMyTask.tr,
-            isShowEdit: true),
-        TalkBarBean(TalkBarType.original, StringName.talkTabOriginal.tr,
-            isShowSearch: true)
-      ]);
       EventHandler.report(EventId.event_101402, params: {EventId.id: version});
     }
-    checkTabBean.value = tabBeans[defaultIndex];
+    if (tabBeans.isNotEmpty) {
+      checkTabBean.value = tabBeans[defaultIndex];
+    }
     isInitializedView.value = true;
-
     WidgetsBinding.instance.addPostFrameCallback((_) {
       bottomViewHeight.value = bottomGlobalKey.currentContext?.size?.height;
       headViewHeight.value = headGlobalKey.currentContext?.size?.height;
@@ -255,6 +230,42 @@ class TalkController extends BaseController {
     eventReport(EventId.event_101001, params: {EventId.id: eventTag});
   }
 
+  void _fitTabsBean(bool isIncludeMind, String? talkId) {
+    final List<Widget> pageList = [];
+    final List<TalkBarBean> barList = [];
+    final List<TalkTabs> tabs = configRepository.getTalkTabs();
+    for (int i = 0; i < tabs.length; i++) {
+      TalkTabs tab = tabs[i];
+      if (isIncludeMind == false && tab.type == TalkBarType.mindMap) {
+        continue;
+      }
+      if (tab.select == true) {
+        defaultIndex = i;
+      }
+      switch (tab.type) {
+        case TalkBarType.summary:
+          pageList.add(SummaryView(talkId));
+          barList.add(TalkBarBean(tab.type, tab.name, isShowEdit: true));
+          break;
+        case TalkBarType.mindMap:
+          pageList.add(MindMapView(talkId));
+          barList.add(TalkBarBean(tab.type, tab.name, isDisallowScroll: true));
+          break;
+        case TalkBarType.myTask:
+          pageList.add(TodoView(talkId));
+          barList.add(TalkBarBean(tab.type, tab.name, isShowEdit: true));
+          break;
+        case TalkBarType.original:
+          pageList.add(OriginalView(talkId));
+          barList.add(TalkBarBean(tab.type, tab.name, isShowSearch: true));
+          break;
+      }
+    }
+
+    pages.assignAll(pageList);
+    tabBeans.assignAll(barList);
+  }
+
   double? getChangeHeadHeight() {
     if (_isEditModel.value == true || isSearchModel.value == true) {
       return (headViewHeight.value ?? 0) - (tabBarHeight.value ?? 0);