123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:vitalapp/architecture/utils/prompt_box.dart';
- import 'package:vitalapp/architecture/values/features.dart';
- import 'package:vitalapp/components/button.dart';
- import 'package:vitalapp/components/side_nav/defines.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';
- import 'package:fis_common/helpers/color.dart';
- class QuickCreatePatientPage extends GetView<CreatePatientController> {
- const QuickCreatePatientPage({super.key});
- @override
- Widget build(BuildContext context) {
- return Stack(
- children: [
- Row(
- children: [
- if (Store.user.hasFeature(FeatureKeys.IdCardPhotoOCR) ||
- Store.user.hasFeature(FeatureKeys.IDCardReader))
- Expanded(
- flex: 1,
- child: Container(
- decoration: BoxDecoration(
- border: Border(
- right: BorderSide(
- color: Colors.grey.shade300,
- ),
- ),
- ),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- if (Store.user.hasFeature(FeatureKeys.IdCardPhotoOCR))
- _buildClickCard(
- Icons.perm_contact_cal_rounded,
- '拍照识别',
- () {
- if (!kIsOnline) {
- PromptBox.toast("当前为离线模式,不支持此功能");
- return;
- }
- controller.onIdCardScanClicked();
- },
- ),
- const SizedBox(
- height: 80,
- ),
- if (Store.user.hasFeature(FeatureKeys.IDCardReader))
- _buildClickCard(
- Icons.chrome_reader_mode,
- '读卡识别',
- () => controller.onReadCardClicked(),
- ),
- ],
- ),
- ),
- ),
- Expanded(
- flex: 2,
- child: PatientInfo(),
- ),
- ],
- ),
- // VSideNavView(
- // // navId: NavIds.CREATE,
- // items: _buildItems(),
- // ),
- Positioned(
- bottom: 8,
- left: 200,
- right: 200,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceAround,
- children: [
- VButton(
- label: "保存",
- onTap: () {
- controller.saveAndBack();
- },
- ),
- ],
- ),
- ),
- ],
- );
- }
- Widget _buildClickCard(
- IconData icon,
- String textString,
- VoidCallback voidCallback,
- ) {
- return Material(
- // color: Colors.blueAccent,
- borderRadius: const BorderRadius.all(
- Radius.circular(8),
- ),
- child: InkWell(
- onTap: () => voidCallback.call(),
- borderRadius: const BorderRadius.all(
- Radius.circular(8),
- ),
- child: Stack(
- children: [
- Container(
- padding: const EdgeInsets.symmetric(
- vertical: 50,
- horizontal: 80,
- ),
- // margin: const EdgeInsets.symmetric(horizontal: 50),
- decoration: BoxDecoration(
- borderRadius: const BorderRadius.all(
- Radius.circular(8),
- ),
- gradient: LinearGradient(
- colors: [
- // Color.fromRGBO(59, 188, 255, 1),
- // Color.fromRGBO(44, 120, 229, 1),
- Colors.blue,
- FColorHelper.mixColor(Colors.white, Colors.blue, 50),
- ],
- begin: Alignment.topLeft,
- end: Alignment.bottomRight,
- ),
- ),
- child: Text(
- textString,
- style: const TextStyle(
- fontSize: 20,
- color: Colors.white,
- ),
- ),
- ),
- Positioned(
- top: 10,
- left: 10,
- child: Icon(
- icon,
- color: Colors.white,
- size: 40,
- ),
- ),
- ],
- ),
- ),
- );
- }
- 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 (!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 (Store.user.hasFeature(FeatureKeys.FaceRecognition)) {
- items.add(_buildScanIdCardRecord());
- }
- if (Store.user.hasFeature(FeatureKeys.FaceRecognition)) {
- items.add(_buildFaceIdLogin());
- }
- // items.add(_buildLogOutItem());
- // items.add(_buildSignatureItem());
- // items.add(_buildAboutItem());
- 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,
- );
- }
- }
|