Files
pj_supermarket_cloud/lib/pages/card_active/view.dart
T
2025-03-16 21:35:15 +08:00

221 lines
7.5 KiB
Dart

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<CardActiveController> {
const CardActivePage({super.key});
// 条件
Widget _buildHeader(double height) {
final context = Get.context!;
final theme = FTheme.of(context);
return <Widget>[
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 <Widget>[
_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<CardActiveController>(
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,
);
},
);
}
}