Browse Source

访客的创建表单

liukai 1 week ago
parent
commit
2dd91b38e3
24 changed files with 781 additions and 8 deletions
  1. 1 1
      packages/cpt_main/lib/modules/home/home_view_model.g.dart
  2. 1 1
      packages/cpt_main/lib/modules/home/management_guides/management_guides_view_model.g.dart
  3. 3 1
      packages/cpt_main/lib/modules/visitor/now/visitor_now_large.dart
  4. 3 1
      packages/cpt_main/lib/modules/visitor/now/visitor_now_small.dart
  5. 305 0
      packages/cpt_main/lib/modules/visitor/register/visitor_register_page.dart
  6. 78 0
      packages/cpt_main/lib/modules/visitor/register/visitor_register_state.dart
  7. 139 0
      packages/cpt_main/lib/modules/visitor/register/visitor_register_view_model.dart
  8. 27 0
      packages/cpt_main/lib/modules/visitor/register/visitor_register_view_model.g.dart
  9. 2 0
      packages/cpt_main/lib/router/page/main_page_router.dart
  10. 20 0
      packages/cpt_main/lib/router/page/main_page_router.gr.dart
  11. BIN
      packages/cs_resources/assets/main/feedback_waiting_icon.webp
  12. BIN
      packages/cs_resources/assets/main/success_icon.webp
  13. BIN
      packages/cs_resources/assets/main/visitor_register_date.webp
  14. 3 0
      packages/cs_resources/lib/generated/assets.dart
  15. 19 0
      packages/cs_resources/lib/generated/intl/messages_en.dart
  16. 15 0
      packages/cs_resources/lib/generated/intl/messages_zh_CN.dart
  17. 15 0
      packages/cs_resources/lib/generated/intl/messages_zh_HK.dart
  18. 110 0
      packages/cs_resources/lib/generated/l10n.dart
  19. 11 0
      packages/cs_resources/lib/l10n/intl_en.arb
  20. 11 0
      packages/cs_resources/lib/l10n/intl_zh_CN.arb
  21. 11 0
      packages/cs_resources/lib/l10n/intl_zh_HK.arb
  22. 4 0
      packages/cs_router/lib/path/router_path.dart
  23. 0 1
      packages/cs_widgets/lib/my_load_image.dart
  24. 3 3
      packages/cs_widgets/lib/shatter/form_require_text.dart

+ 1 - 1
packages/cpt_main/lib/modules/home/home_view_model.g.dart

@@ -6,7 +6,7 @@ part of 'home_view_model.dart';
 // RiverpodGenerator
 // RiverpodGenerator
 // **************************************************************************
 // **************************************************************************
 
 
-String _$homeViewModelHash() => r'd9673254c6c42df4219e40fb9f7f49f89f7efffa';
+String _$homeViewModelHash() => r'9ad38aa4741b3216454b6652963eb10af930f3d8';
 
 
 /// See also [HomeViewModel].
 /// See also [HomeViewModel].
 @ProviderFor(HomeViewModel)
 @ProviderFor(HomeViewModel)

+ 1 - 1
packages/cpt_main/lib/modules/home/management_guides/management_guides_view_model.g.dart

@@ -7,7 +7,7 @@ part of 'management_guides_view_model.dart';
 // **************************************************************************
 // **************************************************************************
 
 
 String _$managementGuidesViewModelHash() =>
 String _$managementGuidesViewModelHash() =>
-    r'a3e25def771965687ff1aef7176fa1b569c49d61';
+    r'ece9e3ff3033f8bcccae545c543a58bbb083528e';
 
 
 /// See also [ManagementGuidesViewModel].
 /// See also [ManagementGuidesViewModel].
 @ProviderFor(ManagementGuidesViewModel)
 @ProviderFor(ManagementGuidesViewModel)

+ 3 - 1
packages/cpt_main/lib/modules/visitor/now/visitor_now_large.dart

@@ -9,6 +9,8 @@ import 'package:widgets/my_button.dart';
 import 'package:widgets/my_load_image.dart';
 import 'package:widgets/my_load_image.dart';
 import 'package:widgets/my_text_view.dart';
 import 'package:widgets/my_text_view.dart';
 
 
