Parcourir la source

Merge branch 'dev'

# Conflicts:
#	app/src/main/java/com/grkj/iscs/features/main/fragment/user_info/SetFingerprintFragment.kt
#	app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/UserManageViewModel.kt
#	ui-base/src/main/res/values/strings.xml
周文健 il y a 2 mois
Parent
commit
cea5c89255
100 fichiers modifiés avec 2715 ajouts et 860 suppressions
  1. 1 0
      app/build.gradle.kts
  2. 683 0
      app/src/main/assets/i18n/en-US.csv
  3. 683 0
      app/src/main/assets/i18n/zh-CN.csv
  4. 39 2
      app/src/main/java/com/grkj/iscs/ISCSApplication.kt
  5. 2 1
      app/src/main/java/com/grkj/iscs/features/init/fragment/InitCardRegistrationFragment.kt
  6. 6 5
      app/src/main/java/com/grkj/iscs/features/init/fragment/InitDeviceRegistrationKeyAndLockFragment.kt
  7. 3 3
      app/src/main/java/com/grkj/iscs/features/init/fragment/InitSetAdminAccountFragment.kt
  8. 2 2
      app/src/main/java/com/grkj/iscs/features/init/fragment/InitWelcomeFragment.kt
  9. 4 4
      app/src/main/java/com/grkj/iscs/features/init/viewmodel/InitViewModel.kt
  10. 54 22
      app/src/main/java/com/grkj/iscs/features/login/activity/LoginActivity.kt
  11. 56 0
      app/src/main/java/com/grkj/iscs/features/login/dialog/ChangeLangDialog.kt
  12. 5 5
      app/src/main/java/com/grkj/iscs/features/login/dialog/LoginDialog.kt
  13. 11 11
      app/src/main/java/com/grkj/iscs/features/login/viewmodel/LoginViewModel.kt
  14. 2 3
      app/src/main/java/com/grkj/iscs/features/main/dialog/CheckFaceDialog.kt
  15. 3 2
      app/src/main/java/com/grkj/iscs/features/main/dialog/QuickEntranceConfigDialog.kt
  16. 5 5
      app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/AddPointDialog.kt
  17. 3 2
      app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/AddRoleDialog.kt
  18. 5 5
      app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/AddUserDialog.kt
  19. 1 1
      app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/AddWorkstationDialog.kt
  20. 5 5
      app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/UpdatePointDialog.kt
  21. 2 2
      app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/UpdateRoleDialog.kt
  22. 1 1
      app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/UpdateWorkstationDialog.kt
  23. 1 1
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddCardDialog.kt
  24. 3 3
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddKeyDialog.kt
  25. 2 2
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddLockDialog.kt
  26. 2 2
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddRfidTokenDialog.kt
  27. 1 1
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateCardDialog.kt
  28. 3 3
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateKeyDialog.kt
  29. 2 2
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateLockDialog.kt
  30. 2 2
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateRfidTokenDialog.kt
  31. 1 1
      app/src/main/java/com/grkj/iscs/features/main/dialog/user_info/AddFingerprintDialog.kt
  32. 6 6
      app/src/main/java/com/grkj/iscs/features/main/fragment/common/EditJobWorkflowSettingFragment.kt
  33. 6 6
      app/src/main/java/com/grkj/iscs/features/main/fragment/common/EditSopWorkflowSettingFragment.kt
  34. 9 9
      app/src/main/java/com/grkj/iscs/features/main/fragment/common/SelectMemberFragment.kt
  35. 7 7
      app/src/main/java/com/grkj/iscs/features/main/fragment/common/SelectPointFragment.kt
  36. 6 6
      app/src/main/java/com/grkj/iscs/features/main/fragment/common/WorkflowSettingFragment.kt
  37. 255 0
      app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/BackupAndRestoreFragment.kt
  38. 10 4
      app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/DataManageHomeFragment.kt
  39. 14 22
      app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/PointMangeFragment.kt
  40. 19 28
      app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/RoleManageFragment.kt
  41. 11 18
      app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/UserManageFragment.kt
  42. 23 34
      app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/WorkstationManageFragment.kt
  43. 22 23
      app/src/main/java/com/grkj/iscs/features/main/fragment/exception_manage/ExceptionDetailFragment.kt
  44. 33 33
      app/src/main/java/com/grkj/iscs/features/main/fragment/exception_manage/ExceptionJobFragment.kt
  45. 3 2
      app/src/main/java/com/grkj/iscs/features/main/fragment/exception_manage/ExceptionManageFragment.kt
  46. 7 7
      app/src/main/java/com/grkj/iscs/features/main/fragment/exception_manage/ExceptionReportFragment.kt
  47. 10 10
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/CardManageFragment.kt
  48. 12 17
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/KeyManageFragment.kt
  49. 15 15
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/LockManageFragment.kt
  50. 16 16
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/RfidTokenManageFragment.kt
  51. 26 21
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/SlotsManageFragment.kt
  52. 12 18
      app/src/main/java/com/grkj/iscs/features/main/fragment/home/HomeFragment.kt
  53. 17 22
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateJobFragment.kt
  54. 11 11
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateSopFragment.kt
  55. 15 15
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateSopJobFragment.kt
  56. 25 25
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditJobFragment.kt
  57. 19 19
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditSopFragment.kt
  58. 23 23
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditSopJobFragment.kt
  59. 1 1
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/InProgressJobManageFragment.kt
  60. 33 33
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/JobExecuteFragment.kt
  61. 7 7
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/JobManageFragment.kt
  62. 26 24
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/MyTodoListFragment.kt
  63. 4 4
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/SopManageFragment.kt
  64. 9 9
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/WorkflowManageFragment.kt
  65. 6 6
      app/src/main/java/com/grkj/iscs/features/main/fragment/user_info/ResetPasswordFragment.kt
  66. 10 9
      app/src/main/java/com/grkj/iscs/features/main/fragment/user_info/SetFaceFragment.kt
  67. 11 11
      app/src/main/java/com/grkj/iscs/features/main/fragment/user_info/SetFingerprintFragment.kt
  68. 5 4
      app/src/main/java/com/grkj/iscs/features/main/fragment/user_info/SetJobCardFragment.kt
  69. 7 7
      app/src/main/java/com/grkj/iscs/features/main/fragment/user_info/UserInfoFragment.kt
  70. 2 2
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/MainViewModel.kt
  71. 9 9
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/WorkflowViewModel.kt
  72. 19 15
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/common/EditJobWorkflowSettingViewModel.kt
  73. 13 15
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/common/EditSopWorkflowSettingViewModel.kt
  74. 4 4
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/common/SelectMemberViewModel.kt
  75. 19 15
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/common/WorkflowSettingViewModel.kt
  76. 110 0
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/BackupAndRestoreViewModel.kt
  77. 1 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/PointManageViewModel.kt
  78. 1 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/RoleManageViewModel.kt
  79. 8 8
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/UserManageViewModel.kt
  80. 1 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/WorkstationManageViewModel.kt
  81. 7 7
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/exception_manage/ExceptionJobViewModel.kt
  82. 1 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/exception_manage/ExceptionViewModel.kt
  83. 4 4
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/CardManageViewModel.kt
  84. 1 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/KeyManageViewModel.kt
  85. 1 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/LockManageViewModel.kt
  86. 1 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/RfidTokenManageViewModel.kt
  87. 3 3
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/home/HomeViewModel.kt
  88. 32 32
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobExecuteViewModel.kt
  89. 4 4
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobViewModel.kt
  90. 8 8
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/MyTodoViewModel.kt
  91. 4 4
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopJobViewModel.kt
  92. 4 4
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopViewModel.kt
  93. 12 12
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/user_info/UserInfoViewModel.kt
  94. 33 28
      app/src/main/java/com/grkj/iscs/features/splash/activity/SplashActivity.kt
  95. 24 26
      app/src/main/java/com/grkj/iscs/receivers/BootReceiver.kt
  96. 9 0
      app/src/main/res/drawable/bg_tip_red.xml
  97. 28 11
      app/src/main/res/layout-land/activity_login.xml
  98. 0 4
      app/src/main/res/layout-land/activity_main.xml
  99. 4 4
      app/src/main/res/layout-land/dialog_login.xml
  100. 4 4
      app/src/main/res/layout-land/dialog_slots_exception_report.xml

+ 1 - 0
app/build.gradle.kts

@@ -59,6 +59,7 @@ android {
     }
     buildFeatures {
         dataBinding = true
+        buildConfig = true
     }
     packaging {
         resources {

+ 683 - 0
app/src/main/assets/i18n/en-US.csv

@@ -0,0 +1,683 @@
+key,type,comment,value
+i18n.language_name,text,语言自称,English
+abnormal,text,添加修改数据界面的状态的显示文本,异常
+account_login,text,登录界面的账号密码登录的文本,用户名登录
+action_confirm,text,提示弹窗的标题,操作确认
+action_confirm_content,text,点击步骤确认时的消息,确定要执行{0}吗?
+action_failed,text,提示弹窗的标题,操作失败
+action_hint,text,提示弹窗的标题,操作提醒
+action_succeed,text,提示弹窗的标题,操作成功
+add_card_failed,text,提示弹窗的内容,添加卡片失败
+add_card_succeed,text,提示弹窗的内容,添加卡片成功
+add_colocker,text,流程模式设置,步骤功能显示,添加共锁人({0})
+add_group,text,选择点位的时候的分组添加的按钮,添加分组
+add_key_failed,text,添加钥匙失败的弹窗的内容,新增钥匙失败
+add_key_succeed,text,添加钥匙成功的弹窗的内容,新增钥匙成功
+add_lock_failed,text,添加挂锁失败的弹窗的内容,添加挂锁失败
+add_lock_succeed,text,添加挂锁成功的弹窗的内容,添加挂锁成功
+add_point_failed,text,添加隔离点失败的弹窗的内容,新增隔离点失败
+add_point_succeed,text,添加隔离点成功的弹窗的内容,新增隔离点成功
+add_rfid_token_failed,text,添加RFID失败的弹窗的内容,添加RFID标签失败
+add_rfid_token_succeed,text,添加RFID成功的弹窗的内容,添加RFID标签成功
+add_role_failed,text,添加角色失败的弹窗的内容,新增角色失败
+add_role_succeed,text,添加角色成功的弹窗的内容,新增角色成功
+add_user_succeed,text,添加用户成功的弹窗的内容,新增用户成功
+add_workstation_failed,text,添加区域失败的弹窗的内容,新增区域失败
+add_workstation_succeed,text,添加区域成功的弹窗的内容,新增区域成功
+admin_role_can_not_edit,text,管理员信息修改的提示内容,管理员角色无法编辑
+admin_username,text,初始化超级管理员时的账号的标题,管理员账号:(数字、字母、6-20位)
+all,text,下拉框的全部文本,全部
+all_hardware_tv,text,首页的全部硬件文本,全部
+硬件
+all_job_tv,text,首页的全部作业文本,全部
+作业
+all_points_tv,text,首页的全部点位文本,全部
+点位
+all_quick_entrance,text,快捷入口的配置弹窗的备选快捷入口的文本,所有快捷入口
+all_select_not_all_select,text,角色添加/修改弹窗中权限菜单选矿的文本,全选/全不选
+already_colock,text,作业执行界面的共锁人员界面的标题文本,已共锁({0})
+already_uncolock,text,作业执行界面的共锁人员界面的标题文本,已解除共锁({0})
+back,text,通用返回文本,返回
+base_info_title,text,作业创建/修改,SOP创建/修改的基本信息标题文本,基本信息
+ble_connect_fail,text,蓝牙连接失败的加载弹窗提示文本,连接失败,请重试!
+ble_connecting,text,蓝牙连接中的加载弹窗的提示文本,连接中,请稍后...
+can_not_remove_current_colocker,text,选择共锁人时只有一个共锁人时移除触发的提示文本,无法移除当前共锁人
+can_not_remove_current_locker,text,选择上锁人时,非选择人员步骤不允许移除上锁人提示文本,无法移除当前上锁人
+cancel,text,通用取消文本,取消
+cancel_countdown,text,提示框的取消倒计时文本,取消({0}秒)
+cancel_exception,text,异常管理详情/异常作业详情界面的按钮文本,取消异常
+cancel_exception_failed,text,取消异常完成之后提示弹窗文本,取消异常失败
+cancel_exception_success,text,取消异常完成之后提示弹窗文本,异常取消成功
+cancel_job,text,作业执行界面的按钮文本,取消作业
+cancel_job_tip,text,取消作业的二次确认弹窗文本,是否确认取消当前作业
+capture_tip_content,text,人脸录入时的提示文本,1. 系统将自动拍摄照片,在拍摄过程中请确保:
+      · 脸部正对摄像头
+      · 保持适当距离,让整个脸部出现在左侧框中
+      · 光线充足
+      · 表情自然
+2. 拍摄完成后,您可以点击确认按钮进行提交,也可以点击重拍按钮重新进行拍摄。
+3. 取消录入,请点击取消按钮
+capture_tip_title,text,录入人脸时的标题文本,录入提示
+card_already_registration,text,卡片录入时已存在卡片保存是的错误文本,卡片已录入
+card_code,text,卡片管理表头文本,卡片名称
+card_login,text,登录界面的刷卡登录文本,刷卡登录
+card_manage_card_detail_title,text,卡片管理表头文本,卡片详情
+card_manage_delete_failed,text,卡片管理删除卡片失败时的提示弹窗文本,卡片删除失败
+card_manage_delete_succeed,text,卡片管理删除卡片成功时的提示弹窗文本,卡片删除成功
+card_manage_new_card_title,text,添加卡片弹窗的标题文本,新增卡片
+card_manage_title,text,卡片管理界面的标题文本,卡片管理
+card_nfc,text,卡片管理表头文本,卡片 NFC
+change_to_standard,text,设置远程服务地址时的切换版本按钮文本,切换标准版
+check_before_unlocking,text,八大步骤(玛氏)的步骤流程名称,检查使用,取锁前检查
+check_delete_card,text,删除卡片时的二次确认弹窗文本,确定要删除选中的卡片吗?
+check_delete_job,text,删除作业时的二次确认弹窗文本,您确认要删除作业吗
+check_delete_key,text,删除钥匙时的二次确认弹窗文本,您确定要删除选中的钥匙吗
+check_delete_lock,text,删除挂锁时的二次确认弹窗文本,确定要删除选中的挂锁吗?
+check_delete_point,text,删除隔离点时的二次确认弹窗文本,您确定要删除隔离点吗
+check_delete_rfid_token,text,删除RFID标签时的二次确认弹窗文本,确定要删除选中的RFID标签吗?
+check_delete_role,text,删除角色时的二次确认弹窗文本,您确认要删除角色吗
+check_delete_sop,text,删除SOP时的二次确认弹窗文本,您确定要删除选中的SOP吗
+check_delete_user,text,删除用户时的二次确认弹窗文本,您确认要删除用户吗?
+check_delete_workflow_mode,text,删除流程模式时的二次确认弹窗文本,确定要删除选中的流程模式吗
+check_delete_workstation,text,删除区域时的二次确认弹窗文本,您确定要删除区域"{0}"吗
+check_device_info,text,初始化界面检测硬件完成之后的检测信息结果文本,检测到未注册钥匙{0}把,未注册挂锁{1}把
+check_key_and_lock,text,初始化界面检测硬件时的文本,正在检查钥匙和挂锁
+check_lock_is_new_device,text,仓位管理检查挂锁的加载弹窗的文本,检查挂锁是否为新硬件
+check_new_key_need_register,text,仓位管理检测到新钥匙是否注册的提示弹窗的文本,检测到新钥匙,是否注册
+check_new_lock_need_register,text,仓位管理检测到新挂锁是否注册的提示弹窗的文本,检测到新挂锁,是否注册
+close,text,通用关闭文本,关闭
+colock,text,流程模式设置,步骤功能显示,共锁
+colock_complete,text,作业执行界面添加共锁完成弹窗的文本,添加共锁完成
+colock_failed,text,作业执行界面添加共锁失败弹窗的文本,添加共锁失败
+colocker,text,通用共锁人文本,共锁人
+confirm,text,通用确认文本,确定
+confirm_cancel_exception,text,取消异常时的二次确认弹窗文本,是否确认取消异常
+confirm_create_lock_job,text,解锁-上锁任务,完成解锁步骤之后,处理异常之后的提示弹窗文本,确认是否创建上锁作业
+confirm_create_unlock_job,text,上锁-解锁任务,完成上锁步骤之后,处理异常之后的提示弹窗文本,是否创建解锁作业
+confirm_handle_exception,text,处理异常时的二次确认弹窗文本,是否确认处理异常
+confirm_to_colock,text,共锁人添加共锁时的弹窗确认文本,{0}是否确认共锁?
+confirm_to_uncolock,text,共锁人解除共锁时的弹窗确认文本,{0}是否确认解除共锁?
+continue_the_ticket,text,作业票未完成归还钥匙之后,如果不强制上传数据的提示文本,请继续完成作业票
+create_job_failed,text,处理异常之后新建作业创建时创建失败的弹窗文本,创建作业失败
+create_job_name,text,创建作业/编辑作业的基本信息中的作业名称文本,作业名称
+create_job_title,text,新建作业的标题文本,新建作业
+create_sop_job_sop,text,新建SOP作业选择Sop文本,SOP
+create_sop_job_tip,text,保存并执行作业时的二次确认弹窗,确定要执行作业"{0}"吗?
+create_sop_job_title,text,新建SOP作业标题,新建SOP作业
+create_sop_name,text,新建SOP的sop名称文本,SOP名称
+create_sop_title,text,新建SOP的标题,新建SOP
+current_job_has_cross_job,text,处理异常时的交叉作业警告弹窗,警告!当前作业存在交叉作业,是否继续处理异常
+current_role_no_user,text,流程模式编辑确认方式角色确认时,如果选择的角色无用户时提示,当前角色暂无用户
+current_slot_has_no_key,text,仓位管理检查钥匙时如果仓内没有钥匙时弹窗提示,当前仓位不存在钥匙
+current_slot_has_no_lock,text,仓位管理检查挂锁时如果仓内没有挂锁时弹窗提示,当前仓位不存在挂锁
+current_sop_has_job_in_progress,text,删除sop作业时如果存在关联作业弹窗提示文本,当前SOP存在进行中的作业
+current_ticket_report_lock_take_exception_tip,text,挂锁取出时,如果作业异常提示文本,当前作业挂锁上报异常,请归还挂锁
+current_user_has_not_face_data,text,选择人员界面,如果头像为空时点击提示,当前用户不存在人脸数据
+current_workflow_mode_error,text,进行流程模式设置界面,如果流程模式数据获取异常时提示,当前流程模式错误
+currently_no_hardware_can_be_report,text,异常上报,类型为硬件异常但是没有硬件数据时提示,当前没有硬件可以上报
+currently_no_job_can_be_report,text,异常上报,类型为作业异常但是没有作业数据时提示,当前没有作业可以上报
+currently_unable_to_lock_together,text,作业执行界面,如果步骤未在共锁步骤,刷卡提示,当前阶段无法共锁
+data_content_error,text,导入流程模式时如果解密之后的内容转换异常时提示,数据内容错误
+data_decrypt_failed,text,导入流程模式时如果数据解密失败时提示,数据解密失败
+data_file_is_corrupted,text,导入流程模式时如果数据文件的校验码错误时提示,数据文件已损坏
+data_file_not_exists,text,导入流程模式时如果数据文件不存在时提示,数据文件不存在
+date,text,时间范围选择弹窗格式,{0}年{1}月{2}日
+delete,text,通用删除文本,删除
+delete_group,text,选择点位的时候的分组删除的按钮,删除分组
+delete_success,text,流程模式和指纹删除成功的弹窗文本,删除成功
+detail,text,通用表头文本,详情
+detect_face_tip,text,人脸录入时检测到人脸的提示文本,检测到人脸,即将拍摄
+detect_port,text,仓位管理进入的加载文本,正在扫描设备......
+detect_slot,text,仓位管理的检测按钮文本,检测仓位
+device_in_detect,text,初始化硬件的时候的识别中提示文本,设备识别中
+do_you_want_to_remove_exception,text,仓位管理长按移除异常的二次确认弹窗文本,是否确认移除该异常
+doing_checking,text,步骤确认验证人脸时的加载提示文本,正在验证......
+doing_login,text,登录时的加载提示文本,正在登录······
+done_header,text,我的待办的tab文本,已处理
+edit,text,通用编辑文本,编辑
+edit_job_title,text,编辑作业的标题文本,作业详情
+edit_sop_job_title,text,编辑SOP作业的标题文本,SOP作业详情
+edit_sop_title,text,编辑SOP的标题文本,SOP详情
+end,text,选择时间范围的结束时间的文本,结束
+end_job,text,作业执行界面的按钮文本,结束作业
+end_time,text,首页的时间范围的文本,结束时间
+ensure_power_isolation,text,八大步骤(玛氏)的步骤流程名称,检查使用,能量隔离证实
+error_date_range_invalid,text,时间范围选择时的检查提示文本,开始时间不能晚于结束时间
+exception_data_not_exists,text,处理异常时,异常数据不存在的提示弹窗文本,异常数据不存在
+exception_description,text,异常管理详情的表头,异常描述:
+exception_description_tv,text,异常上报的内容标题,异常描述
+exception_detail_title,text,异常管理详情的标题,异常详情
+exception_info,text,异常管理详情的的表头,异常信息
+exception_job,text,异常作业的详情的表头,异常作业:
+exception_job_title,text,异常作业的标题,异常作业
+exception_lost,text,异常作业的数据不存在的情况下提示,异常丢失
+exception_manage_title,text,异常管理的标题,异常管理
+exception_occurrence_time,text,异常管理详情的表头,异常发生时间:
+exception_occurrence_time_header,text,异常管理的表头,发生时间
+exception_reason,text,仓位管理异常上报的弹窗信息,异常信息
+exception_release_time,text,异常管理详情的表头,异常解除时间:
+exception_report,text,仓位异常上报和异常上报的标题,异常上报
+exception_report_success,text,异常上报成功之后的弹窗提示,异常上报成功
+exception_reporter,text,异常管理详情的表头,上报人:
+exception_source,text,异常管理详情的表头,异常源:
+exception_source_tv,text,异常上报的内容标题,异常源
+exception_status,text,异常管理详情的表头,状态:
+exception_status_header,text,异常管理的表头,异常状态
+exception_type,text,异常管理详情的表头,异常类型:
+exception_type_header,text,异常管理列表的表头,异常类型
+exception_type_tv,text,异常上报的内容标题,异常类型
+expand_collapse,text,添加/修改角色的权限树的操作文本,展开/折叠
+face_can_not_process,text,虹软初始化失败时的提示文本,人脸引擎激活失败,识别暂不可用
+face_detected_do_login,text,人脸登录的加载窗提示文本,检测到人脸,正在登录······
+face_login,text,登录界面的人脸登录文本,人脸登录
+face_login_failed,text,人脸登录失败时的提示文本,人脸匹配失败,请重试
+face_login_success,text,人脸登录成功时的提示文本,人脸验证通过
+face_not_set_tip,text,用户信息的人脸设置界面未设置人脸的显示文本,您尚未设置人脸数据
+face_set_tip,text,用户信息的人脸设置界面已设置人脸的显示文本,您已设置了人脸数据
+file_not_exists,text,流程模式导入时如果指定文件不存在时提示,文件不存在
+filter,text,通用筛选文本,筛选
+fingerprint_add_success_tip,text,指纹添加成功时的弹窗文本,已成功添加指纹数据
+fingerprint_code,text,指纹列表的表头,指纹编号
+fingerprint_code_str,text,指纹列表的数据前缀,指纹_{0}
+fingerprint_delete_confirm_tip,text,指纹列表指纹项删除指纹的二次确认弹窗文本,确定要删除{0}吗?
+fingerprint_delete_selected_confirm_tip,text,指纹列表删除指纹的二次确认弹窗文本,确定要删除选中的指纹吗?
+fingerprint_login,text,登录界面的指纹登录文本,指纹登录
+fingerprint_login_failed,text,登录界面的指纹登录失败提示文本 ,指纹识别失败,请重试
+fingerprint_login_success,text,登录界面的指纹登录成功提示文本,指纹验证通过
+fingerprint_scan_tip,text,录入指纹时的提示录入提示文本,请连续按压{0}次指纹识别区
+finish_job_tip,text,作业执行界面结束作业的二次确认弹窗文本,是否确认结束当前作业
+finish_the_job,text,作业执行界面的结束作业按钮文本,结束作业
+get_key_info_fail,text,钥匙数据获取失败时的提示文本,获取钥匙信息失败
+go_locking,text,作业执行界面的去上锁按钮文本,去上锁
+go_unlocking,text,作业执行界面的去解锁按钮文本,去解锁
+group_at_least_has_one_point,text,选择点位确认按钮检查分组点位的错误提示文本,每个分组至少需要存在一个点位
+group_job_in_progress,text,分组已经获取钥匙未归还的情况再次点击的提示文本,分组作业进行中
+group_name_must_not_empty,text,选择点位分组名称为空时保存的错误提示文本,分组名称不能为空
+handle,text,我的待办的处理按钮文本,处理
+handle_colock,text,我的待办处理共锁时的二次确认弹窗文本,请确认是否要进行添加共锁
+handle_exception,text,异常详情和异常作业的处理异常的按钮文本,处理异常
+handle_exception_success,text,异常处理成功的弹窗文本,异常处理成功
+handle_exception_will_release_all_colock,text,异常作业的已经共锁的作业结束时的警告弹窗文本,警告!处理异常将移除所有共锁,请确认是否继续
+handle_failed,text,异常处理失败的弹窗提示文本,处理失败
+handle_lock_take_key,text,我的待办上锁取钥匙时的二次确认弹窗文本,确认获取钥匙进行上锁吗?
+handle_release_colock,text,我的待办的解除共锁时的二次确认弹窗文本,请确认是否要进行解除共锁
+handle_step_confirm,text,我的待办的步骤确认时的二次确认弹窗文本,请确认是否完成[{0}]
+handle_time,text,异常管理详情的表头,处理时间:
+handle_time_custom_time_range,text,我的待办的已处理的时间筛选的选择项文本,自定义区间
+handle_time_last_30_days,text,我的待办的已处理的时间筛选的选择项文本,近30天
+handle_time_last_7_days,text,我的待办的已处理的时间筛选的选择项文本,近7天
+handle_unknown,text,我的待办的处理项类型异常的提示文本,当前处理类型未知,无法处理
+handle_unlock_take_key,text,我的待办解锁取钥匙时的二次确认弹窗文本,确认获取钥匙进行解锁吗?
+hardware_in_use_tv,text,首页使用中的硬件文本,使用中
+的硬件
+hardware_info,text,仓位异常上报的信息展示,硬件信息: {0}
+hardware_key,text,仓位异常上报的硬件类型文本,钥匙
+hardware_lock,text,仓位异常上报的硬件类型文本,挂锁
+hardware_unknown,text,仓位异常上报的硬件类型文本,未知
+has_job_in_progress,text,作业管理删除作业时有作业存在时的弹窗文本,存在正在进行中的作业
+has_locked,text,作业执行界面的点位上锁状态文本,已上锁
+has_user_in_progress_job,text,删除用户时如果关联用户的作业有进行中的时候弹窗文本,有用户在进行的作业中
+home_overview_data_title,text,首页总览数据标题,总览数据
+home_realtime_data_title,text,首页试试数据标题,实时数据
+import_str,text,通用导入文本,导入
+import_success,text,通用导入成功文本,导入成功
+in_progress_job_manage_title,text,进行中的作业的标题,进行中的作业
+init_card_registration_step_hint,text,初始化卡片注册时的提示文本,请在读卡器上刷卡
+init_card_registration_step_tip,text,初始化卡片注册时的标题文本,识别并录入卡片
+init_device_registration_key_and_lock_complete_step_hint,text,初始化硬件的时候的扫描完成的提示文本,扫描完成
+init_device_registration_key_and_lock_step_hint,text,初始化硬件的时候的扫描中的提示文本,请等待系统识别钥匙和挂锁
+init_device_registration_key_and_lock_step_tip,text,初始化硬件的时候的标题文本,识别钥匙和挂锁
+init_point_rfid_registration_step_hint,text,初始化点位注册的时候的提示文本,请在读卡器上刷点位RFID标签
+init_point_rfid_registration_step_tip,text,初始化点位注册的时候的标题文本,识别并录入点位RFID标签
+init_set_admin_account_step,text,初始化设置管理员账号时的步骤序号,1
+init_set_admin_account_step_hint,text,初始化设置管理员账号时的提示文本,请设置管理员账号密码
+init_set_admin_account_step_tip,text,初始化设置管理员账号时的标题文本,设置管理员账号
+init_set_remote_server_step_hint,text,设置远程服务器地址的提示文本,请设置服务器的地址和端口
+init_set_remote_server_step_tip,text,设置远程服务器地市的标题文本,配置服务器
+insert,text,通用新增文本,新增
+invalid_card,text,作业执行界面和我的待办界面的共锁人刷卡时卡片无效的提示文本,卡片无效
+invalid_user,text,作业执行界面和我的待办界面的共锁人刷卡时用户不存在的提示文本,用户不存在
+item_my_todo_complete_time_title,text,我的待办信息的头文本,完成时间:
+item_my_todo_current_operation_title,text,我的待办信息的头文本,当前操作:
+item_my_todo_current_step_title,text,我的待办信息的头文本,当前步骤:
+item_my_todo_job_name_title,text,我的待办信息的头文本,相关作业:
+job_already_finished,text,作业执行界面,收到作业被结束的消息的提示文本,该作业已被结束
+job_canceled,text,作业管理已取消的作业点击提示文本,作业已取消
+job_card_login_failed,text,工卡登录失败的提示文本,工卡无效
+job_card_login_success,text,工卡登录成功的提示文本,工卡识别成功
+job_card_not_set_tip,text,设置工卡界面,还没有设置工卡时的文本信息,您尚未设置工卡
+job_card_scan_tip,text,设置工卡界面,设置工卡的提示文本,请在读卡器上读卡
+job_card_set_tip,text,设置工卡界面,已经设置工卡时的文本信息,您已设置了工卡数据
+job_create_and_execute_failed,text,保存并执行作业失败时的弹窗提示文本,作业执行失败
+job_create_and_execute_succeed,text,保存并执行作业成功时的弹窗提示文本,作业开始执行
+job_create_failed,text,保存作业失败时的弹窗提示文本,作业保存失败
+job_create_succeed,text,保存作业成功时的弹窗提示文本,作业保存成功
+job_execute_colocker_colock_status_title,text,作业执行界面和异常作业界面的共锁人标题,共锁人员共锁状态
+job_execute_lock_status_title,text,作业执行界面和异常作业界面的点位标题,隔离点锁定状态
+job_execute_step_description,text,作业执行界面和异常作业界面的操作说明标题,操作说明({0})
+job_execute_tab_title_colock,text,作业执行界面和异常作业界面的共锁人TAB标题,共锁
+job_execute_tab_title_lock,text,作业执行界面和异常作业界面的点位TAB标题,锁定
+job_execute_title,text,作业执行界面标题,作业执行
+job_finished,text,作业管理的已结束作业点击提示文本,作业已结束
+job_lost,text,作业执行界面的作业数据不存在的文本,作业丢失
+job_manage_delete_failed,text,作业管理删除作业失败时的弹窗提示文本,无法删除选中的作业
+job_manage_delete_succeed,text,作业管理删除作业成功时的弹窗提示文本,删除选中的作业成功
+job_manage_title,text,作业管理标题,作业管理
+job_name,text,作业观猎列表表头,作业名称
+job_save_and_execute_tip,text,保存并执行作业时二次确认弹窗文本,确定要执行作业"{0}"吗?
+job_save_tip,text,保存作业二次确认弹窗文本,确定要保存作业"{0}"吗?
+job_status,text,锁定中的点位表头,作业状态
+job_workstation,text,创建/修改作业的基本信息的文本,作业区域
+key_exception_tag,text,还钥匙的时候如果钥匙异常提示,该钥匙已被标记异常
+key_in_use,text,钥匙管理列表删除钥匙时如果钥匙使用中提示,钥匙正在使用
+key_info_already_exists,text,仓位管理检查钥匙仓位注册时如果钥匙信息已存在提示,钥匙信息已存在
+key_is_in_failure_mode,text,钥匙状态查询为故障的时候输出到日志,钥匙处于故障模式
+key_mac,text,添加钥匙弹窗的信息文本,钥匙MAC
+key_manage_delete_failed,text,钥匙管理删除失败时弹窗文本,钥匙删除失败
+key_manage_delete_succeed,text,钥匙管理删除成功时弹窗文本,钥匙删除成功
+key_manage_key_detail_title,text,钥匙详情标题,钥匙详情
+key_manage_new_key_title,text,新增钥匙标题,新增钥匙
+key_manage_title,text,钥匙管理标题,钥匙管理
+key_name,text,钥匙管理表头,钥匙名称
+key_nfc,text,钥匙管理表头,钥匙NFC
+key_not_exists,text,切换工作模式之后,没有找到钥匙信息时提示,钥匙不存在
+key_return_success,text,钥匙归还之后信息上报成功之后提示,钥匙归还成功
+key_return_tip,text,上报点位信息异常时提示文本,作业票尚未完成,禁止归还钥匙
+key_take_error_tip,text,获取挂锁之后,获取钥匙信息失败时提示,钥匙分配失败,请检查硬件状态
+loading_data,text,通用数据加载弹窗文本,数据加载中
+loading_device,text,仓位管理加载中文本,正在加载硬件......
+loading_msg_get_ticket_status_start,text,开始读取作业票加载中文本,正在读取钥匙作业票
+loading_msg_return_key_start,text,开始连接钥匙加载中文本,开始连接钥匙,请稍候······
+lock,text,流程模式设置,步骤功能显示,上锁
+lock_already_exists,text,仓位管理检查挂锁和挂锁列表添加挂锁信息存在时提示,挂锁信息已存在
+lock_code,text,挂锁列表表头,挂锁编号
+lock_exception_tag,text,还挂锁时挂锁异常提示,该挂锁已被标记异常
+lock_in_use,text,挂锁管理删除挂锁时,如果挂锁使用中提示,挂锁正在使用中
+lock_is_not_enough,text,去上锁是,挂锁数量不足时提示,锁具数量不足
+lock_key_return_tip,text,还钥匙时,如果作业票未完成提示是否强制上传,作业票尚未完成,是否强制上传数据
+lock_manage_delete_failed,text,挂锁删除失败时提示,挂锁删除失败
+lock_manage_delete_succeed,text,挂锁删除成功时提示,挂锁删除成功
+lock_manage_lock_detail_title,text,挂锁详情标题,挂锁详情
+lock_manage_new_lock_title,text,新增挂锁标题,新增挂锁
+lock_manage_title,text,挂锁管理标题,挂锁管理
+lock_name,text,挂锁管理表头,挂锁名称
+lock_nfc,text,挂锁管理表头,挂锁 NFC
+lock_status,text,作业执行界面挂锁信息表头,上锁状态
+lock_take_report_fail,text,挂锁取出上报异常时提示信息,挂锁取出上报失败
+locked_points_title,text,锁定中的点位标题,锁定中的点位
+locked_points_tv,text,首页锁定中的点位文本,锁定中
+的点位
+locker,text,通用上锁人文本,上锁人
+login,text,通用登录文本,登录
+login_tip,text,登录界面提示文本,请输入用户名和密码或者刷卡进行登录
+loto,text,系统主标题,Intelligent Lock Control System
+loto_en,text,系统副标题,Intelligent Lock Control System
+manage_filter_status,text,添加/修改弹窗状态文本,状态
+manage_role_function_permission,text,角色管理功能权限文本,功能权限
+member_info_title,text,人员信息标题,人员信息
+move_down,text,区域管理下移按钮文本,下移
+move_up,text,区域管理上移按钮文本,上移
+my_todo_title,text,我的待办标题,我的待办
+navigate_to_step,text,流程模式设置,步骤功能显示,跳转到第{0}步
+new_device,text,新设备标题文本,New
+new_group,text,选择点位,默认新增分组名称前缀,新分组{0}
+new_password,text,重置密码界面新密码文本,新密码(数字、字母、特殊符号、6-20位)
+new_password_and_repeat_new_password_not_same,text,重置密码界面重复密码校验提示文本,新密码与重复新密码不一致
+new_password_cannot_be_the_same_as_the_old_password,text,重置密码界面新旧密码校验提示文本,新密码与旧密码不能相同
+next,text,初始化界面下一步按钮文本,下一步
+nickname,text,通用姓名文本,姓名
+no_available_key,text,作业执行界面去上锁没有钥匙时弹窗提示文本,暂无可用钥匙
+no_data,text,列表界面没有数据时默认展示信息文本,暂无数据
+no_goto_step,text,流程模式设置,步骤功能显示,无跳转
+no_permission_to_handle,text,作业执行界面,进行操作时权限不通过提示文本,您暂无权限操作当前作业票
+no_response_board_exists,text,硬件通信时响应超时提示文本,存在未响应的主板
+normal,text,通用正常文本,正常
+not_group_can_lock,text,所有分组上锁完成之后点击去上锁按钮提示,当前无分组可上锁
+not_group_can_unlock,text,所有分组解锁完成之后点击去解锁按钮提示,当前无分组可解锁
+not_in_slot,text,仓位管理长按仓位检查硬件不存在时提示,未在仓位
+not_save_tip,text,创建/修改作业,SOP,SOP作业返回时通用确认弹窗文本,数据还没有保存,您确定要放弃保存,离开当前页面吗?
+number,text,仓位异常上报信息文本,编号: 
+old_password,text,重置密码旧密码文本,旧密码
+old_password_error,text,重置密码旧密码校验失败提示以文本,旧密码错误
+one_key_cancel,text,异常管理列表按钮文本,一键取消
+one_key_handle,text,异常管理列表按钮文本,一键处理
+ongoing_job_tv,text,首页进行中的作业文本,进行中
+的作业
+only_one_person_allowed,text,人脸录入时提示文本,请保持单人入镜
+operation,text,列表表头,操作
+password_and_repeat_password_not_same,text,重置密码和初始化设置管理员账号时密码与重复密码不一致时提示文本,密码与重复密码不一致
+password_regex_tip,text,重置密码和初始化设置管理员账号时密码不符合规范提示文本,密码不符合要求
+phone,text,通用电话文本,电话
+please_do_colock,text,作业执行界面提示文本,请共锁人完成共锁
+please_do_uncolock,text,作业执行界面提示文本,请共锁人解除共锁
+please_done_operation,text,作业执行界面点击未完成的非当前步骤时提示,请先完成{0}
+please_go_locking,text,作业执行界面提示文本,请上锁员执行去上锁操作
+please_go_unlocking,text,作业执行界面提示文本,请上锁员执行去解锁操作
+please_input_account,text,输入框提示文本和数据校验错误提示文本,请输入用户名
+please_input_admin_username,text,输入框提示文本和数据校验错误提示文本,请输入管理员账号
+please_input_area,text,输入框提示文本和数据校验错误提示文本,请输入区域
+please_input_card_code,text,输入框提示文本和数据校验错误提示文本,请输入工卡
+please_input_card_nfc,text,输入框提示文本和数据校验错误提示文本,请输入卡片 NFC
+please_input_correct_phone,text,输入框提示文本和数据校验错误提示文本,请输入正确的手机号
+please_input_exception_reason,text,输入框提示文本和数据校验错误提示文本,请输入异常原因
+please_input_job_name,text,输入框提示文本和数据校验错误提示文本,请输入作业名称
+please_input_key_mac,text,输入框提示文本和数据校验错误提示文本,请输入钥匙MAC
+please_input_key_name,text,输入框提示文本和数据校验错误提示文本,请输入钥匙名称
+please_input_key_nfc,text,输入框提示文本和数据校验错误提示文本,请输入钥匙NFC
+please_input_key_word,text,输入框提示文本和数据校验错误提示文本,请输入关键字
+please_input_lock_code,text,输入框提示文本和数据校验错误提示文本,请输入挂锁编号
+please_input_lock_nfc,text,输入框提示文本和数据校验错误提示文本,请输入挂锁 NFC
+please_input_new_password,text,输入框提示文本和数据校验错误提示文本,请输入新密码
+please_input_nickname,text,输入框提示文本和数据校验错误提示文本,请输入姓名
+please_input_old_password,text,输入框提示文本和数据校验错误提示文本,请输入旧密码
+please_input_password,text,输入框提示文本和数据校验错误提示文本,请输入密码
+please_input_permission_characters,text,输入框提示文本和数据校验错误提示文本,请输入权限字符
+please_input_phone,text,输入框提示文本和数据校验错误提示文本,请输入电话
+please_input_point_function,text,输入框提示文本和数据校验错误提示文本,请输入隔离点作用
+please_input_point_name,text,输入框提示文本和数据校验错误提示文本,请输入隔离点名称
+please_input_remark,text,输入框提示文本和数据校验错误提示文本,请输入备注
+please_input_remote_server_address,text,输入框提示文本和数据校验错误提示文本,请输入服务地址
+please_input_repeat_new_password,text,输入框提示文本和数据校验错误提示文本,请重复新密码
+please_input_repeat_password,text,输入框提示文本和数据校验错误提示文本,请输入重复密码
+please_input_rfid,text,输入框提示文本和数据校验错误提示文本,请输入 RFID 标签
+please_input_rfid_code,text,输入框提示文本和数据校验错误提示文本,请输入 RFID 编号
+please_input_rfid_tag,text,输入框提示文本和数据校验错误提示文本,请输入RFID标签
+please_input_role_name,text,输入框提示文本和数据校验错误提示文本,请输入角色名称
+please_input_sop_name,text,输入框提示文本和数据校验错误提示文本,请输入SOP名称
+please_input_step_description,text,输入框提示文本和数据校验错误提示文本,请输入步骤操作说明
+please_input_step_title,text,输入框提示文本和数据校验错误提示文本,请填写步骤标题
+please_input_step_title_short,text,输入框提示文本和数据校验错误提示文本,请输入步骤标题缩写
+please_input_username,text,输入框提示文本和数据校验错误提示文本,请输入登录名
+please_input_workstation_name,text,输入框提示文本和数据校验错误提示文本,请输入区域名称
+please_must_select_at_least_one_point,text,创建作业,SOP,SOP作业保存时如果分组点位不足时提示,您至少需要添加一个点位
+please_press_fingerprint_again,text,设置指纹时提示,请再次按压指纹
+please_re_press_fingerprint_again,text,设置指纹时如果3次全错误时提示,请重新按压指纹
+please_return_key_after_locking,text,作业执行界面提示文本,请上锁员完成上锁后,归还钥匙
+please_return_key_after_unlocking,text,作业执行界面提示文本,请上锁员完成解锁后,归还钥匙
+please_scan_face,text,登录弹窗提示文本,请刷脸
+please_scan_fingerprint,text,登录弹窗提示文本,请刷指纹
+please_select_area,text,删除区域时未选择区域的提示文本,请选择区域
+please_select_card,text,删除卡片时未选择卡片的提示文本,请选择卡片
+please_select_card_username,text,保存卡片时未选择用户的提示文本,请选择用户名称
+please_select_colocker,text,选择人员界面未选择共锁人时保存提示文本,请选择共锁人
+please_select_exception_description,text,异常上报检查数据时提示文本,请选择异常描述
+please_select_exception_source,text,异常上报检查数据时提示文本,请选择异常源
+please_select_exception_type,text,异常上报检查数据时提示文本,请选择异常类型
+please_select_flow_mode,text,选择提示文本和数据校验错误提示文本,请选择流程模式
+please_select_group,text,去上锁选择标题,请选择分组
+please_select_handle_time,text,我的待办已处理时间选择提示文本,请选择处理时间
+please_select_job,text,作业管理删除作业未选择提示文本,请选择作业
+please_select_job_workstation,text,选择提示文本和数据校验错误提示文本,请选择作业区域
+please_select_key,text,钥匙管理删除钥匙未选择提示文本,请选择钥匙
+please_select_lock,text,挂锁管理删除挂锁未选择提示文本,请选择挂锁
+please_select_locker,text,选择人员确认数据时未选择上锁人提示,请选择上锁人
+please_select_member,text,作业执行界面提示文本,您可以选择添加人员
+please_select_point,text,选择点位确认数据时未选择点位提示,请选择隔离点
+please_select_power_type,text,添加点位时能量源提示文本和未选择提示文本,请选择能量源
+please_select_process_application,text,异常上报时处理申请提示文本和未选择提示文本,请选择处理申请
+please_select_rfid_token,text,添加更新点位数据时rfid未选择提示和提示文本,请选择RFID标签
+please_select_role,text,添加修改用户时未选择角色文本和选择提示文本,请选择角色
+please_select_sop,text,创建修改SOP作业时的提示文本和未选择提示文本,请选择SOP
+please_select_sop_workstation,text,创建修改SOP作业时的提示文本和未选择提示文本,请选择SOP区域
+please_select_start_time,text,首页点击结束时间未选择开始时间时提示文本,请先选择开始时间
+please_select_status,text,添加用户时未选择状态时提示,请选择状态
+please_select_step_confirm_member,text,流程模式设置,确认数据时提示,请选择执行确认人员
+please_select_step_confirm_role,text,流程模式设置,确认数据时提示,请选择执行确认角色
+please_select_step_confirm_type,text,流程模式设置,确认数据时提示,请选择执行确认方式
+please_select_user,text,用户管理删除用户未选择时提示,请选择用户
+please_select_workflow_mode,text,创建作业,SOP时未选择流程模式提示,请选择流程模式
+please_select_workstation,text,创建作业,SOP时未选择区域提示,请选择区域
+please_swipe_card,text,登录弹窗提示文本,请刷卡
+please_take_out_ready_device_first,text,同一个作业去上锁还未取出设备,再次上锁时提示,请先取出已开卡扣的设备
+please_wait_ticket_name_lock_complete,text,交叉点位存在上锁时,有任务要去解锁时提示,请等待[{0}]上锁完成
+point_detail,text,我的待办点位明细按钮文本,点位明细
+point_in_use,text,点位删除时检查,点位使用中提示,点位正在使用无法修改
+point_info_title,text,点位信息标题文本,点位信息
+point_list_title,text,点位选择界面标题,点位清单
+point_manage_add_title,text,点位管理添加点位标题,添加点位
+point_manage_delete_failed,text,点位管理删除失败时提示,无法删除隔离点
+point_manage_delete_succeed,text,点位管理删除成功时提示,隔离点删除成功
+point_manage_point_function,text,点位管理隔离点作用表头,隔离点作用
+point_manage_point_group,text,作业执行界面点位表头,分组名称
+point_manage_point_name,text,添加更新筛选点位显示文本,隔离点名称
+point_manage_point_power_type,text,添加更新筛选点位显示文本,能量源
+point_manage_rfid,text,添加更新筛选点位显示文本,RFID
+point_manage_rfid_tag,text,添加更新筛选点位显示文本,RFID 标签
+point_manage_title,text,点位管理标题,点位管理
+point_manage_update_title,text,修改点位标题,修改点位
+point_manage_workstation,text,添加更新筛选点位显示文本,区域
+point_name_tv,text,添加更新筛选点位显示文本,隔离点
+power_isolation_way,text,添加更新筛选点位显示文本,确认隔离方式
+preset_workflow_can_not_delete,text,删除流程模式时如果流程模式时预设弹窗提示文本,预设流程模式无法删除
+previous,text,初始化界面上一步按钮我文本,上一步
+process_application_tv,text,异常上报显示文本,处理申请
+quick_entrance_most_set_tip,text,快捷入口配置提示文本,快捷入口最多设置8个
+quick_entrance_title,text,快捷入口配置弹窗标题,快捷入口配置
+re_recognize,text,捕捉人脸按钮文本,重新识别
+real_person_verification_required,text,捕捉人脸提示文本,请保持真人操作
+recapture,text,捕捉人脸按钮文本,重拍
+recognize_work_content,text,八大步骤(玛氏)的步骤流程名称,检查使用,识别工作内容
+recognized_card_rfid,text,初始化注册卡片表头,已识别的卡片RFID
+recognized_point_rfid,text,初始化注册RFID表头,已识别的点位RFID
+reduce_colocker,text,流程模式设置,步骤功能显示,减少共锁人({0})
+register_failed,text,仓位管理注册硬件失败时弹窗文本,注册失败
+register_success,text,仓位管理注册硬件成功时弹窗文本,注册成功
+release_colocker,text,流程模式设置,步骤标题,解除共锁
+remark,text,通用备注文本,备注
+repeat_new_password,text,重置密码界面,重新密码显示文本,重复新密码(数字、字母、特殊符号、6-20位)
+repeat_password,text,初始化管理员界面,重复密码显示文本,重复密码:(数字、字母、特殊符号、6-20位)
+reset,text,通用重置文本,重置
+reset_data_tv,text,设置人脸和设置工卡,重新设置按钮文本,点击重设
+reset_password_title,text,重置密码标题,重置密码
+reset_user_password_failed,text,重置密码失败弹窗提示文本,用户密码重置失败
+reset_user_password_succeed,text,重置密码成功弹窗提示文本,用户密码重置成功
+restart_app_after_set,text,设置远程地址完成之后自动重启提示,App将在设置完成后重启
+rfid,text,添加RFID显示文本,RFID 标签
+rfid_already_bind,text,添加点位时如果RFID已被绑定是弹窗显示,该Rfid标签已被绑定
+rfid_already_registration,text,初始化注册RFID,添加修改RFID时如果RFID已存在提示文本,RFID标签已录入
+rfid_code,text,RFID列表表头,RFID 编号
+rfid_in_use,text,修改RFID时如果RFID使用中无法进行修改提示,RFID标签使用中,无法修改
+rfid_name,text,RFID列表表头,RFID编号
+rfid_token_manage_delete_failed,text,删除RFID失败时提示,RFID标签删除失败
+rfid_token_manage_delete_succeed,text,删除RFID成功时提示,RFID标签删除成功
+rfid_token_manage_new_rfid_token_title,text,新增RFID标题,新增 RFID 标签
+rfid_token_manage_rfid_token_detail_title,text,修改RFID标题,RFID标签详情
+rfid_token_manage_title,text,RFID管理标题,RFID管理
+role_in_preset_tip,text,删除预设角色时检查是否是预设角色,是的话无法删除提示,预设角色不允许删除
+role_in_use,text,删除角色时检查角色是否使用中,是的话提示,角色已有作业在使用
+role_key_already_exists,text,添加角色时重复角色权限字符检测提示,该角色权限字符已存在
+role_manage_add_title,text,添加角色标题,添加角色
+role_manage_delete_failed,text,删除角色失败时提示,无法删除角色
+role_manage_delete_succeed,text,角色删除成功时提示,角色已删除
+role_manage_permission_string,text,权限字符显示文本,权限字符
+role_manage_role_name,text,角色名称显示文本,角色名称
+role_manage_role_num,text,角色编号显示文本,角色编号
+role_manage_title,text,角色管理标题,角色管理
+save,text,通用保存文本,保存
+save_and_execute,text,通用保存并执行文本,保存并执行
+save_sop_check,text,生成SOP选择框文本,生成SOP
+save_success,text,保存成功通用显示文本,保存成功!
+scan_complete_app_restarting,text,自动扫描串口完成之后自动重启提示,扫描完成,APP将自动重启
+select,text,通用选择文本,选择
+select_colocker_tip,text,选择人员界面选择共锁人提示文本,请在以下人员中选择共锁人
+select_coloker,text,选择人员界面未选择共锁人确认时提示文本,请选择共锁人
+select_group_tip,text,选择点位界面的分组选择操作提示文本,点击分组空白区域进行选中
+select_locker,text,选择人员界面未选择上锁人确认时提示文本,选择上锁人
+select_locker_tip,text,选择人员界面选择上锁人提示文本,请在以下人员中选择[{0}]上锁人
+select_member_title,text,选择人员标题,选择人员
+select_point_title,text,选择点位标题,选择点位
+selected_point_already_in_use,text,删除点位时,检查到存在使用中的点位是提示,存在使用中的点位
+selected_point_info_title,text,默认分组名称,已选择的点位信息
+selected_quick_entrance,text,快捷入口弹窗界面,已选择的标题提示文本,已配置的快捷入口(最多添加8个快捷入口,可拖拽排序)
+selected_rfid_in_use,text,删除RFID时检查到存在使用中的RFID时提示,存在正在使用的RFID标签
+send_ticket_fail,text,作业票下发失败时提示文本,作业票下发失败
+sending_ticket,text,作业票下发中加载弹窗文本,工作票下发中······
+server_address,text,设置服务器地址显示文本,服务地址
+server_address_error,text,设置服务器地址,服务器地址错误提示文本,服务器地址错误
+set_colocker,text,流程模式设置,功能菜单显示,设置共锁人
+set_data_tv,text,设置人脸和设置工卡,未设置时按钮文本,点击设置
+set_face_title,text,设置人脸标题,设置人脸
+set_fingerprint_title,text,设置指纹标题,设置指纹
+set_job_card_title,text,设置工卡标题,设置工卡
+set_locker,text,流程模式设置,功能菜单显示,设置上锁人
+set_password,text,初始化设置管理员,设置密码文本显示,设置密码:(数字、字母、特殊符号、6-20位)
+settings,text,通用设置文本,设置
+show_member_when_selected_sop,text,创建SOP作业人员信息展示区域提示,选择SOP后,将自动展示SOP的人员信息。
+show_points_when_selected_sop,text,创建SOP作业点位信息展示区域提示,选择SOP后,将自动展示SOP的点位信息。
+shutdown,text,八大步骤(玛氏)的步骤流程名称,检查使用,操作停机
+ski_step,text,初始化工卡,按钮文本,跳过该步骤
+skip_and_complete,text,初始化RFId,按钮文本,跳过并完成
+slot_exception_tag,text,归还钥匙时检查锁仓异常时提示,该锁仓已被标记异常
+slots_exception_report,text,锁仓异常上报标题,仓位异常上报
+slots_manage_title,text,仓位管理标题,仓位管理
+sop_create_failed,text,SOP创建失败时弹窗文本,SOP创建失败
+sop_create_succeed,text,SOP创建成功时弹窗文本,SOP创建成功
+sop_job_save_and_execute_failed,text,SOP执行失败时弹窗文本,SOP作业执行失败
+sop_job_save_and_execute_succeed,text,SOP执行成功时弹窗文本,SOP作业开始执行
+sop_job_save_failed,text,SOP保存失败时弹窗文本,SOP作业保存失败
+sop_job_save_succeed,text,SOP保存成功时弹窗文本,SOP作业保存成功
+sop_manage_delete_failed,text,删除SOP时检查是否有正在进行中的作业管理,存在时提示,无法删除选中的SOP
+sop_manage_delete_succeed,text,删除选中的SOP成功时弹窗文本,删除选中的SOP成功
+sop_manage_sop_name,text,SOP列表表头,SOP名称
+sop_manage_title,text,SOP管理标题,SOP管理
+sop_manage_workstation,text,SOP管理表头,所属岗位
+sop_save_failed,text,SOP保存失败时弹窗文本,SOP保存失败
+sop_save_succeed,text,SOP保存成功时弹窗文本,SOP保存成功
+sop_save_tip,text,SOP保存时二次确认弹窗文本,确定要保存"{0}"吗?
+sop_workstation,text,创建修改SOP作业界面SOP区域选择文本,SOP区域
+start,text,初始化欢迎界面开始按钮文本,开始
+start_detect_key_slot,text,仓位管理检测钥匙仓位开始时加载弹窗文本,开始检测钥匙仓位
+start_detect_lock_slot,text,仓位管理检测挂锁仓位开始时加载弹窗文本,开始检测挂锁仓位
+start_scan_key_mac,text,仓位管理检测钥匙仓位获取钥匙信息时加载弹窗文本,开始扫描钥匙信息
+start_time,text,首页时间范围开始时间,开始时间
+end_time_must_large_then_start_time,text,选择开始时间和结束时间时判断两个时间的大小提示文本,结束时间必须大于开始时间
+start_tip,text,初始化欢迎界面提示文本,根据提示对系统进行初始化
+start_to_send_ticket,text,开始下发工作票加载弹窗文本,开始下发工作票······
+status,text,通用状态文本,状态
+step_confirm_failed,text,作业执行界面步骤确认失败提示文本,步骤确认失败
+take_out_key,text,作业票下发完成之后加载弹窗显示文本,请取出钥匙
+take_out_key_tip,text,作业票下发完成之后加载弹窗显示文本,请从打开的钥匙仓取出钥匙
+take_out_lock_tip,text,去上锁发锁之后加载弹窗显示需要获取的钥匙文本,请从打开的锁仓取出锁,还有{0}把待取出
+take_out_rest_locks,text,去上锁发锁之后再次选择分组提示先取出已经打开卡扣的挂锁文本,请取出剩余开启卡扣的挂锁
+tec_support,text,技术支持文本,温州博士安全用品有限公司
+the_verification_file_not_exists,text,流程模式导入时解压文件的校验文件不存在时提示,校验文件不存在
+ticket_data_error,text,获取工作票数据之后数据转换异常时提示,工作票数据损坏
+ticket_get_failed,text,还钥匙之后钥匙连接失败时提示,作业票获取失败
+ticket_lost,text,获取的工作票已经取消或结束时进行判断,作业票不存在
+time_frame_tv,text,首页时间范围显示文本,时间范围
+todo_header,text,我的待办处理中TAB表头,处理中
+turn_off,text,仓位管理开关按钮文本,关
+turn_on,text,仓位管理开关按钮文本,开
+turn_read,text,仓位管理RFID读取按钮文本,读
+uncolock_complete,text,作业执行界面和我的待办界面解除共锁成功时提示,解除共锁成功
+uncolock_failed,text,作业执行界面和我的待办界面解除共锁失败时提示,解除共锁失败
+unlock,text,流程模式设置,步骤文本,解锁
+unlock_and_restore_switch,text,八大步骤(玛氏)的步骤流程名称,检查使用,拆锁恢复开关
+unzip,text,流程模式导入解压文件时加载弹窗显示,解压中……{0}
+update_card_failed,text,修改卡片信息失败时弹窗提示,更新卡片失败
+update_card_succeed,text,修改卡片信息成功时弹窗提示,更新卡片成功
+update_key_failed,text,修改钥匙信息失败时弹窗提示,更新钥匙失败
+update_key_succeed,text,修改钥匙信息成功时弹窗提示,更新钥匙成功
+update_lock_failed,text,修改挂锁信息失败时弹窗提示,更新挂锁失败
+update_lock_succeed,text,修改挂锁信息成功时弹窗提示,更新挂锁成功
+update_point_failed,text,修改点位信息失败时弹窗提示,保存点位失败
+update_point_succeed,text,修改点位信息成功时弹窗提示,保存点位成功
+update_rfid_token_failed,text,修改RFID信息失败时弹窗提示,更新RFID标签失败
+update_rfid_token_succeed,text,修改RFID信息成功时弹窗提示,更新RFID标签成功
+update_role_failed,text,修改角色信息失败时弹窗提示,角色更新失败
+update_role_succeed,text,修改角色信息成功时弹窗提示,角色更新成功
+update_user_failed,text,修改用户信息失败时弹窗提示,用户更新失败
+update_user_succeed,text,修改用户信息成功时弹窗提示,用户更新成功
+update_workstation_failed,text,修改区域信息失败时弹窗提示,更新区域失败
+update_workstation_succeed,text,修改区域信息成功时弹窗提示,更新区域成功
+user_already_exists,text,添加用户,检测用户信息是否存在,存在时提示,用户已存在
+user_info_title,text,个人信息标题,个人信息
+user_manage_area,text,添加修改用户区域文本,区域
+user_manage_card_code,text,添加修改用户工卡文本,工卡
+user_manage_delete_failed,text,删除用户时检查用户是否在进行中的作业,存在则提示无法删除,无法删除用户
+user_manage_delete_succeed,text,用户删除成功时提示,用户已删除
+user_manage_filter_activate,text,用户筛选状态文本,正常
+user_manage_filter_deactivate,text,用户筛选状态文本,停用
+user_manage_filter_title,text,筛选条件标题,筛选条件
+user_manage_new_user_title,text,新增用户标题,新增用户
+user_manage_role,text,添加修改用户角色文本,角色
+user_manage_title,text,用户管理标题,用户管理
+user_manage_user_detail_title,text,用户详情标题,用户详情
+user_manage_view,text,用户管理列表表头,查看
+user_name,text,添加修改用户用户名文本,登录名
+username,text,通用用户名称文本,用户名称
+username_or_password_error,text,账号密码登录时,账号密码错误提示,账号或密码错误
+username_passowrd_login_success,text,账号密码登录成功提示,账号密码验证通过
+username_password_not_exists,text,账号密码登录时,如果账号不存在提示,账号密码不存在
+username_regex_tip,text,初始化管理员账号,账号不符合要求提示,账号不符合要求
+verify_failed,text,登录失败时提示,验证失败
+view,text,通用查看文本,查看
+wait_header,text,我的待办等待中TAB表头,等待中
+wait_to_colock,text,作业执行界面共锁表头,待共锁({0})
+warn,text,通用警告文本,警告
+welcome_tip,text,初始化欢迎界面文本,您好,欢迎您使用
+workflow_already_exists,text,导入流程模式时,流程模式已存在文本提示,流程模式已存在
+workflow_manage_title,text,流程模式管理标题,流程模式管理
+workflow_mode,text,通用流程模式文本,流程模式
+workflow_mode_manage_delete_succeed,text,删除流程模式成功时提示,删除流程模式成功
+workflow_mode_status_update_failed,text,流程模式状态修改失败时提示,状态修改失败
+workflow_mode_status_update_succeed,text,流程模式状态修改成功时提示,状态修改成功
+workflow_name,text,流程模式表头,流程模式名称
+workflow_setting,text,流程模式设置标题,流程设置
+workflow_step_confirm_member,text,流程模式设置项标题,执行确认人员
+workflow_step_confirm_role,text,流程模式设置项标题,执行确认角色
+workflow_step_confirm_type,text,流程模式设置项标题,执行确认方式
+workflow_step_description,text,流程模式设置项标题,步骤操作说明
+workflow_step_function,text,流程模式设置项标题,步骤功能
+workflow_step_title,text,流程模式设置项标题,步骤标题
+workflow_step_title_short,text,流程模式设置项标题,步骤标题缩写
+workstation_already_exists,text,添加区域是检查同级是否已经存在区域,存在时弹窗文本,区域已存在
+workstation_is_in_bottom,text,区域下移时检测是否已经到底部,到底部提示文本,区域已经在底部
+workstation_is_in_top,text,区域上移时检测是否已经到顶部,到顶部提示文本,区域已经在顶部
+workstation_manage_delete_failed,text,区域删除时检查是否有正在使用的作业,有的话提示无法删除,无法删除区域"{0}"
+workstation_manage_delete_succeed,text,区域删除成功时提示,删除区域"{0}"成功
+workstation_manage_new_workstation,text,新增区域标题,新增区域
+workstation_manage_title,text,区域管理标题,区域管理
+workstation_manage_workstation_name,text,新增区域显示文本,区域名称
+you_are_not_locker_tip,text,非上锁人执行上锁/解锁作业时提示文本,您不是上锁人,无法执行此操作
+zone,text,首页区域范围,区域范围
+backup_title,text,备份/还原标题,备份/还原
+backup,text,备份文本,备份
+backup_path,text,备份路径文本,备份路径
+maximum_number_of_backups,text,备份数量上限文本,备份数量上限
+auto_backup,text,自动备份文本,自动备份
+common_enable,text,通用启用文本,启用
+common_disable,text,通用停用文本,停用
+backup_frequency,text,备份频率文本,备份频率
+backup_time,text,备份时间文本,备份时间
+backup_tip,text,备份注意文本,注意:自动备份时必须保证应用处于启动状态。
+backup_now,text,立即备份文本,立即备份
+backup_range,text,备份数量上限提示,范围文本,范围:{0}
+restore,text,还原文本,还原
+common_batch_export,text,通用批量导出文本,批量导出
+common_batch_delete,text,通用批量删除文本,批量删除
+common_export,text,通用导出文本,导出
+MON,text,周一,星期一
+TUE,text,周二,星期二
+WED,text,周三,星期三
+THU,text,周四,星期四
+FRI,text,周五,星期五
+SAT,text,周六,星期六
+SUN,text,周日,星期日
+backup_frequency_every_day,text,备份频率每天,每天
+please_select_backup_frequency,text,选择备份频率提示,请选择备份频率
+maximumNumberOfBackupsNotCorrect,text,备份数量上限不正确提示,请填写正确的备份数量上限
+please_select_time,text,通用选择时间标题,请选择时间
+backup_now_please_wait,text,备份等待文本,正在备份中,请稍等……
+backup_success,text,备份成功文本,备份成功
+backup_failed,text,备份失败文本,备份失败
+delete_backup_file_confirm,text,删除备份提示,是否确认删除该备份,删除后备份无法恢复。
+delete_selected_backup_file_confirm,text,删除选中备份提示,是否确认删除选中备份,删除后备份无法恢复。
+restore_backup_confirm,text,还原备份提醒,还原备份将清除备份日期到当前时间的所有数据,是否确认还原备份?
+restore_backup_success,text,还原备份成功文本,备份还原成功
+export_success,text,通用导出成功,导出成功
+no_backup_data,text,暂无备份数据,暂无备份数据
+loading_backup,text,加载备份中,正在读取备份文件
+max_backup_tip,text,备份达到上限,备份数量已经达到上限,继续备份将移除最老的数据。
+switch,text,切换文本,切换
+backup_restoring,text,备份还原中,备份还原中……

+ 683 - 0
app/src/main/assets/i18n/zh-CN.csv

@@ -0,0 +1,683 @@
+key,type,comment,value
+i18n.language_name,text,语言自称,中文
+abnormal,text,添加修改数据界面的状态的显示文本,异常
+account_login,text,登录界面的账号密码登录的文本,用户名登录
+action_confirm,text,提示弹窗的标题,操作确认
+action_confirm_content,text,点击步骤确认时的消息,确定要执行{0}吗?
+action_failed,text,提示弹窗的标题,操作失败
+action_hint,text,提示弹窗的标题,操作提醒
+action_succeed,text,提示弹窗的标题,操作成功
+add_card_failed,text,提示弹窗的内容,添加卡片失败
+add_card_succeed,text,提示弹窗的内容,添加卡片成功
+add_colocker,text,流程模式设置,步骤功能显示,添加共锁人({0})
+add_group,text,选择点位的时候的分组添加的按钮,添加分组
+add_key_failed,text,添加钥匙失败的弹窗的内容,新增钥匙失败
+add_key_succeed,text,添加钥匙成功的弹窗的内容,新增钥匙成功
+add_lock_failed,text,添加挂锁失败的弹窗的内容,添加挂锁失败
+add_lock_succeed,text,添加挂锁成功的弹窗的内容,添加挂锁成功
+add_point_failed,text,添加隔离点失败的弹窗的内容,新增隔离点失败
+add_point_succeed,text,添加隔离点成功的弹窗的内容,新增隔离点成功
+add_rfid_token_failed,text,添加RFID失败的弹窗的内容,添加RFID标签失败
+add_rfid_token_succeed,text,添加RFID成功的弹窗的内容,添加RFID标签成功
+add_role_failed,text,添加角色失败的弹窗的内容,新增角色失败
+add_role_succeed,text,添加角色成功的弹窗的内容,新增角色成功
+add_user_succeed,text,添加用户成功的弹窗的内容,新增用户成功
+add_workstation_failed,text,添加区域失败的弹窗的内容,新增区域失败
+add_workstation_succeed,text,添加区域成功的弹窗的内容,新增区域成功
+admin_role_can_not_edit,text,管理员信息修改的提示内容,管理员角色无法编辑
+admin_username,text,初始化超级管理员时的账号的标题,管理员账号:(数字、字母、6-20位)
+all,text,下拉框的全部文本,全部
+all_hardware_tv,text,首页的全部硬件文本,全部
+硬件
+all_job_tv,text,首页的全部作业文本,全部
+作业
+all_points_tv,text,首页的全部点位文本,全部
+点位
+all_quick_entrance,text,快捷入口的配置弹窗的备选快捷入口的文本,所有快捷入口
+all_select_not_all_select,text,角色添加/修改弹窗中权限菜单选矿的文本,全选/全不选
+already_colock,text,作业执行界面的共锁人员界面的标题文本,已共锁({0})
+already_uncolock,text,作业执行界面的共锁人员界面的标题文本,已解除共锁({0})
+back,text,通用返回文本,返回
+base_info_title,text,作业创建/修改,SOP创建/修改的基本信息标题文本,基本信息
+ble_connect_fail,text,蓝牙连接失败的加载弹窗提示文本,连接失败,请重试!
+ble_connecting,text,蓝牙连接中的加载弹窗的提示文本,连接中,请稍后...
+can_not_remove_current_colocker,text,选择共锁人时只有一个共锁人时移除触发的提示文本,无法移除当前共锁人
+can_not_remove_current_locker,text,选择上锁人时,非选择人员步骤不允许移除上锁人提示文本,无法移除当前上锁人
+cancel,text,通用取消文本,取消
+cancel_countdown,text,提示框的取消倒计时文本,取消({0}秒)
+cancel_exception,text,异常管理详情/异常作业详情界面的按钮文本,取消异常
+cancel_exception_failed,text,取消异常完成之后提示弹窗文本,取消异常失败
+cancel_exception_success,text,取消异常完成之后提示弹窗文本,异常取消成功
+cancel_job,text,作业执行界面的按钮文本,取消作业
+cancel_job_tip,text,取消作业的二次确认弹窗文本,是否确认取消当前作业
+capture_tip_content,text,人脸录入时的提示文本,1. 系统将自动拍摄照片,在拍摄过程中请确保:
+      · 脸部正对摄像头
+      · 保持适当距离,让整个脸部出现在左侧框中
+      · 光线充足
+      · 表情自然
+2. 拍摄完成后,您可以点击确认按钮进行提交,也可以点击重拍按钮重新进行拍摄。
+3. 取消录入,请点击取消按钮
+capture_tip_title,text,录入人脸时的标题文本,录入提示
+card_already_registration,text,卡片录入时已存在卡片保存是的错误文本,卡片已录入
+card_code,text,卡片管理表头文本,卡片名称
+card_login,text,登录界面的刷卡登录文本,刷卡登录
+card_manage_card_detail_title,text,卡片管理表头文本,卡片详情
+card_manage_delete_failed,text,卡片管理删除卡片失败时的提示弹窗文本,卡片删除失败
+card_manage_delete_succeed,text,卡片管理删除卡片成功时的提示弹窗文本,卡片删除成功
+card_manage_new_card_title,text,添加卡片弹窗的标题文本,新增卡片
+card_manage_title,text,卡片管理界面的标题文本,卡片管理
+card_nfc,text,卡片管理表头文本,卡片 NFC
+change_to_standard,text,设置远程服务地址时的切换版本按钮文本,切换标准版
+check_before_unlocking,text,八大步骤(玛氏)的步骤流程名称,检查使用,取锁前检查
+check_delete_card,text,删除卡片时的二次确认弹窗文本,确定要删除选中的卡片吗?
+check_delete_job,text,删除作业时的二次确认弹窗文本,您确认要删除作业吗
+check_delete_key,text,删除钥匙时的二次确认弹窗文本,您确定要删除选中的钥匙吗
+check_delete_lock,text,删除挂锁时的二次确认弹窗文本,确定要删除选中的挂锁吗?
+check_delete_point,text,删除隔离点时的二次确认弹窗文本,您确定要删除隔离点吗
+check_delete_rfid_token,text,删除RFID标签时的二次确认弹窗文本,确定要删除选中的RFID标签吗?
+check_delete_role,text,删除角色时的二次确认弹窗文本,您确认要删除角色吗
+check_delete_sop,text,删除SOP时的二次确认弹窗文本,您确定要删除选中的SOP吗
+check_delete_user,text,删除用户时的二次确认弹窗文本,您确认要删除用户吗?
+check_delete_workflow_mode,text,删除流程模式时的二次确认弹窗文本,确定要删除选中的流程模式吗
+check_delete_workstation,text,删除区域时的二次确认弹窗文本,您确定要删除区域"{0}"吗
+check_device_info,text,初始化界面检测硬件完成之后的检测信息结果文本,检测到未注册钥匙{0}把,未注册挂锁{1}把
+check_key_and_lock,text,初始化界面检测硬件时的文本,正在检查钥匙和挂锁
+check_lock_is_new_device,text,仓位管理检查挂锁的加载弹窗的文本,检查挂锁是否为新硬件
+check_new_key_need_register,text,仓位管理检测到新钥匙是否注册的提示弹窗的文本,检测到新钥匙,是否注册
+check_new_lock_need_register,text,仓位管理检测到新挂锁是否注册的提示弹窗的文本,检测到新挂锁,是否注册
+close,text,通用关闭文本,关闭
+colock,text,流程模式设置,步骤功能显示,共锁
+colock_complete,text,作业执行界面添加共锁完成弹窗的文本,添加共锁完成
+colock_failed,text,作业执行界面添加共锁失败弹窗的文本,添加共锁失败
+colocker,text,通用共锁人文本,共锁人
+confirm,text,通用确认文本,确定
+confirm_cancel_exception,text,取消异常时的二次确认弹窗文本,是否确认取消异常
+confirm_create_lock_job,text,解锁-上锁任务,完成解锁步骤之后,处理异常之后的提示弹窗文本,确认是否创建上锁作业
+confirm_create_unlock_job,text,上锁-解锁任务,完成上锁步骤之后,处理异常之后的提示弹窗文本,是否创建解锁作业
+confirm_handle_exception,text,处理异常时的二次确认弹窗文本,是否确认处理异常
+confirm_to_colock,text,共锁人添加共锁时的弹窗确认文本,{0}是否确认共锁?
+confirm_to_uncolock,text,共锁人解除共锁时的弹窗确认文本,{0}是否确认解除共锁?
+continue_the_ticket,text,作业票未完成归还钥匙之后,如果不强制上传数据的提示文本,请继续完成作业票
+create_job_failed,text,处理异常之后新建作业创建时创建失败的弹窗文本,创建作业失败
+create_job_name,text,创建作业/编辑作业的基本信息中的作业名称文本,作业名称
+create_job_title,text,新建作业的标题文本,新建作业
+create_sop_job_sop,text,新建SOP作业选择Sop文本,SOP
+create_sop_job_tip,text,保存并执行作业时的二次确认弹窗,确定要执行作业"{0}"吗?
+create_sop_job_title,text,新建SOP作业标题,新建SOP作业
+create_sop_name,text,新建SOP的sop名称文本,SOP名称
+create_sop_title,text,新建SOP的标题,新建SOP
+current_job_has_cross_job,text,处理异常时的交叉作业警告弹窗,警告!当前作业存在交叉作业,是否继续处理异常
+current_role_no_user,text,流程模式编辑确认方式角色确认时,如果选择的角色无用户时提示,当前角色暂无用户
+current_slot_has_no_key,text,仓位管理检查钥匙时如果仓内没有钥匙时弹窗提示,当前仓位不存在钥匙
+current_slot_has_no_lock,text,仓位管理检查挂锁时如果仓内没有挂锁时弹窗提示,当前仓位不存在挂锁
+current_sop_has_job_in_progress,text,删除sop作业时如果存在关联作业弹窗提示文本,当前SOP存在进行中的作业
+current_ticket_report_lock_take_exception_tip,text,挂锁取出时,如果作业异常提示文本,当前作业挂锁上报异常,请归还挂锁
+current_user_has_not_face_data,text,选择人员界面,如果头像为空时点击提示,当前用户不存在人脸数据
+current_workflow_mode_error,text,进行流程模式设置界面,如果流程模式数据获取异常时提示,当前流程模式错误
+currently_no_hardware_can_be_report,text,异常上报,类型为硬件异常但是没有硬件数据时提示,当前没有硬件可以上报
+currently_no_job_can_be_report,text,异常上报,类型为作业异常但是没有作业数据时提示,当前没有作业可以上报
+currently_unable_to_lock_together,text,作业执行界面,如果步骤未在共锁步骤,刷卡提示,当前阶段无法共锁
+data_content_error,text,导入流程模式时如果解密之后的内容转换异常时提示,数据内容错误
+data_decrypt_failed,text,导入流程模式时如果数据解密失败时提示,数据解密失败
+data_file_is_corrupted,text,导入流程模式时如果数据文件的校验码错误时提示,数据文件已损坏
+data_file_not_exists,text,导入流程模式时如果数据文件不存在时提示,数据文件不存在
+date,text,时间范围选择弹窗格式,{0}年{1}月{2}日
+delete,text,通用删除文本,删除
+delete_group,text,选择点位的时候的分组删除的按钮,删除分组
+delete_success,text,流程模式和指纹删除成功的弹窗文本,删除成功
+detail,text,通用表头文本,详情
+detect_face_tip,text,人脸录入时检测到人脸的提示文本,检测到人脸,即将拍摄
+detect_port,text,仓位管理进入的加载文本,正在扫描设备......
+detect_slot,text,仓位管理的检测按钮文本,检测仓位
+device_in_detect,text,初始化硬件的时候的识别中提示文本,设备识别中
+do_you_want_to_remove_exception,text,仓位管理长按移除异常的二次确认弹窗文本,是否确认移除该异常
+doing_checking,text,步骤确认验证人脸时的加载提示文本,正在验证......
+doing_login,text,登录时的加载提示文本,正在登录······
+done_header,text,我的待办的tab文本,已处理
+edit,text,通用编辑文本,编辑
+edit_job_title,text,编辑作业的标题文本,作业详情
+edit_sop_job_title,text,编辑SOP作业的标题文本,SOP作业详情
+edit_sop_title,text,编辑SOP的标题文本,SOP详情
+end,text,选择时间范围的结束时间的文本,结束
+end_job,text,作业执行界面的按钮文本,结束作业
+end_time,text,首页的时间范围的文本,结束时间
+ensure_power_isolation,text,八大步骤(玛氏)的步骤流程名称,检查使用,能量隔离证实
+error_date_range_invalid,text,时间范围选择时的检查提示文本,开始时间不能晚于结束时间
+exception_data_not_exists,text,处理异常时,异常数据不存在的提示弹窗文本,异常数据不存在
+exception_description,text,异常管理详情的表头,异常描述:
+exception_description_tv,text,异常上报的内容标题,异常描述
+exception_detail_title,text,异常管理详情的标题,异常详情
+exception_info,text,异常管理详情的的表头,异常信息
+exception_job,text,异常作业的详情的表头,异常作业:
+exception_job_title,text,异常作业的标题,异常作业
+exception_lost,text,异常作业的数据不存在的情况下提示,异常丢失
+exception_manage_title,text,异常管理的标题,异常管理
+exception_occurrence_time,text,异常管理详情的表头,异常发生时间:
+exception_occurrence_time_header,text,异常管理的表头,发生时间
+exception_reason,text,仓位管理异常上报的弹窗信息,异常信息
+exception_release_time,text,异常管理详情的表头,异常解除时间:
+exception_report,text,仓位异常上报和异常上报的标题,异常上报
+exception_report_success,text,异常上报成功之后的弹窗提示,异常上报成功
+exception_reporter,text,异常管理详情的表头,上报人:
+exception_source,text,异常管理详情的表头,异常源:
+exception_source_tv,text,异常上报的内容标题,异常源
+exception_status,text,异常管理详情的表头,状态:
+exception_status_header,text,异常管理的表头,异常状态
+exception_type,text,异常管理详情的表头,异常类型:
+exception_type_header,text,异常管理列表的表头,异常类型
+exception_type_tv,text,异常上报的内容标题,异常类型
+expand_collapse,text,添加/修改角色的权限树的操作文本,展开/折叠
+face_can_not_process,text,虹软初始化失败时的提示文本,人脸引擎激活失败,识别暂不可用
+face_detected_do_login,text,人脸登录的加载窗提示文本,检测到人脸,正在登录······
+face_login,text,登录界面的人脸登录文本,人脸登录
+face_login_failed,text,人脸登录失败时的提示文本,人脸匹配失败,请重试
+face_login_success,text,人脸登录成功时的提示文本,人脸验证通过
+face_not_set_tip,text,用户信息的人脸设置界面未设置人脸的显示文本,您尚未设置人脸数据
+face_set_tip,text,用户信息的人脸设置界面已设置人脸的显示文本,您已设置了人脸数据
+file_not_exists,text,流程模式导入时如果指定文件不存在时提示,文件不存在
+filter,text,通用筛选文本,筛选
+fingerprint_add_success_tip,text,指纹添加成功时的弹窗文本,已成功添加指纹数据
+fingerprint_code,text,指纹列表的表头,指纹编号
+fingerprint_code_str,text,指纹列表的数据前缀,指纹_{0}
+fingerprint_delete_confirm_tip,text,指纹列表指纹项删除指纹的二次确认弹窗文本,确定要删除{0}吗?
+fingerprint_delete_selected_confirm_tip,text,指纹列表删除指纹的二次确认弹窗文本,确定要删除选中的指纹吗?
+fingerprint_login,text,登录界面的指纹登录文本,指纹登录
+fingerprint_login_failed,text,登录界面的指纹登录失败提示文本 ,指纹识别失败,请重试
+fingerprint_login_success,text,登录界面的指纹登录成功提示文本,指纹验证通过
+fingerprint_scan_tip,text,录入指纹时的提示录入提示文本,请连续按压{0}次指纹识别区
+finish_job_tip,text,作业执行界面结束作业的二次确认弹窗文本,是否确认结束当前作业
+finish_the_job,text,作业执行界面的结束作业按钮文本,结束作业
+get_key_info_fail,text,钥匙数据获取失败时的提示文本,获取钥匙信息失败
+go_locking,text,作业执行界面的去上锁按钮文本,去上锁
+go_unlocking,text,作业执行界面的去解锁按钮文本,去解锁
+group_at_least_has_one_point,text,选择点位确认按钮检查分组点位的错误提示文本,每个分组至少需要存在一个点位
+group_job_in_progress,text,分组已经获取钥匙未归还的情况再次点击的提示文本,分组作业进行中
+group_name_must_not_empty,text,选择点位分组名称为空时保存的错误提示文本,分组名称不能为空
+handle,text,我的待办的处理按钮文本,处理
+handle_colock,text,我的待办处理共锁时的二次确认弹窗文本,请确认是否要进行添加共锁
+handle_exception,text,异常详情和异常作业的处理异常的按钮文本,处理异常
+handle_exception_success,text,异常处理成功的弹窗文本,异常处理成功
+handle_exception_will_release_all_colock,text,异常作业的已经共锁的作业结束时的警告弹窗文本,警告!处理异常将移除所有共锁,请确认是否继续
+handle_failed,text,异常处理失败的弹窗提示文本,处理失败
+handle_lock_take_key,text,我的待办上锁取钥匙时的二次确认弹窗文本,确认获取钥匙进行上锁吗?
+handle_release_colock,text,我的待办的解除共锁时的二次确认弹窗文本,请确认是否要进行解除共锁
+handle_step_confirm,text,我的待办的步骤确认时的二次确认弹窗文本,请确认是否完成[{0}]
+handle_time,text,异常管理详情的表头,处理时间:
+handle_time_custom_time_range,text,我的待办的已处理的时间筛选的选择项文本,自定义区间
+handle_time_last_30_days,text,我的待办的已处理的时间筛选的选择项文本,近30天
+handle_time_last_7_days,text,我的待办的已处理的时间筛选的选择项文本,近7天
+handle_unknown,text,我的待办的处理项类型异常的提示文本,当前处理类型未知,无法处理
+handle_unlock_take_key,text,我的待办解锁取钥匙时的二次确认弹窗文本,确认获取钥匙进行解锁吗?
+hardware_in_use_tv,text,首页使用中的硬件文本,使用中
+的硬件
+hardware_info,text,仓位异常上报的信息展示,硬件信息: {0}
+hardware_key,text,仓位异常上报的硬件类型文本,钥匙
+hardware_lock,text,仓位异常上报的硬件类型文本,挂锁
+hardware_unknown,text,仓位异常上报的硬件类型文本,未知
+has_job_in_progress,text,作业管理删除作业时有作业存在时的弹窗文本,存在正在进行中的作业
+has_locked,text,作业执行界面的点位上锁状态文本,已上锁
+has_user_in_progress_job,text,删除用户时如果关联用户的作业有进行中的时候弹窗文本,有用户在进行的作业中
+home_overview_data_title,text,首页总览数据标题,总览数据
+home_realtime_data_title,text,首页试试数据标题,实时数据
+import_str,text,通用导入文本,导入
+import_success,text,通用导入成功文本,导入成功
+in_progress_job_manage_title,text,进行中的作业的标题,进行中的作业
+init_card_registration_step_hint,text,初始化卡片注册时的提示文本,请在读卡器上刷卡
+init_card_registration_step_tip,text,初始化卡片注册时的标题文本,识别并录入卡片
+init_device_registration_key_and_lock_complete_step_hint,text,初始化硬件的时候的扫描完成的提示文本,扫描完成
+init_device_registration_key_and_lock_step_hint,text,初始化硬件的时候的扫描中的提示文本,请等待系统识别钥匙和挂锁
+init_device_registration_key_and_lock_step_tip,text,初始化硬件的时候的标题文本,识别钥匙和挂锁
+init_point_rfid_registration_step_hint,text,初始化点位注册的时候的提示文本,请在读卡器上刷点位RFID标签
+init_point_rfid_registration_step_tip,text,初始化点位注册的时候的标题文本,识别并录入点位RFID标签
+init_set_admin_account_step,text,初始化设置管理员账号时的步骤序号,1
+init_set_admin_account_step_hint,text,初始化设置管理员账号时的提示文本,请设置管理员账号密码
+init_set_admin_account_step_tip,text,初始化设置管理员账号时的标题文本,设置管理员账号
+init_set_remote_server_step_hint,text,设置远程服务器地址的提示文本,请设置服务器的地址和端口
+init_set_remote_server_step_tip,text,设置远程服务器地市的标题文本,配置服务器
+insert,text,通用新增文本,新增
+invalid_card,text,作业执行界面和我的待办界面的共锁人刷卡时卡片无效的提示文本,卡片无效
+invalid_user,text,作业执行界面和我的待办界面的共锁人刷卡时用户不存在的提示文本,用户不存在
+item_my_todo_complete_time_title,text,我的待办信息的头文本,完成时间:
+item_my_todo_current_operation_title,text,我的待办信息的头文本,当前操作:
+item_my_todo_current_step_title,text,我的待办信息的头文本,当前步骤:
+item_my_todo_job_name_title,text,我的待办信息的头文本,相关作业:
+job_already_finished,text,作业执行界面,收到作业被结束的消息的提示文本,该作业已被结束
+job_canceled,text,作业管理已取消的作业点击提示文本,作业已取消
+job_card_login_failed,text,工卡登录失败的提示文本,工卡无效
+job_card_login_success,text,工卡登录成功的提示文本,工卡识别成功
+job_card_not_set_tip,text,设置工卡界面,还没有设置工卡时的文本信息,您尚未设置工卡
+job_card_scan_tip,text,设置工卡界面,设置工卡的提示文本,请在读卡器上读卡
+job_card_set_tip,text,设置工卡界面,已经设置工卡时的文本信息,您已设置了工卡数据
+job_create_and_execute_failed,text,保存并执行作业失败时的弹窗提示文本,作业执行失败
+job_create_and_execute_succeed,text,保存并执行作业成功时的弹窗提示文本,作业开始执行
+job_create_failed,text,保存作业失败时的弹窗提示文本,作业保存失败
+job_create_succeed,text,保存作业成功时的弹窗提示文本,作业保存成功
+job_execute_colocker_colock_status_title,text,作业执行界面和异常作业界面的共锁人标题,共锁人员共锁状态
+job_execute_lock_status_title,text,作业执行界面和异常作业界面的点位标题,隔离点锁定状态
+job_execute_step_description,text,作业执行界面和异常作业界面的操作说明标题,操作说明({0})
+job_execute_tab_title_colock,text,作业执行界面和异常作业界面的共锁人TAB标题,共锁
+job_execute_tab_title_lock,text,作业执行界面和异常作业界面的点位TAB标题,锁定
+job_execute_title,text,作业执行界面标题,作业执行
+job_finished,text,作业管理的已结束作业点击提示文本,作业已结束
+job_lost,text,作业执行界面的作业数据不存在的文本,作业丢失
+job_manage_delete_failed,text,作业管理删除作业失败时的弹窗提示文本,无法删除选中的作业
+job_manage_delete_succeed,text,作业管理删除作业成功时的弹窗提示文本,删除选中的作业成功
+job_manage_title,text,作业管理标题,作业管理
+job_name,text,作业观猎列表表头,作业名称
+job_save_and_execute_tip,text,保存并执行作业时二次确认弹窗文本,确定要执行作业"{0}"吗?
+job_save_tip,text,保存作业二次确认弹窗文本,确定要保存作业"{0}"吗?
+job_status,text,锁定中的点位表头,作业状态
+job_workstation,text,创建/修改作业的基本信息的文本,作业区域
+key_exception_tag,text,还钥匙的时候如果钥匙异常提示,该钥匙已被标记异常
+key_in_use,text,钥匙管理列表删除钥匙时如果钥匙使用中提示,钥匙正在使用
+key_info_already_exists,text,仓位管理检查钥匙仓位注册时如果钥匙信息已存在提示,钥匙信息已存在
+key_is_in_failure_mode,text,钥匙状态查询为故障的时候输出到日志,钥匙处于故障模式
+key_mac,text,添加钥匙弹窗的信息文本,钥匙MAC
+key_manage_delete_failed,text,钥匙管理删除失败时弹窗文本,钥匙删除失败
+key_manage_delete_succeed,text,钥匙管理删除成功时弹窗文本,钥匙删除成功
+key_manage_key_detail_title,text,钥匙详情标题,钥匙详情
+key_manage_new_key_title,text,新增钥匙标题,新增钥匙
+key_manage_title,text,钥匙管理标题,钥匙管理
+key_name,text,钥匙管理表头,钥匙名称
+key_nfc,text,钥匙管理表头,钥匙NFC
+key_not_exists,text,切换工作模式之后,没有找到钥匙信息时提示,钥匙不存在
+key_return_success,text,钥匙归还之后信息上报成功之后提示,钥匙归还成功
+key_return_tip,text,上报点位信息异常时提示文本,作业票尚未完成,禁止归还钥匙
+key_take_error_tip,text,获取挂锁之后,获取钥匙信息失败时提示,钥匙分配失败,请检查硬件状态
+loading_data,text,通用数据加载弹窗文本,数据加载中
+loading_device,text,仓位管理加载中文本,正在加载硬件......
+loading_msg_get_ticket_status_start,text,开始读取作业票加载中文本,正在读取钥匙作业票
+loading_msg_return_key_start,text,开始连接钥匙加载中文本,开始连接钥匙,请稍候······
+lock,text,流程模式设置,步骤功能显示,上锁
+lock_already_exists,text,仓位管理检查挂锁和挂锁列表添加挂锁信息存在时提示,挂锁信息已存在
+lock_code,text,挂锁列表表头,挂锁编号
+lock_exception_tag,text,还挂锁时挂锁异常提示,该挂锁已被标记异常
+lock_in_use,text,挂锁管理删除挂锁时,如果挂锁使用中提示,挂锁正在使用中
+lock_is_not_enough,text,去上锁是,挂锁数量不足时提示,锁具数量不足
+lock_key_return_tip,text,还钥匙时,如果作业票未完成提示是否强制上传,作业票尚未完成,是否强制上传数据
+lock_manage_delete_failed,text,挂锁删除失败时提示,挂锁删除失败
+lock_manage_delete_succeed,text,挂锁删除成功时提示,挂锁删除成功
+lock_manage_lock_detail_title,text,挂锁详情标题,挂锁详情
+lock_manage_new_lock_title,text,新增挂锁标题,新增挂锁
+lock_manage_title,text,挂锁管理标题,挂锁管理
+lock_name,text,挂锁管理表头,挂锁名称
+lock_nfc,text,挂锁管理表头,挂锁 NFC
+lock_status,text,作业执行界面挂锁信息表头,上锁状态
+lock_take_report_fail,text,挂锁取出上报异常时提示信息,挂锁取出上报失败
+locked_points_title,text,锁定中的点位标题,锁定中的点位
+locked_points_tv,text,首页锁定中的点位文本,锁定中
+的点位
+locker,text,通用上锁人文本,上锁人
+login,text,通用登录文本,登录
+login_tip,text,登录界面提示文本,请输入用户名和密码或者刷卡进行登录
+loto,text,系统主标题,智能锁控系统
+loto_en,text,系统副标题,Intelligent Lock Control System
+manage_filter_status,text,添加/修改弹窗状态文本,状态
+manage_role_function_permission,text,角色管理功能权限文本,功能权限
+member_info_title,text,人员信息标题,人员信息
+move_down,text,区域管理下移按钮文本,下移
+move_up,text,区域管理上移按钮文本,上移
+my_todo_title,text,我的待办标题,我的待办
+navigate_to_step,text,流程模式设置,步骤功能显示,跳转到第{0}步
+new_device,text,新设备标题文本,New
+new_group,text,选择点位,默认新增分组名称前缀,新分组{0}
+new_password,text,重置密码界面新密码文本,新密码(数字、字母、特殊符号、6-20位)
+new_password_and_repeat_new_password_not_same,text,重置密码界面重复密码校验提示文本,新密码与重复新密码不一致
+new_password_cannot_be_the_same_as_the_old_password,text,重置密码界面新旧密码校验提示文本,新密码与旧密码不能相同
+next,text,初始化界面下一步按钮文本,下一步
+nickname,text,通用姓名文本,姓名
+no_available_key,text,作业执行界面去上锁没有钥匙时弹窗提示文本,暂无可用钥匙
+no_data,text,列表界面没有数据时默认展示信息文本,暂无数据
+no_goto_step,text,流程模式设置,步骤功能显示,无跳转
+no_permission_to_handle,text,作业执行界面,进行操作时权限不通过提示文本,您暂无权限操作当前作业票
+no_response_board_exists,text,硬件通信时响应超时提示文本,存在未响应的主板
+normal,text,通用正常文本,正常
+not_group_can_lock,text,所有分组上锁完成之后点击去上锁按钮提示,当前无分组可上锁
+not_group_can_unlock,text,所有分组解锁完成之后点击去解锁按钮提示,当前无分组可解锁
+not_in_slot,text,仓位管理长按仓位检查硬件不存在时提示,未在仓位
+not_save_tip,text,创建/修改作业,SOP,SOP作业返回时通用确认弹窗文本,数据还没有保存,您确定要放弃保存,离开当前页面吗?
+number,text,仓位异常上报信息文本,编号: 
+old_password,text,重置密码旧密码文本,旧密码
+old_password_error,text,重置密码旧密码校验失败提示以文本,旧密码错误
+one_key_cancel,text,异常管理列表按钮文本,一键取消
+one_key_handle,text,异常管理列表按钮文本,一键处理
+ongoing_job_tv,text,首页进行中的作业文本,进行中
+的作业
+only_one_person_allowed,text,人脸录入时提示文本,请保持单人入镜
+operation,text,列表表头,操作
+password_and_repeat_password_not_same,text,重置密码和初始化设置管理员账号时密码与重复密码不一致时提示文本,密码与重复密码不一致
+password_regex_tip,text,重置密码和初始化设置管理员账号时密码不符合规范提示文本,密码不符合要求
+phone,text,通用电话文本,电话
+please_do_colock,text,作业执行界面提示文本,请共锁人完成共锁
+please_do_uncolock,text,作业执行界面提示文本,请共锁人解除共锁
+please_done_operation,text,作业执行界面点击未完成的非当前步骤时提示,请先完成{0}
+please_go_locking,text,作业执行界面提示文本,请上锁员执行去上锁操作
+please_go_unlocking,text,作业执行界面提示文本,请上锁员执行去解锁操作
+please_input_account,text,输入框提示文本和数据校验错误提示文本,请输入用户名
+please_input_admin_username,text,输入框提示文本和数据校验错误提示文本,请输入管理员账号
+please_input_area,text,输入框提示文本和数据校验错误提示文本,请输入区域
+please_input_card_code,text,输入框提示文本和数据校验错误提示文本,请输入工卡
+please_input_card_nfc,text,输入框提示文本和数据校验错误提示文本,请输入卡片 NFC
+please_input_correct_phone,text,输入框提示文本和数据校验错误提示文本,请输入正确的手机号
+please_input_exception_reason,text,输入框提示文本和数据校验错误提示文本,请输入异常原因
+please_input_job_name,text,输入框提示文本和数据校验错误提示文本,请输入作业名称
+please_input_key_mac,text,输入框提示文本和数据校验错误提示文本,请输入钥匙MAC
+please_input_key_name,text,输入框提示文本和数据校验错误提示文本,请输入钥匙名称
+please_input_key_nfc,text,输入框提示文本和数据校验错误提示文本,请输入钥匙NFC
+please_input_key_word,text,输入框提示文本和数据校验错误提示文本,请输入关键字
+please_input_lock_code,text,输入框提示文本和数据校验错误提示文本,请输入挂锁编号
+please_input_lock_nfc,text,输入框提示文本和数据校验错误提示文本,请输入挂锁 NFC
+please_input_new_password,text,输入框提示文本和数据校验错误提示文本,请输入新密码
+please_input_nickname,text,输入框提示文本和数据校验错误提示文本,请输入姓名
+please_input_old_password,text,输入框提示文本和数据校验错误提示文本,请输入旧密码
+please_input_password,text,输入框提示文本和数据校验错误提示文本,请输入密码
+please_input_permission_characters,text,输入框提示文本和数据校验错误提示文本,请输入权限字符
+please_input_phone,text,输入框提示文本和数据校验错误提示文本,请输入电话
+please_input_point_function,text,输入框提示文本和数据校验错误提示文本,请输入隔离点作用
+please_input_point_name,text,输入框提示文本和数据校验错误提示文本,请输入隔离点名称
+please_input_remark,text,输入框提示文本和数据校验错误提示文本,请输入备注
+please_input_remote_server_address,text,输入框提示文本和数据校验错误提示文本,请输入服务地址
+please_input_repeat_new_password,text,输入框提示文本和数据校验错误提示文本,请重复新密码
+please_input_repeat_password,text,输入框提示文本和数据校验错误提示文本,请输入重复密码
+please_input_rfid,text,输入框提示文本和数据校验错误提示文本,请输入 RFID 标签
+please_input_rfid_code,text,输入框提示文本和数据校验错误提示文本,请输入 RFID 编号
+please_input_rfid_tag,text,输入框提示文本和数据校验错误提示文本,请输入RFID标签
+please_input_role_name,text,输入框提示文本和数据校验错误提示文本,请输入角色名称
+please_input_sop_name,text,输入框提示文本和数据校验错误提示文本,请输入SOP名称
+please_input_step_description,text,输入框提示文本和数据校验错误提示文本,请输入步骤操作说明
+please_input_step_title,text,输入框提示文本和数据校验错误提示文本,请填写步骤标题
+please_input_step_title_short,text,输入框提示文本和数据校验错误提示文本,请输入步骤标题缩写
+please_input_username,text,输入框提示文本和数据校验错误提示文本,请输入登录名
+please_input_workstation_name,text,输入框提示文本和数据校验错误提示文本,请输入区域名称
+please_must_select_at_least_one_point,text,创建作业,SOP,SOP作业保存时如果分组点位不足时提示,您至少需要添加一个点位
+please_press_fingerprint_again,text,设置指纹时提示,请再次按压指纹
+please_re_press_fingerprint_again,text,设置指纹时如果3次全错误时提示,请重新按压指纹
+please_return_key_after_locking,text,作业执行界面提示文本,请上锁员完成上锁后,归还钥匙
+please_return_key_after_unlocking,text,作业执行界面提示文本,请上锁员完成解锁后,归还钥匙
+please_scan_face,text,登录弹窗提示文本,请刷脸
+please_scan_fingerprint,text,登录弹窗提示文本,请刷指纹
+please_select_area,text,删除区域时未选择区域的提示文本,请选择区域
+please_select_card,text,删除卡片时未选择卡片的提示文本,请选择卡片
+please_select_card_username,text,保存卡片时未选择用户的提示文本,请选择用户名称
+please_select_colocker,text,选择人员界面未选择共锁人时保存提示文本,请选择共锁人
+please_select_exception_description,text,异常上报检查数据时提示文本,请选择异常描述
+please_select_exception_source,text,异常上报检查数据时提示文本,请选择异常源
+please_select_exception_type,text,异常上报检查数据时提示文本,请选择异常类型
+please_select_flow_mode,text,选择提示文本和数据校验错误提示文本,请选择流程模式
+please_select_group,text,去上锁选择标题,请选择分组
+please_select_handle_time,text,我的待办已处理时间选择提示文本,请选择处理时间
+please_select_job,text,作业管理删除作业未选择提示文本,请选择作业
+please_select_job_workstation,text,选择提示文本和数据校验错误提示文本,请选择作业区域
+please_select_key,text,钥匙管理删除钥匙未选择提示文本,请选择钥匙
+please_select_lock,text,挂锁管理删除挂锁未选择提示文本,请选择挂锁
+please_select_locker,text,选择人员确认数据时未选择上锁人提示,请选择上锁人
+please_select_member,text,作业执行界面提示文本,您可以选择添加人员
+please_select_point,text,选择点位确认数据时未选择点位提示,请选择隔离点
+please_select_power_type,text,添加点位时能量源提示文本和未选择提示文本,请选择能量源
+please_select_process_application,text,异常上报时处理申请提示文本和未选择提示文本,请选择处理申请
+please_select_rfid_token,text,添加更新点位数据时rfid未选择提示和提示文本,请选择RFID标签
+please_select_role,text,添加修改用户时未选择角色文本和选择提示文本,请选择角色
+please_select_sop,text,创建修改SOP作业时的提示文本和未选择提示文本,请选择SOP
+please_select_sop_workstation,text,创建修改SOP作业时的提示文本和未选择提示文本,请选择SOP区域
+please_select_start_time,text,首页点击结束时间未选择开始时间时提示文本,请先选择开始时间
+please_select_status,text,添加用户时未选择状态时提示,请选择状态
+please_select_step_confirm_member,text,流程模式设置,确认数据时提示,请选择执行确认人员
+please_select_step_confirm_role,text,流程模式设置,确认数据时提示,请选择执行确认角色
+please_select_step_confirm_type,text,流程模式设置,确认数据时提示,请选择执行确认方式
+please_select_user,text,用户管理删除用户未选择时提示,请选择用户
+please_select_workflow_mode,text,创建作业,SOP时未选择流程模式提示,请选择流程模式
+please_select_workstation,text,创建作业,SOP时未选择区域提示,请选择区域
+please_swipe_card,text,登录弹窗提示文本,请刷卡
+please_take_out_ready_device_first,text,同一个作业去上锁还未取出设备,再次上锁时提示,请先取出已开卡扣的设备
+please_wait_ticket_name_lock_complete,text,交叉点位存在上锁时,有任务要去解锁时提示,请等待[{0}]上锁完成
+point_detail,text,我的待办点位明细按钮文本,点位明细
+point_in_use,text,点位删除时检查,点位使用中提示,点位正在使用无法修改
+point_info_title,text,点位信息标题文本,点位信息
+point_list_title,text,点位选择界面标题,点位清单
+point_manage_add_title,text,点位管理添加点位标题,添加点位
+point_manage_delete_failed,text,点位管理删除失败时提示,无法删除隔离点
+point_manage_delete_succeed,text,点位管理删除成功时提示,隔离点删除成功
+point_manage_point_function,text,点位管理隔离点作用表头,隔离点作用
+point_manage_point_group,text,作业执行界面点位表头,分组名称
+point_manage_point_name,text,添加更新筛选点位显示文本,隔离点名称
+point_manage_point_power_type,text,添加更新筛选点位显示文本,能量源
+point_manage_rfid,text,添加更新筛选点位显示文本,RFID
+point_manage_rfid_tag,text,添加更新筛选点位显示文本,RFID 标签
+point_manage_title,text,点位管理标题,点位管理
+point_manage_update_title,text,修改点位标题,修改点位
+point_manage_workstation,text,添加更新筛选点位显示文本,区域
+point_name_tv,text,添加更新筛选点位显示文本,隔离点
+power_isolation_way,text,添加更新筛选点位显示文本,确认隔离方式
+preset_workflow_can_not_delete,text,删除流程模式时如果流程模式时预设弹窗提示文本,预设流程模式无法删除
+previous,text,初始化界面上一步按钮我文本,上一步
+process_application_tv,text,异常上报显示文本,处理申请
+quick_entrance_most_set_tip,text,快捷入口配置提示文本,快捷入口最多设置8个
+quick_entrance_title,text,快捷入口配置弹窗标题,快捷入口配置
+re_recognize,text,捕捉人脸按钮文本,重新识别
+real_person_verification_required,text,捕捉人脸提示文本,请保持真人操作
+recapture,text,捕捉人脸按钮文本,重拍
+recognize_work_content,text,八大步骤(玛氏)的步骤流程名称,检查使用,识别工作内容
+recognized_card_rfid,text,初始化注册卡片表头,已识别的卡片RFID
+recognized_point_rfid,text,初始化注册RFID表头,已识别的点位RFID
+reduce_colocker,text,流程模式设置,步骤功能显示,减少共锁人({0})
+register_failed,text,仓位管理注册硬件失败时弹窗文本,注册失败
+register_success,text,仓位管理注册硬件成功时弹窗文本,注册成功
+release_colocker,text,流程模式设置,步骤标题,解除共锁
+remark,text,通用备注文本,备注
+repeat_new_password,text,重置密码界面,重新密码显示文本,重复新密码(数字、字母、特殊符号、6-20位)
+repeat_password,text,初始化管理员界面,重复密码显示文本,重复密码:(数字、字母、特殊符号、6-20位)
+reset,text,通用重置文本,重置
+reset_data_tv,text,设置人脸和设置工卡,重新设置按钮文本,点击重设
+reset_password_title,text,重置密码标题,重置密码
+reset_user_password_failed,text,重置密码失败弹窗提示文本,用户密码重置失败
+reset_user_password_succeed,text,重置密码成功弹窗提示文本,用户密码重置成功
+restart_app_after_set,text,设置远程地址完成之后自动重启提示,App将在设置完成后重启
+rfid,text,添加RFID显示文本,RFID 标签
+rfid_already_bind,text,添加点位时如果RFID已被绑定是弹窗显示,该Rfid标签已被绑定
+rfid_already_registration,text,初始化注册RFID,添加修改RFID时如果RFID已存在提示文本,RFID标签已录入
+rfid_code,text,RFID列表表头,RFID 编号
+rfid_in_use,text,修改RFID时如果RFID使用中无法进行修改提示,RFID标签使用中,无法修改
+rfid_name,text,RFID列表表头,RFID编号
+rfid_token_manage_delete_failed,text,删除RFID失败时提示,RFID标签删除失败
+rfid_token_manage_delete_succeed,text,删除RFID成功时提示,RFID标签删除成功
+rfid_token_manage_new_rfid_token_title,text,新增RFID标题,新增 RFID 标签
+rfid_token_manage_rfid_token_detail_title,text,修改RFID标题,RFID标签详情
+rfid_token_manage_title,text,RFID管理标题,RFID管理
+role_in_preset_tip,text,删除预设角色时检查是否是预设角色,是的话无法删除提示,预设角色不允许删除
+role_in_use,text,删除角色时检查角色是否使用中,是的话提示,角色已有作业在使用
+role_key_already_exists,text,添加角色时重复角色权限字符检测提示,该角色权限字符已存在
+role_manage_add_title,text,添加角色标题,添加角色
+role_manage_delete_failed,text,删除角色失败时提示,无法删除角色
+role_manage_delete_succeed,text,角色删除成功时提示,角色已删除
+role_manage_permission_string,text,权限字符显示文本,权限字符
+role_manage_role_name,text,角色名称显示文本,角色名称
+role_manage_role_num,text,角色编号显示文本,角色编号
+role_manage_title,text,角色管理标题,角色管理
+save,text,通用保存文本,保存
+save_and_execute,text,通用保存并执行文本,保存并执行
+save_sop_check,text,生成SOP选择框文本,生成SOP
+save_success,text,保存成功通用显示文本,保存成功!
+scan_complete_app_restarting,text,自动扫描串口完成之后自动重启提示,扫描完成,APP将自动重启
+select,text,通用选择文本,选择
+select_colocker_tip,text,选择人员界面选择共锁人提示文本,请在以下人员中选择共锁人
+select_coloker,text,选择人员界面未选择共锁人确认时提示文本,请选择共锁人
+select_group_tip,text,选择点位界面的分组选择操作提示文本,点击分组空白区域进行选中
+select_locker,text,选择人员界面未选择上锁人确认时提示文本,选择上锁人
+select_locker_tip,text,选择人员界面选择上锁人提示文本,请在以下人员中选择[{0}]上锁人
+select_member_title,text,选择人员标题,选择人员
+select_point_title,text,选择点位标题,选择点位
+selected_point_already_in_use,text,删除点位时,检查到存在使用中的点位是提示,存在使用中的点位
+selected_point_info_title,text,默认分组名称,已选择的点位信息
+selected_quick_entrance,text,快捷入口弹窗界面,已选择的标题提示文本,已配置的快捷入口(最多添加8个快捷入口,可拖拽排序)
+selected_rfid_in_use,text,删除RFID时检查到存在使用中的RFID时提示,存在正在使用的RFID标签
+send_ticket_fail,text,作业票下发失败时提示文本,作业票下发失败
+sending_ticket,text,作业票下发中加载弹窗文本,工作票下发中······
+server_address,text,设置服务器地址显示文本,服务地址
+server_address_error,text,设置服务器地址,服务器地址错误提示文本,服务器地址错误
+set_colocker,text,流程模式设置,功能菜单显示,设置共锁人
+set_data_tv,text,设置人脸和设置工卡,未设置时按钮文本,点击设置
+set_face_title,text,设置人脸标题,设置人脸
+set_fingerprint_title,text,设置指纹标题,设置指纹
+set_job_card_title,text,设置工卡标题,设置工卡
+set_locker,text,流程模式设置,功能菜单显示,设置上锁人
+set_password,text,初始化设置管理员,设置密码文本显示,设置密码:(数字、字母、特殊符号、6-20位)
+settings,text,通用设置文本,设置
+show_member_when_selected_sop,text,创建SOP作业人员信息展示区域提示,选择SOP后,将自动展示SOP的人员信息。
+show_points_when_selected_sop,text,创建SOP作业点位信息展示区域提示,选择SOP后,将自动展示SOP的点位信息。
+shutdown,text,八大步骤(玛氏)的步骤流程名称,检查使用,操作停机
+ski_step,text,初始化工卡,按钮文本,跳过该步骤
+skip_and_complete,text,初始化RFId,按钮文本,跳过并完成
+slot_exception_tag,text,归还钥匙时检查锁仓异常时提示,该锁仓已被标记异常
+slots_exception_report,text,锁仓异常上报标题,仓位异常上报
+slots_manage_title,text,仓位管理标题,仓位管理
+sop_create_failed,text,SOP创建失败时弹窗文本,SOP创建失败
+sop_create_succeed,text,SOP创建成功时弹窗文本,SOP创建成功
+sop_job_save_and_execute_failed,text,SOP执行失败时弹窗文本,SOP作业执行失败
+sop_job_save_and_execute_succeed,text,SOP执行成功时弹窗文本,SOP作业开始执行
+sop_job_save_failed,text,SOP保存失败时弹窗文本,SOP作业保存失败
+sop_job_save_succeed,text,SOP保存成功时弹窗文本,SOP作业保存成功
+sop_manage_delete_failed,text,删除SOP时检查是否有正在进行中的作业管理,存在时提示,无法删除选中的SOP
+sop_manage_delete_succeed,text,删除选中的SOP成功时弹窗文本,删除选中的SOP成功
+sop_manage_sop_name,text,SOP列表表头,SOP名称
+sop_manage_title,text,SOP管理标题,SOP管理
+sop_manage_workstation,text,SOP管理表头,所属岗位
+sop_save_failed,text,SOP保存失败时弹窗文本,SOP保存失败
+sop_save_succeed,text,SOP保存成功时弹窗文本,SOP保存成功
+sop_save_tip,text,SOP保存时二次确认弹窗文本,确定要保存"{0}"吗?
+sop_workstation,text,创建修改SOP作业界面SOP区域选择文本,SOP区域
+start,text,初始化欢迎界面开始按钮文本,开始
+start_detect_key_slot,text,仓位管理检测钥匙仓位开始时加载弹窗文本,开始检测钥匙仓位
+start_detect_lock_slot,text,仓位管理检测挂锁仓位开始时加载弹窗文本,开始检测挂锁仓位
+start_scan_key_mac,text,仓位管理检测钥匙仓位获取钥匙信息时加载弹窗文本,开始扫描钥匙信息
+start_time,text,首页时间范围开始时间,开始时间
+end_time_must_large_then_start_time,text,选择开始时间和结束时间时判断两个时间的大小提示文本,结束时间必须大于开始时间
+start_tip,text,初始化欢迎界面提示文本,根据提示对系统进行初始化
+start_to_send_ticket,text,开始下发工作票加载弹窗文本,开始下发工作票······
+status,text,通用状态文本,状态
+step_confirm_failed,text,作业执行界面步骤确认失败提示文本,步骤确认失败
+take_out_key,text,作业票下发完成之后加载弹窗显示文本,请取出钥匙
+take_out_key_tip,text,作业票下发完成之后加载弹窗显示文本,请从打开的钥匙仓取出钥匙
+take_out_lock_tip,text,去上锁发锁之后加载弹窗显示需要获取的钥匙文本,请从打开的锁仓取出锁,还有{0}把待取出
+take_out_rest_locks,text,去上锁发锁之后再次选择分组提示先取出已经打开卡扣的挂锁文本,请取出剩余开启卡扣的挂锁
+tec_support,text,技术支持文本,温州博士安全用品有限公司
+the_verification_file_not_exists,text,流程模式导入时解压文件的校验文件不存在时提示,校验文件不存在
+ticket_data_error,text,获取工作票数据之后数据转换异常时提示,工作票数据损坏
+ticket_get_failed,text,还钥匙之后钥匙连接失败时提示,作业票获取失败
+ticket_lost,text,获取的工作票已经取消或结束时进行判断,作业票不存在
+time_frame_tv,text,首页时间范围显示文本,时间范围
+todo_header,text,我的待办处理中TAB表头,处理中
+turn_off,text,仓位管理开关按钮文本,关
+turn_on,text,仓位管理开关按钮文本,开
+turn_read,text,仓位管理RFID读取按钮文本,读
+uncolock_complete,text,作业执行界面和我的待办界面解除共锁成功时提示,解除共锁成功
+uncolock_failed,text,作业执行界面和我的待办界面解除共锁失败时提示,解除共锁失败
+unlock,text,流程模式设置,步骤文本,解锁
+unlock_and_restore_switch,text,八大步骤(玛氏)的步骤流程名称,检查使用,拆锁恢复开关
+unzip,text,流程模式导入解压文件时加载弹窗显示,解压中……{0}
+update_card_failed,text,修改卡片信息失败时弹窗提示,更新卡片失败
+update_card_succeed,text,修改卡片信息成功时弹窗提示,更新卡片成功
+update_key_failed,text,修改钥匙信息失败时弹窗提示,更新钥匙失败
+update_key_succeed,text,修改钥匙信息成功时弹窗提示,更新钥匙成功
+update_lock_failed,text,修改挂锁信息失败时弹窗提示,更新挂锁失败
+update_lock_succeed,text,修改挂锁信息成功时弹窗提示,更新挂锁成功
+update_point_failed,text,修改点位信息失败时弹窗提示,保存点位失败
+update_point_succeed,text,修改点位信息成功时弹窗提示,保存点位成功
+update_rfid_token_failed,text,修改RFID信息失败时弹窗提示,更新RFID标签失败
+update_rfid_token_succeed,text,修改RFID信息成功时弹窗提示,更新RFID标签成功
+update_role_failed,text,修改角色信息失败时弹窗提示,角色更新失败
+update_role_succeed,text,修改角色信息成功时弹窗提示,角色更新成功
+update_user_failed,text,修改用户信息失败时弹窗提示,用户更新失败
+update_user_succeed,text,修改用户信息成功时弹窗提示,用户更新成功
+update_workstation_failed,text,修改区域信息失败时弹窗提示,更新区域失败
+update_workstation_succeed,text,修改区域信息成功时弹窗提示,更新区域成功
+user_already_exists,text,添加用户,检测用户信息是否存在,存在时提示,用户已存在
+user_info_title,text,个人信息标题,个人信息
+user_manage_area,text,添加修改用户区域文本,区域
+user_manage_card_code,text,添加修改用户工卡文本,工卡
+user_manage_delete_failed,text,删除用户时检查用户是否在进行中的作业,存在则提示无法删除,无法删除用户
+user_manage_delete_succeed,text,用户删除成功时提示,用户已删除
+user_manage_filter_activate,text,用户筛选状态文本,正常
+user_manage_filter_deactivate,text,用户筛选状态文本,停用
+user_manage_filter_title,text,筛选条件标题,筛选条件
+user_manage_new_user_title,text,新增用户标题,新增用户
+user_manage_role,text,添加修改用户角色文本,角色
+user_manage_title,text,用户管理标题,用户管理
+user_manage_user_detail_title,text,用户详情标题,用户详情
+user_manage_view,text,用户管理列表表头,查看
+user_name,text,添加修改用户用户名文本,登录名
+username,text,通用用户名称文本,用户名称
+username_or_password_error,text,账号密码登录时,账号密码错误提示,账号或密码错误
+username_passowrd_login_success,text,账号密码登录成功提示,账号密码验证通过
+username_password_not_exists,text,账号密码登录时,如果账号不存在提示,账号密码不存在
+username_regex_tip,text,初始化管理员账号,账号不符合要求提示,账号不符合要求
+verify_failed,text,登录失败时提示,验证失败
+view,text,通用查看文本,查看
+wait_header,text,我的待办等待中TAB表头,等待中
+wait_to_colock,text,作业执行界面共锁表头,待共锁({0})
+warn,text,通用警告文本,警告
+welcome_tip,text,初始化欢迎界面文本,您好,欢迎您使用
+workflow_already_exists,text,导入流程模式时,流程模式已存在文本提示,流程模式已存在
+workflow_manage_title,text,流程模式管理标题,流程模式管理
+workflow_mode,text,通用流程模式文本,流程模式
+workflow_mode_manage_delete_succeed,text,删除流程模式成功时提示,删除流程模式成功
+workflow_mode_status_update_failed,text,流程模式状态修改失败时提示,状态修改失败
+workflow_mode_status_update_succeed,text,流程模式状态修改成功时提示,状态修改成功
+workflow_name,text,流程模式表头,流程模式名称
+workflow_setting,text,流程模式设置标题,流程设置
+workflow_step_confirm_member,text,流程模式设置项标题,执行确认人员
+workflow_step_confirm_role,text,流程模式设置项标题,执行确认角色
+workflow_step_confirm_type,text,流程模式设置项标题,执行确认方式
+workflow_step_description,text,流程模式设置项标题,步骤操作说明
+workflow_step_function,text,流程模式设置项标题,步骤功能
+workflow_step_title,text,流程模式设置项标题,步骤标题
+workflow_step_title_short,text,流程模式设置项标题,步骤标题缩写
+workstation_already_exists,text,添加区域是检查同级是否已经存在区域,存在时弹窗文本,区域已存在
+workstation_is_in_bottom,text,区域下移时检测是否已经到底部,到底部提示文本,区域已经在底部
+workstation_is_in_top,text,区域上移时检测是否已经到顶部,到顶部提示文本,区域已经在顶部
+workstation_manage_delete_failed,text,区域删除时检查是否有正在使用的作业,有的话提示无法删除,无法删除区域"{0}"
+workstation_manage_delete_succeed,text,区域删除成功时提示,删除区域"{0}"成功
+workstation_manage_new_workstation,text,新增区域标题,新增区域
+workstation_manage_title,text,区域管理标题,区域管理
+workstation_manage_workstation_name,text,新增区域显示文本,区域名称
+you_are_not_locker_tip,text,非上锁人执行上锁/解锁作业时提示文本,您不是上锁人,无法执行此操作
+zone,text,首页区域范围,区域范围
+backup_title,text,备份/还原标题,备份/还原
+backup,text,备份文本,备份
+backup_path,text,备份路径文本,备份路径
+maximum_number_of_backups,text,备份数量上限文本,备份数量上限
+auto_backup,text,自动备份文本,自动备份
+common_enable,text,通用启用文本,启用
+common_disable,text,通用停用文本,停用
+backup_frequency,text,备份频率文本,备份频率
+backup_time,text,备份时间文本,备份时间
+backup_tip,text,备份注意文本,注意:自动备份时必须保证应用处于启动状态。
+backup_now,text,立即备份文本,立即备份
+backup_range,text,备份数量上限提示,范围文本,范围:{0}
+restore,text,还原文本,还原
+common_batch_export,text,通用批量导出文本,批量导出
+common_batch_delete,text,通用批量删除文本,批量删除
+common_export,text,通用导出文本,导出
+MON,text,周一,星期一
+TUE,text,周二,星期二
+WED,text,周三,星期三
+THU,text,周四,星期四
+FRI,text,周五,星期五
+SAT,text,周六,星期六
+SUN,text,周日,星期日
+backup_frequency_every_day,text,备份频率每天,每天
+please_select_backup_frequency,text,选择备份频率提示,请选择备份频率
+maximumNumberOfBackupsNotCorrect,text,备份数量上限不正确提示,请填写正确的备份数量上限
+please_select_time,text,通用选择时间标题,请选择时间
+backup_now_please_wait,text,备份等待文本,正在备份中,请稍等……
+backup_success,text,备份成功文本,备份成功
+backup_failed,text,备份失败文本,备份失败
+delete_backup_file_confirm,text,删除备份提示,是否确认删除该备份,删除后备份无法恢复。
+delete_selected_backup_file_confirm,text,删除选中备份提示,是否确认删除选中备份,删除后备份无法恢复。
+restore_backup_confirm,text,还原备份提醒,还原备份将清除备份日期到当前时间的所有数据,是否确认还原备份?
+restore_backup_success,text,还原备份成功文本,备份还原成功
+export_success,text,通用导出成功,导出成功
+no_backup_data,text,暂无备份数据,暂无备份数据
+loading_backup,text,加载备份中,正在读取备份文件
+max_backup_tip,text,备份达到上限,备份数量已经达到上限,继续备份将移除最老的数据。
+switch,text,切换文本,切换
+backup_restoring,text,备份还原中,备份还原中……

+ 39 - 2
app/src/main/java/com/grkj/iscs/ISCSApplication.kt

@@ -10,12 +10,20 @@ import android.util.TypedValue
 import ch.qos.logback.classic.Level
 import com.drake.statelayout.StateConfig
 import com.grkj.data.data.EventConstants
+import com.grkj.data.database.BackupScheduler
+import com.grkj.data.database.DbReadyGate
+import com.grkj.data.database.ISCSDatabase
 import com.grkj.data.di.LogicManager
 import com.grkj.iscs.common.GlobalManager
 import com.grkj.iscs.features.splash.activity.SplashActivity
 import com.grkj.ui_base.service.CheckKeyInfoTask
 import com.grkj.shared.model.EventBean
 import com.grkj.shared.utils.ArcSoftUtil
+import com.grkj.shared.utils.i18n.I18nManager
+import com.grkj.shared.utils.i18n.LanguageCatalog
+import com.grkj.shared.utils.i18n.LanguageStore
+import com.grkj.shared.utils.i18n.source.AssetsCsvSource
+import com.grkj.shared.utils.i18n.source.FileCsvSource
 import com.grkj.ui_base.business.ModbusBusinessManager
 import com.grkj.ui_base.config.ISCSConfig
 import com.grkj.ui_base.utils.ble.BleUtil
@@ -31,12 +39,16 @@ import com.sik.sikcore.extension.toJson
 import com.sik.sikcore.log.LogUtils
 import com.sik.sikcore.thread.ThreadUtils
 import dagger.hilt.android.HiltAndroidApp
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
 import me.jessyan.autosize.AutoSizeConfig
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
+import java.util.Locale
 
 
 /**
@@ -46,6 +58,13 @@ import org.slf4j.LoggerFactory
 class ISCSApplication : Application() {
     private val logger: Logger = LoggerFactory.getLogger(ISCSApplication::class.java)
 
+    companion object {
+        /**
+         * 检查钥匙信息任务
+         */
+        val checkKeyInfoTask: CheckKeyInfoTask by lazy { CheckKeyInfoTask() }
+    }
+
     /**
      * 程序创建
      */
@@ -65,16 +84,34 @@ class ISCSApplication : Application() {
         }
         if (ISCSConfig.DEBUG) {
             LogUtils.setGlobalLogLevel(Level.DEBUG)
+        } else {
+            LogUtils.setGlobalLogLevel(Level.INFO)
         }
+        System.loadLibrary("sqlcipher")   // 新库必须手动加载
+        I18nManager.init(
+            defaultLocale = LanguageStore.resolveEffectiveLocale(this),
+            initialSources = arrayOf(
+                AssetsCsvSource(this, "i18n", mergedMode = false),
+                FileCsvSource(this, "i18n", mergedMode = false)
+            ),
+            eagerLoad = true
+        )
+
+        // 建议:可提前刷新一下目录(不强制)
+        LanguageCatalog.refresh(this)
+
+        // 若“跟随系统”,监听系统语言变化
+        LanguageStore.registerSystemLocaleObserver(this)
         if (ISCSConfig.isInit) {
             BleUtil.instance?.initBle(this)
         }
         AutoSizeConfig.getInstance().isCustomFragment = true
+        StateConfig.emptyLayout = com.grkj.ui_base.R.layout.layout_empty
         ThreadUtils.runOnIO {
+            DbReadyGate.await()
             ModbusBusinessManager.registerMainListener()
             LogicManager.init(this@ISCSApplication)
         }
-        StateConfig.emptyLayout = com.grkj.ui_base.R.layout.layout_empty
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN)
@@ -95,7 +132,7 @@ class ISCSApplication : Application() {
 
             EventConstants.EVENT_START_MODBUS_COMPLETE -> {
                 if (ISCSConfig.isInit) {
-                    val jobList = CronJobScanner.scanJobs(CheckKeyInfoTask())
+                    val jobList = CronJobScanner.scanJobs(checkKeyInfoTask)
                     logger.info("扫描任务结果:${jobList.toJson()},开始注册")
                     GlobalManager.cronJobManager.registerJobs(jobList)
                 }

+ 2 - 1
app/src/main/java/com/grkj/iscs/features/init/fragment/InitCardRegistrationFragment.kt

@@ -16,6 +16,7 @@ import com.grkj.iscs.features.init.viewmodel.InitViewModel
 import com.grkj.shared.model.EventBean
 import com.grkj.shared.utils.KeyboardUtils
 import com.grkj.ui_base.base.BaseFragment
+import com.grkj.ui_base.utils.CommonUtils
 import com.grkj.ui_base.utils.event.CardSwipeEvent
 import com.grkj.ui_base.utils.extension.tip
 import com.kongzue.dialogx.dialogs.PopTip
@@ -104,7 +105,7 @@ class InitCardRegistrationFragment : BaseFragment<FragmentInitCardRegistrationBi
             EventConstants.EVENT_CARD_SWIPE -> {
                 val cardSwipeEvent = (event.data as CardSwipeEvent)
                 if (cardRfidData.contains(cardSwipeEvent.cardNo)) {
-                    PopTip.build().tip(R.string.card_already_registration)
+                    showToast(CommonUtils.getStr("card_already_registration"))
                     return
                 }
                 cardRfidData.add(cardSwipeEvent.cardNo)

+ 6 - 5
app/src/main/java/com/grkj/iscs/features/init/fragment/InitDeviceRegistrationKeyAndLockFragment.kt

@@ -24,6 +24,7 @@ import com.grkj.iscs.features.init.model.DockData
 import com.grkj.iscs.features.init.viewmodel.InitDeviceRegistrationKeyAndLockViewModel
 import com.grkj.shared.model.EventBean
 import com.grkj.ui_base.base.BaseFragment
+import com.grkj.ui_base.utils.CommonUtils
 import com.grkj.ui_base.utils.extension.tip
 import com.grkj.ui_base.utils.modbus.DeviceConst
 import com.grkj.ui_base.utils.modbus.DockBean
@@ -57,7 +58,7 @@ class InitDeviceRegistrationKeyAndLockFragment :
         }
         binding.nextBtn.setDebouncedClickListener {
             if (viewModel.isLoadComplete.value == false) {
-                PopTip.build().tip(R.string.device_in_detect)
+                showToast(CommonUtils.getStr("device_in_detect"))
                 return@setDebouncedClickListener
             }
             viewModel.deviceRegistrationData().observe(this) {
@@ -89,8 +90,8 @@ class InitDeviceRegistrationKeyAndLockFragment :
         }
         viewModel.isLoadComplete.observe(this) {
             binding.stepHint.text =
-                if (!it) getString(R.string.init_device_registration_key_and_lock_step_hint) else getString(
-                    R.string.init_device_registration_key_and_lock_complete_step_hint
+                if (!it) CommonUtils.getStr("init_device_registration_key_and_lock_step_hint") else CommonUtils.getStr(
+                    "init_device_registration_key_and_lock_complete_step_hint"
                 )
             binding.dockRv.isVisible = it
 //            binding.checkDeviceInfo.isVisible = it
@@ -125,12 +126,12 @@ class InitDeviceRegistrationKeyAndLockFragment :
                 val allDevice = newKeyDockList + portableDock + lockDock
                 val newKeyCount =
                     newKeyDock.keyData.count { it.newHardware && it.rfid != null && it.mac != null } + portableDock.map { it.deviceData }
-                        .count { it is DockBean.KeyBean&& it.newHardware && it.rfid != null&& it.mac != null  }
+                        .count { it is DockBean.KeyBean && it.newHardware && it.rfid != null && it.mac != null }
                 val newLockCount = lockDock.map { it.lockData }.flatten()
                     .count { it.newHardware && it.rfid != null } + portableDock.map { it.deviceData }
                     .count { it is DockBean.LockBean && it.newHardware && it.rfid != null }
                 binding.checkDeviceInfo.text =
-                    getString(R.string.check_device_info, newKeyCount, newLockCount)
+                    CommonUtils.getStr("check_device_info", newKeyCount, newLockCount)
                 binding.dockRv.models = allDevice
             }
         }

+ 3 - 3
app/src/main/java/com/grkj/iscs/features/init/fragment/InitSetAdminAccountFragment.kt

@@ -50,7 +50,7 @@ class InitSetAdminAccountFragment : BaseFragment<FragmentInitSetAdminAccountBind
         }
         val username = binding.adminUsernameEt.text.toString()
         if (!RegexUtils.isMatch(username, CommonConstants.REGEX_USERNAME)){
-            showToast(CommonUtils.getStr(R.string.username_regex_tip).toString())
+            showToast(CommonUtils.getStr("username_regex_tip"))
             return false
         }
         if (binding.passwordEt.text.toString().isEmpty()) {
@@ -63,11 +63,11 @@ class InitSetAdminAccountFragment : BaseFragment<FragmentInitSetAdminAccountBind
         }
         val password = binding.passwordEt.text.toString()
         if (!RegexUtils.isMatch(password, CommonConstants.REGEX_PASSWORD)){
-            showToast(CommonUtils.getStr(R.string.password_regex_tip).toString())
+            showToast(CommonUtils.getStr("password_regex_tip"))
             return false
         }
         if (binding.passwordEt.text.toString() != binding.repeatPasswordEt.text.toString()) {
-            PopTip.tip(R.string.password_and_repeat_password_not_same)
+            showToast(CommonUtils.getStr("password_and_repeat_password_not_same"))
             return false
         }
         return true

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/init/fragment/InitWelcomeFragment.kt

@@ -34,12 +34,12 @@ class InitWelcomeFragment : BaseFragment<FragmentInitWelcomeBinding>() {
             }
         }
         if (MMKVConstants.KEY_PORT_CONFIG.getMMKVData("").isEmpty()) {
-            binding.startBtn.text = CommonUtils.getStr(R.string.detect_port)
+            binding.startBtn.text = CommonUtils.getStr("detect_port")
         } else {
             viewModel.createLockCabinetData().observe(this){
 
             }
-            binding.startBtn.text = CommonUtils.getStr(R.string.start)
+            binding.startBtn.text = CommonUtils.getStr("start")
             binding.startBtn.setDebouncedClickListener {
                 navController.navigate(R.id.action_initWelcomeFragment_to_initSetAdminAccountFragment)
             }

+ 4 - 4
app/src/main/java/com/grkj/iscs/features/init/viewmodel/InitViewModel.kt

@@ -14,15 +14,15 @@ import javax.inject.Inject
  */
 @HiltViewModel
 class InitViewModel @Inject constructor(
-    override val userRepository: IUserLogic,
+    override val userLogic: IUserLogic,
     val hardwareRepository: IHardwareLogic
-) : BaseViewModel(userRepository) {
+) : BaseViewModel(userLogic) {
     /**
      * 移除超级管理员用户
      */
     fun removeAdminUser(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            userRepository.removeAdminUser()
+            userLogic.removeAdminUser()
             emit(true)
         }
     }
@@ -32,7 +32,7 @@ class InitViewModel @Inject constructor(
      */
     fun insertAdminAccount(username: String, password: String): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            userRepository.addAdminUser(username, password)
+            userLogic.addAdminUser(username, password)
             emit(true)
         }
     }

+ 54 - 22
app/src/main/java/com/grkj/iscs/features/login/activity/LoginActivity.kt

@@ -17,24 +17,32 @@ import com.drake.brv.utils.setup
 import com.grkj.data.data.MainDomainData
 import com.grkj.data.enums.LoginResultEnum
 import com.grkj.data.model.local.LoginMenuEntity
+import com.grkj.iscs.ISCSApplication
 import com.grkj.iscs.R
 import com.grkj.iscs.databinding.ActivityLoginBinding
 import com.grkj.iscs.databinding.ItemLoginMethodBinding
 import com.grkj.iscs.features.init.activity.SetRemoteServerActivity
+import com.grkj.iscs.features.login.dialog.ChangeLangDialog
 import com.grkj.iscs.features.login.dialog.LoginDialog
 import com.grkj.iscs.features.login.viewmodel.LoginViewModel
 import com.grkj.iscs.features.main.activity.MainActivity
 import com.grkj.shared.config.Constants
+import com.grkj.shared.utils.extension.toByteArrays
+import com.grkj.shared.utils.extension.toHexStrings
+import com.grkj.shared.utils.i18n.I18nManager
+import com.grkj.shared.utils.i18n.LanguageEntry
+import com.grkj.shared.utils.i18n.LanguageRegistry
+import com.grkj.shared.utils.i18n.LanguageStore
+import com.grkj.shared.utils.i18n.LocaleUtils
 import com.grkj.ui_base.base.BaseActivity
 import com.grkj.ui_base.utils.CommonUtils
 import com.grkj.ui_base.utils.event.LoadingEvent
 import com.grkj.ui_base.utils.extension.getAppVersionName
-import com.grkj.shared.utils.extension.toByteArrays
-import com.grkj.shared.utils.extension.toHexStrings
 import com.grkj.ui_base.utils.fingerprint.FingerprintUtil
 import com.sik.sikcore.extension.setDebouncedClickListener
 import com.sik.sikimage.ImageConvertUtils
 import dagger.hilt.android.AndroidEntryPoint
+import java.util.Locale
 
 /**
  * 登录页
@@ -52,6 +60,22 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
     }
 
     override fun initView() {
+        binding.chipLang.text = I18nManager.locale.value.toLanguageTag()
+        binding.chipLang.setOnClickListener {
+            val targetRegion = "US" // 自己决定用什么;也可以是 "CN" / 配置项 / 服务器下发
+            val entries = LanguageRegistry.entriesFromSources(targetRegion)
+
+            ChangeLangDialog.show(
+                canChangeLang = entries,
+                targetRegion = targetRegion
+            ) { selected: LanguageEntry ->
+                // 切换并持久化(MMKV),I18nManager 会热更新
+                LanguageStore.setExplicit(Locale.forLanguageTag(selected.tag))
+
+                // 芯片文本友好化(可选)
+                binding.chipLang.text = I18nManager.locale.value.toLanguageTag()
+            }
+        }
         binding.loginTypeRv.apply {
             if (isLandscape()) {
                 linear(orientation = LinearLayout.HORIZONTAL)
@@ -81,7 +105,7 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
     private fun BindingAdapter.BindingViewHolder.onLoginMenuBinding(holder: BindingAdapter.BindingViewHolder) {
         val itemBinding = holder.getBinding<ItemLoginMethodBinding>()
         val item = holder.getModel<LoginMenuEntity>()
-        itemBinding.loginTipV.isVisible == item.needTip
+        itemBinding.loginTipV.isVisible = item.needTip
         itemBinding.loginMethodTv.text = item.menuText
         itemBinding.loginMethodIv.setBackgroundResource(item.menuIconId)
         holder.itemView.setDebouncedClickListener {
@@ -89,45 +113,49 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
                 LoadingEvent.sendLoadingEvent()
                 when (it) {
                     LoginResultEnum.FINGERPRINTER_VERIFY_SUCCESS -> {
-                        showToast(CommonUtils.getStr(R.string.fingerprint_login_success).toString())
+                        showToast(CommonUtils.getStr("fingerprint_login_success"))
                         startActivity(Intent(this@LoginActivity, MainActivity::class.java))
+                        finish()
                     }
 
                     LoginResultEnum.FINGERPRINTER_VERIFY_FAILED -> showToast(
-                        CommonUtils.getStr(R.string.fingerprint_login_failed).toString()
+                        CommonUtils.getStr("fingerprint_login_failed")
                     )
 
                     LoginResultEnum.FACE_VERIFY_SUCCESS -> {
-                        showToast(CommonUtils.getStr(R.string.face_login_success).toString())
+                        showToast(CommonUtils.getStr("face_login_success"))
                         startActivity(Intent(this@LoginActivity, MainActivity::class.java))
+                        finish()
                     }
 
                     LoginResultEnum.FACE_VERIFY_FAILED -> showToast(
-                        CommonUtils.getStr(R.string.face_login_failed).toString()
+                        CommonUtils.getStr("face_login_failed")
                     )
 
                     LoginResultEnum.USERNAME_PASSWORD_LOGIN_SUCCESS -> {
                         showToast(
-                            CommonUtils.getStr(R.string.username_passowrd_login_success).toString()
+                            CommonUtils.getStr("username_passowrd_login_success")
                         )
                         startActivity(Intent(this@LoginActivity, MainActivity::class.java))
+                        finish()
                     }
 
                     LoginResultEnum.USERNAME_OR_PASSWORD_ERROR -> showToast(
-                        CommonUtils.getStr(R.string.username_or_password_error).toString()
+                        CommonUtils.getStr("username_or_password_error")
                     )
 
                     LoginResultEnum.USERNAME_PASSWORD_NOT_EXISTS -> showToast(
-                        CommonUtils.getStr(R.string.username_password_not_exists).toString()
+                        CommonUtils.getStr("username_password_not_exists")
                     )
 
                     LoginResultEnum.JOB_CARD_LOGIN_SUCCESS -> {
-                        showToast(CommonUtils.getStr(R.string.job_card_login_success).toString())
+                        showToast(CommonUtils.getStr("job_card_login_success"))
                         startActivity(Intent(this@LoginActivity, MainActivity::class.java))
+                        finish()
                     }
 
                     LoginResultEnum.JOB_CARD_LOGIN_FAILED -> showToast(
-                        CommonUtils.getStr(R.string.job_card_login_failed).toString()
+                        CommonUtils.getStr("job_card_login_failed")
                     )
                 }
             }
@@ -151,7 +179,7 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
             add(
                 LoginMenuEntity(
                     R.drawable.icon_login_menu_face,
-                    CommonUtils.getStr(R.string.face_login).toString(),
+                    CommonUtils.getStr("face_login"),
                     false,
                     0
                 )
@@ -159,7 +187,7 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
             add(
                 LoginMenuEntity(
                     R.drawable.icon_login_menu_password,
-                    CommonUtils.getStr(R.string.account_login).toString(),
+                    CommonUtils.getStr("account_login"),
                     false,
                     3
                 )
@@ -167,7 +195,7 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
             add(
                 LoginMenuEntity(
                     R.mipmap.icon_login_menu_fingerprint,
-                    CommonUtils.getStr(R.string.fingerprint_login).toString(),
+                    CommonUtils.getStr("fingerprint_login"),
                     true,
                     1
                 )
@@ -175,7 +203,7 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
             add(
                 LoginMenuEntity(
                     R.drawable.icon_login_menu_card,
-                    CommonUtils.getStr(R.string.card_login).toString(),
+                    CommonUtils.getStr("card_login"),
                     true,
                     2
                 )
@@ -186,13 +214,14 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
 
     override fun onResume() {
         super.onResume()
+        ISCSApplication.checkKeyInfoTask.isInLogin = true
         MainDomainData.clear()
         FingerprintUtil.init(this)
         FingerprintUtil.start()
         FingerprintUtil.setScanListener(object : FingerprintUtil.OnScanListener {
             override fun onScan(bitmap: Bitmap) {
                 LoadingEvent.sendLoadingEvent(
-                    CommonUtils.getStr(com.grkj.ui_base.R.string.doing_login),
+                    CommonUtils.getStr("doing_login"),
                     true
                 )
                 viewModel.loginWithFingerprint(
@@ -200,10 +229,11 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
                 ).observe(this@LoginActivity) { isSuccess ->
                     LoadingEvent.sendLoadingEvent()
                     if (isSuccess == LoginResultEnum.FINGERPRINTER_VERIFY_SUCCESS) {
-                        showToast(CommonUtils.getStr(R.string.fingerprint_login_success).toString())
+                        showToast(CommonUtils.getStr("fingerprint_login_success"))
                         startActivity(Intent(this@LoginActivity, MainActivity::class.java))
+                        finish()
                     } else {
-                        showToast(CommonUtils.getStr(R.string.fingerprint_login_failed).toString())
+                        showToast(CommonUtils.getStr("fingerprint_login_failed"))
                     }
                 }
             }
@@ -214,6 +244,7 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
         super.onStop()
         cardNo = ""
         FingerprintUtil.stop()
+        ISCSApplication.checkKeyInfoTask.isInLogin = false
     }
 
     override fun dispatchKeyEvent(event: KeyEvent): Boolean {
@@ -225,19 +256,20 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
                     cardNo = cardNo.toLong().toByteArrays().toHexStrings(false)
                     logger.info("Swipe card login: $cardNo")
                     LoadingEvent.sendLoadingEvent(
-                        CommonUtils.getStr(com.grkj.ui_base.R.string.doing_login),
+                        CommonUtils.getStr("doing_login"),
                         true
                     )
                     viewModel.loginWithCard(cardNo).observe(this) { isSuccess ->
                         LoadingEvent.sendLoadingEvent()
                         if (isSuccess == LoginResultEnum.JOB_CARD_LOGIN_SUCCESS) {
                             showToast(
-                                CommonUtils.getStr(R.string.job_card_login_success).toString()
+                                CommonUtils.getStr("job_card_login_success")
                             )
                             startActivity(Intent(this@LoginActivity, MainActivity::class.java))
+                            finish()
                         } else {
                             showToast(
-                                CommonUtils.getStr(R.string.job_card_login_failed).toString()
+                                CommonUtils.getStr("job_card_login_failed")
                             )
                         }
                     }

+ 56 - 0
app/src/main/java/com/grkj/iscs/features/login/dialog/ChangeLangDialog.kt

@@ -0,0 +1,56 @@
+package com.grkj.iscs.features.login.dialog
+
+import android.view.View
+import com.drake.brv.utils.linear
+import com.drake.brv.utils.setup
+import com.grkj.iscs.R
+import com.grkj.iscs.databinding.DialogChangeLangBinding
+import com.grkj.iscs.databinding.ItemLangBinding
+import com.grkj.shared.utils.i18n.LanguageEntry
+import com.grkj.shared.utils.i18n.LocaleUtils
+import com.kongzue.dialogx.dialogs.CustomDialog
+import com.kongzue.dialogx.interfaces.OnBindView
+
+/**
+ * 修改语言弹窗
+ */
+class ChangeLangDialog(
+    private val canChangeLang: List<LanguageEntry>,
+    private val targetRegion: String?,
+    private val onConfirm: (LanguageEntry) -> Unit
+) : OnBindView<CustomDialog>(R.layout.dialog_change_lang) {
+
+    override fun onBind(dialog: CustomDialog, v: View) {
+        val binding = DialogChangeLangBinding.bind(v)
+        binding.listRv.linear().setup {
+            addType<LanguageEntry>(R.layout.item_lang)
+            onBind {
+                val item = getModel<LanguageEntry>()
+                val itemBinding = getBinding<ItemLangBinding>()
+                itemBinding.lang.setOnCheckedChangeListener(null)
+                itemBinding.lang.isChecked = item.isSelected
+                itemBinding.lang.text = LocaleUtils.buildDisplayLabel(item, targetRegion)
+                itemBinding.lang.setOnCheckedChangeListener { _, checked ->
+                    if (!checked) return@setOnCheckedChangeListener   // ← 只响应“被选中”的事件
+                    canChangeLang.forEach { it.isSelected = (it.tag == item.tag) }
+                    notifyDataSetChanged()
+                }
+            }
+        }.models = canChangeLang
+
+        binding.switchBtn.setOnClickListener {
+            canChangeLang.firstOrNull { it.isSelected }?.let(onConfirm)
+            dialog.dismiss()
+        }
+    }
+
+    companion object {
+        fun show(
+            canChangeLang: List<LanguageEntry>,
+            targetRegion: String?,
+            onConfirm: (LanguageEntry) -> Unit
+        ) {
+            CustomDialog.show(ChangeLangDialog(canChangeLang, targetRegion, onConfirm))
+        }
+    }
+}

+ 5 - 5
app/src/main/java/com/grkj/iscs/features/login/dialog/LoginDialog.kt

@@ -63,15 +63,15 @@ class LoginDialog(
         })
         mBinding.tvLogin.setDebouncedClickListener {
             if (mBinding.etAccount.text.toString().isEmpty()) {
-                PopTip.tip(CommonUtils.getStr(com.grkj.ui_base.R.string.please_input_account))
+                PopTip.tip(CommonUtils.getStr("please_input_account"))
                 return@setDebouncedClickListener
             }
             if (mBinding.etPassword.text.toString().isEmpty()) {
-                PopTip.tip(CommonUtils.getStr(com.grkj.ui_base.R.string.please_input_password))
+                PopTip.tip(CommonUtils.getStr("please_input_password"))
                 return@setDebouncedClickListener
             }
             LoadingEvent.sendLoadingEvent(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.doing_login),
+                CommonUtils.getStr("doing_login"),
                 true
             )
             viewModel.loginWithAccount(
@@ -113,7 +113,7 @@ class LoginDialog(
                 0 -> {
                     if (!ArcSoftUtil.isActivated) {
                         PopTip.tip(
-                            CommonUtils.getStr(com.grkj.ui_base.R.string.face_can_not_process)
+                            CommonUtils.getStr("face_can_not_process")
                                 .toString()
                         )
                     }
@@ -126,7 +126,7 @@ class LoginDialog(
                     FingerprintUtil.setScanListener(object : FingerprintUtil.OnScanListener {
                         override fun onScan(bitmap: Bitmap) {
                             LoadingEvent.sendLoadingEvent(
-                                CommonUtils.getStr(com.grkj.ui_base.R.string.doing_login),
+                                CommonUtils.getStr("doing_login"),
                                 true
                             )
                             viewModel.loginWithFingerprint(

+ 11 - 11
app/src/main/java/com/grkj/iscs/features/login/viewmodel/LoginViewModel.kt

@@ -16,8 +16,8 @@ import javax.inject.Inject
  */
 @HiltViewModel
 class LoginViewModel @Inject constructor(
-    override val userRepository: IUserLogic,
-) : BaseViewModel(userRepository) {
+    override val userLogic: IUserLogic,
+) : BaseViewModel(userLogic) {
 
 
     /**
@@ -27,8 +27,8 @@ class LoginViewModel @Inject constructor(
         username: String = "admin", password: String = "123456"
     ): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            userRepository.removeAdminUser()
-            userRepository.addAdminUser(username, password)
+            userLogic.removeAdminUser()
+            userLogic.addAdminUser(username, password)
             emit(true)
         }
     }
@@ -41,7 +41,7 @@ class LoginViewModel @Inject constructor(
         password: String,
     ): LiveData<LoginResultEnum> {
         return liveData(Dispatchers.IO) {
-            val loginSuccess = userRepository.loginWithAccount(username, password)
+            val loginSuccess = userLogic.loginWithAccount(username, password)
             emit(loginSuccess)
         }
     }
@@ -51,7 +51,7 @@ class LoginViewModel @Inject constructor(
      */
     fun loginWithCard(cardNo: String): LiveData<LoginResultEnum> {
         return liveData(Dispatchers.IO) {
-            val loginSuccess = userRepository.loginWithCard(cardNo)
+            val loginSuccess = userLogic.loginWithCard(cardNo)
             emit(loginSuccess)
         }
     }
@@ -61,7 +61,7 @@ class LoginViewModel @Inject constructor(
      */
     fun loginWithFingerprint(fingerprint: String): LiveData<LoginResultEnum> {
         return liveData(Dispatchers.IO) {
-            val loginSuccess = userRepository.loginWithFingerprint(fingerprint)
+            val loginSuccess = userLogic.loginWithFingerprint(fingerprint)
             emit(loginSuccess)
         }
     }
@@ -71,7 +71,7 @@ class LoginViewModel @Inject constructor(
      */
     fun loginWithFace(face: String): LiveData<LoginResultEnum> {
         return liveData(Dispatchers.IO) {
-            val loginSuccess = userRepository.loginWithFace(face)
+            val loginSuccess = userLogic.loginWithFace(face)
             emit(loginSuccess)
         }
     }
@@ -81,7 +81,7 @@ class LoginViewModel @Inject constructor(
      */
     fun loginWithUserId(userId: Long?): LiveData<LoginResultEnum> {
         return liveData(Dispatchers.IO) {
-            val loginSuccess = userRepository.loginWithUserId(userId)
+            val loginSuccess = userLogic.loginWithUserId(userId)
             emit(loginSuccess)
         }
     }
@@ -91,7 +91,7 @@ class LoginViewModel @Inject constructor(
      */
     fun logout(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            val logoutSuccess = userRepository.logout()
+            val logoutSuccess = userLogic.logout()
             emit(logoutSuccess)
         }
     }
@@ -101,7 +101,7 @@ class LoginViewModel @Inject constructor(
      */
     fun registerFaceFeature(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            val user = userRepository.getAllFaceData()
+            val user = userLogic.getAllFaceData()
             val userFaceData = user.filter { it.content.file().exists() }
                 .map { it.userId to it.content.file().readText() }
             ArcSoftUtil.registerFace(userFaceData)

+ 2 - 3
app/src/main/java/com/grkj/iscs/features/main/dialog/CheckFaceDialog.kt

@@ -91,8 +91,7 @@ class CheckFaceDialog(
             0 -> {
                 if (!ArcSoftUtil.isActivated) {
                     PopTip.tip(
-                        CommonUtils.getStr(com.grkj.ui_base.R.string.face_can_not_process)
-                            .toString()
+                        CommonUtils.getStr("face_can_not_process")
                     )
                 }
                 startFace()
@@ -104,7 +103,7 @@ class CheckFaceDialog(
                 FingerprintUtil.setScanListener(object : FingerprintUtil.OnScanListener {
                     override fun onScan(bitmap: Bitmap) {
                         LoadingEvent.sendLoadingEvent(
-                            CommonUtils.getStr(com.grkj.ui_base.R.string.doing_checking), true
+                            CommonUtils.getStr("doing_checking"), true
                         )
                         viewModel.checkFinger(
                             ImageConvertUtils.bitmapToBase64(bitmap).toString()

+ 3 - 2
app/src/main/java/com/grkj/iscs/features/main/dialog/QuickEntranceConfigDialog.kt

@@ -20,6 +20,7 @@ import com.grkj.iscs.databinding.DialogQuickEntranceConfigBinding
 import com.grkj.iscs.databinding.ItemQuickEntranceConfigBinding
 import com.grkj.iscs.databinding.ItemQuickEntranceNotConfigBinding
 import com.grkj.iscs.features.main.entity.QuickEntranceMenuItemEntity
+import com.grkj.ui_base.utils.CommonUtils
 import com.grkj.ui_base.utils.extension.tip
 import com.kongzue.dialogx.dialogs.FullScreenDialog
 import com.kongzue.dialogx.dialogs.PopTip
@@ -140,7 +141,7 @@ class QuickEntranceConfigDialog(private val save: (String) -> Unit) :
         itemBinding.root.setDebouncedClickListener {
             if (showAdd) {
                 if (selectedQuickEntranceConfig.size == 8) {
-                    PopTip.build().tip(R.string.quick_entrance_most_set_tip)
+                    PopTip.build().tip(CommonUtils.getStr("quick_entrance_most_set_tip"))
                     return@setDebouncedClickListener
                 }
                 item.itemOrientationDrag = ItemOrientation.ALL
@@ -168,7 +169,7 @@ class QuickEntranceConfigDialog(private val save: (String) -> Unit) :
         itemBinding.root.setDebouncedClickListener {
             if (showAdd) {
                 if (selectedQuickEntranceConfig.size == 8) {
-                    PopTip.build().tip(R.string.quick_entrance_most_set_tip)
+                    PopTip.build().tip(CommonUtils.getStr("quick_entrance_most_set_tip"))
                     return@setDebouncedClickListener
                 }
                 item.itemOrientationDrag = ItemOrientation.ALL

+ 5 - 5
app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/AddPointDialog.kt

@@ -83,23 +83,23 @@ class AddPointDialog(
 
     private fun checkData(): Boolean {
         if (binding.pointNameTv.text.isNullOrBlank()) {
-            PopTip.build().tip(R.string.please_input_point_name)
+            PopTip.build().tip(CommonUtils.getStr("please_input_point_name"))
             return false
         }
         if (binding.functionEt.text.isNullOrBlank()) {
-            PopTip.build().tip(R.string.please_input_point_function)
+            PopTip.build().tip(CommonUtils.getStr("please_input_point_function"))
             return false
         }
         if (binding.powerTypeTv.text.isNullOrBlank()) {
-            PopTip.build().tip(R.string.please_select_power_type)
+            PopTip.build().tip(CommonUtils.getStr("please_select_power_type"))
             return false
         }
         if (binding.workstationTv.text.isNullOrBlank()) {
-            PopTip.build().tip(R.string.please_select_workstation)
+            PopTip.build().tip(CommonUtils.getStr("please_select_workstation"))
             return false
         }
         if (binding.rfidTagTv.text.isNullOrBlank()) {
-            PopTip.build().tip(R.string.please_select_rfid_tag)
+            PopTip.build().tip(CommonUtils.getStr("please_select_rfid_token"))
             return false
         }
         return true

+ 3 - 2
app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/AddRoleDialog.kt

@@ -5,6 +5,7 @@ import androidx.core.view.isVisible
 import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
+import com.google.android.gms.common.internal.service.Common
 import com.grkj.iscs.R
 import com.grkj.iscs.databinding.DialogAddRoleBinding
 import com.grkj.iscs.databinding.ItemRoleBinding
@@ -47,11 +48,11 @@ class AddRoleDialog(
         // 确认
         binding.confirm.setDebouncedClickListener {
             if (binding.roleNameEt.text.isNullOrBlank()) {
-                PopTip.build().tip(R.string.please_input_role_name)
+                PopTip.build().tip(CommonUtils.getStr("please_input_role_name"))
                 return@setDebouncedClickListener
             }
             if (binding.roleKeyEt.text.isNullOrBlank()) {
-                PopTip.build().tip(R.string.please_input_permission_characters)
+                PopTip.build().tip(CommonUtils.getStr("please_input_permission_characters"))
                 return@setDebouncedClickListener
             }
             val data = AddRoleDataEntity().apply {

+ 5 - 5
app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/AddUserDialog.kt

@@ -85,23 +85,23 @@ class AddUserDialog(
 
     private fun checkData(): Boolean {
         if (binding.usernameEt.text.isNullOrBlank()) {
-            PopTip.build().tip(R.string.please_input_username)
+            PopTip.build().tip(CommonUtils.getStr("please_input_username"))
             return false
         }
         if (binding.nicknameEt.text.isNullOrBlank()) {
-            PopTip.build().tip(R.string.please_input_nickname)
+            PopTip.build().tip(CommonUtils.getStr("please_input_nickname"))
             return false
         }
         if (selectedRoles.isEmpty()) {
-            PopTip.build().tip(R.string.please_select_role)
+            PopTip.build().tip(CommonUtils.getStr("please_select_role"))
             return false
         }
         if (ISCSConfig.isWorkstationOn && selectedWorkstations.isEmpty()) {
-            PopTip.build().tip(R.string.please_select_area)
+            PopTip.build().tip(CommonUtils.getStr("please_select_area"))
             return false
         }
         if (binding.statusRg.checkedRadioButtonId == -1) {
-            PopTip.build().tip(R.string.please_select_status)
+            PopTip.build().tip(CommonUtils.getStr("please_select_status"))
             return false
         }
         return true

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/AddWorkstationDialog.kt

@@ -31,7 +31,7 @@ class AddWorkstationDialog(
         binding.confirm.setDebouncedClickListener {
             val name = binding.workstationNameEt.text.trim().toString()
             if (name.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_workstation_name)
+                PopTip.build().tip(CommonUtils.getStr("please_input_workstation_name"))
             } else {
                 onConfirm(name,dialog)
             }

+ 5 - 5
app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/UpdatePointDialog.kt

@@ -104,23 +104,23 @@ class UpdatePointDialog(
 
     private fun validate(): Boolean {
         if (binding.pointNameTv.text.isNullOrBlank()) {
-            PopTip.build().tip(R.string.please_input_point_name)
+            PopTip.build().tip(CommonUtils.getStr("please_input_point_name"))
             return false
         }
         if (binding.functionEt.text.isNullOrBlank()) {
-            PopTip.build().tip(R.string.please_input_point_function)
+            PopTip.build().tip(CommonUtils.getStr("please_input_point_function"))
             return false
         }
         if (binding.powerTypeTv.tag == null) {
-            PopTip.build().tip(R.string.please_select_power_type)
+            PopTip.build().tip(CommonUtils.getStr("please_select_power_type"))
             return false
         }
         if (binding.workstationTv.tag == null) {
-            PopTip.build().tip(R.string.please_select_workstation)
+            PopTip.build().tip(CommonUtils.getStr("please_select_workstation"))
             return false
         }
         if (binding.rfidTagTv.tag == null) {
-            PopTip.build().tip(R.string.please_select_rfid_tag)
+            PopTip.build().tip(CommonUtils.getStr("please_select_rfid_token"))
             return false
         }
         return true

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/UpdateRoleDialog.kt

@@ -95,11 +95,11 @@ class UpdateRoleDialog(
         // 确认
         binding.confirm.setDebouncedClickListener {
             if (binding.roleNameEt.text.isNullOrBlank()) {
-                PopTip.build().tip(R.string.please_input_role_name)
+                PopTip.build().tip(CommonUtils.getStr("please_input_role_name"))
                 return@setDebouncedClickListener
             }
             if (binding.roleKeyEt.text.isNullOrBlank()) {
-                PopTip.build().tip(R.string.please_input_permission_characters)
+                PopTip.build().tip(CommonUtils.getStr("please_input_permission_characters"))
                 return@setDebouncedClickListener
             }
             updateEntity.roleName = binding.roleNameEt.text.toString()

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/dialog/data_manage/UpdateWorkstationDialog.kt

@@ -31,7 +31,7 @@ class UpdateWorkstationDialog(
         binding.confirm.setDebouncedClickListener {
             val name = binding.workstationNameEt.text.trim().toString()
             if (name.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_workstation_name)
+                PopTip.build().tip(CommonUtils.getStr("please_input_workstation_name"))
             } else {
                 onConfirm(name, dialog)
             }

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddCardDialog.kt

@@ -64,7 +64,7 @@ class AddCardDialog(
             val nfc = binding.cardNfcEt.text.trim().toString()
             val statusChecked = binding.statusRg.checkedRadioButtonId == binding.activateRb.id
             if (nfc.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_card_nfc)
+                PopTip.build().tip(CommonUtils.getStr("please_input_card_nfc"))
                 return@setDebouncedClickListener
             }
             // 构造并回调

+ 3 - 3
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddKeyDialog.kt

@@ -39,15 +39,15 @@ class AddKeyDialog(
             val statusChecked = binding.statusRg.checkedRadioButtonId == binding.activateRb.id
 
             if (code.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_key_name)
+                PopTip.build().tip(CommonUtils.getStr("please_input_key_name"))
                 return@setDebouncedClickListener
             }
             if (nfc.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_key_nfc)
+                PopTip.build().tip(CommonUtils.getStr("please_input_key_nfc"))
                 return@setDebouncedClickListener
             }
             if (mac.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_key_mac)
+                PopTip.build().tip(CommonUtils.getStr("please_input_key_mac"))
                 return@setDebouncedClickListener
             }
             // 构建并回调(位置参数方式)

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddLockDialog.kt

@@ -39,11 +39,11 @@ class AddLockDialog(
             val remark = binding.remarkEt.text.toString()
 
             if (code.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_lock_code)
+                PopTip.build().tip(CommonUtils.getStr("please_input_lock_code"))
                 return@setDebouncedClickListener
             }
             if (nfc.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_lock_nfc)
+                PopTip.build().tip(CommonUtils.getStr("please_input_lock_nfc"))
                 return@setDebouncedClickListener
             }
             // 构建并回调(位置参数方式,与VO构造器一致)

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddRfidTokenDialog.kt

@@ -55,11 +55,11 @@ class AddRfidTokenDialog(
             val remark = binding.remarkEt.text.toString().takeIf { it.isNotBlank() }
 
             if (code.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_rfid_code)
+                PopTip.build().tip(CommonUtils.getStr("please_input_rfid_code"))
                 return@setDebouncedClickListener
             }
             if (rfid.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_rfid)
+                PopTip.build().tip(CommonUtils.getStr("please_input_rfid"))
                 return@setDebouncedClickListener
             }
             // 构造并回调(位置参数方式)

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateCardDialog.kt

@@ -77,7 +77,7 @@ class UpdateCardDialog(
         // 确认
         binding.confirm.setDebouncedClickListener {
             val nfc = binding.cardNfcEt.text.trim().toString()
-            if (nfc.isBlank()) return@setDebouncedClickListener PopTip.build().tip(R.string.please_input_card_nfc)
+            if (nfc.isBlank()) return@setDebouncedClickListener PopTip.build().tip(CommonUtils.getStr("please_input_card_nfc"))
             val statusChecked = binding.statusRg.checkedRadioButtonId == binding.activateRb.id
             val vo = UpdateCardDataVo(
                 card.cardId,

+ 3 - 3
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateKeyDialog.kt

@@ -52,15 +52,15 @@ class UpdateKeyDialog(
             val statusChecked = binding.statusRg.checkedRadioButtonId == binding.activateRb.id
 
             if (code.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_key_name)
+                PopTip.build().tip(CommonUtils.getStr("please_input_key_name"))
                 return@setDebouncedClickListener
             }
             if (nfc.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_key_nfc)
+                PopTip.build().tip(CommonUtils.getStr("please_input_key_nfc"))
                 return@setDebouncedClickListener
             }
             if (mac.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_key_mac)
+                PopTip.build().tip(CommonUtils.getStr("please_input_key_mac"))
                 return@setDebouncedClickListener
             }
             // 构建 DTO 并回调

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateLockDialog.kt

@@ -50,11 +50,11 @@ class UpdateLockDialog(
             val statusChecked = binding.statusRg.checkedRadioButtonId == binding.activateRb.id
 
             if (code.isBlank()) {
-                PopTip.build().tip(R.string.please_input_lock_code)
+                PopTip.build().tip(CommonUtils.getStr("please_input_lock_code"))
                 return@setDebouncedClickListener
             }
             if (nfc.isBlank()) {
-                PopTip.build().tip(R.string.please_input_lock_nfc)
+                PopTip.build().tip(CommonUtils.getStr("please_input_lock_nfc"))
                 return@setDebouncedClickListener
             }
             // 构造并回调

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateRfidTokenDialog.kt

@@ -70,11 +70,11 @@ class UpdateRfidTokenDialog(
             val statusChecked = binding.statusRg.checkedRadioButtonId == binding.activateRb.id
 
             if (code.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_rfid_code)
+                PopTip.build().tip(CommonUtils.getStr("please_input_rfid_code"))
                 return@setDebouncedClickListener
             }
             if (rfid.isEmpty()) {
-                PopTip.build().tip(R.string.please_input_rfid)
+                PopTip.build().tip(CommonUtils.getStr("please_input_rfid"))
                 return@setDebouncedClickListener
             }
             // 构造 DTO 并回调

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/dialog/user_info/AddFingerprintDialog.kt

@@ -23,7 +23,7 @@ class AddFingerprintDialog(
         dialog?.setMaskColor(CommonUtils.getColor(com.grkj.ui_base.R.color.scrim))
         dialog.isCancelable = false
         updateTip(binding.pressTip)
-        binding.pressTip.text = CommonUtils.getStr(com.grkj.ui_base.R.string.fingerprint_scan_tip,3).toString()
+        binding.pressTip.text = CommonUtils.getStr("fingerprint_scan_tip",3)
         binding.cancel.setDebouncedClickListener {
             onCancel(dialog)
         }

+ 6 - 6
app/src/main/java/com/grkj/iscs/features/main/fragment/common/EditJobWorkflowSettingFragment.kt

@@ -201,27 +201,27 @@ class EditJobWorkflowSettingFragment : BaseFormFragment<FragmentWorkflowSettingB
     private fun getStepIcon(workflowStep: IsJobTicketStep): Int {
         return when {
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.recognize_work_content).toString()
+                CommonUtils.getStr("recognize_work_content")
             ) == true -> R.mipmap.icon_loto_step_1
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.power_isolation_way).toString()
+                CommonUtils.getStr("power_isolation_way")
             ) == true -> R.mipmap.icon_loto_step_2
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.shutdown).toString()
+                CommonUtils.getStr("shutdown")
             ) == true -> R.mipmap.icon_loto_step_4
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.ensure_power_isolation).toString()
+                CommonUtils.getStr("ensure_power_isolation")
             ) == true -> R.mipmap.icon_loto_step_6
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.check_before_unlocking).toString()
+                CommonUtils.getStr("check_before_unlocking")
             ) == true -> R.mipmap.icon_loto_step_7
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.unlock_and_restore_switch).toString()
+                CommonUtils.getStr("unlock_and_restore_switch")
             ) == true -> R.mipmap.icon_loto_step_8
 
             workflowStep.enableSetLocker || workflowStep.enableSetColocker -> R.mipmap.icon_step_select_member

+ 6 - 6
app/src/main/java/com/grkj/iscs/features/main/fragment/common/EditSopWorkflowSettingFragment.kt

@@ -201,27 +201,27 @@ class EditSopWorkflowSettingFragment : BaseFormFragment<FragmentWorkflowSettingB
     private fun getStepIcon(workflowStep: IsSopWorkflowStep): Int {
         return when {
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.recognize_work_content).toString()
+                CommonUtils.getStr("recognize_work_content")
             ) == true -> R.mipmap.icon_loto_step_1
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.power_isolation_way).toString()
+                CommonUtils.getStr("power_isolation_way")
             ) == true -> R.mipmap.icon_loto_step_2
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.shutdown).toString()
+                CommonUtils.getStr("shutdown")
             ) == true -> R.mipmap.icon_loto_step_4
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.ensure_power_isolation).toString()
+                CommonUtils.getStr("ensure_power_isolation")
             ) == true -> R.mipmap.icon_loto_step_6
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.check_before_unlocking).toString()
+                CommonUtils.getStr("check_before_unlocking")
             ) == true -> R.mipmap.icon_loto_step_7
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.unlock_and_restore_switch).toString()
+                CommonUtils.getStr("unlock_and_restore_switch").toString()
             ) == true -> R.mipmap.icon_loto_step_8
 
             workflowStep.enableSetLocker || workflowStep.enableSetColocker -> R.mipmap.icon_step_select_member

+ 9 - 9
app/src/main/java/com/grkj/iscs/features/main/fragment/common/SelectMemberFragment.kt

@@ -78,11 +78,11 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
         }
         binding.confirm.setDebouncedClickListener {
             if (selectedLockerData.flatMap { it.jobTicketGroupDataList }.isEmpty()) {
-                PopTip.build().tip(com.grkj.ui_base.R.string.please_select_locker)
+                showToast(CommonUtils.getStr("please_select_locker"))
                 return@setDebouncedClickListener
             }
             if (canSelectColoker && selectedColockerData.isEmpty()) {
-                PopTip.build().tip(com.grkj.ui_base.R.string.please_select_colocker)
+                showToast(CommonUtils.getStr("please_select_colocker"))
                 return@setDebouncedClickListener
             }
             GlobalDataTempStore.getInstance()
@@ -133,7 +133,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
         itemBinding.root.setDebouncedClickListener {
             if (item.isSelected) {
                 if (!isLockerSelect && (selectedColockerData.size == 1 || (viewModel.ticketUsers.isNotEmpty() && viewModel.ticketUsers.find { it.userId == item.userId }?.jobStatus == "1"))) {
-                    PopTip.build().tip(com.grkj.ui_base.R.string.can_not_remove_current_colocker)
+                    showToast(CommonUtils.getStr("can_not_remove_current_colocker"))
                     return@setDebouncedClickListener
                 }
                 if (isLockerSelect) {
@@ -155,7 +155,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
                 if ((item.avatar
                         ?: viewModel.userBiometricDataVo.find { it.userId == item.userId }?.content) == null
                 ) {
-                    PopTip.build().tip(R.string.current_user_has_not_face_data)
+                    showToast(CommonUtils.getStr("current_user_has_not_face_data"))
                 }
                 if (isLockerSelect) {
                     selectedLockerData.find { it.jobTicketGroupInfo.groupId == viewModel.currentSelectGroup?.groupId }?.jobTicketGroupDataList?.clear()
@@ -198,7 +198,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
             itemBinding.groupName.isSelected = true
             viewModel.currentSelectGroup = item.jobTicketGroupInfo
             binding.selectMemberTip.text =
-                getString(R.string.select_locker_tip, viewModel.currentSelectGroup?.groupName ?: "")
+                CommonUtils.getStr("select_locker_tip", viewModel.currentSelectGroup?.groupName ?: "")
             binding.allUserRv.models =
                 viewModel.userData.filter { it.roleKeys.contains(RoleEnum.JTLOCKER.roleKey) }
                     .onEach {
@@ -248,7 +248,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
         } ?: itemBinding.lockerIcon.setImageResource(R.drawable.icon_select_member)
         itemBinding.root.setDebouncedClickListener {
             if (selectedLockerData.find { it.jobTicketGroupInfo.groupId == groupData.groupId }?.jobTicketGroupDataList?.size == 1 && viewModel.jobTicketData != null && viewModel.jobTicketData?.ticketStatus != JobTicketStatusEnum.SELECT_MEMBER.status) {
-                PopTip.build().tip(com.grkj.ui_base.R.string.can_not_remove_current_locker)
+                showToast(CommonUtils.getStr("can_not_remove_current_locker"))
                 return@setDebouncedClickListener
             }
             if (isLockerSelect) {
@@ -299,7 +299,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
         } ?: itemBinding.lockerIcon.setImageResource(R.drawable.icon_select_member)
         itemBinding.root.setDebouncedClickListener {
             if (selectedColockerData.size == 1 || (viewModel.ticketUsers.isNotEmpty() && viewModel.ticketUsers.find { it.userId == item.userId }?.jobStatus == "1")) {
-                PopTip.build().tip(com.grkj.ui_base.R.string.can_not_remove_current_colocker)
+                showToast(CommonUtils.getStr("can_not_remove_current_colocker"))
                 return@setDebouncedClickListener
             }
             selectedColockerData.removeIf { it.userId == item.userId }
@@ -325,7 +325,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
         isLockerSelect = true
         checkSelectArea()
         binding.selectMemberTip.text =
-            getString(R.string.select_locker_tip, viewModel.currentSelectGroup?.groupName ?: "")
+            CommonUtils.getStr("select_locker_tip", viewModel.currentSelectGroup?.groupName ?: "")
         binding.lockerRv.models = selectedLockerData
         binding.allUserRv.models =
             viewModel.userData.filter {
@@ -343,7 +343,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
     private fun setColockerData() {
         isLockerSelect = false
         checkSelectArea()
-        binding.selectMemberTip.text = CommonUtils.getStr(R.string.select_colocker_tip)
+        binding.selectMemberTip.text = CommonUtils.getStr("select_colocker_tip")
         binding.colockerRv.models = selectedColockerData
         binding.allUserRv.models =
             viewModel.userData.filter { it.roleKeys.contains(RoleEnum.JTCOLOCKER.roleKey) && it.userId !in selectedColockerData.map { it.userId } }

+ 7 - 7
app/src/main/java/com/grkj/iscs/features/main/fragment/common/SelectPointFragment.kt

@@ -46,7 +46,7 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
         }
         binding.confirm.setDebouncedClickListener {
             if (viewModel.selectedPointData.any { it.jobTicketGroupDataList.isEmpty() }){
-                showToast(CommonUtils.getStr(R.string.group_at_least_has_one_point).toString())
+                showToast(CommonUtils.getStr("group_at_least_has_one_point"))
                 return@setDebouncedClickListener
             }
             GlobalDataTempStore.getInstance()
@@ -124,7 +124,7 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
             adapter.notifyDataSetChanged()
         }
         itemBinding.editOrSave.setDebouncedClickListener {
-            if (itemBinding.editOrSave.text == getString(R.string.edit)) {
+            if (itemBinding.editOrSave.text == CommonUtils.getStr("edit")) {
                 itemBinding.groupName.isEnabled = true
                 itemBinding.groupName.isFocusable = true
                 itemBinding.groupName.isFocusableInTouchMode = true
@@ -133,10 +133,10 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
                 val imm =
                     requireContext().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                 imm.showSoftInput(itemBinding.groupName, InputMethodManager.SHOW_IMPLICIT)
-                itemBinding.editOrSave.text = getString(R.string.save)
+                itemBinding.editOrSave.text = CommonUtils.getStr("save")
             } else {
                 if (itemBinding.groupName.text.toString().isEmpty()) {
-                    showToast(getString(R.string.group_name_must_not_empty))
+                    showToast(CommonUtils.getStr("group_name_must_not_empty"))
                     return@setDebouncedClickListener
                 }
                 itemBinding.groupName.isFocusable = false
@@ -147,7 +147,7 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
                     requireContext().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                 imm.hideSoftInputFromWindow(itemBinding.groupName.windowToken, 0)
                 item.jobTicketGroupInfo.groupName = itemBinding.groupName.text.toString()
-                itemBinding.editOrSave.text = getString(R.string.edit)
+                itemBinding.editOrSave.text = CommonUtils.getStr("edit")
                 adapter?.notifyDataSetChanged()
             }
         }
@@ -189,7 +189,7 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
         itemBinding.pointIcon.isSelected = item.isSelected
         itemBinding.root.setDebouncedClickListener {
             if (viewModel.selectedPointData.find { it.jobTicketGroupInfo.groupId == viewModel.currentSelectGroupId } == null) {
-                showToast(CommonUtils.getStr(R.string.please_select_group).toString())
+                showToast(CommonUtils.getStr("please_select_group"))
                 return@setDebouncedClickListener
             }
             item.isSelected = true
@@ -214,7 +214,7 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
                     Type.pointGroupType
                 ) ?: mutableListOf()
         if (viewModel.selectedPointData.isEmpty()) {
-            val emptyOriginGroupName = getString(R.string.selected_point_info_title)
+            val emptyOriginGroupName = CommonUtils.getStr("selected_point_info_title")
             val jobTicketGroupVo = JobTicketGroupInfoVo(groupName = emptyOriginGroupName)
             viewModel.selectedPointData.add(
                 JobTicketGroupDataVo(jobTicketGroupVo, mutableListOf())

+ 6 - 6
app/src/main/java/com/grkj/iscs/features/main/fragment/common/WorkflowSettingFragment.kt

@@ -203,27 +203,27 @@ class WorkflowSettingFragment : BaseFormFragment<FragmentWorkflowSettingBinding>
     private fun getStepIcon(workflowStep: WorkflowStep): Int {
         return when {
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.recognize_work_content).toString()
+                CommonUtils.getStr("recognize_work_content")
             ) == true -> R.mipmap.icon_loto_step_1
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.power_isolation_way).toString()
+                CommonUtils.getStr("power_isolation_way")
             ) == true -> R.mipmap.icon_loto_step_2
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.shutdown).toString()
+                CommonUtils.getStr("shutdown")
             ) == true -> R.mipmap.icon_loto_step_4
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.ensure_power_isolation).toString()
+                CommonUtils.getStr("ensure_power_isolation")
             ) == true -> R.mipmap.icon_loto_step_6
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.check_before_unlocking).toString()
+                CommonUtils.getStr("check_before_unlocking")
             ) == true -> R.mipmap.icon_loto_step_7
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.unlock_and_restore_switch).toString()
+                CommonUtils.getStr("unlock_and_restore_switch")
             ) == true -> R.mipmap.icon_loto_step_8
 
             workflowStep.enableSetLocker || workflowStep.enableSetColocker -> R.mipmap.icon_step_select_member

+ 255 - 0
app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/BackupAndRestoreFragment.kt

@@ -0,0 +1,255 @@
+package com.grkj.iscs.features.main.fragment.data_manage
+
+import androidx.fragment.app.viewModels
+import com.drake.brv.BindingAdapter
+import com.drake.brv.utils.linear
+import com.drake.brv.utils.models
+import com.drake.brv.utils.setup
+import com.grkj.data.data.EventConstants
+import com.grkj.data.database.BackupScheduler
+import com.grkj.data.database.RoomBackupManager
+import com.grkj.data.enums.BackupFrequencyWeekEnum
+import com.grkj.data.utils.event.BackupCompleteEvent
+import com.grkj.iscs.R
+import com.grkj.iscs.databinding.FragmentBackupAndRestoreBinding
+import com.grkj.iscs.databinding.ItemBackupBinding
+import com.grkj.iscs.features.main.dialog.TextDropDownDialog
+import com.grkj.iscs.features.main.viewmodel.data_manage.BackupAndRestoreViewModel
+import com.grkj.shared.model.EventBean
+import com.grkj.shared.utils.FilePickerUtils
+import com.grkj.shared.utils.SAFHelper.copyFileToDir
+import com.grkj.shared.utils.SAFHelper.moveFileToDir
+import com.grkj.shared.utils.i18n.I18nManager
+import com.grkj.ui_base.base.BaseFragment
+import com.grkj.ui_base.dialog.TipDialog
+import com.grkj.ui_base.dialog.WheelTimePickerDialog
+import com.grkj.ui_base.utils.event.LoadingEvent
+import com.sik.sikcore.extension.setDebouncedClickListener
+import dagger.hilt.android.AndroidEntryPoint
+
+/**
+ * 备份/还原界面
+ */
+@AndroidEntryPoint
+class BackupAndRestoreFragment : BaseFragment<FragmentBackupAndRestoreBinding>() {
+    private val viewModel: BackupAndRestoreViewModel by viewModels()
+
+    override fun getLayoutId(): Int {
+        return R.layout.fragment_backup_and_restore
+    }
+
+    /**
+     * 文件选择器
+     */
+    private lateinit var filePickerUtils: FilePickerUtils
+
+    override fun initView() {
+        binding.back.setDebouncedClickListener {
+            navController.popBackStack()
+        }
+        binding.maximumNumberOfBackups.setText("${viewModel.scheduleData.keep}")
+        binding.statusRg.setOnCheckedChangeListener(null)
+        binding.enableRb.isChecked = viewModel.scheduleData.enabled
+        binding.disableRb.isChecked = !viewModel.scheduleData.enabled
+        filePickerUtils = FilePickerUtils(this)
+        binding.statusRg.setOnCheckedChangeListener { _, checkedId ->
+            viewModel.scheduleData.enabled = checkedId == binding.enableRb.id
+        }
+        viewModel.selectedBackupFrequencyData =
+            BackupFrequencyWeekEnum.getSelectedDaysText(viewModel.scheduleData.daysMask)
+        binding.backupFrequency.text =
+            if (viewModel.selectedBackupFrequencyData.size == 7) I18nManager.t("backup_frequency_every_day")
+            else viewModel.selectedBackupFrequencyData.joinToString(",") { it.showText }
+        binding.backupFrequency.setDebouncedClickListener {
+            TextDropDownDialog.showMulti(
+                viewModel.backupFrequencyData,
+                binding.backupFrequency
+            ) { selectedData ->
+                viewModel.selectedBackupFrequencyData = BackupFrequencyWeekEnum.values()
+                    .filter {
+                        selectedData?.map { it.getShowText() }?.contains(it.showText) == true
+                    }
+                binding.backupFrequency.text =
+                    if (viewModel.selectedBackupFrequencyData.size == 7) I18nManager.t("backup_frequency_every_day")
+                    else viewModel.selectedBackupFrequencyData.joinToString(",") { it.showText }
+            }
+        }
+        binding.save.setDebouncedClickListener {
+            if (checkSchedule()) {
+                viewModel.scheduleData.keep = binding.maximumNumberOfBackups.text.toString().toInt()
+                viewModel.selectedBackupFrequencyData.map {
+                    it.type
+                }.let {
+                    viewModel.scheduleData.daysMask =
+                        BackupFrequencyWeekEnum.getMaskFromTypes(it)
+                }
+                viewModel.setAndApply().observe(this) {
+                    showToast(I18nManager.t("save_success"))
+                }
+            }
+        }
+        binding.backupPath.text = RoomBackupManager.backupDir.absolutePath
+        binding.backupPath.isEnabled = false
+        binding.backupTime.text = "${viewModel.scheduleData.hour}:${viewModel.scheduleData.minute}"
+        binding.backupTime.setDebouncedClickListener {
+            val selectedTime = "${viewModel.scheduleData.hour}:${viewModel.scheduleData.minute}"
+            WheelTimePickerDialog.show(selectedTime) {
+                val split = it.split(":")
+                viewModel.scheduleData.hour = split[0].toInt()
+                viewModel.scheduleData.minute = split[1].toInt()
+                binding.backupTime.text = it
+            }
+        }
+        binding.backupNow.setDebouncedClickListener {
+            if (viewModel.backupItemDatas.size == viewModel.scheduleData.keep) {
+                TipDialog.showInfo(I18nManager.t("max_backup_tip"), onConfirmClick = {
+                    LoadingEvent.sendLoadingEvent(I18nManager.t("backup_now_please_wait"))
+                    BackupScheduler.backupNow(requireContext())
+                })
+            } else {
+                LoadingEvent.sendLoadingEvent(I18nManager.t("backup_now_please_wait"))
+                BackupScheduler.backupNow(requireContext())
+            }
+        }
+        binding.batchDelete.setDebouncedClickListener {
+            TipDialog.showInfo(
+                I18nManager.t("delete_selected_backup_file_confirm"),
+                onConfirmClick = {
+                    viewModel.deleteBackupFiles(viewModel.backupItemDatas.filter { it.isSelected })
+                        .observe(this) {
+                            getData()
+                            showToast(I18nManager.t("delete_success"))
+                            viewModel.backupItemDatas.forEach {
+                                it.isSelected = false
+                            }
+                            checkAndSetSelectAllListener()
+                            binding.listRv.adapter?.notifyDataSetChanged()
+                        }
+                })
+        }
+        binding.batchExport.setDebouncedClickListener {
+            filePickerUtils.pickDirectory { treeUri ->
+                viewModel.backupItemDatas.filter { it.isSelected }.forEach {
+                    treeUri?.let { treeUri ->
+                        requireContext().copyFileToDir(treeUri, it.file)
+                    }
+                }
+                viewModel.backupItemDatas.forEach {
+                    it.isSelected = false
+                }
+                checkAndSetSelectAllListener()
+                binding.listRv.adapter?.notifyDataSetChanged()
+                showToast(I18nManager.t("export_success"))
+            }
+        }
+        binding.state.emptyLayout = com.grkj.ui_base.R.layout.layout_no_backup
+        binding.listRv.linear().setup {
+            addType<RoomBackupManager.BackupItem>(R.layout.item_backup)
+            onBind {
+                onRVListBinding(this)
+            }
+        }
+    }
+
+    /**
+     * 检查并设置是否全选
+     */
+    private fun checkAndSetSelectAllListener() {
+        binding.selectAll.setOnCheckedChangeListener(null)
+        binding.selectAll.isChecked =
+            viewModel.backupItemDatas.isNotEmpty() && viewModel.backupItemDatas.all { it.isSelected }
+        binding.selectAll.setOnCheckedChangeListener { v, isChecked ->
+            viewModel.backupItemDatas.forEach { it.isSelected = isChecked }
+            binding.listRv.adapter?.notifyDataSetChanged()
+        }
+    }
+
+    override fun onEvent(event: EventBean<Any>) {
+        super.onEvent(event)
+        when (event.code) {
+            EventConstants.EVENT_BACKUP_COMPLETE_CODE -> {
+                (event.data as BackupCompleteEvent).let {
+                    LoadingEvent.sendLoadingEvent()
+                    if (it.backupResult) {
+                        showToast(I18nManager.t("backup_success"))
+                    } else {
+                        showToast(I18nManager.t("backup_failed"))
+                    }
+                    getData()
+                }
+            }
+        }
+    }
+
+    /**
+     * 检查计划
+     */
+    private fun checkSchedule(): Boolean {
+        if (viewModel.selectedBackupFrequencyData.isEmpty()) {
+            showToast(I18nManager.t("please_select_backup_frequency"))
+            return false
+        }
+        val keep = binding.maximumNumberOfBackups.text.toString().toInt()
+        if (keep !in 5..20) {
+            showToast(I18nManager.t("maximumNumberOfBackupsNotCorrect"))
+            return false
+        }
+        return true
+    }
+
+    override fun initData() {
+        super.initData()
+        getData()
+    }
+
+    private fun getData() {
+        LoadingEvent.sendLoadingEvent(I18nManager.t("loading_backup"))
+        viewModel.getBackupList().observe(this) {
+            LoadingEvent.sendLoadingEvent()
+            if (it.isEmpty()) {
+                binding.state.showEmpty()
+            } else {
+                binding.state.showContent()
+            }
+            binding.listRv.models = it
+            checkAndSetSelectAllListener()
+        }
+    }
+
+    private fun BindingAdapter.BindingViewHolder.onRVListBinding(holder: BindingAdapter.BindingViewHolder) {
+        val item = getModel<RoomBackupManager.BackupItem>()
+        val itemBinding = getBinding<ItemBackupBinding>()
+        itemBinding.backupName.text = item.name
+        itemBinding.select.setOnCheckedChangeListener(null)
+        itemBinding.select.isChecked = item.isSelected
+        itemBinding.select.setOnCheckedChangeListener { v, isChecked ->
+            item.isSelected = isChecked
+            checkAndSetSelectAllListener()
+        }
+        itemBinding.delete.setDebouncedClickListener {
+            TipDialog.showInfo(I18nManager.t("delete_backup_file_confirm"), onConfirmClick = {
+                viewModel.deleteBackupFile(item).observe(this@BackupAndRestoreFragment) {
+                    showToast(I18nManager.t("delete_success"))
+                    getData()
+                }
+            })
+        }
+        itemBinding.export.setDebouncedClickListener {
+            filePickerUtils.pickDirectory { treeUri ->
+                treeUri?.let { treeUri ->
+                    requireContext().copyFileToDir(treeUri, item.file)
+                }
+                showToast(I18nManager.t("export_success"))
+            }
+        }
+        itemBinding.restore.setDebouncedClickListener {
+            TipDialog.showInfo(I18nManager.t("restore_backup_confirm"), onConfirmClick = {
+                LoadingEvent.sendLoadingEvent(I18nManager.t("backup_restoring"))
+                viewModel.restoreBackUp(item).observe(this@BackupAndRestoreFragment) {
+                    LoadingEvent.sendLoadingEvent()
+                    showToast(I18nManager.t("restore_backup_success"))
+                }
+            })
+        }
+    }
+}

+ 10 - 4
app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/DataManageHomeFragment.kt

@@ -1,16 +1,12 @@
 package com.grkj.iscs.features.main.fragment.data_manage
 
-import android.widget.LinearLayout
 import androidx.annotation.OptIn
 import com.drake.brv.BindingAdapter
 import com.drake.brv.annotaion.DividerOrientation
 import com.drake.brv.utils.dividerSpace
 import com.drake.brv.utils.grid
-import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
-import com.google.android.material.badge.BadgeDrawable
-import com.google.android.material.badge.BadgeUtils
 import com.google.android.material.badge.ExperimentalBadgeUtils
 import com.grkj.data.data.MainDomainData
 import com.grkj.data.enums.RoleFunctionalPermissionsEnum
@@ -53,6 +49,12 @@ class DataManageHomeFragment : BaseFragment<FragmentDataManageHomeBinding>() {
             RoleFunctionalPermissionsEnum.POINT_MANAGE.description,
             RoleFunctionalPermissionsEnum.POINT_MANAGE.functionalPermission
         ),
+        MenuItemEntity(
+            4,
+            R.mipmap.icon_backup_and_restore,
+            RoleFunctionalPermissionsEnum.BACKUP_AND_RESTORE.description,
+            RoleFunctionalPermissionsEnum.BACKUP_AND_RESTORE.functionalPermission
+        ),
     )
 
     override fun getLayoutId(): Int {
@@ -119,6 +121,10 @@ class DataManageHomeFragment : BaseFragment<FragmentDataManageHomeBinding>() {
             3 -> {
                 navController.navigate(R.id.action_dataManageHomeFragment_to_pointMangeFragment)
             }
+
+            4 -> {
+                navController.navigate(R.id.action_dataManageHomeFragment_to_backupAndRestoreFragment)
+            }
         }
     }
 }

+ 14 - 22
app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/PointMangeFragment.kt

@@ -77,10 +77,9 @@ class PointMangeFragment : BaseFragment<FragmentPointManageBinding>() {
                         dialog.dismiss()
                         if (it) {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_succeed"),
                                 dialogType = TipDialog.DialogType.SUCCESS,
-                                msg = CommonUtils.getStr(R.string.add_point_succeed).toString(),
+                                msg = CommonUtils.getStr("add_point_succeed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -89,10 +88,9 @@ class PointMangeFragment : BaseFragment<FragmentPointManageBinding>() {
                             )
                         } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_failed"),
                                 dialogType = TipDialog.DialogType.ERROR,
-                                msg = CommonUtils.getStr(R.string.add_point_failed).toString(),
+                                msg = CommonUtils.getStr("add_point_failed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -173,7 +171,7 @@ class PointMangeFragment : BaseFragment<FragmentPointManageBinding>() {
         }
         itemBinding.root.setDebouncedClickListener {
             if (item.pointId in viewModel.inUsePointIds) {
-                showToast(CommonUtils.getStr(R.string.point_in_use).toString())
+                showToast(CommonUtils.getStr("point_in_use"))
                 return@setDebouncedClickListener
             }
             UpdatePointDialog.show(item, viewModel.workstationData.map {
@@ -204,11 +202,9 @@ class PointMangeFragment : BaseFragment<FragmentPointManageBinding>() {
                     dialog.dismiss()
                     if (it) {
                         TipDialog.show(
-                            title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                .toString(),
+                            title = CommonUtils.getStr("action_succeed"),
                             dialogType = TipDialog.DialogType.SUCCESS,
-                            msg = CommonUtils.getStr(R.string.update_point_succeed)
-                                .toString(),
+                            msg = CommonUtils.getStr("update_point_succeed"),
                             countDownTime = 10,
                             showConfirm = false,
                             onCancelClick = {
@@ -217,11 +213,9 @@ class PointMangeFragment : BaseFragment<FragmentPointManageBinding>() {
                         )
                     } else {
                         TipDialog.show(
-                            title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
-                                .toString(),
+                            title = CommonUtils.getStr("action_failed"),
                             dialogType = TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(R.string.update_point_failed)
-                                .toString(),
+                            msg = CommonUtils.getStr("update_point_failed"),
                             countDownTime = 10,
                             showConfirm = false,
                             onCancelClick = {
@@ -267,16 +261,16 @@ class PointMangeFragment : BaseFragment<FragmentPointManageBinding>() {
 
     private fun deleteSelectPoint() {
         if (viewModel.pointManageDataList.none { it.isSelected }) {
-            PopTip.build().tip(R.string.please_select_point)
+            showToast(CommonUtils.getStr("please_select_point"))
             return
         }
         if (viewModel.pointManageDataList.filter { it.isSelected }.map { it.pointId }
                 .any { it in viewModel.inUsePointIds }) {
-            showToast(CommonUtils.getStr(R.string.selected_point_already_in_use).toString())
+            showToast(CommonUtils.getStr("selected_point_already_in_use"))
             return
         }
         TipDialog.show(
-            msg = CommonUtils.getStr(R.string.check_delete_point).toString(),
+            msg = CommonUtils.getStr("check_delete_point"),
             countDownTime = 10,
             onConfirmClick = {
                 viewModel.deleteSelectedPoints(viewModel.pointManageDataList.filter { it.isSelected }
@@ -284,8 +278,7 @@ class PointMangeFragment : BaseFragment<FragmentPointManageBinding>() {
                     if (it) {
                         TipDialog.show(
                             dialogType = TipDialog.DialogType.SUCCESS,
-                            msg = CommonUtils.getStr(R.string.point_manage_delete_succeed)
-                                .toString(),
+                            msg = CommonUtils.getStr("point_manage_delete_succeed"),
                             showConfirm = false,
                             countDownTime = 10
                         )
@@ -293,8 +286,7 @@ class PointMangeFragment : BaseFragment<FragmentPointManageBinding>() {
                     } else {
                         TipDialog.show(
                             dialogType = TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(R.string.point_manage_delete_failed)
-                                .toString(),
+                            msg = CommonUtils.getStr("point_manage_delete_failed"),
                             showConfirm = false,
                             countDownTime = 10
                         )

+ 19 - 28
app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/RoleManageFragment.kt

@@ -53,10 +53,9 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
             AddRoleDialog.show { data, dialog ->
                 if (data.roleKeys in RoleEnum.values().map { it.roleKey }) {
                     TipDialog.show(
-                        title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
-                            .toString(),
+                        title = CommonUtils.getStr("action_failed"),
                         dialogType = TipDialog.DialogType.ERROR,
-                        msg = CommonUtils.getStr(R.string.role_key_already_exists).toString(),
+                        msg = CommonUtils.getStr("role_key_already_exists"),
                         countDownTime = 10,
                         showConfirm = false,
                         onCancelClick = {
@@ -70,10 +69,9 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
                         dialog.dismiss()
                         if (it) {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_succeed"),
                                 dialogType = TipDialog.DialogType.SUCCESS,
-                                msg = CommonUtils.getStr(R.string.add_role_succeed).toString(),
+                                msg = CommonUtils.getStr("add_role_succeed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -82,10 +80,9 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
                             )
                         } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_failed"),
                                 dialogType = TipDialog.DialogType.ERROR,
-                                msg = CommonUtils.getStr(R.string.add_role_failed).toString(),
+                                msg = CommonUtils.getStr("add_role_failed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -147,7 +144,7 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
         }
         itemBinding.root.setDebouncedClickListener {
             if (item.roleKey== RoleEnum.ADMIN.roleKey){
-                showToast(CommonUtils.getStr(R.string.admin_role_can_not_edit).toString())
+                showToast(CommonUtils.getStr("admin_role_can_not_edit"))
                 return@setDebouncedClickListener
             }
             viewModel.getFunctionalPermissionsByRoleId(item.roleId)
@@ -164,10 +161,10 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
                                 .map { it.roleKey } && !data.isPreset
                         ) {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
+                                title = CommonUtils.getStr("action_failed")
                                     .toString(),
                                 dialogType = TipDialog.DialogType.ERROR,
-                                msg = CommonUtils.getStr(R.string.role_key_already_exists)
+                                msg = CommonUtils.getStr("role_key_already_exists")
                                     .toString(),
                                 countDownTime = 10,
                                 showConfirm = false,
@@ -181,11 +178,9 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
                             dialog.dismiss()
                             if (it) {
                                 TipDialog.show(
-                                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                        .toString(),
+                                    title = CommonUtils.getStr("action_succeed"),
                                     dialogType = TipDialog.DialogType.SUCCESS,
-                                    msg = CommonUtils.getStr(R.string.update_role_succeed)
-                                        .toString(),
+                                    msg = CommonUtils.getStr("update_role_succeed"),
                                     countDownTime = 10,
                                     showConfirm = false,
                                     onCancelClick = {
@@ -194,11 +189,9 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
                                 )
                             } else {
                                 TipDialog.show(
-                                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
-                                        .toString(),
+                                    title = CommonUtils.getStr("action_failed"),
                                     dialogType = TipDialog.DialogType.ERROR,
-                                    msg = CommonUtils.getStr(R.string.update_role_failed)
-                                        .toString(),
+                                    msg = CommonUtils.getStr("update_role_failed"),
                                     countDownTime = 10,
                                     showConfirm = false,
                                     onCancelClick = {
@@ -244,19 +237,19 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
 
     private fun deleteSelect() {
         if (viewModel.roleManageDataList.none { it.isSelected }) {
-            PopTip.build().tip(R.string.please_select_role)
+            showToast(CommonUtils.getStr("please_select_role"))
             return
         }
         if (viewModel.roleManageDataList.any {
                 it.isSelected && it.roleKey in RoleEnum.values().map { it.roleKey }
             }) {
-            PopTip.build().tip(R.string.role_in_preset_tip)
+            showToast(CommonUtils.getStr("role_in_preset_tip"))
             return
         }
         viewModel.checkRoleInUse().observe(this){
             if (!it){
                 TipDialog.show(
-                    msg = CommonUtils.getStr(R.string.check_delete_role).toString(),
+                    msg = CommonUtils.getStr("check_delete_role"),
                     countDownTime = 10,
                     onConfirmClick = {
                         viewModel.deleteSelectedRoles(viewModel.roleManageDataList.filter { it.isSelected }
@@ -264,8 +257,7 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
                             if (it) {
                                 TipDialog.show(
                                     dialogType = TipDialog.DialogType.SUCCESS,
-                                    msg = CommonUtils.getStr(R.string.role_manage_delete_succeed)
-                                        .toString(),
+                                    msg = CommonUtils.getStr("role_manage_delete_succeed"),
                                     showConfirm = false,
                                     countDownTime = 10
                                 )
@@ -273,8 +265,7 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
                             } else {
                                 TipDialog.show(
                                     dialogType = TipDialog.DialogType.ERROR,
-                                    msg = CommonUtils.getStr(R.string.role_manage_delete_failed)
-                                        .toString(),
+                                    msg = CommonUtils.getStr("role_manage_delete_failed"),
                                     showConfirm = false,
                                     countDownTime = 10
                                 )
@@ -282,7 +273,7 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
                         }
                     })
             }else{
-                TipDialog.showError(CommonUtils.getStr(R.string.role_in_use).toString())
+                TipDialog.showError(CommonUtils.getStr("role_in_use").toString())
             }
         }
 

+ 11 - 18
app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/UserManageFragment.kt

@@ -77,10 +77,9 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
                             dialog.dismiss()
                             if (it) {
                                 TipDialog.show(
-                                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                        .toString(),
+                                    title = CommonUtils.getStr("action_succeed"),
                                     dialogType = TipDialog.DialogType.SUCCESS,
-                                    msg = CommonUtils.getStr(R.string.add_user_succeed).toString(),
+                                    msg = CommonUtils.getStr("add_user_succeed"),
                                     countDownTime = 10,
                                     showConfirm = false,
                                     onCancelClick = {
@@ -171,11 +170,9 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
                         dialog.dismiss()
                         if (it) {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_succeed"),
                                 dialogType = TipDialog.DialogType.SUCCESS,
-                                msg = CommonUtils.getStr(R.string.update_user_succeed)
-                                    .toString(),
+                                msg = CommonUtils.getStr("update_user_succeed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -184,11 +181,9 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
                             )
                         } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_failed"),
                                 dialogType = TipDialog.DialogType.ERROR,
-                                msg = CommonUtils.getStr(R.string.update_user_failed)
-                                    .toString(),
+                                msg = CommonUtils.getStr("update_user_failed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -233,13 +228,13 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
 
     private fun deleteSelectUser() {
         if (viewModel.userManageDataList.none { it.isSelected }) {
-            PopTip.build().tip(R.string.please_select_user)
+            showToast(CommonUtils.getStr("please_select_user"))
             return
         }
         viewModel.userInProgressJob().observe(this){
             if (!it){
                 TipDialog.show(
-                    msg = CommonUtils.getStr(R.string.check_delete_user).toString(),
+                    msg = CommonUtils.getStr("check_delete_user"),
                     countDownTime = 10,
                     onConfirmClick = {
                         viewModel.deleteSelectedUsers(viewModel.userManageDataList.filter { it.isSelected }
@@ -247,8 +242,7 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
                             if (it) {
                                 TipDialog.show(
                                     dialogType = TipDialog.DialogType.SUCCESS,
-                                    msg = CommonUtils.getStr(R.string.user_manage_delete_succeed)
-                                        .toString(),
+                                    msg = CommonUtils.getStr("user_manage_delete_succeed"),
                                     showConfirm = false,
                                     countDownTime = 10
                                 )
@@ -256,8 +250,7 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
                             } else {
                                 TipDialog.show(
                                     dialogType = TipDialog.DialogType.ERROR,
-                                    msg = CommonUtils.getStr(R.string.user_manage_delete_failed)
-                                        .toString(),
+                                    msg = CommonUtils.getStr("user_manage_delete_failed"),
                                     showConfirm = false,
                                     countDownTime = 10
                                 )
@@ -265,7 +258,7 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
                         }
                     })
             }else{
-                TipDialog.showError(CommonUtils.getStr(R.string.has_user_in_progress_job).toString())
+                TipDialog.showError(CommonUtils.getStr("has_user_in_progress_job"))
             }
         }
     }

+ 23 - 34
app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/WorkstationManageFragment.kt

@@ -43,7 +43,7 @@ class WorkstationManageFragment : BaseFragment<FragmentWorkstationManageBinding>
         }
         binding.edit.setDebouncedClickListener {
             if (viewModel.workstationManageData.none { it.isSelected }) {
-                PopTip.build().tip(R.string.please_select_workstation)
+                showToast(CommonUtils.getStr("please_select_workstation"))
                 return@setDebouncedClickListener
             }
             UpdateWorkstationDialog.show(viewModel.workstationManageData.first { it.isSelected }.workstationName) { data, dialog ->
@@ -54,11 +54,9 @@ class WorkstationManageFragment : BaseFragment<FragmentWorkstationManageBinding>
                         dialog.dismiss()
                         if (it) {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_succeed"),
                                 dialogType = TipDialog.DialogType.SUCCESS,
-                                msg = CommonUtils.getStr(R.string.update_workstation_succeed)
-                                    .toString(),
+                                msg = CommonUtils.getStr("update_workstation_succeed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -67,11 +65,9 @@ class WorkstationManageFragment : BaseFragment<FragmentWorkstationManageBinding>
                             )
                         } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_failed"),
                                 dialogType = TipDialog.DialogType.ERROR,
-                                msg = CommonUtils.getStr(R.string.update_workstation_failed)
-                                    .toString(),
+                                msg = CommonUtils.getStr("update_workstation_failed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -90,11 +86,9 @@ class WorkstationManageFragment : BaseFragment<FragmentWorkstationManageBinding>
                         dialog.dismiss()
                         if (it) {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_succeed"),
                                 dialogType = TipDialog.DialogType.SUCCESS,
-                                msg = CommonUtils.getStr(R.string.add_workstation_succeed)
-                                    .toString(),
+                                msg = CommonUtils.getStr("add_workstation_succeed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -103,11 +97,9 @@ class WorkstationManageFragment : BaseFragment<FragmentWorkstationManageBinding>
                             )
                         } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_failed"),
                                 dialogType = TipDialog.DialogType.ERROR,
-                                msg = CommonUtils.getStr(R.string.add_workstation_failed)
-                                    .toString(),
+                                msg = CommonUtils.getStr("add_workstation_failed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -124,27 +116,27 @@ class WorkstationManageFragment : BaseFragment<FragmentWorkstationManageBinding>
         }
         binding.moveUp.setDebouncedClickListener {
             if (viewModel.workstationManageData.none { it.isSelected }) {
-                PopTip.build().tip(R.string.please_select_workstation)
+                showToast(CommonUtils.getStr("please_select_workstation"))
                 return@setDebouncedClickListener
             }
             viewModel.moveUp().observe(this) {
                 if (it) {
                     getWorkstationManageData()
                 } else {
-                    PopTip.build().tip(R.string.workstation_is_in_top)
+                    showToast(CommonUtils.getStr("workstation_is_in_top"))
                 }
             }
         }
         binding.moveDown.setDebouncedClickListener {
             if (viewModel.workstationManageData.none { it.isSelected }) {
-                PopTip.build().tip(R.string.please_select_workstation)
+                showToast(CommonUtils.getStr("please_select_workstation"))
                 return@setDebouncedClickListener
             }
             viewModel.moveDown().observe(this) {
                 if (it) {
                     getWorkstationManageData()
                 } else {
-                    PopTip.build().tip(R.string.workstation_is_in_bottom)
+                    showToast(CommonUtils.getStr("workstation_is_in_bottom"))
                 }
             }
         }
@@ -208,16 +200,15 @@ class WorkstationManageFragment : BaseFragment<FragmentWorkstationManageBinding>
 
     private fun deleteSelectWorkstation() {
         if (viewModel.workstationManageData.none { it.isSelected }) {
-            PopTip.build().tip(R.string.please_select_workstation)
+            showToast(CommonUtils.getStr("please_select_workstation"))
             return
         }
         val deleteItem = viewModel.workstationManageData.first { it.isSelected }
         TipDialog.show(
             msg = CommonUtils.getStr(
-                R.string.check_delete_workstation,
-                args = listOf(deleteItem.workstationName.toString()).toTypedArray()
-            )
-                .toString(),
+                "check_delete_workstation",
+                args = listOf(deleteItem.workstationName).toTypedArray()
+            ),
             countDownTime = 10,
             onConfirmClick = {
                 viewModel.deleteWorkstation().observe(this) {
@@ -225,10 +216,9 @@ class WorkstationManageFragment : BaseFragment<FragmentWorkstationManageBinding>
                         TipDialog.show(
                             dialogType = TipDialog.DialogType.SUCCESS,
                             msg = CommonUtils.getStr(
-                                R.string.workstation_manage_delete_succeed,
-                                args = listOf(deleteItem.workstationName.toString()).toTypedArray()
-                            )
-                                .toString(),
+                                "workstation_manage_delete_succeed",
+                                args = listOf(deleteItem.workstationName).toTypedArray()
+                            ),
                             showConfirm = false,
                             countDownTime = 10
                         )
@@ -237,10 +227,9 @@ class WorkstationManageFragment : BaseFragment<FragmentWorkstationManageBinding>
                         TipDialog.show(
                             dialogType = TipDialog.DialogType.ERROR,
                             msg = CommonUtils.getStr(
-                                R.string.workstation_manage_delete_failed,
-                                args = listOf(deleteItem.workstationName.toString()).toTypedArray()
-                            )
-                                .toString(),
+                                "workstation_manage_delete_failed",
+                                args = listOf(deleteItem.workstationName).toTypedArray()
+                            ),
                             showConfirm = false,
                             countDownTime = 10
                         )

+ 22 - 23
app/src/main/java/com/grkj/iscs/features/main/fragment/exception_manage/ExceptionDetailFragment.kt

@@ -43,11 +43,11 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
             }
         }
         binding.cancelException.setDebouncedClickListener {
-            TipDialog.showInfo(getString(R.string.confirm_cancel_exception), onConfirmClick = {
+            TipDialog.showInfo(CommonUtils.getStr("confirm_cancel_exception"), onConfirmClick = {
                 viewModel.cancelException().observe(this) {
                     if (it) {
                         TipDialog.showSuccess(
-                            getString(R.string.cancel_exception_success),
+                            CommonUtils.getStr("cancel_exception_success"),
                             onConfirmClick = {
                                 binding.handleException.isVisible = false
                                 binding.cancelException.isVisible = false
@@ -57,7 +57,7 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
                                 binding.cancelException.isVisible = false
                             })
                     } else {
-                        TipDialog.showError(getString(R.string.cancel_exception_failed))
+                        TipDialog.showError(CommonUtils.getStr("cancel_exception_failed"))
                     }
                 }
             })
@@ -79,7 +79,7 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
      */
     private fun showSimpleConfirmHandleDialog() {
         TipDialog.showInfo(
-            getString(R.string.confirm_handle_exception),
+            CommonUtils.getStr("confirm_handle_exception"),
             onConfirmClick = {
                 viewModel.handleException().observe(this) { result ->
                     if (result.first) {
@@ -97,7 +97,7 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
      */
     private fun showHandleSuccessDialog() {
         TipDialog.showSuccess(
-            getString(R.string.handle_exception_success),
+            CommonUtils.getStr("handle_exception_success"),
             onConfirmClick = ::hideHandleButtons,
             onCancelClick = ::hideHandleButtons
         )
@@ -151,8 +151,8 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
      */
     private fun showCoLockReleaseWarning(onConfirm: () -> Unit) {
         TipDialog.show(
-            title = getString(R.string.warn),
-            msg = getString(R.string.handle_exception_will_release_all_colock),
+            title = CommonUtils.getStr("warn"),
+            msg = CommonUtils.getStr("handle_exception_will_release_all_colock"),
             dialogType = TipDialog.DialogType.ERROR,
             onConfirmClick = onConfirm
         )
@@ -163,8 +163,8 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
      */
     private fun showCrossJobWarning(onConfirm: () -> Unit) {
         TipDialog.show(
-            title = getString(R.string.warn),
-            msg = getString(R.string.current_job_has_cross_job),
+            title = CommonUtils.getStr("warn"),
+            msg = CommonUtils.getStr("current_job_has_cross_job"),
             dialogType = TipDialog.DialogType.ERROR,
             onConfirmClick = onConfirm
         )
@@ -178,12 +178,12 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
             when (it) {
                 NextJobPrompt.NO_NEW_JOB -> {
                     TipDialog.showInfo(
-                        getString(R.string.confirm_handle_exception),
+                        CommonUtils.getStr("confirm_handle_exception"),
                         onConfirmClick = {
                             viewModel.handleException().observe(this) {
                                 if (it.first) {
                                     TipDialog.showSuccess(
-                                        getString(R.string.handle_exception_success),
+                                        CommonUtils.getStr("handle_exception_success"),
                                         onConfirmClick = {
                                             navController.popBackStack()
                                         },
@@ -199,17 +199,17 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
 
                 NextJobPrompt.CREATE_LOCK_JOB -> {
                     TipDialog.showInfo(
-                        getString(R.string.confirm_handle_exception),
+                        CommonUtils.getStr("confirm_handle_exception"),
                         onConfirmClick = {
                             viewModel.handleException().observe(this) {
                                 if (it.first) {
                                     TipDialog.showInfo(
-                                        getString(R.string.confirm_create_lock_job),
+                                        CommonUtils.getStr("confirm_create_lock_job"),
                                         onConfirmClick = {
                                             exceptionJobViewModel.createLockJob().observe(this) {
                                                 if (it) {
                                                     TipDialog.showSuccess(
-                                                        getString(R.string.handle_exception_success),
+                                                        CommonUtils.getStr("handle_exception_success"),
                                                         onConfirmClick = {
                                                             navController.popBackStack()
                                                         },
@@ -217,12 +217,12 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
                                                             navController.popBackStack()
                                                         })
                                                 } else {
-                                                    TipDialog.showError(getString(R.string.create_job_failed))
+                                                    TipDialog.showError(CommonUtils.getStr("create_job_failed"))
                                                 }
                                             }
                                         }, onCancelClick = {
                                             TipDialog.showSuccess(
-                                                getString(R.string.handle_exception_success),
+                                                CommonUtils.getStr("handle_exception_success"),
                                                 onConfirmClick = {
                                                     navController.popBackStack()
                                                 },
@@ -238,18 +238,17 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
                 }
 
                 NextJobPrompt.CREATE_UNLOCK_JOB -> {
-                    TipDialog.showInfo(
-                        getString(R.string.confirm_handle_exception),
+                    TipDialog.showInfo(CommonUtils.getStr("confirm_handle_exception"),
                         onConfirmClick = {
                             viewModel.handleException().observe(this) {
                                 if (it.first) {
                                     TipDialog.showInfo(
-                                        getString(R.string.confirm_create_unlock_job),
+                                        CommonUtils.getStr("confirm_create_unlock_job"),
                                         onConfirmClick = {
                                             exceptionJobViewModel.createUnlockJob().observe(this) {
                                                 if (it) {
                                                     TipDialog.showSuccess(
-                                                        getString(R.string.handle_exception_success),
+                                                        CommonUtils.getStr("handle_exception_success"),
                                                         onConfirmClick = {
                                                             navController.popBackStack()
                                                         },
@@ -257,12 +256,12 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
                                                             navController.popBackStack()
                                                         })
                                                 } else {
-                                                    TipDialog.showError(getString(R.string.create_job_failed))
+                                                    TipDialog.showError(CommonUtils.getStr("create_job_failed"))
                                                 }
                                             }
                                         }, onCancelClick = {
                                             TipDialog.showSuccess(
-                                                getString(R.string.handle_exception_success),
+                                                CommonUtils.getStr("handle_exception_success"),
                                                 onConfirmClick = {
                                                     navController.popBackStack()
                                                 },
@@ -332,7 +331,7 @@ class ExceptionDetailFragment : BaseFragment<FragmentExceptionDetailBinding>() {
                     }
             } else {
                 TipDialog.showError(
-                    msg = CommonUtils.getStr(com.grkj.ui_base.R.string.ticket_lost).toString(),
+                    msg = CommonUtils.getStr("ticket_lost"),
                     onConfirmClick = {
                         navController.popBackStack()
                     },

+ 33 - 33
app/src/main/java/com/grkj/iscs/features/main/fragment/exception_manage/ExceptionJobFragment.kt

@@ -69,11 +69,11 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
             }
         }
         binding.cancelException.setDebouncedClickListener {
-            TipDialog.showInfo(getString(R.string.confirm_cancel_exception), onConfirmClick = {
+            TipDialog.showInfo(CommonUtils.getStr("confirm_cancel_exception"), onConfirmClick = {
                 viewModel.cancelException().observe(this) {
                     if (it) {
                         TipDialog.showSuccess(
-                            getString(R.string.cancel_exception_success),
+                            CommonUtils.getStr("cancel_exception_success"),
                             onConfirmClick = {
                                 navController.popBackStack()
                             },
@@ -81,7 +81,7 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
                                 navController.popBackStack()
                             })
                     } else {
-                        TipDialog.showError(getString(R.string.cancel_exception_failed))
+                        TipDialog.showError(CommonUtils.getStr("cancel_exception_failed"))
                     }
                 }
             })
@@ -93,14 +93,14 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
                 viewModel.checkJobHasCoLockAndCrossJob().observe(this) {
                     if (it.first) {
                         TipDialog.show(
-                            title = getString(R.string.warn),
-                            msg = getString(R.string.handle_exception_will_release_all_colock),
+                            title = CommonUtils.getStr("warn"),
+                            msg = CommonUtils.getStr("handle_exception_will_release_all_colock"),
                             dialogType = TipDialog.DialogType.ERROR,
                             onConfirmClick = {
                                 if (it.second) {
                                     TipDialog.show(
-                                        title = getString(R.string.warn),
-                                        msg = getString(R.string.current_job_has_cross_job),
+                                        title = CommonUtils.getStr("warn"),
+                                        msg = CommonUtils.getStr("current_job_has_cross_job"),
                                         dialogType = TipDialog.DialogType.ERROR,
                                         onConfirmClick = {
                                             handleExceptionCheck()
@@ -112,8 +112,8 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
                     } else {
                         if (it.second) {
                             TipDialog.show(
-                                title = getString(R.string.warn),
-                                msg = getString(R.string.current_job_has_cross_job),
+                                title = CommonUtils.getStr("warn"),
+                                msg = CommonUtils.getStr("current_job_has_cross_job"),
                                 dialogType = TipDialog.DialogType.ERROR,
                                 onConfirmClick = {
                                     handleExceptionCheck()
@@ -168,12 +168,12 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
             when (it) {
                 NextJobPrompt.NO_NEW_JOB -> {
                     TipDialog.showInfo(
-                        getString(R.string.confirm_handle_exception),
+                        CommonUtils.getStr("confirm_handle_exception"),
                         onConfirmClick = {
                             viewModel.handleException().observe(this) {
                                 if (it.first) {
                                     TipDialog.showSuccess(
-                                        getString(R.string.handle_exception_success),
+                                        CommonUtils.getStr("handle_exception_success"),
                                         onConfirmClick = {
                                             navController.popBackStack()
                                         },
@@ -189,17 +189,17 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
 
                 NextJobPrompt.CREATE_LOCK_JOB -> {
                     TipDialog.showInfo(
-                        getString(R.string.confirm_handle_exception),
+                        CommonUtils.getStr("confirm_handle_exception"),
                         onConfirmClick = {
                             viewModel.handleException().observe(this) {
                                 if (it.first) {
                                     TipDialog.showInfo(
-                                        getString(R.string.confirm_create_lock_job),
+                                        CommonUtils.getStr("confirm_create_lock_job"),
                                         onConfirmClick = {
                                             viewModel.createLockJob().observe(this) {
                                                 if (it) {
                                                     TipDialog.showSuccess(
-                                                        getString(R.string.handle_exception_success),
+                                                        CommonUtils.getStr("handle_exception_success"),
                                                         onConfirmClick = {
                                                             navController.popBackStack()
                                                         },
@@ -207,12 +207,12 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
                                                             navController.popBackStack()
                                                         })
                                                 } else {
-                                                    TipDialog.showError(getString(R.string.create_job_failed))
+                                                    TipDialog.showError(CommonUtils.getStr("create_job_failed"))
                                                 }
                                             }
                                         }, onCancelClick = {
                                             TipDialog.showSuccess(
-                                                getString(R.string.handle_exception_success),
+                                                CommonUtils.getStr("handle_exception_success"),
                                                 onConfirmClick = {
                                                     navController.popBackStack()
                                                 },
@@ -229,17 +229,17 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
 
                 NextJobPrompt.CREATE_UNLOCK_JOB -> {
                     TipDialog.showInfo(
-                        getString(R.string.confirm_handle_exception),
+                        CommonUtils.getStr("confirm_handle_exception"),
                         onConfirmClick = {
                             viewModel.handleException().observe(this) {
                                 if (it.first) {
                                     TipDialog.showInfo(
-                                        getString(R.string.confirm_create_unlock_job),
+                                        CommonUtils.getStr("confirm_create_unlock_job"),
                                         onConfirmClick = {
                                             viewModel.createUnlockJob().observe(this) {
                                                 if (it) {
                                                     TipDialog.showSuccess(
-                                                        getString(R.string.handle_exception_success),
+                                                        CommonUtils.getStr("handle_exception_success"),
                                                         onConfirmClick = {
                                                             navController.popBackStack()
                                                         },
@@ -247,12 +247,12 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
                                                             navController.popBackStack()
                                                         })
                                                 } else {
-                                                    TipDialog.showError(getString(R.string.create_job_failed))
+                                                    TipDialog.showError(CommonUtils.getStr("create_job_failed"))
                                                 }
                                             }
                                         }, onCancelClick = {
                                             TipDialog.showSuccess(
-                                                getString(R.string.handle_exception_success),
+                                                CommonUtils.getStr("handle_exception_success"),
                                                 onConfirmClick = {
                                                     navController.popBackStack()
                                                 },
@@ -283,13 +283,13 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
         binding.colockerLayout.isVisible = index == 2
         binding.dataTitleTv.text = when (index) {
             0 -> CommonUtils.getStr(
-                R.string.job_execute_step_description,
+                "job_execute_step_description",
                 viewModel.currentStepData?.stepTitle
                     ?: ""
-            ).toString()
+            )
 
-            1 -> CommonUtils.getStr(R.string.job_execute_lock_status_title).toString()
-            2 -> CommonUtils.getStr(R.string.job_execute_colocker_colock_status_title).toString()
+            1 -> CommonUtils.getStr("job_execute_lock_status_title")
+            2 -> CommonUtils.getStr("job_execute_colocker_colock_status_title")
             else -> ""
         }
     }
@@ -335,27 +335,27 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
         }
         return when {
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.recognize_work_content).toString()
+                CommonUtils.getStr("recognize_work_content")
             ) == true -> R.mipmap.icon_loto_step_1
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.power_isolation_way).toString()
+                CommonUtils.getStr("power_isolation_way")
             ) == true -> R.mipmap.icon_loto_step_2
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.shutdown).toString()
+                CommonUtils.getStr("shutdown")
             ) == true -> R.mipmap.icon_loto_step_4
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.ensure_power_isolation).toString()
+                CommonUtils.getStr("ensure_power_isolation")
             ) == true -> R.mipmap.icon_loto_step_6
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.check_before_unlocking).toString()
+                CommonUtils.getStr("check_before_unlocking")
             ) == true -> R.mipmap.icon_loto_step_7
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.unlock_and_restore_switch).toString()
+                CommonUtils.getStr("unlock_and_restore_switch")
             ) == true -> R.mipmap.icon_loto_step_8
 
             workflowStep.enableSetLocker || workflowStep.enableSetColocker -> R.mipmap.icon_step_select_member
@@ -431,7 +431,7 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
                 viewModel.isUnlockFirst(viewModel.ticketData?.modeId!!).observe(this) {}
                 viewModel.getWorkflowSteps().observe(this) {
                     binding.exceptionJob.text = viewModel.ticketData!!.ticketName
-                    binding.jobNameTv.text = getString(R.string.exception_job_title)
+                    binding.jobNameTv.text = CommonUtils.getStr("exception_job_title")
                     binding.listRv.models = viewModel.ticketPoints
                     binding.stepRv.models = viewModel.ticketStep
                     viewModel.currentStepData =
@@ -444,7 +444,7 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
                 }
             } else {
                 TipDialog.showError(
-                    msg = CommonUtils.getStr(com.grkj.ui_base.R.string.ticket_lost).toString(),
+                    msg = CommonUtils.getStr("ticket_lost"),
                     onConfirmClick = {
                         navController.popBackStack()
                     },

+ 3 - 2
app/src/main/java/com/grkj/iscs/features/main/fragment/exception_manage/ExceptionManageFragment.kt

@@ -16,6 +16,7 @@ import com.grkj.iscs.databinding.ItemExceptionManageBinding
 import com.grkj.iscs.features.main.viewmodel.exception_manage.ExceptionViewModel
 import com.grkj.ui_base.base.BaseFragment
 import com.grkj.ui_base.dialog.TipDialog
+import com.grkj.ui_base.utils.CommonUtils
 import com.sik.sikcore.data.GlobalDataTempStore
 import com.sik.sikcore.extension.setDebouncedClickListener
 import dagger.hilt.android.AndroidEntryPoint
@@ -35,7 +36,7 @@ class ExceptionManageFragment : BaseFragment<FragmentExceptionManageBinding>() {
         binding.oneKeyHandle.setDebouncedClickListener {
             viewModel.handleSelectedException().observe(this) {
                 if (it.first) {
-                    TipDialog.showSuccess(getString(R.string.handle_exception_success))
+                    TipDialog.showSuccess(CommonUtils.getStr("handle_exception_success"))
                     getData()
                 } else {
                     TipDialog.showError(it.second)
@@ -44,7 +45,7 @@ class ExceptionManageFragment : BaseFragment<FragmentExceptionManageBinding>() {
         }
         binding.oneKeyCancel.setDebouncedClickListener {
             viewModel.cancelSelectedException().observe(this) {
-                TipDialog.showSuccess(getString(R.string.cancel_exception_success))
+                TipDialog.showSuccess(CommonUtils.getStr("cancel_exception_success"))
                 getData()
             }
         }

+ 7 - 7
app/src/main/java/com/grkj/iscs/features/main/fragment/exception_manage/ExceptionReportFragment.kt

@@ -51,7 +51,7 @@ class ExceptionReportFragment : BaseFormFragment<FragmentExceptionReportBinding>
             if (checkData()){
                 viewModel.exceptionReport().observe(this) {
                     TipDialog.showSuccess(
-                        msg = getString(R.string.exception_report_success),
+                        msg = CommonUtils.getStr("exception_report_success"),
                         onConfirmClick = {
                             clearData()
                             resetFormDirty()
@@ -77,7 +77,7 @@ class ExceptionReportFragment : BaseFormFragment<FragmentExceptionReportBinding>
         binding.exceptionSource.setDebouncedClickListener {
             if (viewModel.selectedExceptionType == viewModel.exceptionType.find { it.dictLabel == "硬件异常" }?.dictValue) {
                 if (viewModel.exceptionSourceData.isEmpty()){
-                    showToast(getString(R.string.currently_no_hardware_can_be_report))
+                    showToast(CommonUtils.getStr("currently_no_hardware_can_be_report"))
                     return@setDebouncedClickListener
                 }
                 TextDropDownDialog.showMultiTree(viewModel.exceptionSourceData.map {
@@ -109,7 +109,7 @@ class ExceptionReportFragment : BaseFormFragment<FragmentExceptionReportBinding>
                 }
             } else {
                 if (viewModel.exceptionSourceData.isEmpty()){
-                    showToast(getString(R.string.currently_no_job_can_be_report))
+                    showToast(CommonUtils.getStr("currently_no_job_can_be_report"))
                     return@setDebouncedClickListener
                 }
                 TextDropDownDialog.showSingle(viewModel.exceptionSourceData.map {
@@ -161,19 +161,19 @@ class ExceptionReportFragment : BaseFormFragment<FragmentExceptionReportBinding>
 
     private fun checkData(): Boolean{
         if (viewModel.selectedExceptionType==null){
-            showToast(CommonUtils.getStr(R.string.please_select_exception_type).toString())
+            showToast(CommonUtils.getStr("please_select_exception_type"))
             return false
         }
         if (viewModel.selectedExceptionDescription.isEmpty()){
-            showToast(CommonUtils.getStr(R.string.please_select_exception_description).toString())
+            showToast(CommonUtils.getStr("please_select_exception_description"))
             return false
         }
         if (viewModel.selectedSourceData.isEmpty()){
-            showToast(CommonUtils.getStr(R.string.please_select_exception_source).toString())
+            showToast(CommonUtils.getStr("please_select_exception_source"))
             return false
         }
         if (viewModel.selectedProcessApplication==null){
-            showToast(CommonUtils.getStr(R.string.please_select_process_application).toString())
+            showToast(CommonUtils.getStr("please_select_process_application"))
             return false
         }
         return true

+ 10 - 10
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/CardManageFragment.kt

@@ -41,10 +41,10 @@ class CardManageFragment : BaseFragment<FragmentCardManageBinding>() {
                 viewModel.validateCardData(vo.cardNfc).observe(this) {
                     viewModel.addCard(vo).observe(this) { ok ->
                         dialog.dismiss()
-                        @StringRes val titleRes =
-                            if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                        @StringRes val msgRes =
-                            if (ok) R.string.add_card_succeed else R.string.add_card_failed
+                        val titleRes =
+                            if (ok) "action_succeed" else "action_failed"
+                        val msgRes =
+                            if (ok) "add_card_succeed" else "add_card_failed"
 
                         TipDialog.show(
                             title = CommonUtils.getStr(titleRes).toString(),
@@ -109,10 +109,10 @@ class CardManageFragment : BaseFragment<FragmentCardManageBinding>() {
             UpdateCardDialog.show(item, viewModel.dropDownData) { vo, dialog ->
                 viewModel.updateCard(vo).observe(this) { ok ->
                     dialog.dismiss()
-                    @StringRes val titleRes =
-                        if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                    @StringRes val msgRes =
-                        if (ok) R.string.update_card_succeed else R.string.update_card_failed
+                    val titleRes =
+                        if (ok) "action_succeed" else "action_failed"
+                    val msgRes =
+                        if (ok) "update_card_succeed" else "update_card_failed"
 
                     TipDialog.show(
                         title = CommonUtils.getStr(titleRes).toString(),
@@ -163,14 +163,14 @@ class CardManageFragment : BaseFragment<FragmentCardManageBinding>() {
             PopTip.tip(R.string.please_select_card); return
         }
         TipDialog.show(
-            msg = CommonUtils.getStr(R.string.check_delete_card).toString(),
+            msg = CommonUtils.getStr("check_delete_card"),
             countDownTime = 10,
             onConfirmClick = {
                 val ids = viewModel.cardManageDataList.filter { it.isSelected }.map { it.cardId }
                 viewModel.deleteSelectedCard(ids).observe(this) { ok ->
                     TipDialog.show(
                         dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                        msg = CommonUtils.getStr(if (ok) R.string.card_manage_delete_succeed else R.string.card_manage_delete_failed)
+                        msg = CommonUtils.getStr(if (ok) "card_manage_delete_succeed" else "card_manage_delete_failed")
                             .toString(),
                         showConfirm = false,
                         countDownTime = 10

+ 12 - 17
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/KeyManageFragment.kt

@@ -51,10 +51,9 @@ class KeyManageFragment : BaseFragment<FragmentKeyManageBinding>() {
                         dialog.dismiss()
                         if (it) {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_succeed"),
                                 dialogType = TipDialog.DialogType.SUCCESS,
-                                msg = CommonUtils.getStr(R.string.add_key_succeed).toString(),
+                                msg = CommonUtils.getStr("add_key_succeed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -63,10 +62,10 @@ class KeyManageFragment : BaseFragment<FragmentKeyManageBinding>() {
                             )
                         } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
+                                title = CommonUtils.getStr("action_failed")
                                     .toString(),
                                 dialogType = TipDialog.DialogType.ERROR,
-                                msg = CommonUtils.getStr(R.string.add_key_failed).toString(),
+                                msg = CommonUtils.getStr("add_key_failed"),
                                 countDownTime = 10,
                                 showConfirm = false,
                                 onCancelClick = {
@@ -132,11 +131,9 @@ class KeyManageFragment : BaseFragment<FragmentKeyManageBinding>() {
                     dialog.dismiss()
                     if (it) {
                         TipDialog.show(
-                            title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                .toString(),
+                            title = CommonUtils.getStr("action_succeed"),
                             dialogType = TipDialog.DialogType.SUCCESS,
-                            msg = CommonUtils.getStr(R.string.update_key_succeed)
-                                .toString(),
+                            msg = CommonUtils.getStr("update_key_succeed"),
                             countDownTime = 10,
                             showConfirm = false,
                             onCancelClick = {
@@ -145,10 +142,10 @@ class KeyManageFragment : BaseFragment<FragmentKeyManageBinding>() {
                         )
                     } else {
                         TipDialog.show(
-                            title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
+                            title = CommonUtils.getStr("action_failed")
                                 .toString(),
                             dialogType = TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(R.string.update_key_failed).toString(),
+                            msg = CommonUtils.getStr("update_key_failed").toString(),
                             countDownTime = 10,
                             showConfirm = false,
                             onCancelClick = {
@@ -198,7 +195,7 @@ class KeyManageFragment : BaseFragment<FragmentKeyManageBinding>() {
         viewModel.checkKeyInUse().observe(this){
             if (!it){
                 TipDialog.show(
-                    msg = CommonUtils.getStr(R.string.check_delete_key).toString(),
+                    msg = CommonUtils.getStr("check_delete_key").toString(),
                     countDownTime = 10,
                     onConfirmClick = {
                         viewModel.deleteSelectedKey(viewModel.keyManageDataList.filter { it.isSelected }
@@ -206,8 +203,7 @@ class KeyManageFragment : BaseFragment<FragmentKeyManageBinding>() {
                             if (it) {
                                 TipDialog.show(
                                     dialogType = TipDialog.DialogType.SUCCESS,
-                                    msg = CommonUtils.getStr(R.string.key_manage_delete_succeed)
-                                        .toString(),
+                                    msg = CommonUtils.getStr("key_manage_delete_succeed"),
                                     showConfirm = false,
                                     countDownTime = 10
                                 )
@@ -215,8 +211,7 @@ class KeyManageFragment : BaseFragment<FragmentKeyManageBinding>() {
                             } else {
                                 TipDialog.show(
                                     dialogType = TipDialog.DialogType.ERROR,
-                                    msg = CommonUtils.getStr(R.string.key_manage_delete_failed)
-                                        .toString(),
+                                    msg = CommonUtils.getStr("key_manage_delete_failed"),
                                     showConfirm = false,
                                     countDownTime = 10
                                 )
@@ -224,7 +219,7 @@ class KeyManageFragment : BaseFragment<FragmentKeyManageBinding>() {
                         }
                     })
             }else{
-                TipDialog.showError(CommonUtils.getStr(R.string.key_in_use).toString())
+                TipDialog.showError(CommonUtils.getStr("key_in_use"))
             }
         }
 

+ 15 - 15
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/LockManageFragment.kt

@@ -41,15 +41,15 @@ class LockManageFragment : BaseFragment<FragmentLockManageBinding>() {
                 viewModel.validateLockData(vo.lockNfc ?: "").observe(this) {
                     viewModel.addLock(vo).observe(this) { ok ->
                         dialog.dismiss()
-                        @StringRes val titleRes =
-                            if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                        @StringRes val msgRes =
-                            if (ok) R.string.add_lock_succeed else R.string.add_lock_failed
+                        val titleRes =
+                            if (ok) "action_succeed" else "action_failed"
+                        val msgRes =
+                            if (ok) "add_lock_succeed" else "add_lock_failed"
 
                         TipDialog.show(
-                            title = CommonUtils.getStr(titleRes).toString(),
+                            title = CommonUtils.getStr(titleRes),
                             dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(msgRes).toString(),
+                            msg = CommonUtils.getStr(msgRes),
                             countDownTime = 10,
                             showConfirm = false,
                             onCancelClick = { loadLocks(reset = true) }
@@ -111,15 +111,15 @@ class LockManageFragment : BaseFragment<FragmentLockManageBinding>() {
                 viewModel.validateLockData(vo.lockNfc ?: "").observe(this) {
                     viewModel.updateLock(vo).observe(this) { ok ->
                         dialog.dismiss()
-                        @StringRes val titleRes =
-                            if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                        @StringRes val msgRes =
-                            if (ok) R.string.update_lock_succeed else R.string.update_lock_failed
+                        val titleRes =
+                            if (ok) "action_succeed" else "action_failed"
+                        val msgRes =
+                            if (ok) "update_lock_succeed" else "update_lock_failed"
 
                         TipDialog.show(
-                            title = CommonUtils.getStr(titleRes).toString(),
+                            title = CommonUtils.getStr(titleRes),
                             dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(msgRes).toString(),
+                            msg = CommonUtils.getStr(msgRes),
                             countDownTime = 10,
                             showConfirm = false,
                             onCancelClick = { loadLocks(reset = true) }
@@ -162,14 +162,14 @@ class LockManageFragment : BaseFragment<FragmentLockManageBinding>() {
         viewModel.lockInUse().observe(this){
             if (!it){
                 TipDialog.show(
-                    msg = CommonUtils.getStr(R.string.check_delete_lock).toString(),
+                    msg = CommonUtils.getStr("check_delete_lock").toString(),
                     countDownTime = 10,
                     onConfirmClick = {
                         val ids = viewModel.lockManageDataList.filter { it.isSelected }.map { it.lockId }
                         viewModel.deleteSelectedLock(ids).observe(this) { ok ->
                             TipDialog.show(
                                 dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                                msg = CommonUtils.getStr(if (ok) R.string.lock_manage_delete_succeed else R.string.lock_manage_delete_failed)
+                                msg = CommonUtils.getStr(if (ok) "lock_manage_delete_succeed" else "lock_manage_delete_failed")
                                     .toString(),
                                 showConfirm = false, countDownTime = 10
                             )
@@ -178,7 +178,7 @@ class LockManageFragment : BaseFragment<FragmentLockManageBinding>() {
                     }
                 )
             }else{
-                TipDialog.showError(CommonUtils.getStr(R.string.lock_in_use).toString())
+                TipDialog.showError(CommonUtils.getStr("lock_in_use"))
             }
         }
 

+ 16 - 16
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/RfidTokenManageFragment.kt

@@ -38,15 +38,15 @@ class RfidTokenManageFragment : BaseFragment<FragmentRfidTokenManageBinding>() {
                 viewModel.validateRfidTokenData(vo.rfid).observe(this) {
                     viewModel.addRfidToken(vo).observe(this) { ok ->
                         dialog.dismiss()
-                        @StringRes val titleRes =
-                            if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                        @StringRes val msgRes =
-                            if (ok) R.string.add_rfid_token_succeed else R.string.add_rfid_token_failed
+                        val titleRes =
+                            if (ok) "action_succeed" else "action_failed"
+                        val msgRes =
+                            if (ok) "add_rfid_token_succeed" else "add_rfid_token_failed"
 
                         TipDialog.show(
-                            title = CommonUtils.getStr(titleRes).toString(),
+                            title = CommonUtils.getStr(titleRes),
                             dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(msgRes).toString(),
+                            msg = CommonUtils.getStr(msgRes),
                             countDownTime = 10,
                             showConfirm = false,
                             onCancelClick = {
@@ -108,21 +108,21 @@ class RfidTokenManageFragment : BaseFragment<FragmentRfidTokenManageBinding>() {
         }
         bind.root.setDebouncedClickListener {
             if (item.rfidId in viewModel.inUseRfidIds) {
-                showToast(CommonUtils.getStr(R.string.rfid_in_use).toString())
+                showToast(CommonUtils.getStr("rfid_in_use").toString())
                 return@setDebouncedClickListener
             }
             UpdateRfidTokenDialog.show(item) { vo, dialog ->
                 viewModel.updateRfidToken(vo).observe(this) { ok ->
                     dialog.dismiss()
-                    @StringRes val titleRes =
-                        if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                    @StringRes val msgRes =
-                        if (ok) R.string.update_rfid_token_succeed else R.string.update_rfid_token_failed
+                    val titleRes =
+                        if (ok) "action_succeed" else "action_failed"
+                    val msgRes =
+                        if (ok) "update_rfid_token_succeed" else "update_rfid_token_failed"
 
                     TipDialog.show(
-                        title = CommonUtils.getStr(titleRes).toString(),
+                        title = CommonUtils.getStr(titleRes),
                         dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                        msg = CommonUtils.getStr(msgRes).toString(),
+                        msg = CommonUtils.getStr(msgRes),
                         countDownTime = 10,
                         showConfirm = false,
                         onCancelClick = { loadTokens(reset = true) }
@@ -164,11 +164,11 @@ class RfidTokenManageFragment : BaseFragment<FragmentRfidTokenManageBinding>() {
         }
         if (viewModel.rfidTokenManageDataList.map { it.rfidId }
                 .any { it in viewModel.inUseRfidIds }) {
-            showToast(CommonUtils.getStr(R.string.selected_rfid_in_use).toString())
+            showToast(CommonUtils.getStr("selected_rfid_in_use").toString())
             return
         }
         TipDialog.show(
-            msg = CommonUtils.getStr(R.string.check_delete_rfid_token).toString(),
+            msg = CommonUtils.getStr("check_delete_rfid_token").toString(),
             countDownTime = 10,
             onConfirmClick = {
                 val ids =
@@ -176,7 +176,7 @@ class RfidTokenManageFragment : BaseFragment<FragmentRfidTokenManageBinding>() {
                 viewModel.deleteSelectedRfidToken(ids).observe(this) { ok ->
                     TipDialog.show(
                         dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                        msg = CommonUtils.getStr(if (ok) R.string.rfid_token_manage_delete_succeed else R.string.rfid_token_manage_delete_failed)
+                        msg = CommonUtils.getStr(if (ok) "rfid_token_manage_delete_succeed" else "rfid_token_manage_delete_failed")
                             .toString(),
                         showConfirm = false,
                         countDownTime = 10

+ 26 - 21
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/SlotsManageFragment.kt

@@ -27,6 +27,7 @@ import com.grkj.iscs.features.main.viewmodel.hardware_manage.SlotsManageViewMode
 import com.grkj.ui_base.base.BaseFragment
 import com.grkj.ui_base.config.ISCSConfig
 import com.grkj.ui_base.dialog.TipDialog
+import com.grkj.ui_base.utils.CommonUtils
 import com.grkj.ui_base.utils.event.LoadingEvent
 import com.grkj.ui_base.utils.modbus.DeviceConst
 import com.grkj.ui_base.utils.modbus.DockBean
@@ -98,7 +99,7 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
             viewModel.tagSlotsException(deviceBean.row, modelPosition + 1, it)
                 .observe(this) {
                     TipDialog.showSuccess(
-                        msg = getString(R.string.exception_report_success),
+                        msg = CommonUtils.getStr("exception_report_success"),
                         onConfirmClick = {
                             binding.dockRv.adapter?.notifyDataSetChanged()
                         },
@@ -115,7 +116,7 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
     private fun detectSlot(deviceBean: DockBean.DeviceBean) {
         when (deviceBean) {
             is DockBean.KeyBean -> {
-                LoadingEvent.sendLoadingEvent(getString(R.string.start_detect_key_slot))
+                LoadingEvent.sendLoadingEvent(CommonUtils.getStr("start_detect_key_slot"))
                 ThreadUtils.runOnIO {
                     ModBusController.readKeyRfidStr(
                         deviceBean.addr,
@@ -125,13 +126,13 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                             viewModel.checkKeyRfidIsNewDevice(keyRfid)
                                 .observe(this@SlotsManageFragment) {
                                     if (it) {
-                                        LoadingEvent.sendLoadingEvent(getString(R.string.start_scan_key_mac))
+                                        LoadingEvent.sendLoadingEvent(CommonUtils.getStr("start_scan_key_mac"))
                                         viewModel.detectKeyMac(deviceBean)
                                             .observe(this@SlotsManageFragment) { keyMac ->
                                                 LoadingEvent.sendLoadingEvent()
                                                 ThreadUtils.runOnMain {
                                                     TipDialog.showInfo(
-                                                        msg = getString(R.string.check_new_key_need_register),
+                                                        msg = CommonUtils.getStr("check_new_key_need_register"),
                                                         onConfirmClick = {
                                                             viewModel.registerKeyInfo(
                                                                 keyRfid,
@@ -140,11 +141,11 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                                                                 .observe(this@SlotsManageFragment) {
                                                                     if (it) {
                                                                         TipDialog.showSuccess(
-                                                                            getString(R.string.register_success)
+                                                                            CommonUtils.getStr("register_success")
                                                                         )
                                                                     } else {
                                                                         TipDialog.showError(
-                                                                            getString(R.string.register_failed)
+                                                                            CommonUtils.getStr("register_failed")
                                                                         )
                                                                     }
                                                                 }
@@ -153,7 +154,7 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                                             }
                                     } else {
                                         LoadingEvent.sendLoadingEvent()
-                                        showToast(getString(R.string.key_info_already_exists))
+                                        showToast(CommonUtils.getStr("key_info_already_exists"))
                                     }
 
                                 }
@@ -163,29 +164,33 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
             }
 
             is DockBean.LockBean -> {
-                LoadingEvent.sendLoadingEvent(getString(R.string.start_detect_lock_slot))
+                LoadingEvent.sendLoadingEvent(CommonUtils.getStr("start_detect_lock_slot"))
                 ThreadUtils.runOnIO {
                     ModBusController.readLockRfidStr(deviceBean.addr, deviceBean.idx) { lockRfid ->
                         ThreadUtils.runOnMain {
-                            LoadingEvent.sendLoadingEvent(getString(R.string.check_lock_is_new_device))
+                            LoadingEvent.sendLoadingEvent(CommonUtils.getStr("check_lock_is_new_device"))
                             viewModel.checkLockRfidIsNewDevice(lockRfid)
                                 .observe(this@SlotsManageFragment) {
                                     LoadingEvent.sendLoadingEvent()
                                     if (it) {
                                         TipDialog.showInfo(
-                                            msg = getString(R.string.check_new_lock_need_register),
+                                            msg = CommonUtils.getStr("check_new_lock_need_register"),
                                             onConfirmClick = {
                                                 viewModel.registerLockInfo(lockRfid)
                                                     .observe(this@SlotsManageFragment) {
                                                         if (it) {
-                                                            TipDialog.showSuccess(getString(R.string.register_success))
+                                                            TipDialog.showSuccess(
+                                                                CommonUtils.getStr(
+                                                                    "register_success"
+                                                                )
+                                                            )
                                                         } else {
-                                                            TipDialog.showError(getString(R.string.register_failed))
+                                                            TipDialog.showError(CommonUtils.getStr("register_failed"))
                                                         }
                                                     }
                                             })
                                     } else {
-                                        showToast(getString(R.string.lock_already_exists))
+                                        showToast(CommonUtils.getStr("lock_already_exists"))
                                     }
                                 }
                         }
@@ -256,7 +261,7 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                 }
                 itemKeyBinding.detect.setDebouncedClickListener {
                     if (!itemKey.isExist) {
-                        showToast(getString(R.string.current_slot_has_no_key))
+                        showToast(CommonUtils.getStr("current_slot_has_no_key"))
                         return@setDebouncedClickListener
                     }
                     detectSlot(itemKey)
@@ -278,7 +283,7 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                         MainDomainData.roleKeys?.contains(RoleEnum.SYSCONFIG.roleKey) == true
                     ) {
                         TipDialog.showInfo(
-                            getString(R.string.do_you_want_to_remove_exception),
+                            CommonUtils.getStr("do_you_want_to_remove_exception"),
                             onConfirmClick = {
                                 if (viewModel.exceptionSlotsData.any {
                                         it.row?.toInt() == itemKey.row && it.col?.toInt() == (modelPosition + 1)
@@ -336,7 +341,7 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                 }
                 itemLockBinding.detect.setDebouncedClickListener {
                     if (!itemLock.isExist) {
-                        showToast(getString(R.string.current_slot_has_no_lock))
+                        showToast(CommonUtils.getStr("current_slot_has_no_lock"))
                         return@setDebouncedClickListener
                     }
                     detectSlot(itemLock)
@@ -358,7 +363,7 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                         MainDomainData.roleKeys?.contains(RoleEnum.SYSCONFIG.roleKey) == true
                     ) {
                         TipDialog.showInfo(
-                            getString(R.string.do_you_want_to_remove_exception),
+                            CommonUtils.getStr("do_you_want_to_remove_exception"),
                             onConfirmClick = {
                                 if (viewModel.exceptionSlotsData.any {
                                         it.row?.toInt() == itemLock.row && it.col?.toInt() == (modelPosition + 1)
@@ -417,7 +422,7 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                         }
                         itemKeyBinding.detect.setDebouncedClickListener {
                             if (!itemPortable.isExist) {
-                                showToast(getString(R.string.current_slot_has_no_key))
+                                showToast(CommonUtils.getStr("current_slot_has_no_key"))
                                 return@setDebouncedClickListener
                             }
                             detectSlot(itemPortable)
@@ -439,7 +444,7 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                                 MainDomainData.roleKeys?.contains(RoleEnum.SYSCONFIG.roleKey) == true
                             ) {
                                 TipDialog.showInfo(
-                                    getString(R.string.do_you_want_to_remove_exception),
+                                    CommonUtils.getStr("do_you_want_to_remove_exception"),
                                     onConfirmClick = {
                                         if (viewModel.exceptionSlotsData.any {
                                                 it.row?.toInt() == itemPortable.row && it.col?.toInt() == (modelPosition + 1)
@@ -486,7 +491,7 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                         }
                         itemLockBinding.detect.setDebouncedClickListener {
                             if (!itemPortable.isExist) {
-                                showToast(getString(R.string.current_slot_has_no_lock))
+                                showToast(CommonUtils.getStr("current_slot_has_no_lock"))
                                 return@setDebouncedClickListener
                             }
                             detectSlot(itemPortable)
@@ -508,7 +513,7 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                                 MainDomainData.roleKeys?.contains(RoleEnum.SYSCONFIG.roleKey) == true
                             ) {
                                 TipDialog.showInfo(
-                                    getString(R.string.do_you_want_to_remove_exception),
+                                    CommonUtils.getStr("do_you_want_to_remove_exception"),
                                     onConfirmClick = {
                                         if (viewModel.exceptionSlotsData.any {
                                                 it.row?.toInt() == itemPortable.row && it.col?.toInt() == (modelPosition + 1)

+ 12 - 18
app/src/main/java/com/grkj/iscs/features/main/fragment/home/HomeFragment.kt

@@ -7,9 +7,6 @@ import com.drake.brv.BindingAdapter
 import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
-import com.google.gson.Gson
-import com.google.gson.reflect.TypeToken
-import com.grkj.data.data.MMKVConstants
 import com.grkj.data.data.MainDomainData
 import com.grkj.data.enums.RoleFunctionalPermissionsEnum
 import com.grkj.iscs.R
@@ -27,7 +24,6 @@ import com.grkj.ui_base.utils.extension.tip
 import com.kongzue.dialogx.dialogs.PopTip
 import com.loper7.date_time_picker.dialog.CardDatePickerDialog
 import com.sik.sikcore.date.TimeUtils
-import com.sik.sikcore.extension.getMMKVData
 import com.sik.sikcore.extension.setDebouncedClickListener
 import dagger.hilt.android.AndroidEntryPoint
 import me.jessyan.autosize.AutoSize
@@ -86,12 +82,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
         binding.quickEntranceConfig.setDebouncedClickListener {
             quickEntranceConfig()
         }
-        binding.realTimeDataZone.text = getString(R.string.all)
-        binding.overviewDataZone.text = getString(R.string.all)
-        binding.lockMode.text = getString(R.string.all)
+        binding.realTimeDataZone.text = CommonUtils.getStr("all")
+        binding.overviewDataZone.text = CommonUtils.getStr("all")
+        binding.lockMode.text = CommonUtils.getStr("all")
         binding.realTimeDataZone.setDebouncedClickListener {
             setWorkstationData(binding.realTimeDataZone) {
-                if (it.getShowText() == getString(R.string.all)) {
+                if (it.getShowText() == CommonUtils.getStr("all")) {
                     viewModel.realTimeDataZoneId = null
                 } else {
                     viewModel.realTimeDataZoneId = it.getId()
@@ -103,7 +99,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
         }
         binding.overviewDataZone.setDebouncedClickListener {
             setWorkstationData(binding.overviewDataZone) {
-                if (it.getShowText() == getString(R.string.all)) {
+                if (it.getShowText() == CommonUtils.getStr("all")) {
                     viewModel.overviewDataZoneId = null
                 } else {
                     viewModel.overviewDataZoneId = it.getId()
@@ -141,7 +137,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
         }
         binding.endTime.setDebouncedClickListener {
             if (binding.startTime.text.isEmpty()) {
-                PopTip.build().tip(R.string.please_select_start_time)
+                showToast(CommonUtils.getStr("please_select_start_time"))
                 return@setDebouncedClickListener
             }
             pickDateTime(false, binding.endTime)
@@ -162,9 +158,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
     private fun pickDateTime(startTime: Boolean = true, timeView: TextView) {
         AutoSize.autoConvertDensity(requireActivity(), 600f, false)
         CardDatePickerDialog.builder(requireContext()).setTitle(
-            if (startTime) CommonUtils.getStr(com.grkj.ui_base.R.string.start_time)
-                .toString() else CommonUtils.getStr(com.grkj.ui_base.R.string.end_time)
-                .toString()
+            if (startTime) CommonUtils.getStr("start_time") else CommonUtils.getStr("end_time")
         ).setOnChoose { millisecond ->
             val chooseTime = TimeUtils.formatDate(
                 Date(millisecond), TimeUtils.DEFAULT_DATE_HOUR_MIN_FORMAT
@@ -176,7 +170,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
                         TimeUtils.DEFAULT_DATE_HOUR_MIN_FORMAT
                     )
                 ) {
-                    PopTip.build().tip(R.string.start_time_must_large_then_end_time)
+                    showToast(CommonUtils.getStr("end_time_must_large_then_start_time"))
                     return@setOnChoose
                 }
             } else {
@@ -186,7 +180,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
                         TimeUtils.DEFAULT_DATE_HOUR_MIN_FORMAT
                     )
                 ) {
-                    PopTip.build().tip(R.string.start_time_must_large_then_end_time)
+                    showToast(CommonUtils.getStr("end_time_must_large_then_start_time"))
                     return@setOnChoose
                 }
             }
@@ -257,7 +251,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
                 }.toMutableList().apply {
                     add(
                         0, TextDropDownDialog.SimpleTextDropDownEntity(
-                            dataId = 0, dataText = getString(R.string.all)
+                            dataId = 0, dataText = CommonUtils.getStr("all")
                         )
                     )
                 }, workstationTv
@@ -279,13 +273,13 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
                 }.toMutableList().apply {
                     add(
                         0, TextDropDownDialog.SimpleTextDropDownEntity(
-                            dataId = 0, dataText = getString(R.string.all)
+                            dataId = 0, dataText =CommonUtils.getStr("all")
                         )
                     )
                 }, binding.lockMode
             ) {
                 binding.lockMode.text = it.getShowText()
-                if (it.getShowText() == getString(R.string.all)) {
+                if (it.getShowText() == CommonUtils.getStr("all")) {
                     viewModel.selectedWorkflowMode = null
                 } else {
                     viewModel.selectedWorkflowMode = it.getId()

+ 17 - 22
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateJobFragment.kt

@@ -88,9 +88,9 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
         binding.save.setDebouncedClickListener {
             if (checkData()) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_hint).toString(),
+                    title = CommonUtils.getStr("action_hint").toString(),
                     msg = CommonUtils.getStr(
-                        R.string.job_save_tip,
+                        "job_save_tip",
                         args = listOf<String>(binding.jobNameEt.text.toString()).toTypedArray()
                     ).toString(),
                     dialogType = TipDialog.DialogType.INFO,
@@ -112,9 +112,9 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
         binding.saveAndExecute.setDebouncedClickListener {
             if (checkData()) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_confirm).toString(),
+                    title = CommonUtils.getStr("action_confirm").toString(),
                     msg = CommonUtils.getStr(
-                        R.string.job_save_and_execute_tip,
+                        "job_save_and_execute_tip",
                         args = listOf<String>(binding.jobNameEt.text.toString()).toTypedArray()
                     ).toString(),
                     dialogType = TipDialog.DialogType.INFO,
@@ -154,7 +154,7 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_job_title).toString()
+                    CommonUtils.getStr("create_job_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -204,7 +204,7 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_job_title).toString()
+                    CommonUtils.getStr("create_job_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -226,7 +226,7 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_job_title).toString()
+                    CommonUtils.getStr("create_job_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -250,7 +250,7 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_job_title).toString()
+                    CommonUtils.getStr("create_job_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -297,7 +297,7 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_job_title).toString()
+                    CommonUtils.getStr("create_job_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -393,10 +393,8 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
                     viewModel.startJob(it.second).observe(this) {
                         if (it) {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                    .toString(),
-                                msg = CommonUtils.getStr(R.string.job_create_and_execute_succeed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_succeed"),
+                                msg = CommonUtils.getStr("job_create_and_execute_succeed"),
                                 dialogType = TipDialog.DialogType.SUCCESS,
                                 countDownTime = 10,
                                 onConfirmClick = {
@@ -408,10 +406,8 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
                             )
                         } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
-                                    .toString(),
-                                msg = CommonUtils.getStr(R.string.job_create_and_execute_failed)
-                                    .toString(),
+                                title = CommonUtils.getStr("action_failed"),
+                                msg = CommonUtils.getStr("job_create_and_execute_failed"),
                                 dialogType = TipDialog.DialogType.ERROR,
                                 showConfirm = false,
                                 countDownTime = 10
@@ -420,9 +416,8 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
                     }
                 } else {
                     TipDialog.show(
-                        title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                            .toString(),
-                        msg = CommonUtils.getStr(R.string.job_create_succeed).toString(),
+                        title = CommonUtils.getStr("action_succeed"),
+                        msg = CommonUtils.getStr("job_create_succeed"),
                         dialogType = TipDialog.DialogType.SUCCESS,
                         countDownTime = 10,
                         onConfirmClick = {
@@ -435,8 +430,8 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
                 }
             } else {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed).toString(),
-                    msg = CommonUtils.getStr(R.string.job_create_failed).toString(),
+                    title = CommonUtils.getStr("action_failed"),
+                    msg = CommonUtils.getStr("job_create_failed"),
                     dialogType = TipDialog.DialogType.ERROR,
                     showConfirm = false,
                     countDownTime = 10

+ 11 - 11
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateSopFragment.kt

@@ -84,9 +84,9 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
         binding.confirm.setDebouncedClickListener {
             if (checkData()) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_confirm).toString(),
+                    title = CommonUtils.getStr("action_confirm").toString(),
                     msg = CommonUtils.getStr(
-                        R.string.sop_save_tip,
+                        "sop_save_tip",
                         args = listOf<String>(binding.sopNameEt.text.toString()).toTypedArray()
                     ).toString(),
                     dialogType = TipDialog.DialogType.INFO,
@@ -114,7 +114,7 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
                 .saveData(DataTransferConstants.KEY_SELECTED_POINT_DATA, selectedPointData)
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                CommonUtils.getStr(R.string.create_sop_title).toString()
+                CommonUtils.getStr("create_sop_title").toString()
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
@@ -152,7 +152,7 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                CommonUtils.getStr(R.string.create_sop_title).toString()
+                CommonUtils.getStr("create_sop_title").toString()
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
@@ -170,7 +170,7 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                CommonUtils.getStr(R.string.create_sop_title).toString()
+                CommonUtils.getStr("create_sop_title").toString()
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
@@ -190,7 +190,7 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
                 .saveData(DataTransferConstants.KEY_SELECTED_POINT_DATA, selectedPointData)
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                CommonUtils.getStr(R.string.create_sop_title).toString()
+                CommonUtils.getStr("create_sop_title").toString()
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
@@ -224,7 +224,7 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                CommonUtils.getStr(R.string.create_sop_title).toString()
+                CommonUtils.getStr("create_sop_title").toString()
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
@@ -294,8 +294,8 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
         ).observe(this) {
             if (it) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed).toString(),
-                    msg = CommonUtils.getStr(R.string.sop_create_succeed).toString(),
+                    title = CommonUtils.getStr("action_succeed").toString(),
+                    msg = CommonUtils.getStr("sop_create_succeed").toString(),
                     dialogType = TipDialog.DialogType.SUCCESS,
                     countDownTime = 10,
                     onConfirmClick = {
@@ -306,8 +306,8 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
                     })
             } else {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed).toString(),
-                    msg = CommonUtils.getStr(R.string.sop_create_failed).toString(),
+                    title = CommonUtils.getStr("action_failed").toString(),
+                    msg = CommonUtils.getStr("sop_create_failed").toString(),
                     dialogType = TipDialog.DialogType.ERROR,
                     showConfirm = false,
                     countDownTime = 10

+ 15 - 15
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateSopJobFragment.kt

@@ -87,9 +87,9 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
         binding.save.setDebouncedClickListener {
             if (checkData()) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_hint).toString(),
+                    title = CommonUtils.getStr("action_hint").toString(),
                     msg = CommonUtils.getStr(
-                        R.string.job_save_tip,
+                        "job_save_tip",
                         args = listOf<String>(binding.jobNameEt.text.toString()).toTypedArray()
                     ).toString(),
                     dialogType = TipDialog.DialogType.INFO,
@@ -102,9 +102,9 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
         binding.saveAndExecute.setDebouncedClickListener {
             if (checkData()) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_confirm).toString(),
+                    title = CommonUtils.getStr("action_confirm").toString(),
                     msg = CommonUtils.getStr(
-                        R.string.create_sop_job_tip,
+                        "create_sop_job_tip",
                         args = listOf<String>(binding.jobNameEt.text.toString()).toTypedArray()
                     ).toString(),
                     dialogType = TipDialog.DialogType.INFO,
@@ -114,7 +114,7 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
                             if (!it) {
                                 createSopJob(true)
                             } else {
-                                TipDialog.showError(getString(R.string.current_sop_has_job_in_progress))
+                                TipDialog.showError(CommonUtils.getStr("current_sop_has_job_in_progress"))
                             }
                         }
                     })
@@ -136,7 +136,7 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_sop_job_title).toString()
+                    CommonUtils.getStr("create_sop_job_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -179,7 +179,7 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_sop_job_title).toString()
+                    CommonUtils.getStr("create_sop_job_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -254,9 +254,9 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
                     viewModel.startJob(it.second).observe(this) {
                         if (it) {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
+                                title = CommonUtils.getStr("action_succeed")
                                     .toString(),
-                                msg = CommonUtils.getStr(R.string.sop_job_save_and_execute_succeed)
+                                msg = CommonUtils.getStr("sop_job_save_and_execute_succeed")
                                     .toString(),
                                 dialogType = TipDialog.DialogType.SUCCESS,
                                 countDownTime = 10,
@@ -269,9 +269,9 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
                             )
                         } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
+                                title = CommonUtils.getStr("action_succeed")
                                     .toString(),
-                                msg = CommonUtils.getStr(R.string.sop_job_save_and_execute_failed)
+                                msg = CommonUtils.getStr("sop_job_save_and_execute_failed")
                                     .toString(),
                                 dialogType = TipDialog.DialogType.SUCCESS,
                                 countDownTime = 10,
@@ -280,9 +280,9 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
                     }
                 } else {
                     TipDialog.show(
-                        title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
+                        title = CommonUtils.getStr("action_succeed")
                             .toString(),
-                        msg = CommonUtils.getStr(R.string.sop_job_save_succeed).toString(),
+                        msg = CommonUtils.getStr("sop_job_save_succeed").toString(),
                         dialogType = TipDialog.DialogType.SUCCESS,
                         countDownTime = 10,
                         onConfirmClick = {
@@ -295,8 +295,8 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
                 }
             } else {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed).toString(),
-                    msg = CommonUtils.getStr(R.string.sop_job_save_failed).toString(),
+                    title = CommonUtils.getStr("action_failed").toString(),
+                    msg = CommonUtils.getStr("sop_job_save_failed").toString(),
                     dialogType = TipDialog.DialogType.ERROR,
                     showConfirm = false,
                     countDownTime = 10

+ 25 - 25
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditJobFragment.kt

@@ -87,9 +87,9 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
         binding.save.setDebouncedClickListener {
             if (checkData()) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_hint).toString(),
+                    title = CommonUtils.getStr("action_hint").toString(),
                     msg = CommonUtils.getStr(
-                        R.string.job_save_tip,
+                        "job_save_tip",
                         args = listOf<String>(binding.jobNameEt.text.toString()).toTypedArray()
                     ).toString(),
                     dialogType = TipDialog.DialogType.INFO,
@@ -102,9 +102,9 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
         binding.saveAndExecute.setDebouncedClickListener {
             if (checkData()) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_confirm).toString(),
+                    title = CommonUtils.getStr("action_confirm").toString(),
                     msg = CommonUtils.getStr(
-                        R.string.job_save_and_execute_tip,
+                        "job_save_and_execute_tip",
                         args = listOf<String>(binding.jobNameEt.text.toString()).toTypedArray()
                     ).toString(),
                     dialogType = TipDialog.DialogType.INFO,
@@ -122,7 +122,7 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
         }
         binding.workflowModeSettingTv.setDebouncedClickListener {
             if (selectedModeId == null) {
-                PopTip.build().tip(R.string.please_select_workflow_mode)
+                showToast(CommonUtils.getStr("please_select_workflow_mode"))
                 return@setDebouncedClickListener
             }
             GlobalDataTempStore.getInstance()
@@ -138,7 +138,7 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_job_title).toString()
+                    CommonUtils.getStr("create_job_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -149,7 +149,7 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
         }
         binding.selectPointTv.setDebouncedClickListener {
             if (selectedWorkstationId == null) {
-                PopTip.build().tip(R.string.please_select_job_workstation)
+                showToast(CommonUtils.getStr("please_select_job_workstation"))
                 return@setDebouncedClickListener
             }
             GlobalDataTempStore.getInstance().saveData(
@@ -159,7 +159,7 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
                 .saveData(DataTransferConstants.KEY_SELECTED_POINT_DATA, selectedPointData)
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                CommonUtils.getStr(R.string.create_job_title).toString()
+                CommonUtils.getStr("create_job_title").toString()
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
@@ -174,11 +174,11 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
         }
         binding.selectMemberTv.setDebouncedClickListener {
             if (selectedWorkstationId == null) {
-                PopTip.build().tip(R.string.please_select_job_workstation)
+                showToast(CommonUtils.getStr("please_select_job_workstation"))
                 return@setDebouncedClickListener
             }
             if (selectedModeId == null) {
-                PopTip.build().tip(R.string.please_select_flow_mode)
+                showToast(CommonUtils.getStr("please_select_flow_mode"))
                 return@setDebouncedClickListener
             }
             GlobalDataTempStore.getInstance().saveData(
@@ -195,7 +195,7 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                CommonUtils.getStr(R.string.edit_job_title).toString()
+                CommonUtils.getStr("edit_job_title").toString()
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
@@ -265,9 +265,9 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
                     viewModel.startJob(it.second).observe(this) {
                         if (it) {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
+                                title = CommonUtils.getStr("action_succeed")
                                     .toString(),
-                                msg = CommonUtils.getStr(R.string.job_create_and_execute_succeed)
+                                msg = CommonUtils.getStr("job_create_and_execute_succeed")
                                     .toString(),
                                 dialogType = TipDialog.DialogType.SUCCESS,
                                 countDownTime = 10,
@@ -279,9 +279,9 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
                                 })
                         } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
+                                title = CommonUtils.getStr("action_failed")
                                     .toString(),
-                                msg = CommonUtils.getStr(R.string.job_create_and_execute_failed)
+                                msg = CommonUtils.getStr("job_create_and_execute_failed")
                                     .toString(),
                                 dialogType = TipDialog.DialogType.ERROR,
                                 showConfirm = false,
@@ -291,9 +291,9 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
                     }
                 } else {
                     TipDialog.show(
-                        title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
+                        title = CommonUtils.getStr("action_succeed")
                             .toString(),
-                        msg = CommonUtils.getStr(R.string.job_create_succeed).toString(),
+                        msg = CommonUtils.getStr("job_create_succeed").toString(),
                         dialogType = TipDialog.DialogType.SUCCESS,
                         countDownTime = 10,
                         onConfirmClick = {
@@ -305,8 +305,8 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
                 }
             } else {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed).toString(),
-                    msg = CommonUtils.getStr(R.string.job_create_failed).toString(),
+                    title = CommonUtils.getStr("action_failed").toString(),
+                    msg = CommonUtils.getStr("job_create_failed").toString(),
                     dialogType = TipDialog.DialogType.ERROR,
                     showConfirm = false,
                     countDownTime = 10
@@ -320,29 +320,29 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
      */
     private fun checkData(): Boolean {
         if (selectedWorkstationId == null) {
-            PopTip.build().tip(R.string.please_select_job_workstation)
+            showToast(CommonUtils.getStr("please_select_job_workstation"))
             return false
         }
         if (selectedModeId == null) {
-            PopTip.build().tip(R.string.please_select_flow_mode)
+            showToast(CommonUtils.getStr("please_select_flow_mode"))
             return false
         }
         if (binding.jobNameEt.text.isEmpty()) {
-            PopTip.build().tip(R.string.please_input_job_name)
+            showToast(CommonUtils.getStr("please_input_job_name"))
             return false
         }
         if (selectedPointData.isEmpty()) {
-            PopTip.build().tip(R.string.please_must_select_at_least_one_point)
+            showToast(CommonUtils.getStr("please_must_select_at_least_one_point"))
             return false
         }
         if (selectedLockerData.map { it.jobTicketGroupDataList }.any { it.isEmpty() }) {
-            PopTip.tip(com.grkj.ui_base.R.string.select_locker)
+            showToast(CommonUtils.getStr("select_locker"))
             return false
         }
         if (viewModel.workflowModes.find { it.modeId == selectedModeId }?.isColockSupport == true &&
             selectedColockerData.isEmpty()
         ) {
-            PopTip.tip(com.grkj.ui_base.R.string.select_coloker)
+            showToast(CommonUtils.getStr("select_coloker"))
             return false
         }
         return true

+ 19 - 19
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditSopFragment.kt

@@ -90,9 +90,9 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
         binding.confirm.setDebouncedClickListener {
             if (checkData()) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_confirm).toString(),
+                    title = CommonUtils.getStr("action_confirm").toString(),
                     msg = CommonUtils.getStr(
-                        R.string.sop_save_tip,
+                        "sop_save_tip",
                         args = listOf<String>(binding.sopNameEt.text.toString()).toTypedArray()
                     ).toString(),
                     dialogType = TipDialog.DialogType.INFO,
@@ -110,7 +110,7 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
         }
         binding.workflowModeSettingTv.setDebouncedClickListener {
             if (selectedModeId == null) {
-                PopTip.build().tip(R.string.please_select_workflow_mode)
+                showToast(CommonUtils.getStr("please_select_workflow_mode"))
                 return@setDebouncedClickListener
             }
             GlobalDataTempStore.getInstance()
@@ -126,7 +126,7 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_sop_title).toString()
+                    CommonUtils.getStr("create_sop_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -137,7 +137,7 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
         }
         binding.selectPointTv.setDebouncedClickListener {
             if (selectedWorkstationId == null) {
-                PopTip.build().tip(R.string.please_select_sop_workstation)
+                showToast(CommonUtils.getStr("please_select_sop_workstation"))
                 return@setDebouncedClickListener
             }
             GlobalDataTempStore.getInstance()
@@ -150,7 +150,7 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.edit_sop_title).toString()
+                    CommonUtils.getStr("edit_sop_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -166,11 +166,11 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
         }
         binding.selectMemberTv.setDebouncedClickListener {
             if (selectedWorkstationId == null) {
-                PopTip.build().tip(R.string.please_select_sop_workstation)
+                showToast(CommonUtils.getStr("please_select_sop_workstation"))
                 return@setDebouncedClickListener
             }
             if (selectedModeId == null) {
-                PopTip.build().tip(R.string.please_select_flow_mode)
+                showToast(CommonUtils.getStr("please_select_flow_mode"))
                 return@setDebouncedClickListener
             }
             GlobalDataTempStore.getInstance().saveData(
@@ -192,7 +192,7 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.edit_sop_title).toString()
+                    CommonUtils.getStr("edit_sop_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -259,8 +259,8 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
         ).observe(this) {
             if (it) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed).toString(),
-                    msg = CommonUtils.getStr(R.string.sop_save_succeed).toString(),
+                    title = CommonUtils.getStr("action_succeed").toString(),
+                    msg = CommonUtils.getStr("sop_save_succeed").toString(),
                     dialogType = TipDialog.DialogType.SUCCESS,
                     countDownTime = 10,
                     onConfirmClick = {
@@ -272,8 +272,8 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
                 )
             } else {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed).toString(),
-                    msg = CommonUtils.getStr(R.string.sop_save_failed).toString(),
+                    title = CommonUtils.getStr("action_failed").toString(),
+                    msg = CommonUtils.getStr("sop_save_failed").toString(),
                     dialogType = TipDialog.DialogType.ERROR,
                     showConfirm = false,
                     countDownTime = 10
@@ -287,28 +287,28 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
      */
     private fun checkData(): Boolean {
         if (selectedWorkstationId == null) {
-            PopTip.build().tip(R.string.please_select_sop_workstation)
+            showToast(CommonUtils.getStr("please_select_sop_workstation"))
             return false
         }
         if (selectedModeId == null) {
-            PopTip.build().tip(R.string.please_select_flow_mode)
+            showToast(CommonUtils.getStr("please_select_flow_mode"))
             return false
         }
         if (binding.sopNameEt.text.isEmpty()) {
-            PopTip.build().tip(R.string.please_input_sop_name)
+            showToast(CommonUtils.getStr("please_input_sop_name"))
             return false
         }
         if (selectedPointData.isEmpty()) {
-            PopTip.build().tip(R.string.please_must_select_at_least_one_point)
+            showToast(CommonUtils.getStr("please_must_select_at_least_one_point"))
             return false
         }
         if (selectedLockerData.map { it.jobTicketGroupDataList }.any { it.isEmpty() }) {
-            PopTip.tip(com.grkj.ui_base.R.string.select_locker)
+            showToast(CommonUtils.getStr("select_locker"))
             return false
         }
         if (viewModel.workflowModes.find { it.modeId == selectedModeId }?.isColockSupport == true && selectedColockerData.isEmpty()
         ) {
-            PopTip.tip(com.grkj.ui_base.R.string.select_coloker)
+            showToast(CommonUtils.getStr("select_coloker"))
             return false
         }
         return true

+ 23 - 23
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditSopJobFragment.kt

@@ -91,9 +91,9 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
         binding.save.setDebouncedClickListener {
             if (checkData()) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_hint).toString(),
+                    title = CommonUtils.getStr("action_hint").toString(),
                     msg = CommonUtils.getStr(
-                        R.string.job_save_tip,
+                        "job_save_tip",
                         args = listOf<String>(binding.jobNameEt.text.toString()).toTypedArray()
                     ).toString(),
                     dialogType = TipDialog.DialogType.INFO,
@@ -106,9 +106,9 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
         binding.saveAndExecute.setDebouncedClickListener {
             if (checkData()) {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_confirm).toString(),
+                    title = CommonUtils.getStr("action_confirm").toString(),
                     msg = CommonUtils.getStr(
-                        R.string.create_sop_job_tip,
+                        "create_sop_job_tip",
                         args = listOf<String>(binding.jobNameEt.text.toString()).toTypedArray()
                     ).toString(),
                     dialogType = TipDialog.DialogType.INFO,
@@ -118,7 +118,7 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
                             if (!it) {
                                 saveSopJob(true)
                             } else {
-                                TipDialog.showError(getString(R.string.current_sop_has_job_in_progress))
+                                TipDialog.showError(CommonUtils.getStr("current_sop_has_job_in_progress"))
                             }
                         }
                     })
@@ -129,7 +129,7 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
         }
         binding.sopTv.setDebouncedClickListener {
             if (selectedWorkstationId == null) {
-                PopTip.build().tip(R.string.please_select_sop_workstation)
+                showToast(CommonUtils.getStr("please_select_sop_workstation"))
                 return@setDebouncedClickListener
             } else {
                 viewModel.getSopByWorkstation(selectedWorkstationId!!).observe(this) {
@@ -139,7 +139,7 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
         }
         binding.workflowModeSettingTv.setDebouncedClickListener {
             if (selectedSop == null) {
-                PopTip.build().tip(R.string.please_select_sop)
+                showToast(CommonUtils.getStr("please_select_sop"))
                 return@setDebouncedClickListener
             }
             GlobalDataTempStore.getInstance()
@@ -155,7 +155,7 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_sop_job_title).toString()
+                    CommonUtils.getStr("create_sop_job_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(
@@ -166,7 +166,7 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
         }
         binding.selectMemberTv.setDebouncedClickListener {
             if (selectedWorkstationId == null) {
-                PopTip.build().tip(R.string.please_select_sop_workstation)
+                showToast(CommonUtils.getStr("please_select_sop_workstation"))
                 return@setDebouncedClickListener
             }
             GlobalDataTempStore.getInstance().saveData(
@@ -183,7 +183,7 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                CommonUtils.getStr(R.string.create_sop_title).toString()
+                CommonUtils.getStr("create_sop_title").toString()
             )
             GlobalDataTempStore.getInstance().saveData(
                 DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
@@ -253,9 +253,9 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
                     viewModel.startJob(it.second).observe(this) {
                         if (it) {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
+                                title = CommonUtils.getStr("action_succeed")
                                     .toString(),
-                                msg = CommonUtils.getStr(R.string.sop_job_save_and_execute_succeed)
+                                msg = CommonUtils.getStr("sop_job_save_and_execute_succeed")
                                     .toString(),
                                 dialogType = TipDialog.DialogType.SUCCESS,
                                 countDownTime = 10,
@@ -268,9 +268,9 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
                             )
                         } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
+                                title = CommonUtils.getStr("action_succeed")
                                     .toString(),
-                                msg = CommonUtils.getStr(R.string.sop_job_save_and_execute_failed)
+                                msg = CommonUtils.getStr("sop_job_save_and_execute_failed")
                                     .toString(),
                                 dialogType = TipDialog.DialogType.SUCCESS,
                                 countDownTime = 10,
@@ -279,9 +279,9 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
                     }
                 } else {
                     TipDialog.show(
-                        title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
+                        title = CommonUtils.getStr("action_succeed")
                             .toString(),
-                        msg = CommonUtils.getStr(R.string.sop_job_save_succeed).toString(),
+                        msg = CommonUtils.getStr("sop_job_save_succeed").toString(),
                         dialogType = TipDialog.DialogType.SUCCESS,
                         countDownTime = 10,
                         onConfirmClick = {
@@ -294,8 +294,8 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
                 }
             } else {
                 TipDialog.show(
-                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed).toString(),
-                    msg = CommonUtils.getStr(R.string.sop_job_save_failed).toString(),
+                    title = CommonUtils.getStr("action_failed").toString(),
+                    msg = CommonUtils.getStr("sop_job_save_failed").toString(),
                     dialogType = TipDialog.DialogType.ERROR,
                     showConfirm = false,
                     countDownTime = 10
@@ -309,24 +309,24 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
      */
     private fun checkData(): Boolean {
         if (selectedWorkstationId == null) {
-            PopTip.build().tip(R.string.please_select_sop_workstation)
+            showToast(CommonUtils.getStr("please_select_sop_workstation"))
             return false
         }
         if (selectedSopId == null) {
-            PopTip.tip(R.string.please_select_sop)
+            showToast(CommonUtils.getStr("please_select_sop"))
             return false
         }
         if (binding.jobNameEt.text.isEmpty()) {
-            PopTip.tip(R.string.please_input_job_name)
+            showToast(CommonUtils.getStr("please_input_job_name"))
             return false
         }
         if (selectedLockerData.map { it.jobTicketGroupDataList }.any { it.isEmpty() }) {
-            PopTip.tip(com.grkj.ui_base.R.string.select_locker)
+            showToast(CommonUtils.getStr("select_locker"))
             return false
         }
         if (viewModel.workflowModes.find { it.modeId == selectedSop?.modeId }?.isColockSupport == true && selectedColockerData.isEmpty()
         ) {
-            PopTip.tip(com.grkj.ui_base.R.string.select_coloker)
+            showToast(CommonUtils.getStr("select_coloker"))
             return false
         }
         return true

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/InProgressJobManageFragment.kt

@@ -61,7 +61,7 @@ class InProgressJobManageFragment : BaseFragment<FragmentInProgressJobManageBind
         val item = holder.getModel<JobTicketManageVo>()
         itemBinding.jobName.text = item.ticketName
         itemBinding.status.text =
-            if (item.exStatus != null) CommonUtils.getStr(R.string.abnormal) else JobTicketStatusEnum.getTicketStatusStr(
+            if (item.exStatus != null) CommonUtils.getStr("abnormal") else JobTicketStatusEnum.getTicketStatusStr(
                 item.ticketStatus
             )
         itemBinding.select.isVisible = false

+ 33 - 33
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/JobExecuteFragment.kt

@@ -83,14 +83,14 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
             }
         }
         binding.cancelJob.setDebouncedClickListener {
-            TipDialog.showInfo(getString(R.string.cancel_job_tip), onConfirmClick = {
+            TipDialog.showInfo(CommonUtils.getStr("cancel_job_tip"), onConfirmClick = {
                 viewModel.cancelJob().observe(this) {
                     navController.popBackStack()
                 }
             })
         }
         binding.finishJob.setDebouncedClickListener {
-            TipDialog.showInfo(getString(R.string.finish_job_tip), onConfirmClick = {
+            TipDialog.showInfo(CommonUtils.getStr("finish_job_tip"), onConfirmClick = {
                 viewModel.finishJob().observe(this) {
                     navController.popBackStack()
                 }
@@ -98,11 +98,11 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
         }
         binding.toLock.setDebouncedClickListener {
             if (viewModel.groupInfo.isEmpty()) {
-                showToast(CommonUtils.getStr(R.string.not_group_can_lock).toString())
+                showToast(CommonUtils.getStr("not_group_can_lock").toString())
                 return@setDebouncedClickListener
             }
             BottomMenu.show(viewModel.groupInfo.map { it.groupName })
-                .setTitle(CommonUtils.getStr(R.string.please_select_group))
+                .setTitle(CommonUtils.getStr("please_select_group"))
                 .setOnMenuItemClickListener { popMenu, itemText, position ->
                     popMenu.dismiss()
                     toLock(viewModel.groupInfo[position].groupId)
@@ -111,11 +111,11 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
         }
         binding.toUnlock.setDebouncedClickListener {
             if (viewModel.groupInfo.isEmpty()) {
-                showToast(CommonUtils.getStr(R.string.not_group_can_unlock).toString())
+                showToast(CommonUtils.getStr("not_group_can_unlock").toString())
                 return@setDebouncedClickListener
             }
             BottomMenu.show(viewModel.groupInfo.map { it.groupName })
-                .setTitle(CommonUtils.getStr(R.string.please_select_group))
+                .setTitle(CommonUtils.getStr("please_select_group"))
                 .setOnMenuItemClickListener { popMenu, itemText, position ->
                     popMenu.dismiss()
                     toUnLock(viewModel.groupInfo[position].groupId)
@@ -162,7 +162,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
     private fun toLock(groupId: Long) {
         val groupKey = viewModel.ticketKey.find { it.groupId == groupId && it.ticketType == 0 }
         if (groupKey?.collectTime != null && groupKey.giveBackTime == null) {
-            showToast(getString(R.string.group_job_in_progress))
+            showToast(CommonUtils.getStr("group_job_in_progress"))
             return
         }
         viewModel.toLock(groupId).observe(this) {
@@ -173,7 +173,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
     private fun toUnLock(groupId: Long) {
         val groupKey = viewModel.ticketKey.find { it.groupId == groupId && it.ticketType == 1 }
         if (groupKey?.collectTime != null && groupKey.giveBackTime == null) {
-            showToast(getString(R.string.group_job_in_progress))
+            showToast(CommonUtils.getStr("group_job_in_progress"))
             return
         }
         viewModel.toUnLock(groupId).observe(this) {
@@ -217,11 +217,11 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
         binding.colockerLayout.isVisible = index == 2
         binding.dataTitleTv.text = when (index) {
             0 -> CommonUtils.getStr(
-                R.string.job_execute_step_description, viewModel.currentStepData?.stepTitle ?: ""
+                "job_execute_step_description", viewModel.currentStepData?.stepTitle ?: ""
             ).toString()
 
-            1 -> CommonUtils.getStr(R.string.job_execute_lock_status_title).toString()
-            2 -> CommonUtils.getStr(R.string.job_execute_colocker_colock_status_title).toString()
+            1 -> CommonUtils.getStr("job_execute_lock_status_title").toString()
+            2 -> CommonUtils.getStr("job_execute_colocker_colock_status_title").toString()
             else -> ""
         }
     }
@@ -292,13 +292,13 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                             stepClickConfirm(adapter, item, workflowStep)
                         } else {
                             showToast(
-                                CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
+                                CommonUtils.getStr("no_permission_to_handle")
                                     .toString()
                             )
                         }
                     } else {
                         val errorTipData = viewModel.getStepErrorTip(workflowStep)
-                        PopTip.build().tip(errorTipData.first)
+                        showToast(errorTipData.first)
                         errorTipData.second?.let {
                             checkLayout(it)
                         }
@@ -318,7 +318,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
             if (viewModel.stepConditionsComplete(workflowStep)) {
                 TipDialog.showInfo(
                     msg = CommonUtils.getStr(
-                        com.grkj.ui_base.R.string.action_confirm_content,
+                        "action_confirm_content",
                         workflowStep?.stepTitleShort.toString()
                     ).toString(), onConfirmClick = {
                         item.stepStatus = "1"
@@ -326,7 +326,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                             TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT)
                         viewModel.updateStepStatus(item).observe(this@JobExecuteFragment) {
                             if (it == false) {
-                                PopTip.build().tip(R.string.step_confirm_failed)
+                                showToast(CommonUtils.getStr("step_confirm_failed"))
                             } else {
                                 logger.info("点击更新步骤状态完成")
                                 checkLayout(0)
@@ -337,7 +337,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                     })
             } else {
                 val errorTipData = viewModel.getStepErrorTip(workflowStep)
-                PopTip.build().tip(errorTipData.first)
+                showToast(errorTipData.first)
                 errorTipData.second?.let {
                     checkLayout(it)
                 }
@@ -394,27 +394,27 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
         }
         return when {
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.recognize_work_content).toString()
+                CommonUtils.getStr("recognize_work_content").toString()
             ) == true -> R.mipmap.icon_loto_step_1
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.power_isolation_way).toString()
+                CommonUtils.getStr("power_isolation_way").toString()
             ) == true -> R.mipmap.icon_loto_step_2
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.shutdown).toString()
+                CommonUtils.getStr("shutdown").toString()
             ) == true -> R.mipmap.icon_loto_step_4
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.ensure_power_isolation).toString()
+                CommonUtils.getStr("ensure_power_isolation").toString()
             ) == true -> R.mipmap.icon_loto_step_6
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.check_before_unlocking).toString()
+                CommonUtils.getStr("check_before_unlocking").toString()
             ) == true -> R.mipmap.icon_loto_step_7
 
             workflowStep.stepTitleShort?.contains(
-                CommonUtils.getStr(com.grkj.ui_base.R.string.unlock_and_restore_switch).toString()
+                CommonUtils.getStr("unlock_and_restore_switch").toString()
             ) == true -> R.mipmap.icon_loto_step_8
 
             workflowStep.enableSetLocker || workflowStep.enableSetColocker -> R.mipmap.icon_step_select_member
@@ -472,7 +472,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
             EventConstants.EVENT_RFID_CARD_READ -> {
                 if (MainDomainData.userInfo?.userName != viewModel.ticketData?.createBy) {
                     showToast(
-                        CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
+                        CommonUtils.getStr("no_permission_to_handle")
                             .toString()
                     )
                     return
@@ -494,7 +494,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                                         logger.info("添加共锁")
                                         TipDialog.showInfo(
                                             msg = CommonUtils.getStr(
-                                                com.grkj.ui_base.R.string.confirm_to_colock,
+                                                "confirm_to_colock",
                                                 colocker.nickName ?: ""
                                             ).toString(), countDownTime = 10, onConfirmClick = {
                                                 colocker.jobStatus = "1"
@@ -515,7 +515,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                                         logger.info("解除共锁")
                                         TipDialog.showInfo(
                                             msg = CommonUtils.getStr(
-                                                com.grkj.ui_base.R.string.confirm_to_uncolock,
+                                                "confirm_to_uncolock",
                                                 colocker.nickName ?: ""
                                             ).toString(), countDownTime = 10, onConfirmClick = {
                                                 colocker.jobStatus = "2"
@@ -536,11 +536,11 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                                         PopTip.build()
                                             .tip(R.string.currently_unable_to_lock_together)
                                     }
-                                } ?: PopTip.build().tip(R.string.invalid_user)
-                            } ?: PopTip.build().tip(R.string.invalid_card)
+                                } ?: showToast(CommonUtils.getStr("invalid_user"))
+                            } ?: showToast(CommonUtils.getStr("invalid_card"))
                         }
                     } else {
-                        PopTip.build().tip(R.string.currently_unable_to_lock_together)
+                        showToast(CommonUtils.getStr("currently_unable_to_lock_together"))
                     }
                 }
             }
@@ -575,7 +575,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                 it.stepStatus = "1"
                 viewModel.updateStepStatus(it).observe(this@JobExecuteFragment) {
                     if (it == false) {
-                        PopTip.build().tip(R.string.step_confirm_failed)
+                        showToast(CommonUtils.getStr("step_confirm_failed"))
                     } else {
                         logger.info("检查更新步骤状态完成")
                     }
@@ -643,7 +643,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
         super.initData()
         viewModel.checkMyTodoForHandleKey().observe(this) {}
         if (!GlobalDataTempStore.getInstance().hasData(DataTransferConstants.KEY_JOB_TICKET_ID)) {
-            PopTip.build().tip(R.string.job_lost)
+            showToast(CommonUtils.getStr("job_lost"))
             navController.popBackStack()
             return
         }
@@ -672,7 +672,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                 }
             } else {
                 TipDialog.showError(
-                    msg = CommonUtils.getStr(com.grkj.ui_base.R.string.ticket_lost).toString(),
+                    msg = CommonUtils.getStr("ticket_lost").toString(),
                     onConfirmClick = {
                         navController.popBackStack()
                     },
@@ -732,7 +732,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                     viewModel.currentStepData?.let {
                         viewModel.updateStepStatus(it).observe(this@JobExecuteFragment) {
                             if (it == false) {
-                                PopTip.build().tip(R.string.step_confirm_failed)
+                                showToast(CommonUtils.getStr("step_confirm_failed"))
                             } else {
                                 checkCurrentStep()
                             }
@@ -752,7 +752,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                                 TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT)
                             viewModel.updateStepStatusBack(it).observe(this@JobExecuteFragment) {
                                 if (it == false) {
-                                    PopTip.build().tip(R.string.step_confirm_failed)
+                                    showToast(CommonUtils.getStr("step_confirm_failed"))
                                 } else {
                                     viewModel.currentStepData =
                                         viewModel.ticketStep.firstOrNull { it.stepStatus == "0" }

+ 7 - 7
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/JobManageFragment.kt

@@ -64,7 +64,7 @@ class JobManageFragment : BaseFragment<FragmentJobManageBinding>() {
 
     private fun deleteSelected() {
         if (viewModel.jobManageDataList.none { it.isSelected }) {
-            PopTip.build().tip(R.string.please_select_job)
+            showToast(CommonUtils.getStr("please_select_job"))
             return
         }
         if (viewModel.jobManageDataList.filter { it.isSelected }.any {
@@ -73,18 +73,18 @@ class JobManageFragment : BaseFragment<FragmentJobManageBinding>() {
                     JobTicketStatusEnum.FINISHED.status
                 )
             }) {
-            TipDialog.showError(getString(R.string.has_job_in_progress))
+            TipDialog.showError(CommonUtils.getStr("has_job_in_progress"))
             return
         }
         TipDialog.show(
-            msg = CommonUtils.getStr(R.string.check_delete_job).toString(),
+            msg = CommonUtils.getStr("check_delete_job").toString(),
             countDownTime = 10,
             onConfirmClick = {
                 viewModel.deleteSelectedJob().observe(this) {
                     if (it) {
                         TipDialog.show(
                             dialogType = TipDialog.DialogType.SUCCESS,
-                            msg = CommonUtils.getStr(R.string.job_manage_delete_succeed)
+                            msg = CommonUtils.getStr("job_manage_delete_succeed")
                                 .toString(),
                             showConfirm = false,
                             countDownTime = 10,
@@ -98,7 +98,7 @@ class JobManageFragment : BaseFragment<FragmentJobManageBinding>() {
                     } else {
                         TipDialog.show(
                             dialogType = TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(R.string.job_manage_delete_failed)
+                            msg = CommonUtils.getStr("job_manage_delete_failed")
                                 .toString(),
                             showConfirm = false,
                             countDownTime = 10
@@ -138,9 +138,9 @@ class JobManageFragment : BaseFragment<FragmentJobManageBinding>() {
                     navController.navigate(R.id.action_jobManageFragment_to_editJobFragment)
                 }
             } else if (item.ticketStatus == JobTicketStatusEnum.CANCELED.status) {
-                PopTip.build().tip(R.string.job_canceled)
+                showToast(CommonUtils.getStr("job_canceled"))
             } else if (item.ticketStatus == JobTicketStatusEnum.FINISHED.status) {
-                PopTip.build().tip(R.string.job_finished)
+                showToast(CommonUtils.getStr("job_finished"))
             } else if (item.exStatus == viewModel.jobTicketStatus.find { it.dictLabel == "异常" }?.dictValue?.toInt()) {
                 viewModel.getExceptionIdByTicketId(item.ticketId).observe(this@JobManageFragment) {
                     GlobalDataTempStore.getInstance()

+ 26 - 24
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/MyTodoListFragment.kt

@@ -55,18 +55,18 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
     private var isFirstEnter: Boolean = true
     private val tabKey: List<String> by lazy {
         listOf(
-            getString(R.string.wait_header),
-            getString(R.string.todo_header),
-            getString(R.string.done_header)
+            CommonUtils.getStr("wait_header"),
+            CommonUtils.getStr("todo_header"),
+            CommonUtils.getStr("done_header")
         )
     }
 
     private val handleTimeData: List<String> by lazy {
         listOf(
-            getString(R.string.all),
-            getString(R.string.handle_time_last_7_days),
-            getString(R.string.handle_time_last_30_days),
-            getString(R.string.handle_time_custom_time_range)
+            CommonUtils.getStr("all"),
+            CommonUtils.getStr("handle_time_last_7_days"),
+            CommonUtils.getStr("handle_time_last_30_days"),
+            CommonUtils.getStr("handle_time_custom_time_range")
         )
     }
 
@@ -98,7 +98,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
      * 设置处理时间
      */
     private fun setupHandleTime() {
-        binding.handleTime.text = getString(R.string.all)
+        binding.handleTime.text = CommonUtils.getStr("all")
         binding.handleTime.setDebouncedClickListener {
             TextDropDownDialog.showSingle(
                 handleTimeData.map {
@@ -190,9 +190,9 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
 
     private fun setupTabs() {
         val tabTitles = listOf(
-            getString(R.string.wait_header),
-            getString(R.string.todo_header),
-            getString(R.string.done_header)
+            CommonUtils.getStr("wait_header"),
+            CommonUtils.getStr("todo_header"),
+            CommonUtils.getStr("done_header")
         )
         tabTitles.forEach { title ->
             binding.tabLayout.addTab(
@@ -316,7 +316,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
         }
         itemBinding.btnHandle.setDebouncedClickListener {
             if (item.todoType == OperationTypeEnum.UNKNOWN) {
-                TipDialog.showError(getString(R.string.handle_unknown))
+                TipDialog.showError(CommonUtils.getStr("handle_unknown"))
                 return@setDebouncedClickListener
             }
             TipDialog.showInfo(viewModel.getHandleTip(item), onConfirmClick = {
@@ -326,11 +326,11 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
                         when (item.todoType) {
                             OperationTypeEnum.LOCK_TAKE_KEY -> item.groupId?.let {
                                 jobExecuteViewModel.toLock(it).observe(this) {}
-                            } ?: showToast(getString(R.string.not_group_can_lock))
+                            } ?: showToast(CommonUtils.getStr("not_group_can_lock"))
 
                             OperationTypeEnum.UNLOCK_TAKE_KEY -> item.groupId?.let {
                                 jobExecuteViewModel.toUnLock(it).observe(this) {}
-                            } ?: showToast(getString(R.string.not_group_can_unlock))
+                            } ?: showToast(CommonUtils.getStr("not_group_can_unlock"))
 
                             OperationTypeEnum.COLOCK -> {
                                 viewModel.startReadCard = true
@@ -417,7 +417,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
             EventConstants.EVENT_RFID_CARD_READ -> {
                 if (MainDomainData.userInfo?.userName != jobExecuteViewModel.ticketData?.createBy) {
                     showToast(
-                        CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
+                        CommonUtils.getStr("no_permission_to_handle")
                             .toString()
                     )
                     return
@@ -441,7 +441,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
                                         logger.info("添加共锁")
                                         TipDialog.showInfo(
                                             msg = CommonUtils.getStr(
-                                                com.grkj.ui_base.R.string.confirm_to_colock,
+                                                "confirm_to_colock",
                                                 colocker.nickName ?: ""
                                             ).toString(), countDownTime = 10, onConfirmClick = {
                                                 colocker.jobStatus = "1"
@@ -462,7 +462,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
                                         logger.info("解除共锁")
                                         TipDialog.showInfo(
                                             msg = CommonUtils.getStr(
-                                                com.grkj.ui_base.R.string.confirm_to_uncolock,
+                                                "confirm_to_uncolock",
                                                 colocker.nickName ?: ""
                                             ).toString(), countDownTime = 10, onConfirmClick = {
                                                 colocker.jobStatus = "2"
@@ -483,11 +483,13 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
                                         PopTip.build()
                                             .tip(R.string.currently_unable_to_lock_together)
                                     }
-                                } ?: PopTip.build().tip(R.string.invalid_user)
-                            } ?: PopTip.build().tip(R.string.invalid_card)
+                                } ?:
+                                showToast(CommonUtils.getStr("invalid_user"))
+                            } ?:
+                            showToast(CommonUtils.getStr("invalid_card"))
                         }
                     } else {
-                        PopTip.build().tip(R.string.currently_unable_to_lock_together)
+                        showToast(CommonUtils.getStr("currently_unable_to_lock_together"))
                     }
                 }
             }
@@ -518,7 +520,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
                 item.updateTime = TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT)
                 jobExecuteViewModel.updateStepStatus(item).observe(this@MyTodoListFragment) {
                     if (it == false) {
-                        showToast(getString(R.string.handle_failed))
+                        showToast(CommonUtils.getStr("handle_failed"))
                     } else {
                         getData()
                     }
@@ -631,7 +633,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
                             }
                         } else {
                             showToast(
-                                CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
+                                CommonUtils.getStr("no_permission_to_handle")
                                     .toString()
                             )
                         }
@@ -649,7 +651,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
                                 jobExecuteViewModel.updateStepStatusBack(it)
                                     .observe(this@MyTodoListFragment) {
                                         if (it == false) {
-                                            PopTip.build().tip(R.string.step_confirm_failed)
+                                            showToast(CommonUtils.getStr("step_confirm_failed"))
                                         } else {
                                             jobExecuteViewModel.currentStepData =
                                                 jobExecuteViewModel.ticketStep.firstOrNull { it.stepStatus == "0" }
@@ -679,7 +681,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
                 it.updateTime = TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT)
                 jobExecuteViewModel.updateStepStatus(it).observe(this@MyTodoListFragment) {
                     if (it == false) {
-                        PopTip.build().tip(R.string.step_confirm_failed)
+                        showToast(CommonUtils.getStr("step_confirm_failed"))
                     } else {
                         logger.info("检查更新步骤状态完成")
                         getData()

+ 4 - 4
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/SopManageFragment.kt

@@ -70,17 +70,17 @@ class SopManageFragment : BaseFragment<FragmentSopManageBinding>() {
         }
         viewModel.checkSopHasOnGoingJob().observe(this) {
             if (it) {
-                TipDialog.showError(getString(R.string.has_job_in_progress))
+                TipDialog.showError(CommonUtils.getStr("has_job_in_progress"))
             } else {
                 TipDialog.show(
-                    msg = CommonUtils.getStr(R.string.check_delete_sop).toString(),
+                    msg = CommonUtils.getStr("check_delete_sop").toString(),
                     countDownTime = 10,
                     onConfirmClick = {
                         viewModel.deleteSelectedSop().observe(this) {
                             if (it) {
                                 TipDialog.show(
                                     dialogType = TipDialog.DialogType.SUCCESS,
-                                    msg = CommonUtils.getStr(R.string.sop_manage_delete_succeed)
+                                    msg = CommonUtils.getStr("sop_manage_delete_succeed")
                                         .toString(),
                                     showConfirm = false,
                                     countDownTime = 10,
@@ -94,7 +94,7 @@ class SopManageFragment : BaseFragment<FragmentSopManageBinding>() {
                             } else {
                                 TipDialog.show(
                                     dialogType = TipDialog.DialogType.ERROR,
-                                    msg = CommonUtils.getStr(R.string.sop_manage_delete_failed)
+                                    msg = CommonUtils.getStr("sop_manage_delete_failed")
                                         .toString(),
                                     showConfirm = false,
                                     countDownTime = 10

+ 9 - 9
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/WorkflowManageFragment.kt

@@ -59,18 +59,18 @@ class WorkflowManageFragment : BaseFragment<FragmentWorkflowManageBinding>() {
 
     private fun deleteSelected() {
         if (viewModel.workflowModeData.none { it.isSelected }) {
-            showToast(getString(R.string.please_select_workflow_mode))
+            showToast(CommonUtils.getStr("please_select_workflow_mode"))
             return
         }
         TipDialog.show(
-            msg = CommonUtils.getStr(R.string.check_delete_workflow_mode).toString(),
+            msg = CommonUtils.getStr("check_delete_workflow_mode").toString(),
             countDownTime = 10,
             onConfirmClick = {
                 viewModel.deleteSelectedWorkflowMode().observe(this) {
                     if (it) {
                         TipDialog.show(
                             dialogType = TipDialog.DialogType.SUCCESS,
-                            msg = CommonUtils.getStr(R.string.workflow_mode_manage_delete_succeed)
+                            msg = CommonUtils.getStr("workflow_mode_manage_delete_succeed")
                                 .toString(),
                             showConfirm = false,
                             countDownTime = 10,
@@ -84,7 +84,7 @@ class WorkflowManageFragment : BaseFragment<FragmentWorkflowManageBinding>() {
                     } else {
                         TipDialog.show(
                             dialogType = TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(R.string.job_manage_delete_failed)
+                            msg = CommonUtils.getStr("job_manage_delete_failed")
                                 .toString(),
                             showConfirm = false,
                             countDownTime = 10
@@ -113,9 +113,9 @@ class WorkflowManageFragment : BaseFragment<FragmentWorkflowManageBinding>() {
             item.status = checked
             viewModel.updateWorkflowMode(item).observe(this@WorkflowManageFragment) {
                 if (it) {
-                    showToast(getString(R.string.workflow_mode_status_update_succeed))
+                    showToast(CommonUtils.getStr("workflow_mode_status_update_succeed"))
                 } else {
-                    showToast(getString(R.string.workflow_mode_status_update_failed))
+                    showToast(CommonUtils.getStr("workflow_mode_status_update_failed"))
                 }
             }
         }
@@ -128,12 +128,12 @@ class WorkflowManageFragment : BaseFragment<FragmentWorkflowManageBinding>() {
         }
         itemBinding.delete.setDebouncedClickListener {
             if (item.isPreset) {
-                showToast(CommonUtils.getStr(R.string.preset_workflow_can_not_delete).toString())
+                showToast(CommonUtils.getStr("preset_workflow_can_not_delete").toString())
                 return@setDebouncedClickListener
             }
             viewModel.deleteWorkflowMode(item).observe(this@WorkflowManageFragment) {
                 TipDialog.showSuccess(
-                    CommonUtils.getStr(R.string.delete_success).toString(),
+                    CommonUtils.getStr("delete_success").toString(),
                     onConfirmClick = {
                         getData()
                     })
@@ -148,7 +148,7 @@ class WorkflowManageFragment : BaseFragment<FragmentWorkflowManageBinding>() {
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.workflow_manage_title).toString()
+                    CommonUtils.getStr("workflow_manage_title").toString()
                 )
             GlobalDataTempStore.getInstance()
                 .saveData(

+ 6 - 6
app/src/main/java/com/grkj/iscs/features/main/fragment/user_info/ResetPasswordFragment.kt

@@ -41,7 +41,7 @@ class ResetPasswordFragment : BaseFragment<FragmentResetPasswordBinding>() {
                 ).observe(this) {
                     if (it) {
                         TipDialog.showSuccess(
-                            CommonUtils.getStr(R.string.reset_user_password_succeed).toString(),
+                            CommonUtils.getStr("reset_user_password_succeed").toString(),
                             onConfirmClick = {
                                 LogoutEvent.sendLogoutEvent()
                             }, onCancelClick = {
@@ -49,7 +49,7 @@ class ResetPasswordFragment : BaseFragment<FragmentResetPasswordBinding>() {
                             })
                     } else {
                         TipDialog.showError(
-                            CommonUtils.getStr(R.string.reset_user_password_failed).toString()
+                            CommonUtils.getStr("reset_user_password_failed").toString()
                         )
                     }
                 }
@@ -79,19 +79,19 @@ class ResetPasswordFragment : BaseFragment<FragmentResetPasswordBinding>() {
                 CommonConstants.REGEX_PASSWORD
             )
         ) {
-            showToast(getString(R.string.password_regex_tip))
+            showToast(CommonUtils.getStr("password_regex_tip"))
             return false
         }
         if (binding.repeatNewPasswordEt.text.toString().isEmpty()) {
-            PopTip.tip(R.string.please_input_repeat_new_password)
+            showToast(CommonUtils.getStr("please_input_repeat_new_password"))
             return false
         }
         if (binding.newPasswordEt.text.toString() != binding.repeatNewPasswordEt.text.toString()) {
-            PopTip.tip(R.string.new_password_and_repeat_new_password_not_same)
+            showToast(CommonUtils.getStr("new_password_and_repeat_new_password_not_same"))
             return false
         }
         if (binding.newPasswordEt.text.toString() == binding.oldPasswordEt.text.toString()) {
-            PopTip.tip(R.string.new_password_cannot_be_the_same_as_the_old_password)
+            showToast(CommonUtils.getStr("new_password_cannot_be_the_same_as_the_old_password"))
             return false
         }
         return true

+ 10 - 9
app/src/main/java/com/grkj/iscs/features/main/fragment/user_info/SetFaceFragment.kt

@@ -13,6 +13,7 @@ import com.grkj.iscs.features.main.viewmodel.user_info.UserInfoViewModel
 import com.grkj.shared.utils.ArcSoftUtil
 import com.grkj.shared.utils.CancellableTimer
 import com.grkj.ui_base.base.BaseFragment
+import com.grkj.ui_base.utils.CommonUtils
 import com.sik.sikcore.date.TimeUtils
 import com.sik.sikcore.extension.file
 import com.sik.sikcore.extension.setDebouncedClickListener
@@ -38,7 +39,7 @@ class SetFaceFragment : BaseFragment<FragmentSetFaceBinding>() {
         binding.image.visibility = View.VISIBLE
         binding.recapture.visibility = View.VISIBLE
         binding.confirm.visibility = View.VISIBLE
-        binding.countDownTip.text = getString(R.string.detect_face_tip)
+        binding.countDownTip.text = CommonUtils.getStr("detect_face_tip")
         binding.countDownTip.isVisible = false
     }
     private val reCaptureTimer = CancellableTimer(2000, 1000, {}) {
@@ -121,8 +122,8 @@ class SetFaceFragment : BaseFragment<FragmentSetFaceBinding>() {
             binding.faceNotSetIv.isVisible = viewModel.faceData.isEmpty()
             binding.faceSetIv.isVisible = viewModel.faceData.isNotEmpty()
             if (viewModel.faceData.isEmpty()) {
-                binding.setOrResetFace.text = getString(R.string.set_data_tv)
-                binding.faceSetTipTv.text = getString(R.string.face_not_set_tip)
+                binding.setOrResetFace.text = CommonUtils.getStr("set_data_tv")
+                binding.faceSetTipTv.text = CommonUtils.getStr("face_not_set_tip")
             } else {
                 logger.info("人脸图片地址:${viewModel.faceData.toJson()}")
                 val faceFile = viewModel.faceData[0].content.file()
@@ -131,8 +132,8 @@ class SetFaceFragment : BaseFragment<FragmentSetFaceBinding>() {
                     val faceBitmap = ImageConvertUtils.base64ToBitmap(faceBase64)
                     binding.faceSetIv.setImageBitmap(faceBitmap)
                 }
-                binding.setOrResetFace.text = getString(R.string.reset_data_tv)
-                binding.faceSetTipTv.text = getString(R.string.face_set_tip)
+                binding.setOrResetFace.text = CommonUtils.getStr("reset_data_tv")
+                binding.faceSetTipTv.text = CommonUtils.getStr("face_set_tip")
             }
         }
     }
@@ -151,14 +152,14 @@ class SetFaceFragment : BaseFragment<FragmentSetFaceBinding>() {
             binding.tipTv.isVisible = faceSize > 1 || alive == false
             logger.info("人脸检测结果: ${bitmap == null},$faceSize,$alive")
             if (faceSize > 1) {
-                binding.tipTv.text = getString(R.string.only_one_person_allowed)
+                binding.tipTv.text = CommonUtils.getStr("only_one_person_allowed")
                 ArcSoftUtil.inDetecting = false
                 stopCountDown()
                 return@initCamera
             }
             if (alive == false) {
                 binding.tipTv.text =
-                    getString(R.string.real_person_verification_required)
+                    CommonUtils.getStr("real_person_verification_required")
                 ArcSoftUtil.inDetecting = false
                 stopCountDown()
                 return@initCamera
@@ -176,14 +177,14 @@ class SetFaceFragment : BaseFragment<FragmentSetFaceBinding>() {
 
     private fun startCountDown() {
         isInCountDown = true
-        binding.countDownTip.text = getString(R.string.detect_face_tip)
+        binding.countDownTip.text = CommonUtils.getStr("detect_face_tip")
         binding.countDownTip.isVisible = true
         captureTimer.start()
     }
 
     private fun stopCountDown() {
         isInCountDown = false
-        binding.countDownTip.text = getString(R.string.detect_face_tip)
+        binding.countDownTip.text = CommonUtils.getStr("detect_face_tip")
         binding.countDownTip.isVisible = false
         captureTimer.cancel()
     }

+ 11 - 11
app/src/main/java/com/grkj/iscs/features/main/fragment/user_info/SetFingerprintFragment.kt

@@ -72,7 +72,7 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
         binding.delete.setDebouncedClickListener {
             TipDialog.showInfo(
                 CommonUtils.getStr(
-                    com.grkj.ui_base.R.string.fingerprint_delete_selected_confirm_tip
+                    "fingerprint_delete_selected_confirm_tip"
                 ).toString(),
                 countDownTime = 10,
                 onConfirmClick = {
@@ -82,7 +82,7 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
                         .observe(this) {
                             if (it) {
                                 TipDialog.showSuccess(
-                                    getString(R.string.delete_success),
+                                    CommonUtils.getStr("delete_success"),
                                     onConfirmClick = {
                                         getData()
                                     })
@@ -102,19 +102,19 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
                 val itemBinding = getBinding<ItemSetFingerprintBinding>()
                 val item = getModel<FingerprintDataVo>()
                 itemBinding.fingerprintCode.text =
-                    getString(R.string.fingerprint_code_str, item.group?.take(6))
+                    CommonUtils.getStr("fingerprint_code_str", item.group?.take(6))
                 itemBinding.delete.setDebouncedClickListener {
                     TipDialog.showInfo(
                         CommonUtils.getStr(
-                            com.grkj.ui_base.R.string.fingerprint_delete_confirm_tip,
-                            getString(R.string.fingerprint_code_str, item.group?.take(6))
+                            "fingerprint_delete_confirm_tip",
+                            CommonUtils.getStr("fingerprint_code_str", item.group?.take(6))
                         ).toString(),
                         countDownTime = 10,
                         onConfirmClick = {
                             viewModel.deleteFingerprintByIds(item.fingerprintData.map { it.recordId })
                                 .observe(this@SetFingerprintFragment) {
                                     if (it) {
-                                        TipDialog.showSuccess(getString(R.string.delete_success))
+                                        TipDialog.showSuccess(CommonUtils.getStr("delete_success"))
                                         getData()
                                     }
                                 }
@@ -164,13 +164,13 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
                                 .observe(this@SetFingerprintFragment) {
                                     getData()
                                 }
-                            showToast(getString(R.string.please_re_press_fingerprint_again))
+                            showToast(CommonUtils.getStr("please_re_press_fingerprint_again"))
                         } else {
-                            pressTip?.text = getString(
-                                com.grkj.ui_base.R.string.fingerprint_scan_tip,
+                            pressTip?.text = CommonUtils.getStr(
+                                "fingerprint_scan_tip",
                                 maxPressTimes - mFingerprintPressTimes
                             )
-                            showToast(getString(R.string.please_press_fingerprint_again))
+                            showToast(CommonUtils.getStr("please_press_fingerprint_again"))
                         }
                     } else {
                         mFingerprintInputErrorTimes++
@@ -186,7 +186,7 @@ class SetFingerprintFragment : BaseFragment<FragmentSetFingerprintBinding>() {
                                 .observe(this@SetFingerprintFragment) {
                                     getData()
                                 }
-                            showToast(getString(R.string.please_re_press_fingerprint_again))
+                            showToast(CommonUtils.getStr("please_re_press_fingerprint_again"))
                         }
                     }
                 }

+ 5 - 4
app/src/main/java/com/grkj/iscs/features/main/fragment/user_info/SetJobCardFragment.kt

@@ -9,6 +9,7 @@ import com.grkj.iscs.features.main.viewmodel.user_info.UserInfoViewModel
 import com.grkj.shared.model.EventBean
 import com.grkj.ui_base.base.BaseFragment
 import com.grkj.ui_base.dialog.TipDialog
+import com.grkj.ui_base.utils.CommonUtils
 import com.grkj.ui_base.utils.event.RFIDCardReadEvent
 import com.sik.sikcore.extension.setDebouncedClickListener
 import dagger.hilt.android.AndroidEntryPoint
@@ -75,11 +76,11 @@ class SetJobCardFragment : BaseFragment<FragmentSetJobCardBinding>() {
             binding.jobCardSetIv.isVisible = viewModel.jobCardDataVo.isNotEmpty()
             binding.jobCardNotSetIv.isVisible = viewModel.jobCardDataVo.isEmpty()
             if (viewModel.jobCardDataVo.isEmpty()) {
-                binding.jobCardSetTipTv.text = getString(R.string.job_card_not_set_tip)
-                binding.setOrResetJobCard.text = getString(R.string.set_data_tv)
+                binding.jobCardSetTipTv.text = CommonUtils.getStr("job_card_not_set_tip")
+                binding.setOrResetJobCard.text = CommonUtils.getStr("set_data_tv")
             } else {
-                binding.jobCardSetTipTv.text = getString(R.string.job_card_set_tip)
-                binding.setOrResetJobCard.text = getString(R.string.reset_data_tv)
+                binding.jobCardSetTipTv.text = CommonUtils.getStr("job_card_set_tip")
+                binding.setOrResetJobCard.text = CommonUtils.getStr("reset_data_tv")
             }
         }
     }

+ 7 - 7
app/src/main/java/com/grkj/iscs/features/main/fragment/user_info/UserInfoFragment.kt

@@ -43,7 +43,7 @@ class UserInfoFragment : BaseFragment<FragmentUserInfoBinding>() {
         binding.image.visibility = View.VISIBLE
         binding.recapture.visibility = View.VISIBLE
         binding.setAvatarConfirm.visibility = View.VISIBLE
-        binding.countDownTip.text = getString(R.string.detect_face_tip)
+        binding.countDownTip.text = CommonUtils.getStr("detect_face_tip")
         binding.countDownTip.isVisible = false
     }
     private val reCaptureTimer = CancellableTimer(2000, 1000, {}) {
@@ -120,11 +120,11 @@ class UserInfoFragment : BaseFragment<FragmentUserInfoBinding>() {
                 ).observe(this) {
                     if (it) {
                         TipDialog.showSuccess(
-                            CommonUtils.getStr(R.string.update_user_succeed).toString()
+                            CommonUtils.getStr("update_user_succeed").toString()
                         )
                     } else {
                         TipDialog.showError(
-                            CommonUtils.getStr(R.string.update_user_failed).toString()
+                            CommonUtils.getStr("update_user_failed").toString()
                         )
                     }
                 }
@@ -182,14 +182,14 @@ class UserInfoFragment : BaseFragment<FragmentUserInfoBinding>() {
             binding.tipTv.isVisible = faceSize > 1 || alive == false
             logger.info("人脸检测结果: ${bitmap == null},$faceSize,$alive")
             if (faceSize > 1) {
-                binding.tipTv.text = getString(R.string.only_one_person_allowed)
+                binding.tipTv.text = CommonUtils.getStr("only_one_person_allowed")
                 ArcSoftUtil.inDetecting = false
                 stopCountDown()
                 return@initCamera
             }
             if (alive == false) {
                 binding.tipTv.text =
-                    getString(R.string.real_person_verification_required)
+                    CommonUtils.getStr("real_person_verification_required")
                 ArcSoftUtil.inDetecting = false
                 stopCountDown()
                 return@initCamera
@@ -207,14 +207,14 @@ class UserInfoFragment : BaseFragment<FragmentUserInfoBinding>() {
 
     private fun startCountDown() {
         isInCountDown = true
-        binding.countDownTip.text = getString(R.string.detect_face_tip)
+        binding.countDownTip.text = CommonUtils.getStr("detect_face_tip")
         binding.countDownTip.isVisible = true
         captureTimer.start()
     }
 
     private fun stopCountDown() {
         isInCountDown = false
-        binding.countDownTip.text = getString(R.string.detect_face_tip)
+        binding.countDownTip.text = CommonUtils.getStr("detect_face_tip")
         binding.countDownTip.isVisible = false
         captureTimer.cancel()
     }

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/main/viewmodel/MainViewModel.kt

@@ -109,7 +109,7 @@ class MainViewModel @Inject constructor(
                                                     Executor.delayOnMain(300) {
                                                         bleBean?.let {
                                                             LoadingEvent.sendLoadingEvent(
-                                                                CommonUtils.getStr(com.grkj.ui_base.R.string.loading_msg_get_ticket_status_start),
+                                                                CommonUtils.getStr("loading_msg_get_ticket_status_start"),
                                                                 true
                                                             )
                                                             BleConnectionManager.getCurrentStatus(
@@ -120,7 +120,7 @@ class MainViewModel @Inject constructor(
                                                     }
                                                 }else{
                                                     ModBusController.controlKeyBuckle(true,mac){
-                                                        showTip(CommonUtils.getStr(R.string.ticket_get_failed).toString())
+                                                        showTip(CommonUtils.getStr("ticket_get_failed").toString())
                                                     }
                                                 }
                                             }

+ 9 - 9
app/src/main/java/com/grkj/iscs/features/main/viewmodel/WorkflowViewModel.kt

@@ -103,7 +103,7 @@ class WorkflowViewModel @Inject constructor(val workflowRepository: IWorkflowLog
                         override fun progress(progress: Float) {
                             LoadingEvent.sendLoadingEvent(
                                 CommonUtils.getStr(
-                                    R.string.unzip,
+                                    "unzip",
                                     progress
                                 )
                             )
@@ -115,7 +115,7 @@ class WorkflowViewModel @Inject constructor(val workflowRepository: IWorkflowLog
                             if (workflowModeSha == null) {
                                 LoadingEvent.sendLoadingEvent()
                                 TipDialog.showError(
-                                    CommonUtils.getStr(R.string.the_verification_file_not_exists)
+                                    CommonUtils.getStr("the_verification_file_not_exists")
                                         .toString()
                                 )
                                 return
@@ -123,7 +123,7 @@ class WorkflowViewModel @Inject constructor(val workflowRepository: IWorkflowLog
                             if (workflowModeData == null) {
                                 LoadingEvent.sendLoadingEvent()
                                 TipDialog.showError(
-                                    CommonUtils.getStr(R.string.data_file_not_exists).toString()
+                                    CommonUtils.getStr("data_file_not_exists").toString()
                                 )
                                 return
                             }
@@ -133,7 +133,7 @@ class WorkflowViewModel @Inject constructor(val workflowRepository: IWorkflowLog
                             ) {
                                 LoadingEvent.sendLoadingEvent()
                                 TipDialog.showError(
-                                    CommonUtils.getStr(R.string.data_file_is_corrupted).toString()
+                                    CommonUtils.getStr("data_file_is_corrupted").toString()
                                 )
                                 return
                             }
@@ -161,7 +161,7 @@ class WorkflowViewModel @Inject constructor(val workflowRepository: IWorkflowLog
                                         workflowImportData.filter { it.modeName !in existsWorkflowModes.map { it.modeName } }
                                     if (importData.isEmpty()) {
                                         showTip(
-                                            CommonUtils.getStr(R.string.workflow_already_exists)
+                                            CommonUtils.getStr("workflow_already_exists")
                                                 .toString()
                                         )
                                         return
@@ -185,20 +185,20 @@ class WorkflowViewModel @Inject constructor(val workflowRepository: IWorkflowLog
                                         }
                                         LoadingEvent.sendLoadingEvent()
                                         TipDialog.showSuccess(
-                                            CommonUtils.getStr(R.string.import_success)
+                                            CommonUtils.getStr("import_success")
                                                 .toString()
                                         )
                                     }
                                 } catch (e: Exception) {
                                     LoadingEvent.sendLoadingEvent()
                                     TipDialog.showError(
-                                        CommonUtils.getStr(R.string.data_content_error).toString()
+                                        CommonUtils.getStr("data_content_error").toString()
                                     )
                                 }
                             } catch (e: Exception) {
                                 LoadingEvent.sendLoadingEvent()
                                 TipDialog.showError(
-                                    CommonUtils.getStr(R.string.data_decrypt_failed).toString()
+                                    CommonUtils.getStr("data_decrypt_failed").toString()
                                 )
                             }
 
@@ -211,7 +211,7 @@ class WorkflowViewModel @Inject constructor(val workflowRepository: IWorkflowLog
                     })
                 }
             } catch (e: Exception) {
-                showTip(CommonUtils.getStr(R.string.file_not_exists).toString())
+                showTip(CommonUtils.getStr("file_not_exists").toString())
             }
             emit(true)
         }

+ 19 - 15
app/src/main/java/com/grkj/iscs/features/main/viewmodel/common/EditJobWorkflowSettingViewModel.kt

@@ -25,9 +25,9 @@ import javax.inject.Inject
 class EditJobWorkflowSettingViewModel @Inject constructor(
     val workflowRepository: IWorkflowLogic,
     val jobTicketRepository: IJobTicketLogic,
-    override val userRepository: IUserLogic,
+    override val userLogic: IUserLogic,
     val roleRepository: IRoleLogic
-) : BaseViewModel(userRepository) {
+) : BaseViewModel(userLogic) {
     var modeId: Long = 0
     var ticketId: Long = 0
     var workflowSteps: List<IsJobTicketStep> = mutableListOf()
@@ -55,7 +55,7 @@ class EditJobWorkflowSettingViewModel @Inject constructor(
      */
     fun getSettingData(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            allUser = userRepository.getAllUsersWithRole()
+            allUser = userLogic.getAllUsersWithRole()
             allRole = roleRepository.getRoleData()
             emit(true)
         }
@@ -67,44 +67,48 @@ class EditJobWorkflowSettingViewModel @Inject constructor(
     fun checkAndSetStepFunction(): List<String> {
         stepFunction.clear()
         if (currentStep?.enableCancelJob == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.cancel_job).toString())
+            stepFunction.add(CommonUtils.getStr("cancel_job").toString())
         }
         if (currentStep?.enableSetLocker == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.set_locker).toString())
+            stepFunction.add(CommonUtils.getStr("set_locker").toString())
         }
         if (currentStep?.enableSetColocker == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.set_colocker).toString())
+            stepFunction.add(CommonUtils.getStr("set_colocker").toString())
         }
         if (currentStep?.enableLock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.lock).toString())
+            stepFunction.add(CommonUtils.getStr("lock").toString())
         }
         if (currentStep?.enableColock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.colock).toString())
+            stepFunction.add(CommonUtils.getStr("colock").toString())
         }
         if (currentStep?.enableAddColocker == true) {
             val str = SIKCore.getApplication().getString(
                 R.string.add_colocker,
-                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr(R.string.no_goto_step) else SIKCore.getApplication()
-                    .getString(R.string.navigate_to_step, currentStep?.gotoStepAfterAddingColocker)
+                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr("no_goto_step") else CommonUtils.getStr(
+                    "navigate_to_step",
+                    currentStep?.gotoStepAfterAddingColocker
+                )
             )
             stepFunction.add(str)
         }
         if (currentStep?.enableReduceColocker == true) {
             val str = SIKCore.getApplication().getString(
                 R.string.reduce_colocker,
-                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr(R.string.no_goto_step) else SIKCore.getApplication()
-                    .getString(R.string.navigate_to_step, currentStep?.gotoStepAfterAddingColocker)
+                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr("no_goto_step") else CommonUtils.getStr(
+                    "navigate_to_step",
+                    currentStep?.gotoStepAfterAddingColocker
+                )
             )
             stepFunction.add(str)
         }
         if (currentStep?.enableReleaseColock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.release_colocker).toString())
+            stepFunction.add(CommonUtils.getStr("release_colocker").toString())
         }
         if (currentStep?.enableUnlock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.unlock).toString())
+            stepFunction.add(CommonUtils.getStr("").toString())
         }
         if (currentStep?.enableEndJob == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.end_job).toString())
+            stepFunction.add(CommonUtils.getStr("end_job").toString())
         }
         return stepFunction
     }

+ 13 - 15
app/src/main/java/com/grkj/iscs/features/main/viewmodel/common/EditSopWorkflowSettingViewModel.kt

@@ -25,9 +25,9 @@ import javax.inject.Inject
 class EditSopWorkflowSettingViewModel @Inject constructor(
     val workflowRepository: IWorkflowLogic,
     val sopRepository: ISopLogic,
-    override val userRepository: IUserLogic,
+    override val userLogic: IUserLogic,
     val roleRepository: IRoleLogic
-) : BaseViewModel(userRepository) {
+) : BaseViewModel(userLogic) {
     var modeId: Long = 0
     var sopId: Long = 0
     var workflowSteps: List<IsSopWorkflowStep> = mutableListOf()
@@ -55,7 +55,7 @@ class EditSopWorkflowSettingViewModel @Inject constructor(
      */
     fun getSettingData(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            allUser = userRepository.getAllUsersWithRole()
+            allUser = userLogic.getAllUsersWithRole()
             allRole = roleRepository.getRoleData()
             emit(true)
         }
@@ -67,44 +67,42 @@ class EditSopWorkflowSettingViewModel @Inject constructor(
     fun checkAndSetStepFunction(): List<String> {
         stepFunction.clear()
         if (currentStep?.enableCancelJob == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.cancel_job).toString())
+            stepFunction.add(CommonUtils.getStr("cancel_job").toString())
         }
         if (currentStep?.enableSetLocker == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.set_locker).toString())
+            stepFunction.add(CommonUtils.getStr("set_locker").toString())
         }
         if (currentStep?.enableSetColocker == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.set_colocker).toString())
+            stepFunction.add(CommonUtils.getStr("set_colocker").toString())
         }
         if (currentStep?.enableLock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.lock).toString())
+            stepFunction.add(CommonUtils.getStr("R.string.").toString())
         }
         if (currentStep?.enableColock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.colock).toString())
+            stepFunction.add(CommonUtils.getStr("colock").toString())
         }
         if (currentStep?.enableAddColocker == true) {
             val str = SIKCore.getApplication().getString(
                 R.string.add_colocker,
-                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr(R.string.no_goto_step) else SIKCore.getApplication()
-                    .getString(R.string.navigate_to_step, currentStep?.gotoStepAfterAddingColocker)
+                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr("no_goto_step") else CommonUtils.getStr("navigate_to_step", currentStep?.gotoStepAfterAddingColocker)
             )
             stepFunction.add(str)
         }
         if (currentStep?.enableReduceColocker == true) {
             val str = SIKCore.getApplication().getString(
                 R.string.reduce_colocker,
-                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr(R.string.no_goto_step) else SIKCore.getApplication()
-                    .getString(R.string.navigate_to_step, currentStep?.gotoStepAfterAddingColocker)
+                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr("no_goto_step") else CommonUtils.getStr("navigate_to_step", currentStep?.gotoStepAfterAddingColocker)
             )
             stepFunction.add(str)
         }
         if (currentStep?.enableReleaseColock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.release_colocker).toString())
+            stepFunction.add(CommonUtils.getStr("release_colocker").toString())
         }
         if (currentStep?.enableUnlock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.unlock).toString())
+            stepFunction.add(CommonUtils.getStr("unlock").toString())
         }
         if (currentStep?.enableEndJob == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.end_job).toString())
+            stepFunction.add(CommonUtils.getStr("end_job").toString())
         }
         return stepFunction
     }

+ 4 - 4
app/src/main/java/com/grkj/iscs/features/main/viewmodel/common/SelectMemberViewModel.kt

@@ -20,10 +20,10 @@ import javax.inject.Inject
  */
 @HiltViewModel
 class SelectMemberViewModel @Inject constructor(
-    override val userRepository: IUserLogic,
+    override val userLogic: IUserLogic,
     val jobTicketRepository: IJobTicketLogic
 ) :
-    BaseViewModel(userRepository) {
+    BaseViewModel(userLogic) {
     var workstationId: Long = 0
     var ticketUsers: List<IsJobTicketUserDataVo> = listOf()
     var jobTicketData: IsJobTicketDataVo? = null
@@ -41,11 +41,11 @@ class SelectMemberViewModel @Inject constructor(
     fun getUserData(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             userData = BeanUtils.copyList(
-                userRepository.getAllUserDataWithWorkstation(workstationId),
+                userLogic.getAllUserDataWithWorkstation(workstationId),
                 JobUserVo::class.java
             )?.filterNotNull() ?: mutableListOf()
             userBiometricDataVo =
-                userRepository.getUserBiometricDataByUserIds(userData.map { it.userId })
+                userLogic.getUserBiometricDataByUserIds(userData.map { it.userId })
             emit(true)
         }
     }

+ 19 - 15
app/src/main/java/com/grkj/iscs/features/main/viewmodel/common/WorkflowSettingViewModel.kt

@@ -23,9 +23,9 @@ import javax.inject.Inject
 @HiltViewModel
 class WorkflowSettingViewModel @Inject constructor(
     val workflowRepository: IWorkflowLogic,
-    override val userRepository: IUserLogic,
+    override val userLogic: IUserLogic,
     val roleRepository: IRoleLogic
-) : BaseViewModel(userRepository) {
+) : BaseViewModel(userLogic) {
     var modeId: Long = 0
     var workflowSteps: List<WorkflowStep> = mutableListOf()
     var currentStep: WorkflowStep? = null
@@ -52,7 +52,7 @@ class WorkflowSettingViewModel @Inject constructor(
      */
     fun getSettingData(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            allUser = userRepository.getAllUsersWithRole()
+            allUser = userLogic.getAllUsersWithRole()
             allRole = roleRepository.getRoleData()
             emit(true)
         }
@@ -64,44 +64,48 @@ class WorkflowSettingViewModel @Inject constructor(
     fun checkAndSetStepFunction(): List<String> {
         stepFunction.clear()
         if (currentStep?.enableCancelJob == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.cancel_job).toString())
+            stepFunction.add(CommonUtils.getStr("cancel_job").toString())
         }
         if (currentStep?.enableSetLocker == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.set_locker).toString())
+            stepFunction.add(CommonUtils.getStr("set_locker").toString())
         }
         if (currentStep?.enableSetColocker == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.set_colocker).toString())
+            stepFunction.add(CommonUtils.getStr("set_colocker").toString())
         }
         if (currentStep?.enableLock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.lock).toString())
+            stepFunction.add(CommonUtils.getStr("lock").toString())
         }
         if (currentStep?.enableColock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.colock).toString())
+            stepFunction.add(CommonUtils.getStr("colock").toString())
         }
         if (currentStep?.enableAddColocker == true) {
             val str = SIKCore.getApplication().getString(
                 R.string.add_colocker,
-                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr(R.string.no_goto_step) else SIKCore.getApplication()
-                    .getString(R.string.navigate_to_step, currentStep?.gotoStepAfterAddingColocker)
+                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr("no_goto_step") else CommonUtils.getStr(
+                    "navigate_to_step",
+                    currentStep?.gotoStepAfterAddingColocker
+                )
             )
             stepFunction.add(str)
         }
         if (currentStep?.enableReduceColocker == true) {
             val str = SIKCore.getApplication().getString(
                 R.string.reduce_colocker,
-                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr(R.string.no_goto_step) else SIKCore.getApplication()
-                    .getString(R.string.navigate_to_step, currentStep?.gotoStepAfterAddingColocker)
+                if (currentStep?.gotoStepAfterAddingColocker == null) CommonUtils.getStr("no_goto_step") else CommonUtils.getStr(
+                    "navigate_to_step",
+                    currentStep?.gotoStepAfterAddingColocker
+                )
             )
             stepFunction.add(str)
         }
         if (currentStep?.enableReleaseColock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.release_colocker).toString())
+            stepFunction.add(CommonUtils.getStr("release_colocker").toString())
         }
         if (currentStep?.enableUnlock == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.unlock).toString())
+            stepFunction.add(CommonUtils.getStr("unlock").toString())
         }
         if (currentStep?.enableEndJob == true) {
-            stepFunction.add(CommonUtils.getStr(R.string.end_job).toString())
+            stepFunction.add(CommonUtils.getStr("end_job").toString())
         }
         return stepFunction
     }

+ 110 - 0
app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/BackupAndRestoreViewModel.kt

@@ -0,0 +1,110 @@
+package com.grkj.iscs.features.main.viewmodel.data_manage
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.liveData
+import com.grkj.data.database.BackupScheduler
+import com.grkj.data.database.RoomBackupManager
+import com.grkj.data.database.SimpleBackupConfig
+import com.grkj.data.database.SimpleBackupPrefs
+import com.grkj.data.enums.BackupFrequencyWeekEnum
+import com.grkj.iscs.features.main.dialog.TextDropDownDialog
+import com.grkj.ui_base.base.BaseViewModel
+import com.sik.sikcore.SIKCore
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.Dispatchers
+import javax.inject.Inject
+
+/**
+ * 备份/还原数据结构
+ */
+@HiltViewModel
+class BackupAndRestoreViewModel @Inject constructor() : BaseViewModel() {
+    /**
+     * 计划数据
+     */
+    var scheduleData: SimpleBackupConfig = SimpleBackupPrefs.get(SIKCore.getApplication())
+
+    /**
+     * 备份数据
+     */
+    var backupItemDatas: MutableList<RoomBackupManager.BackupItem> = mutableListOf()
+
+    /**
+     * 备份频率数据
+     */
+    val backupFrequencyData: List<TextDropDownDialog.SimpleTextDropDownEntity>
+        get() = BackupFrequencyWeekEnum.values().map {
+            TextDropDownDialog.SimpleTextDropDownEntity(
+                dataId = it.type.toLong(),
+                dataText = it.showText,
+            ).apply {
+                setSelected(selectedBackupFrequencyData.map { it.showText }
+                    .contains(getShowText()))
+            }
+        }
+
+    /**
+     * 选择的备份频率数据
+     */
+    var selectedBackupFrequencyData: List<BackupFrequencyWeekEnum> = listOf()
+
+    /**
+     * 设置并应用
+     */
+    fun setAndApply(): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            BackupScheduler.setAndApply(
+                SIKCore.getApplication(),
+                scheduleData.enabled,
+                scheduleData.hour,
+                scheduleData.minute,
+                scheduleData.daysMask,
+                scheduleData.keep
+            )
+            emit(true)
+        }
+    }
+
+    /**
+     * 备份还原
+     */
+    fun restoreBackUp(item: RoomBackupManager.BackupItem): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            RoomBackupManager.restore(SIKCore.getApplication(), item.file)
+            emit(true)
+        }
+    }
+
+    /**
+     * 获取备份文件
+     */
+    fun getBackupList(): LiveData<List<RoomBackupManager.BackupItem>> {
+        return liveData(Dispatchers.IO) {
+            backupItemDatas =
+                RoomBackupManager.listBackups(SIKCore.getApplication()).toMutableList()
+            emit(backupItemDatas)
+        }
+    }
+
+    /**
+     * 删除备份文件
+     */
+    fun deleteBackupFile(item: RoomBackupManager.BackupItem): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            emit(RoomBackupManager.deleteBackup(item.file))
+        }
+    }
+
+    /**
+     * 删除多备份文件
+     */
+    fun deleteBackupFiles(items: List<RoomBackupManager.BackupItem>): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            for (item in items) {
+                RoomBackupManager.deleteBackup(item.file)
+            }
+            emit(true)
+        }
+    }
+
+}

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/PointManageViewModel.kt

@@ -109,7 +109,7 @@ class PointManageViewModel @Inject constructor(
             if (isolationPoint == null) {
                 emit(true)
             } else {
-                showTip(CommonUtils.getStr(R.string.rfid_already_bind).toString())
+                showTip(CommonUtils.getStr("rfid_already_bind").toString())
             }
         }
     }

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/RoleManageViewModel.kt

@@ -129,7 +129,7 @@ class RoleManageViewModel @Inject constructor(
                 emit(true)
             } else {
                 showTip(
-                    CommonUtils.getStr(com.grkj.iscs.R.string.role_key_already_exists).toString()
+                    CommonUtils.getStr("role_key_already_exists").toString()
                 )
             }
         }

+ 8 - 8
app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/UserManageViewModel.kt

@@ -25,12 +25,12 @@ import javax.inject.Inject
  */
 @HiltViewModel
 class UserManageViewModel @Inject constructor(
-    override val userRepository: IUserLogic,
+    override val userLogic: IUserLogic,
     val roleRepository: IRoleLogic,
     val workstationRepository: IWorkstationLogic,
     val hardwareRepository: IHardwareLogic,
     val jobTicketRepository: IJobTicketLogic
-) : BaseViewModel(userRepository) {
+) : BaseViewModel(userLogic) {
     private var current: Int = 0
     private var size: Int = 50
     var userManageDataList: MutableList<UserManageVo> = mutableListOf()
@@ -43,7 +43,7 @@ class UserManageViewModel @Inject constructor(
      */
     fun deleteSelectedUsers(userIds: List<Long>): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            userRepository.deleteUserById(userIds)
+            userLogic.deleteUserById(userIds)
             roleRepository.deleteUserRoleByUserId(userIds)
             workstationRepository.deleteUserWorkstationByUserIds(userIds)
             emit(true)
@@ -64,7 +64,7 @@ class UserManageViewModel @Inject constructor(
             userManageDataList.clear()
         }
         return liveData(Dispatchers.IO) {
-            val userManageDataPage = userRepository.getUserManagerData(filterData, current, size)
+            val userManageDataPage = userLogic.getUserManagerData(filterData, current, size)
             userManageDataList.addAll(userManageDataPage)
             emit(true)
         }
@@ -75,7 +75,7 @@ class UserManageViewModel @Inject constructor(
      */
     fun addUser(userData: AddUserDataVo): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            val userId = userRepository.addUserData(userData)
+            val userId = userLogic.addUserData(userData)
             userData.workstationId?.let {
                 workstationRepository.addUserWorkstationData(userId, it)
             }
@@ -100,7 +100,7 @@ class UserManageViewModel @Inject constructor(
      */
     fun updateUser(updateUserDataVo: UpdateUserDataVo): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            userRepository.updateUserData(updateUserDataVo)
+            userLogic.updateUserData(updateUserDataVo)
             workstationRepository.deleteUserWorkstationByUserIds(listOf(updateUserDataVo.userId))
             roleRepository.deleteUserRoleByUserId(listOf(updateUserDataVo.userId))
             updateUserDataVo.workstationId?.let {
@@ -119,9 +119,9 @@ class UserManageViewModel @Inject constructor(
      */
     fun validateUserData(username: String): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            val user = userRepository.getUserByUserName(username)
+            val user = userLogic.getUserByUserName(username)
             if (user != null) {
-                showTip(CommonUtils.getStr(R.string.user_already_exists).toString())
+                showTip(CommonUtils.getStr("user_already_exists").toString())
             } else {
                 emit(true)
             }

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/WorkstationManageViewModel.kt

@@ -157,7 +157,7 @@ class WorkstationManageViewModel @Inject constructor(val workstationRepository:
             if (workstationData==null){
                 emit(true)
             }else{
-                showTip(CommonUtils.getStr(R.string.workstation_already_exists).toString())
+                showTip(CommonUtils.getStr("workstation_already_exists").toString())
             }
         }
     }

+ 7 - 7
app/src/main/java/com/grkj/iscs/features/main/viewmodel/exception_manage/ExceptionJobViewModel.kt

@@ -38,8 +38,8 @@ import javax.inject.Inject
 class ExceptionJobViewModel @Inject constructor(
     val exceptionRepository: IExceptionLogic,
     val jobTicketRepository: IJobTicketLogic,
-    override val userRepository: IUserLogic
-) : BaseViewModel(userRepository) {
+    override val userLogic: IUserLogic
+) : BaseViewModel(userLogic) {
     var ticketId: Long = 0
     var exceptionId: Long = 0
     var ticketData: IsJobTicketDataVo? = null
@@ -143,7 +143,7 @@ class ExceptionJobViewModel @Inject constructor(
             exceptionData?.let {
                 exceptionRepository.handleException(listOf(it))
                 emit(true to "")
-            } ?: emit(false to CommonUtils.getStr(R.string.exception_data_not_exists).toString())
+            } ?: emit(false to CommonUtils.getStr("exception_data_not_exists").toString())
         }
     }
 
@@ -222,7 +222,7 @@ class ExceptionJobViewModel @Inject constructor(
                     }
             val jobTicketUsers = jobTicketRepository.getJobTicketUserDataByTicketId(ticketId)
             val locker =
-                userRepository.getJobUserDataByUserIdAndTicketId(
+                userLogic.getJobUserDataByUserIdAndTicketId(
                     ticketId,
                     jobTicketUsers.filter { it.userRole == RoleEnum.JTLOCKER.roleKey }
                         .map { it.userId },
@@ -235,7 +235,7 @@ class ExceptionJobViewModel @Inject constructor(
                         )
                     }
             val coLocker =
-                userRepository.getJobUserDataByUserIdAndTicketId(
+                userLogic.getJobUserDataByUserIdAndTicketId(
                     ticketId,
                     jobTicketUsers.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .map {
@@ -275,7 +275,7 @@ class ExceptionJobViewModel @Inject constructor(
                     }
             val jobTicketUsers = jobTicketRepository.getJobTicketUserDataByTicketId(ticketId)
             val locker =
-                userRepository.getJobUserDataByUserIdAndTicketId(
+                userLogic.getJobUserDataByUserIdAndTicketId(
                     ticketId,
                     jobTicketUsers.filter { it.userRole == RoleEnum.JTLOCKER.roleKey }
                         .map { it.userId },
@@ -288,7 +288,7 @@ class ExceptionJobViewModel @Inject constructor(
                         )
                     }
             val coLocker =
-                userRepository.getJobUserDataByUserIdAndTicketId(
+                userLogic.getJobUserDataByUserIdAndTicketId(
                     ticketId,
                     jobTicketUsers.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .map {

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/exception_manage/ExceptionViewModel.kt

@@ -184,7 +184,7 @@ class ExceptionViewModel @Inject constructor(
             exceptionData?.let {
                 exceptionRepository.handleException(listOf(it))
                 emit(true to "")
-            } ?: emit(false to CommonUtils.getStr(R.string.exception_data_not_exists).toString())
+            } ?: emit(false to CommonUtils.getStr("exception_data_not_exists").toString())
         }
     }
 

+ 4 - 4
app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/CardManageViewModel.kt

@@ -24,8 +24,8 @@ import javax.inject.Inject
 @HiltViewModel
 class CardManageViewModel @Inject constructor(
     private val hardwareRepository: IHardwareLogic,
-    override val userRepository: IUserLogic
-) : BaseViewModel(userRepository) {
+    override val userLogic: IUserLogic
+) : BaseViewModel(userLogic) {
     private var current: Int = 0
     private val size: Int = 50
     var cardManageDataList: MutableList<IsJobCard> = mutableListOf()
@@ -67,7 +67,7 @@ class CardManageViewModel @Inject constructor(
      */
     fun getAllUserData(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            val userData = userRepository.getAllUsers().map {
+            val userData = userLogic.getAllUsers().map {
                 TextDropDownDialog.SimpleTextDropDownEntity(
                     dataId = it.userId,
                     dataText = it.userName
@@ -127,7 +127,7 @@ class CardManageViewModel @Inject constructor(
             if (card == null) {
                 emit(true)
             } else {
-                showTip(CommonUtils.getStr(R.string.card_already_registration).toString())
+                showTip(CommonUtils.getStr("card_already_registration").toString())
             }
         }
     }

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/KeyManageViewModel.kt

@@ -108,7 +108,7 @@ class KeyManageViewModel @Inject constructor(
             if (keyInfo == null || keyInfo.macAddress != keyMac) {
                 emit(true)
             } else {
-                showTip(CommonUtils.getStr(R.string.key_info_already_exists).toString())
+                showTip(CommonUtils.getStr("key_info_already_exists").toString())
             }
         }
     }

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/LockManageViewModel.kt

@@ -105,7 +105,7 @@ class LockManageViewModel @Inject constructor(
             if (lockInfo == null) {
                 emit(true)
             }else{
-                showTip(CommonUtils.getStr(R.string.lock_already_exists).toString())
+                showTip(CommonUtils.getStr("lock_already_exists").toString())
             }
         }
     }

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/RfidTokenManageViewModel.kt

@@ -115,7 +115,7 @@ class RfidTokenManageViewModel @Inject constructor(
             if (rfidTokenData == null) {
                 emit(true)
             } else {
-                showTip(CommonUtils.getStr(R.string.rfid_already_registration).toString())
+                showTip(CommonUtils.getStr("rfid_already_registration").toString())
             }
         }
     }

+ 3 - 3
app/src/main/java/com/grkj/iscs/features/main/viewmodel/home/HomeViewModel.kt

@@ -28,9 +28,9 @@ class HomeViewModel @Inject constructor(
     val jobTicketRepository: IJobTicketLogic,
     val hardwareRepository: IHardwareLogic,
     val workflowRepository: IWorkflowLogic,
-    override val userRepository: IUserLogic
+    override val userLogic: IUserLogic
 ) :
-    BaseViewModel(userRepository) {
+    BaseViewModel(userLogic) {
     var workstationData: List<WorkstationManageVo> = listOf()
     var inProgressJobNum = 0
     var lockedPointNum = 0
@@ -107,7 +107,7 @@ class HomeViewModel @Inject constructor(
     fun saveQuickEntranceData(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             MainDomainData.userInfo?.let {
-                userRepository.updateUser(it)
+                userLogic.updateUser(it)
                 emit(true)
             }
         }

+ 32 - 32
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobExecuteViewModel.kt

@@ -188,7 +188,7 @@ class JobExecuteViewModel @Inject constructor(
             if (ticketData?.createBy != MainDomainData.userInfo?.userName) {
                 ThreadUtils.runOnMain {
                     PopTip.build()
-                        .tip(CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle))
+                        .tip(CommonUtils.getStr("no_permission_to_handle"))
                 }
                 return@liveData
             }
@@ -205,7 +205,7 @@ class JobExecuteViewModel @Inject constructor(
             if (ticketData?.createBy != MainDomainData.userInfo?.userName) {
                 ThreadUtils.runOnMain {
                     PopTip.build()
-                        .tip(CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle))
+                        .tip(CommonUtils.getStr("no_permission_to_handle"))
                 }
                 return@liveData
             }
@@ -223,14 +223,14 @@ class JobExecuteViewModel @Inject constructor(
                     DeviceConst.DEVICE_TYPE_LOCK, ticketId
                 )
             ) {
-                showLoading(CommonUtils.getStr(com.grkj.ui_base.R.string.please_take_out_ready_device_first))
+                showLoading(CommonUtils.getStr("please_take_out_ready_device_first"))
                 return@liveData
             }
             if (ModbusBusinessManager.hasAnyDeviceWaitTakeByTicketId(
                     DeviceConst.DEVICE_TYPE_KEY, ticketId
                 )
             ) {
-                showLoading(CommonUtils.getStr(com.grkj.ui_base.R.string.check_key_and_lock))
+                showLoading(CommonUtils.getStr("check_key_and_lock"))
                 val rfid = ModbusBusinessManager.getWaitTakeDeviceByTicketId(
                     DeviceConst.DEVICE_TYPE_KEY, ticketId
                 )?.nfc
@@ -251,7 +251,7 @@ class JobExecuteViewModel @Inject constructor(
             if (role == null) {
                 ThreadUtils.runOnMain {
                     PopTip.build()
-                        .tip(CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle))
+                        .tip(CommonUtils.getStr("no_permission_to_handle"))
                 }
                 return@liveData
             }
@@ -271,8 +271,8 @@ class JobExecuteViewModel @Inject constructor(
             }, true) { keyMap, lockMap ->
                 if (lockMap.isEmpty()) {
                     TipDialog.show(
-                        CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed).toString(),
-                        CommonUtils.getStr(com.grkj.ui_base.R.string.lock_is_not_enough).toString(),
+                        CommonUtils.getStr("action_failed").toString(),
+                        CommonUtils.getStr("lock_is_not_enough").toString(),
                         TipDialog.DialogType.ERROR,
                         countDownTime = 10,
                         onConfirmClick = {
@@ -285,8 +285,8 @@ class JobExecuteViewModel @Inject constructor(
                 }
                 if (keyMap == null) {
                     TipDialog.show(
-                        CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed).toString(),
-                        CommonUtils.getStr(com.grkj.ui_base.R.string.no_available_key).toString(),
+                        CommonUtils.getStr("action_failed").toString(),
+                        CommonUtils.getStr("no_available_key").toString(),
                         TipDialog.DialogType.ERROR,
                         countDownTime = 10,
                         onConfirmClick = {
@@ -318,7 +318,7 @@ class JobExecuteViewModel @Inject constructor(
                             if (openedLockDockSize.get() >= waitOpenLockDockSize) {
                                 LoadingEvent.sendLoadingEvent(
                                     CommonUtils.getStr(
-                                        com.grkj.ui_base.R.string.take_out_lock_tip, args = listOf(
+                                        "take_out_lock_tip", args = listOf(
                                             lockMap.values.flatten().count().toInt()
                                         ).toTypedArray()
                                     ), true
@@ -341,14 +341,14 @@ class JobExecuteViewModel @Inject constructor(
                     DeviceConst.DEVICE_TYPE_LOCK, ticketId
                 )
             ) {
-                showLoading(CommonUtils.getStr(com.grkj.ui_base.R.string.please_take_out_ready_device_first))
+                showLoading(CommonUtils.getStr("please_take_out_ready_device_first"))
                 return@liveData
             }
             if (ModbusBusinessManager.hasAnyDeviceWaitTakeByTicketId(
                     DeviceConst.DEVICE_TYPE_KEY, ticketId
                 )
             ) {
-                showLoading(CommonUtils.getStr(com.grkj.ui_base.R.string.check_key_and_lock))
+                showLoading(CommonUtils.getStr("check_key_and_lock"))
                 val rfid = ModbusBusinessManager.getWaitTakeDeviceByTicketId(
                     DeviceConst.DEVICE_TYPE_KEY, ticketId
                 )?.nfc
@@ -369,7 +369,7 @@ class JobExecuteViewModel @Inject constructor(
             if (role == null) {
                 ThreadUtils.runOnMain {
                     PopTip.build()
-                        .tip(CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle))
+                        .tip(CommonUtils.getStr("no_permission_to_handle"))
                 }
                 return@liveData
             }
@@ -398,9 +398,9 @@ class JobExecuteViewModel @Inject constructor(
                         LoadingEvent.sendLoadingEvent()
                         if (keyMap == null) {
                             TipDialog.show(
-                                CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
+                                CommonUtils.getStr("action_failed")
                                     .toString(),
-                                CommonUtils.getStr(com.grkj.ui_base.R.string.no_available_key)
+                                CommonUtils.getStr("no_available_key")
                                     .toString(),
                                 TipDialog.DialogType.ERROR,
                                 countDownTime = 10
@@ -433,7 +433,7 @@ class JobExecuteViewModel @Inject constructor(
         tickets.firstOrNull()?.let {
             PopTip.build().tip(
                 CommonUtils.getStr(
-                    R.string.please_wait_ticket_name_lock_complete,
+                    "please_wait_ticket_name_lock_complete",
                     args = listOf<String>(it.ticketName).toTypedArray()
                 )
             )
@@ -667,7 +667,7 @@ class JobExecuteViewModel @Inject constructor(
         return when {
 
             ((ticketData?.createBy == MainDomainData.userInfo?.userName && workflowStep?.confirmUser == null) || workflowStep?.currentUserCanConfirm() == true) && (workflowStep?.enableSetLocker == true || workflowStep?.enableSetColocker == true) -> {
-                CommonUtils.getStr(R.string.please_select_member).toString() to null
+                CommonUtils.getStr("please_select_member").toString() to null
             }
 
             ((ticketData?.createBy == MainDomainData.userInfo?.userName && workflowStep?.confirmUser == null) || workflowStep?.currentUserCanConfirm() == true) && (workflowStep?.enableLock == true || workflowStep?.enableColock == true || workflowStep?.enableReleaseColock == true || workflowStep?.enableUnlock == true) -> {
@@ -675,38 +675,38 @@ class JobExecuteViewModel @Inject constructor(
                 var index: Int? = null
                 if (workflowStep.enableLock) {
                     if (ticketPoints.any { it.pointStatus != "1" } && ticketKey.isEmpty()) {
-                        tip = CommonUtils.getStr(com.grkj.ui_base.R.string.please_go_locking)
+                        tip = CommonUtils.getStr("please_go_locking")
                             .toString()
                         index = 1
                     } else if (ticketPoints.any { it.pointStatus != "1" } && ticketKey.filter { it.ticketType == 0 }
                             .any { it.collectTime.isNullOrEmpty() }) {
                         tip =
-                            CommonUtils.getStr(com.grkj.ui_base.R.string.please_return_key_after_locking)
+                            CommonUtils.getStr("please_return_key_after_locking")
                                 .toString()
                         index = 1
                     }
                 }
                 if (workflowStep.enableColock && ticketPoints.all { it.pointStatus == "1" } && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .any { it.jobStatus == "0" }) {
-                    tip = CommonUtils.getStr(R.string.please_do_colock).toString()
+                    tip = CommonUtils.getStr("please_do_colock").toString()
                     index = 2
                 }
                 if (workflowStep.enableReleaseColock && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .none { it.jobStatus == "0" }) {
                     tip =
-                        CommonUtils.getStr(com.grkj.ui_base.R.string.please_do_uncolock).toString()
+                        CommonUtils.getStr("please_do_uncolock").toString()
                     index = 2
                 }
                 if (workflowStep.enableUnlock && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .all { it.jobStatus == "2" }) {
                     if (ticketPoints.any { it.pointStatus != "2" }) {
-                        tip = CommonUtils.getStr(com.grkj.ui_base.R.string.please_go_unlocking)
+                        tip = CommonUtils.getStr("please_go_unlocking")
                             .toString()
                         index = 1
                     } else if (ticketPoints.any { it.pointStatus != "2" } && ticketKey.filter { it.ticketType == 1 }
                             .any { it.collectTime.isNullOrEmpty() }) {
                         tip =
-                            CommonUtils.getStr(com.grkj.ui_base.R.string.please_return_key_after_unlocking)
+                            CommonUtils.getStr("please_return_key_after_unlocking")
                                 .toString()
                         index = 1
                     }
@@ -714,7 +714,7 @@ class JobExecuteViewModel @Inject constructor(
                 tip to index
             }
 
-            else -> CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
+            else -> CommonUtils.getStr("no_permission_to_handle")
                 .toString() to null
         }
     }
@@ -733,40 +733,40 @@ class JobExecuteViewModel @Inject constructor(
         val currentWorkflowStep = currentStepData
         return when {
             ((ticketData?.createBy == MainDomainData.userInfo?.userName && currentWorkflowStep?.confirmUser == null) || currentWorkflowStep?.currentUserCanConfirm() == true) && (currentWorkflowStep?.enableSetLocker == true || currentWorkflowStep?.enableSetColocker == true) -> {
-                CommonUtils.getStr(R.string.please_select_member).toString()
+                CommonUtils.getStr("please_select_member").toString()
             }
 
             ((ticketData?.createBy == MainDomainData.userInfo?.userName && currentWorkflowStep?.confirmUser == null) || currentWorkflowStep?.currentUserCanConfirm() == true) && (currentWorkflowStep?.enableLock == true || currentWorkflowStep?.enableColock == true || currentWorkflowStep?.enableReleaseColock == true || currentWorkflowStep?.enableUnlock == true) -> {
                 var tip = ""
                 if (currentWorkflowStep.enableLock) {
                     if (ticketPoints.any { it.pointStatus != "1" } && ticketKey.isEmpty()) {
-                        tip = CommonUtils.getStr(com.grkj.ui_base.R.string.please_go_locking)
+                        tip = CommonUtils.getStr("please_go_locking")
                             .toString()
                     } else if (ticketPoints.any { it.pointStatus != "1" } && ticketKey.filter { it.ticketType == 0 }
                             .any { it.collectTime.isNullOrEmpty() }) {
                         tip =
-                            CommonUtils.getStr(com.grkj.ui_base.R.string.please_return_key_after_locking)
+                            CommonUtils.getStr("please_return_key_after_locking")
                                 .toString()
                     }
                 }
                 if (currentWorkflowStep.enableColock && ticketPoints.all { it.pointStatus == "1" } && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .any { it.jobStatus == "0" }) {
-                    tip = CommonUtils.getStr(R.string.please_do_colock).toString()
+                    tip = CommonUtils.getStr("please_do_colock").toString()
                 }
                 if (currentWorkflowStep.enableReleaseColock && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .none { it.jobStatus == "0" }) {
                     tip =
-                        CommonUtils.getStr(com.grkj.ui_base.R.string.please_do_uncolock).toString()
+                        CommonUtils.getStr("please_do_uncolock").toString()
                 }
                 if (currentWorkflowStep.enableUnlock && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .all { it.jobStatus == "2" }) {
                     if (ticketPoints.any { it.pointStatus != "2" }) {
-                        tip = CommonUtils.getStr(com.grkj.ui_base.R.string.please_go_unlocking)
+                        tip = CommonUtils.getStr("please_go_unlocking")
                             .toString()
                     } else if (ticketPoints.any { it.pointStatus != "2" } && ticketKey.filter { it.ticketType == 1 }
                             .any { it.collectTime.isNullOrEmpty() }) {
                         tip =
-                            CommonUtils.getStr(com.grkj.ui_base.R.string.please_return_key_after_unlocking)
+                            CommonUtils.getStr("please_return_key_after_unlocking")
                                 .toString()
                     }
                 }
@@ -787,7 +787,7 @@ class JobExecuteViewModel @Inject constructor(
             if (ticketData?.createBy != MainDomainData.userInfo?.userName && workflowStep?.currentUserCanConfirm() == false) {
                 ThreadUtils.runOnMain {
                     PopTip.build()
-                        .tip(CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle))
+                        .tip(CommonUtils.getStr("no_permission_to_handle"))
                 }
                 emit(false)
             } else {

+ 4 - 4
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobViewModel.kt

@@ -31,8 +31,8 @@ class JobViewModel @Inject constructor(
     val sopRepository: ISopLogic,
     val jobTicketRepository: IJobTicketLogic,
     val workflowRepository: IWorkflowLogic,
-    override val userRepository: UserLogic
-) : BaseViewModel(userRepository) {
+    override val userLogic: UserLogic
+) : BaseViewModel(userLogic) {
     var workstationData: List<WorkstationManageVo> = listOf()
     var jobTicketData: JobTicketManageVo? = null
     var jobPointsData: List<JobPointVo> = mutableListOf()
@@ -164,7 +164,7 @@ class JobViewModel @Inject constructor(
                 jobTicketRepository.getTicketPointsByTicketId(ticketId)
             val tempJobTicketUserId = jobTicketRepository.getTicketUsersByTicketId(ticketId)
             userBiometricDataVo =
-                userRepository.getUserBiometricDataByUserIds(tempJobTicketUserId.map { it.userId })
+                userLogic.getUserBiometricDataByUserIds(tempJobTicketUserId.map { it.userId })
             jobLockerData =
                 tempJobTicketUserId.filter { it.roleKeys.contains(RoleEnum.JTLOCKER.roleKey) }
             jobColockerData =
@@ -179,7 +179,7 @@ class JobViewModel @Inject constructor(
     fun getUserBiometricDataByUserIds(userIds: List<Long>): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             userBiometricDataVo =
-                userRepository.getUserBiometricDataByUserIds(userIds)
+                userLogic.getUserBiometricDataByUserIds(userIds)
             emit(true)
         }
     }

+ 8 - 8
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/MyTodoViewModel.kt

@@ -30,8 +30,8 @@ import javax.inject.Inject
 @HiltViewModel
 class MyTodoViewModel @Inject constructor(
     val jobTicketRepository: IJobTicketLogic,
-    override val userRepository: IUserLogic
-) : BaseViewModel(userRepository) {
+    override val userLogic: IUserLogic
+) : BaseViewModel(userLogic) {
     /**
      * 开始读卡
      */
@@ -183,23 +183,23 @@ class MyTodoViewModel @Inject constructor(
      */
     fun getHandleTip(item: TodoItemVo): String {
         return when (item.todoType) {
-            OperationTypeEnum.LOCK_TAKE_KEY -> CommonUtils.getStr(R.string.handle_lock_take_key)
+            OperationTypeEnum.LOCK_TAKE_KEY -> CommonUtils.getStr("handle_lock_take_key")
                 .toString()
 
-            OperationTypeEnum.UNLOCK_TAKE_KEY -> CommonUtils.getStr(R.string.handle_unlock_take_key)
+            OperationTypeEnum.UNLOCK_TAKE_KEY -> CommonUtils.getStr("handle_unlock_take_key")
                 .toString()
 
-            OperationTypeEnum.COLOCK -> CommonUtils.getStr(R.string.handle_colock)
+            OperationTypeEnum.COLOCK -> CommonUtils.getStr("handle_colock")
                 .toString()
 
-            OperationTypeEnum.RELEASE_COLOCK -> CommonUtils.getStr(R.string.handle_release_colock)
+            OperationTypeEnum.RELEASE_COLOCK -> CommonUtils.getStr("handle_release_colock")
                 .toString()
 
             OperationTypeEnum.CONFIRM -> CommonUtils.getStr(
-                R.string.handle_step_confirm, item.todoTitle.toString()
+               "handle_step_confirm", item.todoTitle.toString()
             ).toString()
 
-            OperationTypeEnum.END -> CommonUtils.getStr(R.string.finish_job_tip).toString()
+            OperationTypeEnum.END -> CommonUtils.getStr("finish_job_tip").toString()
             else -> ""
         }
     }

+ 4 - 4
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopJobViewModel.kt

@@ -33,8 +33,8 @@ class SopJobViewModel @Inject constructor(
     val sopRepository: ISopLogic,
     val jobTicketRepository: IJobTicketLogic,
     val workflowRepository: IWorkflowLogic,
-    override val userRepository: IUserLogic
-) : BaseViewModel(userRepository) {
+    override val userLogic: IUserLogic
+) : BaseViewModel(userLogic) {
     var workstationData: List<WorkstationManageVo> = listOf()
     var sopData: List<SopManageVo> = listOf()
     var sopPoints: List<JobTicketGroupDataVo<JobPointVo>> = listOf()
@@ -171,7 +171,7 @@ class SopJobViewModel @Inject constructor(
             sopData = sopRepository.getSopDataByWorkstationId(jobTicketData?.workstationId ?: 0)
             val sopJobUsers = jobTicketRepository.getTicketUsersByTicketId(ticketId)
             userBiometricDataVo =
-                userRepository.getUserBiometricDataByUserIds(sopJobUsers.map { it.userId })
+                userLogic.getUserBiometricDataByUserIds(sopJobUsers.map { it.userId })
             sopLockerData = sopJobUsers.filter { it.roleKeys.contains(RoleEnum.JTLOCKER.roleKey) }
                 .groupBy { it.groupId to it.groupName }.map {
                     JobTicketGroupDataVo(
@@ -203,7 +203,7 @@ class SopJobViewModel @Inject constructor(
     fun getUserBiometricDataByUserIds(userIds: List<Long>): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             userBiometricDataVo =
-                userRepository.getUserBiometricDataByUserIds(userIds)
+                userLogic.getUserBiometricDataByUserIds(userIds)
             emit(true)
         }
     }

+ 4 - 4
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopViewModel.kt

@@ -28,8 +28,8 @@ class SopViewModel @Inject constructor(
     val workstationRepository: IWorkstationLogic,
     val sopRepository: ISopLogic,
     val workflowRepository: IWorkflowLogic,
-    override val userRepository: UserLogic
-) : BaseViewModel(userRepository) {
+    override val userLogic: UserLogic
+) : BaseViewModel(userLogic) {
     var workstationData: List<WorkstationManageVo> = listOf()
     var selectedSopData: SopManageVo? = null
     var selectedSopPointData: List<JobPointVo> = mutableListOf()
@@ -93,7 +93,7 @@ class SopViewModel @Inject constructor(
             selectedSopUserData = sopRepository.getSopUsersBySopId(sopId)
             selectedSopData = sopRepository.getSopDataBySopId(sopId)
             userBiometricDataVo =
-                userRepository.getUserBiometricDataByUserIds(selectedSopUserData.map { it.userId })
+                userLogic.getUserBiometricDataByUserIds(selectedSopUserData.map { it.userId })
             emit(true)
         }
     }
@@ -104,7 +104,7 @@ class SopViewModel @Inject constructor(
     fun getUserBiometricDataByUserIds(userIds: List<Long>): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             userBiometricDataVo =
-                userRepository.getUserBiometricDataByUserIds(userIds)
+                userLogic.getUserBiometricDataByUserIds(userIds)
             emit(true)
         }
     }

+ 12 - 12
app/src/main/java/com/grkj/iscs/features/main/viewmodel/user_info/UserInfoViewModel.kt

@@ -18,9 +18,9 @@ import javax.inject.Inject
 
 @HiltViewModel
 class UserInfoViewModel @Inject constructor(
-    override val userRepository: IUserLogic,
+    override val userLogic: IUserLogic,
     val hardwareRepository: IHardwareLogic
-) : BaseViewModel(userRepository) {
+) : BaseViewModel(userLogic) {
     /**
      * 生物数据
      */
@@ -43,8 +43,8 @@ class UserInfoViewModel @Inject constructor(
     fun saveUserInfo(nickName: String, phone: String): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             MainDomainData.userInfo?.userId?.let {
-                userRepository.updateUserInfo(it, nickName, phone)
-                MainDomainData.userInfo = userRepository.getUserByUserId(it)
+                userLogic.updateUserInfo(it, nickName, phone)
+                MainDomainData.userInfo = userLogic.getUserByUserId(it)
                 emit(true)
             } ?: emit(false)
         }
@@ -58,7 +58,7 @@ class UserInfoViewModel @Inject constructor(
             MainDomainData.userInfo?.userId?.let {
                 val password = BCryptUtils.encryptPassword(newPassword)
                 logger.info("用户id:${it}")
-                userRepository.updatePassword(it, password)
+                userLogic.updatePassword(it, password)
                 emit(true)
             } ?: emit(false)
         }
@@ -70,7 +70,7 @@ class UserInfoViewModel @Inject constructor(
     fun getFingerprintData(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             fingerprintData =
-                userRepository.getFingerprintDataByUserId(MainDomainData.userInfo?.userId)
+                userLogic.getFingerprintDataByUserId(MainDomainData.userInfo?.userId)
                     .groupBy { it.group }.map {
                         FingerprintDataVo().apply {
                             group = it.key
@@ -87,7 +87,7 @@ class UserInfoViewModel @Inject constructor(
     fun getFaceData(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             faceData =
-                userRepository.getFaceDataByUserId(MainDomainData.userInfo?.userId)
+                userLogic.getFaceDataByUserId(MainDomainData.userInfo?.userId)
             emit(true)
         }
     }
@@ -97,7 +97,7 @@ class UserInfoViewModel @Inject constructor(
      */
     fun deleteFingerprintByIds(fingerprintIds: List<Long>): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            userRepository.deleteFingerprintByIds(fingerprintIds)
+            userLogic.deleteFingerprintByIds(fingerprintIds)
             emit(true)
         }
     }
@@ -112,7 +112,7 @@ class UserInfoViewModel @Inject constructor(
             sysUserCharacteristicDo.content = b64
             sysUserCharacteristicDo.type = "1"
             sysUserCharacteristicDo.group = group
-            val fingerprintId = userRepository.saveUserCharacteristic(sysUserCharacteristicDo)
+            val fingerprintId = userLogic.saveUserCharacteristic(sysUserCharacteristicDo)
             emit(fingerprintId)
         }
     }
@@ -122,13 +122,13 @@ class UserInfoViewModel @Inject constructor(
      */
     fun saveUserFace(savePath: String): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            userRepository.deleteFaceDataByUserId(MainDomainData.userInfo?.userId!!)
+            userLogic.deleteFaceDataByUserId(MainDomainData.userInfo?.userId!!)
             val sysUserCharacteristicDo = SysUserCharacteristicDo()
             sysUserCharacteristicDo.userId = MainDomainData.userInfo?.userId!!
             sysUserCharacteristicDo.content = savePath
             sysUserCharacteristicDo.type = "2"
             logger.info("保存的人脸数据:${sysUserCharacteristicDo}")
-            userRepository.saveUserCharacteristic(sysUserCharacteristicDo)
+            userLogic.saveUserCharacteristic(sysUserCharacteristicDo)
             emit(true)
         }
     }
@@ -161,7 +161,7 @@ class UserInfoViewModel @Inject constructor(
         return liveData(Dispatchers.IO) {
             MainDomainData.userInfo?.let {
                 it.avatar = avatarSavePath
-                userRepository.updateUser(it)
+                userLogic.updateUser(it)
             }
             emit(true)
         }

+ 33 - 28
app/src/main/java/com/grkj/iscs/features/splash/activity/SplashActivity.kt

@@ -3,11 +3,15 @@ package com.grkj.iscs.features.splash.activity
 import android.content.Intent
 import android.view.Gravity
 import androidx.activity.viewModels
+import androidx.lifecycle.lifecycleScope
 import androidx.work.Constraints
 import androidx.work.ExistingPeriodicWorkPolicy
 import androidx.work.PeriodicWorkRequestBuilder
 import androidx.work.WorkManager
 import com.grkj.data.data.MMKVConstants
+import com.grkj.data.database.BackupScheduler
+import com.grkj.data.database.DbReadyGate
+import com.grkj.data.database.ISCSDatabase
 import com.grkj.data.database.RoomBackupWorker
 import com.grkj.iscs.R
 import com.grkj.iscs.common.GlobalManager
@@ -15,12 +19,17 @@ import com.grkj.iscs.databinding.ActivitySplashBinding
 import com.grkj.iscs.features.init.activity.InitActivity
 import com.grkj.iscs.features.login.activity.LoginActivity
 import com.grkj.iscs.features.splash.viewmodel.SplashViewModel
+import com.grkj.shared.config.Constants
 import com.grkj.ui_base.base.BaseActivity
 import com.grkj.ui_base.utils.event.StartModbusEvent
 import com.kongzue.dialogx.DialogX
 import com.kongzue.dialogx.util.TextInfo
+import com.sik.sikandroid.permission.PermissionUtils
 import com.sik.sikcore.extension.getMMKVData
 import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
 import java.util.concurrent.TimeUnit
 
 @AndroidEntryPoint
@@ -31,12 +40,8 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
     }
 
     override fun initView() {
-        WorkManager.getInstance(this)
-            .enqueueUniquePeriodicWork(
-                "room_backup_work",
-                ExistingPeriodicWorkPolicy.KEEP,
-                backupWork
-            )
+        // 应用启动时按已存配置安排下一次(默认=每天 00:00)
+        BackupScheduler.applySaved(this)
         GlobalManager.cronJobManager.bindService()
         val dialogXTextInfo = TextInfo()
         val dialogXTitleTextInfo = TextInfo().apply {
@@ -57,34 +62,34 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
         DialogX.menuTextInfo = dialogXTextInfo
         DialogX.okButtonTextInfo = dialogXTextInfo
         DialogX.titleTextInfo = dialogXTitleTextInfo
-        StartModbusEvent.sendStartModbusEvent()
         //todo 测试用,直接进入,不初始化
 //        viewModel.checkSysMenuAndRole().observe(this) {
 //            startActivity(Intent(this, LoginActivity::class.java))
 //            finish()
 //        }
-        viewModel.checkSysMenuAndRole().observe(this) {
-            val isAppInit = MMKVConstants.APP_INIT.getMMKVData(false)
-            if (isAppInit) {
-                startActivity(Intent(this, LoginActivity::class.java))
-                finish()
-            } else {
-                startActivity(Intent(this, InitActivity::class.java))
-                finish()
+        PermissionUtils.checkAndRequestPermissions(Constants.needPermission) {
+            logger.info("授权结果:${it}")
+            if (it) {
+                // 已有权限的话,直接预热:
+                CoroutineScope(Dispatchers.IO).launch {
+                    // 触发构建 + 迁移 + 打开;onOpen 回调里会 DbReadyGate.open()
+                    val db = ISCSDatabase.instance
+                }
+            }
+        }
+        lifecycleScope.launch {
+            DbReadyGate.await()
+            StartModbusEvent.sendStartModbusEvent()
+            viewModel.checkSysMenuAndRole().observe(this@SplashActivity) {
+                val isAppInit = MMKVConstants.APP_INIT.getMMKVData(false)
+                if (isAppInit) {
+                    startActivity(Intent(this@SplashActivity, LoginActivity::class.java))
+                    finish()
+                } else {
+                    startActivity(Intent(this@SplashActivity, InitActivity::class.java))
+                    finish()
+                }
             }
         }
     }
-
-    /**
-     * 数据库备份
-     */
-    val backupWork = PeriodicWorkRequestBuilder<RoomBackupWorker>(
-        1, TimeUnit.DAYS
-    )
-        .setConstraints(
-            Constraints.Builder()
-                .setRequiresBatteryNotLow(true)
-                .build()
-        )
-        .build()
 }

+ 24 - 26
app/src/main/java/com/grkj/iscs/receivers/BootReceiver.kt

@@ -5,40 +5,38 @@ import android.app.PendingIntent
 import android.content.BroadcastReceiver
 import android.content.Context
 import android.content.Intent
-import com.grkj.iscs.features.login.activity.LoginActivity
+import com.grkj.data.database.BackupScheduler
 import com.grkj.iscs.features.splash.activity.SplashActivity
-import org.slf4j.Logger
 import org.slf4j.LoggerFactory
-import kotlin.apply
-import kotlin.jvm.java
-import kotlin.text.equals
 
 /**
+ * 开机启动接收器:
+ * - 仅做两件事:
+ *   1) 调用 BackupScheduler.applySaved(context) 按已保存的配置重新安排下一次备份
+ *   2) (可选)自启动 App(你已有逻辑,保留)
  *
- * 开机启动接收器
- * */
+ * 注:WorkManager 的任务会持久化,理论上重启后也在;
+ *     这里再次 applySaved() 是“保险丝”,避免用户还没打开 App、计划丢失的极端情况。
+ */
 class BootReceiver : BroadcastReceiver() {
-    private val logger: Logger = LoggerFactory.getLogger(BootReceiver::class.java)
+    private val logger = LoggerFactory.getLogger(BootReceiver::class.java)
     override fun onReceive(context: Context, intent: Intent?) {
-        if (intent!!.action.equals("android.intent.action.BOOT_COMPLETED")) {
-            logger.debug("接收到启动通知,开始启动应用")
-            //开机2秒后启动程序
-            val startAppIntent = Intent(
-                context, SplashActivity::class.java
-            ).apply {
+        if (Intent.ACTION_BOOT_COMPLETED == intent?.action) {
+            logger.debug("接收到 BOOT_COMPLETED,应用备份计划")
+            // 1) 重新应用备份计划(读取 SimpleBackupPrefs 并排下一次)
+            BackupScheduler.applySaved(context)
+
+            // 2) (可选)2 秒后自启动 App(你原有逻辑)
+            val startAppIntent = Intent(context, SplashActivity::class.java).apply {
                 flags = Intent.FLAG_ACTIVITY_NEW_TASK
             }
-            //启动应用,得使用PendingIntent
-            val startAppPendingIntent =
-                PendingIntent.getActivity(
-                    context, 0, startAppIntent,
-                    PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE
-                );
-            val mAlarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
-            mAlarmManager.set(
-                AlarmManager.RTC, System.currentTimeMillis() + 2000,
-                startAppPendingIntent
-            ) // 2秒钟后重启应用
+            val pi = PendingIntent.getActivity(
+                context, 0, startAppIntent,
+                PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE
+            )
+            (context.getSystemService(Context.ALARM_SERVICE) as AlarmManager).set(
+                AlarmManager.RTC, System.currentTimeMillis() + 2000, pi
+            )
         }
     }
-}
+}

+ 9 - 0
app/src/main/res/drawable/bg_tip_red.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="4dp" />
+    <solid android:color="#fa5252" />
+    <stroke
+        android:width="1dp"
+        android:color="#e43636" />
+</shape>

+ 28 - 11
app/src/main/res/layout-land/activity_login.xml

@@ -49,15 +49,20 @@
             android:orientation="vertical">
 
             <TextView
-                android:id="@+id/version"
+                android:id="@+id/chipLang"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="right"
-                android:layout_marginTop="@dimen/login_version_margin"
-                android:layout_marginRight="@dimen/login_version_margin"
+                android:layout_marginTop="@dimen/common_spacing"
+                android:layout_marginRight="@dimen/common_spacing"
+                android:background="@drawable/common_btn_white_board"
+                android:paddingHorizontal="@dimen/common_spacing"
+                android:paddingVertical="@dimen/common_spacing_small"
+                android:text="EN"
+                android:textAllCaps="true"
                 android:textColor="@color/white"
-                android:textSize="@dimen/login_version_text_size"
-                tools:text="v1.0" />
+                android:textSize="@dimen/common_text_size" />
+
 
             <com.grkj.ui_base.widget.ShadowTextView
                 android:id="@+id/title_cn"
@@ -65,10 +70,10 @@
                 android:layout_height="wrap_content"
                 android:layout_gravity="center_horizontal"
                 android:layout_marginTop="@dimen/login_main_title_margin_top"
-                android:text="@string/loto"
                 android:textColor="@color/white"
                 android:textSize="@dimen/login_main_title_text_size"
-                android:textStyle="bold" />
+                android:textStyle="bold"
+                app:i18nKey='@{"loto"}' />
 
             <com.grkj.ui_base.widget.ShadowTextView
                 android:id="@+id/title_en"
@@ -76,7 +81,7 @@
                 android:layout_height="wrap_content"
                 android:layout_gravity="center_horizontal"
                 android:layout_marginTop="@dimen/login_sub_title_margin_top"
-                android:text="@string/loto_en"
+                app:i18nKey='@{"loto_en"}'
                 android:textColor="@color/white"
                 android:textSize="@dimen/login_sub_title_text_size"
                 android:textStyle="bold" />
@@ -114,7 +119,7 @@
                         android:layout_height="wrap_content"
                         android:layout_alignParentBottom="true"
                         android:gravity="center_horizontal"
-                        android:text="@string/login_tip"
+                        app:i18nKey='@{"login_tip"}'
                         android:textColor="@color/white"
                         android:textSize="@dimen/login_tip_text_size" />
                 </LinearLayout>
@@ -127,10 +132,22 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true"
-            android:layout_marginBottom="@dimen/login_tec_support_margin_bottom"
+            android:layout_marginBottom="@dimen/common_spacing"
             android:gravity="center_horizontal"
-            android:text="@string/tec_support"
+            app:i18nKey='@{"tec_support"}'
             android:textColor="@color/white"
             android:textSize="@dimen/login_tec_support_text_size" />
+
+        <TextView
+            android:id="@+id/version"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+            android:layout_alignParentBottom="true"
+            android:layout_marginRight="@dimen/login_version_margin"
+            android:layout_marginBottom="@dimen/common_spacing"
+            android:textColor="@color/white"
+            android:textSize="@dimen/login_version_text_size"
+            tools:text="v1.0" />
     </RelativeLayout>
 </layout>

+ 0 - 4
app/src/main/res/layout-land/activity_main.xml

@@ -105,11 +105,7 @@
             android:layout_height="match_parent"
             android:layout_below="@+id/header_line"
             android:layout_margin="@dimen/common_spacing"
-            app:navBackgroundColor="@color/white80"
-            app:navBallDiameter="@dimen/home_bottom_nav_ball_size"
-            app:navCornerRadius="@dimen/home_bottom_nav_corner_radius"
             app:navIconSize="@dimen/home_bottom_nav_icon_size"
-            app:navNotchHeight="@dimen/home_bottom_nav_notch_height"
             app:navOrientation="vertical"
             app:navTextSize="@dimen/home_bottom_nav_text_size" />
     </RelativeLayout>

+ 4 - 4
app/src/main/res/layout-land/dialog_login.xml

@@ -56,7 +56,7 @@
                 android:layout_width="match_parent"
                 android:layout_height="@dimen/login_dialog_input_height"
                 android:layout_marginBottom="@dimen/common_spacing"
-                android:hint="@string/please_input_account"
+                app:i18nHint='@{"please_input_account"}'
                 android:textSize="@dimen/login_dialog_text_size" />
 
             <EditText
@@ -65,7 +65,7 @@
                 android:layout_width="match_parent"
                 android:layout_height="@dimen/login_dialog_input_height"
                 android:layout_marginBottom="@dimen/common_spacing"
-                android:hint="@string/please_input_password"
+                app:i18nHint='@{"please_input_password"}'
                 android:inputType="textPassword"
                 android:textSize="@dimen/login_dialog_text_size" />
 
@@ -75,7 +75,7 @@
                 android:layout_width="match_parent"
                 android:layout_height="@dimen/login_dialog_btn_height"
                 android:layout_marginBottom="@dimen/common_spacing"
-                android:text="@string/login"
+                app:i18nKey='@{"login"}'
                 android:textSize="@dimen/login_dialog_text_size" />
 
             <TextView
@@ -84,7 +84,7 @@
                 android:layout_width="match_parent"
                 android:layout_height="@dimen/login_dialog_btn_height"
                 android:background="@drawable/white_stroke_bg"
-                android:text="@string/cancel"
+                app:i18nKey='@{"cancel"}'
                 android:textSize="@dimen/login_dialog_text_size" />
         </LinearLayout>
     </com.google.android.material.card.MaterialCardView>

+ 4 - 4
app/src/main/res/layout-land/dialog_slots_exception_report.xml

@@ -15,7 +15,7 @@
             android:background="@color/common_tip_dialog_info"
             android:gravity="center_vertical"
             android:paddingHorizontal="@dimen/common_spacing"
-            android:text="@string/slots_exception_report"
+            app:i18nKey='@{"slots_exception_report"}'
             android:textColor="@color/white"
             android:textSize="@dimen/common_btn_text_size" />
 
@@ -50,7 +50,7 @@
                 android:layout_marginVertical="@dimen/common_spacing"
                 android:background="@drawable/selectable_input_text_bg"
                 android:gravity="left|top"
-                android:hint="@string/please_input_exception_reason"
+                app:i18nHint='@{"please_input_exception_reason"}'
                 android:padding="@dimen/selectable_input_edit_padding"
                 android:textColor="@color/black"
                 android:textSize="@dimen/common_text_size"
@@ -80,7 +80,7 @@
                 android:gravity="center"
                 android:minHeight="@dimen/common_btn_height"
                 android:paddingHorizontal="@dimen/common_spacing_2x"
-                android:text="@string/confirm"
+                app:i18nKey='@{"confirm"}'
                 android:textColor="@color/white"
                 android:textSize="@dimen/common_btn_text_size" />
 
@@ -95,7 +95,7 @@
                 android:minWidth="@dimen/tip_dialog_btn_width"
                 android:minHeight="@dimen/common_btn_height"
                 android:paddingHorizontal="@dimen/common_spacing_2x"
-                android:text="@string/cancel"
+                app:i18nKey='@{"cancel"}'
                 android:textColor="@color/white"
                 android:textSize="@dimen/common_btn_text_size" />
         </LinearLayout>

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff