Przeglądaj źródła

操作询问弹窗

周睿 2 lat temu
rodzic
commit
23394368fb

+ 28 - 0
app_business/lib/generated/track_offical.pb.dart

@@ -287,11 +287,15 @@ class ToActivityRulesInfo extends $pb.GeneratedMessage {
 class ToActivityRulesSelect extends $pb.GeneratedMessage {
   factory ToActivityRulesSelect({
     $core.String? arValueSelect,
+    $core.String? arStrSelect,
   }) {
     final $result = create();
     if (arValueSelect != null) {
       $result.arValueSelect = arValueSelect;
     }
+    if (arStrSelect != null) {
+      $result.arStrSelect = arStrSelect;
+    }
     return $result;
   }
   ToActivityRulesSelect._() : super();
@@ -300,6 +304,7 @@ class ToActivityRulesSelect extends $pb.GeneratedMessage {
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToActivityRulesSelect', package: const $pb.PackageName(_omitMessageNames ? '' : 'to.v1'), createEmptyInstance: create)
     ..aOS(1, _omitFieldNames ? '' : 'arValueSelect', protoName: 'arValueSelect')
+    ..aOS(2, _omitFieldNames ? '' : 'arStrSelect', protoName: 'arStrSelect')
     ..hasRequiredFields = false
   ;
 
@@ -332,6 +337,15 @@ class ToActivityRulesSelect extends $pb.GeneratedMessage {
   $core.bool hasArValueSelect() => $_has(0);
   @$pb.TagNumber(1)
   void clearArValueSelect() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get arStrSelect => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set arStrSelect($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasArStrSelect() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearArStrSelect() => clearField(2);
 }
 
 class ToCooperationQueryReply extends $pb.GeneratedMessage {
@@ -974,6 +988,7 @@ class ToChackInsInfo extends $pb.GeneratedMessage {
     $core.int? cId,
     $core.String? hrSn,
     $0.CState? cState,
+    $core.bool? isAllowFinish,
   }) {
     final $result = create();
     if (mciId != null) {
@@ -1006,6 +1021,9 @@ class ToChackInsInfo extends $pb.GeneratedMessage {
     if (cState != null) {
       $result.cState = cState;
     }
+    if (isAllowFinish != null) {
+      $result.isAllowFinish = isAllowFinish;
+    }
     return $result;
   }
   ToChackInsInfo._() : super();
@@ -1023,6 +1041,7 @@ class ToChackInsInfo extends $pb.GeneratedMessage {
     ..a<$core.int>(8, _omitFieldNames ? '' : 'cId', $pb.PbFieldType.O3, protoName: 'cId')
     ..aOS(9, _omitFieldNames ? '' : 'hrSn', protoName: 'hrSn')
     ..e<$0.CState>(10, _omitFieldNames ? '' : 'cState', $pb.PbFieldType.OE, protoName: 'cState', defaultOrMaker: $0.CState.ToUnSend, valueOf: $0.CState.valueOf, enumValues: $0.CState.values)
+    ..aOB(11, _omitFieldNames ? '' : 'isAllowFinish', protoName: 'isAllowFinish')
     ..hasRequiredFields = false
   ;
 
@@ -1139,6 +1158,15 @@ class ToChackInsInfo extends $pb.GeneratedMessage {
   $core.bool hasCState() => $_has(9);
   @$pb.TagNumber(10)
   void clearCState() => clearField(10);
+
+  @$pb.TagNumber(11)
+  $core.bool get isAllowFinish => $_getBF(10);
+  @$pb.TagNumber(11)
+  set isAllowFinish($core.bool v) { $_setBool(10, v); }
+  @$pb.TagNumber(11)
+  $core.bool hasIsAllowFinish() => $_has(10);
+  @$pb.TagNumber(11)
+  void clearIsAllowFinish() => clearField(11);
 }
 
 class ToMatchRegusterAddRequest extends $pb.GeneratedMessage {

+ 5 - 2
app_business/lib/generated/track_offical.pbjson.dart

@@ -78,13 +78,14 @@ const ToActivityRulesSelect$json = {
   '1': 'ToActivityRulesSelect',
   '2': [
     {'1': 'arValueSelect', '3': 1, '4': 1, '5': 9, '10': 'arValueSelect'},
+    {'1': 'arStrSelect', '3': 2, '4': 1, '5': 9, '10': 'arStrSelect'},
   ],
 };
 
 /// Descriptor for `ToActivityRulesSelect`. Decode as a `google.protobuf.DescriptorProto`.
 final $typed_data.Uint8List toActivityRulesSelectDescriptor = $convert.base64Decode(
     'ChVUb0FjdGl2aXR5UnVsZXNTZWxlY3QSJAoNYXJWYWx1ZVNlbGVjdBgBIAEoCVINYXJWYWx1ZV'
-    'NlbGVjdA==');
+    'NlbGVjdBIgCgthclN0clNlbGVjdBgCIAEoCVILYXJTdHJTZWxlY3Q=');
 
 @$core.Deprecated('Use toCooperationQueryReplyDescriptor instead')
 const ToCooperationQueryReply$json = {
@@ -228,6 +229,7 @@ const ToChackInsInfo$json = {
     {'1': 'cId', '3': 8, '4': 1, '5': 5, '10': 'cId'},
     {'1': 'hrSn', '3': 9, '4': 1, '5': 9, '10': 'hrSn'},
     {'1': 'cState', '3': 10, '4': 1, '5': 14, '6': '.base.v1.CState', '10': 'cState'},
+    {'1': 'isAllowFinish', '3': 11, '4': 1, '5': 8, '10': 'isAllowFinish'},
   ],
 };
 
@@ -237,7 +239,8 @@ final $typed_data.Uint8List toChackInsInfoDescriptor = $convert.base64Decode(
     'QSGgoIbmlja25hbWUYAyABKAlSCG5pY2tuYW1lEhQKBXBob25lGAQgASgJUgVwaG9uZRIiCgxj'
     'aGFja0luc1RpbWUYBSABKAlSDGNoYWNrSW5zVGltZRIeCgppc0FsbG93RGVsGAYgASgIUgppc0'
     'FsbG93RGVsEhQKBWNOYW1lGAcgASgJUgVjTmFtZRIQCgNjSWQYCCABKAVSA2NJZBISCgRoclNu'
-    'GAkgASgJUgRoclNuEicKBmNTdGF0ZRgKIAEoDjIPLmJhc2UudjEuQ1N0YXRlUgZjU3RhdGU=');
+    'GAkgASgJUgRoclNuEicKBmNTdGF0ZRgKIAEoDjIPLmJhc2UudjEuQ1N0YXRlUgZjU3RhdGUSJA'
+    'oNaXNBbGxvd0ZpbmlzaBgLIAEoCFINaXNBbGxvd0ZpbmlzaA==');
 
 @$core.Deprecated('Use toMatchRegusterAddRequestDescriptor instead')
 const ToMatchRegusterAddRequest$json = {

+ 17 - 0
app_business/lib/view/app_dialog.dart

@@ -0,0 +1,17 @@
+import 'package:track_common/track_common.dart';
+import 'package:track_common/widget.dart';
+
+void main() {
+  runPreview(Scaffold(
+    body: Center(
+        child: AppButton.confirm(
+            child: const Text('弹窗'),
+            onPressed: () {
+              Get.dialog(AppDialog(
+                title: const Text('测试'),
+                onConfirm: () => {Get.back()},
+                onCancelText: 'X',
+              ));
+            })),
+  ));
+}

+ 29 - 20
app_business/lib/view/home/event_manage/event_manage.dart

@@ -16,7 +16,7 @@ class EventManage extends GetView<EventManagerController> {
   Widget build(BuildContext context) {
     return Level2View(
         level1: level1(),
-        level2: level2(),
+        level2: level2(context),
         level1Title: '赛事列表',
         level1Action: wDate(context),
         level2Title: '用户列表',
@@ -72,17 +72,19 @@ class EventManage extends GetView<EventManagerController> {
 
   Future<void> doAll(
       BuildContext context, String title, Future<void> Function() then) async {
-    Get.dialog(AppDialog(
-        title: Text('确认$title?'),
-        onCancelText: '取消',
-        onConfirmText: '确认',
-        onConfirm: () => context.doCall(() async {
-              await then();
-              if (context.mounted) {
-                ScaffoldMessenger.of(context)
-                    .showSnackBar(const SnackBar(content: Text('操作成功')));
-              }
-            }, onFinally: () => Get.back())));
+    context.doOptWithAskDialog(title, then);
+
+    // Get.dialog(AppDialog(
+    //     title: Text('确认$title?'),
+    //     onCancelText: '取消',
+    //     onConfirmText: '确认',
+    //     onConfirm: () => context.doCall(() async {
+    //           await then();
+    //           if (context.mounted) {
+    //             ScaffoldMessenger.of(context)
+    //                 .showSnackBar(const SnackBar(content: Text('操作成功')));
+    //           }
+    //         }, onFinally: () => Get.back())));
   }
 
   Widget wDate(BuildContext context) {
@@ -123,12 +125,12 @@ class EventManage extends GetView<EventManagerController> {
             .toList()));
   }
 
-  Widget level2() {
+  Widget level2(BuildContext context) {
     return Column(
       children: [
         Expanded(
-            child: Obx(
-                () => LineChart(titles: rightTitles(), children: rightUsers())))
+            child: Obx(() => LineChart(
+                titles: rightTitles(), children: rightUsers(context))))
       ],
     );
   }
@@ -156,7 +158,7 @@ class EventManage extends GetView<EventManagerController> {
     ];
   }
 
-  Iterable<LineChartElem> rightUsers() {
+  Iterable<LineChartElem> rightUsers(BuildContext context) {
     return controller.userList.indexed.map((e) {
       final (i, one) = e;
       var stateStr = '';
@@ -164,7 +166,8 @@ class EventManage extends GetView<EventManagerController> {
 
       var optStr = '删除';
       var optColor = Colors.red;
-      VoidCallback? opt;
+      Future<void> Function()? opt;
+      VoidCallback? opt2;
 
       if (one.isAllowDel) {
         opt = () => controller.deleteSignIn(one);
@@ -178,8 +181,10 @@ class EventManage extends GetView<EventManagerController> {
         case UserState.isStart:
           stateStr = '已开始';
           stateColor = Colors.green;
-          optStr = '结束';
-          opt = () => controller.userStopGame(one);
+          if (one.isAllowFinish) {
+            optStr = '结束';
+            opt = () => controller.userStopGame(one);
+          }
           break;
         case UserState.isFinish:
           stateStr = '已结束';
@@ -191,6 +196,10 @@ class EventManage extends GetView<EventManagerController> {
         default:
       }
 
+      if (opt != null) {
+        opt2 = () => context.doOptWithAskDialog(optStr, opt!);
+      }
+
       var snStr = '--';
       const n = 4;
       if (one.bandSN.length > n) {
@@ -237,7 +246,7 @@ class EventManage extends GetView<EventManagerController> {
             text: optStr,
             color: optColor,
             isOutline: true,
-            onPressed: enable ? opt : null)
+            onPressed: enable ? opt2 : null)
       ]);
     });
   }

+ 7 - 18
app_business/lib/view/home/event_manage/event_manage_controller.dart

@@ -31,6 +31,7 @@ class UserInManage {
   var state = UserState.idle;
   var routeName = '';
   var isAllowDel = true;
+  var isAllowFinish = true;
 }
 
 class RouteInfo {
@@ -115,6 +116,7 @@ class EventManagerController extends GetxController {
                   ..routeName = u.cName
                   ..bandSN = u.hrSn
                   ..isAllowDel = u.isAllowDel
+                  ..isAllowFinish = u.isAllowFinish
                   ..state = switch (u.cState) {
                     CState.ToUnSend => UserState.idle,
                     CState.ToUnStart => UserState.hasRoute,
@@ -175,7 +177,7 @@ class EventManagerController extends GetxController {
   Future<void> routeAllocAll() async {
     final idList = selectedUser.value.toList();
     if (idList.isEmpty) {
-      throw ArgumentError('操作失败 请选择1个以上的用户');
+      throw SnakeBarError('请选择1个以上的用户');
     }
     await _api.eventUserAllocRouteAll(idList);
   }
@@ -183,7 +185,7 @@ class EventManagerController extends GetxController {
   Future<void> userStartAll() async {
     final idList = selectedUser.value.toList();
     if (idList.isEmpty) {
-      throw ArgumentError('操作失败 请选择1个以上的用户');
+      throw SnakeBarError('请选择1个以上的用户');
     }
     await _api.eventUserStartAll(idList);
   }
@@ -191,7 +193,7 @@ class EventManagerController extends GetxController {
   Future<void> userRestartAll() async {
     final idList = selectedUser.value.toList();
     if (idList.isEmpty) {
-      throw ArgumentError('操作失败 请选择1个以上的用户');
+      throw SnakeBarError('请选择1个以上的用户');
     }
     await _api.eventUserRestartAll(idList);
   }
@@ -199,26 +201,13 @@ class EventManagerController extends GetxController {
   Future<void> userDelAll() async {
     final idList = selectedUser.value.toList();
     if (idList.isEmpty) {
-      throw ArgumentError('操作失败 请选择1个以上的用户');
+      throw SnakeBarError('请选择1个以上的用户');
     }
     await _api.eventUserDelAll(idList);
   }
 
   Future<void> deleteSignIn(UserInManage user) async {
-    Get.dialog(AppDialog(
-        title: const Text('删除签到'),
-        content: const Text('确认删除?'),
-        onCancel: () => Get.back(),
-        onConfirm: () async {
-          _api.stub
-              .matchChackInsDel(IdRequest()..id = Int64(user.checkId))
-              .then((p0) {
-            debug('删除签到:${user.checkId}');
-          }, onError: (e) {
-            Get.snackbar('删除失败', '$e');
-          });
-          Get.back();
-        }));
+    await _api.stub.matchChackInsDel(IdRequest()..id = Int64(user.checkId));
   }
 
   Future<void> userStopGame(UserInManage user) async {

+ 1 - 1
app_business/pubspec.yaml

@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
 # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
 # In Windows, build-name is used as the major, minor, and patch parts
 # of the product and file versions while build-number is used as the build suffix.
-version: 1.1.2+1
+version: 1.1.3+1
 
 environment:
   sdk: '>=3.1.5 <4.0.0'

+ 1 - 0
libs/track_common/lib/utils.dart

@@ -6,6 +6,7 @@ import 'package:grpc/grpc.dart';
 
 import 'styles/color_schemes.g.dart';
 import 'view/login/login_view.dart';
+export 'package:common_pub/utils.dart';
 
 Future<void> tryApi(
   Future<void> Function() call, {

+ 1 - 1
libs/track_common/lib/widget/app_title_list.dart

@@ -49,7 +49,7 @@ class AppTitleList extends StatelessWidget {
                       ? Column(
                           mainAxisSize: MainAxisSize.min,
                           crossAxisAlignment: CrossAxisAlignment.start,
-                          children: [titleWidget, subtitle!!],
+                          children: [titleWidget, subtitle!],
                         )
                       : titleWidget),
               const SizedBox(width: 8),