123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- import 'package:fis_common/env/env.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:vitalapp/architecture/utils/advance_debounce.dart';
- import 'package:vitalapp/architecture/utils/prompt_box.dart';
- import 'package:vitalapp/architecture/values/features.dart';
- import 'package:vitalapp/components/alert_dialog.dart';
- import 'package:vitalapp/components/button.dart';
- import 'package:vitalapp/components/side_nav/defines.dart';
- import 'package:vitalapp/components/side_nav/side_nav.dart';
- import 'package:vitalapp/global.dart';
- import 'package:vitalapp/pages/patient/create/controller.dart';
- import 'package:vitalapp/pages/patient/create/widgets/area.dart';
- import 'package:vitalapp/pages/patient/create/widgets/crowd_label.dart';
- import 'package:vitalapp/pages/patient/create/widgets/patient_info.dart';
- import 'package:vitalapp/store/store.dart';
- class QuickCreatePatientPage extends GetView<CreatePatientController> {
- const QuickCreatePatientPage({super.key});
- @override
- Widget build(BuildContext context) {
- return Stack(
- children: [
- VSideNavView(
- items: _buildItems(),
- ),
- Positioned(
- bottom: 8,
- left: 200,
- right: 200,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceAround,
- children: [
- VButton(
- label: "清空",
- onTap: () {
- Debouncer.run(
- () async {
- await Get.dialog(
- VAlertDialog(
- title: "提示",
- width: 320,
- content: Container(
- height: 32,
- padding: const EdgeInsets.symmetric(horizontal: 24),
- alignment: Alignment.center,
- child: const Text(
- "是否确认清空当前页面信息?",
- style: TextStyle(fontSize: 20),
- ),
- ),
- onConfirm: () {
- controller.state.reset();
- Get.back();
- },
- ),
- barrierDismissible: false,
- barrierColor: Colors.black.withOpacity(.4),
- );
- },
- );
- },
- ),
- VButton(
- label: "保存",
- onTap: () {
- Debouncer.run(
- () {
- controller.saveAndBack();
- },
- );
- },
- ),
- ],
- ),
- ),
- ],
- );
- }
- VSideNavMenuItem _buildCreateManualRecord() {
- return VSideNavMenuItem(
- title: "手动录入",
- icon: Icon(Icons.edit_document, color: Colors.grey.shade700),
- pageBuilder: (_) => _buildInterval(
- PatientInfo(),
- ),
- );
- }
- VSideNavMenuItem _buildIDReaderRecord() {
- return VSideNavMenuItem(
- title: "读卡器录入",
- icon: Icon(Icons.chrome_reader_mode, color: Colors.grey.shade700),
- onTap: () {
- controller.onReadCardClicked();
- },
- );
- }
- VSideNavMenuItem _buildScanIdCardRecord() {
- return VSideNavMenuItem(
- title: "身份证识别录入",
- icon: Icon(Icons.perm_contact_cal_rounded, color: Colors.grey.shade700),
- onTap: () {
- if (!Store.user.hasFeature(FeatureKeys.IdCardOfflineRecognition)) {
- if (!kIsOnline) {
- PromptBox.toast("当前为离线模式,不支持此功能");
- return;
- }
- }
- controller.onIdCardScanClicked();
- },
- );
- }
- VSideNavMenuItem _buildFaceIdLogin() {
- return VSideNavMenuItem(
- title: "人脸识别",
- icon: Icon(Icons.sensor_occupied, color: Colors.grey.shade700),
- onTap: () {
- if (!kIsOnline) {
- PromptBox.toast("当前为离线模式,不支持此功能");
- return;
- }
- controller.onFaceIdLoginClicked();
- },
- );
- }
- List<VSideNavMenuItem> _buildItems() {
- final items = <VSideNavMenuItem>[];
- items.add(_buildCreateManualRecord());
- if (Store.user.hasFeature(FeatureKeys.IDCardReader)) {
- items.add(_buildIDReaderRecord());
- }
- if (!FPlatform.isWindows && !FPlatform.isWindows) {
- if (Store.user.hasFeature(FeatureKeys.IdCardPhotoOCR)) {
- items.add(_buildScanIdCardRecord());
- }
- if (Store.user.hasFeature(FeatureKeys.FaceRecognition)) {
- items.add(_buildFaceIdLogin());
- }
- }
- return items;
- }
- VSideNavMenuItem _buildSignatureItem() {
- return VSideNavMenuItem(
- title: "服务信息",
- icon: Icon(Icons.edit_document, color: Colors.grey.shade700),
- pageBuilder: (_) => _buildInterval(
- const Area(),
- ),
- );
- }
- VSideNavMenuItem _buildAboutItem() {
- return VSideNavMenuItem(
- title: "人群分类",
- isRequired: true,
- icon: Icon(Icons.info_outline, color: Colors.grey.shade700),
- pageBuilder: (_) => _buildInterval(
- const CrowdLabelView(),
- ),
- );
- }
- VSideNavMenuItem _buildLogOutItem() {
- return VSideNavMenuItem(
- title: "个人信息",
- icon:
- Icon(Icons.medical_information_outlined, color: Colors.grey.shade700),
- pageBuilder: (_) => _buildInterval(
- PatientInfo(),
- ),
- // route: VRouteSetting(
- // "/patient_info_panel",
- // () => const PatientInfo(),
- // binding: BindingsBuilder(
- // () {
- // Get.lazyPut(() => CreatePatientController());
- // },
- // ),
- // ),
- // shouldRearrage: true, // TODO: 调整样式后启用
- );
- }
- Widget _buildInterval(Widget child) {
- return Padding(
- padding: const EdgeInsets.symmetric(
- horizontal: 16,
- ),
- child: child,
- );
- }
- }
|