Compare commits
13 Commits
4dba7e5419
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8d7ab063c1 | ||
|
|
350affe84e | ||
|
|
c8828c7f57 | ||
|
|
1476c04be1 | ||
|
|
18e0c52fe6 | ||
|
|
599077de2d | ||
|
|
787326cee7 | ||
|
|
f8c8d2ffa3 | ||
|
|
ec55113ccb | ||
|
|
86c463c811 | ||
|
|
75c0b5dcc9 | ||
|
|
4731f2a31e | ||
|
|
105e7032a3 |
@@ -68,7 +68,9 @@
|
|||||||
797484782DA67515003EEB47 /* NewTraningViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 797484772DA67515003EEB47 /* NewTraningViewModel.swift */; };
|
797484782DA67515003EEB47 /* NewTraningViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 797484772DA67515003EEB47 /* NewTraningViewModel.swift */; };
|
||||||
79B966382AB0651C00308A8D /* VehicleLogoutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79B966372AB0651C00308A8D /* VehicleLogoutView.swift */; };
|
79B966382AB0651C00308A8D /* VehicleLogoutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79B966372AB0651C00308A8D /* VehicleLogoutView.swift */; };
|
||||||
79BF24412E9CEFB300FA5F1E /* OnlineVehiclesEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79BF24402E9CEFB300FA5F1E /* OnlineVehiclesEntryView.swift */; };
|
79BF24412E9CEFB300FA5F1E /* OnlineVehiclesEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79BF24402E9CEFB300FA5F1E /* OnlineVehiclesEntryView.swift */; };
|
||||||
|
79C95CD22F58101E00230593 /* GongdanpiciTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79C95CD12F58101E00230593 /* GongdanpiciTool.swift */; };
|
||||||
79CB07CC2AA8465A00154B61 /* UserPermission.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79CB07CB2AA8465A00154B61 /* UserPermission.swift */; };
|
79CB07CC2AA8465A00154B61 /* UserPermission.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79CB07CB2AA8465A00154B61 /* UserPermission.swift */; };
|
||||||
|
79CE24AA2EF52EAF007FCF90 /* IdentityAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79CE24A92EF52EAF007FCF90 /* IdentityAlertView.swift */; };
|
||||||
79CECC122A89BD1A00B95D8B /* MessageCenterController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79CECC112A89BD1A00B95D8B /* MessageCenterController.swift */; };
|
79CECC122A89BD1A00B95D8B /* MessageCenterController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79CECC112A89BD1A00B95D8B /* MessageCenterController.swift */; };
|
||||||
79CECC192A89EE6A00B95D8B /* ReviewFailedController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79CECC182A89EE6A00B95D8B /* ReviewFailedController.swift */; };
|
79CECC192A89EE6A00B95D8B /* ReviewFailedController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79CECC182A89EE6A00B95D8B /* ReviewFailedController.swift */; };
|
||||||
79CECC1B2A89F83800B95D8B /* AdditionalPhotoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79CECC1A2A89F83800B95D8B /* AdditionalPhotoController.swift */; };
|
79CECC1B2A89F83800B95D8B /* AdditionalPhotoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79CECC1A2A89F83800B95D8B /* AdditionalPhotoController.swift */; };
|
||||||
@@ -206,7 +208,9 @@
|
|||||||
797484772DA67515003EEB47 /* NewTraningViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewTraningViewModel.swift; sourceTree = "<group>"; };
|
797484772DA67515003EEB47 /* NewTraningViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewTraningViewModel.swift; sourceTree = "<group>"; };
|
||||||
79B966372AB0651C00308A8D /* VehicleLogoutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleLogoutView.swift; sourceTree = "<group>"; };
|
79B966372AB0651C00308A8D /* VehicleLogoutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleLogoutView.swift; sourceTree = "<group>"; };
|
||||||
79BF24402E9CEFB300FA5F1E /* OnlineVehiclesEntryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnlineVehiclesEntryView.swift; sourceTree = "<group>"; };
|
79BF24402E9CEFB300FA5F1E /* OnlineVehiclesEntryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnlineVehiclesEntryView.swift; sourceTree = "<group>"; };
|
||||||
|
79C95CD12F58101E00230593 /* GongdanpiciTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GongdanpiciTool.swift; sourceTree = "<group>"; };
|
||||||
79CB07CB2AA8465A00154B61 /* UserPermission.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserPermission.swift; sourceTree = "<group>"; };
|
79CB07CB2AA8465A00154B61 /* UserPermission.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserPermission.swift; sourceTree = "<group>"; };
|
||||||
|
79CE24A92EF52EAF007FCF90 /* IdentityAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdentityAlertView.swift; sourceTree = "<group>"; };
|
||||||
79CECC112A89BD1A00B95D8B /* MessageCenterController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageCenterController.swift; sourceTree = "<group>"; };
|
79CECC112A89BD1A00B95D8B /* MessageCenterController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageCenterController.swift; sourceTree = "<group>"; };
|
||||||
79CECC182A89EE6A00B95D8B /* ReviewFailedController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewFailedController.swift; sourceTree = "<group>"; };
|
79CECC182A89EE6A00B95D8B /* ReviewFailedController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewFailedController.swift; sourceTree = "<group>"; };
|
||||||
79CECC1A2A89F83800B95D8B /* AdditionalPhotoController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionalPhotoController.swift; sourceTree = "<group>"; };
|
79CECC1A2A89F83800B95D8B /* AdditionalPhotoController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionalPhotoController.swift; sourceTree = "<group>"; };
|
||||||
@@ -327,6 +331,8 @@
|
|||||||
792EE0942AA74E0A00A212AB /* PushNotiCommonView.swift */,
|
792EE0942AA74E0A00A212AB /* PushNotiCommonView.swift */,
|
||||||
792EE0962AA74E5800A212AB /* PushNotiCommonTool.swift */,
|
792EE0962AA74E5800A212AB /* PushNotiCommonTool.swift */,
|
||||||
79BF24402E9CEFB300FA5F1E /* OnlineVehiclesEntryView.swift */,
|
79BF24402E9CEFB300FA5F1E /* OnlineVehiclesEntryView.swift */,
|
||||||
|
79CE24A92EF52EAF007FCF90 /* IdentityAlertView.swift */,
|
||||||
|
79C95CD12F58101E00230593 /* GongdanpiciTool.swift */,
|
||||||
);
|
);
|
||||||
path = View;
|
path = View;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1080,10 +1086,14 @@
|
|||||||
inputFileListPaths = (
|
inputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling-resources-${CONFIGURATION}-input-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
);
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
name = "[CP] Copy Pods Resources";
|
name = "[CP] Copy Pods Resources";
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling-resources-${CONFIGURATION}-output-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
);
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling-resources.sh\"\n";
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling-resources.sh\"\n";
|
||||||
@@ -1179,6 +1189,7 @@
|
|||||||
791887892A7CE79E007EA0C1 /* LoginController.swift in Sources */,
|
791887892A7CE79E007EA0C1 /* LoginController.swift in Sources */,
|
||||||
791887A42A80CA30007EA0C1 /* ResponseModel.swift in Sources */,
|
791887A42A80CA30007EA0C1 /* ResponseModel.swift in Sources */,
|
||||||
7938A8452E40A5F10017508A /* VehicleMonitoringVideoDetailController.swift in Sources */,
|
7938A8452E40A5F10017508A /* VehicleMonitoringVideoDetailController.swift in Sources */,
|
||||||
|
79C95CD22F58101E00230593 /* GongdanpiciTool.swift in Sources */,
|
||||||
794FBB0D2A8F040D00D57BB8 /* HistoryController.swift in Sources */,
|
794FBB0D2A8F040D00D57BB8 /* HistoryController.swift in Sources */,
|
||||||
7918878D2A8081D4007EA0C1 /* ActionStrings.swift in Sources */,
|
7918878D2A8081D4007EA0C1 /* ActionStrings.swift in Sources */,
|
||||||
791887972A80C6CD007EA0C1 /* LocalizedStrings.swift in Sources */,
|
791887972A80C6CD007EA0C1 /* LocalizedStrings.swift in Sources */,
|
||||||
@@ -1198,6 +1209,7 @@
|
|||||||
791887AE2A80F943007EA0C1 /* UserData.swift in Sources */,
|
791887AE2A80F943007EA0C1 /* UserData.swift in Sources */,
|
||||||
79FB75EE2A9898EB00DB00A4 /* AcceptOrderView.swift in Sources */,
|
79FB75EE2A9898EB00DB00A4 /* AcceptOrderView.swift in Sources */,
|
||||||
791887BA2A82495D007EA0C1 /* EnvironmentStrings.swift in Sources */,
|
791887BA2A82495D007EA0C1 /* EnvironmentStrings.swift in Sources */,
|
||||||
|
79CE24AA2EF52EAF007FCF90 /* IdentityAlertView.swift in Sources */,
|
||||||
79D964E02E77FE2100309946 /* AppealInputViewController.swift in Sources */,
|
79D964E02E77FE2100309946 /* AppealInputViewController.swift in Sources */,
|
||||||
791887A62A80D50C007EA0C1 /* ParametersList.swift in Sources */,
|
791887A62A80D50C007EA0C1 /* ParametersList.swift in Sources */,
|
||||||
);
|
);
|
||||||
@@ -1303,12 +1315,10 @@
|
|||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = OrderScheduling/OrderSchedulingRelease.entitlements;
|
CODE_SIGN_ENTITLEMENTS = OrderScheduling/OrderSchedulingRelease.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "iPhone Distribution";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: SINO ASSISTANCE INDUSTRIAL CO., LTD. (X9WF5T89LV)";
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CODE_SIGN_STYLE = Manual;
|
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = X9WF5T89LV;
|
||||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = X9WF5T89LV;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/OrderScheduling/Player/Classes/ijkplayer",
|
"$(PROJECT_DIR)/OrderScheduling/Player/Classes/ijkplayer",
|
||||||
@@ -1335,11 +1345,10 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.0.5;
|
MARKETING_VERSION = 4.0.8;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.sino.supplier;
|
PRODUCT_BUNDLE_IDENTIFIER = com.sino.supplier;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "supplier adhoc";
|
|
||||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
SUPPORTS_MACCATALYST = NO;
|
SUPPORTS_MACCATALYST = NO;
|
||||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
@@ -1357,12 +1366,10 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = OrderSchedulingNotificationService/OrderSchedulingNotificationService.entitlements;
|
CODE_SIGN_ENTITLEMENTS = OrderSchedulingNotificationService/OrderSchedulingNotificationService.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Distribution";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: SINO ASSISTANCE INDUSTRIAL CO., LTD. (X9WF5T89LV)";
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CODE_SIGN_STYLE = Manual;
|
|
||||||
CURRENT_PROJECT_VERSION = 8;
|
CURRENT_PROJECT_VERSION = 8;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = X9WF5T89LV;
|
||||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = X9WF5T89LV;
|
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = OrderSchedulingNotificationService/Info.plist;
|
INFOPLIST_FILE = OrderSchedulingNotificationService/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = OrderSchedulingNotificationService;
|
INFOPLIST_KEY_CFBundleDisplayName = OrderSchedulingNotificationService;
|
||||||
@@ -1382,7 +1389,6 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = com.sino.supplier.OrderSchedulingNotificationService;
|
PRODUCT_BUNDLE_IDENTIFIER = com.sino.supplier.OrderSchedulingNotificationService;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "sino supplier notification service extension adhoc";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "OrderSchedulingNotificationService/OrderSchedulingNotificationService-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "OrderSchedulingNotificationService/OrderSchedulingNotificationService-Bridging-Header.h";
|
||||||
@@ -1550,7 +1556,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.0.5;
|
MARKETING_VERSION = 4.0.8;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.sino.supplier;
|
PRODUCT_BUNDLE_IDENTIFIER = com.sino.supplier;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -1575,11 +1581,10 @@
|
|||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = OrderScheduling/OrderSchedulingRelease.entitlements;
|
CODE_SIGN_ENTITLEMENTS = OrderScheduling/OrderSchedulingRelease.entitlements;
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: SINO ASSISTANCE INDUSTRIAL CO., LTD. (X9WF5T89LV)";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Manual;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = X9WF5T89LV;
|
||||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = X9WF5T89LV;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/OrderScheduling/Player/Classes/ijkplayer",
|
"$(PROJECT_DIR)/OrderScheduling/Player/Classes/ijkplayer",
|
||||||
@@ -1606,11 +1611,10 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.0.5;
|
MARKETING_VERSION = 4.0.8;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.sino.supplier;
|
PRODUCT_BUNDLE_IDENTIFIER = com.sino.supplier;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = SinoSupplierDistribution;
|
|
||||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
SUPPORTS_MACCATALYST = NO;
|
SUPPORTS_MACCATALYST = NO;
|
||||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
@@ -1666,12 +1670,10 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = OrderSchedulingNotificationService/OrderSchedulingNotificationService.entitlements;
|
CODE_SIGN_ENTITLEMENTS = OrderSchedulingNotificationService/OrderSchedulingNotificationService.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Distribution";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: SINO ASSISTANCE INDUSTRIAL CO., LTD. (X9WF5T89LV)";
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CODE_SIGN_STYLE = Manual;
|
|
||||||
CURRENT_PROJECT_VERSION = 8;
|
CURRENT_PROJECT_VERSION = 8;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = X9WF5T89LV;
|
||||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = X9WF5T89LV;
|
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = OrderSchedulingNotificationService/Info.plist;
|
INFOPLIST_FILE = OrderSchedulingNotificationService/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = OrderSchedulingNotificationService;
|
INFOPLIST_KEY_CFBundleDisplayName = OrderSchedulingNotificationService;
|
||||||
@@ -1691,7 +1693,6 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = com.sino.supplier.OrderSchedulingNotificationService;
|
PRODUCT_BUNDLE_IDENTIFIER = com.sino.supplier.OrderSchedulingNotificationService;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "sino supplier notification service extension distr";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "OrderSchedulingNotificationService/OrderSchedulingNotificationService-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "OrderSchedulingNotificationService/OrderSchedulingNotificationService-Bridging-Header.h";
|
||||||
|
|||||||
23
OrderScheduling/Assets.xcassets/Mine/mine_info_manage.imageset/Contents.json
vendored
Normal file
23
OrderScheduling/Assets.xcassets/Mine/mine_info_manage.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "mine_info_manage.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "mine_info_manage@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "mine_info_manage@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
OrderScheduling/Assets.xcassets/Mine/mine_info_manage.imageset/mine_info_manage.png
vendored
Normal file
BIN
OrderScheduling/Assets.xcassets/Mine/mine_info_manage.imageset/mine_info_manage.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 402 B |
BIN
OrderScheduling/Assets.xcassets/Mine/mine_info_manage.imageset/mine_info_manage@2x.png
vendored
Normal file
BIN
OrderScheduling/Assets.xcassets/Mine/mine_info_manage.imageset/mine_info_manage@2x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 712 B |
BIN
OrderScheduling/Assets.xcassets/Mine/mine_info_manage.imageset/mine_info_manage@3x.png
vendored
Normal file
BIN
OrderScheduling/Assets.xcassets/Mine/mine_info_manage.imageset/mine_info_manage@3x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
23
OrderScheduling/Assets.xcassets/Rescue/IdentityAlertNotice.imageset/Contents.json
vendored
Normal file
23
OrderScheduling/Assets.xcassets/Rescue/IdentityAlertNotice.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "IdentityAlertNotice.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "IdentityAlertNotice@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "IdentityAlertNotice@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
OrderScheduling/Assets.xcassets/Rescue/IdentityAlertNotice.imageset/IdentityAlertNotice.png
vendored
Normal file
BIN
OrderScheduling/Assets.xcassets/Rescue/IdentityAlertNotice.imageset/IdentityAlertNotice.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
BIN
OrderScheduling/Assets.xcassets/Rescue/IdentityAlertNotice.imageset/IdentityAlertNotice@2x.png
vendored
Normal file
BIN
OrderScheduling/Assets.xcassets/Rescue/IdentityAlertNotice.imageset/IdentityAlertNotice@2x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
BIN
OrderScheduling/Assets.xcassets/Rescue/IdentityAlertNotice.imageset/IdentityAlertNotice@3x.png
vendored
Normal file
BIN
OrderScheduling/Assets.xcassets/Rescue/IdentityAlertNotice.imageset/IdentityAlertNotice@3x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.5 KiB |
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import DDControlsKit_Private
|
import DDControlsKit_Private
|
||||||
|
import DDLogKit_Private
|
||||||
|
|
||||||
open class ZDViewController : DDViewController {
|
open class ZDViewController : DDViewController {
|
||||||
public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
|
public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
|
||||||
@@ -24,4 +25,8 @@ open class ZDViewController : DDViewController {
|
|||||||
|
|
||||||
open func reloadData() {
|
open func reloadData() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
DDLog(message: "=================\(type(of: self))销毁了=================")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ open class AppUpdateTool : NSObject {
|
|||||||
UIApplication.shared.dd_keyWindow.rootViewController?.view.dd_showHUD()
|
UIApplication.shared.dd_keyWindow.rootViewController?.view.dd_showHUD()
|
||||||
})
|
})
|
||||||
.flatMapLatest { (type,_) in
|
.flatMapLatest { (type,_) in
|
||||||
return Observable.zip(RQ.versionCheck(parameters: VersionCheckParameters(version: APPINFO.bundleVersionShort())).asObservable(), Observable.just(type))
|
return Observable.zip(RQ.updateVersion(parameters: UpdateVersionParameters(appVersion: APPINFO.bundleVersionShort(), supplierId: UserData.default.supplierId)).asObservable(), Observable.just(type))
|
||||||
}
|
}
|
||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
.do(onNext: { (_,_) in
|
.do(onNext: { (_,_) in
|
||||||
@@ -70,18 +70,23 @@ open class AppUpdateTool : NSObject {
|
|||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
.subscribe(onNext: {[weak self] (response,type) in
|
.subscribe(onNext: {[weak self] (response,type) in
|
||||||
if response?.success == true {
|
if response?.success == true {
|
||||||
if self?.canUpdate(localVersion: APPINFO.bundleVersionShort(), onlineVersion: response?.data?.appVersion ?? "0") == true {
|
|
||||||
|
if response?.data == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if self?.canUpdate(localVersion: APPINFO.bundleVersionShort(), onlineVersion: response?.data?.newAppVersion ?? "0") == true {
|
||||||
if type == .auto {
|
if type == .auto {
|
||||||
if response?.data?.update.code == .YES || self?.shouldPresentEntry() == true {
|
if response?.data?.update == UpdateVersionDataModel.ForceUpdate.force.rawValue || self?.shouldPresentEntry() == true {
|
||||||
if let appUpdateView = self?.appUpdateView {
|
if let appUpdateView = self?.appUpdateView {
|
||||||
appUpdateView.isForce(isForce: response?.data?.update.code == .YES ? true : false)
|
appUpdateView.isForce(isForce: (response?.data?.update == UpdateVersionDataModel.ForceUpdate.force.rawValue) ? true : false)
|
||||||
appUpdateView.contentLabel.text = response?.data?.description
|
appUpdateView.contentLabel.text = response?.data?.description
|
||||||
ENTRY.showAppUpdateEntry(view: appUpdateView,name: appUpdateEntry)
|
ENTRY.showAppUpdateEntry(view: appUpdateView,name: appUpdateEntry)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else if type == .manual {
|
}else if type == .manual {
|
||||||
if let appUpdateView = self?.appUpdateView {
|
if let appUpdateView = self?.appUpdateView {
|
||||||
appUpdateView.isForce(isForce: response?.data?.update.code == .YES ? true : false)
|
appUpdateView.isForce(isForce: (response?.data?.update == UpdateVersionDataModel.ForceUpdate.force.rawValue) ? true : false)
|
||||||
appUpdateView.contentLabel.text = response?.data?.description
|
appUpdateView.contentLabel.text = response?.data?.description
|
||||||
ENTRY.showAppUpdateEntry(view: appUpdateView,name: appUpdateEntry)
|
ENTRY.showAppUpdateEntry(view: appUpdateView,name: appUpdateEntry)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import UIKit
|
||||||
import WebKit
|
import WebKit
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import DDLogKit_Private
|
import DDLogKit_Private
|
||||||
@@ -154,10 +155,76 @@ extension WebViewController : WKScriptMessageHandler {
|
|||||||
let code = params?["code"] as? String
|
let code = params?["code"] as? String
|
||||||
let vc = VehicleMonitorHistoryController(code: code)
|
let vc = VehicleMonitorHistoryController(code: code)
|
||||||
navigationController?.pushViewController(vc, animated: true)
|
navigationController?.pushViewController(vc, animated: true)
|
||||||
|
} else if action == "copyToClipboard" {
|
||||||
|
let paramsAny = dict?["params"]
|
||||||
|
|
||||||
|
var output: String? = nil
|
||||||
|
|
||||||
|
if let paramsDict = paramsAny as? [String: Any] {
|
||||||
|
if let t = (paramsDict["text"] as? String) ?? (paramsDict["value"] as? String) {
|
||||||
|
let trimmed = t.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
if trimmed.isEmpty == false { output = trimmed }
|
||||||
|
}
|
||||||
|
if output == nil {
|
||||||
|
output = dictToMultilineKV(paramsDict)
|
||||||
|
}
|
||||||
|
} else if let paramsStr = paramsAny as? String {
|
||||||
|
if let multiline = jsonToMultilineKV(paramsStr) {
|
||||||
|
output = multiline
|
||||||
|
} else {
|
||||||
|
let trimmed = paramsStr.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
if trimmed.isEmpty == false { output = trimmed }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let finalText = (output ?? "").trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
guard finalText.isEmpty == false else {
|
||||||
|
view.dd_makeToast("复制内容为空")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
DispatchQueue.main.async {[weak self] in
|
||||||
|
UIPasteboard.general.string = finalText
|
||||||
|
self?.view.dd_makeToast("已复制")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func unwrapEscapedJSONString(_ raw: String) -> String {
|
||||||
|
let trimmed = raw.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
if trimmed.hasPrefix("\""), trimmed.hasSuffix("\""), trimmed.count >= 2 {
|
||||||
|
return String(trimmed.dropFirst().dropLast())
|
||||||
|
.replacingOccurrences(of: "\\\"", with: "\"")
|
||||||
|
.replacingOccurrences(of: "\\\\", with: "\\")
|
||||||
|
}
|
||||||
|
return trimmed
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsonToMultilineKV(_ json: String) -> String? {
|
||||||
|
let s = unwrapEscapedJSONString(json)
|
||||||
|
guard let data = s.data(using: .utf8) else { return nil }
|
||||||
|
|
||||||
|
guard let obj = try? JSONSerialization.jsonObject(with: data, options: []) else { return nil }
|
||||||
|
|
||||||
|
guard let dict = obj as? [String: Any] else { return nil }
|
||||||
|
return dictToMultilineKV(dict)
|
||||||
|
}
|
||||||
|
|
||||||
|
func dictToMultilineKV(_ dict: [String: Any]) -> String {
|
||||||
|
|
||||||
|
let lines = dict
|
||||||
|
.map { (k, v) -> String in
|
||||||
|
let key = k.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
.replacingOccurrences(of: ":", with: ":")
|
||||||
|
let keyOut = key.hasSuffix(":") ? key : (key + ":")
|
||||||
|
return "\(keyOut)\(String(describing: v))"
|
||||||
|
}
|
||||||
|
.sorted()
|
||||||
|
|
||||||
|
return lines.joined(separator: "\n")
|
||||||
|
}
|
||||||
|
|
||||||
extension WebViewController : WKNavigationDelegate,WKUIDelegate {
|
extension WebViewController : WKNavigationDelegate,WKUIDelegate {
|
||||||
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
|
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
|
||||||
view.dd_hideHUD()
|
view.dd_hideHUD()
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ open class WebViewTool : NSObject {
|
|||||||
public var h5Models : DispatchAppH5UrlDataModel?
|
public var h5Models : DispatchAppH5UrlDataModel?
|
||||||
|
|
||||||
public var bannerInMineDataSources : [ConfigByCodeDataModel.ConfigByCodeBannerModel]?
|
public var bannerInMineDataSources : [ConfigByCodeDataModel.ConfigByCodeBannerModel]?
|
||||||
|
public var supplierAppIsUserNewReportRelay = ReplayRelay<Any?>.create(bufferSize: 1)
|
||||||
|
public var supplierAppIsUserNewReport : Bool = false
|
||||||
|
|
||||||
enum WebViewNameEnum : String {
|
enum WebViewNameEnum : String {
|
||||||
case todoList = "待办事项"
|
case todoList = "待办事项"
|
||||||
@@ -29,7 +31,7 @@ open class WebViewTool : NSObject {
|
|||||||
case driverManage = "司机管理"
|
case driverManage = "司机管理"
|
||||||
case invoicingNotify = "工单批次"
|
case invoicingNotify = "工单批次"
|
||||||
case roadAndbridgeTollReimbursement = "路桥费报销"
|
case roadAndbridgeTollReimbursement = "路桥费报销"
|
||||||
case reporting = "报备(废弃)"
|
case reporting = " 报备 "
|
||||||
case reportingList = "报备查看"
|
case reportingList = "报备查看"
|
||||||
case supplySettlement = "补结算单"
|
case supplySettlement = "补结算单"
|
||||||
case workOrderDetail = "工单详情"
|
case workOrderDetail = "工单详情"
|
||||||
@@ -45,6 +47,8 @@ open class WebViewTool : NSObject {
|
|||||||
case reportIndex = "报备"
|
case reportIndex = "报备"
|
||||||
case vehicleAlarmDetail = "报警详情"
|
case vehicleAlarmDetail = "报警详情"
|
||||||
case vehicleAlarmList = "车辆报警"
|
case vehicleAlarmList = "车辆报警"
|
||||||
|
case kpiCaseNew = "服务商案件和车辆情况统计"
|
||||||
|
case managerPeople = "管理人员"
|
||||||
}
|
}
|
||||||
|
|
||||||
public override init() {
|
public override init() {
|
||||||
@@ -158,12 +162,29 @@ open class WebViewTool : NSObject {
|
|||||||
case .vehicleAlarmDetail:
|
case .vehicleAlarmDetail:
|
||||||
vc = WebViewController(showNavBar:true, title: WebViewNameEnum.vehicleAlarmDetail.rawValue, url: "\((h5Models?.vehicleAlarmDetail)!)?token=\((USER.token)!)"+(appending ?? ""))
|
vc = WebViewController(showNavBar:true, title: WebViewNameEnum.vehicleAlarmDetail.rawValue, url: "\((h5Models?.vehicleAlarmDetail)!)?token=\((USER.token)!)"+(appending ?? ""))
|
||||||
break
|
break
|
||||||
|
case .kpiCaseNew:
|
||||||
|
vc = WebViewController(showNavBar:true, title: nil, url: "\((h5Models?.kpiCaseNew)!)?token=\((USER.token)!)"+(appending ?? ""))
|
||||||
|
break
|
||||||
|
case .managerPeople:
|
||||||
|
vc = WebViewController(showNavBar:false, title: nil, url: "\((h5Models?.managerPeople)!)?token=\((USER.token)!)"+(appending ?? ""))
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
if let vc {
|
if let vc {
|
||||||
let tabVc = UIApplication.shared.dd_keyWindow.rootViewController as? MainTabBarController
|
let tabVc = UIApplication.shared.dd_keyWindow.rootViewController as? MainTabBarController
|
||||||
let nav = tabVc?.selectedViewController as? UINavigationController
|
let nav = tabVc?.selectedViewController as? UINavigationController
|
||||||
nav?.pushViewController(vc, animated: true)
|
if let top = nav?.topViewController, top.isMember(of: type(of: vc)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
nav?.pushViewController(vc, animated: true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func openReportIndex(queryType: Int,userOrderId: Int,orderCode: String,type: Int,userOrderCode: String,supplierId: Int) {
|
||||||
|
if supplierAppIsUserNewReport == true {
|
||||||
|
open(name: .reportIndex,appending: "&userOrderId=\(userOrderId)&type=\(type)&userOrderCode=\(userOrderCode)&supplierId=\(supplierId)")
|
||||||
|
}else{
|
||||||
|
open(name: .reporting,appending: "&queryType=\(queryType)&userOrderId=\(userOrderId)&orderCode=\(orderCode)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,60 @@ public let ENTRY = Entry.default
|
|||||||
open class Entry {
|
open class Entry {
|
||||||
public static let `default` = Entry()
|
public static let `default` = Entry()
|
||||||
|
|
||||||
|
func showIdentityAlert(view: UIView, name: String? = nil) {
|
||||||
|
var attributes = EKAttributes.centerFloat
|
||||||
|
attributes.name = name
|
||||||
|
attributes.precedence = .override(priority: .min, dropEnqueuedEntries: false)
|
||||||
|
attributes.displayMode = .inferred
|
||||||
|
attributes.displayDuration = .infinity
|
||||||
|
|
||||||
|
// ✅ 背景加半透明遮罩
|
||||||
|
attributes.screenBackground = .color(
|
||||||
|
color: EKColor(UIColor.black.withAlphaComponent(0.45))
|
||||||
|
)
|
||||||
|
|
||||||
|
// entry 自己画内容,所以这里透明
|
||||||
|
attributes.entryBackground = .color(color: .clear)
|
||||||
|
|
||||||
|
attributes.screenInteraction = .absorbTouches // 必须点按钮才能关闭
|
||||||
|
attributes.entryInteraction = .absorbTouches
|
||||||
|
attributes.scroll = .disabled
|
||||||
|
|
||||||
|
attributes.entranceAnimation = .init(
|
||||||
|
translate: .init(
|
||||||
|
duration: 0.25,
|
||||||
|
spring: .init(damping: 1, initialVelocity: 0)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
attributes.exitAnimation = .init(
|
||||||
|
translate: .init(duration: 0.25)
|
||||||
|
)
|
||||||
|
attributes.popBehavior = .animated(
|
||||||
|
animation: .init(
|
||||||
|
translate: .init(duration: 0.25)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
attributes.shadow = .active(
|
||||||
|
with: .init(
|
||||||
|
color: .black,
|
||||||
|
opacity: 0.3,
|
||||||
|
radius: 6
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
// ✅ 让 entry 本身按内容高度来,而不是铺满全屏
|
||||||
|
attributes.positionConstraints.size = .init(
|
||||||
|
width: .offset(value: 40), // 左右各留 20,自己可调
|
||||||
|
height: .intrinsic // 高度跟 view 的布局走
|
||||||
|
)
|
||||||
|
attributes.positionConstraints.verticalOffset = 0
|
||||||
|
attributes.positionConstraints.safeArea = .overridden
|
||||||
|
attributes.positionConstraints.rotation.isEnabled = false
|
||||||
|
attributes.statusBar = .light
|
||||||
|
|
||||||
|
SwiftEntryKit.display(entry: view, using: attributes)
|
||||||
|
}
|
||||||
|
|
||||||
func showOnlineVehiclesEntry(view:UIView,name:String? = nil) {
|
func showOnlineVehiclesEntry(view:UIView,name:String? = nil) {
|
||||||
var attributes = EKAttributes()
|
var attributes = EKAttributes()
|
||||||
attributes = .centerFloat
|
attributes = .centerFloat
|
||||||
|
|||||||
@@ -89,11 +89,17 @@ open class UserData {
|
|||||||
|
|
||||||
public var regId : String?
|
public var regId : String?
|
||||||
|
|
||||||
|
func showGongdanpiciAlert() {
|
||||||
|
GongdanpiciTool.default.selectCountBySupplierId()
|
||||||
|
}
|
||||||
|
|
||||||
func clear() {
|
func clear() {
|
||||||
setToken(token: nil)
|
setToken(token: nil)
|
||||||
setRefreshToken(token: nil)
|
setRefreshToken(token: nil)
|
||||||
setSupplierType(supplierType: nil)
|
setSupplierType(supplierType: nil)
|
||||||
setUserId(userId: nil)
|
setUserId(userId: nil)
|
||||||
setSupplierId(supplierId: nil)
|
setSupplierId(supplierId: nil)
|
||||||
|
|
||||||
|
GongdanpiciTool.default.refreshCount()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ extension HistoryItemController : UITableViewDelegate, UITableViewDataSource {
|
|||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
.subscribe(onNext: { _ in
|
.subscribe(onNext: { _ in
|
||||||
if let supplierId = USER.supplierId {
|
if let supplierId = USER.supplierId {
|
||||||
WEBTOOL.open(name: .reportIndex,appending: "&userOrderId=\(model.userOrderId)&type=1&userOrderCode=\(model.taskCode)&supplierId=\(supplierId)")
|
WEBTOOL.openReportIndex(queryType: OrderTypeEnum.UNCLOSED_ORDER.rawValue, userOrderId: model.userOrderId, orderCode: model.orderCode, type: 1, userOrderCode: model.taskCode, supplierId: supplierId)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.disposed(by: cell!.disposeBag)
|
.disposed(by: cell!.disposeBag)
|
||||||
@@ -611,6 +611,7 @@ class HistoryItemCell : DDTableViewCell {
|
|||||||
serviceLabel.snp.makeConstraints { make in
|
serviceLabel.snp.makeConstraints { make in
|
||||||
make.top.equalTo(serviceTitleLabel)
|
make.top.equalTo(serviceTitleLabel)
|
||||||
make.left.equalTo(serviceTitleLabel.snp.right)
|
make.left.equalTo(serviceTitleLabel.snp.right)
|
||||||
|
make.height.greaterThanOrEqualTo(serviceTitleLabel)
|
||||||
make.right.equalTo(-auto(20))
|
make.right.equalTo(-auto(20))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -623,6 +624,7 @@ class HistoryItemCell : DDTableViewCell {
|
|||||||
destinationLabel.snp.makeConstraints { make in
|
destinationLabel.snp.makeConstraints { make in
|
||||||
make.top.equalTo(destinationTitleLabel)
|
make.top.equalTo(destinationTitleLabel)
|
||||||
make.left.equalTo(destinationTitleLabel.snp.right)
|
make.left.equalTo(destinationTitleLabel.snp.right)
|
||||||
|
make.height.greaterThanOrEqualTo(destinationTitleLabel)
|
||||||
make.right.equalTo(-auto(20))
|
make.right.equalTo(-auto(20))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,9 +48,15 @@ open class ApiList {
|
|||||||
|
|
||||||
public let generalInfo = "/supplierAppV2/dispatchApp/user/generalInfo"
|
public let generalInfo = "/supplierAppV2/dispatchApp/user/generalInfo"
|
||||||
|
|
||||||
|
public let getNeedConfirmPersonInfo = "/supplierAppV2/dispatchApp/wechat/getNeedConfirmPersonInfo"
|
||||||
|
|
||||||
|
public let giveUp = "/supplierAppV2/dispatchApp/wechat/giveUp"
|
||||||
|
|
||||||
|
public let judgeIfNeedConfirm = "/supplierAppV2/dispatchApp/wechat/judgeIfNeedConfirm"
|
||||||
|
|
||||||
public let dispatchAppH5Urls = "/supplierAppV2/open/dispatchAppH5Urls"
|
public let dispatchAppH5Urls = "/supplierAppV2/open/dispatchAppH5Urls"
|
||||||
|
|
||||||
public let versionCheck = "/supplierAppV2/dispatchApp/user/versionCheck"
|
public let updateVersion = "/supplierAppV2/dispatchApp/user/updateVersion"
|
||||||
|
|
||||||
public let messageReminderList = "/supplierAppV2/dispatchApp/toDoMessage/messageReminderList"
|
public let messageReminderList = "/supplierAppV2/dispatchApp/toDoMessage/messageReminderList"
|
||||||
|
|
||||||
@@ -85,4 +91,6 @@ open class ApiList {
|
|||||||
public let onlineReminder = "/supplierAppV2/dispatchApp/alarm/onlineReminder"
|
public let onlineReminder = "/supplierAppV2/dispatchApp/alarm/onlineReminder"
|
||||||
|
|
||||||
public let vehicleMonitorInfo = "/supplierAppV2/dispatchApp/order/vehicleMonitorInfo"
|
public let vehicleMonitorInfo = "/supplierAppV2/dispatchApp/order/vehicleMonitorInfo"
|
||||||
|
|
||||||
|
public let selectCountBySupplierId = "/order/taskInvoiceBatch/selectCountBySupplierId"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -205,9 +205,10 @@ public struct SupplementOrderPhotoParameters : Encodable {
|
|||||||
var file : Data
|
var file : Data
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct VersionCheckParameters : Encodable {
|
public struct UpdateVersionParameters : Encodable {
|
||||||
var version : String
|
var appVersion : String
|
||||||
var platForm : Int = 2
|
var supplierId : Int?
|
||||||
|
var sysType : String = "ios"
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct MessageReminderListParameters : Encodable {
|
public struct MessageReminderListParameters : Encodable {
|
||||||
@@ -278,3 +279,21 @@ public struct VehicleMonitorInfoParameters : Encodable {
|
|||||||
var lat : String?
|
var lat : String?
|
||||||
var code : String?
|
var code : String?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct NeedConfirmPersonInfoParameters : Encodable {
|
||||||
|
var supplierId : Int?
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct JudgeIfNeedConfirmParameters : Encodable {
|
||||||
|
var supplierId : Int?
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct GiveUpParameters : Encodable {
|
||||||
|
var supplierId : Int?
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct SelectCountBySupplierIdPrameters : Encodable {
|
||||||
|
var supplierId : Int?
|
||||||
|
var remindApp : Int?
|
||||||
|
var userId : Int?
|
||||||
|
}
|
||||||
|
|||||||
@@ -99,12 +99,24 @@ open class RequestList {
|
|||||||
return DDAF.post(urlString: HOST+API.generalInfo,encoding: URLEncodedFormParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<GeneralInfoDataModel>.self)
|
return DDAF.post(urlString: HOST+API.generalInfo,encoding: URLEncodedFormParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<GeneralInfoDataModel>.self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getNeedConfirmPersonInfo<P:Encodable>(prameters:P) -> Single<ResponseModel<[NeedConfirmPersonInfoDataModel]>?> {
|
||||||
|
return DDAF.get(urlString: HOST+API.getNeedConfirmPersonInfo,parameters: prameters,encoding: URLEncodedFormParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<[NeedConfirmPersonInfoDataModel]>.self)
|
||||||
|
}
|
||||||
|
|
||||||
|
func judgeIfNeedConfirm<P:Encodable>(prameters:P) -> Single<ResponseModel<JudgeIfNeedConfirmDataModel>?> {
|
||||||
|
return DDAF.get(urlString: HOST+API.judgeIfNeedConfirm,parameters: prameters,encoding: URLEncodedFormParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<JudgeIfNeedConfirmDataModel>.self)
|
||||||
|
}
|
||||||
|
|
||||||
|
func giveUp<P:Encodable>(prameters:P) -> Single<ResponseModel<String>?> {
|
||||||
|
return DDAF.get(urlString: HOST+API.giveUp,parameters: prameters,encoding: URLEncodedFormParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<String>.self)
|
||||||
|
}
|
||||||
|
|
||||||
func dispatchAppH5Urls() -> Single<ResponseModel<DispatchAppH5UrlDataModel>?> {
|
func dispatchAppH5Urls() -> Single<ResponseModel<DispatchAppH5UrlDataModel>?> {
|
||||||
return DDAF.post(urlString: HOST+API.dispatchAppH5Urls,encoding: URLEncodedFormParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<DispatchAppH5UrlDataModel>.self)
|
return DDAF.post(urlString: HOST+API.dispatchAppH5Urls,encoding: URLEncodedFormParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<DispatchAppH5UrlDataModel>.self)
|
||||||
}
|
}
|
||||||
|
|
||||||
func versionCheck<P:Encodable>(parameters:P) -> Single<ResponseModel<VersionCheckDataModel>?> {
|
func updateVersion<P:Encodable>(parameters:P) -> Single<ResponseModel<UpdateVersionDataModel>?> {
|
||||||
return DDAF.post(urlString: HOST+API.versionCheck,parameters: parameters,encoding: JSONParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<VersionCheckDataModel>.self)
|
return DDAF.post(urlString: HOST+API.updateVersion,parameters: parameters,encoding: JSONParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<UpdateVersionDataModel>.self)
|
||||||
}
|
}
|
||||||
|
|
||||||
func messageReminderList<P:Encodable>(parameters:P) -> Single<ResponseModel<[MessageReminderListDataModel]>?> {
|
func messageReminderList<P:Encodable>(parameters:P) -> Single<ResponseModel<[MessageReminderListDataModel]>?> {
|
||||||
@@ -176,4 +188,8 @@ open class RequestList {
|
|||||||
func vehicleMonitorInfo<P:Encodable>(parameters:P) -> Single<ResponseModel<VehicleMonitorInfoDataModel>?> {
|
func vehicleMonitorInfo<P:Encodable>(parameters:P) -> Single<ResponseModel<VehicleMonitorInfoDataModel>?> {
|
||||||
return DDAF.post(urlString: HOST+API.vehicleMonitorInfo,parameters: parameters,encoding: JSONParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<VehicleMonitorInfoDataModel>.self)
|
return DDAF.post(urlString: HOST+API.vehicleMonitorInfo,parameters: parameters,encoding: JSONParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<VehicleMonitorInfoDataModel>.self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func selectCountBySupplierId<P:Encodable>(parameters:P) -> Single<ResponseModel<Int>?> {
|
||||||
|
return DDAF.get(urlString: HOST+API.selectCountBySupplierId,parameters: parameters,encoding: URLEncodedFormParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<Int>.self)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,9 +53,9 @@ class LoginDataModel : Decodable {
|
|||||||
class OrderListDataModel: Decodable {
|
class OrderListDataModel: Decodable {
|
||||||
var brand : String?
|
var brand : String?
|
||||||
var model : String?
|
var model : String?
|
||||||
var vehiclePointAddress : String
|
var vehiclePointAddress : String?
|
||||||
var vehiclePointLongitude : Double
|
var vehiclePointLongitude : Double?
|
||||||
var vehiclePointLatitude : Double
|
var vehiclePointLatitude : Double?
|
||||||
var vehiclePointRemark : String?
|
var vehiclePointRemark : String?
|
||||||
var juheVehicleId : Int?
|
var juheVehicleId : Int?
|
||||||
var juheVehcileName : String?
|
var juheVehcileName : String?
|
||||||
@@ -177,7 +177,7 @@ public class VehicleMonitorListDataModel : Decodable {
|
|||||||
var vehicleName : String?
|
var vehicleName : String?
|
||||||
var driverId : Int
|
var driverId : Int
|
||||||
var driverName : String?
|
var driverName : String?
|
||||||
var driverPhone : String
|
var driverPhone : String?
|
||||||
var vehicleType : String?
|
var vehicleType : String?
|
||||||
var terminalType : String?
|
var terminalType : String?
|
||||||
var vehicleStatus : VehicleStatusModel?
|
var vehicleStatus : VehicleStatusModel?
|
||||||
@@ -226,9 +226,9 @@ public class VehicleMonitorListDataModel : Decodable {
|
|||||||
var taskStatus : Int
|
var taskStatus : Int
|
||||||
var taskStatusString : String
|
var taskStatusString : String
|
||||||
var flowId : Int
|
var flowId : Int
|
||||||
var vehiclePointLongitude : Double
|
var vehiclePointLongitude : Double?
|
||||||
var vehiclePointLatitude : Double
|
var vehiclePointLatitude : Double?
|
||||||
var vehiclePointAddress : String
|
var vehiclePointAddress : String?
|
||||||
var destinationLongitude : Double?
|
var destinationLongitude : Double?
|
||||||
var destinationLatitude : Double?
|
var destinationLatitude : Double?
|
||||||
var destinationAddress : String?
|
var destinationAddress : String?
|
||||||
@@ -262,6 +262,15 @@ public class GeneralInfoDataModel : Decodable {
|
|||||||
var addressLon : Double?
|
var addressLon : Double?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class NeedConfirmPersonInfoDataModel : Decodable {
|
||||||
|
}
|
||||||
|
|
||||||
|
public class JudgeIfNeedConfirmDataModel : Decodable {
|
||||||
|
var needConfirm : Bool?
|
||||||
|
var count : Int?
|
||||||
|
var isLast : Bool?
|
||||||
|
}
|
||||||
|
|
||||||
public class DispatchAppH5UrlDataModel : Decodable {
|
public class DispatchAppH5UrlDataModel : Decodable {
|
||||||
var todoList : String?
|
var todoList : String?
|
||||||
var workOrderReconciliation : String
|
var workOrderReconciliation : String
|
||||||
@@ -282,28 +291,17 @@ public class DispatchAppH5UrlDataModel : Decodable {
|
|||||||
var reportIndex : String
|
var reportIndex : String
|
||||||
var vehicleAlarmList : String
|
var vehicleAlarmList : String
|
||||||
var vehicleAlarmDetail : String
|
var vehicleAlarmDetail : String
|
||||||
|
var kpiCaseNew : String
|
||||||
|
var managerPeople : String
|
||||||
}
|
}
|
||||||
|
|
||||||
public class VersionCheckDataModel : Decodable {
|
public class UpdateVersionDataModel : Decodable {
|
||||||
var id : Int
|
var newAppVersion : String?
|
||||||
var appVersion : String
|
var update : Int?
|
||||||
var update : UpdateModel
|
|
||||||
var appType : TypeModel
|
|
||||||
class UpdateModel : Decodable {
|
|
||||||
var code : UpdateEnum
|
|
||||||
var label : String
|
|
||||||
}
|
|
||||||
class TypeModel : Decodable {
|
|
||||||
var code : Int
|
|
||||||
var label : String
|
|
||||||
}
|
|
||||||
enum UpdateEnum : Int,Decodable {
|
|
||||||
case NO = 0
|
|
||||||
case YES = 1
|
|
||||||
}
|
|
||||||
var updateTime : String?
|
|
||||||
var createTime : String?
|
|
||||||
var description : String?
|
var description : String?
|
||||||
|
public enum ForceUpdate : Int {
|
||||||
|
case force = 1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MessageReminderListDataModel : Decodable {
|
public class MessageReminderListDataModel : Decodable {
|
||||||
@@ -372,6 +370,7 @@ public class AppPushRecordListDataModel : Decodable {
|
|||||||
|
|
||||||
public class ConfigByCodeDataModel : Decodable {
|
public class ConfigByCodeDataModel : Decodable {
|
||||||
var bannerConfig : [ConfigByCodeBannerModel]?
|
var bannerConfig : [ConfigByCodeBannerModel]?
|
||||||
|
var supplierAppIsUserNewReport : Bool?
|
||||||
public class ConfigByCodeBannerModel : Decodable {
|
public class ConfigByCodeBannerModel : Decodable {
|
||||||
var linkUrl : String?
|
var linkUrl : String?
|
||||||
var bannerIcon : String?
|
var bannerIcon : String?
|
||||||
@@ -419,4 +418,6 @@ public class VehicleMonitorInfoDataModel : Decodable {
|
|||||||
var distance : Double?
|
var distance : Double?
|
||||||
var mileageBc : Double?
|
var mileageBc : Double?
|
||||||
var contractName : String?
|
var contractName : String?
|
||||||
|
var organizeName : String?
|
||||||
|
var organizeAbbrName : String?
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>UIDesignRequiresCompatibility</key>
|
||||||
|
<true/>
|
||||||
<key>ITSAppUsesNonExemptEncryption</key>
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>UIUserInterfaceStyle</key>
|
<key>UIUserInterfaceStyle</key>
|
||||||
|
|||||||
@@ -121,6 +121,10 @@ class Initial : NSObject {
|
|||||||
MCOUNT.newestMessage()
|
MCOUNT.newestMessage()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func initGongdanpici() {
|
||||||
|
UserData.default.showGongdanpiciAlert()
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: <RootViewController>
|
// MARK: <RootViewController>
|
||||||
func initRootViewController(){
|
func initRootViewController(){
|
||||||
if USER.isLogin == true {
|
if USER.isLogin == true {
|
||||||
@@ -145,6 +149,7 @@ class Initial : NSObject {
|
|||||||
self?.initAppUpdate()
|
self?.initAppUpdate()
|
||||||
self?.initRefreshToken()
|
self?.initRefreshToken()
|
||||||
self?.initNewestMessage()
|
self?.initNewestMessage()
|
||||||
|
self?.initGongdanpici()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,11 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
|||||||
NewTraining.default.newTrainingRelay.accept(nil)
|
NewTraining.default.newTrainingRelay.accept(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 在服务商登录调度app后,弹框提醒服务商
|
||||||
|
if USER.isLogin == true, appIsAlive == true {
|
||||||
|
UserData.default.showGongdanpiciAlert()
|
||||||
|
}
|
||||||
|
|
||||||
// 说明app时活的,用来判断进入后台之后返回前台时的问题
|
// 说明app时活的,用来判断进入后台之后返回前台时的问题
|
||||||
appIsAlive = true
|
appIsAlive = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,7 +115,12 @@ extension MessageCenterController : UITableViewDelegate,UITableViewDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let model = resultArr[indexPath.item]
|
let model = resultArr[indexPath.item]
|
||||||
cell!.descLabel.text = model.content
|
let desc = NSMutableAttributedString(string: model.content ?? "",attributes: [.font: UIFont.mediumFont(13),.foregroundColor : UIColor.dd_hex(light: "000000", dark: "000000").withAlphaComponent(0.75)])
|
||||||
|
if model.msgType.code == 6 {
|
||||||
|
desc.append(NSMutableAttributedString(string: "\n\n为获取更多案件",attributes: [.font : UIFont.mediumFont(16),.foregroundColor: UIColor.dd_hex(light: "000000", dark: "000000").withAlphaComponent(0.9)]))
|
||||||
|
desc.append(NSMutableAttributedString(string: "\n\n请提醒在班的师傅登录APP并合理保持在线。",attributes: [.font : UIFont.mediumFont(13),.foregroundColor: UIColor.dd_hex(light: "000000", dark: "000000").withAlphaComponent(0.75)]))
|
||||||
|
}
|
||||||
|
cell!.descLabel.attributedText = desc
|
||||||
cell!.noticeLabel.text = " " + model.title + " "
|
cell!.noticeLabel.text = " " + model.title + " "
|
||||||
cell!.noticeLabel.backgroundColor = .hex(model.titleColor)
|
cell!.noticeLabel.backgroundColor = .hex(model.titleColor)
|
||||||
cell!.orderNumLabel.text = model.titleContent
|
cell!.orderNumLabel.text = model.titleContent
|
||||||
|
|||||||
@@ -49,14 +49,14 @@ extension MineController {
|
|||||||
return RQ.thisWeekNumber()
|
return RQ.thisWeekNumber()
|
||||||
})
|
})
|
||||||
.flatMapLatest { numberModel in
|
.flatMapLatest { numberModel in
|
||||||
return Single.zip(RQ.generalInfo(),Single.just(numberModel))
|
return Single.zip(RQ.generalInfo(),RQ.getNeedConfirmPersonInfo(prameters: NeedConfirmPersonInfoParameters(supplierId: UserData.default.supplierId)),RQ.selectCountBySupplierId(parameters: SelectCountBySupplierIdPrameters(supplierId: UserData.default.supplierId,remindApp: 0,userId: UserData.default.userId)),Single.just(numberModel))
|
||||||
}
|
}
|
||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
.subscribe(onNext: {[weak self] response,numberModel in
|
.subscribe(onNext: {[weak self] response,needConfirmPersonInfoModel,selectCountModel,numberModel in
|
||||||
|
self?.mineView.scrollView.mj_header?.endRefreshing()
|
||||||
if response?.success == true {
|
if response?.success == true {
|
||||||
self?.mineView.scrollView.mj_header?.endRefreshing()
|
|
||||||
self?.mineView.carInfoView.descLabel.text = String(response?.data?.vehicleCount ?? 0)+"台"
|
self?.mineView.carInfoView.descLabel.text = String(response?.data?.vehicleCount ?? 0)+"台"
|
||||||
self?.mineView.driverInfoView.descLabel.text = String(response?.data?.driverCount ?? 0)+"台"
|
self?.mineView.driverInfoView.descLabel.text = String(response?.data?.driverCount ?? 0)+"人"
|
||||||
if let icon = response?.data?.icon {
|
if let icon = response?.data?.icon {
|
||||||
self?.mineView.avatar.sd_setImage(with: URL(string: icon),placeholderImage: UIImage(named: "placeholder_gender_man"))
|
self?.mineView.avatar.sd_setImage(with: URL(string: icon),placeholderImage: UIImage(named: "placeholder_gender_man"))
|
||||||
}
|
}
|
||||||
@@ -68,6 +68,12 @@ extension MineController {
|
|||||||
self?.view.dd_makeToast(response?.msg)
|
self?.view.dd_makeToast(response?.msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if needConfirmPersonInfoModel?.success == true {
|
||||||
|
self?.mineView.manageView.descLabel.text = String(needConfirmPersonInfoModel?.data?.count ?? 0)+"人"
|
||||||
|
}else{
|
||||||
|
self?.view.dd_makeToast(response?.msg)
|
||||||
|
}
|
||||||
|
|
||||||
if numberModel?.success == true {
|
if numberModel?.success == true {
|
||||||
if let number = numberModel?.data, number > 0 {
|
if let number = numberModel?.data, number > 0 {
|
||||||
self?.mineView.ershouche.contentView.isHidden = false
|
self?.mineView.ershouche.contentView.isHidden = false
|
||||||
@@ -78,9 +84,29 @@ extension MineController {
|
|||||||
}else{
|
}else{
|
||||||
self?.view.dd_makeToast(numberModel?.msg)
|
self?.view.dd_makeToast(numberModel?.msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if selectCountModel?.success == true {
|
||||||
|
if let count = selectCountModel?.data, count > 0 {
|
||||||
|
self?.mineView.gongdanpici.contentView.isHidden = false
|
||||||
|
self?.mineView.gongdanpici.contentLabel.text = "\(count)"
|
||||||
|
}else{
|
||||||
|
self?.mineView.gongdanpici.contentView.isHidden = true
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
self?.view.dd_makeToast(selectCountModel?.msg)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.disposed(by: disposeBag)
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
|
mineView.manageGes.rx.event
|
||||||
|
.observe(on: MainScheduler.instance)
|
||||||
|
.subscribe(onNext: { _ in
|
||||||
|
if let supplierId = UserData.default.supplierId {
|
||||||
|
WEBTOOL.open(name: .managerPeople, appending: "&supplierId=\(supplierId)")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
mineView.carInfoGes.rx.event
|
mineView.carInfoGes.rx.event
|
||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
.subscribe(onNext: { _ in
|
.subscribe(onNext: { _ in
|
||||||
@@ -97,6 +123,13 @@ extension MineController {
|
|||||||
})
|
})
|
||||||
.disposed(by: disposeBag)
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
|
mineView.fuwushanganjianGes.rx.event
|
||||||
|
.observe(on: MainScheduler.instance)
|
||||||
|
.subscribe(onNext: { _ in
|
||||||
|
WEBTOOL.open(name: .kpiCaseNew, appending: nil)
|
||||||
|
})
|
||||||
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
mineView.shujutongjiGes.rx.event
|
mineView.shujutongjiGes.rx.event
|
||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
.subscribe(onNext: { _ in
|
.subscribe(onNext: { _ in
|
||||||
@@ -222,12 +255,15 @@ open class MineController : ZDViewController {
|
|||||||
make.bottom.equalTo(-view.safeAreaInsets.bottom - CGRectGetHeight(tabBarController?.tabBar.frame ?? .zero))
|
make.bottom.equalTo(-view.safeAreaInsets.bottom - CGRectGetHeight(tabBarController?.tabBar.frame ?? .zero))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mineView.manageView.titleLabel.text = "管理人员"
|
||||||
|
mineView.manageView.imageView.image = UIImage(named: "mine_info_manage")
|
||||||
mineView.carInfoView.titleLabel.text = "车辆管理"
|
mineView.carInfoView.titleLabel.text = "车辆管理"
|
||||||
mineView.carInfoView.imageView.image = UIImage(named: "mine_info_car")
|
mineView.carInfoView.imageView.image = UIImage(named: "mine_info_car")
|
||||||
mineView.driverInfoView.titleLabel.text = "司机管理"
|
mineView.driverInfoView.titleLabel.text = "司机管理"
|
||||||
mineView.driverInfoView.imageView.image = UIImage(named: "mine_info_driver")
|
mineView.driverInfoView.imageView.image = UIImage(named: "mine_info_driver")
|
||||||
|
|
||||||
mineView.shujutongji.titleLabel.text = "KPI数据统计"
|
mineView.fuwushanganjian.titleLabel.text = "服务商案件和车辆情况统计"
|
||||||
|
mineView.shujutongji.titleLabel.text = "服务商KPI"
|
||||||
mineView.gongdanduizhang.titleLabel.text = "工单对账"
|
mineView.gongdanduizhang.titleLabel.text = "工单对账"
|
||||||
mineView.gongdanpici.titleLabel.text = "工单批次"
|
mineView.gongdanpici.titleLabel.text = "工单批次"
|
||||||
mineView.kaipiaoxinxi.titleLabel.text = "开票信息"
|
mineView.kaipiaoxinxi.titleLabel.text = "开票信息"
|
||||||
@@ -326,17 +362,22 @@ open class MineView : DDView {
|
|||||||
private let topBackgroundImageView : DDImageView
|
private let topBackgroundImageView : DDImageView
|
||||||
public let avatar : DDImageView
|
public let avatar : DDImageView
|
||||||
public let companyLabel : DDLabel
|
public let companyLabel : DDLabel
|
||||||
|
public let manageGes : UITapGestureRecognizer
|
||||||
|
public let manageView : MineInfoView
|
||||||
public let carInfoGes : UITapGestureRecognizer
|
public let carInfoGes : UITapGestureRecognizer
|
||||||
public let carInfoView : MineInfoView
|
public let carInfoView : MineInfoView
|
||||||
public let driverInfoGes : UITapGestureRecognizer
|
public let driverInfoGes : UITapGestureRecognizer
|
||||||
public let driverInfoView : MineInfoView
|
public let driverInfoView : MineInfoView
|
||||||
public let infoRadiusView : DDView
|
public let infoRadiusView : DDView
|
||||||
|
private let infoStackView: UIStackView
|
||||||
public let infoRadiusSeparate : DDImageView
|
public let infoRadiusSeparate : DDImageView
|
||||||
public let statisticsRadiusView : DDView
|
public let statisticsRadiusView : DDView
|
||||||
public let orderRadiusView : DDView
|
public let orderRadiusView : DDView
|
||||||
public let materialRadiusView : DDView
|
public let materialRadiusView : DDView
|
||||||
public let usedCarRadiusView : DDView
|
public let usedCarRadiusView : DDView
|
||||||
public let settingsRadiusView : DDView
|
public let settingsRadiusView : DDView
|
||||||
|
public let fuwushanganjianGes : UITapGestureRecognizer
|
||||||
|
public let fuwushanganjian : MineCell
|
||||||
public let shujutongjiGes : UITapGestureRecognizer
|
public let shujutongjiGes : UITapGestureRecognizer
|
||||||
public let shujutongji : MineCell
|
public let shujutongji : MineCell
|
||||||
public let gongdanduizhangGes : UITapGestureRecognizer
|
public let gongdanduizhangGes : UITapGestureRecognizer
|
||||||
@@ -369,17 +410,22 @@ open class MineView : DDView {
|
|||||||
topBackgroundImageView = DDImageView()
|
topBackgroundImageView = DDImageView()
|
||||||
avatar = DDImageView(image: UIImage(named: "placeholder_gender_man"))
|
avatar = DDImageView(image: UIImage(named: "placeholder_gender_man"))
|
||||||
companyLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(12)), textColor: .hex("FFFFFF").alpha(0.5))
|
companyLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(12)), textColor: .hex("FFFFFF").alpha(0.5))
|
||||||
|
manageView = MineInfoView()
|
||||||
|
manageGes = UITapGestureRecognizer()
|
||||||
carInfoView = MineInfoView()
|
carInfoView = MineInfoView()
|
||||||
carInfoGes = UITapGestureRecognizer()
|
carInfoGes = UITapGestureRecognizer()
|
||||||
driverInfoView = MineInfoView()
|
driverInfoView = MineInfoView()
|
||||||
driverInfoGes = UITapGestureRecognizer()
|
driverInfoGes = UITapGestureRecognizer()
|
||||||
infoRadiusView = DDView()
|
infoRadiusView = DDView()
|
||||||
|
infoStackView = UIStackView()
|
||||||
infoRadiusSeparate = DDImageView(image: UIImage(named: "mine_info_separate"))
|
infoRadiusSeparate = DDImageView(image: UIImage(named: "mine_info_separate"))
|
||||||
statisticsRadiusView = DDView()
|
statisticsRadiusView = DDView()
|
||||||
orderRadiusView = DDView()
|
orderRadiusView = DDView()
|
||||||
materialRadiusView = DDView()
|
materialRadiusView = DDView()
|
||||||
usedCarRadiusView = DDView()
|
usedCarRadiusView = DDView()
|
||||||
settingsRadiusView = DDView()
|
settingsRadiusView = DDView()
|
||||||
|
fuwushanganjianGes = UITapGestureRecognizer()
|
||||||
|
fuwushanganjian = MineCell()
|
||||||
shujutongjiGes = UITapGestureRecognizer()
|
shujutongjiGes = UITapGestureRecognizer()
|
||||||
shujutongji = MineCell()
|
shujutongji = MineCell()
|
||||||
gongdanduizhangGes = UITapGestureRecognizer()
|
gongdanduizhangGes = UITapGestureRecognizer()
|
||||||
@@ -421,10 +467,20 @@ open class MineView : DDView {
|
|||||||
infoRadiusView.backgroundColor = .hex("FFFFFF")
|
infoRadiusView.backgroundColor = .hex("FFFFFF")
|
||||||
infoRadiusView.layer.cornerRadius = auto(12)
|
infoRadiusView.layer.cornerRadius = auto(12)
|
||||||
scrollContentView.addSubview(infoRadiusView)
|
scrollContentView.addSubview(infoRadiusView)
|
||||||
|
|
||||||
|
infoStackView.axis = .horizontal
|
||||||
|
infoStackView.alignment = .fill
|
||||||
|
infoStackView.distribution = .fillEqually
|
||||||
|
infoRadiusView.addSubview(infoStackView)
|
||||||
|
|
||||||
|
manageView.addGestureRecognizer(manageGes)
|
||||||
carInfoView.addGestureRecognizer(carInfoGes)
|
carInfoView.addGestureRecognizer(carInfoGes)
|
||||||
infoRadiusView.addSubview(carInfoView)
|
|
||||||
driverInfoView.addGestureRecognizer(driverInfoGes)
|
driverInfoView.addGestureRecognizer(driverInfoGes)
|
||||||
infoRadiusView.addSubview(driverInfoView)
|
|
||||||
|
infoStackView.addArrangedSubview(manageView)
|
||||||
|
infoStackView.addArrangedSubview(carInfoView)
|
||||||
|
infoStackView.addArrangedSubview(driverInfoView)
|
||||||
|
|
||||||
scrollContentView.addSubview(infoRadiusSeparate)
|
scrollContentView.addSubview(infoRadiusSeparate)
|
||||||
statisticsRadiusView.backgroundColor = .hex("FFFFFF")
|
statisticsRadiusView.backgroundColor = .hex("FFFFFF")
|
||||||
statisticsRadiusView.layer.cornerRadius = auto(6)
|
statisticsRadiusView.layer.cornerRadius = auto(6)
|
||||||
@@ -441,6 +497,8 @@ open class MineView : DDView {
|
|||||||
settingsRadiusView.backgroundColor = .hex("FFFFFF")
|
settingsRadiusView.backgroundColor = .hex("FFFFFF")
|
||||||
settingsRadiusView.layer.cornerRadius = auto(6)
|
settingsRadiusView.layer.cornerRadius = auto(6)
|
||||||
scrollContentView.addSubview(settingsRadiusView)
|
scrollContentView.addSubview(settingsRadiusView)
|
||||||
|
fuwushanganjian.addGestureRecognizer(fuwushanganjianGes)
|
||||||
|
statisticsRadiusView.addSubview(fuwushanganjian)
|
||||||
shujutongji.addGestureRecognizer(shujutongjiGes)
|
shujutongji.addGestureRecognizer(shujutongjiGes)
|
||||||
shujutongji.line.isHidden = true
|
shujutongji.line.isHidden = true
|
||||||
statisticsRadiusView.addSubview(shujutongji)
|
statisticsRadiusView.addSubview(shujutongji)
|
||||||
@@ -518,14 +576,8 @@ open class MineView : DDView {
|
|||||||
make.width.equalTo(auto(350))
|
make.width.equalTo(auto(350))
|
||||||
}
|
}
|
||||||
|
|
||||||
carInfoView.snp.makeConstraints { make in
|
infoStackView.snp.makeConstraints { make in
|
||||||
make.left.top.bottom.equalToSuperview()
|
make.edges.equalToSuperview()
|
||||||
make.width.equalToSuperview().multipliedBy(0.5)
|
|
||||||
}
|
|
||||||
|
|
||||||
driverInfoView.snp.makeConstraints { make in
|
|
||||||
make.right.top.bottom.equalToSuperview()
|
|
||||||
make.width.equalToSuperview().multipliedBy(0.5)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
infoRadiusSeparate.snp.makeConstraints { make in
|
infoRadiusSeparate.snp.makeConstraints { make in
|
||||||
@@ -537,7 +589,6 @@ open class MineView : DDView {
|
|||||||
make.top.equalTo(infoRadiusView.snp.bottom).offset(auto(10))
|
make.top.equalTo(infoRadiusView.snp.bottom).offset(auto(10))
|
||||||
make.width.equalTo(infoRadiusView)
|
make.width.equalTo(infoRadiusView)
|
||||||
make.centerX.equalToSuperview()
|
make.centerX.equalToSuperview()
|
||||||
make.height.equalTo(auto(55))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
orderRadiusView.snp.makeConstraints { make in
|
orderRadiusView.snp.makeConstraints { make in
|
||||||
@@ -567,11 +618,18 @@ open class MineView : DDView {
|
|||||||
make.height.equalTo(auto(110))
|
make.height.equalTo(auto(110))
|
||||||
}
|
}
|
||||||
|
|
||||||
shujutongji.snp.makeConstraints { make in
|
fuwushanganjian.snp.makeConstraints { make in
|
||||||
make.left.right.top.equalToSuperview()
|
make.left.right.top.equalToSuperview()
|
||||||
make.height.equalTo(auto(55))
|
make.height.equalTo(auto(55))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shujutongji.snp.makeConstraints { make in
|
||||||
|
make.top.equalTo(fuwushanganjian.snp.bottom)
|
||||||
|
make.left.right.equalToSuperview()
|
||||||
|
make.height.equalTo(auto(55))
|
||||||
|
make.bottom.equalToSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
gongdanduizhang.snp.makeConstraints { make in
|
gongdanduizhang.snp.makeConstraints { make in
|
||||||
make.left.right.top.equalToSuperview()
|
make.left.right.top.equalToSuperview()
|
||||||
make.height.equalTo(auto(55))
|
make.height.equalTo(auto(55))
|
||||||
@@ -729,23 +787,30 @@ public class MineInfoView : DDView {
|
|||||||
addSubview(descLabel)
|
addSubview(descLabel)
|
||||||
addSubview(arrow)
|
addSubview(arrow)
|
||||||
|
|
||||||
|
imageView.contentMode = .scaleAspectFit
|
||||||
imageView.snp.makeConstraints { make in
|
imageView.snp.makeConstraints { make in
|
||||||
make.left.top.equalTo(auto(20))
|
make.right.equalTo(titleLabel.snp.left).offset(-auto(5))
|
||||||
|
make.width.height.equalTo(auto(24))
|
||||||
|
make.centerY.equalTo(titleLabel)
|
||||||
}
|
}
|
||||||
|
|
||||||
titleLabel.snp.makeConstraints { make in
|
titleLabel.snp.makeConstraints { make in
|
||||||
make.left.equalTo(imageView.snp.right).offset(auto(10))
|
make.top.equalToSuperview().offset(auto(10))
|
||||||
make.top.equalTo(imageView.snp.top).offset(auto(5))
|
make.bottom.equalTo(snp.centerY).offset(-auto(2.5))
|
||||||
|
make.centerX.equalToSuperview().offset(auto(8))
|
||||||
}
|
}
|
||||||
|
|
||||||
descLabel.snp.makeConstraints { make in
|
descLabel.snp.makeConstraints { make in
|
||||||
make.left.equalTo(titleLabel)
|
make.left.equalTo(titleLabel)
|
||||||
make.top.equalTo(titleLabel.snp.bottom).offset(auto(5))
|
make.top.equalTo(snp.centerY).offset(auto(2.5))
|
||||||
|
make.bottom.equalToSuperview().offset(-auto(10))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
arrow.contentMode = .scaleAspectFit
|
||||||
arrow.snp.makeConstraints { make in
|
arrow.snp.makeConstraints { make in
|
||||||
make.right.equalTo(-auto(20))
|
make.left.equalTo(titleLabel.snp.right).offset(auto(5))
|
||||||
make.centerY.equalTo(titleLabel)
|
make.centerY.equalTo(titleLabel)
|
||||||
|
make.width.height.equalTo(auto(8))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
69
OrderScheduling/Rescue/View/GongdanpiciTool.swift
Normal file
69
OrderScheduling/Rescue/View/GongdanpiciTool.swift
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
//
|
||||||
|
// GongdanpiciTool.swift
|
||||||
|
// OrderScheduling
|
||||||
|
//
|
||||||
|
// Created by 中道 on 2026/3/4.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import RxSwift
|
||||||
|
import PopupDialog
|
||||||
|
|
||||||
|
class GongdanpiciTool : NSObject {
|
||||||
|
public static let `default` = GongdanpiciTool()
|
||||||
|
private let disposeBag = DisposeBag()
|
||||||
|
|
||||||
|
func selectCountBySupplierId() {
|
||||||
|
guard let supplierId = UserData.default.supplierId else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
RQ.selectCountBySupplierId(parameters: SelectCountBySupplierIdPrameters(supplierId: supplierId,remindApp: 1,userId: UserData.default.userId))
|
||||||
|
.observe(on: MainScheduler.instance)
|
||||||
|
.subscribe(onSuccess: { selectCountModel in
|
||||||
|
if selectCountModel?.success == true {
|
||||||
|
if let count = selectCountModel?.data, count > 0 {
|
||||||
|
let popup = PopupDialog(title: nil, message: "工单批次中有\(count)条【未生成财务批次】数据,请及时开票。",buttonAlignment: .horizontal,transitionStyle: .zoomIn,tapGestureDismissal: false,
|
||||||
|
panGestureDismissal: false,
|
||||||
|
hideStatusBar: false){
|
||||||
|
|
||||||
|
}
|
||||||
|
let vc = popup.viewController as! PopupDialogDefaultViewController
|
||||||
|
vc.titleColor = UIColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 1.0)
|
||||||
|
vc.messageColor = UIColor(red: 0.13, green: 0.19, blue: 0.33, alpha: 1)
|
||||||
|
vc.titleFont = UIFont.boldSystemFont(ofSize: 16)
|
||||||
|
vc.messageFont = UIFont.systemFont(ofSize: 16)
|
||||||
|
|
||||||
|
vc.titleText = "提示"
|
||||||
|
vc.titleFont = UIFont.boldSystemFont(ofSize: 18)
|
||||||
|
let buttonOne = CancelButton(title: "稍后处理") {
|
||||||
|
}
|
||||||
|
buttonOne.titleFont = UIFont.boldSystemFont(ofSize: 16)
|
||||||
|
buttonOne.titleColor = UIColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 0.7)
|
||||||
|
|
||||||
|
let buttonTwo = DefaultButton(title: "去处理", dismissOnTap: true) {
|
||||||
|
if let supplierId = UserData.default.supplierId {
|
||||||
|
WEBTOOL.open(name: .invoicingNotify, appending: "&supplierId=\(supplierId)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buttonTwo.titleFont = UIFont.boldSystemFont(ofSize: 16)
|
||||||
|
buttonTwo.titleColor = UIColor(red: 29/255.0, green: 100/255.0, blue: 210/255.0, alpha: 0.7)
|
||||||
|
|
||||||
|
popup.addButtons([buttonOne, buttonTwo])
|
||||||
|
let tabBarVc = UIApplication.shared.dd_keyWindow.rootViewController as? UITabBarController
|
||||||
|
let nav = tabBarVc?.selectedViewController as? UINavigationController
|
||||||
|
nav?.topViewController?.present(popup, animated: true)
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
let tabBarVc = UIApplication.shared.dd_keyWindow.rootViewController as? UITabBarController
|
||||||
|
let nav = tabBarVc?.selectedViewController as? UINavigationController
|
||||||
|
nav?.topViewController?.view.dd_makeToast(selectCountModel?.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.disposed(by: disposeBag)
|
||||||
|
}
|
||||||
|
|
||||||
|
func refreshCount() {
|
||||||
|
UserDefaults.standard.set(0, forKey: "selectCountBySupplierId")
|
||||||
|
}
|
||||||
|
}
|
||||||
186
OrderScheduling/Rescue/View/IdentityAlertView.swift
Normal file
186
OrderScheduling/Rescue/View/IdentityAlertView.swift
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
//
|
||||||
|
// IdentityAlertView.swift
|
||||||
|
// OrderScheduling
|
||||||
|
//
|
||||||
|
// Created by 中道 on 2025/12/19.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import SnapKit
|
||||||
|
|
||||||
|
final class IdentityAlertView: UIView {
|
||||||
|
|
||||||
|
// MARK: - Public Callbacks
|
||||||
|
var onConfirm: (() -> Void)?
|
||||||
|
var onLater: (() -> Void)?
|
||||||
|
|
||||||
|
// MARK: - UI
|
||||||
|
private let containerView = UIView()
|
||||||
|
private let iconContainer = UIView()
|
||||||
|
private let iconImageView = UIImageView()
|
||||||
|
private let gradientLayer = CAGradientLayer()
|
||||||
|
private let titleLabel = UILabel()
|
||||||
|
private let messageLabel = UILabel()
|
||||||
|
private let confirmButton = UIButton(type: .system)
|
||||||
|
private let laterButton = UIButton(type: .system)
|
||||||
|
|
||||||
|
// MARK: - Init
|
||||||
|
|
||||||
|
/// times: 第几次提醒;totalTimes: 总次数,比如 3
|
||||||
|
init(times: Int = 1, totalTimes: Int = 3, isLast: Bool) {
|
||||||
|
super.init(frame: .zero)
|
||||||
|
setupUI(times: times, totalTimes: totalTimes, isLast:isLast)
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override func layoutSubviews() {
|
||||||
|
super.layoutSubviews()
|
||||||
|
gradientLayer.frame = containerView.bounds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - UI
|
||||||
|
|
||||||
|
private extension IdentityAlertView {
|
||||||
|
func setupUI(times: Int, totalTimes: Int, isLast: Bool) {
|
||||||
|
backgroundColor = .clear
|
||||||
|
|
||||||
|
// 容器(白色卡片,顶部有渐变)
|
||||||
|
addSubview(containerView)
|
||||||
|
addSubview(iconContainer)
|
||||||
|
|
||||||
|
containerView.layer.cornerRadius = 18
|
||||||
|
containerView.layer.masksToBounds = true
|
||||||
|
|
||||||
|
// 渐变背景:上浅橙,下白色,模拟设计稿上半段渐变
|
||||||
|
gradientLayer.colors = [
|
||||||
|
UIColor(red: 0xFF/255.0, green: 0xE4/255.0, blue: 0xD7/255.0, alpha: 1).cgColor,
|
||||||
|
UIColor.white.cgColor
|
||||||
|
]
|
||||||
|
gradientLayer.startPoint = CGPoint(x: 0.5, y: 0.0)
|
||||||
|
gradientLayer.endPoint = CGPoint(x: 0.5, y: 0.25)
|
||||||
|
containerView.layer.insertSublayer(gradientLayer, at: 0)
|
||||||
|
|
||||||
|
// 先约束图标容器:居中,顶在 entry 顶部;宽高 52
|
||||||
|
iconContainer.layer.cornerRadius = 26
|
||||||
|
iconContainer.layer.masksToBounds = true
|
||||||
|
iconContainer.backgroundColor = .clear
|
||||||
|
|
||||||
|
iconContainer.snp.makeConstraints { make in
|
||||||
|
make.top.equalToSuperview() // 让图标顶部贴住 entry 顶部
|
||||||
|
make.centerX.equalToSuperview()
|
||||||
|
make.width.height.equalTo(52)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 再约束白色卡片:顶部经过图标中心,实现“图标一半悬在卡片外”的效果
|
||||||
|
containerView.snp.makeConstraints { make in
|
||||||
|
make.top.equalTo(iconContainer.snp.centerY)
|
||||||
|
make.left.right.bottom.equalToSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 感叹号图标(切好的 52x52 图片,内含背景样式)
|
||||||
|
iconImageView.image = UIImage(named: "IdentityAlertNotice")
|
||||||
|
iconImageView.contentMode = .scaleAspectFit
|
||||||
|
iconContainer.addSubview(iconImageView)
|
||||||
|
iconImageView.snp.makeConstraints { make in
|
||||||
|
make.edges.equalToSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 标题
|
||||||
|
titleLabel.text = "重要提示"
|
||||||
|
titleLabel.font = .boldSystemFont(ofSize: 18)
|
||||||
|
titleLabel.textColor = UIColor(red: 51/255, green: 51/255, blue: 51/255, alpha: 1)
|
||||||
|
titleLabel.textAlignment = .center
|
||||||
|
containerView.addSubview(titleLabel)
|
||||||
|
|
||||||
|
titleLabel.snp.makeConstraints { make in
|
||||||
|
make.top.equalTo(iconContainer.snp.bottom).offset(16)
|
||||||
|
make.left.right.equalToSuperview().inset(20)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 文案
|
||||||
|
let reminderText = isLast ? "本次为最后一次提醒" : "此为第\(times)次提醒"
|
||||||
|
let message = """
|
||||||
|
中道救援将通过您确认的身份及联系方式,向您发送通知。请务必仔细核对您的身份及联系方式等关键信息,以免因无法接收通知而受到损失。\n
|
||||||
|
\(reminderText),请及时确认。若\(totalTimes)次提醒仍未确认,您将无法承接案件。
|
||||||
|
"""
|
||||||
|
|
||||||
|
let attr = NSMutableAttributedString(string: message)
|
||||||
|
let fullRange = NSRange(location: 0, length: attr.length)
|
||||||
|
let paragraph = NSMutableParagraphStyle()
|
||||||
|
paragraph.lineSpacing = 4
|
||||||
|
paragraph.alignment = .center
|
||||||
|
|
||||||
|
attr.addAttributes([
|
||||||
|
.font: UIFont.systemFont(ofSize: 14),
|
||||||
|
.foregroundColor: UIColor(red: 0x66/255, green: 0x66/255, blue: 0x66/255, alpha: 1),
|
||||||
|
.paragraphStyle: paragraph
|
||||||
|
], range: fullRange)
|
||||||
|
|
||||||
|
// 高亮 “将无法承接案件。”
|
||||||
|
if let highlightRange = (message as NSString).range(of: "请务必仔细核对您的身份及联系方式等关键信息").optionalNonEmpty {
|
||||||
|
attr.addAttribute(.foregroundColor,
|
||||||
|
value: UIColor(red: 0xF5/255, green: 0x52/255, blue: 0x3C/255, alpha: 1),
|
||||||
|
range: highlightRange)
|
||||||
|
}
|
||||||
|
|
||||||
|
messageLabel.attributedText = attr
|
||||||
|
messageLabel.numberOfLines = 0
|
||||||
|
containerView.addSubview(messageLabel)
|
||||||
|
|
||||||
|
messageLabel.snp.makeConstraints { make in
|
||||||
|
make.top.equalTo(titleLabel.snp.bottom).offset(12)
|
||||||
|
make.left.right.equalToSuperview().inset(24)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 立即确认按钮
|
||||||
|
confirmButton.setTitle("立即确认", for: .normal)
|
||||||
|
confirmButton.setTitleColor(.white, for: .normal)
|
||||||
|
confirmButton.titleLabel?.font = .boldSystemFont(ofSize: 16)
|
||||||
|
confirmButton.backgroundColor = UIColor(red: 0xFF/255, green: 0x6B/255, blue: 0x50/255, alpha: 1)
|
||||||
|
confirmButton.layer.cornerRadius = 20
|
||||||
|
confirmButton.layer.masksToBounds = true
|
||||||
|
confirmButton.addTarget(self, action: #selector(handleConfirm), for: .touchUpInside)
|
||||||
|
containerView.addSubview(confirmButton)
|
||||||
|
|
||||||
|
confirmButton.snp.makeConstraints { make in
|
||||||
|
make.top.equalTo(messageLabel.snp.bottom).offset(20)
|
||||||
|
make.left.right.equalToSuperview().inset(40)
|
||||||
|
make.height.equalTo(40)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 稍后提醒按钮
|
||||||
|
laterButton.setTitle(isLast ? "放弃" : "稍后提醒", for: .normal)
|
||||||
|
laterButton.setTitleColor(UIColor(red: 0x99/255, green: 0x99/255, blue: 0x99/255, alpha: 1), for: .normal)
|
||||||
|
laterButton.titleLabel?.font = .systemFont(ofSize: 14)
|
||||||
|
laterButton.addTarget(self, action: #selector(handleLater), for: .touchUpInside)
|
||||||
|
containerView.addSubview(laterButton)
|
||||||
|
|
||||||
|
laterButton.snp.makeConstraints { make in
|
||||||
|
make.top.equalTo(confirmButton.snp.bottom).offset(12)
|
||||||
|
make.centerX.equalToSuperview()
|
||||||
|
make.bottom.equalToSuperview().offset(-20)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Actions
|
||||||
|
|
||||||
|
private extension IdentityAlertView {
|
||||||
|
@objc func handleConfirm() {
|
||||||
|
onConfirm?()
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc func handleLater() {
|
||||||
|
onLater?()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private extension NSRange {
|
||||||
|
var optionalNonEmpty: NSRange? {
|
||||||
|
return location != NSNotFound && length > 0 ? self : nil
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -564,8 +564,8 @@ open class DispatchOrderController : ZDViewController {
|
|||||||
|
|
||||||
private let userOrderId : Int
|
private let userOrderId : Int
|
||||||
private let taskOrderId : Int
|
private let taskOrderId : Int
|
||||||
private let serviceAddressLat : Double
|
private let serviceAddressLat : Double?
|
||||||
private let serviceAddressLon : Double
|
private let serviceAddressLon : Double?
|
||||||
|
|
||||||
private var resultArr : [DispatchVehicleListDataModel] = []
|
private var resultArr : [DispatchVehicleListDataModel] = []
|
||||||
|
|
||||||
@@ -582,7 +582,7 @@ open class DispatchOrderController : ZDViewController {
|
|||||||
|
|
||||||
private let pannelPanGes = DDUIPanGestureRecognizer.init() /// 用于pannel的拖动效果
|
private let pannelPanGes = DDUIPanGestureRecognizer.init() /// 用于pannel的拖动效果
|
||||||
|
|
||||||
public init(userOrderId:Int,taskOrderId:Int,serviceAddressLat:Double,serviceAddressLon:Double) {
|
public init(userOrderId:Int,taskOrderId:Int,serviceAddressLat:Double?,serviceAddressLon:Double?) {
|
||||||
self.userOrderId = userOrderId
|
self.userOrderId = userOrderId
|
||||||
self.taskOrderId = taskOrderId
|
self.taskOrderId = taskOrderId
|
||||||
self.serviceAddressLat = serviceAddressLat
|
self.serviceAddressLat = serviceAddressLat
|
||||||
|
|||||||
@@ -136,6 +136,20 @@ extension RescueController {
|
|||||||
})
|
})
|
||||||
.disposed(by: disposeBag)
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
|
WEBTOOL.supplierAppIsUserNewReportRelay
|
||||||
|
.flatMapLatest { _ in
|
||||||
|
return RQ.getConfigByCode(parameters: ConfigByCodeParameters(code: "AppIsUseNewReport"))
|
||||||
|
}
|
||||||
|
.observe(on: MainScheduler.instance)
|
||||||
|
.subscribe(onNext: {[weak self] response in
|
||||||
|
if response?.success == true {
|
||||||
|
WEBTOOL.supplierAppIsUserNewReport = (response?.data?.supplierAppIsUserNewReport == true)
|
||||||
|
}else{
|
||||||
|
self?.view.dd_makeToast(response?.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
onlineReminderRelay
|
onlineReminderRelay
|
||||||
.flatMapLatest { _ in
|
.flatMapLatest { _ in
|
||||||
return RQ.onlineReminder(parameters: OnlineReminderParameters(supplierId: UserData.default.supplierId))
|
return RQ.onlineReminder(parameters: OnlineReminderParameters(supplierId: UserData.default.supplierId))
|
||||||
@@ -170,6 +184,43 @@ extension RescueController {
|
|||||||
})
|
})
|
||||||
.disposed(by: disposeBag)
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
|
judgeIfNeedConfirmEntryRelay
|
||||||
|
.flatMapLatest { _ in
|
||||||
|
return RQ.judgeIfNeedConfirm(prameters: JudgeIfNeedConfirmParameters(supplierId: UserData.default.supplierId))
|
||||||
|
}
|
||||||
|
.observe(on: MainScheduler.instance)
|
||||||
|
.subscribe(onNext: {[weak self] response in
|
||||||
|
guard let self = self else { return }
|
||||||
|
if response?.success == true {
|
||||||
|
if response?.data?.needConfirm == true {
|
||||||
|
let isLast = (response?.data?.isLast == true)
|
||||||
|
let entryName = "IdentityAlert"
|
||||||
|
let entryView = IdentityAlertView(times: response?.data?.count ?? 0,totalTimes: 3, isLast: isLast)
|
||||||
|
entryView.onLater = {
|
||||||
|
Entry.default.dismiss(name: entryName,completion: {
|
||||||
|
if isLast {
|
||||||
|
RQ.giveUp(prameters: GiveUpParameters(supplierId: UserData.default.supplierId))
|
||||||
|
.subscribe(onSuccess: { _ in
|
||||||
|
})
|
||||||
|
.disposed(by: self.disposeBag)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
entryView.onConfirm = {
|
||||||
|
Entry.default.dismiss(name: entryName,completion: {
|
||||||
|
if let supplierId = UserData.default.supplierId {
|
||||||
|
WEBTOOL.open(name: .managerPeople, appending: "&supplierId=\(supplierId)")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Entry.default.showIdentityAlert(view: entryView, name: entryName)
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
self.view.dd_makeToast(response?.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
// 点击tabBar 需要刷下下列
|
// 点击tabBar 需要刷下下列
|
||||||
preRefreshRelay
|
preRefreshRelay
|
||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
@@ -183,9 +234,11 @@ extension RescueController {
|
|||||||
|
|
||||||
func excuseRelay() {
|
func excuseRelay() {
|
||||||
NewTraining.default.newTrainingRelay.accept(nil)
|
NewTraining.default.newTrainingRelay.accept(nil)
|
||||||
|
WEBTOOL.supplierAppIsUserNewReportRelay.accept(nil)
|
||||||
appBannerRelay.accept(nil)
|
appBannerRelay.accept(nil)
|
||||||
appPushRecordRelay.accept(nil)
|
appPushRecordRelay.accept(nil)
|
||||||
onlineReminderRelay.accept(nil)
|
onlineReminderRelay.accept(nil)
|
||||||
|
judgeIfNeedConfirmEntryRelay.accept(nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -938,7 +991,7 @@ extension RescuePendingDispatchController : UITableViewDelegate,UITableViewDataS
|
|||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
.subscribe(onNext: { _ in
|
.subscribe(onNext: { _ in
|
||||||
if let supplierId = USER.supplierId {
|
if let supplierId = USER.supplierId {
|
||||||
WEBTOOL.open(name: .reportIndex,appending: "&userOrderId=\(model.userOrderId)&type=1&userOrderCode=\(model.taskCode)&supplierId=\(supplierId)")
|
WEBTOOL.openReportIndex(queryType: OrderTypeEnum.TO_DISPATCH_VEHICLE.rawValue, userOrderId: model.userOrderId, orderCode: model.orderCode, type: 1, userOrderCode: model.taskCode, supplierId: supplierId)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.disposed(by: cell!.disposeBag)
|
.disposed(by: cell!.disposeBag)
|
||||||
@@ -1099,7 +1152,7 @@ extension RescueIsIngController : UITableViewDelegate,UITableViewDataSource {
|
|||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
.subscribe(onNext: { _ in
|
.subscribe(onNext: { _ in
|
||||||
if let supplierId = USER.supplierId {
|
if let supplierId = USER.supplierId {
|
||||||
WEBTOOL.open(name: .reportIndex,appending: "&userOrderId=\(model.userOrderId)&type=1&userOrderCode=\(model.taskCode)&supplierId=\(supplierId)")
|
WEBTOOL.openReportIndex(queryType: OrderTypeEnum.TO_DISPATCH_VEHICLE.rawValue, userOrderId: model.userOrderId, orderCode: model.orderCode, type: 1, userOrderCode: model.taskCode, supplierId: supplierId)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.disposed(by: cell!.disposeBag)
|
.disposed(by: cell!.disposeBag)
|
||||||
@@ -1220,6 +1273,8 @@ class RescueController : ZDViewController {
|
|||||||
|
|
||||||
private var onlineReminderRelay = ReplayRelay<Any?>.create(bufferSize: 1)
|
private var onlineReminderRelay = ReplayRelay<Any?>.create(bufferSize: 1)
|
||||||
|
|
||||||
|
private var judgeIfNeedConfirmEntryRelay = ReplayRelay<Any?>.create(bufferSize: 1)
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
dd_navigationBarBackgroundColor = .hex("354683")
|
dd_navigationBarBackgroundColor = .hex("354683")
|
||||||
@@ -1607,6 +1662,7 @@ class RescuePendingOrderCell : DDTableViewCell {
|
|||||||
serviceLabel.snp.makeConstraints { make in
|
serviceLabel.snp.makeConstraints { make in
|
||||||
make.top.equalTo(serviceTitleLabel)
|
make.top.equalTo(serviceTitleLabel)
|
||||||
make.left.equalTo(serviceTitleLabel.snp.right)
|
make.left.equalTo(serviceTitleLabel.snp.right)
|
||||||
|
make.height.greaterThanOrEqualTo(serviceTitleLabel)
|
||||||
make.right.equalTo(-auto(20))
|
make.right.equalTo(-auto(20))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1619,6 +1675,7 @@ class RescuePendingOrderCell : DDTableViewCell {
|
|||||||
destinationLabel.snp.makeConstraints { make in
|
destinationLabel.snp.makeConstraints { make in
|
||||||
make.top.equalTo(destinationTitleLabel)
|
make.top.equalTo(destinationTitleLabel)
|
||||||
make.left.equalTo(destinationTitleLabel.snp.right)
|
make.left.equalTo(destinationTitleLabel.snp.right)
|
||||||
|
make.height.greaterThanOrEqualTo(destinationTitleLabel)
|
||||||
make.right.equalTo(-auto(20))
|
make.right.equalTo(-auto(20))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1887,6 +1944,7 @@ class RescuePendingDispatchCell : DDTableViewCell {
|
|||||||
serviceLabel.snp.makeConstraints { make in
|
serviceLabel.snp.makeConstraints { make in
|
||||||
make.top.equalTo(serviceTitleLabel)
|
make.top.equalTo(serviceTitleLabel)
|
||||||
make.left.equalTo(serviceTitleLabel.snp.right)
|
make.left.equalTo(serviceTitleLabel.snp.right)
|
||||||
|
make.height.greaterThanOrEqualTo(serviceTitleLabel)
|
||||||
make.right.equalTo(-auto(20))
|
make.right.equalTo(-auto(20))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1910,6 +1968,7 @@ class RescuePendingDispatchCell : DDTableViewCell {
|
|||||||
destinationLabel.snp.makeConstraints { make in
|
destinationLabel.snp.makeConstraints { make in
|
||||||
make.top.equalTo(destinationTitleLabel)
|
make.top.equalTo(destinationTitleLabel)
|
||||||
make.left.equalTo(destinationTitleLabel.snp.right)
|
make.left.equalTo(destinationTitleLabel.snp.right)
|
||||||
|
make.height.greaterThanOrEqualTo(destinationTitleLabel)
|
||||||
make.right.equalTo(-auto(20))
|
make.right.equalTo(-auto(20))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2160,6 +2219,7 @@ class RescueIsIngCell : DDTableViewCell {
|
|||||||
serviceLabel.snp.makeConstraints { make in
|
serviceLabel.snp.makeConstraints { make in
|
||||||
make.top.equalTo(serviceTitleLabel)
|
make.top.equalTo(serviceTitleLabel)
|
||||||
make.left.equalTo(serviceTitleLabel.snp.right)
|
make.left.equalTo(serviceTitleLabel.snp.right)
|
||||||
|
make.height.greaterThanOrEqualTo(serviceTitleLabel)
|
||||||
make.right.equalTo(-auto(20))
|
make.right.equalTo(-auto(20))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2172,6 +2232,7 @@ class RescueIsIngCell : DDTableViewCell {
|
|||||||
destinationLabel.snp.makeConstraints { make in
|
destinationLabel.snp.makeConstraints { make in
|
||||||
make.top.equalTo(destinationTitleLabel)
|
make.top.equalTo(destinationTitleLabel)
|
||||||
make.left.equalTo(destinationTitleLabel.snp.right)
|
make.left.equalTo(destinationTitleLabel.snp.right)
|
||||||
|
make.height.greaterThanOrEqualTo(destinationTitleLabel)
|
||||||
make.right.equalTo(-auto(20))
|
make.right.equalTo(-auto(20))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -236,8 +236,8 @@ extension AdditionalPhotoController : UICollectionViewDelegate, UICollectionView
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 非选择模式:沿用原预览逻辑
|
// 非选择模式:沿用原预览逻辑
|
||||||
let cell = self.collectionView(collectionView, cellForItemAt: indexPath) as? AdditionalPhotoCell
|
if let cell = collectionView.cellForItem(at: indexPath) as? AdditionalPhotoCell,
|
||||||
if let image = cell?.uploadImageView.image {
|
let image = cell.uploadImageView.image {
|
||||||
let vc = ZLImagePreviewController.init(datas: [image as Any],showSelectBtn: false,showBottomView: false)
|
let vc = ZLImagePreviewController.init(datas: [image as Any],showSelectBtn: false,showBottomView: false)
|
||||||
vc.modalPresentationStyle = .fullScreen
|
vc.modalPresentationStyle = .fullScreen
|
||||||
navigationController?.present(vc, animated: true)
|
navigationController?.present(vc, animated: true)
|
||||||
|
|||||||
@@ -213,7 +213,11 @@ extension VehicleMonitoringController {
|
|||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
.subscribe(onNext: {[weak self] _ in
|
.subscribe(onNext: {[weak self] _ in
|
||||||
if let model = self?.selectedModel {
|
if let model = self?.selectedModel {
|
||||||
URLLINKS.openUrl(type: .phone, appending: model.driverPhone)
|
guard let driverPhone = model.driverPhone else {
|
||||||
|
self?.view.dd_makeToast("空号")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
URLLINKS.openUrl(type: .phone, appending: driverPhone)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.disposed(by: disposeBag)
|
.disposed(by: disposeBag)
|
||||||
@@ -1376,7 +1380,9 @@ class VehicleMonitoringListDetailView : DDView, JXCategoryListContainerViewDeleg
|
|||||||
func categoryView(_ categoryView: JXCategoryBaseView!, didSelectedItemAt index: Int) {
|
func categoryView(_ categoryView: JXCategoryBaseView!, didSelectedItemAt index: Int) {
|
||||||
pageNumLabel.text = "\(index + 1)/\(taskModels.count)"
|
pageNumLabel.text = "\(index + 1)/\(taskModels.count)"
|
||||||
let taskModel = taskModels[index]
|
let taskModel = taskModels[index]
|
||||||
showIncidentLocationHandler?(CLLocationCoordinate2D(latitude: taskModel.vehiclePointLatitude, longitude: taskModel.vehiclePointLongitude),(taskModel.destinationLatitude != nil && taskModel.destinationLongitude != nil) ? CLLocationCoordinate2D(latitude: taskModel.destinationLatitude!, longitude: taskModel.destinationLongitude!) : nil)
|
if let vehiclePointLatitude = taskModel.vehiclePointLatitude, let vehiclePointLongitude = taskModel.vehiclePointLongitude {
|
||||||
|
showIncidentLocationHandler?(CLLocationCoordinate2D(latitude: vehiclePointLatitude, longitude: vehiclePointLongitude),(taskModel.destinationLatitude != nil && taskModel.destinationLongitude != nil) ? CLLocationCoordinate2D(latitude: taskModel.destinationLatitude!, longitude: taskModel.destinationLongitude!) : nil)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public var taskModels : [VehicleMonitorListDataModel.TaskModel]
|
public var taskModels : [VehicleMonitorListDataModel.TaskModel]
|
||||||
@@ -1779,7 +1785,11 @@ class VMLDContainerView : DDView , JXCategoryListContentViewDelegate {
|
|||||||
.subscribe(onSuccess: {[weak self] response in
|
.subscribe(onSuccess: {[weak self] response in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
if let contractName = response?.data?.contractName {
|
if let contractName = response?.data?.contractName {
|
||||||
self.contractContent.text = contractName
|
var contractContent = contractName
|
||||||
|
if let organizeName = response?.data?.organizeName {
|
||||||
|
contractContent = contractContent + "/" + organizeName
|
||||||
|
}
|
||||||
|
self.contractContent.text = contractContent
|
||||||
self.contractTitle.text = "合同:"
|
self.contractTitle.text = "合同:"
|
||||||
self.contractImageView.image = UIImage(named: "vehichleMonitoring_contract_16")
|
self.contractImageView.image = UIImage(named: "vehichleMonitoring_contract_16")
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
@@ -98,8 +98,12 @@ extension VehicleMonitoringListController : UITableViewDelegate,UITableViewDataS
|
|||||||
|
|
||||||
cell?.callButton.rx.tap
|
cell?.callButton.rx.tap
|
||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
.subscribe(onNext: { _ in
|
.subscribe(onNext: {[weak self] _ in
|
||||||
URLLINKS.openUrl(type: .phone, appending: model.driverPhone)
|
guard let driverPhone = model.driverPhone else {
|
||||||
|
self?.view.dd_makeToast("空号")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
URLLINKS.openUrl(type: .phone, appending: driverPhone)
|
||||||
})
|
})
|
||||||
.disposed(by: cell!.disposeBag)
|
.disposed(by: cell!.disposeBag)
|
||||||
return cell!
|
return cell!
|
||||||
|
|||||||
Reference in New Issue
Block a user