+import '../register/visitor_register_page.dart';
+
 class VisitorNowLarge extends StatelessWidget {
 class VisitorNowLarge extends StatelessWidget {
   @override
   @override
   Widget build(BuildContext context) {
   Widget build(BuildContext context) {
@@ -33,7 +35,7 @@ class VisitorNowLarge extends StatelessWidget {
             ),
             ),
             MyButton(
             MyButton(
               onPressed: () {
               onPressed: () {
-                ToastEngine.show("去填写表单");
+                VisitorRegisterPage.startInstance(context: context);
               },
               },
               text: S.current.visitor_registration,
               text: S.current.visitor_registration,
               textColor: Colors.white,
               textColor: Colors.white,

+ 3 - 1
packages/cpt_main/lib/modules/visitor/now/visitor_now_small.dart

@@ -9,6 +9,8 @@ import 'package:widgets/my_button.dart';
 import 'package:widgets/my_load_image.dart';
 import 'package:widgets/my_load_image.dart';
 import 'package:widgets/my_text_view.dart';
 import 'package:widgets/my_text_view.dart';
 
 
+import '../register/visitor_register_page.dart';
+
 class VisitorNowSmall extends StatelessWidget {
 class VisitorNowSmall extends StatelessWidget {
   @override
   @override
   Widget build(BuildContext context) {
   Widget build(BuildContext context) {
@@ -30,7 +32,7 @@ class VisitorNowSmall extends StatelessWidget {
           ),
           ),
           MyButton(
           MyButton(
             onPressed: (){
             onPressed: (){
-              ToastEngine.show("去填写表单");
+              VisitorRegisterPage.startInstance(context: context);
             },
             },
             text: S.current.visitor_registration,
             text: S.current.visitor_registration,
             textColor: Colors.white,
             textColor: Colors.white,

+ 305 - 0
packages/cpt_main/lib/modules/visitor/register/visitor_register_page.dart

@@ -0,0 +1,305 @@
+import 'package:cs_resources/generated/assets.dart';
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:auto_route/auto_route.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:plugin_platform/engine/toast/toast_engine.dart';
+import 'package:router/ext/auto_router_extensions.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_appbar.dart';
+import 'package:widgets/my_button.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+import 'package:widgets/widget_export.dart';
+import 'package:widgets/my_text_field.dart';
+import 'package:widgets/shatter/form_require_text.dart';
+
+import '../../../router/page/main_page_router.dart';
+import 'visitor_register_state.dart';
+import 'visitor_register_view_model.dart';
+
+@RoutePage()
+class VisitorRegisterPage extends HookConsumerWidget {
+  const VisitorRegisterPage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance({BuildContext? context}) {
+    if (context != null) {
+      context.router.push(const VisitorRegisterPageRoute());
+    } else {
+      appRouter.push(const VisitorRegisterPageRoute());
+    }
+  }
+
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.watch(visitorRegisterViewModelProvider.notifier);
+    final state = ref.watch(visitorRegisterViewModelProvider);
+    final noteCount = useState(0);
+   
+    return Scaffold(
+      appBar: MyAppBar.appBar(context, S.current.visitor_registration),
+      backgroundColor: context.appColors.whiteBG,
+      body: SingleChildScrollView(
+        scrollDirection: Axis.vertical,
+        physics: const BouncingScrollPhysics(),
+        child: Container(
+          margin: const EdgeInsets.symmetric(horizontal: 15),
+          width: double.infinity,
+          child: Column(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              //全名
+              FormRequireText(
+                text: S.current.full_name,
+                textColor: context.appColors.textBlack,
+                fontSize: 17,
+              ).marginOnly(top: 14.5),
+              // 表单
+              _buildInputLayout(
+                context,
+                state,
+                marginTop: 16,
+                "full_name",
+                textInputType: TextInputType.text,
+                textInputAction: TextInputAction.next,
+                errorText: state.fullNameErrorText,
+                onSubmit: (formKey, value) {
+                  state.formData[formKey]!['focusNode'].unfocus();
+                  FocusScope.of(context).requestFocus(state.formData['phone']!['focusNode']);
+                },
+              ),
+
+              //移动电话
+              FormRequireText(
+                text: S.current.mobile_phone,
+                textColor: context.appColors.textBlack,
+                fontSize: 17,
+              ).marginOnly(top: 14.5),
+              // 表单
+              _buildInputLayout(
+                context,
+                state,
+                "phone",
+                marginTop: 16,
+                textInputType: TextInputType.phone,
+                textInputAction: TextInputAction.next,
+                errorText: state.phoneErrorText,
+                onSubmit: (formKey, value) {
+                  state.formData[formKey]!['focusNode'].unfocus();
+                  FocusScope.of(context).requestFocus(state.formData['nric']!['focusNode']);
+                },
+              ),
+
+              // 身份证
+              FormRequireText(
+                text: S.current.nric_fin,
+                textColor: context.appColors.textBlack,
+                fontSize: 17,
+              ).marginOnly(top: 14.5),
+              // 表单
+              _buildInputLayout(
+                context,
+                state,
+                "nric",
+                marginTop: 15,
+                textInputType: TextInputType.text,
+                textInputAction: TextInputAction.next,
+                errorText: state.nricErrorText,
+                onSubmit: (formKey, value) {
+                  state.formData[formKey]!['focusNode'].unfocus();
+                  FocusScope.of(context).requestFocus(state.formData['plate_number']!['focusNode']);
+                },
+              ),
+
+              // 车牌号
+              MyTextView(
+                S.current.license_plate_number,
+                textColor: context.appColors.textBlack,
+                fontSize: 17,
+                marginTop: 14.5,
+                isFontMedium: true,
+              ),
+              // 表单
+              _buildInputLayout(
+                context,
+                state,
+                "plate_number",
+                marginTop: 15,
+                textInputType: TextInputType.text,
+                textInputAction: TextInputAction.next,
+                onSubmit: (formKey, value) {
+                  state.formData[formKey]!['focusNode'].unfocus();
+                  FocusScope.of(context).requestFocus(state.formData['access_date']!['focusNode']);
+                },
+              ),
+
+              // 通行时间
+              MyTextView(
+                S.current.access_date,
+                textColor: context.appColors.textBlack,
+                fontSize: 17,
+                marginTop: 14.5,
+                isFontMedium: true,
+              ),
+              // 表单
+              _buildInputLayout(
+                context,
+                state,
+                "access_date",
+                marginTop: 15,
+                enable: false,
+                textInputType: TextInputType.text,
+                textInputAction: TextInputAction.next,
+                showRightIcon: true,
+                rightWidget: const MyAssetImage(Assets.mainVisitorRegisterDate, width: 21, height: 20).paddingOnly(top: 13, bottom: 13),
+                onSubmit: (formKey, value) {
+                  state.formData[formKey]!['focusNode'].unfocus();
+                  FocusScope.of(context).requestFocus(state.formData['note']!['focusNode']);
+                },
+              ).onTap(() {
+                viewModel.pickAccessDate();
+              }),
+
+              // 备注
+              MyTextView(
+                S.current.notes,
+                textColor: context.appColors.textBlack,
+                fontSize: 17,
+                marginTop: 14.5,
+                isFontMedium: true,
+              ),
+              //大文本框
+              IgnoreKeyboardDismiss(
+                child: Container(
+                  height: 177,
+                  margin: const EdgeInsets.only(top: 16),
+                  padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 15),
+                  decoration: BoxDecoration(
+                    color: context.appColors.authFiledBG,
+                    borderRadius: const BorderRadius.all(Radius.circular(5)),
+                  ),
+                  child: Stack(
+                    children: [
+                      TextField(
+                        cursorColor: context.appColors.authFiledText,
+                        cursorWidth: 1.5,
+                        autofocus: false,
+                        enabled: true,
+                        focusNode: state.formData["note"]!['focusNode'],
+                        controller: state.formData["note"]!['controller'],
+                        decoration: InputDecoration(
+                          isDense: true,
+                          isCollapsed: true,
+                          border: InputBorder.none,
+                          hintText: state.formData["note"]!['hintText'],
+                          hintStyle: TextStyle(
+                            color: context.appColors.authFiledHint,
+                            fontSize: 16.0,
+                            fontWeight: FontWeight.w500,
+                          ),
+                        ),
+                        style: TextStyle(
+                          color: context.appColors.authFiledText,
+                          fontSize: 16.0,
+                          fontWeight: FontWeight.w500,
+                        ),
+                        textInputAction: TextInputAction.done,
+                        onSubmitted: (value) {
+                          FocusScope.of(context).unfocus();
+                          viewModel.submitVisitorRegister();
+                        },
+                        maxLines: null,
+                        expands: true,
+                        onChanged: (text) {
+                          // 当文本改变时,更新字符数量
+                          noteCount.value = text.length;
+                        },
+                      ),
+                      Positioned(
+                        bottom: 0.0,
+                        right: 0.0,
+                        child: Text(
+                          S.current.characters(noteCount.value),
+                          style: TextStyle(
+                            color: context.appColors.textBlack,
+                            fontSize: 15.0,
+                          ),
+                        ),
+                      ),
+                    ],
+                  ),
+                ),
+              ),
+
+              MyButton(
+                onPressed: viewModel.submitVisitorRegister,
+                text: S.current.submit,
+                textColor: Colors.white,
+                backgroundColor: context.appColors.btnBgDefault,
+                fontWeight: FontWeight.w500,
+                type: ClickType.throttle,
+                fontSize: 16,
+                minHeight: 50,
+                radius: 5,
+              ).marginOnly(top: 25, bottom: 25),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+
+  /// 输入框
+  Widget _buildInputLayout(
+    BuildContext context,
+    VisitorRegisterState state,
+    String key, {
+    double marginTop = 0,
+    bool? showRightIcon = false, //是否展示右侧的布局
+    Widget? rightWidget, //右侧的布局
+    TextInputType textInputType = TextInputType.text,
+    String? errorText,
+    bool obscureText = false,
+    bool enable = true,
+    TextInputAction textInputAction = TextInputAction.done,
+    Function? onSubmit,
+  }) {
+    return IgnoreKeyboardDismiss(
+      child: MyTextField(
+        key,
+        fillBackgroundColor: context.appColors.authFiledBG,
+        state.formData[key]!['value'],
+        hintStyle: TextStyle(
+          color: context.appColors.authFiledHint,
+          fontSize: 16.0,
+          fontWeight: FontWeight.w500,
+        ),
+        controller: state.formData[key]!['controller'],
+        focusNode: state.formData[key]!['focusNode'],
+        margin: EdgeInsets.only(top: marginTop),
+        padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 3),
+        showDivider: false,
+        height: 44,
+        enabled: enable,
+        style: TextStyle(
+          color: context.appColors.authFiledText,
+          fontSize: 16.0,
+          fontWeight: FontWeight.w500,
+        ),
+        inputType: textInputType,
+        textInputAction: textInputAction,
+        onSubmit: onSubmit,
+        cursorColor: context.appColors.authFiledText,
+        obscureText: obscureText,
+        errorText: errorText,
+        showLeftIcon: true,
+        showRightIcon: showRightIcon,
+        rightWidget: rightWidget,
+      ),
+    );
+  }
+}

+ 78 - 0
packages/cpt_main/lib/modules/visitor/register/visitor_register_state.dart

@@ -0,0 +1,78 @@
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:flutter/material.dart';
+
+class VisitorRegisterState {
+  //表单的校验与数据
+  final Map<String, Map<String, dynamic>> formData;
+
+  //表单的错误信息展示
+  String? fullNameErrorText;
+  String? phoneErrorText;
+  String? nricErrorText;
+
+  DateTime? accessDate; //通行时间
+
+  // ===================================  Begin  ↓  ===================================
+
+  VisitorRegisterState({
+    Map<String, Map<String, dynamic>>? formData,
+    this.fullNameErrorText,
+    this.phoneErrorText,
+    this.nricErrorText,
+    this.accessDate,
+  }) : formData = formData ??
+            {
+              'full_name': {
+                'value': '',
+                'controller': TextEditingController(),
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+              'phone': {
+                'value': '',
+                'controller': TextEditingController(),
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+              'nric': {
+                'value': '',
+                'controller': TextEditingController(),
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+              'plate_number': {
+                'value': '',
+                'controller': TextEditingController(),
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+              'access_date': {
+                'value': '',
+                'controller': TextEditingController(),
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+              'note': {
+                'value': '',
+                'controller': TextEditingController(),
+                'focusNode': FocusNode(),
+                'hintText': S.current.type_here,
+                'obsecure': false,
+              },
+            };
+
+  VisitorRegisterState copyWith({
+    String? fullNameErrorText,
+    String? phoneErrorText,
+    String? nricErrorText,
+    DateTime? accessDate,
+  }) {
+    return VisitorRegisterState(
+      formData: this.formData,
+      fullNameErrorText: fullNameErrorText,
+      phoneErrorText: phoneErrorText,
+      nricErrorText: nricErrorText,
+      accessDate: accessDate ?? this.accessDate,
+    );
+  }
+}

+ 139 - 0
packages/cpt_main/lib/modules/visitor/register/visitor_register_view_model.dart

@@ -0,0 +1,139 @@
+
+import 'package:cpt_main/modules/main/main_page.dart';
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:plugin_platform/engine/toast/toast_engine.dart';
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+import 'package:shared/utils/date_time_utils.dart';
+import 'package:shared/utils/log_utils.dart';
+import 'package:shared/utils/util.dart';
+import 'package:widgets/picker/date_picker_util.dart';
+
+import 'visitor_register_state.dart';
+part 'visitor_register_view_model.g.dart';
+
+@riverpod
+class VisitorRegisterViewModel extends _$VisitorRegisterViewModel {
+
+  @override
+  VisitorRegisterState build(){
+    final state = VisitorRegisterState();
+    initListener(state);
+    ref.onDispose(() {
+      onDispose(state);
+    });
+    return state;
+  }
+
+  //提交表单
+  void submitVisitorRegister() {
+    state = state.copyWith(
+      fullNameErrorText: null,
+      phoneErrorText: null,
+      nricErrorText: null,
+    );
+
+    final FocusNode fullNameFocusNode = state.formData['full_name']!['focusNode'];
+    final FocusNode phoneFocusNode = state.formData['phone']!['focusNode'];
+    final FocusNode nricFocusNode = state.formData['nric']!['focusNode'];
+    final FocusNode plateNumberFocusNode = state.formData['plate_number']!['focusNode'];
+    final FocusNode noteFocusNode = state.formData['note']!['focusNode'];
+
+    fullNameFocusNode.unfocus();
+    phoneFocusNode.unfocus();
+    nricFocusNode.unfocus();
+    plateNumberFocusNode.unfocus();
+    noteFocusNode.unfocus();
+
+    final TextEditingController fullNameController = state.formData['full_name']!['controller'];
+    final TextEditingController phoneController = state.formData['phone']!['controller'];
+    final TextEditingController nricController = state.formData['nric']!['controller'];
+    final TextEditingController plateNumberController = state.formData['plate_number']!['controller'];
+    final TextEditingController noteController = state.formData['note']!['controller'];
+
+    final fullName = fullNameController.text;
+    final phone = phoneController.text;
+    final nric = nricController.text;
+    final plateNumber = plateNumberController.text;
+    final note = noteController.text;
+    final accessDate = state.accessDate == null ?  null : DateTimeUtils.formatDate(state.accessDate!,format: 'yyyy-MM-dd');
+
+    Log.d('当前待提交的 fullName:$fullName phone:$phone nric:$nric plateNumber:$plateNumber note:$note accessDate:$accessDate');
+
+    if (Utils.isEmpty(fullName)) {
+      state = state.copyWith(fullNameErrorText: "Full Name cannot be empty!");
+      return;
+    }
+
+    if (Utils.isEmpty(phone)) {
+      state = state.copyWith(phoneErrorText: "Mobile Number cannot be empty!");
+      return;
+    }
+
+    if (Utils.isEmpty(nric)) {
+      state = state.copyWith(nricErrorText: "NRIC/FIN cannot be empty!");
+      return;
+    }
+
+    //执行密码登录
+    ToastEngine.show('准备执行请求发送验证码 fullName:$fullName phone:$phone nric:$nric plateNumber:$plateNumber note:$note accessDate:$accessDate');
+
+    //去首页
+    MainPage.startInstance();
+  }
+
+  //选择通行时间
+  void pickAccessDate() {
+    DatePickerUtil.showCupertinoDatePicker(
+      selectedDateTime: state.accessDate ?? DateTime.now(),
+      mode: CupertinoDatePickerMode.date,
+      onDateTimeChanged: (date) {
+       state = state.copyWith(accessDate: date);
+       final TextEditingController accessDateController = state.formData['access_date']!['controller'];
+       accessDateController.text = DateTimeUtils.formatDate(date,format: 'dd MMM yyyy');
+      },
+      title: S.current.access_date,
+    );
+  }
+
+  //初始化监听
+  void initListener(VisitorRegisterState initState) {
+    final FocusNode fullNameFocusNode = initState.formData['full_name']!['focusNode'];
+    final FocusNode phoneFocusNode = initState.formData['phone']!['focusNode'];
+    final FocusNode nricFocusNode = initState.formData['nric']!['focusNode'];
+
+    fullNameFocusNode.addListener(() {
+      // 获取焦点的时候清空错误文本
+      if (fullNameFocusNode.hasFocus) {
+        state = state.copyWith(fullNameErrorText: null);
+      }
+    });
+
+    phoneFocusNode.addListener(() {
+      // 获取焦点的时候清空错误文本
+      if (phoneFocusNode.hasFocus) {
+        state = state.copyWith(phoneErrorText: null);
+      }
+    });
+
+    nricFocusNode.addListener(() {
+      // 获取焦点的时候清空错误文本
+      if (nricFocusNode.hasFocus) {
+        state = state.copyWith(nricErrorText: null);
+      }
+    });
+  }
+
+  //销毁资源
+  void onDispose(VisitorRegisterState initState) {
+    final FocusNode fullNameFocusNode = initState.formData['full_name']!['focusNode'];
+    final FocusNode phoneFocusNode = initState.formData['phone']!['focusNode'];
+    final FocusNode nricFocusNode = initState.formData['nric']!['focusNode'];
+    fullNameFocusNode.dispose();
+    phoneFocusNode.dispose();
+    nricFocusNode.dispose();
+
+    Log.d("VisitorRegisterViewModel 销毁 onDispose");
+  }
+
+}

+ 27 - 0
packages/cpt_main/lib/modules/visitor/register/visitor_register_view_model.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'visitor_register_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$visitorRegisterViewModelHash() =>
+    r'efcd5105243eb7a8ec68d0ff5d428e7eb72fded0';
+
+/// See also [VisitorRegisterViewModel].
+@ProviderFor(VisitorRegisterViewModel)
+final visitorRegisterViewModelProvider = AutoDisposeNotifierProvider<
+    VisitorRegisterViewModel, VisitorRegisterState>.internal(
+  VisitorRegisterViewModel.new,
+  name: r'visitorRegisterViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$visitorRegisterViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$VisitorRegisterViewModel = AutoDisposeNotifier<VisitorRegisterState>;
+// ignore_for_file: type=lint
+// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

+ 2 - 0
packages/cpt_main/lib/router/page/main_page_router.dart

@@ -22,6 +22,7 @@ import '../../modules/home/latest_news/property/latest_news_property_screen.dart
 import '../../modules/home/latest_news/publish/latest_news_publish_screen.dart';
 import '../../modules/home/latest_news/publish/latest_news_publish_screen.dart';
 import '../../modules/home/latest_news/latest_news_page.dart';
 import '../../modules/home/latest_news/latest_news_page.dart';
 import '../../modules/home/management_guides/management_guides_page.dart';
 import '../../modules/home/management_guides/management_guides_page.dart';
+import '../../modules/visitor/register/visitor_register_page.dart';
 
 
 part 'main_page_router.gr.dart';
 part 'main_page_router.gr.dart';
 
 
@@ -73,5 +74,6 @@ class MainPageRouter extends _$MainPageRouter {
           ],
           ],
         ),
         ),
         CustomRoute(page: ManagementGuidesPageRoute.page, path: RouterPath.homeManagementGuides, transitionsBuilder: applySlideTransition),
         CustomRoute(page: ManagementGuidesPageRoute.page, path: RouterPath.homeManagementGuides, transitionsBuilder: applySlideTransition),
+        CustomRoute(page: VisitorRegisterPageRoute.page, path: RouterPath.visitorRegister, transitionsBuilder: applySlideTransition),
       ];
       ];
 }
 }

+ 20 - 0
packages/cpt_main/lib/router/page/main_page_router.gr.dart

@@ -129,6 +129,12 @@ abstract class _$MainPageRouter extends RootStackRouter {
         child: const VisitorPage(),
         child: const VisitorPage(),
       );
       );
     },
     },
+    VisitorRegisterPageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: const VisitorRegisterPage(),
+      );
+    },
   };
   };
 }
 }
 
 
@@ -397,3 +403,17 @@ class VisitorPageRoute extends PageRouteInfo<void> {
 
 
   static const PageInfo<void> page = PageInfo<void>(name);
   static const PageInfo<void> page = PageInfo<void>(name);
 }
 }
+
+/// generated route for
+/// [VisitorRegisterPage]
+class VisitorRegisterPageRoute extends PageRouteInfo<void> {
+  const VisitorRegisterPageRoute({List<PageRouteInfo>? children})
+      : super(
+          VisitorRegisterPageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'VisitorRegisterPageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}

BIN
packages/cs_resources/assets/main/feedback_waiting_icon.webp


BIN
packages/cs_resources/assets/main/success_icon.webp


BIN
packages/cs_resources/assets/main/visitor_register_date.webp


+ 3 - 0
packages/cs_resources/lib/generated/assets.dart

@@ -54,6 +54,7 @@ class Assets {
   static const String mainFeedbackItemIcon = 'assets/main/feedback_item_icon.webp';
   static const String mainFeedbackItemIcon = 'assets/main/feedback_item_icon.webp';
   static const String mainFeedbackSend = 'assets/main/feedback_send.webp';
   static const String mainFeedbackSend = 'assets/main/feedback_send.webp';
   static const String mainFeedbackSendImg = 'assets/main/feedback_send_img.webp';
   static const String mainFeedbackSendImg = 'assets/main/feedback_send_img.webp';
+  static const String mainFeedbackWaitingIcon = 'assets/main/feedback_waiting_icon.webp';
   static const String mainHomeBoticeBoardIcon = 'assets/main/home_botice_board_icon.webp';
   static const String mainHomeBoticeBoardIcon = 'assets/main/home_botice_board_icon.webp';
   static const String mainHomeCommunityIcon = 'assets/main/home_community_icon.webp';
   static const String mainHomeCommunityIcon = 'assets/main/home_community_icon.webp';
   static const String mainHomeFacilityIcon = 'assets/main/home_facility_icon.webp';
   static const String mainHomeFacilityIcon = 'assets/main/home_facility_icon.webp';
@@ -81,6 +82,7 @@ class Assets {
   static const String mainNotificationItemIcon = 'assets/main/notification_item_icon.webp';
   static const String mainNotificationItemIcon = 'assets/main/notification_item_icon.webp';
   static const String mainPropertyGuide = 'assets/main/property_guide.webp';
   static const String mainPropertyGuide = 'assets/main/property_guide.webp';
   static const String mainRolesGuide = 'assets/main/roles_guide.webp';
   static const String mainRolesGuide = 'assets/main/roles_guide.webp';
+  static const String mainSuccessIcon = 'assets/main/success_icon.webp';
   static const String mainTabFeedbackSelected = 'assets/main/tab_feedback_selected.webp';
   static const String mainTabFeedbackSelected = 'assets/main/tab_feedback_selected.webp';
   static const String mainTabFeedbackUnselected = 'assets/main/tab_feedback_unselected.webp';
   static const String mainTabFeedbackUnselected = 'assets/main/tab_feedback_unselected.webp';
   static const String mainTabHomeSelected = 'assets/main/tab_home_selected.webp';
   static const String mainTabHomeSelected = 'assets/main/tab_home_selected.webp';
@@ -93,6 +95,7 @@ class Assets {
   static const String mainVisitorHistory = 'assets/main/visitor_history.webp';
   static const String mainVisitorHistory = 'assets/main/visitor_history.webp';
   static const String mainVisitorNow = 'assets/main/visitor_now.webp';
   static const String mainVisitorNow = 'assets/main/visitor_now.webp';
   static const String mainVisitorNowImg = 'assets/main/visitor_now_img.webp';
   static const String mainVisitorNowImg = 'assets/main/visitor_now_img.webp';
+  static const String mainVisitorRegisterDate = 'assets/main/visitor_register_date.webp';
   static const String noticeBoardAnnouncementIcon = 'assets/notice_board/announcement_icon.png';
   static const String noticeBoardAnnouncementIcon = 'assets/notice_board/announcement_icon.png';
   static const String noticeBoardDocumentsIcon = 'assets/notice_board/documents_icon.png';
   static const String noticeBoardDocumentsIcon = 'assets/notice_board/documents_icon.png';
   static const String noticeBoardEventIcon = 'assets/notice_board/event_icon.png';
   static const String noticeBoardEventIcon = 'assets/notice_board/event_icon.png';

+ 19 - 0
packages/cs_resources/lib/generated/intl/messages_en.dart

@@ -26,13 +26,18 @@ class MessageLookup extends MessageLookupByLibrary {
 
 
   final messages = _notInlinedMessages(_notInlinedMessages);
   final messages = _notInlinedMessages(_notInlinedMessages);
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
+        "Up_to_max_images": MessageLookupByLibrary.simpleMessage(
+            "(Up to 10 images can be uploaded)"),
         "access_date": MessageLookupByLibrary.simpleMessage("Access Date"),
         "access_date": MessageLookupByLibrary.simpleMessage("Access Date"),
         "account_deactivate_alert": MessageLookupByLibrary.simpleMessage(
         "account_deactivate_alert": MessageLookupByLibrary.simpleMessage(
             "Are you sure you want to deactivate your account? You will not be able to login into the app once you proceed with the request."),
             "Are you sure you want to deactivate your account? You will not be able to login into the app once you proceed with the request."),
         "account_deactivation":
         "account_deactivation":
             MessageLookupByLibrary.simpleMessage("Account Deactivation"),
             MessageLookupByLibrary.simpleMessage("Account Deactivation"),
+        "administrator_reply":
+            MessageLookupByLibrary.simpleMessage("Administrator Reply"),
         "agree_to": MessageLookupByLibrary.simpleMessage("Agree to"),
         "agree_to": MessageLookupByLibrary.simpleMessage("Agree to"),
         "alert": MessageLookupByLibrary.simpleMessage("Alert"),
         "alert": MessageLookupByLibrary.simpleMessage("Alert"),
+        "back_home": MessageLookupByLibrary.simpleMessage("Back Home"),
         "block": MessageLookupByLibrary.simpleMessage("Block"),
         "block": MessageLookupByLibrary.simpleMessage("Block"),
         "block_desc": MessageLookupByLibrary.simpleMessage(
         "block_desc": MessageLookupByLibrary.simpleMessage(
             "Block refers to the street number of the unit\'s official mailing address"),
             "Block refers to the street number of the unit\'s official mailing address"),
@@ -44,6 +49,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "change_mobile_phone":
         "change_mobile_phone":
             MessageLookupByLibrary.simpleMessage("Change Mobile Phone"),
             MessageLookupByLibrary.simpleMessage("Change Mobile Phone"),
         "characters": m0,
         "characters": m0,
+        "choose_category":
+            MessageLookupByLibrary.simpleMessage("Choose a Category"),
         "community": MessageLookupByLibrary.simpleMessage("Community"),
         "community": MessageLookupByLibrary.simpleMessage("Community"),
         "confirm": MessageLookupByLibrary.simpleMessage("Confirm"),
         "confirm": MessageLookupByLibrary.simpleMessage("Confirm"),
         "confirm_new_password":
         "confirm_new_password":
@@ -54,6 +61,8 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Create New FeedBack"),
             MessageLookupByLibrary.simpleMessage("Create New FeedBack"),
         "create_new_yy_home_account":
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("Create New YY Home Account"),
             MessageLookupByLibrary.simpleMessage("Create New YY Home Account"),
+        "describe_your_feedback":
+            MessageLookupByLibrary.simpleMessage("Describe Your FeedBack"),
         "did_not_receive":
         "did_not_receive":
             MessageLookupByLibrary.simpleMessage("Did Not Receive?"),
             MessageLookupByLibrary.simpleMessage("Did Not Receive?"),
         "email": MessageLookupByLibrary.simpleMessage("Email"),
         "email": MessageLookupByLibrary.simpleMessage("Email"),
@@ -141,11 +150,16 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Property Guide"),
             MessageLookupByLibrary.simpleMessage("Property Guide"),
         "property_news": MessageLookupByLibrary.simpleMessage("Property News"),
         "property_news": MessageLookupByLibrary.simpleMessage("Property News"),
         "publish": MessageLookupByLibrary.simpleMessage("Publish"),
         "publish": MessageLookupByLibrary.simpleMessage("Publish"),
+        "published_successful_txt": MessageLookupByLibrary.simpleMessage(
+            "Your feedback has been successfully sent! We will reply to you as soon as possible! thank you!"),
+        "published_successfully":
+            MessageLookupByLibrary.simpleMessage("Published Successfully"),
         "rate_us": MessageLookupByLibrary.simpleMessage("Rate Us"),
         "rate_us": MessageLookupByLibrary.simpleMessage("Rate Us"),
         "resend_code": MessageLookupByLibrary.simpleMessage("Resend Code"),
         "resend_code": MessageLookupByLibrary.simpleMessage("Resend Code"),
         "reset_password":
         "reset_password":
             MessageLookupByLibrary.simpleMessage("Reset Password"),
             MessageLookupByLibrary.simpleMessage("Reset Password"),
         "rewards": MessageLookupByLibrary.simpleMessage("Rewards"),
         "rewards": MessageLookupByLibrary.simpleMessage("Rewards"),
+        "send_feedback": MessageLookupByLibrary.simpleMessage("Send FeedBack"),
         "sent": MessageLookupByLibrary.simpleMessage("Sent"),
         "sent": MessageLookupByLibrary.simpleMessage("Sent"),
         "service": MessageLookupByLibrary.simpleMessage("Service"),
         "service": MessageLookupByLibrary.simpleMessage("Service"),
         "settings": MessageLookupByLibrary.simpleMessage("Settings"),
         "settings": MessageLookupByLibrary.simpleMessage("Settings"),
@@ -173,6 +187,7 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Terms & Conditions"),
             MessageLookupByLibrary.simpleMessage("Terms & Conditions"),
         "terms_of_service":
         "terms_of_service":
             MessageLookupByLibrary.simpleMessage("Terms of Service"),
             MessageLookupByLibrary.simpleMessage("Terms of Service"),
+        "title": MessageLookupByLibrary.simpleMessage("Title"),
         "tries_left": MessageLookupByLibrary.simpleMessage("Tries Left"),
         "tries_left": MessageLookupByLibrary.simpleMessage("Tries Left"),
         "type_here": MessageLookupByLibrary.simpleMessage("Type Here"),
         "type_here": MessageLookupByLibrary.simpleMessage("Type Here"),
         "unit_number": MessageLookupByLibrary.simpleMessage("Unit Number"),
         "unit_number": MessageLookupByLibrary.simpleMessage("Unit Number"),
@@ -185,6 +200,8 @@ class MessageLookup extends MessageLookupByLibrary {
             "(2)Tenancy Agreement Stamp Duty receipt"),
             "(2)Tenancy Agreement Stamp Duty receipt"),
         "upload_documents":
         "upload_documents":
             MessageLookupByLibrary.simpleMessage("Upload Documents"),
             MessageLookupByLibrary.simpleMessage("Upload Documents"),
+        "upload_pictures":
+            MessageLookupByLibrary.simpleMessage("Upload Pictures"),
         "verification_code":
         "verification_code":
             MessageLookupByLibrary.simpleMessage("Verification Code"),
             MessageLookupByLibrary.simpleMessage("Verification Code"),
         "version_no": MessageLookupByLibrary.simpleMessage("Version No."),
         "version_no": MessageLookupByLibrary.simpleMessage("Version No."),
@@ -195,6 +212,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "visitor_now": MessageLookupByLibrary.simpleMessage("Now"),
         "visitor_now": MessageLookupByLibrary.simpleMessage("Now"),
         "visitor_registration":
         "visitor_registration":
             MessageLookupByLibrary.simpleMessage("Visitor Registration"),
             MessageLookupByLibrary.simpleMessage("Visitor Registration"),
+        "waiting_for_the_administrator": MessageLookupByLibrary.simpleMessage(
+            "Waiting for the administrator"),
         "welcome_name": m1,
         "welcome_name": m1,
         "who_are_owners":
         "who_are_owners":
             MessageLookupByLibrary.simpleMessage("Who are owners?"),
             MessageLookupByLibrary.simpleMessage("Who are owners?"),

+ 15 - 0
packages/cs_resources/lib/generated/intl/messages_zh_CN.dart

@@ -26,12 +26,16 @@ class MessageLookup extends MessageLookupByLibrary {
 
 
   final messages = _notInlinedMessages(_notInlinedMessages);
   final messages = _notInlinedMessages(_notInlinedMessages);
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
+        "Up_to_max_images":
+            MessageLookupByLibrary.simpleMessage("(您最多可以上传10张图片)"),
         "access_date": MessageLookupByLibrary.simpleMessage("访问日期"),
         "access_date": MessageLookupByLibrary.simpleMessage("访问日期"),
         "account_deactivate_alert": MessageLookupByLibrary.simpleMessage(
         "account_deactivate_alert": MessageLookupByLibrary.simpleMessage(
             "您确定要停用您的帐户吗?一旦您继续执行请求,您将无法登录应用程序。"),
             "您确定要停用您的帐户吗?一旦您继续执行请求,您将无法登录应用程序。"),
         "account_deactivation": MessageLookupByLibrary.simpleMessage("删除账号"),
         "account_deactivation": MessageLookupByLibrary.simpleMessage("删除账号"),
+        "administrator_reply": MessageLookupByLibrary.simpleMessage("管理员回复"),
         "agree_to": MessageLookupByLibrary.simpleMessage("同意"),
         "agree_to": MessageLookupByLibrary.simpleMessage("同意"),
         "alert": MessageLookupByLibrary.simpleMessage("提示"),
         "alert": MessageLookupByLibrary.simpleMessage("提示"),
+        "back_home": MessageLookupByLibrary.simpleMessage("返回首页"),
         "block": MessageLookupByLibrary.simpleMessage("街区"),
         "block": MessageLookupByLibrary.simpleMessage("街区"),
         "block_desc": MessageLookupByLibrary.simpleMessage("街区是指单位官方邮编街道号"),
         "block_desc": MessageLookupByLibrary.simpleMessage("街区是指单位官方邮编街道号"),
         "block_example":
         "block_example":
@@ -41,6 +45,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
         "characters": m0,
         "characters": m0,
+        "choose_category": MessageLookupByLibrary.simpleMessage("选择类型"),
         "community": MessageLookupByLibrary.simpleMessage("社区"),
         "community": MessageLookupByLibrary.simpleMessage("社区"),
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
         "confirm_new_password": MessageLookupByLibrary.simpleMessage("确认新密码"),
         "confirm_new_password": MessageLookupByLibrary.simpleMessage("确认新密码"),
@@ -48,6 +53,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "create_new_feedback": MessageLookupByLibrary.simpleMessage("创建新的反馈"),
         "create_new_feedback": MessageLookupByLibrary.simpleMessage("创建新的反馈"),
         "create_new_yy_home_account":
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
+        "describe_your_feedback":
+            MessageLookupByLibrary.simpleMessage("描述您的反馈"),
         "did_not_receive": MessageLookupByLibrary.simpleMessage("没有收到验证码?"),
         "did_not_receive": MessageLookupByLibrary.simpleMessage("没有收到验证码?"),
         "email": MessageLookupByLibrary.simpleMessage("邮箱"),
         "email": MessageLookupByLibrary.simpleMessage("邮箱"),
         "enable_notification": MessageLookupByLibrary.simpleMessage("允许通知"),
         "enable_notification": MessageLookupByLibrary.simpleMessage("允许通知"),
@@ -116,10 +123,14 @@ class MessageLookup extends MessageLookupByLibrary {
         "property_guide": MessageLookupByLibrary.simpleMessage("物业指南"),
         "property_guide": MessageLookupByLibrary.simpleMessage("物业指南"),
         "property_news": MessageLookupByLibrary.simpleMessage("资产新闻"),
         "property_news": MessageLookupByLibrary.simpleMessage("资产新闻"),
         "publish": MessageLookupByLibrary.simpleMessage("公布"),
         "publish": MessageLookupByLibrary.simpleMessage("公布"),
+        "published_successful_txt":
+            MessageLookupByLibrary.simpleMessage("您的反馈已发送成功,我们会尽快回复您的反馈,谢谢!"),
+        "published_successfully": MessageLookupByLibrary.simpleMessage("发布成功"),
         "rate_us": MessageLookupByLibrary.simpleMessage("评价我们"),
         "rate_us": MessageLookupByLibrary.simpleMessage("评价我们"),
         "resend_code": MessageLookupByLibrary.simpleMessage("重新发送"),
         "resend_code": MessageLookupByLibrary.simpleMessage("重新发送"),
         "reset_password": MessageLookupByLibrary.simpleMessage("重置密码"),
         "reset_password": MessageLookupByLibrary.simpleMessage("重置密码"),
         "rewards": MessageLookupByLibrary.simpleMessage("奖励"),
         "rewards": MessageLookupByLibrary.simpleMessage("奖励"),
+        "send_feedback": MessageLookupByLibrary.simpleMessage("发送反馈"),
         "sent": MessageLookupByLibrary.simpleMessage("发送"),
         "sent": MessageLookupByLibrary.simpleMessage("发送"),
         "service": MessageLookupByLibrary.simpleMessage("服务"),
         "service": MessageLookupByLibrary.simpleMessage("服务"),
         "settings": MessageLookupByLibrary.simpleMessage("设置"),
         "settings": MessageLookupByLibrary.simpleMessage("设置"),
@@ -141,6 +152,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "tenants_desc4": MessageLookupByLibrary.simpleMessage("管理员将相应地验证您的申请"),
         "tenants_desc4": MessageLookupByLibrary.simpleMessage("管理员将相应地验证您的申请"),
         "terms_conditions": MessageLookupByLibrary.simpleMessage("服务条款"),
         "terms_conditions": MessageLookupByLibrary.simpleMessage("服务条款"),
         "terms_of_service": MessageLookupByLibrary.simpleMessage("服务条款"),
         "terms_of_service": MessageLookupByLibrary.simpleMessage("服务条款"),
+        "title": MessageLookupByLibrary.simpleMessage("标题"),
         "tries_left": MessageLookupByLibrary.simpleMessage("次尝试机会"),
         "tries_left": MessageLookupByLibrary.simpleMessage("次尝试机会"),
         "type_here": MessageLookupByLibrary.simpleMessage("在此输入"),
         "type_here": MessageLookupByLibrary.simpleMessage("在此输入"),
         "unit_number": MessageLookupByLibrary.simpleMessage("单元"),
         "unit_number": MessageLookupByLibrary.simpleMessage("单元"),
@@ -152,6 +164,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "upload_doc_desc2":
         "upload_doc_desc2":
             MessageLookupByLibrary.simpleMessage("(2)租赁协议印花税收据"),
             MessageLookupByLibrary.simpleMessage("(2)租赁协议印花税收据"),
         "upload_documents": MessageLookupByLibrary.simpleMessage("上传文档"),
         "upload_documents": MessageLookupByLibrary.simpleMessage("上传文档"),
+        "upload_pictures": MessageLookupByLibrary.simpleMessage("上传图片"),
         "verification_code": MessageLookupByLibrary.simpleMessage("验证码"),
         "verification_code": MessageLookupByLibrary.simpleMessage("验证码"),
         "version_no": MessageLookupByLibrary.simpleMessage("版本号."),
         "version_no": MessageLookupByLibrary.simpleMessage("版本号."),
         "visitor": MessageLookupByLibrary.simpleMessage("访客"),
         "visitor": MessageLookupByLibrary.simpleMessage("访客"),
@@ -160,6 +173,8 @@ class MessageLookup extends MessageLookupByLibrary {
             "社区访客系统是一个智能系统,旨在加强社区安全管理,方便访客访问。"),
             "社区访客系统是一个智能系统,旨在加强社区安全管理,方便访客访问。"),
         "visitor_now": MessageLookupByLibrary.simpleMessage("当前的"),
         "visitor_now": MessageLookupByLibrary.simpleMessage("当前的"),
         "visitor_registration": MessageLookupByLibrary.simpleMessage("访客登记"),
         "visitor_registration": MessageLookupByLibrary.simpleMessage("访客登记"),
+        "waiting_for_the_administrator":
+            MessageLookupByLibrary.simpleMessage("等待管理员回复"),
         "welcome_name": m1,
         "welcome_name": m1,
         "who_are_owners": MessageLookupByLibrary.simpleMessage("怎样才算业主?"),
         "who_are_owners": MessageLookupByLibrary.simpleMessage("怎样才算业主?"),
         "who_are_tenants": MessageLookupByLibrary.simpleMessage("怎样才算租户?"),
         "who_are_tenants": MessageLookupByLibrary.simpleMessage("怎样才算租户?"),

+ 15 - 0
packages/cs_resources/lib/generated/intl/messages_zh_HK.dart

@@ -26,12 +26,16 @@ class MessageLookup extends MessageLookupByLibrary {
 
 
   final messages = _notInlinedMessages(_notInlinedMessages);
   final messages = _notInlinedMessages(_notInlinedMessages);
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
+        "Up_to_max_images":
+            MessageLookupByLibrary.simpleMessage("(您最多可以上传10张图片)"),
         "access_date": MessageLookupByLibrary.simpleMessage("访问日期"),
         "access_date": MessageLookupByLibrary.simpleMessage("访问日期"),
         "account_deactivate_alert": MessageLookupByLibrary.simpleMessage(
         "account_deactivate_alert": MessageLookupByLibrary.simpleMessage(
             "您确定要停用您的帐户吗?一旦您继续执行请求,您将无法登录应用程序。"),
             "您确定要停用您的帐户吗?一旦您继续执行请求,您将无法登录应用程序。"),
         "account_deactivation": MessageLookupByLibrary.simpleMessage("删除账号"),
         "account_deactivation": MessageLookupByLibrary.simpleMessage("删除账号"),
+        "administrator_reply": MessageLookupByLibrary.simpleMessage("管理员回复"),
         "agree_to": MessageLookupByLibrary.simpleMessage("同意"),
         "agree_to": MessageLookupByLibrary.simpleMessage("同意"),
         "alert": MessageLookupByLibrary.simpleMessage("提示"),
         "alert": MessageLookupByLibrary.simpleMessage("提示"),
+        "back_home": MessageLookupByLibrary.simpleMessage("返回首页"),
         "block": MessageLookupByLibrary.simpleMessage("街区"),
         "block": MessageLookupByLibrary.simpleMessage("街区"),
         "block_desc": MessageLookupByLibrary.simpleMessage("街区是指单位官方邮编街道号"),
         "block_desc": MessageLookupByLibrary.simpleMessage("街区是指单位官方邮编街道号"),
         "block_example":
         "block_example":
@@ -41,6 +45,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
         "characters": m0,
         "characters": m0,
+        "choose_category": MessageLookupByLibrary.simpleMessage("选择类型"),
         "community": MessageLookupByLibrary.simpleMessage("社区"),
         "community": MessageLookupByLibrary.simpleMessage("社区"),
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
         "confirm_new_password": MessageLookupByLibrary.simpleMessage("确认新密码"),
         "confirm_new_password": MessageLookupByLibrary.simpleMessage("确认新密码"),
@@ -48,6 +53,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "create_new_feedback": MessageLookupByLibrary.simpleMessage("创建新的反馈"),
         "create_new_feedback": MessageLookupByLibrary.simpleMessage("创建新的反馈"),
         "create_new_yy_home_account":
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
+        "describe_your_feedback":
+            MessageLookupByLibrary.simpleMessage("描述您的反馈"),
         "did_not_receive": MessageLookupByLibrary.simpleMessage("没有收到验证码?"),
         "did_not_receive": MessageLookupByLibrary.simpleMessage("没有收到验证码?"),
         "email": MessageLookupByLibrary.simpleMessage("邮箱"),
         "email": MessageLookupByLibrary.simpleMessage("邮箱"),
         "enable_notification": MessageLookupByLibrary.simpleMessage("允许通知"),
         "enable_notification": MessageLookupByLibrary.simpleMessage("允许通知"),
@@ -108,10 +115,14 @@ class MessageLookup extends MessageLookupByLibrary {
         "property_guide": MessageLookupByLibrary.simpleMessage("物业指南"),
         "property_guide": MessageLookupByLibrary.simpleMessage("物业指南"),
         "property_news": MessageLookupByLibrary.simpleMessage("资产新闻"),
         "property_news": MessageLookupByLibrary.simpleMessage("资产新闻"),
         "publish": MessageLookupByLibrary.simpleMessage("公布"),
         "publish": MessageLookupByLibrary.simpleMessage("公布"),
+        "published_successful_txt":
+            MessageLookupByLibrary.simpleMessage("您的反馈已发送成功,我们会尽快回复您的反馈,谢谢!"),
+        "published_successfully": MessageLookupByLibrary.simpleMessage("发布成功"),
         "rate_us": MessageLookupByLibrary.simpleMessage("评价我们"),
         "rate_us": MessageLookupByLibrary.simpleMessage("评价我们"),
         "resend_code": MessageLookupByLibrary.simpleMessage("重新发送"),
         "resend_code": MessageLookupByLibrary.simpleMessage("重新发送"),
         "reset_password": MessageLookupByLibrary.simpleMessage("重置密码"),
         "reset_password": MessageLookupByLibrary.simpleMessage("重置密码"),
         "rewards": MessageLookupByLibrary.simpleMessage("獎勵"),
         "rewards": MessageLookupByLibrary.simpleMessage("獎勵"),
+        "send_feedback": MessageLookupByLibrary.simpleMessage("发送反馈"),
         "sent": MessageLookupByLibrary.simpleMessage("发送"),
         "sent": MessageLookupByLibrary.simpleMessage("发送"),
         "service": MessageLookupByLibrary.simpleMessage("服务"),
         "service": MessageLookupByLibrary.simpleMessage("服务"),
         "settings": MessageLookupByLibrary.simpleMessage("设置"),
         "settings": MessageLookupByLibrary.simpleMessage("设置"),
@@ -128,6 +139,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "submit": MessageLookupByLibrary.simpleMessage("提交"),
         "submit": MessageLookupByLibrary.simpleMessage("提交"),
         "terms_conditions": MessageLookupByLibrary.simpleMessage("服务条款"),
         "terms_conditions": MessageLookupByLibrary.simpleMessage("服务条款"),
         "terms_of_service": MessageLookupByLibrary.simpleMessage("服务条款"),
         "terms_of_service": MessageLookupByLibrary.simpleMessage("服务条款"),
+        "title": MessageLookupByLibrary.simpleMessage("标题"),
         "tries_left": MessageLookupByLibrary.simpleMessage("次尝试机会"),
         "tries_left": MessageLookupByLibrary.simpleMessage("次尝试机会"),
         "type_here": MessageLookupByLibrary.simpleMessage("在此输入"),
         "type_here": MessageLookupByLibrary.simpleMessage("在此输入"),
         "unit_number": MessageLookupByLibrary.simpleMessage("单元"),
         "unit_number": MessageLookupByLibrary.simpleMessage("单元"),
@@ -139,6 +151,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "upload_doc_desc2":
         "upload_doc_desc2":
             MessageLookupByLibrary.simpleMessage("(2)租赁协议印花税收据"),
             MessageLookupByLibrary.simpleMessage("(2)租赁协议印花税收据"),
         "upload_documents": MessageLookupByLibrary.simpleMessage("上传文档"),
         "upload_documents": MessageLookupByLibrary.simpleMessage("上传文档"),
+        "upload_pictures": MessageLookupByLibrary.simpleMessage("上传图片"),
         "verification_code": MessageLookupByLibrary.simpleMessage("验证码"),
         "verification_code": MessageLookupByLibrary.simpleMessage("验证码"),
         "version_no": MessageLookupByLibrary.simpleMessage("版本号."),
         "version_no": MessageLookupByLibrary.simpleMessage("版本号."),
         "visitor": MessageLookupByLibrary.simpleMessage("访客"),
         "visitor": MessageLookupByLibrary.simpleMessage("访客"),
@@ -147,6 +160,8 @@ class MessageLookup extends MessageLookupByLibrary {
             "社区访客系统是一个智能系统,旨在加强社区安全管理,方便访客访问。"),
             "社区访客系统是一个智能系统,旨在加强社区安全管理,方便访客访问。"),
         "visitor_now": MessageLookupByLibrary.simpleMessage("当前的"),
         "visitor_now": MessageLookupByLibrary.simpleMessage("当前的"),
         "visitor_registration": MessageLookupByLibrary.simpleMessage("访客登记"),
         "visitor_registration": MessageLookupByLibrary.simpleMessage("访客登记"),
+        "waiting_for_the_administrator":
+            MessageLookupByLibrary.simpleMessage("等待管理员回复"),
         "welcome_name": m1,
         "welcome_name": m1,
         "yes": MessageLookupByLibrary.simpleMessage("是"),
         "yes": MessageLookupByLibrary.simpleMessage("是"),
         "you_have": MessageLookupByLibrary.simpleMessage("你还有"),
         "you_have": MessageLookupByLibrary.simpleMessage("你还有"),

+ 110 - 0
packages/cs_resources/lib/generated/l10n.dart

@@ -1270,6 +1270,116 @@ class S {
     );
     );
   }
   }
 
 
+  /// `Choose a Category`
+  String get choose_category {
+    return Intl.message(
+      'Choose a Category',
+      name: 'choose_category',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Title`
+  String get title {
+    return Intl.message(
+      'Title',
+      name: 'title',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Describe Your FeedBack`
+  String get describe_your_feedback {
+    return Intl.message(
+      'Describe Your FeedBack',
+      name: 'describe_your_feedback',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Upload Pictures`
+  String get upload_pictures {
+    return Intl.message(
+      'Upload Pictures',
+      name: 'upload_pictures',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Send FeedBack`
+  String get send_feedback {
+    return Intl.message(
+      'Send FeedBack',
+      name: 'send_feedback',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `(Up to 10 images can be uploaded)`
+  String get Up_to_max_images {
+    return Intl.message(
+      '(Up to 10 images can be uploaded)',
+      name: 'Up_to_max_images',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Published Successfully`
+  String get published_successfully {
+    return Intl.message(
+      'Published Successfully',
+      name: 'published_successfully',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Your feedback has been successfully sent! We will reply to you as soon as possible! thank you!`
+  String get published_successful_txt {
+    return Intl.message(
+      'Your feedback has been successfully sent! We will reply to you as soon as possible! thank you!',
+      name: 'published_successful_txt',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Back Home`
+  String get back_home {
+    return Intl.message(
+      'Back Home',
+      name: 'back_home',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Waiting for the administrator`
+  String get waiting_for_the_administrator {
+    return Intl.message(
+      'Waiting for the administrator',
+      name: 'waiting_for_the_administrator',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Administrator Reply`
+  String get administrator_reply {
+    return Intl.message(
+      'Administrator Reply',
+      name: 'administrator_reply',
+      desc: '',
+      args: [],
+    );
+  }
+
   /// `Other`
   /// `Other`
   String get other {
   String get other {
     return Intl.message(
     return Intl.message(

+ 11 - 0
packages/cs_resources/lib/l10n/intl_en.arb

@@ -121,5 +121,16 @@
   "feedback_msg_2": "there is something that requires ourattention or if you have an awesome suggestion, we would like to hear from you!",
   "feedback_msg_2": "there is something that requires ourattention or if you have an awesome suggestion, we would like to hear from you!",
   "create_new_feedback": "Create New FeedBack",
   "create_new_feedback": "Create New FeedBack",
   "mark_all": "Mark All",
   "mark_all": "Mark All",
+  "choose_category": "Choose a Category",
+  "title": "Title",
+  "describe_your_feedback": "Describe Your FeedBack",
+  "upload_pictures": "Upload Pictures",
+  "send_feedback": "Send FeedBack",
+  "Up_to_max_images": "(Up to 10 images can be uploaded)",
+  "published_successfully": "Published Successfully",
+  "published_successful_txt": "Your feedback has been successfully sent! We will reply to you as soon as possible! thank you!",
+  "back_home": "Back Home",
+  "waiting_for_the_administrator": "Waiting for the administrator",
+  "administrator_reply": "Administrator Reply",
   "other": "Other"
   "other": "Other"
 }
 }

+ 11 - 0
packages/cs_resources/lib/l10n/intl_zh_CN.arb

@@ -121,5 +121,16 @@
   "feedback_msg_2": "有些事情需要我们关注,或者如果你有一个很棒的建议,我们想听听你的意见!",
   "feedback_msg_2": "有些事情需要我们关注,或者如果你有一个很棒的建议,我们想听听你的意见!",
   "create_new_feedback": "创建新的反馈",
   "create_new_feedback": "创建新的反馈",
   "mark_all": "标记全部",
   "mark_all": "标记全部",
+  "choose_category": "选择类型",
+  "title": "标题",
+  "describe_your_feedback": "描述您的反馈",
+  "upload_pictures": "上传图片",
+  "send_feedback": "发送反馈",
+  "Up_to_max_images": "(您最多可以上传10张图片)",
+  "published_successfully": "发布成功",
+  "published_successful_txt": "您的反馈已发送成功,我们会尽快回复您的反馈,谢谢!",
+  "back_home": "返回首页",
+  "waiting_for_the_administrator": "等待管理员回复",
+  "administrator_reply": "管理员回复",
   "other": "其他"
   "other": "其他"
 }
 }

+ 11 - 0
packages/cs_resources/lib/l10n/intl_zh_HK.arb

@@ -107,5 +107,16 @@
   "feedback_msg_2": "有些事情需要我们关注,或者如果你有一个很棒的建议,我们想听听你的意见!",
   "feedback_msg_2": "有些事情需要我们关注,或者如果你有一个很棒的建议,我们想听听你的意见!",
   "create_new_feedback": "创建新的反馈",
   "create_new_feedback": "创建新的反馈",
   "mark_all": "标记全部",
   "mark_all": "标记全部",
+  "choose_category": "选择类型",
+  "title": "标题",
+  "describe_your_feedback": "描述您的反馈",
+  "upload_pictures": "上传图片",
+  "send_feedback": "发送反馈",
+  "Up_to_max_images": "(您最多可以上传10张图片)",
+  "published_successfully": "发布成功",
+  "published_successful_txt": "您的反馈已发送成功,我们会尽快回复您的反馈,谢谢!",
+  "back_home": "返回首页",
+  "waiting_for_the_administrator": "等待管理员回复",
+  "administrator_reply": "管理员回复",
   "other": "其他"
   "other": "其他"
 }
 }

+ 4 - 0
packages/cs_router/lib/path/router_path.dart

@@ -26,6 +26,10 @@ class RouterPath {
   static const homePropertyNews = '/home/property/news';
   static const homePropertyNews = '/home/property/news';
   static const homeLatestNews = '/home/latest/news';
   static const homeLatestNews = '/home/latest/news';
   static const homeManagementGuides = '/home/management/guides';
   static const homeManagementGuides = '/home/management/guides';
+  static const visitorRegister = '/visitor/register';
+  static const feedbackCreate = '/feedback/create';
+  static const feedbackCreateSuccess = '/feedback/create/success';
+  static const feedbackDetail = '/feedback/detail';
 
 
   //用户
   //用户
   static const profileEdit = '/profile/edit';
   static const profileEdit = '/profile/edit';

+ 0 - 1
packages/cs_widgets/lib/my_load_image.dart

@@ -256,7 +256,6 @@ class MyAssetImage extends StatelessWidget {
   @override
   @override
   Widget build(BuildContext context) {
   Widget build(BuildContext context) {
     var finalPath = ImagePathUtils.getImgPath(image);
     var finalPath = ImagePathUtils.getImgPath(image);
-    print("finalPath:$finalPath");
     return Image.asset(
     return Image.asset(
       finalPath,
       finalPath,
       package: 'cs_resources',
       package: 'cs_resources',

+ 3 - 3
packages/cs_widgets/lib/shatter/form_require_text.dart

@@ -6,8 +6,8 @@ import 'package:flutter/material.dart';
  */
  */
 class FormRequireText extends StatelessWidget {
 class FormRequireText extends StatelessWidget {
   final String text;
   final String text;
-  FontWeight? fontWeight = FontWeight.w400;
-  Color? textColor = Colors.white;
+  FontWeight? fontWeight;
+  Color? textColor = Colors.black;
   double? fontSize = 15.0;
   double? fontSize = 15.0;
 
 
   FormRequireText({required this.text, this.textColor, this.fontSize, this.fontWeight});
   FormRequireText({required this.text, this.textColor, this.fontSize, this.fontWeight});
@@ -16,7 +16,7 @@ class FormRequireText extends StatelessWidget {
   Widget build(BuildContext context) {
   Widget build(BuildContext context) {
     return RichText(
     return RichText(
       text: TextSpan(
       text: TextSpan(
-        style: TextStyle(fontSize: fontSize, fontWeight: fontWeight, color: textColor),
+        style: TextStyle(fontSize: fontSize, fontWeight: fontWeight ?? FontWeight.w500, color: textColor),
         children: <TextSpan>[
         children: <TextSpan>[
           TextSpan(
           TextSpan(
             text: text,
             text: text,