123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- // ignore_for_file: must_be_immutable
- import 'dart:convert';
- import 'dart:ui';
- import 'package:fis_i18n/i18n.dart';
- import 'package:fis_ui/index.dart';
- import 'package:flutter/foundation.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter_printer_plus/flutter_printer_plus.dart'
- if (dart.library.html) "package:vitalapp/pages/medical_checkup_station/usb_print/web/flutter_printer_plus.dart";
- import 'package:get/get.dart';
- import 'package:print_image_generate_tool/print_image_generate_tool.dart';
- import 'package:vitalapp/pages/medical_checkup_station/registration/controller.dart';
- import 'package:vitalapp/pages/medical_checkup_station/registration/widgets/filter/index.dart';
- import 'package:vitalapp/pages/medical_checkup_station/registration/widgets/table/index.dart';
- import 'package:vitalapp/pages/medical_checkup_station/usb_print/module/printer_info.dart';
- class RegistrationList extends GetView<RegistrationController> {
- RegistrationList({
- super.key,
- this.isVital = false,
- });
- /// 是否是家医一体机
- final bool? isVital;
- @override
- Widget build(BuildContext context) {
- Widget table;
- if (kIsWeb) {
- table = _buildWeb();
- } else {
- table = PrintImageGenerateWidget(
- contentBuilder: (context) {
- return _buildWeb();
- },
- onPictureGenerated: _onPictureGenerated,
- );
- }
- return Scaffold(
- body: table,
- );
- }
- Widget _buildWeb() {
- return Row(
- children: [
- Expanded(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.start,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- RegistrationFilter(isVital: isVital),
- GetBuilder<RegistrationController>(
- id: "registration_table",
- builder: (_) {
- return Expanded(
- child: RegistrationTable(
- residentList: controller.residentList,
- isVital: isVital,
- ),
- );
- },
- ),
- _buildTablePagination(),
- ],
- ),
- ),
- if (!isVital!)
- Container(
- width: 120,
- decoration: BoxDecoration(
- border: Border(
- left: BorderSide(
- color: Colors.grey[300]!,
- width: 1,
- ),
- ),
- ),
- child: GetBuilder<RegistrationController>(
- id: "registration_table_detail",
- builder: (_) {
- return Container(
- child: Column(
- children: [
- if (controller.listController
- .noMedicalCheckUpList()
- .length !=
- 0)
- _buildTitle("未做体检项"),
- Column(
- children: controller.listController
- .noMedicalCheckUpList()
- .map((e) => ListTile(
- title: Text(_currentExam[e] ?? ''),
- onTap: () {},
- ))
- .toList(),
- ),
- if ((controller.listController.currentResident
- .finishedExamKeys ??
- [])
- .length !=
- 0)
- _buildTitle("已做体检项"),
- Column(
- children: controller.listController
- .medicalCheckUpList()
- .map((e) => ListTile(
- title: Text(_currentExam[e] ?? ''),
- onTap: () {},
- ))
- .toList(),
- ),
- ],
- ),
- );
- }),
- ),
- ],
- );
- }
- Widget _buildTitle(String titleName) {
- return Container(
- alignment: Alignment.centerLeft,
- padding: EdgeInsets.only(left: 8),
- child: Text(
- titleName,
- style: TextStyle(color: Colors.white, fontSize: 20),
- ),
- height: 40,
- color: Colors.blue,
- width: double.maxFinite,
- );
- }
- Map<String, String> _currentExam = {
- "HEIBasic": "基础检查",
- "HEIUrinalysis": "尿常规检查",
- "HEIUltrasonic": "超声检查",
- "HEIBiochemical": "生化检查",
- "HEIBloodRoutine": "血常规检查",
- "HEIECG": "心电检查",
- "HEITCMC": "中医体质",
- };
- //打印图层生成成功
- Future<void> _onPictureGenerated(PicGenerateResult data) async {
- final printTask = data.taskItem;
- //指定的打印机
- final printerInfo = printTask.params as PrinterInfo;
- //打印票据类型(标签、小票)
- final printTypeEnum = printTask.printTypeEnum;
- final imageBytes =
- await data.convertUint8List(imageByteFormat: ImageByteFormat.rawRgba);
- String base64Image = base64Encode(imageBytes!);
- //也可以使用 ImageByteFormat.png
- final argbWidth = data.imageWidth;
- final argbHeight = data.imageHeight;
- if (imageBytes == null) {
- return;
- }
- //只要 imageBytes 不是使用 ImageByteFormat.rawRgba 格式转换的 unit8List
- //argbWidthPx、argbHeightPx 不要传值,默认为空就行
- var printData = await PrinterCommandTool.generatePrintCmd(
- imgData: imageBytes,
- printType: printTypeEnum,
- argbWidthPx: argbWidth,
- argbHeightPx: argbHeight,
- );
- if (printerInfo.isUsbPrinter) {
- // usb 打印
- final conn = UsbConn(printerInfo.usbDevice!);
- conn.writeMultiBytes(printData, 1024 * 3);
- } else if (printerInfo.isNetPrinter) {
- // 网络 打印
- final conn = NetConn(printerInfo.ip!);
- conn.writeMultiBytes(printData);
- }
- }
- Widget _buildTablePagination() {
- return GetBuilder<RegistrationController>(
- id: "registration_table_pagination",
- builder: (_) {
- return Row(
- mainAxisAlignment: MainAxisAlignment.end,
- children: [
- FTablePagination(
- currListLength: controller.appointmentModelListLength,
- currPageIndex: controller.currPageIndex,
- pageSize: 10,
- onChangePage: (pageIndex, listLength) {
- controller.listController.getRegisterInfoPage(
- pageIndex: pageIndex,
- pageSize: listLength,
- );
- // _tableScrollToTop();
- },
- totalItemNumText: i18nBook.common.ofTerm
- .translate(['${controller.appointmentModelListLength}']),
- previousFivePageText: i18nBook.common.previousFivePageText.t,
- nextFivePageText: i18nBook.common.nextFivePageText.t,
- ),
- SizedBox(
- width: 20,
- )
- ],
- );
- },
- );
- }
- }
|