import 'package:data_table_2/data_table_2.dart'; import 'package:ducafe_ui_core/ducafe_ui_core.dart'; import 'package:flutter/material.dart'; import 'package:forui/forui.dart'; import 'package:get/get.dart'; import 'package:pj_supermarket_cloud/common/index.dart'; import 'index.dart'; class CardActivePage extends GetView { const CardActivePage({super.key}); // 条件 Widget _buildHeader(double height) { final context = Get.context!; final theme = FTheme.of(context); return [ appBack( context, height: height, onTap: () => Get.offAndToNamed(RouteNames.panel), ), Spacer(), FButton( prefix: FIcon( FAssets.icons.idCard, size: theme.typography.base.fontSize, ), label: Text( '读卡', style: theme.typography.base, ), style: FButtonStyle.secondary, onPress: () => controller.doReadCard(), ), SizedBox(width: 20.w), FButton( prefix: FIcon( FAssets.icons.search, size: theme.typography.base.fontSize, ), label: Text( '搜索', style: theme.typography.base.copyWith( color: theme.colorScheme.secondary, ), ), onPress: () => controller.doPage(), ), ].toRow(); } // 主视图 Widget _buildView() { final context = Get.context!; return [ _buildTable(context).expanded(), Obx(() => appPage( context, pageNo: controller.currentPage.value, pageSize: controller.pageSize.value, total: controller.totalPage.value, onPageChanged: (page) => controller.doPage(page: page), )) ].toColumn(); } // 主视图 Widget _buildTable(BuildContext context) { final theme = FTheme.of(context); return LayoutBuilder( builder: (BuildContext context, BoxConstraints constraints) { final width = constraints.maxWidth; final height = constraints.maxHeight; final hdHeight = (height - 50.h) / 10.5; final hdWidth = (width - 50.h) / 4.5; return Obx(() => DataTable2( columnSpacing: 12.w, horizontalMargin: 12.w, minWidth: hdWidth, showBottomBorder: true, headingTextStyle: theme.typography.lg, dataTextStyle: theme.typography.base, dataRowHeight: hdHeight, columns: [ DataColumn2( label: Text("编号", textAlign: TextAlign.center), headingRowAlignment: MainAxisAlignment.center, fixedWidth: 280.w, ), DataColumn2( label: Text("开卡部门", textAlign: TextAlign.center), headingRowAlignment: MainAxisAlignment.center, ), DataColumn2( label: Text("绑定用户昵称", textAlign: TextAlign.center), headingRowAlignment: MainAxisAlignment.center, ), DataColumn2( label: Text("绑定用户手机号", textAlign: TextAlign.center), headingRowAlignment: MainAxisAlignment.center, ), DataColumn2( label: Text("饭卡类型", textAlign: TextAlign.center), headingRowAlignment: MainAxisAlignment.center, ), DataColumn2( label: Text("饭卡卡号", textAlign: TextAlign.center), headingRowAlignment: MainAxisAlignment.center, ), DataColumn2( label: Text("饭卡状态", textAlign: TextAlign.center), headingRowAlignment: MainAxisAlignment.center, ), DataColumn2( label: Text("操作", textAlign: TextAlign.center), headingRowAlignment: MainAxisAlignment.center, ), ], rows: controller.tableList .map( (v) => DataRow( cells: [ DataCell( Text( v.id ?? "未知", textAlign: TextAlign.center, ).center(), ), DataCell( Text( v.deptName ?? "未知", textAlign: TextAlign.center, ).center(), ), DataCell( Text( v.username ?? "", textAlign: TextAlign.center, ).center(), ), DataCell( Text( v.mobile ?? "", textAlign: TextAlign.center, ).center(), ), DataCell( Text( WalletType.values .fromCode(v.walletTypeUniqueCode) ?.title ?? "未知", textAlign: TextAlign.center, ).center(), ), DataCell( Text( v.cardNumber ?? "", textAlign: TextAlign.center, ).center(), ), DataCell( Text( v.isActiveHardware == false ? "未激活" : "激活", textAlign: TextAlign.center, ).center(), ), DataCell( Visibility( visible: v.isActiveHardware == false, replacement: FButton( style: FButtonStyle.destructive, prefix: FIcon(FAssets.icons.refreshCcw), label: Text( '重新激活', style: theme.typography.base.copyWith( color: theme.colorScheme.secondary, ), ), onPress: () => controller.doRefreshAvatar(v), ), child: FButton( style: FButtonStyle.secondary, prefix: FIcon(FAssets.icons.folderOpenDot), label: Text( '激活', style: theme.typography.base, ), onPress: () => controller.doWriteCard(v), ), ).center(), ), ], ), ) .toList(), )); }); } @override Widget build(BuildContext context) { final height = 90; return GetBuilder( init: CardActiveController(), id: "card_active", builder: (_) { return FScaffold( header: _buildHeader(height.h) .height(height.h) .padding(vertical: 30.h, horizontal: 10.w), content: _buildView(), resizeToAvoidBottomInset: false, ); }, ); } }