Переглянути джерело

越南语的国际化,与添加员工的错误修复

liukai 4 місяців тому
батько
коміт
fe44563907

+ 17 - 3
packages/cpt_job/lib/modules/job_applied/job_applied_controller.dart

@@ -202,10 +202,24 @@ class JobAppliedController extends GetxController with DioCancelableMixin {
     var result = await _jobRepository.addStaff2Job(state.jobId, selectedIds, cancelToken: cancelToken);
 
     if (result.isSuccess) {
-      NotifyEngine.showSuccess("Successful".tr);
+      var addStaffEntity = result.data;
+      List<String> filteredMessages = [];
+      if (addStaffEntity != null && addStaffEntity.resultList?.isNotEmpty == true) {
+        filteredMessages = addStaffEntity.resultList!
+            .where((resultList) => resultList.result == false && Utils.isNotEmpty(resultList.msg))
+            .map((resultList) => '${resultList.name} : ${resultList.msg!}')
+            .toList();
+      }
 
-      //添加成功之后刷新页面
-      refreshController.callRefresh();
+      if (filteredMessages.isNotEmpty) {
+        //有错误信息
+        NotifyEngine.showFailure(filteredMessages.join(" , "));
+      } else {
+        //无错误信息
+        NotifyEngine.showSuccess("Successful".tr);
+        //添加成功之后刷新页面
+        refreshController.callRefresh();
+      }
     } else {
       ToastEngine.show(result.errorMsg ?? "Network Load Error".tr);
       return;

+ 1 - 6
packages/cpt_job/lib/widget/applied_add_staff.dart

@@ -2,22 +2,17 @@ import 'dart:ui';
 
 import 'package:cs_resources/generated/assets.dart';
 import 'package:domain/entity/response/job_list_applied_staff_search_entity.dart';
-import 'package:domain/entity/response/job_list_remark_view_entity.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/widgets.dart';
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:get/get.dart';
-import 'package:plugin_platform/engine/toast/toast_engine.dart';
-import 'package:shared/utils/log_utils.dart';
-import 'package:shared/utils/util.dart';
 import 'package:widgets/ext/ex_widget.dart';
 import 'package:cs_resources/constants/color_constants.dart';
 import 'package:widgets/load_state_layout.dart';
 import 'package:widgets/my_load_image.dart';
 import 'package:widgets/my_text_view.dart';
 import 'package:widgets/search_app_bar.dart';
-import 'package:widgets/shatter/rating_widget.dart';
 import 'package:widgets/widget_export.dart';
 
 import 'applied_add_staff_controller.dart';
@@ -90,7 +85,7 @@ class _AppliedAddStaffState extends State<AppliedAddStaff> {
                 onSearch: (keyword) {
                   controller.doSearch(keyword);
                 },
-                hintText: "Staff Name".tr,
+                hintText: "Staff Name/ID/Phone".tr,
                 controller: controller.searchController,
               ).marginOnly(left: 16.5, right: 1.5, bottom: 15.5),
 

+ 40 - 0
packages/cs_domain/lib/entity/response/job_list_add_staff_entity.dart

@@ -0,0 +1,40 @@
+import 'package:domain/generated/json/base/json_field.dart';
+import 'package:domain/generated/json/job_list_add_staff_entity.g.dart';
+import 'dart:convert';
+export 'package:domain/generated/json/job_list_add_staff_entity.g.dart';
+
+@JsonSerializable()
+class JobListAddStaffEntity {
+	@JSONField(name: "result_list")
+	List<JobListAddStaffResultList>? resultList = [];
+
+	JobListAddStaffEntity();
+
+	factory JobListAddStaffEntity.fromJson(Map<String, dynamic> json) => $JobListAddStaffEntityFromJson(json);
+
+	Map<String, dynamic> toJson() => $JobListAddStaffEntityToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}
+
+@JsonSerializable()
+class JobListAddStaffResultList {
+	String? name = null;
+	String? phone = null;
+	bool? result = false;
+	String? msg = null;
+
+	JobListAddStaffResultList();
+
+	factory JobListAddStaffResultList.fromJson(Map<String, dynamic> json) => $JobListAddStaffResultListFromJson(json);
+
+	Map<String, dynamic> toJson() => $JobListAddStaffResultListToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}

+ 9 - 0
packages/cs_domain/lib/generated/json/base/json_convert_content.dart

@@ -8,6 +8,7 @@ import 'package:domain/entity/response/attendance_entity.dart';
 import 'package:domain/entity/response/check_success_entity.dart';
 import 'package:domain/entity/response/hotel_info_entity.dart';
 import 'package:domain/entity/response/id_name_entity.dart';
+import 'package:domain/entity/response/job_list_add_staff_entity.dart';
 import 'package:domain/entity/response/job_list_applied_edit_entity.dart';
 import 'package:domain/entity/response/job_list_applied_info_entity.dart';
 import 'package:domain/entity/response/job_list_applied_staff_list_entity.dart';
@@ -173,6 +174,12 @@ class JsonConvert {
     if (<IdNameEntity>[] is M) {
       return data.map<IdNameEntity>((Map<String, dynamic> e) => IdNameEntity.fromJson(e)).toList() as M;
     }
+    if (<JobListAddStaffEntity>[] is M) {
+      return data.map<JobListAddStaffEntity>((Map<String, dynamic> e) => JobListAddStaffEntity.fromJson(e)).toList() as M;
+    }
+    if (<JobListAddStaffResultList>[] is M) {
+      return data.map<JobListAddStaffResultList>((Map<String, dynamic> e) => JobListAddStaffResultList.fromJson(e)).toList() as M;
+    }
     if (<JobListAppliedEditEntity>[] is M) {
       return data.map<JobListAppliedEditEntity>((Map<String, dynamic> e) => JobListAppliedEditEntity.fromJson(e)).toList() as M;
     }
@@ -323,6 +330,8 @@ class JsonConvertClassCollection {
     (HotelInfoMenus).toString(): HotelInfoMenus.fromJson,
     (HotelInfoMenusChildren).toString(): HotelInfoMenusChildren.fromJson,
     (IdNameEntity).toString(): IdNameEntity.fromJson,
+    (JobListAddStaffEntity).toString(): JobListAddStaffEntity.fromJson,
+    (JobListAddStaffResultList).toString(): JobListAddStaffResultList.fromJson,
     (JobListAppliedEditEntity).toString(): JobListAppliedEditEntity.fromJson,
     (JobListAppliedEditReasonList).toString(): JobListAppliedEditReasonList.fromJson,
     (JobListAppliedInfoEntity).toString(): JobListAppliedInfoEntity.fromJson,

+ 72 - 0
packages/cs_domain/lib/generated/json/job_list_add_staff_entity.g.dart

@@ -0,0 +1,72 @@
+import 'package:domain/generated/json/base/json_convert_content.dart';
+import 'package:domain/entity/response/job_list_add_staff_entity.dart';
+
+JobListAddStaffEntity $JobListAddStaffEntityFromJson(Map<String, dynamic> json) {
+  final JobListAddStaffEntity jobListAddStaffEntity = JobListAddStaffEntity();
+  final List<JobListAddStaffResultList>? resultList = (json['result_list'] as List<dynamic>?)?.map(
+          (e) => jsonConvert.convert<JobListAddStaffResultList>(e) as JobListAddStaffResultList).toList();
+  if (resultList != null) {
+    jobListAddStaffEntity.resultList = resultList;
+  }
+  return jobListAddStaffEntity;
+}
+
+Map<String, dynamic> $JobListAddStaffEntityToJson(JobListAddStaffEntity entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['result_list'] = entity.resultList?.map((v) => v.toJson()).toList();
+  return data;
+}
+
+extension JobListAddStaffEntityExtension on JobListAddStaffEntity {
+  JobListAddStaffEntity copyWith({
+    List<JobListAddStaffResultList>? resultList,
+  }) {
+    return JobListAddStaffEntity()
+      ..resultList = resultList ?? this.resultList;
+  }
+}
+
+JobListAddStaffResultList $JobListAddStaffResultListFromJson(Map<String, dynamic> json) {
+  final JobListAddStaffResultList jobListAddStaffResultList = JobListAddStaffResultList();
+  final String? name = jsonConvert.convert<String>(json['name']);
+  if (name != null) {
+    jobListAddStaffResultList.name = name;
+  }
+  final String? phone = jsonConvert.convert<String>(json['phone']);
+  if (phone != null) {
+    jobListAddStaffResultList.phone = phone;
+  }
+  final bool? result = jsonConvert.convert<bool>(json['result']);
+  if (result != null) {
+    jobListAddStaffResultList.result = result;
+  }
+  final String? msg = jsonConvert.convert<String>(json['msg']);
+  if (msg != null) {
+    jobListAddStaffResultList.msg = msg;
+  }
+  return jobListAddStaffResultList;
+}
+
+Map<String, dynamic> $JobListAddStaffResultListToJson(JobListAddStaffResultList entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['name'] = entity.name;
+  data['phone'] = entity.phone;
+  data['result'] = entity.result;
+  data['msg'] = entity.msg;
+  return data;
+}
+
+extension JobListAddStaffResultListExtension on JobListAddStaffResultList {
+  JobListAddStaffResultList copyWith({
+    String? name,
+    String? phone,
+    bool? result,
+    String? msg,
+  }) {
+    return JobListAddStaffResultList()
+      ..name = name ?? this.name
+      ..phone = phone ?? this.phone
+      ..result = result ?? this.result
+      ..msg = msg ?? this.msg;
+  }
+}

+ 6 - 2
packages/cs_domain/lib/repository/job_repository.dart

@@ -1,5 +1,6 @@
 import 'dart:typed_data';
 
+import 'package:domain/entity/response/job_list_add_staff_entity.dart';
 import 'package:domain/entity/response/job_list_applied_edit_entity.dart';
 import 'package:domain/entity/response/job_list_applied_info_entity.dart';
 import 'package:domain/entity/response/job_list_applied_staff_list_entity.dart';
@@ -338,7 +339,7 @@ class JobRepository extends GetxService {
   }
 
   /// 添加员工到工作
-  Future<HttpResult> addStaff2Job(
+  Future<HttpResult<JobListAddStaffEntity>> addStaff2Job(
     String? jobId,
     String? staffIds, {
     CancelToken? cancelToken,
@@ -363,7 +364,10 @@ class JobRepository extends GetxService {
     //根据返回的结果,封装原始数据为Bean/Entity对象
     if (result.isSuccess) {
       //重新赋值data或list
-      return result.convert();
+      final json = result.getDataJson();
+      var data = JobListAddStaffEntity.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<JobListAddStaffEntity>(data: data);
     }
     return result.convert();
   }

+ 2 - 2
packages/cs_resources/lib/local/language/en_US.dart

@@ -1,5 +1,5 @@
 const Map<String, String> en_US = {
-  'app_name': 'YYBusiness',
+  'app_name': 'YY Employer',
   'Please enter your password': 'Please enter your password',
   'The login code cannot be empty!': 'The login code cannot be empty!',
   'The password cannot be empty!': 'The password cannot be empty!',
@@ -138,6 +138,7 @@ const Map<String, String> en_US = {
   'Technical issue': 'Technical issue',
   'Others': 'Others',
   'Staff Detail': 'Staff Detail',
+  'Staff Name/ID/Phone': 'Staff Name/ID/Phone',
 
   //插件的国际化
   'Pull to refresh': 'Pull to refresh',
@@ -148,7 +149,6 @@ const Map<String, String> en_US = {
   'Failed': 'Failed',
   'Last updated at %T': 'Last updated at %T',
   'Pull to load': 'Pull to load',
-
   'Network Load Error': 'Network Load Error',
   'Loading...': 'Loading...',
   'Data loading failed! Please refresh and try again': 'Data loading failed! Please refresh and try again',

+ 4 - 2
packages/cs_resources/lib/local/language/translation_service.dart

@@ -1,15 +1,17 @@
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 import 'en_US.dart';
+import 'vi_VN.dart';
 import 'zh_CN.dart';
 
 class TranslationService extends Translations {
   static Locale? get locale => Get.deviceLocale;
-  static const fallbackLocale = Locale('zh', 'CN');
+  static const fallbackLocale = Locale('en', 'US');
 
   @override
   Map<String, Map<String, String>> get keys => {
-        'zh_CN': zh_CN,
         'en_US': en_US,
+        'zh_CN': zh_CN,
+        'vi_VN': vi_VN,
       };
 }

+ 159 - 0
packages/cs_resources/lib/local/language/vi_VN.dart

@@ -0,0 +1,159 @@
+const Map<String, String> vi_VN = {
+  "app_name": "YY Employer",
+  "Please enter your password": "Vui lòng nhập mật khẩu của bạn",
+  "The login code cannot be empty!": "Mã đăng nhập không được để trống!",
+  "The password cannot be empty!": "Mật khẩu không được để trống!",
+  "The new password cannot be empty!": "Mật khẩu mới không được để trống!",
+  "Log in": "Đăng nhập",
+  "Password": "Mật khẩu",
+  "Email": "Email",
+  "Name/Mobile": "Tên / Số điện thoại",
+  "Check In": "Đăng ký vào",
+  "Check Out": "Đăng ký ra",
+  "Job Date:": "Ngày làm việc:",
+  "Start Time:": "Thời gian bắt đầu:",
+  "End Time:": "Thời gian kết thúc:",
+  "Start Time": "Thời gian bắt đầu",
+  "End Time": "Thời gian kết thúc",
+  "Name:": "Tên:",
+  "Reset": "Cài lại",
+  "Start Date": "Ngày bắt đầu",
+  "End Date": "Ngày kết thúc",
+  "Cancel": "Huỷ",
+  "Confirm": "Xác nhận",
+  "Sign Here": "Ký tại đây",
+  "Clean": "Làm sạch",
+  "Vietnam": "Việt Nam",
+  "Sign in/Sign out": "Đăng nhập/ Đăng xuất",
+  "Admin": "Quản trị viên",
+  "Don’t have an account?": "Bạn chưa có tài khoản?",
+  "Sign up": "Đăng ký",
+  "Confirm Password": "Xác nhận mật khẩu",
+  "Please enter your email": "Vui lòng nhập email của bạn",
+  "Please enter confirm password": "Vui lòng nhập xác nhận mật khẩu",
+  "Submit": "Nộp",
+  "The email cannot be empty!": "Email không được để trống!",
+  "The confirm password cannot be empty!": "Mật khẩu xác nhận không được để trống!",
+  "Please confirm your confirmed password!": "Vui lòng xác nhận mật khẩu đã được xác nhận của bạn!",
+  "Reset Password": "Đặt lại mật khẩu",
+  "New Password": "Mật khẩu mới",
+  "Please enter your new password": "Vui lòng nhập mật khẩu mới của bạn",
+  "Labour Request": "Yêu cầu lao động",
+  "Job List": "Danh sách việc làm",
+  "Sign in Sign out": "Đăng nhập/ Đăng xuất",
+  "Devices": "Thiết bị",
+  "Labour Request Review": "Xem xét yêu cầu lao động",
+  "Attendance Review": "Đánh giá điểm danh",
+  "Default Job Title": "Chức danh công việc mặc định",
+  "Report": "Báo cáo",
+  "Confirmation": "Sự xác nhận",
+  "Notice": "Lời báo trước",
+  "Are you sure you need to exit the system?": "Bạn có chắc chắn cần thoát khỏi hệ thống không?",
+  "Are you sure you want to deactivate your account? You will not be able to login into the app once you proceed with the request.":
+      "Bạn có chắc chắn muốn hủy kích hoạt tài khoản của mình không? Bạn sẽ không thể đăng nhập vào ứng dụng sau khi tiếp tục yêu cầu.",
+  "Welcome": "Chào mừng",
+  "Switch Projects": "Chuyển đổi dự án",
+  "Account Deactivation": "Vô hiệu hóa tài khoản",
+  "Logout": "Đăng xuất",
+  "Old Password": "Mật khẩu cũ",
+  "Settings": "Cài đặt",
+  "Title": "Tiêu đề",
+  "Create New Job Request": "Tạo yêu cầu công việc mới",
+  "Outlet": "Bộ phận",
+  "Status": "Trạng thái",
+  "Filter": "Lọc",
+  "Edit": "Biên tập",
+  "Recall": "Triệu hồi",
+  "Detail": "Chi tiết",
+  "Outlet:": "Bộ phận:",
+  "DateTime:": "Ngày Giờ:",
+  "No. of Staff:": "Số nhân viên:",
+  "Status:": "Trạng thái:",
+  "Publish Status:": "Trạng thái xuất bản:",
+  "Created At:": "Được tạo tại:",
+  "Published": "Được phát hành",
+  "Unpublished": "Chưa được xuất bản",
+  "Choose Outlet": "Chọn bộ phận",
+  "Choose Status": "Chọn trạng thái",
+  "Choose Job Title": "Chọn chức danh công việc",
+  "Job Title": "Chức danh công việc",
+  "Job Start Time": "Thời gian bắt đầu công việc",
+  "Job End Time": "Thời gian kết thúc công việc",
+  "No. of Staff": "Số nhân viên:",
+  "Enter No. of Staff": "Nhập số lượng nhân viên",
+  "Choose Start Date": "Chọn ngày bắt đầu",
+  "Choose End Date": "Chọn ngày kết thúc",
+  "Add Labour Requisition": "Thêm yêu cầu tuyển dụng lao động",
+  "Edit Labour Requisition": "Chỉnh sửa yêu cầu tuyển dụng lao động",
+  "Labour Requisition": "Trưng dụng lao động",
+  "Message": "Tin nhắn",
+  "Are you sure you want to recall?": "Bạn có chắc chắn muốn nhớ lại không?",
+  "Workflow": "Quy trình làm việc",
+  "Remark:": "Nhận xét:",
+  "Audit Time:": "Thời gian kiểm toán:",
+  "Operator:": "Nhà điều hành:",
+  "Designation:": "Chỉ định:",
+  "Type:": "Kiểu:",
+  "Node:": "Nút:",
+  "Approved": "Đã duyệt",
+  "Pending": "Chưa giải quyết",
+  "Rejected": "Bị loại bỏ",
+  "Completed": "Hoàn thành",
+  "Active": "Tích cực",
+  "Cancelled": "Đã hủy",
+  "Revised": "Đã chỉnh sửa",
+  "Job Detail": "Chi tiết công việc",
+  "Add Staff": "Thêm nhân viên",
+  "Remarks": "Bình luận",
+  "Applied At:": "Áp dụng tại:",
+  "Total Rooms:": "Tổng số phòng:",
+  "Total Hours:": "Tổng số giờ:",
+  "+/- Hours:": "+/- Giờ:",
+  "Security Out:": "Bảo vệ ký ra:",
+  "Work Out:": "Giờ làm việc ra:",
+  "Work In:": "Giờ làm việc vào:",
+  "Security In:": "Bảo vệ ký vào:",
+  "Staff Name:": "Tên nhân viên:",
+  "Staff Name": "Tên nhân viên:",
+  "Work Out": "Giờ làm việc ra",
+  "Work In": "Giờ làm việc vào",
+  "Security In": "Bảo vệ ký vào",
+  "Security Out": "Bảo vệ ký ra",
+  "+/- Hours": "+/- Giờ:",
+  "Total Rooms": "Tổng số phòng",
+  "Operation Approve": "Phê duyệt vận hành",
+  "Batch Modify": "Sửa đổi hàng loạt",
+  "Please select the applied record": "Vui lòng chọn hồ sơ áp dụng",
+  "Are you sure you want to setting approved?": "Bạn có chắc chắn muốn cài đặt được phê duyệt không?",
+  "Attitude": "Thái độ",
+  "Performance": "Hiệu suất thể hiện",
+  "Experience": "Kinh nghiệm",
+  "Grooming": "Dáng vẻ bên ngoài",
+  "Enter...": "Nhập vào...",
+  "Please Enter Remark": "Vui lòng nhập nhận xét",
+  "Choose Staff": "Chọn nhân viên",
+  "Reason": "Lý do",
+  "None": "Không có",
+  "Forgot to clock in/out": "Quên bấm giờ vào/ra",
+  "Technical issue": "Vấn đề kỹ thuật",
+  "Others": "Những cái khác",
+  "Staff Detail": "Chi tiết nhân viên",
+  'Staff Name/ID/Phone': 'Tên nhân viên/ID/Số điện thoại',
+
+  //插件的国际化
+  "Pull to refresh": "Kéo để làm mới",
+  "Release ready": "Sẵn sàng phát hành",
+  "Refreshing...": "Đang làm mới...",
+  "Succeeded": "Thành công",
+  "No more": "No more",
+  "Failed": "Thất bại",
+  "Last updated at %T": "Cập nhật lần cuối lúc",
+  "Pull to load": "Kéo để tải",
+  "Network Load Error": "Lỗi tải mạng",
+  "Loading...": "Đang tải...",
+  "Data loading failed! Please refresh and try again": "Tải dữ liệu không thành công! Vui lòng làm mới và thử lại",
+  "There is currently no content available": "Hiện tại không có nội dung nào phù hợp",
+  "Click again and exit the app": "Nhấp lại và thoát khỏi ứng dụng",
+  "The login credential have expired, please log in again.": "Thông tin đăng nhập đã hết hạn, vui lòng đăng nhập lại.",
+  "Successful": "Thành công",
+};

+ 2 - 1
packages/cs_resources/lib/local/language/zh_CN.dart

@@ -1,5 +1,5 @@
 const Map<String, String> zh_CN = {
-  'app_name': 'YYBusiness',
+  'app_name': 'YY Employer',
   'Please enter your password': '请输入您的密码',
   'The login code cannot be empty!': '登录账号不能为空!',
   'The password cannot be empty!': '密码不能为空!',
@@ -138,6 +138,7 @@ const Map<String, String> zh_CN = {
   'Technical issue': '技术问题',
   'Others': '其他',
   'Staff Detail': '员工详情',
+  'Staff Name/ID/Phone': '员工姓名/ID/电话号码',
 
   //插件的国际化
   'Pull to refresh': '下拉刷新',