Commit b6d94429 authored by Steven杜宇's avatar Steven杜宇

Merge branch 'qmas-1130' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS into qmas-1130

parents 369465a5 5124b1c1
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
040AE9802CE8340000310241 /* YHWorkExperiencePositionReasonTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 040AE97F2CE8340000310241 /* YHWorkExperiencePositionReasonTableViewCell.swift */; }; 040AE9802CE8340000310241 /* YHWorkExperiencePositionReasonTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 040AE97F2CE8340000310241 /* YHWorkExperiencePositionReasonTableViewCell.swift */; };
040AE9822CE8810200310241 /* YHWorkExperienceSelectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 040AE9812CE8810200310241 /* YHWorkExperienceSelectView.swift */; }; 040AE9822CE8810200310241 /* YHWorkExperienceSelectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 040AE9812CE8810200310241 /* YHWorkExperienceSelectView.swift */; };
040AE9842CE893CC00310241 /* YHWorkExperiencePositionItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 040AE9832CE893CC00310241 /* YHWorkExperiencePositionItemView.swift */; }; 040AE9842CE893CC00310241 /* YHWorkExperiencePositionItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 040AE9832CE893CC00310241 /* YHWorkExperiencePositionItemView.swift */; };
040AE9862CEB09ED00310241 /* YHWorkExperienceCompanySelectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 040AE9852CEB09ED00310241 /* YHWorkExperienceCompanySelectView.swift */; };
040AE9882CEB6DAC00310241 /* YHWorkExperiencePositionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 040AE9872CEB6DAC00310241 /* YHWorkExperiencePositionModel.swift */; };
04129E862CD0C8490072F87B /* YHAliYunLogManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04129E852CD0C8490072F87B /* YHAliYunLogManager.swift */; }; 04129E862CD0C8490072F87B /* YHAliYunLogManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04129E852CD0C8490072F87B /* YHAliYunLogManager.swift */; };
041390692C1081FA0098CB8A /* YHFileListEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 041390682C1081FA0098CB8A /* YHFileListEmptyView.swift */; }; 041390692C1081FA0098CB8A /* YHFileListEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 041390682C1081FA0098CB8A /* YHFileListEmptyView.swift */; };
0414708B2C88627B00B7B688 /* YHButlerServiceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0414708A2C88627B00B7B688 /* YHButlerServiceManager.swift */; }; 0414708B2C88627B00B7B688 /* YHButlerServiceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0414708A2C88627B00B7B688 /* YHButlerServiceManager.swift */; };
...@@ -325,7 +327,6 @@ ...@@ -325,7 +327,6 @@
045EEE972B9F171A0022A143 /* YHPreviewInfoWorkExpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDBB2B9F171A0022A143 /* YHPreviewInfoWorkExpView.swift */; }; 045EEE972B9F171A0022A143 /* YHPreviewInfoWorkExpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDBB2B9F171A0022A143 /* YHPreviewInfoWorkExpView.swift */; };
045EEE982B9F171A0022A143 /* YHPreviewInfoQuestionAndAnswerItemsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDBC2B9F171A0022A143 /* YHPreviewInfoQuestionAndAnswerItemsView.swift */; }; 045EEE982B9F171A0022A143 /* YHPreviewInfoQuestionAndAnswerItemsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDBC2B9F171A0022A143 /* YHPreviewInfoQuestionAndAnswerItemsView.swift */; };
045EEE992B9F171A0022A143 /* YHPreviewInfoHoldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDBD2B9F171A0022A143 /* YHPreviewInfoHoldView.swift */; }; 045EEE992B9F171A0022A143 /* YHPreviewInfoHoldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDBD2B9F171A0022A143 /* YHPreviewInfoHoldView.swift */; };
045EEE9A2B9F171A0022A143 /* YHWorkIntroductionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDC02B9F171A0022A143 /* YHWorkIntroductionViewModel.swift */; };
045EEE9B2B9F171A0022A143 /* YHWorkExperienceViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDC12B9F171A0022A143 /* YHWorkExperienceViewModel.swift */; }; 045EEE9B2B9F171A0022A143 /* YHWorkExperienceViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDC12B9F171A0022A143 /* YHWorkExperienceViewModel.swift */; };
045EEE9C2B9F171A0022A143 /* YHCompanyViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDC22B9F171A0022A143 /* YHCompanyViewModel.swift */; }; 045EEE9C2B9F171A0022A143 /* YHCompanyViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDC22B9F171A0022A143 /* YHCompanyViewModel.swift */; };
045EEE9D2B9F171A0022A143 /* YHWorkItemListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDC32B9F171A0022A143 /* YHWorkItemListViewModel.swift */; }; 045EEE9D2B9F171A0022A143 /* YHWorkItemListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDC32B9F171A0022A143 /* YHWorkItemListViewModel.swift */; };
...@@ -339,7 +340,6 @@ ...@@ -339,7 +340,6 @@
045EEEA52B9F171A0022A143 /* YHImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDCD2B9F171A0022A143 /* YHImageViewController.swift */; }; 045EEEA52B9F171A0022A143 /* YHImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDCD2B9F171A0022A143 /* YHImageViewController.swift */; };
045EEEA62B9F171A0022A143 /* YHCompanySelectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDCE2B9F171A0022A143 /* YHCompanySelectViewController.swift */; }; 045EEEA62B9F171A0022A143 /* YHCompanySelectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDCE2B9F171A0022A143 /* YHCompanySelectViewController.swift */; };
045EEEA72B9F171A0022A143 /* YHWorkExperienceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDCF2B9F171A0022A143 /* YHWorkExperienceViewController.swift */; }; 045EEEA72B9F171A0022A143 /* YHWorkExperienceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDCF2B9F171A0022A143 /* YHWorkExperienceViewController.swift */; };
045EEEA82B9F171A0022A143 /* YHWorkIntroductionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDD02B9F171A0022A143 /* YHWorkIntroductionViewController.swift */; };
045EEEA92B9F171A0022A143 /* YHWorkExperienceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDD12B9F171A0022A143 /* YHWorkExperienceListViewController.swift */; }; 045EEEA92B9F171A0022A143 /* YHWorkExperienceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDD12B9F171A0022A143 /* YHWorkExperienceListViewController.swift */; };
045EEEAA2B9F171A0022A143 /* YHWorkExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDD22B9F171A0022A143 /* YHWorkExampleViewController.swift */; }; 045EEEAA2B9F171A0022A143 /* YHWorkExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDD22B9F171A0022A143 /* YHWorkExampleViewController.swift */; };
045EEEAB2B9F171A0022A143 /* YHImageClipperViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDD32B9F171A0022A143 /* YHImageClipperViewController.swift */; }; 045EEEAB2B9F171A0022A143 /* YHImageClipperViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045EEDD32B9F171A0022A143 /* YHImageClipperViewController.swift */; };
...@@ -636,6 +636,11 @@ ...@@ -636,6 +636,11 @@
04B401EA2CE848E6005C61A9 /* YHIncomeTypeSelectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B401E92CE848E6005C61A9 /* YHIncomeTypeSelectViewController.swift */; }; 04B401EA2CE848E6005C61A9 /* YHIncomeTypeSelectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B401E92CE848E6005C61A9 /* YHIncomeTypeSelectViewController.swift */; };
04B401EC2CE84CBD005C61A9 /* YHIncomeTypePopViewSelectCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B401EB2CE84CBD005C61A9 /* YHIncomeTypePopViewSelectCell.swift */; }; 04B401EC2CE84CBD005C61A9 /* YHIncomeTypePopViewSelectCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B401EB2CE84CBD005C61A9 /* YHIncomeTypePopViewSelectCell.swift */; };
04B401EE2CE8709A005C61A9 /* YHIncomeTypeSelectModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B401ED2CE8709A005C61A9 /* YHIncomeTypeSelectModel.swift */; }; 04B401EE2CE8709A005C61A9 /* YHIncomeTypeSelectModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B401ED2CE8709A005C61A9 /* YHIncomeTypeSelectModel.swift */; };
04B401F02CEB0C78005C61A9 /* YHIncomeRecordViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B401EF2CEB0C78005C61A9 /* YHIncomeRecordViewModel.swift */; };
04B401F22CEB19C1005C61A9 /* YHIncomeRecordCompleteModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B401F12CEB19C1005C61A9 /* YHIncomeRecordCompleteModel.swift */; };
04B401F42CEB1C51005C61A9 /* YHIncomeCompanyDetailModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B401F32CEB1C51005C61A9 /* YHIncomeCompanyDetailModel.swift */; };
04B401F62CEB239C005C61A9 /* YHIncomeRecordUtilType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B401F52CEB239C005C61A9 /* YHIncomeRecordUtilType.swift */; };
04B401F82CEB3E2B005C61A9 /* YHIncomeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B401F72CEB3E2A005C61A9 /* YHIncomeType.swift */; };
04B4B8D52C89CE5E00ED82BC /* YHButlerServiceMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B4B8D42C89CE5E00ED82BC /* YHButlerServiceMessage.swift */; }; 04B4B8D52C89CE5E00ED82BC /* YHButlerServiceMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B4B8D42C89CE5E00ED82BC /* YHButlerServiceMessage.swift */; };
04B4B8D72C8AE77C00ED82BC /* YHButlerServiceMessageHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B4B8D62C8AE77C00ED82BC /* YHButlerServiceMessageHandler.swift */; }; 04B4B8D72C8AE77C00ED82BC /* YHButlerServiceMessageHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B4B8D62C8AE77C00ED82BC /* YHButlerServiceMessageHandler.swift */; };
04B4B8DC2C90696E00ED82BC /* YHResignDocumentManagementVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B4B8DB2C90696E00ED82BC /* YHResignDocumentManagementVC.swift */; }; 04B4B8DC2C90696E00ED82BC /* YHResignDocumentManagementVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04B4B8DB2C90696E00ED82BC /* YHResignDocumentManagementVC.swift */; };
...@@ -1035,6 +1040,8 @@ ...@@ -1035,6 +1040,8 @@
040AE97F2CE8340000310241 /* YHWorkExperiencePositionReasonTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHWorkExperiencePositionReasonTableViewCell.swift; sourceTree = "<group>"; }; 040AE97F2CE8340000310241 /* YHWorkExperiencePositionReasonTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHWorkExperiencePositionReasonTableViewCell.swift; sourceTree = "<group>"; };
040AE9812CE8810200310241 /* YHWorkExperienceSelectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHWorkExperienceSelectView.swift; sourceTree = "<group>"; }; 040AE9812CE8810200310241 /* YHWorkExperienceSelectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHWorkExperienceSelectView.swift; sourceTree = "<group>"; };
040AE9832CE893CC00310241 /* YHWorkExperiencePositionItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHWorkExperiencePositionItemView.swift; sourceTree = "<group>"; }; 040AE9832CE893CC00310241 /* YHWorkExperiencePositionItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHWorkExperiencePositionItemView.swift; sourceTree = "<group>"; };
040AE9852CEB09ED00310241 /* YHWorkExperienceCompanySelectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHWorkExperienceCompanySelectView.swift; sourceTree = "<group>"; };
040AE9872CEB6DAC00310241 /* YHWorkExperiencePositionModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHWorkExperiencePositionModel.swift; sourceTree = "<group>"; };
04129E852CD0C8490072F87B /* YHAliYunLogManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAliYunLogManager.swift; sourceTree = "<group>"; }; 04129E852CD0C8490072F87B /* YHAliYunLogManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAliYunLogManager.swift; sourceTree = "<group>"; };
041390682C1081FA0098CB8A /* YHFileListEmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHFileListEmptyView.swift; sourceTree = "<group>"; }; 041390682C1081FA0098CB8A /* YHFileListEmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHFileListEmptyView.swift; sourceTree = "<group>"; };
0414708A2C88627B00B7B688 /* YHButlerServiceManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHButlerServiceManager.swift; sourceTree = "<group>"; }; 0414708A2C88627B00B7B688 /* YHButlerServiceManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHButlerServiceManager.swift; sourceTree = "<group>"; };
...@@ -1341,7 +1348,6 @@ ...@@ -1341,7 +1348,6 @@
045EEDBB2B9F171A0022A143 /* YHPreviewInfoWorkExpView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHPreviewInfoWorkExpView.swift; sourceTree = "<group>"; }; 045EEDBB2B9F171A0022A143 /* YHPreviewInfoWorkExpView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHPreviewInfoWorkExpView.swift; sourceTree = "<group>"; };
045EEDBC2B9F171A0022A143 /* YHPreviewInfoQuestionAndAnswerItemsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHPreviewInfoQuestionAndAnswerItemsView.swift; sourceTree = "<group>"; }; 045EEDBC2B9F171A0022A143 /* YHPreviewInfoQuestionAndAnswerItemsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHPreviewInfoQuestionAndAnswerItemsView.swift; sourceTree = "<group>"; };
045EEDBD2B9F171A0022A143 /* YHPreviewInfoHoldView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHPreviewInfoHoldView.swift; sourceTree = "<group>"; }; 045EEDBD2B9F171A0022A143 /* YHPreviewInfoHoldView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHPreviewInfoHoldView.swift; sourceTree = "<group>"; };
045EEDC02B9F171A0022A143 /* YHWorkIntroductionViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkIntroductionViewModel.swift; sourceTree = "<group>"; };
045EEDC12B9F171A0022A143 /* YHWorkExperienceViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkExperienceViewModel.swift; sourceTree = "<group>"; }; 045EEDC12B9F171A0022A143 /* YHWorkExperienceViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkExperienceViewModel.swift; sourceTree = "<group>"; };
045EEDC22B9F171A0022A143 /* YHCompanyViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHCompanyViewModel.swift; sourceTree = "<group>"; }; 045EEDC22B9F171A0022A143 /* YHCompanyViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHCompanyViewModel.swift; sourceTree = "<group>"; };
045EEDC32B9F171A0022A143 /* YHWorkItemListViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkItemListViewModel.swift; sourceTree = "<group>"; }; 045EEDC32B9F171A0022A143 /* YHWorkItemListViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkItemListViewModel.swift; sourceTree = "<group>"; };
...@@ -1355,7 +1361,6 @@ ...@@ -1355,7 +1361,6 @@
045EEDCD2B9F171A0022A143 /* YHImageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHImageViewController.swift; sourceTree = "<group>"; }; 045EEDCD2B9F171A0022A143 /* YHImageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHImageViewController.swift; sourceTree = "<group>"; };
045EEDCE2B9F171A0022A143 /* YHCompanySelectViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHCompanySelectViewController.swift; sourceTree = "<group>"; }; 045EEDCE2B9F171A0022A143 /* YHCompanySelectViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHCompanySelectViewController.swift; sourceTree = "<group>"; };
045EEDCF2B9F171A0022A143 /* YHWorkExperienceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkExperienceViewController.swift; sourceTree = "<group>"; }; 045EEDCF2B9F171A0022A143 /* YHWorkExperienceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkExperienceViewController.swift; sourceTree = "<group>"; };
045EEDD02B9F171A0022A143 /* YHWorkIntroductionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkIntroductionViewController.swift; sourceTree = "<group>"; };
045EEDD12B9F171A0022A143 /* YHWorkExperienceListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkExperienceListViewController.swift; sourceTree = "<group>"; }; 045EEDD12B9F171A0022A143 /* YHWorkExperienceListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkExperienceListViewController.swift; sourceTree = "<group>"; };
045EEDD22B9F171A0022A143 /* YHWorkExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkExampleViewController.swift; sourceTree = "<group>"; }; 045EEDD22B9F171A0022A143 /* YHWorkExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHWorkExampleViewController.swift; sourceTree = "<group>"; };
045EEDD32B9F171A0022A143 /* YHImageClipperViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHImageClipperViewController.swift; sourceTree = "<group>"; }; 045EEDD32B9F171A0022A143 /* YHImageClipperViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHImageClipperViewController.swift; sourceTree = "<group>"; };
...@@ -1655,6 +1660,11 @@ ...@@ -1655,6 +1660,11 @@
04B401E92CE848E6005C61A9 /* YHIncomeTypeSelectViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHIncomeTypeSelectViewController.swift; sourceTree = "<group>"; }; 04B401E92CE848E6005C61A9 /* YHIncomeTypeSelectViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHIncomeTypeSelectViewController.swift; sourceTree = "<group>"; };
04B401EB2CE84CBD005C61A9 /* YHIncomeTypePopViewSelectCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHIncomeTypePopViewSelectCell.swift; sourceTree = "<group>"; }; 04B401EB2CE84CBD005C61A9 /* YHIncomeTypePopViewSelectCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHIncomeTypePopViewSelectCell.swift; sourceTree = "<group>"; };
04B401ED2CE8709A005C61A9 /* YHIncomeTypeSelectModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHIncomeTypeSelectModel.swift; sourceTree = "<group>"; }; 04B401ED2CE8709A005C61A9 /* YHIncomeTypeSelectModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHIncomeTypeSelectModel.swift; sourceTree = "<group>"; };
04B401EF2CEB0C78005C61A9 /* YHIncomeRecordViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHIncomeRecordViewModel.swift; sourceTree = "<group>"; };
04B401F12CEB19C1005C61A9 /* YHIncomeRecordCompleteModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHIncomeRecordCompleteModel.swift; sourceTree = "<group>"; };
04B401F32CEB1C51005C61A9 /* YHIncomeCompanyDetailModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHIncomeCompanyDetailModel.swift; sourceTree = "<group>"; };
04B401F52CEB239C005C61A9 /* YHIncomeRecordUtilType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHIncomeRecordUtilType.swift; sourceTree = "<group>"; };
04B401F72CEB3E2A005C61A9 /* YHIncomeType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHIncomeType.swift; sourceTree = "<group>"; };
04B4B8D42C89CE5E00ED82BC /* YHButlerServiceMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHButlerServiceMessage.swift; sourceTree = "<group>"; }; 04B4B8D42C89CE5E00ED82BC /* YHButlerServiceMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHButlerServiceMessage.swift; sourceTree = "<group>"; };
04B4B8D62C8AE77C00ED82BC /* YHButlerServiceMessageHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHButlerServiceMessageHandler.swift; sourceTree = "<group>"; }; 04B4B8D62C8AE77C00ED82BC /* YHButlerServiceMessageHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHButlerServiceMessageHandler.swift; sourceTree = "<group>"; };
04B4B8DB2C90696E00ED82BC /* YHResignDocumentManagementVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignDocumentManagementVC.swift; sourceTree = "<group>"; }; 04B4B8DB2C90696E00ED82BC /* YHResignDocumentManagementVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHResignDocumentManagementVC.swift; sourceTree = "<group>"; };
...@@ -2905,7 +2915,6 @@ ...@@ -2905,7 +2915,6 @@
045EEDBF2B9F171A0022A143 /* ViewModel */ = { 045EEDBF2B9F171A0022A143 /* ViewModel */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
045EEDC02B9F171A0022A143 /* YHWorkIntroductionViewModel.swift */,
045EEDC12B9F171A0022A143 /* YHWorkExperienceViewModel.swift */, 045EEDC12B9F171A0022A143 /* YHWorkExperienceViewModel.swift */,
045EEDC22B9F171A0022A143 /* YHCompanyViewModel.swift */, 045EEDC22B9F171A0022A143 /* YHCompanyViewModel.swift */,
045EEDC32B9F171A0022A143 /* YHWorkItemListViewModel.swift */, 045EEDC32B9F171A0022A143 /* YHWorkItemListViewModel.swift */,
...@@ -2923,6 +2932,7 @@ ...@@ -2923,6 +2932,7 @@
045EEDC82B9F171A0022A143 /* YHWorkExperienceDetailModel.swift */, 045EEDC82B9F171A0022A143 /* YHWorkExperienceDetailModel.swift */,
045EEDC92B9F171A0022A143 /* YHWorkExperienceProjectModel.swift */, 045EEDC92B9F171A0022A143 /* YHWorkExperienceProjectModel.swift */,
045EEDCA2B9F171A0022A143 /* YHCompanyModel.swift */, 045EEDCA2B9F171A0022A143 /* YHCompanyModel.swift */,
040AE9872CEB6DAC00310241 /* YHWorkExperiencePositionModel.swift */,
); );
path = Model; path = Model;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -2934,7 +2944,6 @@ ...@@ -2934,7 +2944,6 @@
045EEDCD2B9F171A0022A143 /* YHImageViewController.swift */, 045EEDCD2B9F171A0022A143 /* YHImageViewController.swift */,
045EEDCE2B9F171A0022A143 /* YHCompanySelectViewController.swift */, 045EEDCE2B9F171A0022A143 /* YHCompanySelectViewController.swift */,
045EEDCF2B9F171A0022A143 /* YHWorkExperienceViewController.swift */, 045EEDCF2B9F171A0022A143 /* YHWorkExperienceViewController.swift */,
045EEDD02B9F171A0022A143 /* YHWorkIntroductionViewController.swift */,
045EEDD12B9F171A0022A143 /* YHWorkExperienceListViewController.swift */, 045EEDD12B9F171A0022A143 /* YHWorkExperienceListViewController.swift */,
045EEDD22B9F171A0022A143 /* YHWorkExampleViewController.swift */, 045EEDD22B9F171A0022A143 /* YHWorkExampleViewController.swift */,
045EEDD32B9F171A0022A143 /* YHImageClipperViewController.swift */, 045EEDD32B9F171A0022A143 /* YHImageClipperViewController.swift */,
...@@ -2974,6 +2983,7 @@ ...@@ -2974,6 +2983,7 @@
040AE97F2CE8340000310241 /* YHWorkExperiencePositionReasonTableViewCell.swift */, 040AE97F2CE8340000310241 /* YHWorkExperiencePositionReasonTableViewCell.swift */,
040AE9812CE8810200310241 /* YHWorkExperienceSelectView.swift */, 040AE9812CE8810200310241 /* YHWorkExperienceSelectView.swift */,
040AE9832CE893CC00310241 /* YHWorkExperiencePositionItemView.swift */, 040AE9832CE893CC00310241 /* YHWorkExperiencePositionItemView.swift */,
040AE9852CEB09ED00310241 /* YHWorkExperienceCompanySelectView.swift */,
); );
path = V; path = V;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -4002,6 +4012,10 @@ ...@@ -4002,6 +4012,10 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
04B401ED2CE8709A005C61A9 /* YHIncomeTypeSelectModel.swift */, 04B401ED2CE8709A005C61A9 /* YHIncomeTypeSelectModel.swift */,
04B401F72CEB3E2A005C61A9 /* YHIncomeType.swift */,
04B401F12CEB19C1005C61A9 /* YHIncomeRecordCompleteModel.swift */,
04B401F32CEB1C51005C61A9 /* YHIncomeCompanyDetailModel.swift */,
04B401F52CEB239C005C61A9 /* YHIncomeRecordUtilType.swift */,
); );
path = M; path = M;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -4032,6 +4046,7 @@ ...@@ -4032,6 +4046,7 @@
04B401CF2CE6E6C8005C61A9 /* VM */ = { 04B401CF2CE6E6C8005C61A9 /* VM */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
04B401EF2CEB0C78005C61A9 /* YHIncomeRecordViewModel.swift */,
); );
path = VM; path = VM;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -5754,7 +5769,6 @@ ...@@ -5754,7 +5769,6 @@
A5EF21352BA6E05E005027E6 /* YHQuestionAndAnswerViewController.swift in Sources */, A5EF21352BA6E05E005027E6 /* YHQuestionAndAnswerViewController.swift in Sources */,
A5EF213B2BA6EC98005027E6 /* YHQuestionAndAnswerCell.swift in Sources */, A5EF213B2BA6EC98005027E6 /* YHQuestionAndAnswerCell.swift in Sources */,
04912F702CB765FE00CC3105 /* YHResignAppointTimeViewController.swift in Sources */, 04912F702CB765FE00CC3105 /* YHResignAppointTimeViewController.swift in Sources */,
045EEEA82B9F171A0022A143 /* YHWorkIntroductionViewController.swift in Sources */,
044D0BFC2C21635B00C5CF5E /* YHInformationAuthorizationStepOneViewController.swift in Sources */, 044D0BFC2C21635B00C5CF5E /* YHInformationAuthorizationStepOneViewController.swift in Sources */,
045EEEBF2B9F171A0022A143 /* YHWorkFileItemView.swift in Sources */, 045EEEBF2B9F171A0022A143 /* YHWorkFileItemView.swift in Sources */,
04AF58C42B4FC51C0066011A /* YHLocalizable.swift in Sources */, 04AF58C42B4FC51C0066011A /* YHLocalizable.swift in Sources */,
...@@ -5914,6 +5928,7 @@ ...@@ -5914,6 +5928,7 @@
0457921B2CBE0C3F00EBD99B /* YHLookResignResultModel.swift in Sources */, 0457921B2CBE0C3F00EBD99B /* YHLookResignResultModel.swift in Sources */,
045EEEB92B9F171A0022A143 /* YHWorkMessageSelectTableViewCell.swift in Sources */, 045EEEB92B9F171A0022A143 /* YHWorkMessageSelectTableViewCell.swift in Sources */,
04FA8B302C0874CA00ABE43F /* YHOneKeyLoginViewModel.swift in Sources */, 04FA8B302C0874CA00ABE43F /* YHOneKeyLoginViewModel.swift in Sources */,
04B401F82CEB3E2B005C61A9 /* YHIncomeType.swift in Sources */,
04256E112C75BD2700A37BA4 /* YHVisaPaymentListModel.swift in Sources */, 04256E112C75BD2700A37BA4 /* YHVisaPaymentListModel.swift in Sources */,
04A7BD0F2BA41C9800BD35A2 /* YHMyDocumentsModel.swift in Sources */, 04A7BD0F2BA41C9800BD35A2 /* YHMyDocumentsModel.swift in Sources */,
044EE24A2C9434D400A2FE3A /* YHResignCertificateDetailPassPortViewController.swift in Sources */, 044EE24A2C9434D400A2FE3A /* YHResignCertificateDetailPassPortViewController.swift in Sources */,
...@@ -5927,6 +5942,7 @@ ...@@ -5927,6 +5942,7 @@
A567E5B82BD7643D00D5D5A0 /* YHSearchItemLayout.swift in Sources */, A567E5B82BD7643D00D5D5A0 /* YHSearchItemLayout.swift in Sources */,
A567E5A02BD7643D00D5D5A0 /* YHHomeWebViewController.swift in Sources */, A567E5A02BD7643D00D5D5A0 /* YHHomeWebViewController.swift in Sources */,
044D0BF42C21247100C5CF5E /* YHUserInfoSettingViewController.swift in Sources */, 044D0BF42C21247100C5CF5E /* YHUserInfoSettingViewController.swift in Sources */,
040AE9862CEB09ED00310241 /* YHWorkExperienceCompanySelectView.swift in Sources */,
A567E5942BD7643D00D5D5A0 /* YHHomeListModel.swift in Sources */, A567E5942BD7643D00D5D5A0 /* YHHomeListModel.swift in Sources */,
047F3DDB2CE6DE91001B2A6D /* YHEducationMarkView.swift in Sources */, 047F3DDB2CE6DE91001B2A6D /* YHEducationMarkView.swift in Sources */,
04CE1AD82C2AD91F001CB80A /* YHActivityListViewController.swift in Sources */, 04CE1AD82C2AD91F001CB80A /* YHActivityListViewController.swift in Sources */,
...@@ -6040,7 +6056,6 @@ ...@@ -6040,7 +6056,6 @@
04256DD02C7041C700A37BA4 /* YHInfoItemView.swift in Sources */, 04256DD02C7041C700A37BA4 /* YHInfoItemView.swift in Sources */,
A5ACE9312B4564F7002C94D2 /* YHPersonalCenterCell.swift in Sources */, A5ACE9312B4564F7002C94D2 /* YHPersonalCenterCell.swift in Sources */,
0430E6562C7342AB000511E2 /* YHAdopterIncomeFileCountTableViewCell.swift in Sources */, 0430E6562C7342AB000511E2 /* YHAdopterIncomeFileCountTableViewCell.swift in Sources */,
045EEE9A2B9F171A0022A143 /* YHWorkIntroductionViewModel.swift in Sources */,
0449EEEB2C8EF2B700A397FD /* YHResignMaterialListVC.swift in Sources */, 0449EEEB2C8EF2B700A397FD /* YHResignMaterialListVC.swift in Sources */,
044D0C1C2C22C30B00C5CF5E /* YHEditSchoolViewController.swift in Sources */, 044D0C1C2C22C30B00C5CF5E /* YHEditSchoolViewController.swift in Sources */,
044E31C92CBD2AA400500F8E /* YHResignInfoConfirmIViewModel.swift in Sources */, 044E31C92CBD2AA400500F8E /* YHResignInfoConfirmIViewModel.swift in Sources */,
...@@ -6124,6 +6139,7 @@ ...@@ -6124,6 +6139,7 @@
04256E002C7440A500A37BA4 /* YHFamilyWarmTipsCell.swift in Sources */, 04256E002C7440A500A37BA4 /* YHFamilyWarmTipsCell.swift in Sources */,
042B20DA2CEB337100655093 /* YHImproveSchemeTemplateListCell.swift in Sources */, 042B20DA2CEB337100655093 /* YHImproveSchemeTemplateListCell.swift in Sources */,
0445E6AF2BE9CFF6003C52F9 /* YHAppVersionForceUpdateView.swift in Sources */, 0445E6AF2BE9CFF6003C52F9 /* YHAppVersionForceUpdateView.swift in Sources */,
040AE9882CEB6DAC00310241 /* YHWorkExperiencePositionModel.swift in Sources */,
04213B272C48C95E00797900 /* YHHomeIdentityCell.swift in Sources */, 04213B272C48C95E00797900 /* YHHomeIdentityCell.swift in Sources */,
041892262C91BDF500B9FB94 /* YHResignDocumentHeaderCell.swift in Sources */, 041892262C91BDF500B9FB94 /* YHResignDocumentHeaderCell.swift in Sources */,
0449EEE92C8EEB1E00A397FD /* YHResinMaterialManageContainerVC.swift in Sources */, 0449EEE92C8EEB1E00A397FD /* YHResinMaterialManageContainerVC.swift in Sources */,
...@@ -6178,6 +6194,7 @@ ...@@ -6178,6 +6194,7 @@
048787D92BCF68530036E221 /* YHProgressView.swift in Sources */, 048787D92BCF68530036E221 /* YHProgressView.swift in Sources */,
04256DEE2C73338200A37BA4 /* YHGrabingNumberListCell.swift in Sources */, 04256DEE2C73338200A37BA4 /* YHGrabingNumberListCell.swift in Sources */,
047F3DF02CE88380001B2A6D /* YHMaterialListCell.swift in Sources */, 047F3DF02CE88380001B2A6D /* YHMaterialListCell.swift in Sources */,
04B401F02CEB0C78005C61A9 /* YHIncomeRecordViewModel.swift in Sources */,
04B401E62CE83C74005C61A9 /* YHIncomeRemarkCell.swift in Sources */, 04B401E62CE83C74005C61A9 /* YHIncomeRemarkCell.swift in Sources */,
045EEEEC2B9F171A0022A143 /* YHBrotherInfoVC.swift in Sources */, 045EEEEC2B9F171A0022A143 /* YHBrotherInfoVC.swift in Sources */,
0477E17A2BA41C7E00436346 /* YHCertificateModel.swift in Sources */, 0477E17A2BA41C7E00436346 /* YHCertificateModel.swift in Sources */,
...@@ -6282,6 +6299,7 @@ ...@@ -6282,6 +6299,7 @@
045EEE882B9F171A0022A143 /* YHPreviewAcademicAndProfessionalQualificationViewController.swift in Sources */, 045EEE882B9F171A0022A143 /* YHPreviewAcademicAndProfessionalQualificationViewController.swift in Sources */,
0435FA7F2BA178C100024EAE /* YHCommonAlertView.swift in Sources */, 0435FA7F2BA178C100024EAE /* YHCommonAlertView.swift in Sources */,
A5ACE9382B4564F7002C94D2 /* UIApplication+Extension.swift in Sources */, A5ACE9382B4564F7002C94D2 /* UIApplication+Extension.swift in Sources */,
04B401F22CEB19C1005C61A9 /* YHIncomeRecordCompleteModel.swift in Sources */,
0468D42B2B55019900CFB916 /* YHAnalytics.swift in Sources */, 0468D42B2B55019900CFB916 /* YHAnalytics.swift in Sources */,
04912F842CB7D14D00CC3105 /* YHResignScheduleLineCollectCell.swift in Sources */, 04912F842CB7D14D00CC3105 /* YHResignScheduleLineCollectCell.swift in Sources */,
0445E6B12BE9E15C003C52F9 /* YHFindAppNewVersionView.swift in Sources */, 0445E6B12BE9E15C003C52F9 /* YHFindAppNewVersionView.swift in Sources */,
...@@ -6466,6 +6484,7 @@ ...@@ -6466,6 +6484,7 @@
A554A5122B99715000EA5973 /* YHConstantArrayData.swift in Sources */, A554A5122B99715000EA5973 /* YHConstantArrayData.swift in Sources */,
045EEE962B9F171A0022A143 /* YHPreviewInfoCertificatePictureItemsView.swift in Sources */, 045EEE962B9F171A0022A143 /* YHPreviewInfoCertificatePictureItemsView.swift in Sources */,
044EE2362C92916600A2FE3A /* YHResignCertificateListViewController.swift in Sources */, 044EE2362C92916600A2FE3A /* YHResignCertificateListViewController.swift in Sources */,
04B401F62CEB239C005C61A9 /* YHIncomeRecordUtilType.swift in Sources */,
04F243412C9AFBAB00DF2C74 /* YHHKRecordItemDetailType.swift in Sources */, 04F243412C9AFBAB00DF2C74 /* YHHKRecordItemDetailType.swift in Sources */,
04256DDE2C72DA3B00A37BA4 /* YHCertificateAppointViewController.swift in Sources */, 04256DDE2C72DA3B00A37BA4 /* YHCertificateAppointViewController.swift in Sources */,
A592FE912BA6CC010062FACA /* YHCertificateEntryHeadView.swift in Sources */, A592FE912BA6CC010062FACA /* YHCertificateEntryHeadView.swift in Sources */,
...@@ -6520,6 +6539,7 @@ ...@@ -6520,6 +6539,7 @@
04912F942CB921C300CC3105 /* YHResignAppointContainerViewController.swift in Sources */, 04912F942CB921C300CC3105 /* YHResignAppointContainerViewController.swift in Sources */,
045EEE972B9F171A0022A143 /* YHPreviewInfoWorkExpView.swift in Sources */, 045EEE972B9F171A0022A143 /* YHPreviewInfoWorkExpView.swift in Sources */,
04B401EC2CE84CBD005C61A9 /* YHIncomeTypePopViewSelectCell.swift in Sources */, 04B401EC2CE84CBD005C61A9 /* YHIncomeTypePopViewSelectCell.swift in Sources */,
04B401F42CEB1C51005C61A9 /* YHIncomeCompanyDetailModel.swift in Sources */,
044BACC72BCFA58E00184C64 /* YHNoDataTipsView.swift in Sources */, 044BACC72BCFA58E00184C64 /* YHNoDataTipsView.swift in Sources */,
04D5C5662B8ED92600190021 /* YHBaseModel.swift in Sources */, 04D5C5662B8ED92600190021 /* YHBaseModel.swift in Sources */,
A5F8AC082B9F414000A21EFA /* YHCustomTextView.swift in Sources */, A5F8AC082B9F414000A21EFA /* YHCustomTextView.swift in Sources */,
......
...@@ -13,13 +13,16 @@ import UIKit ...@@ -13,13 +13,16 @@ import UIKit
class YHIncomeRecordViewController: YHBaseViewController { class YHIncomeRecordViewController: YHBaseViewController {
enum TableRow { enum TableRow {
case incomeSummary(_ isEditing: Bool = false, _ isEditEnable: Bool = false) case incomeSummary(_ isEditing: Bool = false, _ isEditEnable: Bool = false)
case incomeItem(_ isEditState: Bool = false, _ company: String, _ money: String, _ timeStr: String) case incomeItem(_ isEditState: Bool = false, _ company: String, _ money: String, _ timeStr: String, _ incomeId: Int)
case totalIncome(_ money: ASAttributedString) case totalIncome(_ money: ASAttributedString)
case consentForHKTravel(_ title: String, _ detail: ASAttributedString, _ question: String, _ isSelectSureBtn: Bool = true) case consentForHKTravel(_ title: String, _ detail: ASAttributedString, _ question: String, _ isSelectSureBtn: Bool = true)
} }
private lazy var datas: [[TableRow]] = [] private lazy var datas: [[TableRow]] = []
private lazy var viewModel = YHIncomeRecordViewModel()
private var incomeModel = YHIncomeRecordCompleteModel()
private lazy var saveButton: UIButton = { private lazy var saveButton: UIButton = {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 15) button.titleLabel?.font = UIFont.PFSC_M(ofSize: 15)
...@@ -76,11 +79,21 @@ class YHIncomeRecordViewController: YHBaseViewController { ...@@ -76,11 +79,21 @@ class YHIncomeRecordViewController: YHBaseViewController {
view.keyboardDismissMode = .onDrag view.keyboardDismissMode = .onDrag
return view return view
}() }()
private let orderId: Int
init(orderId: Int) {
self.orderId = orderId
super.init(nibName: nil, bundle: nil)
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
setupUI() setupUI()
setupData() requestData(isNeedLoading: true)
} }
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
...@@ -96,11 +109,11 @@ class YHIncomeRecordViewController: YHBaseViewController { ...@@ -96,11 +109,11 @@ class YHIncomeRecordViewController: YHBaseViewController {
extension YHIncomeRecordViewController { extension YHIncomeRecordViewController {
@objc private func clickSaveButton() { @objc private func clickSaveButton() {
// updateIncome(.save)
} }
@objc private func clickSubmitButton() { @objc private func clickSubmitButton() {
// updateIncome(.submit)
} }
private func setupUI() { private func setupUI() {
...@@ -145,12 +158,36 @@ extension YHIncomeRecordViewController { ...@@ -145,12 +158,36 @@ extension YHIncomeRecordViewController {
private func setupData() { private func setupData() {
let detail: ASAttributedString = .init(string: "备注:全年收入是指应课税(应纳所得税)的就业或业务收入,包括工资薪金、津贴、股票期权及从其拥有的公司所得的利润。由个人投资所产生的收入不会计算在内。", .font(UIFont.PFSC_R(ofSize: 13)), .foreground(UIColor(hexString: "#8993A2") ?? .gray)) let detail: ASAttributedString = .init(string: "备注:全年收入是指应课税(应纳所得税)的就业或业务收入,包括工资薪金、津贴、股票期权及从其拥有的公司所得的利润。由个人投资所产生的收入不会计算在内。", .font(UIFont.PFSC_R(ofSize: 13)), .foreground(UIColor(hexString: "#8993A2") ?? .gray))
let firstSection: [TableRow] = [.consentForHKTravel("收入情况", detail, "您在前一年,全年收入是否达港币100万元或以上", true)] let firstSection: [TableRow] = [.consentForHKTravel("收入情况", detail, "您在前一年,全年收入是否达港币100万元或以上", incomeModel.income_over_100 == YHIncomeOver100.true.rawValue)]
let totalMoney: ASAttributedString = .init(string: "约 ", .font(.PFSC_R(ofSize: 14))) + .init(string: "1,351,517", .font(UIFont(name: "DINAlternate-Bold", size: 20) ?? UIFont.systemFont(ofSize: 20))) + .init(string: " 港币", .font(.PFSC_R(ofSize: 14))) guard incomeModel.income_over_100 == YHIncomeOver100.true.rawValue else {
let secondSection: [TableRow] = [.incomeSummary(false, false), .incomeItem(false, "华为有限公司", "约1,234,234港币", "已填写"), .incomeItem(false, "腾讯有限公司", "约1,234,234港币", "有5项未填写"), .totalIncome(totalMoney)] datas = [firstSection]
tableView.reloadData()
return
}
let hkdFormatter = currencyFormat("")
var money: Double = 0
var secondSection: [TableRow] = [.incomeSummary(false, false)]
incomeModel.list.forEach { companyModel in
money += companyModel.income_money
let moneyStr = "约" + (hkdFormatter.string(from: NSNumber(value: companyModel.income_money)) ?? "0") + "港币"
let timeStr: String = companyModel.fill_status ? "已填写" : "有\(companyModel.unfilled_count)项未填写"
let incomeItem: TableRow = .incomeItem(false, companyModel.company_name, moneyStr, timeStr, companyModel.income_id)
secondSection.append(incomeItem)
}
let totalNum = hkdFormatter.string(from: NSNumber(value: money)) ?? "0"
let totalMoney: ASAttributedString = .init(string: "约 ", .font(.PFSC_R(ofSize: 14))) + .init(string: totalNum, .font(UIFont(name: "DINAlternate-Bold", size: 20) ?? UIFont.systemFont(ofSize: 20))) + .init(string: " 港币", .font(.PFSC_R(ofSize: 14)))
secondSection.append(.totalIncome(totalMoney))
datas = [firstSection, secondSection] datas = [firstSection, secondSection]
tableView.reloadData() tableView.reloadData()
} }
private func currencyFormat(_ currencySymbol: String) -> NumberFormatter {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencySymbol = currencySymbol
formatter.maximumFractionDigits = 0
return formatter
}
} }
extension YHIncomeRecordViewController: UITableViewDelegate, UITableViewDataSource { extension YHIncomeRecordViewController: UITableViewDelegate, UITableViewDataSource {
...@@ -182,7 +219,7 @@ extension YHIncomeRecordViewController: UITableViewDelegate, UITableViewDataSour ...@@ -182,7 +219,7 @@ extension YHIncomeRecordViewController: UITableViewDelegate, UITableViewDataSour
cell.setupCellInfo(isEditState, isEditEnable, showRightButton: false) cell.setupCellInfo(isEditState, isEditEnable, showRightButton: false)
return cell return cell
} }
case let .incomeItem(isEditState, company, money, timeStr): case let .incomeItem(isEditState, company, money, timeStr, _):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeRecordItemCell.cellReuseIdentifier) as? YHIncomeRecordItemCell { if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeRecordItemCell.cellReuseIdentifier) as? YHIncomeRecordItemCell {
cell.setupCellInfo(title: company, detail: money, rightText: timeStr, isEditing: isEditState, showBottomLine: false) cell.setupCellInfo(title: company, detail: money, rightText: timeStr, isEditing: isEditState, showBottomLine: false)
return cell return cell
...@@ -190,16 +227,24 @@ extension YHIncomeRecordViewController: UITableViewDelegate, UITableViewDataSour ...@@ -190,16 +227,24 @@ extension YHIncomeRecordViewController: UITableViewDelegate, UITableViewDataSour
case let .totalIncome(money): case let .totalIncome(money):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHTotalIncomeCell.cellReuseIdentifier) as? YHTotalIncomeCell { if let cell = tableView.dequeueReusableCell(withIdentifier: YHTotalIncomeCell.cellReuseIdentifier) as? YHTotalIncomeCell {
cell.setupCellInfo(detail: money) cell.setupCellInfo(detail: money)
cell.didClickInfoButton = { cell.didClickInfoButton = { [weak self] in
YHHUD.flash(message: "注:按1港币≈0.92人民币计算,实际金额按递交时入境处给出的汇率为准") guard let self = self else {
return
}
let rate = self.incomeModel.rate > 0 ? self.incomeModel.rate : 0.92
YHHUD.flash(message: "注:按1港币≈\(rate)人民币计算,实际金额按递交时入境处给出的汇率为准")
} }
return cell return cell
} }
case let .consentForHKTravel(title, detail, question, isSelectSureBtn): case let .consentForHKTravel(title, detail, question, isSelectSureBtn):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHInfoConsentForHKTravelCell.cellReuseIdentifier) as? YHInfoConsentForHKTravelCell { if let cell = tableView.dequeueReusableCell(withIdentifier: YHInfoConsentForHKTravelCell.cellReuseIdentifier) as? YHInfoConsentForHKTravelCell {
cell.setupCellInfo(title: title, detail: detail, question: question) cell.setupCellInfo(title: title, detail: detail, question: question)
cell.didSelectSureButton = { _ in cell.didSelectSureButton = { [weak self] selected in
// guard let self = self else {
return
}
self.incomeModel.income_over_100 = selected ? YHIncomeOver100.true.rawValue : YHIncomeOver100.false.rawValue
self.setupData()
} }
cell.selectedSureButton = isSelectSureBtn cell.selectedSureButton = isSelectSureBtn
return cell return cell
...@@ -231,9 +276,61 @@ extension YHIncomeRecordViewController: UITableViewDelegate, UITableViewDataSour ...@@ -231,9 +276,61 @@ extension YHIncomeRecordViewController: UITableViewDelegate, UITableViewDataSour
return return
} }
let tableRow = sectionArr[indexPath.row] let tableRow = sectionArr[indexPath.row]
if case .incomeItem = tableRow { if case let .incomeItem(_, _, _, _, incomeId) = tableRow {
let ctl = YHIncomeRecordWorkExperienceViewController() let ctl = YHIncomeRecordWorkExperienceViewController(incomeId: incomeId)
ctl.submitSuccess = { [weak self] in
self?.requestData(isNeedLoading: true)
}
navigationController?.pushViewController(ctl, animated: true) navigationController?.pushViewController(ctl, animated: true)
} }
} }
} }
extension YHIncomeRecordViewController {
private func requestData(isNeedLoading: Bool = false) {
if isNeedLoading {
YHHUD.show(.progress(message: "加载中..."))
}
viewModel.getIncomeList(orderId: orderId) { [weak self] incomeModel, error in
guard let self = self else {
return
}
if isNeedLoading {
YHHUD.hide()
}
guard let incomeModel = incomeModel else {
printLog("YHIncomeRecordViewController: 请求失败")
if let errorMsg = error?.errorMsg, errorMsg.count > 0 {
YHHUD.flash(message: errorMsg)
}
self.datas = []
self.tableView.reloadData()
return
}
self.incomeModel = incomeModel
self.setupData()
}
}
private func updateIncome(_ type: YHIncomeRecordUpdateType) {
let incomeOver100: YHIncomeOver100 = YHIncomeOver100(rawValue: incomeModel.income_over_100) ?? .true
let msg = type == .save ? "保存中..." : "提交中..."
YHHUD.show(.progress(message: msg))
viewModel.incomeUpdate(orderId: orderId, incomeOver100: incomeOver100, type: type) { [weak self] success, error in
guard let self = self else {
return
}
YHHUD.hide()
if success {
let msg = type == .save ? "保存成功" : "提交成功"
YHHUD.flash(message: msg)
if type == .submit {
self.navigationController?.popViewController(animated: true)
}
} else if let errorMsg = error?.errorMsg, errorMsg.count > 0 {
YHHUD.flash(message: errorMsg)
}
}
}
}
...@@ -14,17 +14,22 @@ class YHIncomeRecordWorkExperienceViewController: YHBaseViewController { ...@@ -14,17 +14,22 @@ class YHIncomeRecordWorkExperienceViewController: YHBaseViewController {
case header(_ title: String) case header(_ title: String)
case incomeFrom(_ title: String, _ detail: String) case incomeFrom(_ title: String, _ detail: String)
case incomeTypeSelect(_ title: String, _ detail: String, _ isSelectedOne: Bool) case incomeTypeSelect(_ title: String, _ detail: String, _ isSelectedOne: Bool)
case incomeTypes(_ types: [String]) case incomeTypes(_ types: [YHIncomeType])
case inputMoney(_ title: String, _ detail: String?, _ inputStr: String?, _ showBottomLine: Bool, _ showStar: Bool) case inputMoney(_ title: String, _ detail: String?, _ inputStr: String?, _ showBottomLine: Bool, _ showStar: Bool, _ isIncomeMoney: Bool)
case inputRemark(_ detail: String) case inputRemark(_ detail: String)
case documentComfirm(_ title: String, _ question: String, _ isSelectedSure: Bool, _ docs: [String]) case documentComfirm(_ title: String, _ question: String, _ isSelectedSure: Bool, _ docs: [String])
} }
private lazy var datas: [[TableRow]] = [] private lazy var datas: [[TableRow]] = []
private var selectedTypes: [String] = [] private var selectedTypes: [YHIncomeType] = []
private let currencyRate = 0.92 private let currencyRate = 0.92
private var isSaving = false
var submitSuccess: (() -> Void)?
private lazy var viewModel = YHIncomeRecordViewModel()
private var companyModel = YHIncomeCompanyDetailModel()
private lazy var submitButton: UIButton = { private lazy var submitButton: UIButton = {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
...@@ -71,11 +76,21 @@ class YHIncomeRecordWorkExperienceViewController: YHBaseViewController { ...@@ -71,11 +76,21 @@ class YHIncomeRecordWorkExperienceViewController: YHBaseViewController {
view.keyboardDismissMode = .onDrag view.keyboardDismissMode = .onDrag
return view return view
}() }()
private let incomeId: Int
init(incomeId: Int) {
self.incomeId = incomeId
super.init(nibName: nil, bundle: nil)
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
setupUI() setupUI()
setupData() requestData(isNeedLoading: true)
} }
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
...@@ -87,11 +102,33 @@ class YHIncomeRecordWorkExperienceViewController: YHBaseViewController { ...@@ -87,11 +102,33 @@ class YHIncomeRecordWorkExperienceViewController: YHBaseViewController {
super.viewWillDisappear(animated) super.viewWillDisappear(animated)
IQKeyboardManager.shared.enable = false IQKeyboardManager.shared.enable = false
} }
override func backItemClick(_ sender: Any) {
guard !isSaving else {
return
}
isSaving = true
submitIncome(.save) { [weak self] _ in
self?.isSaving = false
}
}
/// 是否可以返回,包括点击返回和手势返回,默认YES
override func navigationShouldPop() -> Bool {
guard !isSaving else {
return false
}
isSaving = true
submitIncome(.save) { [weak self] _ in
self?.isSaving = false
}
return false
}
} }
extension YHIncomeRecordWorkExperienceViewController { extension YHIncomeRecordWorkExperienceViewController {
@objc private func clickSubmitButton() { @objc private func clickSubmitButton() {
// submitIncome(.submit, complete: { _ in })
} }
private func setupUI() { private func setupUI() {
...@@ -127,15 +164,32 @@ extension YHIncomeRecordWorkExperienceViewController { ...@@ -127,15 +164,32 @@ extension YHIncomeRecordWorkExperienceViewController {
} }
private func setupData() { private func setupData() {
selectedTypes = ["工资薪金所得及全年一次性奖金", "个体工商户/合伙企业/独资企业经营所得收入", "其他境外公司收入(持股50%及以上)"] selectedTypes = companyModel.income_type.compactMap {
let firstSection: [TableRow] = [.header("收入信息"), .incomeFrom("收入来源公司", "华为科技有限公司"), .incomeTypeSelect("收入类型(多选)", "请选择", selectedTypes.count > 0), .incomeTypes(selectedTypes), .inputMoney("公司营业额(近一年)", "约10,869,564港币", "¥9,999,999", true, false), .inputMoney("收入金额", "约10,869,564港币", "¥9,999,999", false, true), .inputRemark("注:按1港币≈0.92人民币计算,实际金额按递交时入境处给出的汇率为准")] YHIncomeType(rawValue: $0)
}
let secondSection: [TableRow] = [.documentComfirm("证件提供确认", "您是否可以提供以下所有证明文件", true, ["验资报告", "审计报告", "绝对实益拥有人声明书", "国家企业信用信息公示系统报告", "企业所得税月(季)度预缴纳税申报表(A类)", "企业所得税完税证明", "企业所得税年度纳税申报表(A类)"])] var firstSection: [TableRow] = [.header("收入信息"), .incomeFrom("收入来源公司", companyModel.company_name), .incomeTypeSelect("收入类型(多选)", "请选择", selectedTypes.count > 0)]
if selectedTypes.count > 0 {
firstSection.append(.incomeTypes(selectedTypes))
}
let hkdFmt = currencyFormat("")
let rmbFmt = currencyFormat("¥")
let rate = companyModel.rate > 0 ? companyModel.rate : 0.92
if selectedTypes.contains(.incomeOfMainland) || selectedTypes.contains(.incomeOfHKCompanies) || selectedTypes.contains(.incomeOfMacauCompanies) || selectedTypes.contains(.incomeOfOtherOverseasCompanies) {
firstSection.append(.inputMoney("公司营业额(近一年)", "约\(hkdFmt.string(from: NSNumber(value: companyModel.corporate_turnover / rate)) ?? "0")港币", (rmbFmt.string(from: NSNumber(value: companyModel.corporate_turnover)) ?? "0"), true, false, false))
}
firstSection.append(.inputMoney("收入金额", "约\(hkdFmt.string(from: NSNumber(value: companyModel.income_money / rate)) ?? "0")港币", (rmbFmt.string(from: NSNumber(value: companyModel.income_money)) ?? "0"), false, true, true))
firstSection.append(.inputRemark("注:按1港币≈\(rate)人民币计算,实际金额按递交时入境处给出的汇率为准"))
let set = Set(selectedTypes.map { $0.docsArray() }.flatMap{ $0 })
var arr = Array(set)
if set.count == 0 {
arr = YHIncomeType.defaultDocs()
}
let secondSection: [TableRow] = [.documentComfirm("证件提供确认", "您是否可以提供以下所有证明文件", companyModel.has_all_file == YHIncomeRecordHasAllFile.true.rawValue, arr)]
datas = [firstSection, secondSection] datas = [firstSection, secondSection]
tableView.reloadData() tableView.reloadData()
} }
private func showSelectIncomeTypePopVC(selectedTypes: [String]) { private func showSelectIncomeTypePopVC(selectedTypes: [YHIncomeType]) {
let ctl = YHIncomeTypeSelectViewController(selectedTypes: selectedTypes) let ctl = YHIncomeTypeSelectViewController(selectedTypes: selectedTypes)
let bpc = YHBottomPresentationController(presentedViewController: ctl, presenting: self) let bpc = YHBottomPresentationController(presentedViewController: ctl, presenting: self)
bpc.customRadius = 8.0 bpc.customRadius = 8.0
...@@ -151,8 +205,10 @@ extension YHIncomeRecordWorkExperienceViewController { ...@@ -151,8 +205,10 @@ extension YHIncomeRecordWorkExperienceViewController {
} }
private func updateSelectTypes() { private func updateSelectTypes() {
companyModel.income_type = selectedTypes.map { $0.rawValue }
var incomeTypesIndexPath: IndexPath? var incomeTypesIndexPath: IndexPath?
var incomeTypeSelectIndexPath: IndexPath? var incomeTypeSelectIndexPath: IndexPath?
var docIndexPath: IndexPath?
datas = datas.enumerated().map { section, sectionArr in datas = datas.enumerated().map { section, sectionArr in
sectionArr.enumerated().map { row, tableRow in sectionArr.enumerated().map { row, tableRow in
switch tableRow { switch tableRow {
...@@ -162,6 +218,14 @@ extension YHIncomeRecordWorkExperienceViewController { ...@@ -162,6 +218,14 @@ extension YHIncomeRecordWorkExperienceViewController {
case let .incomeTypeSelect(title, detail, _): case let .incomeTypeSelect(title, detail, _):
incomeTypeSelectIndexPath = IndexPath(row: row, section: section) incomeTypeSelectIndexPath = IndexPath(row: row, section: section)
return .incomeTypeSelect(title, detail, selectedTypes.count > 0) return .incomeTypeSelect(title, detail, selectedTypes.count > 0)
case let .documentComfirm(title, question, isSelectSure, docs):
docIndexPath = IndexPath(row: row, section: section)
let set = Set(selectedTypes.map { $0.docsArray() }.flatMap{ $0 })
if set.count > 0 {
return .documentComfirm(title, question, isSelectSure, Array(set))
} else {
return .documentComfirm(title, question, isSelectSure, YHIncomeType.defaultDocs())
}
default: default:
return tableRow return tableRow
} }
...@@ -184,9 +248,16 @@ extension YHIncomeRecordWorkExperienceViewController { ...@@ -184,9 +248,16 @@ extension YHIncomeRecordWorkExperienceViewController {
sectionArr.remove(at: incomeTypesIndexPath.row) sectionArr.remove(at: incomeTypesIndexPath.row)
datas[incomeTypesIndexPath.section] = sectionArr datas[incomeTypesIndexPath.section] = sectionArr
} }
tableView.performBatchUpdates { [weak tableView] in if let secondSection = docIndexPath?.section {
tableView?.reloadSections(IndexSet(integer: incomeTypeSelectIndexPath.section), with: .automatic) tableView.performBatchUpdates { [weak tableView] in
tableView?.reloadSections(IndexSet(arrayLiteral: incomeTypeSelectIndexPath.section, secondSection), with: .automatic)
}
} else {
tableView.performBatchUpdates { [weak tableView] in
tableView?.reloadSections(IndexSet(integer: incomeTypeSelectIndexPath.section), with: .automatic)
}
} }
} }
private func currencyFormat(_ currencySymbol: String) -> NumberFormatter { private func currencyFormat(_ currencySymbol: String) -> NumberFormatter {
...@@ -238,7 +309,7 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab ...@@ -238,7 +309,7 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab
} }
case let .incomeTypes(types): case let .incomeTypes(types):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeTypesCell.cellReuseIdentifier) as? YHIncomeTypesCell { if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeTypesCell.cellReuseIdentifier) as? YHIncomeTypesCell {
cell.setupCellInfo(types: types) cell.setupCellInfo(types: types.map { $0.nameString() })
cell.didClickTypeView = { [weak self] index in cell.didClickTypeView = { [weak self] index in
guard let self = self else { guard let self = self else {
return return
...@@ -248,7 +319,7 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab ...@@ -248,7 +319,7 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab
} }
return cell return cell
} }
case let .inputMoney(title, detail, inputStr, showBottomLine, showStar): case let .inputMoney(title, detail, inputStr, showBottomLine, showStar, isIncomeMoney):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeInputMoneyCell.cellReuseIdentifier) as? YHIncomeInputMoneyCell { if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeInputMoneyCell.cellReuseIdentifier) as? YHIncomeInputMoneyCell {
cell.setupCellInfo(title: title, detail: detail, inputValue: inputStr, showBottomLine: showBottomLine, showStarIcon: showStar) cell.setupCellInfo(title: title, detail: detail, inputValue: inputStr, showBottomLine: showBottomLine, showStarIcon: showStar)
cell.didBeginEditing = { textField in cell.didBeginEditing = { textField in
...@@ -268,6 +339,12 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab ...@@ -268,6 +339,12 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab
let number = Double(text) ?? 0 let number = Double(text) ?? 0
// 格式化为带货币符号和千分位 // 格式化为带货币符号和千分位
let detail = number / self.currencyRate let detail = number / self.currencyRate
if isIncomeMoney {
self.companyModel.income_money = number
} else {
self.companyModel.corporate_turnover = number
}
let rmbFormatter = self.currencyFormat("¥") let rmbFormatter = self.currencyFormat("¥")
let hkdFormatter = self.currencyFormat("") let hkdFormatter = self.currencyFormat("")
if let formattedString = rmbFormatter.string(from: NSNumber(value: number)) { if let formattedString = rmbFormatter.string(from: NSNumber(value: number)) {
...@@ -277,8 +354,8 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab ...@@ -277,8 +354,8 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab
let sectionArr = self.datas[indexPath.section] let sectionArr = self.datas[indexPath.section]
if sectionArr.count > indexPath.row { if sectionArr.count > indexPath.row {
let currentRow = sectionArr[indexPath.row] let currentRow = sectionArr[indexPath.row]
if case let .inputMoney(title, detail, inputStr, showBottomLine, showStar) = currentRow { if case let .inputMoney(title, _, _, showBottomLine, showStar, isIncomeMoney) = currentRow {
self.datas[indexPath.section][indexPath.row] = .inputMoney(title, detailStr, formattedString, showBottomLine, showStar) self.datas[indexPath.section][indexPath.row] = .inputMoney(title, detailStr, formattedString, showBottomLine, showStar, isIncomeMoney)
self.tableView.reloadRows(at: [indexPath], with: .automatic) self.tableView.reloadRows(at: [indexPath], with: .automatic)
} }
} }
...@@ -296,6 +373,17 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab ...@@ -296,6 +373,17 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeDocumentationConfirmationCell.cellReuseIdentifier) as? YHIncomeDocumentationConfirmationCell { if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeDocumentationConfirmationCell.cellReuseIdentifier) as? YHIncomeDocumentationConfirmationCell {
cell.setupCellInfo(title: title, question: question, documents: docs) cell.setupCellInfo(title: title, question: question, documents: docs)
cell.selectedSureButton = isSelectedSure cell.selectedSureButton = isSelectedSure
cell.didSelectSureButton = { [weak self] flag in
guard let self = self else {
return
}
if flag {
self.companyModel.has_all_file = YHIncomeRecordHasAllFile.true.rawValue
} else {
self.companyModel.has_all_file = YHIncomeRecordHasAllFile.false.rawValue
}
}
return cell return cell
} }
} }
...@@ -330,3 +418,59 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab ...@@ -330,3 +418,59 @@ extension YHIncomeRecordWorkExperienceViewController: UITableViewDelegate, UITab
} }
} }
} }
extension YHIncomeRecordWorkExperienceViewController {
private func requestData(isNeedLoading: Bool = false) {
if isNeedLoading {
YHHUD.show(.progress(message: "加载中..."))
}
viewModel.getIncomeDetail(incomeId: incomeId) { [weak self] companyModel, error in
guard let self = self else {
return
}
if isNeedLoading {
YHHUD.hide()
}
guard let companyModel = companyModel else {
printLog("YHIncomeRecordWorkExperienceViewController: 请求失败")
if let errorMsg = error?.errorMsg, errorMsg.count > 0 {
YHHUD.flash(message: errorMsg)
}
self.datas = []
self.tableView.reloadData()
return
}
self.companyModel = companyModel
self.setupData()
}
}
private func submitIncome(_ type: YHIncomeRecordUpdateType, complete: @escaping (Bool) -> Void) {
let msg = type == .save ? "保存中..." : "提交中..."
YHHUD.show(.progress(message: msg))
let hasFile: YHIncomeRecordHasAllFile = companyModel.has_all_file == YHIncomeRecordHasAllFile.true.rawValue ? .true : .false
viewModel.updateDetail(incomeId: incomeId, incomeMoney: companyModel.income_money, corporateTurnover: companyModel.corporate_turnover, incomeType: companyModel.income_type, hasAllFile: hasFile) { [weak self] success, error in
guard let self = self else {
complete(false)
return
}
YHHUD.hide()
complete(success)
if success {
let msg = type == .save ? "保存成功" : "提交成功"
YHHUD.flash(message: msg)
self.submitSuccess?()
self.navigationController?.popViewController(animated: true)
} else {
if let errorMsg = error?.errorMsg, errorMsg.count > 0 {
YHHUD.flash(message: errorMsg)
}
if type == .save {
self.navigationController?.popViewController(animated: true)
}
}
}
}
}
...@@ -66,23 +66,15 @@ class YHIncomeTypeSelectViewController: YHBaseViewController { ...@@ -66,23 +66,15 @@ class YHIncomeTypeSelectViewController: YHBaseViewController {
}() }()
private lazy var datas: [YHIncomeTypeSelectModel] = { private lazy var datas: [YHIncomeTypeSelectModel] = {
["工资薪金所得及全年一次性奖金", YHIncomeType.allCases.map {
"上市公司股票期权或股权收入", YHIncomeTypeSelectModel(type: $0, isSelected: false)
"持股公司分红收入",
"个体工商户/合伙企业/独资企业经营所得收入",
"股权转让收入",
"内地公司收入(持股50%及以上)",
"香港公司收入(持股50%及以上)",
"澳门公司收入(持股50%及以上)",
"其他境外公司收入(持股50%及以上)"].map {
YHIncomeTypeSelectModel(title: $0, isSelected: false)
} }
}() }()
var sureButtonEvent: (([String]) -> Void)? var sureButtonEvent: (([YHIncomeType]) -> Void)?
private var selectedTypes: [String] = [] private var selectedTypes: [YHIncomeType] = []
init(selectedTypes: [String]) { init(selectedTypes: [YHIncomeType]) {
self.selectedTypes = selectedTypes self.selectedTypes = selectedTypes
super.init(nibName: nil, bundle: nil) super.init(nibName: nil, bundle: nil)
} }
...@@ -98,7 +90,7 @@ class YHIncomeTypeSelectViewController: YHBaseViewController { ...@@ -98,7 +90,7 @@ class YHIncomeTypeSelectViewController: YHBaseViewController {
} }
@objc private func clickSureButton() { @objc private func clickSureButton() {
sureButtonEvent?(selectedTypes) sureButtonEvent?(selectedTypes.sorted(by: { $0.rawValue < $1.rawValue }))
dismiss(animated: true) dismiss(animated: true)
} }
...@@ -162,7 +154,7 @@ class YHIncomeTypeSelectViewController: YHBaseViewController { ...@@ -162,7 +154,7 @@ class YHIncomeTypeSelectViewController: YHBaseViewController {
guard let self = self else { guard let self = self else {
return return
} }
if self.selectedTypes.contains(model.title) { if self.selectedTypes.contains(model.type) {
model.isSelected = true model.isSelected = true
} }
} }
...@@ -187,7 +179,7 @@ extension YHIncomeTypeSelectViewController: UITableViewDelegate, UITableViewData ...@@ -187,7 +179,7 @@ extension YHIncomeTypeSelectViewController: UITableViewDelegate, UITableViewData
} }
let model = datas[indexPath.section] let model = datas[indexPath.section]
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeTypePopViewSelectCell.cellReuseIdentifier) as? YHIncomeTypePopViewSelectCell { if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeTypePopViewSelectCell.cellReuseIdentifier) as? YHIncomeTypePopViewSelectCell {
cell.setupCellInfo(title: model.title, isSelected: model.isSelected) cell.setupCellInfo(title: model.type.nameString(), isSelected: model.isSelected)
return cell return cell
} }
return UITableViewCell() return UITableViewCell()
...@@ -221,12 +213,12 @@ extension YHIncomeTypeSelectViewController: UITableViewDelegate, UITableViewData ...@@ -221,12 +213,12 @@ extension YHIncomeTypeSelectViewController: UITableViewDelegate, UITableViewData
let model = datas[indexPath.section] let model = datas[indexPath.section]
model.isSelected.toggle() model.isSelected.toggle()
if model.isSelected { if model.isSelected {
if !selectedTypes.contains(model.title) { if !selectedTypes.contains(model.type) {
selectedTypes.append(model.title) selectedTypes.append(model.type)
} }
} else { } else {
if let index = selectedTypes.firstIndex(where: { title in if let index = selectedTypes.firstIndex(where: { type in
title == model.title type == model.type
}) { }) {
selectedTypes.remove(at: index) selectedTypes.remove(at: index)
} }
......
//
// YHIncomeCompanyDetailModel.swift
// galaxy
//
// Created by alexzzw on 2024/11/18.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import Foundation
import SmartCodable
class YHIncomeCompanyDetailModel: SmartCodable {
var company_name: String = ""
var income_money: Double = 0
var corporate_turnover: Double = 0
var income_type: [Int] = []
var template_id: [Int] = []
var has_all_file: Int = 0
var rate: Double = 0
required init() {
}
}
//
// YHIncomeRecordCompleteModel.swift
// galaxy
//
// Created by alexzzw on 2024/11/18.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import Foundation
import SmartCodable
class YHIncomeRecordCompleteModel: SmartCodable {
var income_over_100: Int = -1
var rate: Double = 0
var list: [YHIncomeRecordListModel] = []
required init() {
}
}
class YHIncomeRecordListModel: SmartCodable {
var income_id: Int = 0
var company_name: String = ""
var income_money: Double = 0
var fill_status: Bool = false
var unfilled_count: Int = 0
required init() {
}
}
//
// YHIncomeRecordUtilType.swift
// galaxy
//
// Created by alexzzw on 2024/11/18.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
enum YHIncomeRecordHasAllFile: Int {
case unknown = 0
case `true` = 1
case `false` = 2
}
enum YHIncomeOver100: Int {
case `true` = 1
case `false` = 2
}
enum YHIncomeRecordUpdateType: Int {
case save = 1
case submit = 2
}
//
// YHIncomeType.swift
// galaxy
//
// Created by alexzzw on 2024/11/18.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import Foundation
enum YHIncomeType: Int, CaseIterable {
case incomeOfMainland = 1
case incomeOfHKCompanies = 2
case incomeOfMacauCompanies = 3
case stockOrEquityIncome = 4
case salaryIncomeAndBonus = 5
case dividendIncome = 6
case equityTransferIncome = 7
case businessIncome = 8
case incomeOfOtherOverseasCompanies = 9
static func defaultDocs() -> [String] {
return ["纳税记录",
"纳税清单",
"工作证明"]
}
func nameString() -> String {
switch self {
case .incomeOfMainland:
return "内地公司收入(持股50%及以上)"
case .incomeOfHKCompanies:
return "香港公司收入(持股50%及以上)"
case .incomeOfMacauCompanies:
return "澳门公司收入(持股50%及以上)"
case .stockOrEquityIncome:
return "上市公司股票期权或股权收入"
case .salaryIncomeAndBonus:
return "工资薪金所得及全年一次性奖金"
case .dividendIncome:
return "持股公司分红收入"
case .equityTransferIncome:
return "股权转让收入"
case .businessIncome:
return "个体工商户/合伙企业/独资企业经营所得收入"
case .incomeOfOtherOverseasCompanies:
return "其他境外公司收入(持股50%及以上"
}
}
func docsArray() -> [String] {
switch self {
case .incomeOfMainland:
return ["验资报告",
"审计报告",
"绝对实益拥有人声明书",
"企业所得税月(季)度预缴纳税申报表(A类)(前4个季度/前12个月)",
"企业所得税完税证明(表格式)",
"企业所得税年度纳税申报表(A类)(近一年度)"]
case .incomeOfHKCompanies:
return ["周年申报表",
"审计报告",
"利得税申请表",
"利得税缴纳通知书",
"缴税凭证",
"绝对实益拥有人声明书",
"工作签证",
"工作证明"]
case .incomeOfMacauCompanies:
return ["商业登记证明",
"审计报告",
"所得补充税B组──收益申报书(M1)",
"所得补充税—收益评定通知书(M5)",
"缴税凭证",
"绝对实益拥有人声明书",
"工作签证",
"工作证明"]
case .stockOrEquityIncome:
return ["纳税记录",
"纳税清单",
"股票或期权的发放证明(能看到个人的发放股数和每股价值)",
"工作证明"]
case .salaryIncomeAndBonus:
return ["纳税记录",
"纳税清单",
"工作证明"]
case .dividendIncome:
return ["纳税记录",
"纳税清单",
"持股证明",
"股东分红决议",
"分红入账记录(银行回单)",
"工作证明(持股公司开具)"]
case .equityTransferIncome:
return ["纳税记录",
"纳税清单",
"股权转让相关入账记录(银行回单)",
"股权转让协议",
"股权交割证明&股权变更登记表(显示公司股权占比更改)",
"完税证明(表格式)",
"工作证明"]
case .businessIncome:
return ["纳税记录",
"纳税清单",
"个人所得税经营所得纳税申报表(A表)(前4个季度/前12个月)",
"个人所得税经营所得纳税申报表(A表&B表)(最新年度)",
"个人所得税经营所得纳税申报表(C表)",
"工作证明"]
case .incomeOfOtherOverseasCompanies:
return ["财务报表",
"合法纳税及完税证明",
"公司所有权官方证明文件"]
}
}
}
...@@ -9,11 +9,11 @@ ...@@ -9,11 +9,11 @@
import UIKit import UIKit
class YHIncomeTypeSelectModel: NSObject { class YHIncomeTypeSelectModel: NSObject {
var title: String = ""
var isSelected: Bool = false var isSelected: Bool = false
var type: YHIncomeType = .businessIncome
init(title: String, isSelected: Bool) { init(type: YHIncomeType, isSelected: Bool) {
self.title = title self.type = type
self.isSelected = isSelected self.isSelected = isSelected
} }
......
...@@ -50,7 +50,8 @@ class YHIncomeRecordSummaryCell: YHResignDocumentCell { ...@@ -50,7 +50,8 @@ class YHIncomeRecordSummaryCell: YHResignDocumentCell {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
func setupCellInfo(_ isEditing: Bool, _ isEditEnable: Bool, showRightButton: Bool) { func setupCellInfo(_ isEditing: Bool, _ isEditEnable: Bool, showRightButton: Bool, showBottomLine: Bool = true) {
bottomLineView.isHidden = !showBottomLine
rightButton.isHidden = !showRightButton rightButton.isHidden = !showRightButton
rightButton.isEnabled = isEditEnable rightButton.isEnabled = isEditEnable
updateRightButtonState(isEditing) updateRightButtonState(isEditing)
...@@ -100,8 +101,8 @@ extension YHIncomeRecordSummaryCell { ...@@ -100,8 +101,8 @@ extension YHIncomeRecordSummaryCell {
bottomLineView.snp.makeConstraints { make in bottomLineView.snp.makeConstraints { make in
make.bottom.equalToSuperview() make.bottom.equalToSuperview()
make.left.equalToSuperview().offset(18) make.left.equalToSuperview()
make.right.equalToSuperview().offset(-18) make.right.equalToSuperview()
make.height.equalTo(0.5) make.height.equalTo(0.5)
make.top.equalTo(infoDetailLabel.snp.bottom).offset(16) make.top.equalTo(infoDetailLabel.snp.bottom).offset(16)
} }
......
...@@ -51,6 +51,8 @@ class YHIncomeTypesCell: YHResignDocumentCell { ...@@ -51,6 +51,8 @@ class YHIncomeTypesCell: YHResignDocumentCell {
return return
} }
let typeView = YHIncomeTypeView() let typeView = YHIncomeTypeView()
typeView.clipsToBounds = true
typeView.layer.cornerRadius = 3
typeView.setupInfo(title) typeView.setupInfo(title)
typeView.closeButtonEvent = { [weak self] in typeView.closeButtonEvent = { [weak self] in
guard let self = self else { guard let self = self else {
......
...@@ -95,7 +95,8 @@ class YHInfoConsentForHKTravelCell: YHResignDocumentCell { ...@@ -95,7 +95,8 @@ class YHInfoConsentForHKTravelCell: YHResignDocumentCell {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
func setupCellInfo(title: String, detail: ASAttributedString, question: String) { func setupCellInfo(title: String, detail: ASAttributedString, question: String, showBottomLine: Bool = false) {
bottomLineView.isHidden = !showBottomLine
infoTitleLabel.text = title infoTitleLabel.text = title
infoDetailLabel.attributed.text = detail infoDetailLabel.attributed.text = detail
infoQuestionLabel.text = question infoQuestionLabel.text = question
......
//
// YHIncomeRecordViewModel.swift
// galaxy
//
// Created by alexzzw on 2024/11/18.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeRecordViewModel: YHBaseViewModel {
func getIncomeList(orderId: Int, callback: @escaping (_ incomeModel: YHIncomeRecordCompleteModel?, _ error: YHErrorModel?) -> Void) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.IncomeRecord.incomeList
_ = YHNetRequest.getRequest(url: strUrl, params: ["order_id": orderId]) { json, _ in
// 1. json字符串 转 对象
printLog("model 是 ==> \(json)")
if json.code == 200 {
guard let dic = json.data?.peel as? [String: Any], let resultModel = YHIncomeRecordCompleteModel.deserialize(from: dic) else {
let err = YHErrorModel(errorCode: YHErrorCode.dictParseError.rawValue, errorMsg: YHErrorCode.dictParseError.description())
callback(nil, err)
return
}
callback(resultModel, nil)
} else {
let err = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg.isEmpty ? "" : json.msg)
callback(nil, err)
}
} failBlock: { err in
callback(nil, err)
}
}
func getIncomeDetail(incomeId: Int, callback: @escaping (_ companyDetail: YHIncomeCompanyDetailModel?, _ error: YHErrorModel?) -> Void) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.IncomeRecord.incomeDetail
_ = YHNetRequest.getRequest(url: strUrl, params: ["income_id": incomeId]) { json, _ in
// 1. json字符串 转 对象
printLog("model 是 ==> \(json)")
if json.code == 200 {
guard let dic = json.data?.peel as? [String: Any], let resultModel = YHIncomeCompanyDetailModel.deserialize(from: dic) else {
let err = YHErrorModel(errorCode: YHErrorCode.dictParseError.rawValue, errorMsg: YHErrorCode.dictParseError.description())
callback(nil, err)
return
}
callback(resultModel, nil)
} else {
let err = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg.isEmpty ? "" : json.msg)
callback(nil, err)
}
} failBlock: { err in
callback(nil, err)
}
}
func updateDetail(incomeId: Int, incomeMoney: Double, corporateTurnover: Double, incomeType: [Int], hasAllFile: YHIncomeRecordHasAllFile, callBackBlock: @escaping (_ success: Bool, _ error: YHErrorModel?) -> Void) {
let params: [String: Any] = ["income_id": incomeId,
"income_money": incomeMoney,
"corporate_turnover": corporateTurnover,
"income_type": incomeType,
"has_all_file": hasAllFile.rawValue]
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.IncomeRecord.updateDetail
_ = YHNetRequest.postRequest(url: strUrl, params: params) { json, _ in
// 1. json字符串 转 对象
printLog("model 是 ==> \(json)")
if json.code == 200 {
callBackBlock(true, nil)
} else {
let err = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg.isEmpty ? "" : json.msg)
callBackBlock(false, err)
}
} failBlock: { err in
callBackBlock(false, err)
}
}
func incomeUpdate(orderId: Int, incomeOver100: YHIncomeOver100, type: YHIncomeRecordUpdateType, callBackBlock: @escaping (_ success: Bool, _ error: YHErrorModel?) -> Void) {
let params: [String: Any] = ["order_id": orderId,
"income_over_100": incomeOver100.rawValue,
"type": type.rawValue]
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.IncomeRecord.incomeUpdate
_ = YHNetRequest.postRequest(url: strUrl, params: params) { json, _ in
// 1. json字符串 转 对象
printLog("model 是 ==> \(json)")
if json.code == 200 {
callBackBlock(true, nil)
} else {
let err = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg.isEmpty ? "" : json.msg)
callBackBlock(false, err)
}
} failBlock: { err in
callBackBlock(false, err)
}
}
}
...@@ -60,10 +60,6 @@ class YHImageResultViewController: YHBaseViewController { ...@@ -60,10 +60,6 @@ class YHImageResultViewController: YHBaseViewController {
if controller.isKind(of: YHWorkExperienceViewController.self) { if controller.isKind(of: YHWorkExperienceViewController.self) {
targetVC = controller targetVC = controller
} }
if controller.isKind(of: YHWorkIntroductionViewController.self) {
targetVC = controller
}
} }
if let targetVC = targetVC { if let targetVC = targetVC {
self.navigationController?.popToViewController(targetVC, animated: true) self.navigationController?.popToViewController(targetVC, animated: true)
......
...@@ -113,12 +113,17 @@ class YHWorkExperienceListViewController: YHBaseViewController { ...@@ -113,12 +113,17 @@ class YHWorkExperienceListViewController: YHBaseViewController {
return return
} }
} }
viewModel?.requestWorkTimeRemarkWorkExperience("\(orderId)", callBackBlock: {[weak self] success, error in
guard let self = self else { return }
})
viewModel?.requestSaveAllWorkExperience("\(orderId)", callBackBlock: {[weak self] success, error in viewModel?.requestSaveAllWorkExperience("\(orderId)", callBackBlock: {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
if success ?? false { if success ?? false {
self.navigationController?.popViewController(animated: true) self.navigationController?.popViewController(animated: true)
} }
}) })
} }
func showDeleteAlert(_ model: YHWorkItemListModel) { func showDeleteAlert(_ model: YHWorkItemListModel) {
...@@ -188,6 +193,15 @@ extension YHWorkExperienceListViewController: UITableViewDelegate, UITableViewDa ...@@ -188,6 +193,15 @@ extension YHWorkExperienceListViewController: UITableViewDelegate, UITableViewDa
return cell return cell
} else if indexPath.row == 2 { } else if indexPath.row == 2 {
let cell = tableView.dequeueReusableCell(withClass: YHWorkExperienceListReasonTableViewCell.self) let cell = tableView.dequeueReusableCell(withClass: YHWorkExperienceListReasonTableViewCell.self)
cell.model = viewModel?.mainModel
cell.clickBlock = { [weak self] value, index in
guard let self = self else { return }
if index == 0 {
self.viewModel?.mainModel.work_time_empty_remark = value
} else {
self.viewModel?.mainModel.work_time_overlap_remark = value
}
}
cell.backgroundColor = .clear cell.backgroundColor = .clear
cell.contentView.backgroundColor = .clear cell.contentView.backgroundColor = .clear
return cell return cell
......
...@@ -25,6 +25,7 @@ class YHWorkExperienceViewController: YHBaseViewController { ...@@ -25,6 +25,7 @@ class YHWorkExperienceViewController: YHBaseViewController {
var isShowMessageSelect: Bool = true var isShowMessageSelect: Bool = true
var isKeyboardShow: Bool = false var isKeyboardShow: Bool = false
var selectEditItem = YHWorkExperienceFileModel() var selectEditItem = YHWorkExperienceFileModel()
var fileMessageArray: [String] = ["签字盖章的推荐信", "盖章的工作证明+签字的推荐信", "其他证明(退工单或合同+社保等证明)", "以上均不能提供"]
var renameInputView: YHFileRenameInputView = { var renameInputView: YHFileRenameInputView = {
let view = YHFileRenameInputView.inputView(defalutText: "请输入名称") let view = YHFileRenameInputView.inputView(defalutText: "请输入名称")
return view return view
...@@ -103,13 +104,13 @@ class YHWorkExperienceViewController: YHBaseViewController { ...@@ -103,13 +104,13 @@ class YHWorkExperienceViewController: YHBaseViewController {
viewModel.requestWorkExample { success, error in viewModel.requestWorkExample { success, error in
} }
viewModel.requestWorkDetail(workExperienceID ?? "") {[weak self] success, error in viewModel.requestWorkDetail("\(orderID)", workExperienceID ?? "") {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
self.stepView.currentIndex = self.viewModel.mainModel.step self.stepView.currentIndex = self.viewModel.mainModel.step
self.stepView.maxIndex = self.viewModel.mainModel.step self.stepView.maxIndex = self.viewModel.mainModel.step
self.updateDataSource() self.updateDataSource()
self.stepView.dataSource = ["基本信息", "工作职责", "工作亮点", "简历/工作总结"] self.stepView.dataSource = ["基本信息", "工作职责", "工作亮点", "简历/工作总结"]
self.viewModel.requestWorkInfoProject("\(self.viewModel.mainModel.id )") {[weak self] success, error in self.viewModel.requestWorkInfoProject("\(self.viewModel.mainModel.word_id)") {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
self.introductionDataSource = success self.introductionDataSource = success
self.fileDataSource = self.viewModel.mainModel.file self.fileDataSource = self.viewModel.mainModel.file
...@@ -162,6 +163,9 @@ class YHWorkExperienceViewController: YHBaseViewController { ...@@ -162,6 +163,9 @@ class YHWorkExperienceViewController: YHBaseViewController {
self.getTextWithType(type: 3)] self.getTextWithType(type: 3)]
} }
func getSelectCompany() -> Int {
return fileMessageArray.firstIndex(where: {$0 == viewModel.mainModel.work_certificate}) ?? 5
}
func setView() { func setView() {
stepView = { stepView = {
...@@ -673,21 +677,20 @@ extension YHWorkExperienceViewController: UITableViewDelegate, UITableViewDataSo ...@@ -673,21 +677,20 @@ extension YHWorkExperienceViewController: UITableViewDelegate, UITableViewDataSo
} else { } else {
if indexPath.row == 0 { if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withClass: YHWorkExperienceTableViewCell.self) let cell = tableView.dequeueReusableCell(withClass: YHWorkExperienceTableViewCell.self)
cell.country = self.viewModel.mainModel.location.country
cell.selectDataSource = getTipsWithType() cell.selectDataSource = getTipsWithType()
cell.selectItem = getSelectCompany()
cell.dataSource = baseDataSource?[indexPath.row] cell.dataSource = baseDataSource?[indexPath.row]
cell.workExperienceBlock = {[weak self] model in cell.workExperienceBlock = {[weak self] model in
guard let self = self else { return } guard let self = self else { return }
self.viewModel.updateModel(model) self.viewModel.updateModel(model)
let id = model.id let id = model.id
if id != .id1 && id != .id3 && id != .id4 && id != .id7 && id != .id8 && id != .id12 && id != .id14 && id != .id16 && id != .id17 && id != .id18 { if id != .id1 {
self.updateDataSource() self.updateDataSource()
} }
} }
cell.companyBlock = {[weak self] company in cell.selectBlock = {[weak self] index in
guard let self = self else { return } guard let self = self else { return }
self.viewModel.updateModel(company) self.viewModel.mainModel.work_certificate = fileMessageArray[index.first ?? 0]
self.updateDataSource()
} }
return cell return cell
} else { } else {
......
//
// YHWorkIntroductionViewController.swift
// galaxy
//
// Created by EDY on 2024/2/20.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHWorkIntroductionViewController: YHBaseViewController {
typealias SaveBlock = () -> ()
var saveBlock: SaveBlock?
var nameTextField: UITextField!
var startTextField: UITextField!
var endTextField: UITextField!
// var longTimeButton: UIButton!
var messageTextField: UITextView!
var startButton: UIButton!
var endButton: UIButton!
var promptsLabel: UILabel!
var actionView: YHWorkActionView!
var bottomView: UIView!
var bottomButton: UIButton!
var viewModel: YHWorkIntroductionViewModel!
var workModel: YHWorkExperienceDetailModel?
var dataSource: YHWorkExperienceProjectModel = YHWorkExperienceProjectModel()
override func viewDidLoad() {
super.viewDidLoad()
gk_navTitle = "工作经验信息填写"
gk_navBackgroundColor = .white
gk_navBarAlpha = 1.0
viewModel = YHWorkIntroductionViewModel()
setView()
getData()
isShowPromptsLabel()
// Do any additional setup after loading the view.
}
func getData() {
viewModel?.requestIntroducetionExample(callBackBlock: { success, error in
})
}
func setView() {
view.backgroundColor = .white
let array = ["项目名称", "项目开始时间", "项目结束时间", "项目业绩/亮点"]
for i in 0..<array.count {
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.font = UIFont.PFSC_R(ofSize: 14)
label.text = array[i]
view.addSubview(label)
label.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(CGFloat(51 * i) + k_Height_NavigationtBarAndStatuBar)
make.width.equalTo(100)
make.height.equalTo(51)
}
if i != array.count - 1 {
let line = UIView()
line.backgroundColor = UIColor.separatorColor
view.addSubview(line)
line.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(CGFloat(51 * (i + 1)) + k_Height_NavigationtBarAndStatuBar)
make.right.equalTo(-18)
make.height.equalTo(1)
}
}
}
nameTextField = {
let textField = UITextField()
textField.font = UIFont.PFSC_R(ofSize: 14)
textField.placeholder = "如方便提供,请填写"
textField.text = dataSource.project_name
textField.delegate = self
return textField
}()
view.addSubview(nameTextField)
nameTextField.snp.makeConstraints { make in
make.right.equalTo(-18)
make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
make.left.equalTo(117)
make.height.equalTo(51)
}
startTextField = {
let textField = UITextField()
textField.font = UIFont.PFSC_R(ofSize: 14)
textField.placeholder = "开始时间"
textField.isEnabled = false
textField.isUserInteractionEnabled = false
textField.text = dataSource.project_start_time
return textField
}()
view.addSubview(startTextField)
startTextField.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + 52)
make.left.equalTo(117)
make.height.equalTo(51)
make.right.equalTo(-18)
}
startButton = {
let button = UIButton(type: .custom)
button.addTarget(self, action: #selector(startClick), for: .touchUpInside)
return button
}()
view.addSubview(startButton)
startButton.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + 52)
make.left.equalTo(117)
make.height.equalTo(51)
make.right.equalTo(-18)
}
endTextField = {
let textField = UITextField()
textField.font = UIFont.PFSC_R(ofSize: 14)
textField.placeholder = "结束时间"
textField.isEnabled = false
textField.isUserInteractionEnabled = false
if dataSource.project_end_time != "至今" {
textField.text = dataSource.project_end_time
} else {
textField.text = ""
}
return textField
}()
view.addSubview(endTextField)
endTextField.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + 104)
make.left.equalTo(117)
make.height.equalTo(51)
make.right.equalTo(-18)
}
endButton = {
let button = UIButton(type: .custom)
button.addTarget(self, action: #selector(endClick), for: .touchUpInside)
return button
}()
view.addSubview(endButton)
endButton.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + 104)
make.left.equalTo(117)
make.height.equalTo(51)
make.right.equalTo(-18)
}
// longTimeButton = {
// let button = UIButton(type: .custom)
// button.setImage(UIImage(named: "main_time_normal"), for: .normal)
// button.setImage(UIImage(named: "login_privacy_agree"), for: .selected)
// button.setTitleColor(UIColor.mainTextColor, for: .normal)
// button.setTitle("至今", for: .normal)
// button.titleLabel?.font = UIFont.PFSC_M(ofSize: 14)
// button.contentHorizontalAlignment = .right
// button.addTarget(self, action: #selector(longTimeButtonClick), for: .touchUpInside)
// if dataSource.project_end_time == "至今" {
// button.isSelected = true
// } else {
// button.isSelected = false
// }
// return button
// }()
// view.addSubview(longTimeButton)
// if dataSource.project_end_time != "至今" {
// longTimeButton.snp.makeConstraints { make in
// make.right.equalTo(-18)
// make.centerY.equalTo(endTextField.snp.centerY)
// make.height.equalTo(32)
// make.width.equalTo(43)
// }
endTextField.isHidden = false
endButton.isHidden = false
// }
// else {
// longTimeButton.snp.makeConstraints { make in
// make.left.equalTo(117)
// make.centerY.equalTo(endTextField.snp.centerY)
// make.height.equalTo(32)
// make.width.equalTo(43)
// }
// endTextField.isHidden = true
// endButton.isHidden = true
// }
// longTimeButton.iconInLeft(spacing: 3)
messageTextField = {
let textField = UITextView()
textField.backgroundColor = UIColor.contentBkgColor
textField.font = UIFont.PFSC_R(ofSize: 14)
textField.layer.cornerRadius = kCornerRadius6
textField.delegate = self
textField.text = dataSource.project_highlights
return textField
}()
view.addSubview(messageTextField)
messageTextField.snp.makeConstraints { make in
make.left.equalTo(18)
make.right.equalTo(-18)
make.top.equalTo(208 + k_Height_NavigationtBarAndStatuBar)
make.bottom.equalTo(-k_Height_safeAreaInsetsBottom() - 124)
}
promptsLabel = {
let prompts = UILabel()
prompts.font = UIFont.PFSC_R(ofSize: 14)
prompts.textColor = UIColor(hex: 0xc0c0c0)
prompts.text = "在职期间负责的核心项目,如果负责过多个项目,请分段描述:\n\n例子:\n\n模式1、本人对XX项目展开深入研究,通过对XX方法/方式,研究出XX。此外,她还指出XX问题,反映了XX。XX的研究成果对XX产生了重要性,为XX领域/方面提供参考依据;\n\n模式2、本人在司参与了XX项目,该项目具有XX突出意义。在此项目中,XX是个难点,本人通过XX方法,实现了XX成果。在XX方面,本人通过XX方式,完成了XX工作。本人凭借在XX领域的丰富经验,推动项目在中国/海外市场取得XX成果。"
prompts.numberOfLines = 0
return prompts
}()
view.addSubview(promptsLabel)
promptsLabel.snp.makeConstraints { make in
make.left.equalTo(22)
make.right.equalTo(-22)
make.top.equalTo(220 + k_Height_NavigationtBarAndStatuBar)
}
actionView = {
let view = YHWorkActionView()
view.exampleBlock = {[weak self] in
guard let self = self else { return }
self.view.endEditing(true)
let mainVc = YHWorkExampleViewController()
mainVc.dataSource = self.viewModel?.introducetionExampleModels
mainVc.type = .introduction
mainVc.exampleBlock = {[weak self] message in
guard let self = self else { return }
self.dataSource.project_highlights = message
self.messageTextField.text = message
self.isShowPromptsLabel()
}
let vc = UINavigationController(rootVC: mainVc)
vc.modalPresentationStyle = .pageSheet
self.navigationController?.present(vc, animated: true)
}
view.photoBlock = {[weak self] in
guard let self = self else { return }
self.view.endEditing(true)
YHImagePickerView.show() {[weak self] image in
guard let self = self else { return }
let clipperVC = YHImageClipperViewController()
clipperVC.setBaseImg(image, resultImgSize: CGSize(width: image.size.width, height: image.size.height), type: .Stay)
clipperVC.successClippedHandler = {[weak self] result in
guard let self = self else { return }
self.dataSource.project_highlights = result
self.messageTextField.text = result
self.isShowPromptsLabel()
}
self.navigationController?.pushViewController(clipperVC, animated: true)
}
}
return view
}()
view.addSubview(actionView)
actionView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.height.equalTo(44)
make.bottom.equalTo(-k_Height_safeAreaInsetsBottom() - 64)
}
bottomView = {
let bottom = UIView()
bottom.backgroundColor = .white
return bottom
}()
view.addSubview(bottomView)
bottomView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(k_Height_safeAreaInsetsBottom() + 64)
}
bottomButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor.brandMainColor
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 16)
button.contentHorizontalAlignment = .center
button.setTitle("保存", for: .normal)
button.setTitleColor( UIColor(hex:0xffffff), for: .normal)
button.layer.cornerRadius = kCornerRadius3
button.addTarget(self, action: #selector(submit), for: .touchUpInside)
return button
}()
bottomView.addSubview(bottomButton)
bottomButton.snp.makeConstraints { make in
make.right.equalTo(-16)
make.top.equalTo(8)
make.height.equalTo(48)
make.left.equalTo(16)
}
}
// @objc func longTimeButtonClick() {
// longTimeButton.isSelected = !longTimeButton.isSelected
// if longTimeButton.isSelected {
// longTimeButton.snp.remakeConstraints { make in
// make.left.equalTo(117)
// make.centerY.equalTo(endTextField.snp.centerY)
// make.height.equalTo(32)
// make.width.equalTo(43)
// }
// endTextField.isHidden = true
// endButton.isHidden = true
// } else {
// longTimeButton.snp.remakeConstraints { make in
// make.right.equalTo(-18)
// make.centerY.equalTo(endTextField.snp.centerY)
// make.height.equalTo(32)
// make.width.equalTo(43)
// }
// endTextField.isHidden = false
// endButton.isHidden = false
// }
// }
@objc func submit() {
// if longTimeButton.isSelected {
// dataSource.project_end_time = "至今"
// }
guard let name = dataSource.project_name, name.count != 0 else {
YHHUD.flash(message: "您还有信息未填写")
return
}
guard let _ = dataSource.project_start_time else {
YHHUD.flash(message: "您还有信息未填写")
return
}
guard let _ = dataSource.project_end_time else {
YHHUD.flash(message: "您还有信息未填写")
return
}
guard let _ = dataSource.project_highlights else {
YHHUD.flash(message: "您还有信息未填写")
return
}
viewModel?.saveWorkProjectDetail(workModel ?? YHWorkExperienceDetailModel(), projectModel: dataSource, callBackBlock: {[weak self] success, error in
guard let self = self else { return }
if success {
if let block = self.saveBlock {
block()
}
self.navigationController?.popViewController(animated: true)
} else {
YHHUD.flash(message: error?.errorMsg ?? "")
}
})
}
@objc func startClick() {
view.endEditing(true)
YHDatePickView.show(type: .yyyymmdd, title: "选择开始时间", lastIsTaday: true, currentDay: dataSource.project_start_time ?? "") { date in
if date > self.dataSource.project_end_time ?? "" && self.dataSource.project_end_time?.count ?? 0 > 0 && self.dataSource.project_end_time != "至今" {
YHHUD.flash(message: "开始时间不能晚于结束时间")
} else {
let format = DateFormatter()
format.dateFormat = "yyyy-MM-dd"
if let selectDate = format.date(from:date) {
let selectTimeInterval = selectDate.timeIntervalSince1970
let currentTimeInterval = Date().timeIntervalSince1970
if selectTimeInterval > currentTimeInterval {
YHHUD.flash(message: "开始时间不能晚于当前时间")
} else {
self.startTextField.text = date
self.dataSource.project_start_time = date
}
}
}
}
}
@objc func endClick() {
view.endEditing(true)
YHDatePickView.show(type: .yyyymmdd, title: "请选择结束时间", lastIsTaday: true, currentDay: dataSource.project_end_time ?? "") { date in
if date < self.dataSource.project_start_time ?? "" {
YHHUD.flash(message: "结束时间不能早于开始时间")
} else {
self.endTextField.text = date
self.dataSource.project_end_time = date
}
}
}
func isShowPromptsLabel() {
if messageTextField.text.count != 0 {
promptsLabel.isHidden = true
} else {
promptsLabel.isHidden = false
}
}
}
extension YHWorkIntroductionViewController: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
self.dataSource.project_highlights = textView.text
if textView.text.count != 0 {
promptsLabel.isHidden = true
} else {
promptsLabel.isHidden = false
}
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let newLength = (textView.text as NSString).length + text.count - range.length
return newLength <= 2000
}
}
extension YHWorkIntroductionViewController: UITextFieldDelegate {
func textFieldDidEndEditing(_ textField: UITextField) {
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let newText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
if newText.count > 15 {
return false
}
dataSource.project_name = newText
return true
}
}
...@@ -10,9 +10,12 @@ import Foundation ...@@ -10,9 +10,12 @@ import Foundation
import SmartCodable import SmartCodable
class YHWorkExperienceDetailModel: SmartCodable { class YHWorkExperienceDetailModel: SmartCodable {
var id: Int = 0 var word_id: Int = 0
var order_id: Int = 0 var order_id: Int = 0
var company_name: String = "" var company_name: String = ""
var professional_level: Int = 0
var work_certificate: String = ""
var is_famous_enterprise: Int = 0 var is_famous_enterprise: Int = 0
var duty: String = "" var duty: String = ""
var entry_time: String = "" var entry_time: String = ""
...@@ -20,7 +23,6 @@ class YHWorkExperienceDetailModel: SmartCodable { ...@@ -20,7 +23,6 @@ class YHWorkExperienceDetailModel: SmartCodable {
var industry: String = "" var industry: String = ""
var location: YHAddressModel = YHAddressModel() var location: YHAddressModel = YHAddressModel()
var location_aboard: Int = 0 var location_aboard: Int = 0
var professional_level: Int = 0
var professional_other: String = "" var professional_other: String = ""
var position: String = "" var position: String = ""
var remark: String = "" var remark: String = ""
...@@ -32,7 +34,6 @@ class YHWorkExperienceDetailModel: SmartCodable { ...@@ -32,7 +34,6 @@ class YHWorkExperienceDetailModel: SmartCodable {
var operator_name: String = "" var operator_name: String = ""
var operator_english_name: String = "" var operator_english_name: String = ""
var operator_id: Int = 0 var operator_id: Int = 0
var work_certificate: String = ""
var executives_certificate: String = "" var executives_certificate: String = ""
var is_executives: Int = 0 var is_executives: Int = 0
var wduty: String = "" var wduty: String = ""
......
...@@ -19,6 +19,7 @@ enum YHWorkExperienceSelectType: Int { ...@@ -19,6 +19,7 @@ enum YHWorkExperienceSelectType: Int {
case structure = 7 case structure = 7
case level = 8 case level = 8
case prove = 9 case prove = 9
case company = 10
} }
enum YHWorkExperienceID: Int { enum YHWorkExperienceID: Int {
......
//
// YHWorkExperiencePositionModel.swift
// galaxy
//
// Created by EDY on 2024/11/18.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import SmartCodable
class YHWorkExperiencePositionModel: SmartCodable {
var position_id: Int = 0
var order_id: Int = 0
var work_id: Int = 0
var position_name: String = ""
var wduty: String = ""
var entry_time: String = ""
var departure_time: String = ""
var experience_scope: String = ""
var experience_sub_scope: String = ""
var is_international_work_experience: Int = 0
var provide_certificate_type: Int = 0
var work_country: String?
var work_city: String?
required init() {
}
}
...@@ -11,6 +11,8 @@ import SmartCodable ...@@ -11,6 +11,8 @@ import SmartCodable
class YHWorkModel: SmartCodable { class YHWorkModel: SmartCodable {
var count: Int? var count: Int?
var work_time_overlap_remark: String = "" //重叠期
var work_time_empty_remark: String = "" //空窗期
var list: [YHWorkItemListModel]? var list: [YHWorkItemListModel]?
required init() { required init() {
} }
......
//
// YHWorkExperienceCompanySelectIView.swift
// galaxy
//
// Created by EDY on 2024/11/18.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import AttributedString
class YHWorkExperienceCompanySelectView: UIView {
var backDate: (([YHWorkExperienceFileModel]) -> Void)?
var centerView: UIView!
var titleLabel: UILabel!
var closeButton: UIButton!
var sureButton: UIButton!
var tableView: UITableView!
var dataSource: [YHWorkExperienceFileModel] = []
var viewModel = YHWorkExperienceViewModel()
var title: String = "" {
didSet {
titleLabel.text = title
}
}
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor(white: 0.5, alpha: 0.1)
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
tap.delegate = self
addGestureRecognizer(tap)
setView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setView() {
backgroundColor = UIColor(hex: 0x000000, alpha: 0.5)
centerView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
addSubview(centerView)
centerView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(724)
}
titleLabel = {
let label = UILabel()
label.text = title
label.font = UIFont.PFSC_M(ofSize: 17)
label.textColor = UIColor.mainTextColor
label.textAlignment = .center
label.text = "公司基本情况"
return label
}()
centerView.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.top.equalTo(16)
make.height.equalTo(24)
make.width.equalTo(200)
make.centerX.equalToSuperview()
}
closeButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "my_cer_sheet_close"), for: .normal)
button.addTarget(self, action: #selector(dismiss), for: .touchUpInside)
return button
}()
centerView.addSubview(closeButton)
closeButton.snp.makeConstraints { make in
make.right.equalTo(-21)
make.height.width.equalTo(24)
make.top.equalTo(16)
}
sureButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 16)
button.contentHorizontalAlignment = .center
button.setTitle("确定", for: .normal)
button.setTitleColor(UIColor.white, for: .normal)
button.backgroundColor = UIColor.brandMainColor
button.layer.cornerRadius = 3
button.addTarget(self, action: #selector(sure), for: .touchUpInside)
return button
}()
centerView.addSubview(sureButton)
sureButton.snp.makeConstraints { make in
make.right.equalTo(-16)
make.height.equalTo(48)
make.left.equalTo(16)
make.bottom.equalTo(-42)
}
tableView = {
let tableView = UITableView(frame: .zero, style: .grouped)
tableView.estimatedSectionHeaderHeight = 14
tableView.contentInsetAdjustmentBehavior = .never
tableView.backgroundColor = .contentBkgColor
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.register(cellWithClass: YHCompanySelectFileCell.self)
tableView.register(cellWithClass: YHCompanyReasonFileCell.self)
return tableView
}()
centerView.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.top.equalTo(53)
make.bottom.equalTo(-98)
make.left.right.equalToSuperview()
}
centerView.layoutIfNeeded()
let corner = UIRectCorner(rawValue: UIRectCorner.topLeft.rawValue | UIRectCorner.topRight.rawValue)
let path = UIBezierPath(roundedRect:bounds,byRoundingCorners: corner,cornerRadii:CGSizeMake(kCornerRadius6, kCornerRadius6))
let layer = CAShapeLayer()
layer.frame = centerView.bounds
layer.path = path.cgPath
centerView.layer.mask = layer
}
@objc private func handleTap(_ sender: AnyObject?) {
dismiss()
}
static func show(callBack: @escaping (([YHWorkExperienceFileModel]) -> Void)) {
let view = YHWorkExperienceCompanySelectView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: KScreenHeight))
view.backDate = callBack
let window = UIApplication.shared.yhKeyWindow()
window?.addSubview(view)
}
@objc func dismiss() {
removeFromSuperview()
}
@objc func sure() {
if let block = backDate {
// block(array)
}
dismiss()
}
}
extension YHWorkExperienceCompanySelectView: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer:UIGestureRecognizer, shouldReceive touch:UITouch) -> Bool {
if touch.view == self {
return true
}
return false
}
}
extension YHWorkExperienceCompanySelectView: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 1 {
let cell = tableView.dequeueReusableCell(withClass: YHCompanyReasonFileCell.self)
cell.selectData = []
return cell
}
let cell = tableView.dequeueReusableCell(withClass: YHCompanySelectFileCell.self)
cell.selectData = []
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 14))
return view
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 14
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView()
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.01
}
}
class YHCompanySelectFileCell: UITableViewCell {
typealias SelectBlock = (_ selectIndex: [Int]) -> ()
var selectBlock: SelectBlock?
var selectItem: [Int] = []
var centerView: UIView!
var titleLabel: UILabel!
var subTitleLabel: UILabel!
var mainItemView: UIView!
var dataSource: [String] = ["内地", "香港", "澳门", "境外"]
var selectData: [Int]? {
didSet {
updateAllViews()
}
}
var messageDataSource: [String] = ["公司是否为上市公司", "您目前是否拥有此公司10%以上股权", "您目前是否拥有此公司50%以上股权", "公司全年盈利达港币 500 万元或以上(或等值外币)", "请选择您的公司所在地:"]
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
selectionStyle = .none
setupUI()
}
func setupUI() {
backgroundColor = .clear
centerView = {
let view = UIView()
view.backgroundColor = .white
view.layer.cornerRadius = kCornerRadius6
return view
}()
contentView.addSubview(centerView)
centerView.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.bottom.equalToSuperview()
}
titleLabel = {
let label = UILabel()
label.font = UIFont.PFSC_M(ofSize: 17)
label.textColor = UIColor.mainTextColor
label.text = "主申请人公司"
return label
}()
centerView.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(16)
make.height.equalTo(20)
make.right.equalTo(-18)
}
// lineView = {
// let label = UIView()
// label.backgroundColor = UIColor.separatorColor
// return label
// }()
// centerView.addSubview(lineView)
// lineView.snp.makeConstraints { make in
// make.height.equalTo(1)
// make.top.equalTo(52)
// make.left.right.equalToSuperview()
// }
//
mainItemView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
centerView.addSubview(mainItemView)
mainItemView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.bottom.equalTo(-16)
make.top.equalTo(52)
}
}
func updateAllViews() {
mainItemView.removeSubviews()
for j in 0..<messageDataSource.count {
let lineView = {
let label = UIView()
label.backgroundColor = UIColor.separatorColor
return label
}()
centerView.addSubview(lineView)
lineView.snp.makeConstraints { make in
make.height.equalTo(1)
make.left.equalTo(18)
make.right.equalTo(-18)
if j == 0 {
make.top.equalTo(52)
} else {
let view = mainItemView.viewWithTag(2000 + j - 1)
make.top.equalTo(view?.snp.bottom ?? mainItemView.snp.bottom).offset(15)
}
}
let titleLabel = {
let label = UILabel()
// label.attributed.text = dataSource?[i]
label.numberOfLines = 0
let str = "*" + messageDataSource[j]
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont.PFSC_R(ofSize: 14),
.foregroundColor: UIColor.mainTextColor
]
let questionAttrStr = NSMutableAttributedString(string: str, attributes: attributes)
let starRange = NSRange(location: 0, length: 1)
questionAttrStr.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.failColor, range: starRange)
label.attributedText = questionAttrStr
label.tag = 2000 + j
return label
}()
mainItemView.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.top.equalTo(lineView.snp.bottom).offset(15)
make.left.equalTo(18)
make.width.equalTo(106)
if j == 4 {
make.width.equalTo(400)
}
}
if j == 4 {
for i in 0..<dataSource.count {
let bgviewButton = {
let view = UIButton()
view.backgroundColor = UIColor.contentBkgColor
view.layer.cornerRadius = 3
view.layer.borderColor = UIColor.brandMainColor.cgColor
view.addTarget(self, action: #selector(agreeClick(sender:)), for: .touchUpInside)
view.tag = 20000 + i
return view
}()
mainItemView.addSubview(bgviewButton)
let agreeButton = {
let button = UIImageView()
button.image = UIImage(named: "login_privacy_disagree_glay")
button.tag = 10000 + i
if selectItem.contains(i) {
button.image = UIImage(named: "login_privacy_agree")
} else {
button.image = UIImage(named: "login_privacy_disagree_glay")
}
button.isUserInteractionEnabled = false
return button
}()
mainItemView.addSubview(agreeButton)
agreeButton.snp.makeConstraints { make in
if i == 0 {
make.top.equalTo(titleLabel.snp.bottom).offset(32)
} else {
let view = mainItemView.viewWithTag(1000 + i - 1)
make.top.equalTo(view?.snp.bottom ?? mainItemView.snp.bottom).offset(48)
}
make.left.equalTo(34)
make.height.equalTo(13)
make.width.equalTo(13)
}
let subTitleLabel = {
let label = UILabel()
label.text = dataSource[i]
label.numberOfLines = 0
label.tag = 1000 + i
label.textColor = UIColor.mainTextColor
label.font = UIFont.PFSC_R(ofSize: 14)
label.isUserInteractionEnabled = false
return label
}()
mainItemView.addSubview(subTitleLabel)
subTitleLabel.snp.makeConstraints { make in
make.top.equalTo(agreeButton.snp.top).offset(-3)
make.left.equalTo(56)
make.right.equalTo(-35)
if i == (dataSource.count) - 1 {
make.bottom.equalToSuperview().offset(-16)
}
}
bgviewButton.snp.makeConstraints { make in
make.top.equalTo(subTitleLabel.snp.top).offset(-16)
make.bottom.equalTo(subTitleLabel.snp.bottom).offset(16)
make.left.equalTo(18)
make.right.equalTo(-18)
}
}
} else {
let rightButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor.brandMainColor.withAlphaComponent(0.08)
button.setTitleColor(UIColor.brandMainColor, for: .selected)
button.setTitleColor(UIColor.mainTextColor, for: .normal)
button.setTitle("否", for: .normal)
button.layer.cornerRadius = 16
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 13)
button.addTarget(self, action: #selector(rightClick(sender:)), for: .touchUpInside)
button.tag = 3000 + j
return button
}()
addSubview(rightButton)
rightButton.snp.makeConstraints { make in
make.right.equalTo(-18)
make.centerY.equalTo(titleLabel.snp.centerY)
make.height.equalTo(32)
make.width.equalTo(74)
}
let leftButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor.contentBkgColor
button.setTitleColor(UIColor.brandMainColor, for: .selected)
button.setTitleColor(UIColor.mainTextColor, for: .normal)
button.layer.cornerRadius = 16
button.setTitle("是", for: .normal)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 13)
button.addTarget(self, action: #selector(leftClick(sender:)), for: .touchUpInside)
button.tag = 4000 + j
return button
}()
addSubview(leftButton)
leftButton.snp.makeConstraints { make in
make.right.equalTo(rightButton.snp.left).offset(-12)
make.centerY.equalTo(titleLabel.snp.centerY)
make.height.equalTo(32)
make.width.equalTo(74)
}
}
}
}
@objc func agreeClick(sender: UIButton) {
sender.isSelected = !sender.isSelected
if sender.isSelected {
sender.layer.borderWidth = 1
sender.backgroundColor = UIColor(hex: 0xebf0f9)
selectItem.append(sender.tag - 20000)
let view = mainItemView.viewWithTag(sender.tag - 20000 + 10000) as! UIImageView
view.image = UIImage(named: "login_privacy_agree")
} else {
sender.layer.borderWidth = 0
sender.backgroundColor = UIColor.contentBkgColor
selectItem.removeAll(where: {$0 == sender.tag - 20000})
let view = mainItemView.viewWithTag(sender.tag - 20000 + 10000) as! UIImageView
view.image = UIImage(named: "login_privacy_disagree_glay")
}
if let block = selectBlock {
block(selectItem)
}
}
@objc func leftClick(sender: UIButton) {
}
@objc func rightClick(sender: UIButton) {
}
}
class YHCompanyReasonFileCell: UITableViewCell {
typealias SelectBlock = (_ selectIndex: [Int]) -> ()
var selectBlock: SelectBlock?
var selectItem: [Int] = []
var centerView: UIView!
var titleLabel: UILabel!
var subTitleLabel: UILabel!
var mainItemView: UIView!
var dataSource: [String] = ["验资报告", "审计报告", "绝对实益拥有人声明书", "企业所得税月(季)度预缴纳税申报表(A类)(前4个季度/前12个月)", "企业所得税完税证明(表格式)", "企业所得税年度纳税申报表(A类) (近一年度)", "工作证明"]
var selectData: [Int]? {
didSet {
updateAllViews()
}
}
var messageDataSource: [String] = ["您是否可以提供以下所有证明文件"]
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
selectionStyle = .none
setupUI()
}
func setupUI() {
backgroundColor = .clear
centerView = {
let view = UIView()
view.backgroundColor = .white
view.layer.cornerRadius = kCornerRadius6
return view
}()
contentView.addSubview(centerView)
centerView.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.bottom.equalToSuperview()
}
titleLabel = {
let label = UILabel()
label.font = UIFont.PFSC_M(ofSize: 17)
label.textColor = UIColor.mainTextColor
label.text = "证件提供确认"
return label
}()
centerView.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(16)
make.height.equalTo(20)
make.right.equalTo(-18)
}
mainItemView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
centerView.addSubview(mainItemView)
mainItemView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.bottom.equalTo(-16)
make.top.equalTo(52)
}
}
func updateAllViews() {
mainItemView.removeSubviews()
for j in 0..<messageDataSource.count {
let lineView = {
let label = UIView()
label.backgroundColor = UIColor.separatorColor
return label
}()
centerView.addSubview(lineView)
lineView.snp.makeConstraints { make in
make.height.equalTo(1)
make.left.right.equalToSuperview()
if j == 0 {
make.top.equalTo(52)
} else {
let view = mainItemView.viewWithTag(2000 + j - 1)
make.top.equalTo(view?.snp.bottom ?? mainItemView.snp.bottom).offset(15)
}
}
let titleLabel = {
let label = UILabel()
// label.attributed.text = dataSource?[i]
label.numberOfLines = 0
let str = "*" + messageDataSource[j]
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont.PFSC_R(ofSize: 14),
.foregroundColor: UIColor.mainTextColor
]
let questionAttrStr = NSMutableAttributedString(string: str, attributes: attributes)
let starRange = NSRange(location: 0, length: 1)
questionAttrStr.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.failColor, range: starRange)
label.attributedText = questionAttrStr
label.tag = 2000 + j
return label
}()
mainItemView.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.top.equalTo(lineView.snp.bottom).offset(15)
make.left.equalTo(18)
make.width.equalTo(106)
}
let rightButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor.brandMainColor.withAlphaComponent(0.08)
button.setTitleColor(UIColor.brandMainColor, for: .selected)
button.setTitleColor(UIColor.mainTextColor, for: .normal)
button.setTitle("否", for: .normal)
button.layer.cornerRadius = 16
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 13)
button.addTarget(self, action: #selector(rightClick(sender:)), for: .touchUpInside)
button.tag = 3000 + j
return button
}()
addSubview(rightButton)
rightButton.snp.makeConstraints { make in
make.right.equalTo(-18)
make.centerY.equalTo(titleLabel.snp.centerY)
make.height.equalTo(32)
make.width.equalTo(74)
}
let leftButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor.contentBkgColor
button.setTitleColor(UIColor.brandMainColor, for: .selected)
button.setTitleColor(UIColor.mainTextColor, for: .normal)
button.layer.cornerRadius = 16
button.setTitle("是", for: .normal)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 13)
button.addTarget(self, action: #selector(leftClick(sender:)), for: .touchUpInside)
button.tag = 4000 + j
return button
}()
addSubview(leftButton)
leftButton.snp.makeConstraints { make in
make.right.equalTo(rightButton.snp.left).offset(-12)
make.centerY.equalTo(titleLabel.snp.centerY)
make.height.equalTo(32)
make.width.equalTo(74)
}
let bgviewButton = {
let view = UIButton()
view.backgroundColor = UIColor.contentBkgColor
view.layer.cornerRadius = 3
view.layer.borderColor = UIColor.brandMainColor.cgColor
return view
}()
mainItemView.addSubview(bgviewButton)
for i in 0..<dataSource.count {
let agreeButton = {
let button = UIView()
button.tag = 10000 + i
button.backgroundColor = UIColor(hex: 0xb3c8e9)
return button
}()
mainItemView.addSubview(agreeButton)
agreeButton.snp.makeConstraints { make in
if i == 0 {
make.top.equalTo(titleLabel.snp.bottom).offset(32)
} else {
let view = mainItemView.viewWithTag(1000 + i - 1)
make.top.equalTo(view?.snp.bottom ?? mainItemView.snp.bottom).offset(18)
}
make.left.equalTo(34)
make.height.equalTo(5)
make.width.equalTo(5)
}
let subTitleLabel = {
let label = UILabel()
label.text = dataSource[i]
label.numberOfLines = 0
label.tag = 1000 + i
label.textColor = UIColor.mainTextColor
label.font = UIFont.PFSC_R(ofSize: 14)
label.isUserInteractionEnabled = false
return label
}()
mainItemView.addSubview(subTitleLabel)
subTitleLabel.snp.makeConstraints { make in
make.top.equalTo(agreeButton.snp.top).offset(-3)
make.left.equalTo(56)
make.right.equalTo(-35)
if i == (dataSource.count) - 1 {
make.bottom.equalToSuperview().offset(-16)
}
}
if i == dataSource.count - 1 {
bgviewButton.snp.makeConstraints { make in
make.top.equalTo(titleLabel.snp.bottom).offset(16)
make.bottom.equalTo(subTitleLabel.snp.bottom).offset(16)
make.left.equalTo(18)
make.right.equalTo(-18)
}
}
}
}
}
@objc func agreeClick(sender: UIButton) {
sender.isSelected = !sender.isSelected
if sender.isSelected {
sender.layer.borderWidth = 1
sender.backgroundColor = UIColor(hex: 0xebf0f9)
selectItem.append(sender.tag - 20000)
let view = mainItemView.viewWithTag(sender.tag - 20000 + 10000) as! UIImageView
view.image = UIImage(named: "login_privacy_agree")
} else {
sender.layer.borderWidth = 0
sender.backgroundColor = UIColor.contentBkgColor
selectItem.removeAll(where: {$0 == sender.tag - 20000})
let view = mainItemView.viewWithTag(sender.tag - 20000 + 10000) as! UIImageView
view.image = UIImage(named: "login_privacy_disagree_glay")
}
if let block = selectBlock {
block(selectItem)
}
}
@objc func leftClick(sender: UIButton) {
}
@objc func rightClick(sender: UIButton) {
}
}
...@@ -247,6 +247,8 @@ class YHWorkExperienceItemView: UIView { ...@@ -247,6 +247,8 @@ class YHWorkExperienceItemView: UIView {
} }
case .prove: case .prove:
break break
case .company:
break
} }
} }
nextStepImageView.isHidden = false nextStepImageView.isHidden = false
...@@ -500,6 +502,10 @@ class YHWorkExperienceItemView: UIView { ...@@ -500,6 +502,10 @@ class YHWorkExperienceItemView: UIView {
block(self.dataSource ?? YHWorkExperienceModel()) block(self.dataSource ?? YHWorkExperienceModel())
} }
} }
case .company:
YHWorkExperienceCompanySelectView.show { array in
}
} }
} }
} }
......
...@@ -10,6 +10,8 @@ import UIKit ...@@ -10,6 +10,8 @@ import UIKit
import AttributedString import AttributedString
class YHWorkExperienceListReasonTableViewCell: UITableViewCell { class YHWorkExperienceListReasonTableViewCell: UITableViewCell {
typealias ExperienceListBlock = (_ value: String, _ index: Int) -> ()
var clickBlock: ExperienceListBlock?
var centerView: UIView! var centerView: UIView!
var titleLabel: UILabel! var titleLabel: UILabel!
var lineView: UIView! var lineView: UIView!
...@@ -24,6 +26,20 @@ class YHWorkExperienceListReasonTableViewCell: UITableViewCell { ...@@ -24,6 +26,20 @@ class YHWorkExperienceListReasonTableViewCell: UITableViewCell {
var promptsTwoLabel: UILabel! var promptsTwoLabel: UILabel!
var messageTwoNumberLabel: UILabel! var messageTwoNumberLabel: UILabel!
var model: YHWorkModel? {
didSet {
messageTextField.text = model?.work_time_empty_remark
if messageTextField.text.count != 0 {
promptsLabel.isHidden = true
messageNumberLabel.text = "\(messageTextField.text.count)/1000"
}
messageTwoTextField.text = model?.work_time_overlap_remark
if messageTwoTextField.text.count != 0 {
promptsTwoLabel.isHidden = true
messageTwoNumberLabel.text = "\(messageTwoTextField.text.count)/1000"
}
}
}
override func awakeFromNib() { override func awakeFromNib() {
super.awakeFromNib() super.awakeFromNib()
// Initialization code // Initialization code
...@@ -248,24 +264,32 @@ class YHWorkExperienceListReasonTableViewCell: UITableViewCell { ...@@ -248,24 +264,32 @@ class YHWorkExperienceListReasonTableViewCell: UITableViewCell {
extension YHWorkExperienceListReasonTableViewCell: UITextViewDelegate { extension YHWorkExperienceListReasonTableViewCell: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) { func textViewDidChange(_ textView: UITextView) {
let number = textView.text.count let number = textView.text.count
var numberIndex = 0
if textView.text.count != 0 { if textView.text.count != 0 {
if textView == messageTextField { if textView == messageTextField {
promptsLabel.isHidden = true promptsLabel.isHidden = true
messageNumberLabel.text = "\(number)/1000" messageNumberLabel.text = "\(number)/1000"
numberIndex = 0
} else { } else {
promptsTwoLabel.isHidden = true promptsTwoLabel.isHidden = true
messageTwoNumberLabel.text = "\(number)/1000" messageTwoNumberLabel.text = "\(number)/1000"
numberIndex = 1
} }
} else { } else {
if textView == messageTextField { if textView == messageTextField {
promptsLabel.isHidden = false promptsLabel.isHidden = false
messageNumberLabel.text = "\(number)/1000" messageNumberLabel.text = "\(number)/1000"
numberIndex = 0
} else { } else {
promptsTwoLabel.isHidden = false promptsTwoLabel.isHidden = false
messageTwoNumberLabel.text = "\(number)/1000" messageTwoNumberLabel.text = "\(number)/1000"
numberIndex = 1
} }
} }
if let block = clickBlock {
block(textView.text, numberIndex)
}
} }
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
......
...@@ -69,7 +69,7 @@ class YHWorkExperiencePositionTableViewCell: UITableViewCell { ...@@ -69,7 +69,7 @@ class YHWorkExperiencePositionTableViewCell: UITableViewCell {
titleLabel = { titleLabel = {
let label = UILabel() let label = UILabel()
label.font = UIFont.PFSC_M(ofSize: 17) label.font = UIFont.PFSC_M(ofSize: 17)
label.text = "主申请人工作经历" label.text = "职位信息"
label.textColor = UIColor.mainTextColor label.textColor = UIColor.mainTextColor
return label return label
}() }()
...@@ -84,7 +84,7 @@ class YHWorkExperiencePositionTableViewCell: UITableViewCell { ...@@ -84,7 +84,7 @@ class YHWorkExperiencePositionTableViewCell: UITableViewCell {
subTitleLabel = { subTitleLabel = {
let label = UILabel() let label = UILabel()
label.font = UIFont.PFSC_R(ofSize: 12) label.font = UIFont.PFSC_R(ofSize: 12)
label.text = "(从最近一份全职工作开始,直至毕业后的第一份工作)" label.text = "(从该公司第一个职位开始, 直至最后一个职位)"
label.textColor = UIColor.labelTextColor2 label.textColor = UIColor.labelTextColor2
return label return label
}() }()
......
...@@ -90,6 +90,13 @@ class YHWorkExperienceSelectView: UIView { ...@@ -90,6 +90,13 @@ class YHWorkExperienceSelectView: UIView {
view.layer.borderColor = UIColor.brandMainColor.cgColor view.layer.borderColor = UIColor.brandMainColor.cgColor
view.addTarget(self, action: #selector(agreeClick(sender:)), for: .touchUpInside) view.addTarget(self, action: #selector(agreeClick(sender:)), for: .touchUpInside)
view.tag = 20000 + i view.tag = 20000 + i
if selectItem.contains(i) {
view.layer.borderWidth = 1
view.backgroundColor = UIColor(hex: 0xebf0f9)
} else {
view.layer.borderWidth = 0
view.backgroundColor = UIColor.contentBkgColor
}
return view return view
}() }()
mainItemView.addSubview(bgviewButton) mainItemView.addSubview(bgviewButton)
...@@ -145,21 +152,25 @@ class YHWorkExperienceSelectView: UIView { ...@@ -145,21 +152,25 @@ class YHWorkExperienceSelectView: UIView {
} }
@objc func agreeClick(sender: UIButton) { @objc func agreeClick(sender: UIButton) {
selectItem.removeAll()
selectItem.append(sender.tag - 20000)
sender.isSelected = !sender.isSelected sender.isSelected = !sender.isSelected
if sender.isSelected { for i in 0..<(dataSource?.count ?? 0) {
sender.layer.borderWidth = 1 if i == sender.tag - 20000 {
sender.backgroundColor = UIColor(hex: 0xebf0f9) let view = mainItemView.viewWithTag(i + 20000)
selectItem.append(sender.tag - 20000) view?.layer.borderWidth = 1
let view = mainItemView.viewWithTag(sender.tag - 20000 + 10000) as! UIImageView view?.backgroundColor = UIColor(hex: 0xebf0f9)
view.image = UIImage(named: "login_privacy_agree") let subview = mainItemView.viewWithTag(i + 10000) as! UIImageView
} else { subview.image = UIImage(named: "login_privacy_agree")
sender.layer.borderWidth = 0 } else {
sender.backgroundColor = UIColor.contentBkgColor let view = mainItemView.viewWithTag(i + 20000)
selectItem.removeAll(where: {$0 == sender.tag - 20000}) view?.layer.borderWidth = 0
let view = mainItemView.viewWithTag(sender.tag - 20000 + 10000) as! UIImageView view?.backgroundColor = UIColor.contentBkgColor
view.image = UIImage(named: "login_privacy_disagree_glay") let subview = mainItemView.viewWithTag(i + 10000) as! UIImageView
subview.image = UIImage(named: "login_privacy_disagree_glay")
}
} }
if let block = selectBlock { if let block = selectBlock {
block(selectItem) block(selectItem)
} }
......
...@@ -12,12 +12,14 @@ import AttributedString ...@@ -12,12 +12,14 @@ import AttributedString
class YHWorkExperienceTableViewCell: UITableViewCell { class YHWorkExperienceTableViewCell: UITableViewCell {
typealias WorkExperienceBlock = (_ model: YHWorkExperienceModel) -> () typealias WorkExperienceBlock = (_ model: YHWorkExperienceModel) -> ()
typealias CompanyBlock = (_ model: YHCompanyModelListModel) -> () typealias CompanyBlock = (_ model: YHCompanyModelListModel) -> ()
typealias SelectBlock = (_ selectIndex: [Int]) -> ()
var companyBlock: CompanyBlock? var companyBlock: CompanyBlock?
var workExperienceBlock: WorkExperienceBlock? var workExperienceBlock: WorkExperienceBlock?
var selectBlock: SelectBlock?
var centerView: UIView! var centerView: UIView!
var titleLabel: UILabel! var titleLabel: UILabel!
var mainItemView: UIView! var mainItemView: UIView!
var country: String = "" var selectItem: Int = 5
var dataSource: YHSectionWorkExperienceModel?{ var dataSource: YHSectionWorkExperienceModel?{
didSet { didSet {
updateAllViews() updateAllViews()
...@@ -107,27 +109,17 @@ class YHWorkExperienceTableViewCell: UITableViewCell { ...@@ -107,27 +109,17 @@ class YHWorkExperienceTableViewCell: UITableViewCell {
let isShow = data?.isShowPrompts ?? false let isShow = data?.isShowPrompts ?? false
let message = data?.message ?? "" let message = data?.message ?? ""
var h = 51 var h = 51
if data?.id == .id13 {
h = 71
}
if isShow && message.count == 0 { if isShow && message.count == 0 {
h = h + 20 h = h + 20
} }
let itemView = YHWorkExperienceItemView() let itemView = YHWorkExperienceItemView()
itemView.dataSource = data itemView.dataSource = data
itemView.country = country
itemView.block = {[weak self] model in itemView.block = {[weak self] model in
guard let self = self else { return } guard let self = self else { return }
if let block = self.workExperienceBlock { if let block = self.workExperienceBlock {
block(model) block(model)
} }
} }
itemView.companyBlock = {[weak self] company in
guard let self = self else { return }
if let block = self.companyBlock {
block(company)
}
}
mainItemView.addSubview(itemView) mainItemView.addSubview(itemView)
itemView.snp.makeConstraints { make in itemView.snp.makeConstraints { make in
make.left.equalTo(18) make.left.equalTo(18)
...@@ -138,14 +130,15 @@ class YHWorkExperienceTableViewCell: UITableViewCell { ...@@ -138,14 +130,15 @@ class YHWorkExperienceTableViewCell: UITableViewCell {
y = y + h y = y + h
if i == 1 { if i == 1 {
let view = YHWorkExperienceSelectView(frame: CGRect(x: 0, y: y, width: Int(KScreenWidth) - 32, height: 386)) let view = YHWorkExperienceSelectView(frame: CGRect(x: 0, y: y, width: Int(KScreenWidth) - 32, height: 386))
view.selectItem = [selectItem]
view.dataSource = selectDataSource view.dataSource = selectDataSource
view.selectBlock = { [weak self] index in
guard let self = self else { return }
if let block = self.selectBlock {
block(index)
}
}
mainItemView.addSubview(view) mainItemView.addSubview(view)
// itemView.snp.makeConstraints { make in
// make.left.equalTo(18)
// make.top.equalTo(y)
// make.height.equalTo(386)
// make.right.equalTo(-18)
// }
y = y + 386 y = y + 386
} }
} }
......
...@@ -20,8 +20,8 @@ class YHWorkExperienceViewModel: YHBaseViewModel { ...@@ -20,8 +20,8 @@ class YHWorkExperienceViewModel: YHBaseViewModel {
func getBaseDataSource(_ isShowPrompt: Bool) -> [YHSectionWorkExperienceModel] { func getBaseDataSource(_ isShowPrompt: Bool) -> [YHSectionWorkExperienceModel] {
let item = YHWorkExperienceModel(id: .id1, isNeed: true, title: "用人单位", isUserKeyBoard: true, prompts: "请输入", message: mainModel.company_name, isShowPrompts: isShowPrompt, alertMessage:"请输入") let item = YHWorkExperienceModel(id: .id1, isNeed: true, title: "用人单位", isUserKeyBoard: true, prompts: "请输入", message: mainModel.company_name, isShowPrompts: isShowPrompt, alertMessage:"请输入")
let item1 = YHWorkExperienceModel(id: .id2, isNeed: true, title: "公司基本情况", isUserKeyBoard: false, prompts: "请选择", message: mainModel.industry, type: .nature, isShowPrompts: isShowPrompt, alertMessage:"请选择") let item1 = YHWorkExperienceModel(id: .id2, isNeed: true, title: "公司基本情况", isUserKeyBoard: false, prompts: "请选择", message: mainModel.industry, type: .company, isShowPrompts: isShowPrompt, alertMessage:"请选择")
let item2 = YHWorkExperienceModel(id: .id19, isNeed: true, title: "职位水平类别", isUserKeyBoard: false, prompts: "请选择", message: "\(mainModel.professional_level)", type: .level, isShowPrompts: isShowPrompt, alertMessage:"请选择") let item2 = YHWorkExperienceModel(id: .id3, isNeed: true, title: "职位水平类别", isUserKeyBoard: false, prompts: "请选择", message: "\(mainModel.professional_level)", type: .level, isShowPrompts: isShowPrompt, alertMessage:"请选择")
var section = YHSectionWorkExperienceModel() var section = YHSectionWorkExperienceModel()
section = YHSectionWorkExperienceModel(title: "企业信息", models: [item, item1, item2]) section = YHSectionWorkExperienceModel(title: "企业信息", models: [item, item1, item2])
return [section] return [section]
...@@ -30,122 +30,17 @@ class YHWorkExperienceViewModel: YHBaseViewModel { ...@@ -30,122 +30,17 @@ class YHWorkExperienceViewModel: YHBaseViewModel {
func updateModel(_ item: YHWorkExperienceModel) { func updateModel(_ item: YHWorkExperienceModel) {
guard let type = item.id else { return } guard let type = item.id else { return }
switch type { switch type {
case .id1: // 用人单位 case .id1: // 用人单位
mainModel.company_name = item.message ?? "" mainModel.company_name = item.message ?? ""
case .id2: // 用人单位性质 case .id2: // 用人单位性质
mainModel.industry = item.message ?? "" mainModel.industry = item.message ?? ""
case .id3: // 用人单位介绍 case .id3: // 职位水平类型
mainModel.company_introduce = item.message ?? ""
case .id4: // 用人单位官网
mainModel.company_website = item.message ?? ""
case .id5: // 工作地区国家
mainModel.location.country = item.message ?? ""
case .id6: // 工作城市 国内
mainModel.location.area = item.value ?? []
case .id7: // 工作城市国外
mainModel.location.foreign = item.message ?? ""
case .id8: // 职位
mainModel.position = item.message ?? ""
case .id9: // 入职年月
let format = DateFormatter()
format.dateFormat = "yyyy-MM"
if let selectDate = format.date(from:item.message ?? "") {
let selectTimeInterval = selectDate.timeIntervalSince1970
let currentTimeInterval = Date().timeIntervalSince1970
if selectTimeInterval > currentTimeInterval {
YHHUD.flash(message: "入职日期不能晚于当前日期")
} else {
guard let endDate = format.date(from: mainModel.departure_time) else {
mainModel.entry_time = item.message ?? ""
return
}
let endTimeInterval = endDate.timeIntervalSince1970
if selectTimeInterval > endTimeInterval {
YHHUD.flash(message: "入职日期不能晚于离职日期")
} else {
mainModel.entry_time = item.message ?? ""
}
}
}
case .id10: // 离职年月
let format = DateFormatter()
format.dateFormat = "yyyy-MM"
if let selectDate = format.date(from:item.message ?? ""), let startDate = format.date(from:mainModel.entry_time) {
let selectTimeInterval = selectDate.timeIntervalSince1970
let startTimeInterval = startDate.timeIntervalSince1970
if selectTimeInterval < startTimeInterval {
YHHUD.flash(message: "离职日期不能早于入职日期")
} else {
mainModel.departure_time = item.message ?? ""
}
} else {
mainModel.departure_time = item.message ?? ""
}
case .id11: // 工作证明文件
mainModel.work_certificate = item.message ?? ""
case .id12: // 职责性质
mainModel.duty = item.message ?? ""
case .id13: // 是否国际工作经验
mainModel.international_work_experience = Int(item.value?.first ?? "0") ?? 0
case .id14: // 企业人数规模
mainModel.company_member_total = Int(item.message ?? "0") ?? 0
case .id15: // 行政架构层级
mainModel.administrative_level = Int(item.value?.first ?? "0") ?? 0
case .id16: // 下属管理人数
mainModel.company_manage_total = Int(item.message ?? "0") ?? 0
case .id17: // 公司营业额/港元
mainModel.turnover = Int(item.message ?? "0") ?? 0
case .id18: // 公司性质/范畴/所属行业
mainModel.business_nature = item.message ?? ""
case .id19: // 职位水平类型
mainModel.professional_level = Int(item.value?.first ?? "0") ?? 0 mainModel.professional_level = Int(item.value?.first ?? "0") ?? 0
case .id20: // 高管证明文件 default : break
mainModel.executives_certificate = item.message ?? ""
case .id21: // 高管在职开始时间
let format = DateFormatter()
format.dateFormat = "yyyy-MM"
if let selectDate = format.date(from:item.message ?? "") {
let selectTimeInterval = selectDate.timeIntervalSince1970
let currentTimeInterval = Date().timeIntervalSince1970
if selectTimeInterval > currentTimeInterval {
YHHUD.flash(message: "高管在职开始时间不能晚于当前日期")
} else {
guard let endDate = format.date(from: mainModel.top_manager_end_at) else {
mainModel.top_manager_start_at = item.message ?? ""
return
}
let endTimeInterval = endDate.timeIntervalSince1970
if selectTimeInterval > endTimeInterval {
YHHUD.flash(message: "高管在职开始时间不能晚于离职日期")
} else {
mainModel.top_manager_start_at = item.message ?? ""
}
}
}
case .id22: // 高管在职结束时间
let format = DateFormatter()
format.dateFormat = "yyyy-MM"
if let selectDate = format.date(from:item.message ?? ""), let startDate = format.date(from:mainModel.top_manager_start_at) {
let selectTimeInterval = selectDate.timeIntervalSince1970
let startTimeInterval = startDate.timeIntervalSince1970
if selectTimeInterval < startTimeInterval {
YHHUD.flash(message: "高管在职结束时间不能早于开始日期")
} else {
mainModel.top_manager_end_at = item.message ?? ""
}
} else {
mainModel.top_manager_end_at = item.message ?? ""
}
} }
} }
func updateModel(_ item: YHCompanyModelListModel) {
mainModel.company_name = item.company_name ?? ""
mainModel.company_introduce = item.company_introduce ?? ""
mainModel.company_website = item.company_link ?? ""
}
func updateWduty(_ value: String) { func updateWduty(_ value: String) {
mainModel.wduty = value mainModel.wduty = value
} }
...@@ -180,10 +75,10 @@ class YHWorkExperienceViewModel: YHBaseViewModel { ...@@ -180,10 +75,10 @@ class YHWorkExperienceViewModel: YHBaseViewModel {
} }
} }
func requestWorkDetail(_ workId: String, callBackBlock:@escaping (_ success: Bool?, _ error:YHErrorModel?)->()) { func requestWorkDetail(_ orderId: String, _ workId: String, callBackBlock:@escaping (_ success: Bool?, _ error:YHErrorModel?)->()) {
// let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.detail + "?id=\(workId)" // let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.detail + "?id=\(workId)"
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.detail let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.detail
let param: [String: Any] = ["id": workId] let param: [String: Any] = ["work_id": workId, "order_id": orderId]
let _ = YHNetRequest.getRequest(url: strUrl,params: param) { [weak self] json, code in let _ = YHNetRequest.getRequest(url: strUrl,params: param) { [weak self] json, code in
//1. json字符串 转 对象 //1. json字符串 转 对象
...@@ -242,7 +137,7 @@ class YHWorkExperienceViewModel: YHBaseViewModel { ...@@ -242,7 +137,7 @@ class YHWorkExperienceViewModel: YHBaseViewModel {
"executives_certificate": mainModel.executives_certificate, "executives_certificate": mainModel.executives_certificate,
"file": file, "file": file,
"highlights": mainModel.highlights, "highlights": mainModel.highlights,
"id": mainModel.id, // "id": mainModel.id,
"order_id": orderID, "order_id": orderID,
"industry": mainModel.industry, "industry": mainModel.industry,
"international_work_experience": mainModel.international_work_experience, "international_work_experience": mainModel.international_work_experience,
...@@ -282,7 +177,7 @@ class YHWorkExperienceViewModel: YHBaseViewModel { ...@@ -282,7 +177,7 @@ class YHWorkExperienceViewModel: YHBaseViewModel {
callBackBlock(false,nil) callBackBlock(false,nil)
return return
} }
self.mainModel.id = result.id // self.mainModel.id = result.id
callBackBlock(true, nil) callBackBlock(true, nil)
} else { } else {
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg) let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
......
//
// YHWorkIntroductionViewModel.swift
// galaxy
//
// Created by EDY on 2024/2/21.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import Alamofire
class YHWorkIntroductionViewModel: YHBaseViewModel {
var introducetionExampleModels: [YHWorkExampleModel]?
override init() {
super.init()
}
func requestIntroducetionExample(callBackBlock:@escaping (_ success: Bool?, _ error:YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.projectExample
let _ = YHNetRequest.getRequest(url: strUrl) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
if json.code == 200 {
guard let dic = json.data?.peel as? [Any], let result = [YHWorkExampleModel].deserialize(from: dic) else {
callBackBlock(false,nil)
return
}
self.introducetionExampleModels = result as? [YHWorkExampleModel]
callBackBlock(true, nil)
} else {
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBackBlock(false, error)
}
} failBlock: { err in
callBackBlock(false,err)
}
}
// 0保存 1下一步
func saveWorkProjectDetail(_ workModel: YHWorkExperienceDetailModel, projectModel: YHWorkExperienceProjectModel, callBackBlock:@escaping (_ success: Bool, _ error:YHErrorModel?)->()) {
let params: [String : Any] = ["id": projectModel.id ?? 0,
"order_id": workModel.order_id,
"work_id": workModel.id,
"project_name": projectModel.project_name ?? "",
"project_start_time": projectModel.project_start_time ?? "",
"project_end_time": projectModel.project_end_time ?? "",
"project_highlights": projectModel.project_highlights ?? 0,
"create_from_appid": projectModel.create_from_appid ?? 2,
"update_from_appid": projectModel.create_from_appid ?? 2
]
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.saveProject
let _ = YHNetRequest.postRequest(url: strUrl, params: params) { [weak self] json, code in
guard let self = self else { return }
if json.code == 200 {
callBackBlock(true, nil)
} else {
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBackBlock(false, error)
}
} failBlock: { err in
callBackBlock(false, err)
}
}
func requestFileMessage(_ url: String, callBackBlock:@escaping (_ success: Bool, _ model: YHFileContent?,_ error:YHErrorModel?)->()) {
// let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.ocrFileContent + "?file_url=\(url)"
let strUrl = YHBaseUrlManager.shared.curOssURL() + YHAllApiName.OCR.normal
let param: [String: Any] = ["url": url]
let _ = YHNetRequest.postRequest(url: strUrl,params:param) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
if json.code == 200 {
guard let dic = json.data?.peel as? [String : Any], let result = YHFileContent.deserialize(from: dic) else {
callBackBlock(false, nil, nil)
return
}
callBackBlock(true, result, nil)
} else {
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBackBlock(false, nil,error)
}
} failBlock: { err in
callBackBlock(false, nil, err)
}
}
}
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
import UIKit import UIKit
class YHWorkItemListViewModel: YHBaseViewModel { class YHWorkItemListViewModel: YHBaseViewModel {
var mainModel: YHWorkModel = YHWorkModel()
var mainModel: [YHWorkItemListModel]? var listModel: [YHWorkItemListModel]?
override init() { override init() {
super.init() super.init()
...@@ -29,8 +29,9 @@ class YHWorkItemListViewModel: YHBaseViewModel { ...@@ -29,8 +29,9 @@ class YHWorkItemListViewModel: YHBaseViewModel {
callBackBlock([],nil) callBackBlock([],nil)
return return
} }
self.mainModel = result.list self.mainModel = result
callBackBlock(self.mainModel, nil) self.listModel = result.list
callBackBlock(self.listModel, nil)
} else { } else {
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg) let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBackBlock([], error) callBackBlock([], error)
...@@ -73,4 +74,23 @@ class YHWorkItemListViewModel: YHBaseViewModel { ...@@ -73,4 +74,23 @@ class YHWorkItemListViewModel: YHBaseViewModel {
callBackBlock(false, err) callBackBlock(false, err)
} }
} }
func requestWorkTimeRemarkWorkExperience(_ orderId: String, callBackBlock:@escaping (_ success: Bool?, _ error:YHErrorModel?)->()) {
let params: [String : Any] = ["order_id": orderId,
"work_time_overlap_remark": self.mainModel.work_time_overlap_remark,
"work_time_empty_remark": self.mainModel.work_time_empty_remark]
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.saveWorkTimeRemark
let _ = YHNetRequest.postRequest(url: strUrl, params: params) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
if json.code == 200 {
callBackBlock(true, nil)
} else {
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBackBlock(false, error)
}
} failBlock: { err in
callBackBlock(false, err)
}
}
} }
...@@ -225,12 +225,13 @@ class YHAllApiName { ...@@ -225,12 +225,13 @@ class YHAllApiName {
struct WorkExperience { struct WorkExperience {
//工作经验列表 //工作经验列表
static let list = "infoflow/work/list" static let list = "infoflow/work/v1/list"
//工作经验详情 //工作经验详情
static let detail = "infoflow/work/detail" static let detail = "infoflow/work/v1/workDetail"
//工作经验保存 //工作经验保存
static let save = "infoflow/work/save" static let save = "infoflow/work/save"
static let saveAll = "infoflow/work/save-all" static let saveAll = "infoflow/work/save-all"
static let saveWorkTimeRemark = "infoflow/work/v1/saveWorkTimeRemark"
//公司列表 //公司列表
static let company = "infoflow/company/search" static let company = "infoflow/company/search"
//工作经历删除 //工作经历删除
...@@ -631,4 +632,15 @@ class YHAllApiName { ...@@ -631,4 +632,15 @@ class YHAllApiName {
static let result = "super-app/renewal/renewal-result" static let result = "super-app/renewal/renewal-result"
} }
struct IncomeRecord {
// 收入信息
static let incomeList = "infoflow/order/income/get-income-work-company-list"
// 公司收入详情
static let incomeDetail = "infoflow/order/income/detail"
// 收入信息编辑
static let updateDetail = "infoflow/order/income/update-detail"
// 收入情况保存和提交
static let incomeUpdate = "infoflow/order/income/update"
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment