diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift index bb92ed1..a6aaa43 100644 --- a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift +++ b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift @@ -6,14 +6,14 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit class EventTaskViewController: UIViewController, TransferIdDelegate { @IBOutlet var taskTableView: UITableView! - private let keychain = Keychain() + private let defaults = Defaults.shared private var id: String? private var rowsArray = [ListModel]() private var valueDelegate: TransferValueDelegate! @@ -24,11 +24,11 @@ taskTableView.dataSource = self taskTableView.delegate = self // 查询事件列表 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let eventListURL = baseURL! + Constant.searchByInspect.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let eventListURL = baseURL + Constant.searchByInspect.rawValue Alamofire.request(eventListURL, method: .get, parameters: ["inspectionId": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): rowsArray = EventTaskModel(respJson: JSON(value)).data.list diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift index bb92ed1..a6aaa43 100644 --- a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift +++ b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift @@ -6,14 +6,14 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit class EventTaskViewController: UIViewController, TransferIdDelegate { @IBOutlet var taskTableView: UITableView! - private let keychain = Keychain() + private let defaults = Defaults.shared private var id: String? private var rowsArray = [ListModel]() private var valueDelegate: TransferValueDelegate! @@ -24,11 +24,11 @@ taskTableView.dataSource = self taskTableView.delegate = self // 查询事件列表 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let eventListURL = baseURL! + Constant.searchByInspect.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let eventListURL = baseURL + Constant.searchByInspect.rawValue Alamofire.request(eventListURL, method: .get, parameters: ["inspectionId": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): rowsArray = EventTaskModel(respJson: JSON(value)).data.list diff --git a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift index f811c5d..f9f171a 100644 --- a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SnapKit import SwiftyJSON import UIKit @@ -15,7 +15,7 @@ private var id: String? private var mapView: MAMapView! private var inspectView: UIView! - private let keychain = Keychain() + private let defaults = Defaults.shared @IBOutlet var inspectNameLabel: UILabel! @IBOutlet var inspectStartTimeLabel: UILabel! @@ -63,11 +63,11 @@ } func loadInspectDetail() { - let baseURL = keychain[Constant.ServerConfig.rawValue] - let inspectionDetailURL = baseURL! + Constant.inspectionDetail.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let inspectionDetailURL = baseURL + Constant.inspectionDetail.rawValue Alamofire.request(inspectionDetailURL, method: .get, parameters: ["id": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): setInspectData(detailModel: InspectDetailModel(respJson: JSON(value)).data) diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift index bb92ed1..a6aaa43 100644 --- a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift +++ b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift @@ -6,14 +6,14 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit class EventTaskViewController: UIViewController, TransferIdDelegate { @IBOutlet var taskTableView: UITableView! - private let keychain = Keychain() + private let defaults = Defaults.shared private var id: String? private var rowsArray = [ListModel]() private var valueDelegate: TransferValueDelegate! @@ -24,11 +24,11 @@ taskTableView.dataSource = self taskTableView.delegate = self // 查询事件列表 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let eventListURL = baseURL! + Constant.searchByInspect.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let eventListURL = baseURL + Constant.searchByInspect.rawValue Alamofire.request(eventListURL, method: .get, parameters: ["inspectionId": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): rowsArray = EventTaskModel(respJson: JSON(value)).data.list diff --git a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift index f811c5d..f9f171a 100644 --- a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SnapKit import SwiftyJSON import UIKit @@ -15,7 +15,7 @@ private var id: String? private var mapView: MAMapView! private var inspectView: UIView! - private let keychain = Keychain() + private let defaults = Defaults.shared @IBOutlet var inspectNameLabel: UILabel! @IBOutlet var inspectStartTimeLabel: UILabel! @@ -63,11 +63,11 @@ } func loadInspectDetail() { - let baseURL = keychain[Constant.ServerConfig.rawValue] - let inspectionDetailURL = baseURL! + Constant.inspectionDetail.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let inspectionDetailURL = baseURL + Constant.inspectionDetail.rawValue Alamofire.request(inspectionDetailURL, method: .get, parameters: ["id": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): setInspectData(detailModel: InspectDetailModel(respJson: JSON(value)).data) diff --git a/LaserMethane/ViewController/Inspect/InspectViewController.swift b/LaserMethane/ViewController/Inspect/InspectViewController.swift index bf9fac7..f275624 100644 --- a/LaserMethane/ViewController/Inspect/InspectViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var inspectTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [RowsModel] = [] private var dformatter = DateFormatter() @@ -44,11 +44,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let inspectListURL = baseURL! + Constant.inspectList.rawValue Alamofire.request(inspectListURL, method: .get, parameters: ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): let inspectModel = InspectListModel(respJson: JSON(value)) diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift index bb92ed1..a6aaa43 100644 --- a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift +++ b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift @@ -6,14 +6,14 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit class EventTaskViewController: UIViewController, TransferIdDelegate { @IBOutlet var taskTableView: UITableView! - private let keychain = Keychain() + private let defaults = Defaults.shared private var id: String? private var rowsArray = [ListModel]() private var valueDelegate: TransferValueDelegate! @@ -24,11 +24,11 @@ taskTableView.dataSource = self taskTableView.delegate = self // 查询事件列表 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let eventListURL = baseURL! + Constant.searchByInspect.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let eventListURL = baseURL + Constant.searchByInspect.rawValue Alamofire.request(eventListURL, method: .get, parameters: ["inspectionId": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): rowsArray = EventTaskModel(respJson: JSON(value)).data.list diff --git a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift index f811c5d..f9f171a 100644 --- a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SnapKit import SwiftyJSON import UIKit @@ -15,7 +15,7 @@ private var id: String? private var mapView: MAMapView! private var inspectView: UIView! - private let keychain = Keychain() + private let defaults = Defaults.shared @IBOutlet var inspectNameLabel: UILabel! @IBOutlet var inspectStartTimeLabel: UILabel! @@ -63,11 +63,11 @@ } func loadInspectDetail() { - let baseURL = keychain[Constant.ServerConfig.rawValue] - let inspectionDetailURL = baseURL! + Constant.inspectionDetail.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let inspectionDetailURL = baseURL + Constant.inspectionDetail.rawValue Alamofire.request(inspectionDetailURL, method: .get, parameters: ["id": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): setInspectData(detailModel: InspectDetailModel(respJson: JSON(value)).data) diff --git a/LaserMethane/ViewController/Inspect/InspectViewController.swift b/LaserMethane/ViewController/Inspect/InspectViewController.swift index bf9fac7..f275624 100644 --- a/LaserMethane/ViewController/Inspect/InspectViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var inspectTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [RowsModel] = [] private var dformatter = DateFormatter() @@ -44,11 +44,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let inspectListURL = baseURL! + Constant.inspectList.rawValue Alamofire.request(inspectListURL, method: .get, parameters: ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): let inspectModel = InspectListModel(respJson: JSON(value)) diff --git a/LaserMethane/ViewController/Login/LoginViewController.swift b/LaserMethane/ViewController/Login/LoginViewController.swift index d9edc12..a4cd6e9 100644 --- a/LaserMethane/ViewController/Login/LoginViewController.swift +++ b/LaserMethane/ViewController/Login/LoginViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit @@ -14,7 +14,8 @@ @IBOutlet var userNameView: UITextField! @IBOutlet var passwordView: UITextField! @IBOutlet var loginButton: UIButton! - private var keychain = Keychain() + + private let defaults = Defaults.shared override func viewDidLoad() { super.viewDidLoad() @@ -25,8 +26,8 @@ loginButton.backgroundColor = [21, 101, 227].transferUIColor() loginButton.layer.cornerRadius = 18 // 设置圆角 // 设置默认账号密码 - userNameView.text = keychain[Constant.UserName.rawValue] ?? "" - passwordView.text = keychain[Constant.Password.rawValue] ?? "" + userNameView.text = defaults.get(for: userNameKey) ?? "" + passwordView.text = defaults.get(for: passwordKey) ?? "" } @IBAction func loginAction(_ sender: UIButton) { @@ -41,41 +42,41 @@ return } // 记录账号密码 - keychain[Constant.UserName.rawValue] = userName - keychain[Constant.Password.rawValue] = password + defaults.set(userName!, for: userNameKey) + defaults.set(password!, for: passwordKey) // 访问后台,开始登录 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let configURL = baseURL! + Constant.baseConfig.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let configURL = baseURL + Constant.baseConfig.rawValue Alamofire.request(configURL, method: .get).responseJSON { [self] response in switch response.result { case let .success(value): let configModel = BaseConfigModel(respJson: JSON(value)) // 将密码经由RSA和publicKey加密 guard let pwdWithKey = try? password?.encryptByRSA(publicKey: (configModel.data?.publicKey)!) - else { + else { return } // 登录 - let loginURL = baseURL! + Constant.login.rawValue + let loginURL = baseURL + Constant.login.rawValue Alamofire.request(loginURL, method: .post, parameters: ["username": userName!, "password": pwdWithKey]) - .responseJSON { response in - switch response.result { - case let .success(value): - let loginModel = LoginResultModel(respJson: JSON(value)) - if loginModel.code == 200 { - // 将token存起来 - keychain[Constant.Token.rawValue] = loginModel.data!.token - // 跳转主页 - startMainMenuView() - } else { - AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + .responseJSON { response in + switch response.result { + case let .success(value): + let loginModel = LoginResultModel(respJson: JSON(value)) + if loginModel.code == 200 { + // 将token存起来 + defaults.set(loginModel.data!.token, for: tokenKey) + // 跳转主页 + startMainMenuView() + } else { + AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + } + case .failure: + AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - case .failure: - AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - } case .failure: AlertHub.shared.showWaringAlert(controller: self, message: "检验失败,无法登陆") } @@ -84,7 +85,7 @@ // 跳转到主页 @objc func startMainMenuView() { - keychain[Constant.isSingleMode.rawValue] = "OFF" + defaults.set(false, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -104,7 +105,7 @@ // 单机模式 @IBAction func toSingleModeAction(_ sender: UIButton) { - keychain[Constant.isSingleMode.rawValue] = "ON" + defaults.set(true, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -116,10 +117,10 @@ @IBAction func changeServerConfig(_ sender: UIButton) { var inputText: UITextField! // 读取本地数据,输入框显示默认IP - let ip = keychain[Constant.ServerConfig.rawValue] + let baseURL = defaults.get(for: serverConfigKey)! let msgAlertCtr = UIAlertController(title: nil, message: "请输入后台服务器地址", preferredStyle: .alert) msgAlertCtr.addTextField { textField in - textField.text = ip + textField.text = baseURL inputText = textField } let actionOK = UIAlertAction(title: "保存", style: .default) { [self] (_: UIAlertAction) -> Void in @@ -128,7 +129,7 @@ return } // 存本地 - keychain[Constant.ServerConfig.rawValue] = configData! + defaults.set(configData!, for: serverConfigKey) } let actionCancel = UIAlertAction(title: "取消", style: .cancel, handler: nil) // 设置取消按钮颜色为红色 diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift index bb92ed1..a6aaa43 100644 --- a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift +++ b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift @@ -6,14 +6,14 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit class EventTaskViewController: UIViewController, TransferIdDelegate { @IBOutlet var taskTableView: UITableView! - private let keychain = Keychain() + private let defaults = Defaults.shared private var id: String? private var rowsArray = [ListModel]() private var valueDelegate: TransferValueDelegate! @@ -24,11 +24,11 @@ taskTableView.dataSource = self taskTableView.delegate = self // 查询事件列表 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let eventListURL = baseURL! + Constant.searchByInspect.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let eventListURL = baseURL + Constant.searchByInspect.rawValue Alamofire.request(eventListURL, method: .get, parameters: ["inspectionId": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): rowsArray = EventTaskModel(respJson: JSON(value)).data.list diff --git a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift index f811c5d..f9f171a 100644 --- a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SnapKit import SwiftyJSON import UIKit @@ -15,7 +15,7 @@ private var id: String? private var mapView: MAMapView! private var inspectView: UIView! - private let keychain = Keychain() + private let defaults = Defaults.shared @IBOutlet var inspectNameLabel: UILabel! @IBOutlet var inspectStartTimeLabel: UILabel! @@ -63,11 +63,11 @@ } func loadInspectDetail() { - let baseURL = keychain[Constant.ServerConfig.rawValue] - let inspectionDetailURL = baseURL! + Constant.inspectionDetail.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let inspectionDetailURL = baseURL + Constant.inspectionDetail.rawValue Alamofire.request(inspectionDetailURL, method: .get, parameters: ["id": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): setInspectData(detailModel: InspectDetailModel(respJson: JSON(value)).data) diff --git a/LaserMethane/ViewController/Inspect/InspectViewController.swift b/LaserMethane/ViewController/Inspect/InspectViewController.swift index bf9fac7..f275624 100644 --- a/LaserMethane/ViewController/Inspect/InspectViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var inspectTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [RowsModel] = [] private var dformatter = DateFormatter() @@ -44,11 +44,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let inspectListURL = baseURL! + Constant.inspectList.rawValue Alamofire.request(inspectListURL, method: .get, parameters: ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): let inspectModel = InspectListModel(respJson: JSON(value)) diff --git a/LaserMethane/ViewController/Login/LoginViewController.swift b/LaserMethane/ViewController/Login/LoginViewController.swift index d9edc12..a4cd6e9 100644 --- a/LaserMethane/ViewController/Login/LoginViewController.swift +++ b/LaserMethane/ViewController/Login/LoginViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit @@ -14,7 +14,8 @@ @IBOutlet var userNameView: UITextField! @IBOutlet var passwordView: UITextField! @IBOutlet var loginButton: UIButton! - private var keychain = Keychain() + + private let defaults = Defaults.shared override func viewDidLoad() { super.viewDidLoad() @@ -25,8 +26,8 @@ loginButton.backgroundColor = [21, 101, 227].transferUIColor() loginButton.layer.cornerRadius = 18 // 设置圆角 // 设置默认账号密码 - userNameView.text = keychain[Constant.UserName.rawValue] ?? "" - passwordView.text = keychain[Constant.Password.rawValue] ?? "" + userNameView.text = defaults.get(for: userNameKey) ?? "" + passwordView.text = defaults.get(for: passwordKey) ?? "" } @IBAction func loginAction(_ sender: UIButton) { @@ -41,41 +42,41 @@ return } // 记录账号密码 - keychain[Constant.UserName.rawValue] = userName - keychain[Constant.Password.rawValue] = password + defaults.set(userName!, for: userNameKey) + defaults.set(password!, for: passwordKey) // 访问后台,开始登录 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let configURL = baseURL! + Constant.baseConfig.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let configURL = baseURL + Constant.baseConfig.rawValue Alamofire.request(configURL, method: .get).responseJSON { [self] response in switch response.result { case let .success(value): let configModel = BaseConfigModel(respJson: JSON(value)) // 将密码经由RSA和publicKey加密 guard let pwdWithKey = try? password?.encryptByRSA(publicKey: (configModel.data?.publicKey)!) - else { + else { return } // 登录 - let loginURL = baseURL! + Constant.login.rawValue + let loginURL = baseURL + Constant.login.rawValue Alamofire.request(loginURL, method: .post, parameters: ["username": userName!, "password": pwdWithKey]) - .responseJSON { response in - switch response.result { - case let .success(value): - let loginModel = LoginResultModel(respJson: JSON(value)) - if loginModel.code == 200 { - // 将token存起来 - keychain[Constant.Token.rawValue] = loginModel.data!.token - // 跳转主页 - startMainMenuView() - } else { - AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + .responseJSON { response in + switch response.result { + case let .success(value): + let loginModel = LoginResultModel(respJson: JSON(value)) + if loginModel.code == 200 { + // 将token存起来 + defaults.set(loginModel.data!.token, for: tokenKey) + // 跳转主页 + startMainMenuView() + } else { + AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + } + case .failure: + AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - case .failure: - AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - } case .failure: AlertHub.shared.showWaringAlert(controller: self, message: "检验失败,无法登陆") } @@ -84,7 +85,7 @@ // 跳转到主页 @objc func startMainMenuView() { - keychain[Constant.isSingleMode.rawValue] = "OFF" + defaults.set(false, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -104,7 +105,7 @@ // 单机模式 @IBAction func toSingleModeAction(_ sender: UIButton) { - keychain[Constant.isSingleMode.rawValue] = "ON" + defaults.set(true, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -116,10 +117,10 @@ @IBAction func changeServerConfig(_ sender: UIButton) { var inputText: UITextField! // 读取本地数据,输入框显示默认IP - let ip = keychain[Constant.ServerConfig.rawValue] + let baseURL = defaults.get(for: serverConfigKey)! let msgAlertCtr = UIAlertController(title: nil, message: "请输入后台服务器地址", preferredStyle: .alert) msgAlertCtr.addTextField { textField in - textField.text = ip + textField.text = baseURL inputText = textField } let actionOK = UIAlertAction(title: "保存", style: .default) { [self] (_: UIAlertAction) -> Void in @@ -128,7 +129,7 @@ return } // 存本地 - keychain[Constant.ServerConfig.rawValue] = configData! + defaults.set(configData!, for: serverConfigKey) } let actionCancel = UIAlertAction(title: "取消", style: .cancel, handler: nil) // 设置取消按钮颜色为红色 diff --git a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift index 4c9daf5..499c156 100644 --- a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift +++ b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import KeychainAccess import SwiftyJSON import UIKit @@ -15,8 +16,9 @@ @IBOutlet var logSearchView: UIView! @IBOutlet var settingsView: UIView! - private var keychain = Keychain() - private var isSingleMode: String! + private let defaults = Defaults.shared + private let keychain = Keychain() + private var isSingleMode = false override func viewDidLoad() { super.viewDidLoad() @@ -27,8 +29,8 @@ let dict: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white] navigationController?.navigationBar.titleTextAttributes = dict // title color - isSingleMode = keychain[Constant.isSingleMode.rawValue] ?? "OFF" - if isSingleMode == "OFF" { + isSingleMode = defaults.get(for: singleModeKey) ?? false + if !isSingleMode { // 如果不是单机模式登录,则获取用户信息 obtainUserInfo() } @@ -37,9 +39,9 @@ } func obtainUserInfo() { - let token = keychain[Constant.Token.rawValue] - let obtainUserInfoURL = keychain[Constant.ServerConfig.rawValue]! + Constant.userInfo.rawValue - Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token!]).responseJSON { [self] response in + let token = defaults.get(for: tokenKey)! + let obtainUserInfoURL = defaults.get(for: serverConfigKey)! + Constant.userInfo.rawValue + Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token]).responseJSON { [self] response in switch response.result { case let .success(value): let userModel = UserInfoModel(respJson: JSON(value)) @@ -74,7 +76,7 @@ // 新建巡检 @IBAction func toCreateInspectView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeMapViewController(), animated: true) } else { navigationController?.pushViewController(MapViewController(), animated: true) @@ -86,14 +88,14 @@ // 弹框选择 let selectController = UIAlertController(title: "选择记录类型", message: nil, preferredStyle: .alert) let inspectButton = UIAlertAction(title: "巡检记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeInspectViewController(), animated: true) } else { navigationController?.pushViewController(InspectViewController(), animated: true) } }) let eventLogButton = UIAlertAction(title: "事件记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeEventViewController(), animated: true) } else { navigationController?.pushViewController(EventViewController(), animated: true) @@ -106,7 +108,7 @@ // 系统设置 @IBAction func toUserSettingsView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeSettingViewController(), animated: true) } else { navigationController?.pushViewController(SettingViewController(), animated: true) diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift index bb92ed1..a6aaa43 100644 --- a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift +++ b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift @@ -6,14 +6,14 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit class EventTaskViewController: UIViewController, TransferIdDelegate { @IBOutlet var taskTableView: UITableView! - private let keychain = Keychain() + private let defaults = Defaults.shared private var id: String? private var rowsArray = [ListModel]() private var valueDelegate: TransferValueDelegate! @@ -24,11 +24,11 @@ taskTableView.dataSource = self taskTableView.delegate = self // 查询事件列表 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let eventListURL = baseURL! + Constant.searchByInspect.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let eventListURL = baseURL + Constant.searchByInspect.rawValue Alamofire.request(eventListURL, method: .get, parameters: ["inspectionId": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): rowsArray = EventTaskModel(respJson: JSON(value)).data.list diff --git a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift index f811c5d..f9f171a 100644 --- a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SnapKit import SwiftyJSON import UIKit @@ -15,7 +15,7 @@ private var id: String? private var mapView: MAMapView! private var inspectView: UIView! - private let keychain = Keychain() + private let defaults = Defaults.shared @IBOutlet var inspectNameLabel: UILabel! @IBOutlet var inspectStartTimeLabel: UILabel! @@ -63,11 +63,11 @@ } func loadInspectDetail() { - let baseURL = keychain[Constant.ServerConfig.rawValue] - let inspectionDetailURL = baseURL! + Constant.inspectionDetail.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let inspectionDetailURL = baseURL + Constant.inspectionDetail.rawValue Alamofire.request(inspectionDetailURL, method: .get, parameters: ["id": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): setInspectData(detailModel: InspectDetailModel(respJson: JSON(value)).data) diff --git a/LaserMethane/ViewController/Inspect/InspectViewController.swift b/LaserMethane/ViewController/Inspect/InspectViewController.swift index bf9fac7..f275624 100644 --- a/LaserMethane/ViewController/Inspect/InspectViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var inspectTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [RowsModel] = [] private var dformatter = DateFormatter() @@ -44,11 +44,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let inspectListURL = baseURL! + Constant.inspectList.rawValue Alamofire.request(inspectListURL, method: .get, parameters: ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): let inspectModel = InspectListModel(respJson: JSON(value)) diff --git a/LaserMethane/ViewController/Login/LoginViewController.swift b/LaserMethane/ViewController/Login/LoginViewController.swift index d9edc12..a4cd6e9 100644 --- a/LaserMethane/ViewController/Login/LoginViewController.swift +++ b/LaserMethane/ViewController/Login/LoginViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit @@ -14,7 +14,8 @@ @IBOutlet var userNameView: UITextField! @IBOutlet var passwordView: UITextField! @IBOutlet var loginButton: UIButton! - private var keychain = Keychain() + + private let defaults = Defaults.shared override func viewDidLoad() { super.viewDidLoad() @@ -25,8 +26,8 @@ loginButton.backgroundColor = [21, 101, 227].transferUIColor() loginButton.layer.cornerRadius = 18 // 设置圆角 // 设置默认账号密码 - userNameView.text = keychain[Constant.UserName.rawValue] ?? "" - passwordView.text = keychain[Constant.Password.rawValue] ?? "" + userNameView.text = defaults.get(for: userNameKey) ?? "" + passwordView.text = defaults.get(for: passwordKey) ?? "" } @IBAction func loginAction(_ sender: UIButton) { @@ -41,41 +42,41 @@ return } // 记录账号密码 - keychain[Constant.UserName.rawValue] = userName - keychain[Constant.Password.rawValue] = password + defaults.set(userName!, for: userNameKey) + defaults.set(password!, for: passwordKey) // 访问后台,开始登录 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let configURL = baseURL! + Constant.baseConfig.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let configURL = baseURL + Constant.baseConfig.rawValue Alamofire.request(configURL, method: .get).responseJSON { [self] response in switch response.result { case let .success(value): let configModel = BaseConfigModel(respJson: JSON(value)) // 将密码经由RSA和publicKey加密 guard let pwdWithKey = try? password?.encryptByRSA(publicKey: (configModel.data?.publicKey)!) - else { + else { return } // 登录 - let loginURL = baseURL! + Constant.login.rawValue + let loginURL = baseURL + Constant.login.rawValue Alamofire.request(loginURL, method: .post, parameters: ["username": userName!, "password": pwdWithKey]) - .responseJSON { response in - switch response.result { - case let .success(value): - let loginModel = LoginResultModel(respJson: JSON(value)) - if loginModel.code == 200 { - // 将token存起来 - keychain[Constant.Token.rawValue] = loginModel.data!.token - // 跳转主页 - startMainMenuView() - } else { - AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + .responseJSON { response in + switch response.result { + case let .success(value): + let loginModel = LoginResultModel(respJson: JSON(value)) + if loginModel.code == 200 { + // 将token存起来 + defaults.set(loginModel.data!.token, for: tokenKey) + // 跳转主页 + startMainMenuView() + } else { + AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + } + case .failure: + AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - case .failure: - AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - } case .failure: AlertHub.shared.showWaringAlert(controller: self, message: "检验失败,无法登陆") } @@ -84,7 +85,7 @@ // 跳转到主页 @objc func startMainMenuView() { - keychain[Constant.isSingleMode.rawValue] = "OFF" + defaults.set(false, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -104,7 +105,7 @@ // 单机模式 @IBAction func toSingleModeAction(_ sender: UIButton) { - keychain[Constant.isSingleMode.rawValue] = "ON" + defaults.set(true, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -116,10 +117,10 @@ @IBAction func changeServerConfig(_ sender: UIButton) { var inputText: UITextField! // 读取本地数据,输入框显示默认IP - let ip = keychain[Constant.ServerConfig.rawValue] + let baseURL = defaults.get(for: serverConfigKey)! let msgAlertCtr = UIAlertController(title: nil, message: "请输入后台服务器地址", preferredStyle: .alert) msgAlertCtr.addTextField { textField in - textField.text = ip + textField.text = baseURL inputText = textField } let actionOK = UIAlertAction(title: "保存", style: .default) { [self] (_: UIAlertAction) -> Void in @@ -128,7 +129,7 @@ return } // 存本地 - keychain[Constant.ServerConfig.rawValue] = configData! + defaults.set(configData!, for: serverConfigKey) } let actionCancel = UIAlertAction(title: "取消", style: .cancel, handler: nil) // 设置取消按钮颜色为红色 diff --git a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift index 4c9daf5..499c156 100644 --- a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift +++ b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import KeychainAccess import SwiftyJSON import UIKit @@ -15,8 +16,9 @@ @IBOutlet var logSearchView: UIView! @IBOutlet var settingsView: UIView! - private var keychain = Keychain() - private var isSingleMode: String! + private let defaults = Defaults.shared + private let keychain = Keychain() + private var isSingleMode = false override func viewDidLoad() { super.viewDidLoad() @@ -27,8 +29,8 @@ let dict: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white] navigationController?.navigationBar.titleTextAttributes = dict // title color - isSingleMode = keychain[Constant.isSingleMode.rawValue] ?? "OFF" - if isSingleMode == "OFF" { + isSingleMode = defaults.get(for: singleModeKey) ?? false + if !isSingleMode { // 如果不是单机模式登录,则获取用户信息 obtainUserInfo() } @@ -37,9 +39,9 @@ } func obtainUserInfo() { - let token = keychain[Constant.Token.rawValue] - let obtainUserInfoURL = keychain[Constant.ServerConfig.rawValue]! + Constant.userInfo.rawValue - Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token!]).responseJSON { [self] response in + let token = defaults.get(for: tokenKey)! + let obtainUserInfoURL = defaults.get(for: serverConfigKey)! + Constant.userInfo.rawValue + Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token]).responseJSON { [self] response in switch response.result { case let .success(value): let userModel = UserInfoModel(respJson: JSON(value)) @@ -74,7 +76,7 @@ // 新建巡检 @IBAction func toCreateInspectView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeMapViewController(), animated: true) } else { navigationController?.pushViewController(MapViewController(), animated: true) @@ -86,14 +88,14 @@ // 弹框选择 let selectController = UIAlertController(title: "选择记录类型", message: nil, preferredStyle: .alert) let inspectButton = UIAlertAction(title: "巡检记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeInspectViewController(), animated: true) } else { navigationController?.pushViewController(InspectViewController(), animated: true) } }) let eventLogButton = UIAlertAction(title: "事件记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeEventViewController(), animated: true) } else { navigationController?.pushViewController(EventViewController(), animated: true) @@ -106,7 +108,7 @@ // 系统设置 @IBAction func toUserSettingsView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeSettingViewController(), animated: true) } else { navigationController?.pushViewController(SettingViewController(), animated: true) diff --git a/LaserMethane/ViewController/Map/MapViewController.swift b/LaserMethane/ViewController/Map/MapViewController.swift index 7b7b415..6ecbca3 100644 --- a/LaserMethane/ViewController/Map/MapViewController.swift +++ b/LaserMethane/ViewController/Map/MapViewController.swift @@ -16,13 +16,10 @@ import UIKit class MapViewController: UIViewController, MAMapViewDelegate { + private let timeFormatter = DateFormatter() private let manager = CLLocationManager() private let locationManager = AMapLocationManager() private let defaults = Defaults.shared - // 巡检数据缓存模型 - private let defaultKey = Key("InspectionCacheModel") - // 巡检任务完成标志 - private let statusKey = Key("inspectionStatus") private var mapView: MAMapView! private var topTagView: UIView! @@ -58,7 +55,6 @@ private var inputTextField: UITextField! private var inspectionId: String! // 新建巡检数据模型 - private let timeFormatter = DateFormatter() private var model: NewInspectionModel! private var routeArray = [NewRouteModel]() private var alarmCount: Int = 0 @@ -74,7 +70,7 @@ navigationController?.navigationBar.titleTextAttributes = dict navigationController?.navigationBar.tintColor = .white // 初始化基本数据 - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let userJson = keychain[Constant.UserJson.rawValue]! let data = userJson.data(using: String.Encoding.utf8, allowLossyConversion: false) ?? Data() userModel = UserInfoModel(respJson: JSON(data)) @@ -301,19 +297,19 @@ let msgAlertCtr = UIAlertController(title: "温馨提示", message: "确定结束巡检吗?", preferredStyle: .alert) let actionOK = UIAlertAction(title: "确定", style: .default) { [self] (_: UIAlertAction) -> Void in // 取最新位置作为结束位置经纬度 - let endLng = keychain[Constant.CurrentLongitude.rawValue]! as String - let endLat = keychain[Constant.CurrentLatitude.rawValue]! as String + let endLng = defaults.get(for: lngKey) + let endLat = defaults.get(for: latKey) // 提交巡检 let addInspectionURL = baseURL! + Constant.addInspection.rawValue let timeInterval: TimeInterval = Date().timeIntervalSince1970 let endTime = timeFormatter.string(from: Date(timeIntervalSince1970: timeInterval)) let param: [String: Any] = ["id": model.id, "name": model.name, "startTime": model.startTime, "endTime": endTime, "date": model.date, "startLng": model.startLng, - "startLat": model.startLat, "endLng": Double(endLng)!, "endLat": Double(endLat)!, + "startLat": model.startLat, "endLng": endLng, "endLat": endLat, "routes": model.routes, "user": model.user] // 提交参数: ["startLat": 39.915913628472225, "id": "162925125712000", "date": "2021-08-18", "startTime": "2021-08-18 09:47:37", "endLng": 116.26874240451389, "startLng": 116.26874240451389, "routes": "[{\"lat\":39.915913628472225,\"lng\":116.26874240451389}]", "user": "王晓颖", "name": "测试iOS", "endTime": "2021-08-18 09:47:56", "endLat": 39.915913628472225] print("提交参数: \(param)") - Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { response in switch response.result { case let .success(value): @@ -397,8 +393,8 @@ } @IBAction func addEventAction(_ sender: Any) { - let lng = keychain[Constant.CurrentLongitude.rawValue]! as String - let lat = keychain[Constant.CurrentLatitude.rawValue]! as String + let lng = defaults.get(for: lngKey) + let lat = defaults.get(for: latKey) print("新建事件位置信息: [\(lng), \(lat)]") let newEventViewController = NewEventViewController(nibName: "NewEventViewController", bundle: nil) @@ -412,8 +408,8 @@ dic: ["isWarning": true, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) let eventLogButton = UIAlertAction(title: "自定义事件", style: .default, handler: { [self] _ in @@ -422,8 +418,8 @@ dic: ["isWarning": false, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) selectController.addAction(inspectButton) @@ -459,8 +455,8 @@ func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) { print("位置信息: [\(location.coordinate.latitude),\(location.coordinate.longitude)]") // 保存最新的一次位置 - keychain[Constant.CurrentLongitude.rawValue] = location.coordinate.longitude.description - keychain[Constant.CurrentLatitude.rawValue] = location.coordinate.latitude.description + defaults.set(location.coordinate.longitude, for: lngKey) + defaults.set(location.coordinate.latitude, for: latKey) // 设置起始经纬度 if model.startLng == 0.0 || model.startLat == 0.0 { model.startLng = location.coordinate.longitude @@ -651,14 +647,14 @@ let maxPotencyValue = m1 + m2 + m3 + UInt(data[11]) maxValueLabel.text = maxPotencyValue.description // 判断是否需要报警 - let isOpenWarning = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpenWarning == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { if maxPotencyValue >= alarmValue { // 当前值大于设置值,需要报警 // OtherUtils.playSound(mapActivity, R.raw.alarm) AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) - let isAutoRecord = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAutoRecord == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { // 如果连续超过10个报警,自动生成报警事件 alarmCount += 1 if alarmCount >= 10 { @@ -684,16 +680,16 @@ } isGeneratingTask = true // 取最新位置作为报警位置经纬度 - let longitude = keychain[Constant.CurrentLongitude.rawValue]! as String - let latitude = keychain[Constant.CurrentLatitude.rawValue]! as String + let longitude = defaults.get(for: lngKey) + let latitude = defaults.get(for: latKey) // 提交事件 let addEventURL = baseURL! + Constant.addEvent.rawValue let param: [String: Any] = ["id": "t".id(), "inspectionId": model.id, "name": model.name, - "createTime": model.startTime, "type": "报警事件", "lng": Double(longitude)!, - "lat": Double(latitude)!, "data": Double(maxValue)!, "images": "", + "createTime": model.startTime, "type": "报警事件", "lng": longitude, + "lat": latitude, "data": Double(maxValue)!, "images": "", "description": "自动报警记录", "user": model.user] print("提交参数: \(param)") - Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift index bb92ed1..a6aaa43 100644 --- a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift +++ b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift @@ -6,14 +6,14 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit class EventTaskViewController: UIViewController, TransferIdDelegate { @IBOutlet var taskTableView: UITableView! - private let keychain = Keychain() + private let defaults = Defaults.shared private var id: String? private var rowsArray = [ListModel]() private var valueDelegate: TransferValueDelegate! @@ -24,11 +24,11 @@ taskTableView.dataSource = self taskTableView.delegate = self // 查询事件列表 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let eventListURL = baseURL! + Constant.searchByInspect.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let eventListURL = baseURL + Constant.searchByInspect.rawValue Alamofire.request(eventListURL, method: .get, parameters: ["inspectionId": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): rowsArray = EventTaskModel(respJson: JSON(value)).data.list diff --git a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift index f811c5d..f9f171a 100644 --- a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SnapKit import SwiftyJSON import UIKit @@ -15,7 +15,7 @@ private var id: String? private var mapView: MAMapView! private var inspectView: UIView! - private let keychain = Keychain() + private let defaults = Defaults.shared @IBOutlet var inspectNameLabel: UILabel! @IBOutlet var inspectStartTimeLabel: UILabel! @@ -63,11 +63,11 @@ } func loadInspectDetail() { - let baseURL = keychain[Constant.ServerConfig.rawValue] - let inspectionDetailURL = baseURL! + Constant.inspectionDetail.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let inspectionDetailURL = baseURL + Constant.inspectionDetail.rawValue Alamofire.request(inspectionDetailURL, method: .get, parameters: ["id": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): setInspectData(detailModel: InspectDetailModel(respJson: JSON(value)).data) diff --git a/LaserMethane/ViewController/Inspect/InspectViewController.swift b/LaserMethane/ViewController/Inspect/InspectViewController.swift index bf9fac7..f275624 100644 --- a/LaserMethane/ViewController/Inspect/InspectViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var inspectTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [RowsModel] = [] private var dformatter = DateFormatter() @@ -44,11 +44,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let inspectListURL = baseURL! + Constant.inspectList.rawValue Alamofire.request(inspectListURL, method: .get, parameters: ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): let inspectModel = InspectListModel(respJson: JSON(value)) diff --git a/LaserMethane/ViewController/Login/LoginViewController.swift b/LaserMethane/ViewController/Login/LoginViewController.swift index d9edc12..a4cd6e9 100644 --- a/LaserMethane/ViewController/Login/LoginViewController.swift +++ b/LaserMethane/ViewController/Login/LoginViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit @@ -14,7 +14,8 @@ @IBOutlet var userNameView: UITextField! @IBOutlet var passwordView: UITextField! @IBOutlet var loginButton: UIButton! - private var keychain = Keychain() + + private let defaults = Defaults.shared override func viewDidLoad() { super.viewDidLoad() @@ -25,8 +26,8 @@ loginButton.backgroundColor = [21, 101, 227].transferUIColor() loginButton.layer.cornerRadius = 18 // 设置圆角 // 设置默认账号密码 - userNameView.text = keychain[Constant.UserName.rawValue] ?? "" - passwordView.text = keychain[Constant.Password.rawValue] ?? "" + userNameView.text = defaults.get(for: userNameKey) ?? "" + passwordView.text = defaults.get(for: passwordKey) ?? "" } @IBAction func loginAction(_ sender: UIButton) { @@ -41,41 +42,41 @@ return } // 记录账号密码 - keychain[Constant.UserName.rawValue] = userName - keychain[Constant.Password.rawValue] = password + defaults.set(userName!, for: userNameKey) + defaults.set(password!, for: passwordKey) // 访问后台,开始登录 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let configURL = baseURL! + Constant.baseConfig.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let configURL = baseURL + Constant.baseConfig.rawValue Alamofire.request(configURL, method: .get).responseJSON { [self] response in switch response.result { case let .success(value): let configModel = BaseConfigModel(respJson: JSON(value)) // 将密码经由RSA和publicKey加密 guard let pwdWithKey = try? password?.encryptByRSA(publicKey: (configModel.data?.publicKey)!) - else { + else { return } // 登录 - let loginURL = baseURL! + Constant.login.rawValue + let loginURL = baseURL + Constant.login.rawValue Alamofire.request(loginURL, method: .post, parameters: ["username": userName!, "password": pwdWithKey]) - .responseJSON { response in - switch response.result { - case let .success(value): - let loginModel = LoginResultModel(respJson: JSON(value)) - if loginModel.code == 200 { - // 将token存起来 - keychain[Constant.Token.rawValue] = loginModel.data!.token - // 跳转主页 - startMainMenuView() - } else { - AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + .responseJSON { response in + switch response.result { + case let .success(value): + let loginModel = LoginResultModel(respJson: JSON(value)) + if loginModel.code == 200 { + // 将token存起来 + defaults.set(loginModel.data!.token, for: tokenKey) + // 跳转主页 + startMainMenuView() + } else { + AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + } + case .failure: + AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - case .failure: - AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - } case .failure: AlertHub.shared.showWaringAlert(controller: self, message: "检验失败,无法登陆") } @@ -84,7 +85,7 @@ // 跳转到主页 @objc func startMainMenuView() { - keychain[Constant.isSingleMode.rawValue] = "OFF" + defaults.set(false, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -104,7 +105,7 @@ // 单机模式 @IBAction func toSingleModeAction(_ sender: UIButton) { - keychain[Constant.isSingleMode.rawValue] = "ON" + defaults.set(true, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -116,10 +117,10 @@ @IBAction func changeServerConfig(_ sender: UIButton) { var inputText: UITextField! // 读取本地数据,输入框显示默认IP - let ip = keychain[Constant.ServerConfig.rawValue] + let baseURL = defaults.get(for: serverConfigKey)! let msgAlertCtr = UIAlertController(title: nil, message: "请输入后台服务器地址", preferredStyle: .alert) msgAlertCtr.addTextField { textField in - textField.text = ip + textField.text = baseURL inputText = textField } let actionOK = UIAlertAction(title: "保存", style: .default) { [self] (_: UIAlertAction) -> Void in @@ -128,7 +129,7 @@ return } // 存本地 - keychain[Constant.ServerConfig.rawValue] = configData! + defaults.set(configData!, for: serverConfigKey) } let actionCancel = UIAlertAction(title: "取消", style: .cancel, handler: nil) // 设置取消按钮颜色为红色 diff --git a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift index 4c9daf5..499c156 100644 --- a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift +++ b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import KeychainAccess import SwiftyJSON import UIKit @@ -15,8 +16,9 @@ @IBOutlet var logSearchView: UIView! @IBOutlet var settingsView: UIView! - private var keychain = Keychain() - private var isSingleMode: String! + private let defaults = Defaults.shared + private let keychain = Keychain() + private var isSingleMode = false override func viewDidLoad() { super.viewDidLoad() @@ -27,8 +29,8 @@ let dict: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white] navigationController?.navigationBar.titleTextAttributes = dict // title color - isSingleMode = keychain[Constant.isSingleMode.rawValue] ?? "OFF" - if isSingleMode == "OFF" { + isSingleMode = defaults.get(for: singleModeKey) ?? false + if !isSingleMode { // 如果不是单机模式登录,则获取用户信息 obtainUserInfo() } @@ -37,9 +39,9 @@ } func obtainUserInfo() { - let token = keychain[Constant.Token.rawValue] - let obtainUserInfoURL = keychain[Constant.ServerConfig.rawValue]! + Constant.userInfo.rawValue - Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token!]).responseJSON { [self] response in + let token = defaults.get(for: tokenKey)! + let obtainUserInfoURL = defaults.get(for: serverConfigKey)! + Constant.userInfo.rawValue + Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token]).responseJSON { [self] response in switch response.result { case let .success(value): let userModel = UserInfoModel(respJson: JSON(value)) @@ -74,7 +76,7 @@ // 新建巡检 @IBAction func toCreateInspectView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeMapViewController(), animated: true) } else { navigationController?.pushViewController(MapViewController(), animated: true) @@ -86,14 +88,14 @@ // 弹框选择 let selectController = UIAlertController(title: "选择记录类型", message: nil, preferredStyle: .alert) let inspectButton = UIAlertAction(title: "巡检记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeInspectViewController(), animated: true) } else { navigationController?.pushViewController(InspectViewController(), animated: true) } }) let eventLogButton = UIAlertAction(title: "事件记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeEventViewController(), animated: true) } else { navigationController?.pushViewController(EventViewController(), animated: true) @@ -106,7 +108,7 @@ // 系统设置 @IBAction func toUserSettingsView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeSettingViewController(), animated: true) } else { navigationController?.pushViewController(SettingViewController(), animated: true) diff --git a/LaserMethane/ViewController/Map/MapViewController.swift b/LaserMethane/ViewController/Map/MapViewController.swift index 7b7b415..6ecbca3 100644 --- a/LaserMethane/ViewController/Map/MapViewController.swift +++ b/LaserMethane/ViewController/Map/MapViewController.swift @@ -16,13 +16,10 @@ import UIKit class MapViewController: UIViewController, MAMapViewDelegate { + private let timeFormatter = DateFormatter() private let manager = CLLocationManager() private let locationManager = AMapLocationManager() private let defaults = Defaults.shared - // 巡检数据缓存模型 - private let defaultKey = Key("InspectionCacheModel") - // 巡检任务完成标志 - private let statusKey = Key("inspectionStatus") private var mapView: MAMapView! private var topTagView: UIView! @@ -58,7 +55,6 @@ private var inputTextField: UITextField! private var inspectionId: String! // 新建巡检数据模型 - private let timeFormatter = DateFormatter() private var model: NewInspectionModel! private var routeArray = [NewRouteModel]() private var alarmCount: Int = 0 @@ -74,7 +70,7 @@ navigationController?.navigationBar.titleTextAttributes = dict navigationController?.navigationBar.tintColor = .white // 初始化基本数据 - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let userJson = keychain[Constant.UserJson.rawValue]! let data = userJson.data(using: String.Encoding.utf8, allowLossyConversion: false) ?? Data() userModel = UserInfoModel(respJson: JSON(data)) @@ -301,19 +297,19 @@ let msgAlertCtr = UIAlertController(title: "温馨提示", message: "确定结束巡检吗?", preferredStyle: .alert) let actionOK = UIAlertAction(title: "确定", style: .default) { [self] (_: UIAlertAction) -> Void in // 取最新位置作为结束位置经纬度 - let endLng = keychain[Constant.CurrentLongitude.rawValue]! as String - let endLat = keychain[Constant.CurrentLatitude.rawValue]! as String + let endLng = defaults.get(for: lngKey) + let endLat = defaults.get(for: latKey) // 提交巡检 let addInspectionURL = baseURL! + Constant.addInspection.rawValue let timeInterval: TimeInterval = Date().timeIntervalSince1970 let endTime = timeFormatter.string(from: Date(timeIntervalSince1970: timeInterval)) let param: [String: Any] = ["id": model.id, "name": model.name, "startTime": model.startTime, "endTime": endTime, "date": model.date, "startLng": model.startLng, - "startLat": model.startLat, "endLng": Double(endLng)!, "endLat": Double(endLat)!, + "startLat": model.startLat, "endLng": endLng, "endLat": endLat, "routes": model.routes, "user": model.user] // 提交参数: ["startLat": 39.915913628472225, "id": "162925125712000", "date": "2021-08-18", "startTime": "2021-08-18 09:47:37", "endLng": 116.26874240451389, "startLng": 116.26874240451389, "routes": "[{\"lat\":39.915913628472225,\"lng\":116.26874240451389}]", "user": "王晓颖", "name": "测试iOS", "endTime": "2021-08-18 09:47:56", "endLat": 39.915913628472225] print("提交参数: \(param)") - Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { response in switch response.result { case let .success(value): @@ -397,8 +393,8 @@ } @IBAction func addEventAction(_ sender: Any) { - let lng = keychain[Constant.CurrentLongitude.rawValue]! as String - let lat = keychain[Constant.CurrentLatitude.rawValue]! as String + let lng = defaults.get(for: lngKey) + let lat = defaults.get(for: latKey) print("新建事件位置信息: [\(lng), \(lat)]") let newEventViewController = NewEventViewController(nibName: "NewEventViewController", bundle: nil) @@ -412,8 +408,8 @@ dic: ["isWarning": true, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) let eventLogButton = UIAlertAction(title: "自定义事件", style: .default, handler: { [self] _ in @@ -422,8 +418,8 @@ dic: ["isWarning": false, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) selectController.addAction(inspectButton) @@ -459,8 +455,8 @@ func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) { print("位置信息: [\(location.coordinate.latitude),\(location.coordinate.longitude)]") // 保存最新的一次位置 - keychain[Constant.CurrentLongitude.rawValue] = location.coordinate.longitude.description - keychain[Constant.CurrentLatitude.rawValue] = location.coordinate.latitude.description + defaults.set(location.coordinate.longitude, for: lngKey) + defaults.set(location.coordinate.latitude, for: latKey) // 设置起始经纬度 if model.startLng == 0.0 || model.startLat == 0.0 { model.startLng = location.coordinate.longitude @@ -651,14 +647,14 @@ let maxPotencyValue = m1 + m2 + m3 + UInt(data[11]) maxValueLabel.text = maxPotencyValue.description // 判断是否需要报警 - let isOpenWarning = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpenWarning == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { if maxPotencyValue >= alarmValue { // 当前值大于设置值,需要报警 // OtherUtils.playSound(mapActivity, R.raw.alarm) AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) - let isAutoRecord = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAutoRecord == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { // 如果连续超过10个报警,自动生成报警事件 alarmCount += 1 if alarmCount >= 10 { @@ -684,16 +680,16 @@ } isGeneratingTask = true // 取最新位置作为报警位置经纬度 - let longitude = keychain[Constant.CurrentLongitude.rawValue]! as String - let latitude = keychain[Constant.CurrentLatitude.rawValue]! as String + let longitude = defaults.get(for: lngKey) + let latitude = defaults.get(for: latKey) // 提交事件 let addEventURL = baseURL! + Constant.addEvent.rawValue let param: [String: Any] = ["id": "t".id(), "inspectionId": model.id, "name": model.name, - "createTime": model.startTime, "type": "报警事件", "lng": Double(longitude)!, - "lat": Double(latitude)!, "data": Double(maxValue)!, "images": "", + "createTime": model.startTime, "type": "报警事件", "lng": longitude, + "lat": latitude, "data": Double(maxValue)!, "images": "", "description": "自动报警记录", "user": model.user] print("提交参数: \(param)") - Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Map/NewEventViewController.swift b/LaserMethane/ViewController/Map/NewEventViewController.swift index 305282d..c3004ef 100644 --- a/LaserMethane/ViewController/Map/NewEventViewController.swift +++ b/LaserMethane/ViewController/Map/NewEventViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import HXPHPicker import KeychainAccess import Kingfisher @@ -32,6 +33,7 @@ @IBOutlet var saveEventButton: UIButton! private let keychain = Keychain() + private let defaults = Defaults.shared private let dateformatter = DateFormatter() private var imageUrlArray = [URL]() // 完整的图片url private var imageArray = [String]() // 上传图片成功后服务器返回的图片数组 @@ -54,7 +56,7 @@ let userJson = keychain[Constant.UserJson.rawValue]! let data = userJson.data(using: String.Encoding.utf8, allowLossyConversion: false) ?? Data() userModel = UserInfoModel(respJson: JSON(data)) - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! // setupLayerView() eventTimeLabel.text = currentTime() @@ -176,7 +178,7 @@ "lat": latitude!, "data": eventValueData, "images": imageArray.reformat(), "description": eventDesc!, "user": (userModel.data?.name)!] print("提交参数: \(param)") - Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { [self] response in switch response.result { case let .success(value): @@ -215,7 +217,7 @@ LoadingHub.shared.showLoading(text: "图片上传中...") Alamofire.upload(multipartFormData: { formData in formData.append(imageData, withName: "file", fileName: imageName, mimeType: "image/jpeg") - }, usingThreshold: UInt64(), to: uploadURL, method: .post, headers: ["token": keychain[Constant.Token.rawValue]!]) { [self] result in + }, usingThreshold: UInt64(), to: uploadURL, method: .post, headers: ["token": defaults.get(for: tokenKey)!]) { [self] result in switch result { case let .success(upload, _, _): upload.responseJSON(completionHandler: { value in diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift index bb92ed1..a6aaa43 100644 --- a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift +++ b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift @@ -6,14 +6,14 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit class EventTaskViewController: UIViewController, TransferIdDelegate { @IBOutlet var taskTableView: UITableView! - private let keychain = Keychain() + private let defaults = Defaults.shared private var id: String? private var rowsArray = [ListModel]() private var valueDelegate: TransferValueDelegate! @@ -24,11 +24,11 @@ taskTableView.dataSource = self taskTableView.delegate = self // 查询事件列表 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let eventListURL = baseURL! + Constant.searchByInspect.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let eventListURL = baseURL + Constant.searchByInspect.rawValue Alamofire.request(eventListURL, method: .get, parameters: ["inspectionId": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): rowsArray = EventTaskModel(respJson: JSON(value)).data.list diff --git a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift index f811c5d..f9f171a 100644 --- a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SnapKit import SwiftyJSON import UIKit @@ -15,7 +15,7 @@ private var id: String? private var mapView: MAMapView! private var inspectView: UIView! - private let keychain = Keychain() + private let defaults = Defaults.shared @IBOutlet var inspectNameLabel: UILabel! @IBOutlet var inspectStartTimeLabel: UILabel! @@ -63,11 +63,11 @@ } func loadInspectDetail() { - let baseURL = keychain[Constant.ServerConfig.rawValue] - let inspectionDetailURL = baseURL! + Constant.inspectionDetail.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let inspectionDetailURL = baseURL + Constant.inspectionDetail.rawValue Alamofire.request(inspectionDetailURL, method: .get, parameters: ["id": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): setInspectData(detailModel: InspectDetailModel(respJson: JSON(value)).data) diff --git a/LaserMethane/ViewController/Inspect/InspectViewController.swift b/LaserMethane/ViewController/Inspect/InspectViewController.swift index bf9fac7..f275624 100644 --- a/LaserMethane/ViewController/Inspect/InspectViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var inspectTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [RowsModel] = [] private var dformatter = DateFormatter() @@ -44,11 +44,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let inspectListURL = baseURL! + Constant.inspectList.rawValue Alamofire.request(inspectListURL, method: .get, parameters: ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): let inspectModel = InspectListModel(respJson: JSON(value)) diff --git a/LaserMethane/ViewController/Login/LoginViewController.swift b/LaserMethane/ViewController/Login/LoginViewController.swift index d9edc12..a4cd6e9 100644 --- a/LaserMethane/ViewController/Login/LoginViewController.swift +++ b/LaserMethane/ViewController/Login/LoginViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit @@ -14,7 +14,8 @@ @IBOutlet var userNameView: UITextField! @IBOutlet var passwordView: UITextField! @IBOutlet var loginButton: UIButton! - private var keychain = Keychain() + + private let defaults = Defaults.shared override func viewDidLoad() { super.viewDidLoad() @@ -25,8 +26,8 @@ loginButton.backgroundColor = [21, 101, 227].transferUIColor() loginButton.layer.cornerRadius = 18 // 设置圆角 // 设置默认账号密码 - userNameView.text = keychain[Constant.UserName.rawValue] ?? "" - passwordView.text = keychain[Constant.Password.rawValue] ?? "" + userNameView.text = defaults.get(for: userNameKey) ?? "" + passwordView.text = defaults.get(for: passwordKey) ?? "" } @IBAction func loginAction(_ sender: UIButton) { @@ -41,41 +42,41 @@ return } // 记录账号密码 - keychain[Constant.UserName.rawValue] = userName - keychain[Constant.Password.rawValue] = password + defaults.set(userName!, for: userNameKey) + defaults.set(password!, for: passwordKey) // 访问后台,开始登录 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let configURL = baseURL! + Constant.baseConfig.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let configURL = baseURL + Constant.baseConfig.rawValue Alamofire.request(configURL, method: .get).responseJSON { [self] response in switch response.result { case let .success(value): let configModel = BaseConfigModel(respJson: JSON(value)) // 将密码经由RSA和publicKey加密 guard let pwdWithKey = try? password?.encryptByRSA(publicKey: (configModel.data?.publicKey)!) - else { + else { return } // 登录 - let loginURL = baseURL! + Constant.login.rawValue + let loginURL = baseURL + Constant.login.rawValue Alamofire.request(loginURL, method: .post, parameters: ["username": userName!, "password": pwdWithKey]) - .responseJSON { response in - switch response.result { - case let .success(value): - let loginModel = LoginResultModel(respJson: JSON(value)) - if loginModel.code == 200 { - // 将token存起来 - keychain[Constant.Token.rawValue] = loginModel.data!.token - // 跳转主页 - startMainMenuView() - } else { - AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + .responseJSON { response in + switch response.result { + case let .success(value): + let loginModel = LoginResultModel(respJson: JSON(value)) + if loginModel.code == 200 { + // 将token存起来 + defaults.set(loginModel.data!.token, for: tokenKey) + // 跳转主页 + startMainMenuView() + } else { + AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + } + case .failure: + AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - case .failure: - AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - } case .failure: AlertHub.shared.showWaringAlert(controller: self, message: "检验失败,无法登陆") } @@ -84,7 +85,7 @@ // 跳转到主页 @objc func startMainMenuView() { - keychain[Constant.isSingleMode.rawValue] = "OFF" + defaults.set(false, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -104,7 +105,7 @@ // 单机模式 @IBAction func toSingleModeAction(_ sender: UIButton) { - keychain[Constant.isSingleMode.rawValue] = "ON" + defaults.set(true, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -116,10 +117,10 @@ @IBAction func changeServerConfig(_ sender: UIButton) { var inputText: UITextField! // 读取本地数据,输入框显示默认IP - let ip = keychain[Constant.ServerConfig.rawValue] + let baseURL = defaults.get(for: serverConfigKey)! let msgAlertCtr = UIAlertController(title: nil, message: "请输入后台服务器地址", preferredStyle: .alert) msgAlertCtr.addTextField { textField in - textField.text = ip + textField.text = baseURL inputText = textField } let actionOK = UIAlertAction(title: "保存", style: .default) { [self] (_: UIAlertAction) -> Void in @@ -128,7 +129,7 @@ return } // 存本地 - keychain[Constant.ServerConfig.rawValue] = configData! + defaults.set(configData!, for: serverConfigKey) } let actionCancel = UIAlertAction(title: "取消", style: .cancel, handler: nil) // 设置取消按钮颜色为红色 diff --git a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift index 4c9daf5..499c156 100644 --- a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift +++ b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import KeychainAccess import SwiftyJSON import UIKit @@ -15,8 +16,9 @@ @IBOutlet var logSearchView: UIView! @IBOutlet var settingsView: UIView! - private var keychain = Keychain() - private var isSingleMode: String! + private let defaults = Defaults.shared + private let keychain = Keychain() + private var isSingleMode = false override func viewDidLoad() { super.viewDidLoad() @@ -27,8 +29,8 @@ let dict: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white] navigationController?.navigationBar.titleTextAttributes = dict // title color - isSingleMode = keychain[Constant.isSingleMode.rawValue] ?? "OFF" - if isSingleMode == "OFF" { + isSingleMode = defaults.get(for: singleModeKey) ?? false + if !isSingleMode { // 如果不是单机模式登录,则获取用户信息 obtainUserInfo() } @@ -37,9 +39,9 @@ } func obtainUserInfo() { - let token = keychain[Constant.Token.rawValue] - let obtainUserInfoURL = keychain[Constant.ServerConfig.rawValue]! + Constant.userInfo.rawValue - Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token!]).responseJSON { [self] response in + let token = defaults.get(for: tokenKey)! + let obtainUserInfoURL = defaults.get(for: serverConfigKey)! + Constant.userInfo.rawValue + Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token]).responseJSON { [self] response in switch response.result { case let .success(value): let userModel = UserInfoModel(respJson: JSON(value)) @@ -74,7 +76,7 @@ // 新建巡检 @IBAction func toCreateInspectView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeMapViewController(), animated: true) } else { navigationController?.pushViewController(MapViewController(), animated: true) @@ -86,14 +88,14 @@ // 弹框选择 let selectController = UIAlertController(title: "选择记录类型", message: nil, preferredStyle: .alert) let inspectButton = UIAlertAction(title: "巡检记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeInspectViewController(), animated: true) } else { navigationController?.pushViewController(InspectViewController(), animated: true) } }) let eventLogButton = UIAlertAction(title: "事件记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeEventViewController(), animated: true) } else { navigationController?.pushViewController(EventViewController(), animated: true) @@ -106,7 +108,7 @@ // 系统设置 @IBAction func toUserSettingsView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeSettingViewController(), animated: true) } else { navigationController?.pushViewController(SettingViewController(), animated: true) diff --git a/LaserMethane/ViewController/Map/MapViewController.swift b/LaserMethane/ViewController/Map/MapViewController.swift index 7b7b415..6ecbca3 100644 --- a/LaserMethane/ViewController/Map/MapViewController.swift +++ b/LaserMethane/ViewController/Map/MapViewController.swift @@ -16,13 +16,10 @@ import UIKit class MapViewController: UIViewController, MAMapViewDelegate { + private let timeFormatter = DateFormatter() private let manager = CLLocationManager() private let locationManager = AMapLocationManager() private let defaults = Defaults.shared - // 巡检数据缓存模型 - private let defaultKey = Key("InspectionCacheModel") - // 巡检任务完成标志 - private let statusKey = Key("inspectionStatus") private var mapView: MAMapView! private var topTagView: UIView! @@ -58,7 +55,6 @@ private var inputTextField: UITextField! private var inspectionId: String! // 新建巡检数据模型 - private let timeFormatter = DateFormatter() private var model: NewInspectionModel! private var routeArray = [NewRouteModel]() private var alarmCount: Int = 0 @@ -74,7 +70,7 @@ navigationController?.navigationBar.titleTextAttributes = dict navigationController?.navigationBar.tintColor = .white // 初始化基本数据 - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let userJson = keychain[Constant.UserJson.rawValue]! let data = userJson.data(using: String.Encoding.utf8, allowLossyConversion: false) ?? Data() userModel = UserInfoModel(respJson: JSON(data)) @@ -301,19 +297,19 @@ let msgAlertCtr = UIAlertController(title: "温馨提示", message: "确定结束巡检吗?", preferredStyle: .alert) let actionOK = UIAlertAction(title: "确定", style: .default) { [self] (_: UIAlertAction) -> Void in // 取最新位置作为结束位置经纬度 - let endLng = keychain[Constant.CurrentLongitude.rawValue]! as String - let endLat = keychain[Constant.CurrentLatitude.rawValue]! as String + let endLng = defaults.get(for: lngKey) + let endLat = defaults.get(for: latKey) // 提交巡检 let addInspectionURL = baseURL! + Constant.addInspection.rawValue let timeInterval: TimeInterval = Date().timeIntervalSince1970 let endTime = timeFormatter.string(from: Date(timeIntervalSince1970: timeInterval)) let param: [String: Any] = ["id": model.id, "name": model.name, "startTime": model.startTime, "endTime": endTime, "date": model.date, "startLng": model.startLng, - "startLat": model.startLat, "endLng": Double(endLng)!, "endLat": Double(endLat)!, + "startLat": model.startLat, "endLng": endLng, "endLat": endLat, "routes": model.routes, "user": model.user] // 提交参数: ["startLat": 39.915913628472225, "id": "162925125712000", "date": "2021-08-18", "startTime": "2021-08-18 09:47:37", "endLng": 116.26874240451389, "startLng": 116.26874240451389, "routes": "[{\"lat\":39.915913628472225,\"lng\":116.26874240451389}]", "user": "王晓颖", "name": "测试iOS", "endTime": "2021-08-18 09:47:56", "endLat": 39.915913628472225] print("提交参数: \(param)") - Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { response in switch response.result { case let .success(value): @@ -397,8 +393,8 @@ } @IBAction func addEventAction(_ sender: Any) { - let lng = keychain[Constant.CurrentLongitude.rawValue]! as String - let lat = keychain[Constant.CurrentLatitude.rawValue]! as String + let lng = defaults.get(for: lngKey) + let lat = defaults.get(for: latKey) print("新建事件位置信息: [\(lng), \(lat)]") let newEventViewController = NewEventViewController(nibName: "NewEventViewController", bundle: nil) @@ -412,8 +408,8 @@ dic: ["isWarning": true, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) let eventLogButton = UIAlertAction(title: "自定义事件", style: .default, handler: { [self] _ in @@ -422,8 +418,8 @@ dic: ["isWarning": false, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) selectController.addAction(inspectButton) @@ -459,8 +455,8 @@ func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) { print("位置信息: [\(location.coordinate.latitude),\(location.coordinate.longitude)]") // 保存最新的一次位置 - keychain[Constant.CurrentLongitude.rawValue] = location.coordinate.longitude.description - keychain[Constant.CurrentLatitude.rawValue] = location.coordinate.latitude.description + defaults.set(location.coordinate.longitude, for: lngKey) + defaults.set(location.coordinate.latitude, for: latKey) // 设置起始经纬度 if model.startLng == 0.0 || model.startLat == 0.0 { model.startLng = location.coordinate.longitude @@ -651,14 +647,14 @@ let maxPotencyValue = m1 + m2 + m3 + UInt(data[11]) maxValueLabel.text = maxPotencyValue.description // 判断是否需要报警 - let isOpenWarning = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpenWarning == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { if maxPotencyValue >= alarmValue { // 当前值大于设置值,需要报警 // OtherUtils.playSound(mapActivity, R.raw.alarm) AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) - let isAutoRecord = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAutoRecord == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { // 如果连续超过10个报警,自动生成报警事件 alarmCount += 1 if alarmCount >= 10 { @@ -684,16 +680,16 @@ } isGeneratingTask = true // 取最新位置作为报警位置经纬度 - let longitude = keychain[Constant.CurrentLongitude.rawValue]! as String - let latitude = keychain[Constant.CurrentLatitude.rawValue]! as String + let longitude = defaults.get(for: lngKey) + let latitude = defaults.get(for: latKey) // 提交事件 let addEventURL = baseURL! + Constant.addEvent.rawValue let param: [String: Any] = ["id": "t".id(), "inspectionId": model.id, "name": model.name, - "createTime": model.startTime, "type": "报警事件", "lng": Double(longitude)!, - "lat": Double(latitude)!, "data": Double(maxValue)!, "images": "", + "createTime": model.startTime, "type": "报警事件", "lng": longitude, + "lat": latitude, "data": Double(maxValue)!, "images": "", "description": "自动报警记录", "user": model.user] print("提交参数: \(param)") - Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Map/NewEventViewController.swift b/LaserMethane/ViewController/Map/NewEventViewController.swift index 305282d..c3004ef 100644 --- a/LaserMethane/ViewController/Map/NewEventViewController.swift +++ b/LaserMethane/ViewController/Map/NewEventViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import HXPHPicker import KeychainAccess import Kingfisher @@ -32,6 +33,7 @@ @IBOutlet var saveEventButton: UIButton! private let keychain = Keychain() + private let defaults = Defaults.shared private let dateformatter = DateFormatter() private var imageUrlArray = [URL]() // 完整的图片url private var imageArray = [String]() // 上传图片成功后服务器返回的图片数组 @@ -54,7 +56,7 @@ let userJson = keychain[Constant.UserJson.rawValue]! let data = userJson.data(using: String.Encoding.utf8, allowLossyConversion: false) ?? Data() userModel = UserInfoModel(respJson: JSON(data)) - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! // setupLayerView() eventTimeLabel.text = currentTime() @@ -176,7 +178,7 @@ "lat": latitude!, "data": eventValueData, "images": imageArray.reformat(), "description": eventDesc!, "user": (userModel.data?.name)!] print("提交参数: \(param)") - Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { [self] response in switch response.result { case let .success(value): @@ -215,7 +217,7 @@ LoadingHub.shared.showLoading(text: "图片上传中...") Alamofire.upload(multipartFormData: { formData in formData.append(imageData, withName: "file", fileName: imageName, mimeType: "image/jpeg") - }, usingThreshold: UInt64(), to: uploadURL, method: .post, headers: ["token": keychain[Constant.Token.rawValue]!]) { [self] result in + }, usingThreshold: UInt64(), to: uploadURL, method: .post, headers: ["token": defaults.get(for: tokenKey)!]) { [self] result in switch result { case let .success(upload, _, _): upload.responseJSON(completionHandler: { value in diff --git a/LaserMethane/ViewController/Map/SingModeMapViewController.swift b/LaserMethane/ViewController/Map/SingModeMapViewController.swift index c618044..a818132 100644 --- a/LaserMethane/ViewController/Map/SingModeMapViewController.swift +++ b/LaserMethane/ViewController/Map/SingModeMapViewController.swift @@ -8,7 +8,6 @@ import AudioToolbox import CoreBluetooth import DefaultsKit -import KeychainAccess import SnapKit import Toast_Swift import UIKit @@ -42,7 +41,6 @@ @IBOutlet var maxValueLabel: UILabel! private var valueDelegate: TransferValueDelegate! - private var keychain = Keychain() private var centralManager = CBCentralManager() // 扫描到的设备的集合 private var scanDevices = [CBPeripheral]() @@ -293,13 +291,13 @@ let msgAlertCtr = UIAlertController(title: "温馨提示", message: "确定结束巡检吗?", preferredStyle: .alert) let actionOK = UIAlertAction(title: "确定", style: .default) { [self] (_: UIAlertAction) -> Void in // 取最新位置作为结束位置经纬度 - let endLng = keychain[Constant.CurrentLongitude.rawValue]! as String - let endLat = keychain[Constant.CurrentLatitude.rawValue]! as String + let endLng = defaults.get(for: lngKey) + let endLat = defaults.get(for: latKey) // 提交巡检 let timeInterval: TimeInterval = Date().timeIntervalSince1970 model.endTime = timeFormatter.string(from: Date(timeIntervalSince1970: timeInterval)) - model.endLng = Double(endLng)! - model.endLat = Double(endLat)! + model.endLng = endLng! + model.endLat = endLat! // 保存本地数据库 inspectionShared.addInspection(newModel: model!) if inspectionShared.isAddSuccess(inspectionId: model.id) { @@ -381,8 +379,8 @@ } @IBAction func addEventAction(_ sender: Any) { - let lng = keychain[Constant.CurrentLongitude.rawValue]! as String - let lat = keychain[Constant.CurrentLatitude.rawValue]! as String + let lng = defaults.get(for: lngKey) + let lat = defaults.get(for: latKey) print("新建事件位置信息: [\(lng), \(lat)]") let newEventViewController = SingModeNewEventViewController(nibName: "SingModeNewEventViewController", bundle: nil) @@ -396,8 +394,8 @@ dic: ["isWarning": true, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) let eventLogButton = UIAlertAction(title: "自定义事件", style: .default, handler: { [self] _ in @@ -406,8 +404,8 @@ dic: ["isWarning": false, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) selectController.addAction(inspectButton) @@ -444,8 +442,8 @@ func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) { print("位置信息: [\(location.coordinate.latitude),\(location.coordinate.longitude)]") // 保存最新的一次位置 - keychain[Constant.CurrentLongitude.rawValue] = location.coordinate.longitude.description - keychain[Constant.CurrentLatitude.rawValue] = location.coordinate.latitude.description + defaults.set(location.coordinate.longitude, for: lngKey) + defaults.set(location.coordinate.latitude, for: latKey) // 设置起始经纬度 if model.startLng == 0.0 || model.startLat == 0.0 { model.startLng = location.coordinate.longitude @@ -636,14 +634,14 @@ let maxPotencyValue = m1 + m2 + m3 + UInt(data[11]) maxValueLabel.text = maxPotencyValue.description // 判断是否需要报警 - let isOpenWarning = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpenWarning == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { if maxPotencyValue >= alarmValue { // 当前值大于设置值,需要报警 // OtherUtils.playSound(mapActivity, R.raw.alarm) AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) - let isAutoRecord = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAutoRecord == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { // 如果连续超过10个报警,自动生成报警事件 alarmCount += 1 if alarmCount >= 10 { @@ -669,11 +667,14 @@ } isGeneratingTask = true // 取最新位置作为报警位置经纬度 - let longitude = keychain[Constant.CurrentLongitude.rawValue]! as String - let latitude = keychain[Constant.CurrentLatitude.rawValue]! as String + let longitude = defaults.get(for: lngKey)! + let latitude = defaults.get(for: latKey)! // 提交事件 let taskId = "t".id() - let eventModel = NewEventTaskModel(taskId: taskId, inspectionId: model.id, name: model.name, createTime: model.startTime, type: "报警事件", lng: Double(longitude)!, lat: Double(latitude)!, data: Double(maxValue)!, images: "", description: "自动报警记录", user: "智巡宝") + let eventModel = NewEventTaskModel(taskId: taskId, inspectionId: model.id, + name: model.name, createTime: model.startTime, type: "报警事件", + lng: longitude, lat: latitude, data: Double(maxValue)!, + images: "", description: "自动报警记录", user: "智巡宝") taskShared.addEventTask(model: eventModel) if taskShared.isAddSuccess(taskId: taskId) { view.makeToast("保存成功", duration: 2, position: .center) diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift index bb92ed1..a6aaa43 100644 --- a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift +++ b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift @@ -6,14 +6,14 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit class EventTaskViewController: UIViewController, TransferIdDelegate { @IBOutlet var taskTableView: UITableView! - private let keychain = Keychain() + private let defaults = Defaults.shared private var id: String? private var rowsArray = [ListModel]() private var valueDelegate: TransferValueDelegate! @@ -24,11 +24,11 @@ taskTableView.dataSource = self taskTableView.delegate = self // 查询事件列表 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let eventListURL = baseURL! + Constant.searchByInspect.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let eventListURL = baseURL + Constant.searchByInspect.rawValue Alamofire.request(eventListURL, method: .get, parameters: ["inspectionId": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): rowsArray = EventTaskModel(respJson: JSON(value)).data.list diff --git a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift index f811c5d..f9f171a 100644 --- a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SnapKit import SwiftyJSON import UIKit @@ -15,7 +15,7 @@ private var id: String? private var mapView: MAMapView! private var inspectView: UIView! - private let keychain = Keychain() + private let defaults = Defaults.shared @IBOutlet var inspectNameLabel: UILabel! @IBOutlet var inspectStartTimeLabel: UILabel! @@ -63,11 +63,11 @@ } func loadInspectDetail() { - let baseURL = keychain[Constant.ServerConfig.rawValue] - let inspectionDetailURL = baseURL! + Constant.inspectionDetail.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let inspectionDetailURL = baseURL + Constant.inspectionDetail.rawValue Alamofire.request(inspectionDetailURL, method: .get, parameters: ["id": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): setInspectData(detailModel: InspectDetailModel(respJson: JSON(value)).data) diff --git a/LaserMethane/ViewController/Inspect/InspectViewController.swift b/LaserMethane/ViewController/Inspect/InspectViewController.swift index bf9fac7..f275624 100644 --- a/LaserMethane/ViewController/Inspect/InspectViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var inspectTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [RowsModel] = [] private var dformatter = DateFormatter() @@ -44,11 +44,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let inspectListURL = baseURL! + Constant.inspectList.rawValue Alamofire.request(inspectListURL, method: .get, parameters: ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): let inspectModel = InspectListModel(respJson: JSON(value)) diff --git a/LaserMethane/ViewController/Login/LoginViewController.swift b/LaserMethane/ViewController/Login/LoginViewController.swift index d9edc12..a4cd6e9 100644 --- a/LaserMethane/ViewController/Login/LoginViewController.swift +++ b/LaserMethane/ViewController/Login/LoginViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit @@ -14,7 +14,8 @@ @IBOutlet var userNameView: UITextField! @IBOutlet var passwordView: UITextField! @IBOutlet var loginButton: UIButton! - private var keychain = Keychain() + + private let defaults = Defaults.shared override func viewDidLoad() { super.viewDidLoad() @@ -25,8 +26,8 @@ loginButton.backgroundColor = [21, 101, 227].transferUIColor() loginButton.layer.cornerRadius = 18 // 设置圆角 // 设置默认账号密码 - userNameView.text = keychain[Constant.UserName.rawValue] ?? "" - passwordView.text = keychain[Constant.Password.rawValue] ?? "" + userNameView.text = defaults.get(for: userNameKey) ?? "" + passwordView.text = defaults.get(for: passwordKey) ?? "" } @IBAction func loginAction(_ sender: UIButton) { @@ -41,41 +42,41 @@ return } // 记录账号密码 - keychain[Constant.UserName.rawValue] = userName - keychain[Constant.Password.rawValue] = password + defaults.set(userName!, for: userNameKey) + defaults.set(password!, for: passwordKey) // 访问后台,开始登录 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let configURL = baseURL! + Constant.baseConfig.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let configURL = baseURL + Constant.baseConfig.rawValue Alamofire.request(configURL, method: .get).responseJSON { [self] response in switch response.result { case let .success(value): let configModel = BaseConfigModel(respJson: JSON(value)) // 将密码经由RSA和publicKey加密 guard let pwdWithKey = try? password?.encryptByRSA(publicKey: (configModel.data?.publicKey)!) - else { + else { return } // 登录 - let loginURL = baseURL! + Constant.login.rawValue + let loginURL = baseURL + Constant.login.rawValue Alamofire.request(loginURL, method: .post, parameters: ["username": userName!, "password": pwdWithKey]) - .responseJSON { response in - switch response.result { - case let .success(value): - let loginModel = LoginResultModel(respJson: JSON(value)) - if loginModel.code == 200 { - // 将token存起来 - keychain[Constant.Token.rawValue] = loginModel.data!.token - // 跳转主页 - startMainMenuView() - } else { - AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + .responseJSON { response in + switch response.result { + case let .success(value): + let loginModel = LoginResultModel(respJson: JSON(value)) + if loginModel.code == 200 { + // 将token存起来 + defaults.set(loginModel.data!.token, for: tokenKey) + // 跳转主页 + startMainMenuView() + } else { + AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + } + case .failure: + AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - case .failure: - AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - } case .failure: AlertHub.shared.showWaringAlert(controller: self, message: "检验失败,无法登陆") } @@ -84,7 +85,7 @@ // 跳转到主页 @objc func startMainMenuView() { - keychain[Constant.isSingleMode.rawValue] = "OFF" + defaults.set(false, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -104,7 +105,7 @@ // 单机模式 @IBAction func toSingleModeAction(_ sender: UIButton) { - keychain[Constant.isSingleMode.rawValue] = "ON" + defaults.set(true, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -116,10 +117,10 @@ @IBAction func changeServerConfig(_ sender: UIButton) { var inputText: UITextField! // 读取本地数据,输入框显示默认IP - let ip = keychain[Constant.ServerConfig.rawValue] + let baseURL = defaults.get(for: serverConfigKey)! let msgAlertCtr = UIAlertController(title: nil, message: "请输入后台服务器地址", preferredStyle: .alert) msgAlertCtr.addTextField { textField in - textField.text = ip + textField.text = baseURL inputText = textField } let actionOK = UIAlertAction(title: "保存", style: .default) { [self] (_: UIAlertAction) -> Void in @@ -128,7 +129,7 @@ return } // 存本地 - keychain[Constant.ServerConfig.rawValue] = configData! + defaults.set(configData!, for: serverConfigKey) } let actionCancel = UIAlertAction(title: "取消", style: .cancel, handler: nil) // 设置取消按钮颜色为红色 diff --git a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift index 4c9daf5..499c156 100644 --- a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift +++ b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import KeychainAccess import SwiftyJSON import UIKit @@ -15,8 +16,9 @@ @IBOutlet var logSearchView: UIView! @IBOutlet var settingsView: UIView! - private var keychain = Keychain() - private var isSingleMode: String! + private let defaults = Defaults.shared + private let keychain = Keychain() + private var isSingleMode = false override func viewDidLoad() { super.viewDidLoad() @@ -27,8 +29,8 @@ let dict: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white] navigationController?.navigationBar.titleTextAttributes = dict // title color - isSingleMode = keychain[Constant.isSingleMode.rawValue] ?? "OFF" - if isSingleMode == "OFF" { + isSingleMode = defaults.get(for: singleModeKey) ?? false + if !isSingleMode { // 如果不是单机模式登录,则获取用户信息 obtainUserInfo() } @@ -37,9 +39,9 @@ } func obtainUserInfo() { - let token = keychain[Constant.Token.rawValue] - let obtainUserInfoURL = keychain[Constant.ServerConfig.rawValue]! + Constant.userInfo.rawValue - Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token!]).responseJSON { [self] response in + let token = defaults.get(for: tokenKey)! + let obtainUserInfoURL = defaults.get(for: serverConfigKey)! + Constant.userInfo.rawValue + Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token]).responseJSON { [self] response in switch response.result { case let .success(value): let userModel = UserInfoModel(respJson: JSON(value)) @@ -74,7 +76,7 @@ // 新建巡检 @IBAction func toCreateInspectView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeMapViewController(), animated: true) } else { navigationController?.pushViewController(MapViewController(), animated: true) @@ -86,14 +88,14 @@ // 弹框选择 let selectController = UIAlertController(title: "选择记录类型", message: nil, preferredStyle: .alert) let inspectButton = UIAlertAction(title: "巡检记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeInspectViewController(), animated: true) } else { navigationController?.pushViewController(InspectViewController(), animated: true) } }) let eventLogButton = UIAlertAction(title: "事件记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeEventViewController(), animated: true) } else { navigationController?.pushViewController(EventViewController(), animated: true) @@ -106,7 +108,7 @@ // 系统设置 @IBAction func toUserSettingsView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeSettingViewController(), animated: true) } else { navigationController?.pushViewController(SettingViewController(), animated: true) diff --git a/LaserMethane/ViewController/Map/MapViewController.swift b/LaserMethane/ViewController/Map/MapViewController.swift index 7b7b415..6ecbca3 100644 --- a/LaserMethane/ViewController/Map/MapViewController.swift +++ b/LaserMethane/ViewController/Map/MapViewController.swift @@ -16,13 +16,10 @@ import UIKit class MapViewController: UIViewController, MAMapViewDelegate { + private let timeFormatter = DateFormatter() private let manager = CLLocationManager() private let locationManager = AMapLocationManager() private let defaults = Defaults.shared - // 巡检数据缓存模型 - private let defaultKey = Key("InspectionCacheModel") - // 巡检任务完成标志 - private let statusKey = Key("inspectionStatus") private var mapView: MAMapView! private var topTagView: UIView! @@ -58,7 +55,6 @@ private var inputTextField: UITextField! private var inspectionId: String! // 新建巡检数据模型 - private let timeFormatter = DateFormatter() private var model: NewInspectionModel! private var routeArray = [NewRouteModel]() private var alarmCount: Int = 0 @@ -74,7 +70,7 @@ navigationController?.navigationBar.titleTextAttributes = dict navigationController?.navigationBar.tintColor = .white // 初始化基本数据 - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let userJson = keychain[Constant.UserJson.rawValue]! let data = userJson.data(using: String.Encoding.utf8, allowLossyConversion: false) ?? Data() userModel = UserInfoModel(respJson: JSON(data)) @@ -301,19 +297,19 @@ let msgAlertCtr = UIAlertController(title: "温馨提示", message: "确定结束巡检吗?", preferredStyle: .alert) let actionOK = UIAlertAction(title: "确定", style: .default) { [self] (_: UIAlertAction) -> Void in // 取最新位置作为结束位置经纬度 - let endLng = keychain[Constant.CurrentLongitude.rawValue]! as String - let endLat = keychain[Constant.CurrentLatitude.rawValue]! as String + let endLng = defaults.get(for: lngKey) + let endLat = defaults.get(for: latKey) // 提交巡检 let addInspectionURL = baseURL! + Constant.addInspection.rawValue let timeInterval: TimeInterval = Date().timeIntervalSince1970 let endTime = timeFormatter.string(from: Date(timeIntervalSince1970: timeInterval)) let param: [String: Any] = ["id": model.id, "name": model.name, "startTime": model.startTime, "endTime": endTime, "date": model.date, "startLng": model.startLng, - "startLat": model.startLat, "endLng": Double(endLng)!, "endLat": Double(endLat)!, + "startLat": model.startLat, "endLng": endLng, "endLat": endLat, "routes": model.routes, "user": model.user] // 提交参数: ["startLat": 39.915913628472225, "id": "162925125712000", "date": "2021-08-18", "startTime": "2021-08-18 09:47:37", "endLng": 116.26874240451389, "startLng": 116.26874240451389, "routes": "[{\"lat\":39.915913628472225,\"lng\":116.26874240451389}]", "user": "王晓颖", "name": "测试iOS", "endTime": "2021-08-18 09:47:56", "endLat": 39.915913628472225] print("提交参数: \(param)") - Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { response in switch response.result { case let .success(value): @@ -397,8 +393,8 @@ } @IBAction func addEventAction(_ sender: Any) { - let lng = keychain[Constant.CurrentLongitude.rawValue]! as String - let lat = keychain[Constant.CurrentLatitude.rawValue]! as String + let lng = defaults.get(for: lngKey) + let lat = defaults.get(for: latKey) print("新建事件位置信息: [\(lng), \(lat)]") let newEventViewController = NewEventViewController(nibName: "NewEventViewController", bundle: nil) @@ -412,8 +408,8 @@ dic: ["isWarning": true, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) let eventLogButton = UIAlertAction(title: "自定义事件", style: .default, handler: { [self] _ in @@ -422,8 +418,8 @@ dic: ["isWarning": false, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) selectController.addAction(inspectButton) @@ -459,8 +455,8 @@ func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) { print("位置信息: [\(location.coordinate.latitude),\(location.coordinate.longitude)]") // 保存最新的一次位置 - keychain[Constant.CurrentLongitude.rawValue] = location.coordinate.longitude.description - keychain[Constant.CurrentLatitude.rawValue] = location.coordinate.latitude.description + defaults.set(location.coordinate.longitude, for: lngKey) + defaults.set(location.coordinate.latitude, for: latKey) // 设置起始经纬度 if model.startLng == 0.0 || model.startLat == 0.0 { model.startLng = location.coordinate.longitude @@ -651,14 +647,14 @@ let maxPotencyValue = m1 + m2 + m3 + UInt(data[11]) maxValueLabel.text = maxPotencyValue.description // 判断是否需要报警 - let isOpenWarning = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpenWarning == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { if maxPotencyValue >= alarmValue { // 当前值大于设置值,需要报警 // OtherUtils.playSound(mapActivity, R.raw.alarm) AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) - let isAutoRecord = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAutoRecord == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { // 如果连续超过10个报警,自动生成报警事件 alarmCount += 1 if alarmCount >= 10 { @@ -684,16 +680,16 @@ } isGeneratingTask = true // 取最新位置作为报警位置经纬度 - let longitude = keychain[Constant.CurrentLongitude.rawValue]! as String - let latitude = keychain[Constant.CurrentLatitude.rawValue]! as String + let longitude = defaults.get(for: lngKey) + let latitude = defaults.get(for: latKey) // 提交事件 let addEventURL = baseURL! + Constant.addEvent.rawValue let param: [String: Any] = ["id": "t".id(), "inspectionId": model.id, "name": model.name, - "createTime": model.startTime, "type": "报警事件", "lng": Double(longitude)!, - "lat": Double(latitude)!, "data": Double(maxValue)!, "images": "", + "createTime": model.startTime, "type": "报警事件", "lng": longitude, + "lat": latitude, "data": Double(maxValue)!, "images": "", "description": "自动报警记录", "user": model.user] print("提交参数: \(param)") - Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Map/NewEventViewController.swift b/LaserMethane/ViewController/Map/NewEventViewController.swift index 305282d..c3004ef 100644 --- a/LaserMethane/ViewController/Map/NewEventViewController.swift +++ b/LaserMethane/ViewController/Map/NewEventViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import HXPHPicker import KeychainAccess import Kingfisher @@ -32,6 +33,7 @@ @IBOutlet var saveEventButton: UIButton! private let keychain = Keychain() + private let defaults = Defaults.shared private let dateformatter = DateFormatter() private var imageUrlArray = [URL]() // 完整的图片url private var imageArray = [String]() // 上传图片成功后服务器返回的图片数组 @@ -54,7 +56,7 @@ let userJson = keychain[Constant.UserJson.rawValue]! let data = userJson.data(using: String.Encoding.utf8, allowLossyConversion: false) ?? Data() userModel = UserInfoModel(respJson: JSON(data)) - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! // setupLayerView() eventTimeLabel.text = currentTime() @@ -176,7 +178,7 @@ "lat": latitude!, "data": eventValueData, "images": imageArray.reformat(), "description": eventDesc!, "user": (userModel.data?.name)!] print("提交参数: \(param)") - Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { [self] response in switch response.result { case let .success(value): @@ -215,7 +217,7 @@ LoadingHub.shared.showLoading(text: "图片上传中...") Alamofire.upload(multipartFormData: { formData in formData.append(imageData, withName: "file", fileName: imageName, mimeType: "image/jpeg") - }, usingThreshold: UInt64(), to: uploadURL, method: .post, headers: ["token": keychain[Constant.Token.rawValue]!]) { [self] result in + }, usingThreshold: UInt64(), to: uploadURL, method: .post, headers: ["token": defaults.get(for: tokenKey)!]) { [self] result in switch result { case let .success(upload, _, _): upload.responseJSON(completionHandler: { value in diff --git a/LaserMethane/ViewController/Map/SingModeMapViewController.swift b/LaserMethane/ViewController/Map/SingModeMapViewController.swift index c618044..a818132 100644 --- a/LaserMethane/ViewController/Map/SingModeMapViewController.swift +++ b/LaserMethane/ViewController/Map/SingModeMapViewController.swift @@ -8,7 +8,6 @@ import AudioToolbox import CoreBluetooth import DefaultsKit -import KeychainAccess import SnapKit import Toast_Swift import UIKit @@ -42,7 +41,6 @@ @IBOutlet var maxValueLabel: UILabel! private var valueDelegate: TransferValueDelegate! - private var keychain = Keychain() private var centralManager = CBCentralManager() // 扫描到的设备的集合 private var scanDevices = [CBPeripheral]() @@ -293,13 +291,13 @@ let msgAlertCtr = UIAlertController(title: "温馨提示", message: "确定结束巡检吗?", preferredStyle: .alert) let actionOK = UIAlertAction(title: "确定", style: .default) { [self] (_: UIAlertAction) -> Void in // 取最新位置作为结束位置经纬度 - let endLng = keychain[Constant.CurrentLongitude.rawValue]! as String - let endLat = keychain[Constant.CurrentLatitude.rawValue]! as String + let endLng = defaults.get(for: lngKey) + let endLat = defaults.get(for: latKey) // 提交巡检 let timeInterval: TimeInterval = Date().timeIntervalSince1970 model.endTime = timeFormatter.string(from: Date(timeIntervalSince1970: timeInterval)) - model.endLng = Double(endLng)! - model.endLat = Double(endLat)! + model.endLng = endLng! + model.endLat = endLat! // 保存本地数据库 inspectionShared.addInspection(newModel: model!) if inspectionShared.isAddSuccess(inspectionId: model.id) { @@ -381,8 +379,8 @@ } @IBAction func addEventAction(_ sender: Any) { - let lng = keychain[Constant.CurrentLongitude.rawValue]! as String - let lat = keychain[Constant.CurrentLatitude.rawValue]! as String + let lng = defaults.get(for: lngKey) + let lat = defaults.get(for: latKey) print("新建事件位置信息: [\(lng), \(lat)]") let newEventViewController = SingModeNewEventViewController(nibName: "SingModeNewEventViewController", bundle: nil) @@ -396,8 +394,8 @@ dic: ["isWarning": true, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) let eventLogButton = UIAlertAction(title: "自定义事件", style: .default, handler: { [self] _ in @@ -406,8 +404,8 @@ dic: ["isWarning": false, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) selectController.addAction(inspectButton) @@ -444,8 +442,8 @@ func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) { print("位置信息: [\(location.coordinate.latitude),\(location.coordinate.longitude)]") // 保存最新的一次位置 - keychain[Constant.CurrentLongitude.rawValue] = location.coordinate.longitude.description - keychain[Constant.CurrentLatitude.rawValue] = location.coordinate.latitude.description + defaults.set(location.coordinate.longitude, for: lngKey) + defaults.set(location.coordinate.latitude, for: latKey) // 设置起始经纬度 if model.startLng == 0.0 || model.startLat == 0.0 { model.startLng = location.coordinate.longitude @@ -636,14 +634,14 @@ let maxPotencyValue = m1 + m2 + m3 + UInt(data[11]) maxValueLabel.text = maxPotencyValue.description // 判断是否需要报警 - let isOpenWarning = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpenWarning == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { if maxPotencyValue >= alarmValue { // 当前值大于设置值,需要报警 // OtherUtils.playSound(mapActivity, R.raw.alarm) AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) - let isAutoRecord = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAutoRecord == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { // 如果连续超过10个报警,自动生成报警事件 alarmCount += 1 if alarmCount >= 10 { @@ -669,11 +667,14 @@ } isGeneratingTask = true // 取最新位置作为报警位置经纬度 - let longitude = keychain[Constant.CurrentLongitude.rawValue]! as String - let latitude = keychain[Constant.CurrentLatitude.rawValue]! as String + let longitude = defaults.get(for: lngKey)! + let latitude = defaults.get(for: latKey)! // 提交事件 let taskId = "t".id() - let eventModel = NewEventTaskModel(taskId: taskId, inspectionId: model.id, name: model.name, createTime: model.startTime, type: "报警事件", lng: Double(longitude)!, lat: Double(latitude)!, data: Double(maxValue)!, images: "", description: "自动报警记录", user: "智巡宝") + let eventModel = NewEventTaskModel(taskId: taskId, inspectionId: model.id, + name: model.name, createTime: model.startTime, type: "报警事件", + lng: longitude, lat: latitude, data: Double(maxValue)!, + images: "", description: "自动报警记录", user: "智巡宝") taskShared.addEventTask(model: eventModel) if taskShared.isAddSuccess(taskId: taskId) { view.makeToast("保存成功", duration: 2, position: .center) diff --git a/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift b/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift index c88313b..1522333 100644 --- a/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift +++ b/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift @@ -7,7 +7,6 @@ import Alamofire import HXPHPicker -import KeychainAccess import Kingfisher import UIKit import ZLPhotoBrowser @@ -31,7 +30,6 @@ @IBOutlet var imageCollectionView: UICollectionView! @IBOutlet var saveEventButton: UIButton! - private let keychain = Keychain() private let dateformatter = DateFormatter() private var imageUrlArray = [URL]() // 完整的图片url private var imageArray = [String]() // 上传图片成功后服务器返回的图片数组 diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift index bb92ed1..a6aaa43 100644 --- a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift +++ b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift @@ -6,14 +6,14 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit class EventTaskViewController: UIViewController, TransferIdDelegate { @IBOutlet var taskTableView: UITableView! - private let keychain = Keychain() + private let defaults = Defaults.shared private var id: String? private var rowsArray = [ListModel]() private var valueDelegate: TransferValueDelegate! @@ -24,11 +24,11 @@ taskTableView.dataSource = self taskTableView.delegate = self // 查询事件列表 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let eventListURL = baseURL! + Constant.searchByInspect.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let eventListURL = baseURL + Constant.searchByInspect.rawValue Alamofire.request(eventListURL, method: .get, parameters: ["inspectionId": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): rowsArray = EventTaskModel(respJson: JSON(value)).data.list diff --git a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift index f811c5d..f9f171a 100644 --- a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SnapKit import SwiftyJSON import UIKit @@ -15,7 +15,7 @@ private var id: String? private var mapView: MAMapView! private var inspectView: UIView! - private let keychain = Keychain() + private let defaults = Defaults.shared @IBOutlet var inspectNameLabel: UILabel! @IBOutlet var inspectStartTimeLabel: UILabel! @@ -63,11 +63,11 @@ } func loadInspectDetail() { - let baseURL = keychain[Constant.ServerConfig.rawValue] - let inspectionDetailURL = baseURL! + Constant.inspectionDetail.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let inspectionDetailURL = baseURL + Constant.inspectionDetail.rawValue Alamofire.request(inspectionDetailURL, method: .get, parameters: ["id": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): setInspectData(detailModel: InspectDetailModel(respJson: JSON(value)).data) diff --git a/LaserMethane/ViewController/Inspect/InspectViewController.swift b/LaserMethane/ViewController/Inspect/InspectViewController.swift index bf9fac7..f275624 100644 --- a/LaserMethane/ViewController/Inspect/InspectViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var inspectTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [RowsModel] = [] private var dformatter = DateFormatter() @@ -44,11 +44,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let inspectListURL = baseURL! + Constant.inspectList.rawValue Alamofire.request(inspectListURL, method: .get, parameters: ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): let inspectModel = InspectListModel(respJson: JSON(value)) diff --git a/LaserMethane/ViewController/Login/LoginViewController.swift b/LaserMethane/ViewController/Login/LoginViewController.swift index d9edc12..a4cd6e9 100644 --- a/LaserMethane/ViewController/Login/LoginViewController.swift +++ b/LaserMethane/ViewController/Login/LoginViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit @@ -14,7 +14,8 @@ @IBOutlet var userNameView: UITextField! @IBOutlet var passwordView: UITextField! @IBOutlet var loginButton: UIButton! - private var keychain = Keychain() + + private let defaults = Defaults.shared override func viewDidLoad() { super.viewDidLoad() @@ -25,8 +26,8 @@ loginButton.backgroundColor = [21, 101, 227].transferUIColor() loginButton.layer.cornerRadius = 18 // 设置圆角 // 设置默认账号密码 - userNameView.text = keychain[Constant.UserName.rawValue] ?? "" - passwordView.text = keychain[Constant.Password.rawValue] ?? "" + userNameView.text = defaults.get(for: userNameKey) ?? "" + passwordView.text = defaults.get(for: passwordKey) ?? "" } @IBAction func loginAction(_ sender: UIButton) { @@ -41,41 +42,41 @@ return } // 记录账号密码 - keychain[Constant.UserName.rawValue] = userName - keychain[Constant.Password.rawValue] = password + defaults.set(userName!, for: userNameKey) + defaults.set(password!, for: passwordKey) // 访问后台,开始登录 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let configURL = baseURL! + Constant.baseConfig.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let configURL = baseURL + Constant.baseConfig.rawValue Alamofire.request(configURL, method: .get).responseJSON { [self] response in switch response.result { case let .success(value): let configModel = BaseConfigModel(respJson: JSON(value)) // 将密码经由RSA和publicKey加密 guard let pwdWithKey = try? password?.encryptByRSA(publicKey: (configModel.data?.publicKey)!) - else { + else { return } // 登录 - let loginURL = baseURL! + Constant.login.rawValue + let loginURL = baseURL + Constant.login.rawValue Alamofire.request(loginURL, method: .post, parameters: ["username": userName!, "password": pwdWithKey]) - .responseJSON { response in - switch response.result { - case let .success(value): - let loginModel = LoginResultModel(respJson: JSON(value)) - if loginModel.code == 200 { - // 将token存起来 - keychain[Constant.Token.rawValue] = loginModel.data!.token - // 跳转主页 - startMainMenuView() - } else { - AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + .responseJSON { response in + switch response.result { + case let .success(value): + let loginModel = LoginResultModel(respJson: JSON(value)) + if loginModel.code == 200 { + // 将token存起来 + defaults.set(loginModel.data!.token, for: tokenKey) + // 跳转主页 + startMainMenuView() + } else { + AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + } + case .failure: + AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - case .failure: - AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - } case .failure: AlertHub.shared.showWaringAlert(controller: self, message: "检验失败,无法登陆") } @@ -84,7 +85,7 @@ // 跳转到主页 @objc func startMainMenuView() { - keychain[Constant.isSingleMode.rawValue] = "OFF" + defaults.set(false, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -104,7 +105,7 @@ // 单机模式 @IBAction func toSingleModeAction(_ sender: UIButton) { - keychain[Constant.isSingleMode.rawValue] = "ON" + defaults.set(true, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -116,10 +117,10 @@ @IBAction func changeServerConfig(_ sender: UIButton) { var inputText: UITextField! // 读取本地数据,输入框显示默认IP - let ip = keychain[Constant.ServerConfig.rawValue] + let baseURL = defaults.get(for: serverConfigKey)! let msgAlertCtr = UIAlertController(title: nil, message: "请输入后台服务器地址", preferredStyle: .alert) msgAlertCtr.addTextField { textField in - textField.text = ip + textField.text = baseURL inputText = textField } let actionOK = UIAlertAction(title: "保存", style: .default) { [self] (_: UIAlertAction) -> Void in @@ -128,7 +129,7 @@ return } // 存本地 - keychain[Constant.ServerConfig.rawValue] = configData! + defaults.set(configData!, for: serverConfigKey) } let actionCancel = UIAlertAction(title: "取消", style: .cancel, handler: nil) // 设置取消按钮颜色为红色 diff --git a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift index 4c9daf5..499c156 100644 --- a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift +++ b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import KeychainAccess import SwiftyJSON import UIKit @@ -15,8 +16,9 @@ @IBOutlet var logSearchView: UIView! @IBOutlet var settingsView: UIView! - private var keychain = Keychain() - private var isSingleMode: String! + private let defaults = Defaults.shared + private let keychain = Keychain() + private var isSingleMode = false override func viewDidLoad() { super.viewDidLoad() @@ -27,8 +29,8 @@ let dict: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white] navigationController?.navigationBar.titleTextAttributes = dict // title color - isSingleMode = keychain[Constant.isSingleMode.rawValue] ?? "OFF" - if isSingleMode == "OFF" { + isSingleMode = defaults.get(for: singleModeKey) ?? false + if !isSingleMode { // 如果不是单机模式登录,则获取用户信息 obtainUserInfo() } @@ -37,9 +39,9 @@ } func obtainUserInfo() { - let token = keychain[Constant.Token.rawValue] - let obtainUserInfoURL = keychain[Constant.ServerConfig.rawValue]! + Constant.userInfo.rawValue - Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token!]).responseJSON { [self] response in + let token = defaults.get(for: tokenKey)! + let obtainUserInfoURL = defaults.get(for: serverConfigKey)! + Constant.userInfo.rawValue + Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token]).responseJSON { [self] response in switch response.result { case let .success(value): let userModel = UserInfoModel(respJson: JSON(value)) @@ -74,7 +76,7 @@ // 新建巡检 @IBAction func toCreateInspectView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeMapViewController(), animated: true) } else { navigationController?.pushViewController(MapViewController(), animated: true) @@ -86,14 +88,14 @@ // 弹框选择 let selectController = UIAlertController(title: "选择记录类型", message: nil, preferredStyle: .alert) let inspectButton = UIAlertAction(title: "巡检记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeInspectViewController(), animated: true) } else { navigationController?.pushViewController(InspectViewController(), animated: true) } }) let eventLogButton = UIAlertAction(title: "事件记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeEventViewController(), animated: true) } else { navigationController?.pushViewController(EventViewController(), animated: true) @@ -106,7 +108,7 @@ // 系统设置 @IBAction func toUserSettingsView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeSettingViewController(), animated: true) } else { navigationController?.pushViewController(SettingViewController(), animated: true) diff --git a/LaserMethane/ViewController/Map/MapViewController.swift b/LaserMethane/ViewController/Map/MapViewController.swift index 7b7b415..6ecbca3 100644 --- a/LaserMethane/ViewController/Map/MapViewController.swift +++ b/LaserMethane/ViewController/Map/MapViewController.swift @@ -16,13 +16,10 @@ import UIKit class MapViewController: UIViewController, MAMapViewDelegate { + private let timeFormatter = DateFormatter() private let manager = CLLocationManager() private let locationManager = AMapLocationManager() private let defaults = Defaults.shared - // 巡检数据缓存模型 - private let defaultKey = Key("InspectionCacheModel") - // 巡检任务完成标志 - private let statusKey = Key("inspectionStatus") private var mapView: MAMapView! private var topTagView: UIView! @@ -58,7 +55,6 @@ private var inputTextField: UITextField! private var inspectionId: String! // 新建巡检数据模型 - private let timeFormatter = DateFormatter() private var model: NewInspectionModel! private var routeArray = [NewRouteModel]() private var alarmCount: Int = 0 @@ -74,7 +70,7 @@ navigationController?.navigationBar.titleTextAttributes = dict navigationController?.navigationBar.tintColor = .white // 初始化基本数据 - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let userJson = keychain[Constant.UserJson.rawValue]! let data = userJson.data(using: String.Encoding.utf8, allowLossyConversion: false) ?? Data() userModel = UserInfoModel(respJson: JSON(data)) @@ -301,19 +297,19 @@ let msgAlertCtr = UIAlertController(title: "温馨提示", message: "确定结束巡检吗?", preferredStyle: .alert) let actionOK = UIAlertAction(title: "确定", style: .default) { [self] (_: UIAlertAction) -> Void in // 取最新位置作为结束位置经纬度 - let endLng = keychain[Constant.CurrentLongitude.rawValue]! as String - let endLat = keychain[Constant.CurrentLatitude.rawValue]! as String + let endLng = defaults.get(for: lngKey) + let endLat = defaults.get(for: latKey) // 提交巡检 let addInspectionURL = baseURL! + Constant.addInspection.rawValue let timeInterval: TimeInterval = Date().timeIntervalSince1970 let endTime = timeFormatter.string(from: Date(timeIntervalSince1970: timeInterval)) let param: [String: Any] = ["id": model.id, "name": model.name, "startTime": model.startTime, "endTime": endTime, "date": model.date, "startLng": model.startLng, - "startLat": model.startLat, "endLng": Double(endLng)!, "endLat": Double(endLat)!, + "startLat": model.startLat, "endLng": endLng, "endLat": endLat, "routes": model.routes, "user": model.user] // 提交参数: ["startLat": 39.915913628472225, "id": "162925125712000", "date": "2021-08-18", "startTime": "2021-08-18 09:47:37", "endLng": 116.26874240451389, "startLng": 116.26874240451389, "routes": "[{\"lat\":39.915913628472225,\"lng\":116.26874240451389}]", "user": "王晓颖", "name": "测试iOS", "endTime": "2021-08-18 09:47:56", "endLat": 39.915913628472225] print("提交参数: \(param)") - Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { response in switch response.result { case let .success(value): @@ -397,8 +393,8 @@ } @IBAction func addEventAction(_ sender: Any) { - let lng = keychain[Constant.CurrentLongitude.rawValue]! as String - let lat = keychain[Constant.CurrentLatitude.rawValue]! as String + let lng = defaults.get(for: lngKey) + let lat = defaults.get(for: latKey) print("新建事件位置信息: [\(lng), \(lat)]") let newEventViewController = NewEventViewController(nibName: "NewEventViewController", bundle: nil) @@ -412,8 +408,8 @@ dic: ["isWarning": true, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) let eventLogButton = UIAlertAction(title: "自定义事件", style: .default, handler: { [self] _ in @@ -422,8 +418,8 @@ dic: ["isWarning": false, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) selectController.addAction(inspectButton) @@ -459,8 +455,8 @@ func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) { print("位置信息: [\(location.coordinate.latitude),\(location.coordinate.longitude)]") // 保存最新的一次位置 - keychain[Constant.CurrentLongitude.rawValue] = location.coordinate.longitude.description - keychain[Constant.CurrentLatitude.rawValue] = location.coordinate.latitude.description + defaults.set(location.coordinate.longitude, for: lngKey) + defaults.set(location.coordinate.latitude, for: latKey) // 设置起始经纬度 if model.startLng == 0.0 || model.startLat == 0.0 { model.startLng = location.coordinate.longitude @@ -651,14 +647,14 @@ let maxPotencyValue = m1 + m2 + m3 + UInt(data[11]) maxValueLabel.text = maxPotencyValue.description // 判断是否需要报警 - let isOpenWarning = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpenWarning == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { if maxPotencyValue >= alarmValue { // 当前值大于设置值,需要报警 // OtherUtils.playSound(mapActivity, R.raw.alarm) AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) - let isAutoRecord = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAutoRecord == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { // 如果连续超过10个报警,自动生成报警事件 alarmCount += 1 if alarmCount >= 10 { @@ -684,16 +680,16 @@ } isGeneratingTask = true // 取最新位置作为报警位置经纬度 - let longitude = keychain[Constant.CurrentLongitude.rawValue]! as String - let latitude = keychain[Constant.CurrentLatitude.rawValue]! as String + let longitude = defaults.get(for: lngKey) + let latitude = defaults.get(for: latKey) // 提交事件 let addEventURL = baseURL! + Constant.addEvent.rawValue let param: [String: Any] = ["id": "t".id(), "inspectionId": model.id, "name": model.name, - "createTime": model.startTime, "type": "报警事件", "lng": Double(longitude)!, - "lat": Double(latitude)!, "data": Double(maxValue)!, "images": "", + "createTime": model.startTime, "type": "报警事件", "lng": longitude, + "lat": latitude, "data": Double(maxValue)!, "images": "", "description": "自动报警记录", "user": model.user] print("提交参数: \(param)") - Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Map/NewEventViewController.swift b/LaserMethane/ViewController/Map/NewEventViewController.swift index 305282d..c3004ef 100644 --- a/LaserMethane/ViewController/Map/NewEventViewController.swift +++ b/LaserMethane/ViewController/Map/NewEventViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import HXPHPicker import KeychainAccess import Kingfisher @@ -32,6 +33,7 @@ @IBOutlet var saveEventButton: UIButton! private let keychain = Keychain() + private let defaults = Defaults.shared private let dateformatter = DateFormatter() private var imageUrlArray = [URL]() // 完整的图片url private var imageArray = [String]() // 上传图片成功后服务器返回的图片数组 @@ -54,7 +56,7 @@ let userJson = keychain[Constant.UserJson.rawValue]! let data = userJson.data(using: String.Encoding.utf8, allowLossyConversion: false) ?? Data() userModel = UserInfoModel(respJson: JSON(data)) - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! // setupLayerView() eventTimeLabel.text = currentTime() @@ -176,7 +178,7 @@ "lat": latitude!, "data": eventValueData, "images": imageArray.reformat(), "description": eventDesc!, "user": (userModel.data?.name)!] print("提交参数: \(param)") - Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { [self] response in switch response.result { case let .success(value): @@ -215,7 +217,7 @@ LoadingHub.shared.showLoading(text: "图片上传中...") Alamofire.upload(multipartFormData: { formData in formData.append(imageData, withName: "file", fileName: imageName, mimeType: "image/jpeg") - }, usingThreshold: UInt64(), to: uploadURL, method: .post, headers: ["token": keychain[Constant.Token.rawValue]!]) { [self] result in + }, usingThreshold: UInt64(), to: uploadURL, method: .post, headers: ["token": defaults.get(for: tokenKey)!]) { [self] result in switch result { case let .success(upload, _, _): upload.responseJSON(completionHandler: { value in diff --git a/LaserMethane/ViewController/Map/SingModeMapViewController.swift b/LaserMethane/ViewController/Map/SingModeMapViewController.swift index c618044..a818132 100644 --- a/LaserMethane/ViewController/Map/SingModeMapViewController.swift +++ b/LaserMethane/ViewController/Map/SingModeMapViewController.swift @@ -8,7 +8,6 @@ import AudioToolbox import CoreBluetooth import DefaultsKit -import KeychainAccess import SnapKit import Toast_Swift import UIKit @@ -42,7 +41,6 @@ @IBOutlet var maxValueLabel: UILabel! private var valueDelegate: TransferValueDelegate! - private var keychain = Keychain() private var centralManager = CBCentralManager() // 扫描到的设备的集合 private var scanDevices = [CBPeripheral]() @@ -293,13 +291,13 @@ let msgAlertCtr = UIAlertController(title: "温馨提示", message: "确定结束巡检吗?", preferredStyle: .alert) let actionOK = UIAlertAction(title: "确定", style: .default) { [self] (_: UIAlertAction) -> Void in // 取最新位置作为结束位置经纬度 - let endLng = keychain[Constant.CurrentLongitude.rawValue]! as String - let endLat = keychain[Constant.CurrentLatitude.rawValue]! as String + let endLng = defaults.get(for: lngKey) + let endLat = defaults.get(for: latKey) // 提交巡检 let timeInterval: TimeInterval = Date().timeIntervalSince1970 model.endTime = timeFormatter.string(from: Date(timeIntervalSince1970: timeInterval)) - model.endLng = Double(endLng)! - model.endLat = Double(endLat)! + model.endLng = endLng! + model.endLat = endLat! // 保存本地数据库 inspectionShared.addInspection(newModel: model!) if inspectionShared.isAddSuccess(inspectionId: model.id) { @@ -381,8 +379,8 @@ } @IBAction func addEventAction(_ sender: Any) { - let lng = keychain[Constant.CurrentLongitude.rawValue]! as String - let lat = keychain[Constant.CurrentLatitude.rawValue]! as String + let lng = defaults.get(for: lngKey) + let lat = defaults.get(for: latKey) print("新建事件位置信息: [\(lng), \(lat)]") let newEventViewController = SingModeNewEventViewController(nibName: "SingModeNewEventViewController", bundle: nil) @@ -396,8 +394,8 @@ dic: ["isWarning": true, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) let eventLogButton = UIAlertAction(title: "自定义事件", style: .default, handler: { [self] _ in @@ -406,8 +404,8 @@ dic: ["isWarning": false, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) selectController.addAction(inspectButton) @@ -444,8 +442,8 @@ func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) { print("位置信息: [\(location.coordinate.latitude),\(location.coordinate.longitude)]") // 保存最新的一次位置 - keychain[Constant.CurrentLongitude.rawValue] = location.coordinate.longitude.description - keychain[Constant.CurrentLatitude.rawValue] = location.coordinate.latitude.description + defaults.set(location.coordinate.longitude, for: lngKey) + defaults.set(location.coordinate.latitude, for: latKey) // 设置起始经纬度 if model.startLng == 0.0 || model.startLat == 0.0 { model.startLng = location.coordinate.longitude @@ -636,14 +634,14 @@ let maxPotencyValue = m1 + m2 + m3 + UInt(data[11]) maxValueLabel.text = maxPotencyValue.description // 判断是否需要报警 - let isOpenWarning = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpenWarning == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { if maxPotencyValue >= alarmValue { // 当前值大于设置值,需要报警 // OtherUtils.playSound(mapActivity, R.raw.alarm) AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) - let isAutoRecord = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAutoRecord == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { // 如果连续超过10个报警,自动生成报警事件 alarmCount += 1 if alarmCount >= 10 { @@ -669,11 +667,14 @@ } isGeneratingTask = true // 取最新位置作为报警位置经纬度 - let longitude = keychain[Constant.CurrentLongitude.rawValue]! as String - let latitude = keychain[Constant.CurrentLatitude.rawValue]! as String + let longitude = defaults.get(for: lngKey)! + let latitude = defaults.get(for: latKey)! // 提交事件 let taskId = "t".id() - let eventModel = NewEventTaskModel(taskId: taskId, inspectionId: model.id, name: model.name, createTime: model.startTime, type: "报警事件", lng: Double(longitude)!, lat: Double(latitude)!, data: Double(maxValue)!, images: "", description: "自动报警记录", user: "智巡宝") + let eventModel = NewEventTaskModel(taskId: taskId, inspectionId: model.id, + name: model.name, createTime: model.startTime, type: "报警事件", + lng: longitude, lat: latitude, data: Double(maxValue)!, + images: "", description: "自动报警记录", user: "智巡宝") taskShared.addEventTask(model: eventModel) if taskShared.isAddSuccess(taskId: taskId) { view.makeToast("保存成功", duration: 2, position: .center) diff --git a/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift b/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift index c88313b..1522333 100644 --- a/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift +++ b/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift @@ -7,7 +7,6 @@ import Alamofire import HXPHPicker -import KeychainAccess import Kingfisher import UIKit import ZLPhotoBrowser @@ -31,7 +30,6 @@ @IBOutlet var imageCollectionView: UICollectionView! @IBOutlet var saveEventButton: UIButton! - private let keychain = Keychain() private let dateformatter = DateFormatter() private var imageUrlArray = [URL]() // 完整的图片url private var imageArray = [String]() // 上传图片成功后服务器返回的图片数组 diff --git a/LaserMethane/ViewController/Settings/SettingViewController.swift b/LaserMethane/ViewController/Settings/SettingViewController.swift index ebeb3ae..8bcdc1e 100644 --- a/LaserMethane/ViewController/Settings/SettingViewController.swift +++ b/LaserMethane/ViewController/Settings/SettingViewController.swift @@ -7,6 +7,7 @@ import Alamofire import AudioToolbox +import DefaultsKit import KeychainAccess import SnapKit import SwiftyJSON @@ -16,6 +17,7 @@ @IBOutlet var tableView: UITableView! private var titleArray: [String] = [String]() private var keychain = Keychain() + private let defaults = Defaults.shared private var userModel: UserInfoModel! override func viewDidLoad() { @@ -75,15 +77,15 @@ cancelAction.setValue(UIColor.red, forKey: "titleTextColor") let confirmAction = UIAlertAction(title: "确定", style: .default, handler: { [self] _ in // 执行退出登录操作 - let loginOutURL = keychain[Constant.ServerConfig.rawValue]! + Constant.loginOut.rawValue - Alamofire.request(loginOutURL, method: .get, headers: ["token": keychain[Constant.Token.rawValue]!]) + let loginOutURL = defaults.get(for: serverConfigKey)! + Constant.loginOut.rawValue + Alamofire.request(loginOutURL, method: .get, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { response in switch response.result { case let .success(value): let loginOutModel = ActionResultModel(respJson: JSON(value)) if loginOutModel.code == 200 { // 删除token - keychain[Constant.Token.rawValue] = "" + defaults.clear(tokenKey) // 回到登录页 let destinationController = LoginViewController(nibName: "LoginViewController", bundle: nil) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -144,16 +146,16 @@ cell.leftLabel.text = titleArray[indexPath.row] // 判断开关状态 if indexPath.row == 2 { - let isOpen = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpen == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { cell.rightSwitch.setOn(true, animated: true) } else { cell.rightSwitch.setOn(false, animated: true) } cell.rightSwitch.addTarget(self, action: #selector(switchWaringAction), for: .valueChanged) } else { - let isAuto = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAuto == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { cell.rightSwitch.setOn(true, animated: true) } else { cell.rightSwitch.setOn(false, animated: true) @@ -172,19 +174,19 @@ @objc func switchWaringAction(_ sender: UISwitch) { if sender.isOn { - keychain[Constant.OpenWarning.rawValue] = "ON" + defaults.set(true, for: openWarningKey) // 振动 AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) } else { - keychain[Constant.OpenWarning.rawValue] = "OFF" + defaults.set(false, for: openWarningKey) } } @objc func autoWriteWarningAction(_ sender: UISwitch) { if sender.isOn { - keychain[Constant.AutoRecord.rawValue] = "ON" + defaults.set(true, for: autoRecordKey) } else { - keychain[Constant.AutoRecord.rawValue] = "OFF" + defaults.set(false, for: autoRecordKey) } } } diff --git a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate index b6fd5e5..abcec3f 100644 --- a/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate +++ b/LaserMethane.xcworkspace/xcuserdata/a203.xcuserdatad/UserInterfaceState.xcuserstate Binary files differ diff --git a/LaserMethane/Extension/String.swift b/LaserMethane/Extension/String.swift index 782c02c..ad4b23b 100644 --- a/LaserMethane/Extension/String.swift +++ b/LaserMethane/Extension/String.swift @@ -6,6 +6,7 @@ // import Foundation +import DefaultsKit import KeychainAccess import SwiftRandom import SwiftyRSA @@ -34,7 +35,7 @@ // 拼接字符串 func combineImagePath() -> String { - let baseURL = Keychain()[Constant.ServerConfig.rawValue] ?? "http://111.198.10.15:12204" + let baseURL = Defaults.shared.get(for: serverConfigKey) ?? "http://111.198.10.15:12204" // http://111.198.10.15:12204/2021-07/d0a3bd60179b467784e83ed818a98873.jpg return "\(baseURL)\("/static/")\(self)" } diff --git a/LaserMethane/Util/Constant.swift b/LaserMethane/Util/Constant.swift index cd568e8..9d24d19 100644 --- a/LaserMethane/Util/Constant.swift +++ b/LaserMethane/Util/Constant.swift @@ -5,6 +5,7 @@ // Created by 203 on 2021/7/11. // +import DefaultsKit import Foundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width // 设备屏幕宽 @@ -17,18 +18,21 @@ let DEVICE_DATA_VIEW_HEIGHT = (SCREEN_WIDTH - 40) / 3 // 蓝牙设备数据显示View高 let SCHEMA_VERSION = UInt64(0) // Realm数据库版本 +let serverConfigKey = Key("ServerConfig") +let userNameKey = Key("UserName") +let passwordKey = Key("Password") +let tokenKey = Key("Token") +let singleModeKey = Key("SingleMode") // 是否是单机模式 +let autoRecordKey = Key("AutoRecord") // 是否自动上报事件 +let openWarningKey = Key("OpenWarning") // 是否打开报警 +let lngKey = Key("CurrentLongitude") // 当前经度 +let latKey = Key("CurrentLatitude") // 当前纬度 +let defaultKey = Key("InspectionCacheModel") // 巡检数据缓存模型 +let statusKey = Key("inspectionStatus") // 巡检任务完成标志 + public enum Constant: String { // 用户相关的key值 - case UserName = "userName" - case Password = "password" - case ServerConfig = "defaultServerConfig" - case Token = "token" case UserJson = "userInfoJson" - case AutoRecord = "autoRecordLog" - case OpenWarning = "openWarning" - case CurrentLongitude = "currentLongitude" - case CurrentLatitude = "currentLatitude" - case isSingleMode = "singleMode" // 网络请求相关的地址 case baseConfig = "/config/baseConfig" diff --git a/LaserMethane/ViewController/Event/EventViewController.swift b/LaserMethane/ViewController/Event/EventViewController.swift index 40e41f6..b498e57 100644 --- a/LaserMethane/ViewController/Event/EventViewController.swift +++ b/LaserMethane/ViewController/Event/EventViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var eventTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [EventRowModel] = [] private var dformatter = DateFormatter() @@ -43,11 +43,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let eventListURL = baseURL! + Constant.eventList.rawValue let param: [String: Any] = ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset] print("提交参数: \(param)") - Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(eventListURL, method: .get, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Guide/GuideViewController.swift b/LaserMethane/ViewController/Guide/GuideViewController.swift index 4c7f100..c077691 100644 --- a/LaserMethane/ViewController/Guide/GuideViewController.swift +++ b/LaserMethane/ViewController/Guide/GuideViewController.swift @@ -5,20 +5,19 @@ // Created by 203 on 2021/7/27. // -import KeychainAccess +import DefaultsKit import UIKit class GuideViewController: UIViewController { @IBOutlet var skipButton: UIButton! private var timer: Timer? - private var keychain = Keychain() private var countSeconds = 3 override func viewDidLoad() { super.viewDidLoad() timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(countDownTimer), userInfo: nil, repeats: true) // 设置默认ip - keychain[Constant.ServerConfig.rawValue] = "http://111.198.10.15:12204" + Defaults.shared.set("http://111.198.10.15:12204", for: serverConfigKey) } // 倒计时 diff --git a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift index bb92ed1..a6aaa43 100644 --- a/LaserMethane/ViewController/Inspect/EventTaskViewController.swift +++ b/LaserMethane/ViewController/Inspect/EventTaskViewController.swift @@ -6,14 +6,14 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit class EventTaskViewController: UIViewController, TransferIdDelegate { @IBOutlet var taskTableView: UITableView! - private let keychain = Keychain() + private let defaults = Defaults.shared private var id: String? private var rowsArray = [ListModel]() private var valueDelegate: TransferValueDelegate! @@ -24,11 +24,11 @@ taskTableView.dataSource = self taskTableView.delegate = self // 查询事件列表 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let eventListURL = baseURL! + Constant.searchByInspect.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let eventListURL = baseURL + Constant.searchByInspect.rawValue Alamofire.request(eventListURL, method: .get, parameters: ["inspectionId": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): rowsArray = EventTaskModel(respJson: JSON(value)).data.list diff --git a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift index f811c5d..f9f171a 100644 --- a/LaserMethane/ViewController/Inspect/InspectMapViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectMapViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SnapKit import SwiftyJSON import UIKit @@ -15,7 +15,7 @@ private var id: String? private var mapView: MAMapView! private var inspectView: UIView! - private let keychain = Keychain() + private let defaults = Defaults.shared @IBOutlet var inspectNameLabel: UILabel! @IBOutlet var inspectStartTimeLabel: UILabel! @@ -63,11 +63,11 @@ } func loadInspectDetail() { - let baseURL = keychain[Constant.ServerConfig.rawValue] - let inspectionDetailURL = baseURL! + Constant.inspectionDetail.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let inspectionDetailURL = baseURL + Constant.inspectionDetail.rawValue Alamofire.request(inspectionDetailURL, method: .get, parameters: ["id": id!], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): setInspectData(detailModel: InspectDetailModel(respJson: JSON(value)).data) diff --git a/LaserMethane/ViewController/Inspect/InspectViewController.swift b/LaserMethane/ViewController/Inspect/InspectViewController.swift index bf9fac7..f275624 100644 --- a/LaserMethane/ViewController/Inspect/InspectViewController.swift +++ b/LaserMethane/ViewController/Inspect/InspectViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import MJRefresh import SwiftyJSON import UIKit @@ -17,7 +17,7 @@ @IBOutlet var keywordsView: UITextField! @IBOutlet var inspectTableView: UITableView! - private var keychain = Keychain() + private let defaults = Defaults.shared private var baseURL: String? private var rowsArray: [RowsModel] = [] private var dformatter = DateFormatter() @@ -44,11 +44,11 @@ } func loadData(keywords: String, startTime: String, endTime: String, offset: Int) { - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let inspectListURL = baseURL! + Constant.inspectList.rawValue Alamofire.request(inspectListURL, method: .get, parameters: ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset], - headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in + headers: ["token": defaults.get(for: tokenKey)!]).responseJSON { [self] response in switch response.result { case let .success(value): let inspectModel = InspectListModel(respJson: JSON(value)) diff --git a/LaserMethane/ViewController/Login/LoginViewController.swift b/LaserMethane/ViewController/Login/LoginViewController.swift index d9edc12..a4cd6e9 100644 --- a/LaserMethane/ViewController/Login/LoginViewController.swift +++ b/LaserMethane/ViewController/Login/LoginViewController.swift @@ -6,7 +6,7 @@ // import Alamofire -import KeychainAccess +import DefaultsKit import SwiftyJSON import UIKit @@ -14,7 +14,8 @@ @IBOutlet var userNameView: UITextField! @IBOutlet var passwordView: UITextField! @IBOutlet var loginButton: UIButton! - private var keychain = Keychain() + + private let defaults = Defaults.shared override func viewDidLoad() { super.viewDidLoad() @@ -25,8 +26,8 @@ loginButton.backgroundColor = [21, 101, 227].transferUIColor() loginButton.layer.cornerRadius = 18 // 设置圆角 // 设置默认账号密码 - userNameView.text = keychain[Constant.UserName.rawValue] ?? "" - passwordView.text = keychain[Constant.Password.rawValue] ?? "" + userNameView.text = defaults.get(for: userNameKey) ?? "" + passwordView.text = defaults.get(for: passwordKey) ?? "" } @IBAction func loginAction(_ sender: UIButton) { @@ -41,41 +42,41 @@ return } // 记录账号密码 - keychain[Constant.UserName.rawValue] = userName - keychain[Constant.Password.rawValue] = password + defaults.set(userName!, for: userNameKey) + defaults.set(password!, for: passwordKey) // 访问后台,开始登录 - let baseURL = keychain[Constant.ServerConfig.rawValue] - let configURL = baseURL! + Constant.baseConfig.rawValue + let baseURL = defaults.get(for: serverConfigKey)! + let configURL = baseURL + Constant.baseConfig.rawValue Alamofire.request(configURL, method: .get).responseJSON { [self] response in switch response.result { case let .success(value): let configModel = BaseConfigModel(respJson: JSON(value)) // 将密码经由RSA和publicKey加密 guard let pwdWithKey = try? password?.encryptByRSA(publicKey: (configModel.data?.publicKey)!) - else { + else { return } // 登录 - let loginURL = baseURL! + Constant.login.rawValue + let loginURL = baseURL + Constant.login.rawValue Alamofire.request(loginURL, method: .post, parameters: ["username": userName!, "password": pwdWithKey]) - .responseJSON { response in - switch response.result { - case let .success(value): - let loginModel = LoginResultModel(respJson: JSON(value)) - if loginModel.code == 200 { - // 将token存起来 - keychain[Constant.Token.rawValue] = loginModel.data!.token - // 跳转主页 - startMainMenuView() - } else { - AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + .responseJSON { response in + switch response.result { + case let .success(value): + let loginModel = LoginResultModel(respJson: JSON(value)) + if loginModel.code == 200 { + // 将token存起来 + defaults.set(loginModel.data!.token, for: tokenKey) + // 跳转主页 + startMainMenuView() + } else { + AlertHub.shared.showWaringAlert(controller: self, message: "密码错误,无法登陆") + } + case .failure: + AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - case .failure: - AlertHub.shared.showWaringAlert(controller: self, message: "未知异常,无法登陆") } - } case .failure: AlertHub.shared.showWaringAlert(controller: self, message: "检验失败,无法登陆") } @@ -84,7 +85,7 @@ // 跳转到主页 @objc func startMainMenuView() { - keychain[Constant.isSingleMode.rawValue] = "OFF" + defaults.set(false, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -104,7 +105,7 @@ // 单机模式 @IBAction func toSingleModeAction(_ sender: UIButton) { - keychain[Constant.isSingleMode.rawValue] = "ON" + defaults.set(true, for: singleModeKey) let homePage = MainMenuViewController(nibName: "MainMenuViewController", bundle: nil) let destinationController = UINavigationController(rootViewController: homePage) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -116,10 +117,10 @@ @IBAction func changeServerConfig(_ sender: UIButton) { var inputText: UITextField! // 读取本地数据,输入框显示默认IP - let ip = keychain[Constant.ServerConfig.rawValue] + let baseURL = defaults.get(for: serverConfigKey)! let msgAlertCtr = UIAlertController(title: nil, message: "请输入后台服务器地址", preferredStyle: .alert) msgAlertCtr.addTextField { textField in - textField.text = ip + textField.text = baseURL inputText = textField } let actionOK = UIAlertAction(title: "保存", style: .default) { [self] (_: UIAlertAction) -> Void in @@ -128,7 +129,7 @@ return } // 存本地 - keychain[Constant.ServerConfig.rawValue] = configData! + defaults.set(configData!, for: serverConfigKey) } let actionCancel = UIAlertAction(title: "取消", style: .cancel, handler: nil) // 设置取消按钮颜色为红色 diff --git a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift index 4c9daf5..499c156 100644 --- a/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift +++ b/LaserMethane/ViewController/MainMenu/MainMenuViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import KeychainAccess import SwiftyJSON import UIKit @@ -15,8 +16,9 @@ @IBOutlet var logSearchView: UIView! @IBOutlet var settingsView: UIView! - private var keychain = Keychain() - private var isSingleMode: String! + private let defaults = Defaults.shared + private let keychain = Keychain() + private var isSingleMode = false override func viewDidLoad() { super.viewDidLoad() @@ -27,8 +29,8 @@ let dict: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white] navigationController?.navigationBar.titleTextAttributes = dict // title color - isSingleMode = keychain[Constant.isSingleMode.rawValue] ?? "OFF" - if isSingleMode == "OFF" { + isSingleMode = defaults.get(for: singleModeKey) ?? false + if !isSingleMode { // 如果不是单机模式登录,则获取用户信息 obtainUserInfo() } @@ -37,9 +39,9 @@ } func obtainUserInfo() { - let token = keychain[Constant.Token.rawValue] - let obtainUserInfoURL = keychain[Constant.ServerConfig.rawValue]! + Constant.userInfo.rawValue - Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token!]).responseJSON { [self] response in + let token = defaults.get(for: tokenKey)! + let obtainUserInfoURL = defaults.get(for: serverConfigKey)! + Constant.userInfo.rawValue + Alamofire.request(obtainUserInfoURL, method: .get, headers: ["token": token]).responseJSON { [self] response in switch response.result { case let .success(value): let userModel = UserInfoModel(respJson: JSON(value)) @@ -74,7 +76,7 @@ // 新建巡检 @IBAction func toCreateInspectView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeMapViewController(), animated: true) } else { navigationController?.pushViewController(MapViewController(), animated: true) @@ -86,14 +88,14 @@ // 弹框选择 let selectController = UIAlertController(title: "选择记录类型", message: nil, preferredStyle: .alert) let inspectButton = UIAlertAction(title: "巡检记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeInspectViewController(), animated: true) } else { navigationController?.pushViewController(InspectViewController(), animated: true) } }) let eventLogButton = UIAlertAction(title: "事件记录", style: .default, handler: { [self] _ in - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeEventViewController(), animated: true) } else { navigationController?.pushViewController(EventViewController(), animated: true) @@ -106,7 +108,7 @@ // 系统设置 @IBAction func toUserSettingsView(_ sender: UIButton) { - if isSingleMode == "ON" { + if isSingleMode { navigationController?.pushViewController(SingModeSettingViewController(), animated: true) } else { navigationController?.pushViewController(SettingViewController(), animated: true) diff --git a/LaserMethane/ViewController/Map/MapViewController.swift b/LaserMethane/ViewController/Map/MapViewController.swift index 7b7b415..6ecbca3 100644 --- a/LaserMethane/ViewController/Map/MapViewController.swift +++ b/LaserMethane/ViewController/Map/MapViewController.swift @@ -16,13 +16,10 @@ import UIKit class MapViewController: UIViewController, MAMapViewDelegate { + private let timeFormatter = DateFormatter() private let manager = CLLocationManager() private let locationManager = AMapLocationManager() private let defaults = Defaults.shared - // 巡检数据缓存模型 - private let defaultKey = Key("InspectionCacheModel") - // 巡检任务完成标志 - private let statusKey = Key("inspectionStatus") private var mapView: MAMapView! private var topTagView: UIView! @@ -58,7 +55,6 @@ private var inputTextField: UITextField! private var inspectionId: String! // 新建巡检数据模型 - private let timeFormatter = DateFormatter() private var model: NewInspectionModel! private var routeArray = [NewRouteModel]() private var alarmCount: Int = 0 @@ -74,7 +70,7 @@ navigationController?.navigationBar.titleTextAttributes = dict navigationController?.navigationBar.tintColor = .white // 初始化基本数据 - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! let userJson = keychain[Constant.UserJson.rawValue]! let data = userJson.data(using: String.Encoding.utf8, allowLossyConversion: false) ?? Data() userModel = UserInfoModel(respJson: JSON(data)) @@ -301,19 +297,19 @@ let msgAlertCtr = UIAlertController(title: "温馨提示", message: "确定结束巡检吗?", preferredStyle: .alert) let actionOK = UIAlertAction(title: "确定", style: .default) { [self] (_: UIAlertAction) -> Void in // 取最新位置作为结束位置经纬度 - let endLng = keychain[Constant.CurrentLongitude.rawValue]! as String - let endLat = keychain[Constant.CurrentLatitude.rawValue]! as String + let endLng = defaults.get(for: lngKey) + let endLat = defaults.get(for: latKey) // 提交巡检 let addInspectionURL = baseURL! + Constant.addInspection.rawValue let timeInterval: TimeInterval = Date().timeIntervalSince1970 let endTime = timeFormatter.string(from: Date(timeIntervalSince1970: timeInterval)) let param: [String: Any] = ["id": model.id, "name": model.name, "startTime": model.startTime, "endTime": endTime, "date": model.date, "startLng": model.startLng, - "startLat": model.startLat, "endLng": Double(endLng)!, "endLat": Double(endLat)!, + "startLat": model.startLat, "endLng": endLng, "endLat": endLat, "routes": model.routes, "user": model.user] // 提交参数: ["startLat": 39.915913628472225, "id": "162925125712000", "date": "2021-08-18", "startTime": "2021-08-18 09:47:37", "endLng": 116.26874240451389, "startLng": 116.26874240451389, "routes": "[{\"lat\":39.915913628472225,\"lng\":116.26874240451389}]", "user": "王晓颖", "name": "测试iOS", "endTime": "2021-08-18 09:47:56", "endLat": 39.915913628472225] print("提交参数: \(param)") - Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addInspectionURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { response in switch response.result { case let .success(value): @@ -397,8 +393,8 @@ } @IBAction func addEventAction(_ sender: Any) { - let lng = keychain[Constant.CurrentLongitude.rawValue]! as String - let lat = keychain[Constant.CurrentLatitude.rawValue]! as String + let lng = defaults.get(for: lngKey) + let lat = defaults.get(for: latKey) print("新建事件位置信息: [\(lng), \(lat)]") let newEventViewController = NewEventViewController(nibName: "NewEventViewController", bundle: nil) @@ -412,8 +408,8 @@ dic: ["isWarning": true, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) let eventLogButton = UIAlertAction(title: "自定义事件", style: .default, handler: { [self] _ in @@ -422,8 +418,8 @@ dic: ["isWarning": false, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) selectController.addAction(inspectButton) @@ -459,8 +455,8 @@ func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) { print("位置信息: [\(location.coordinate.latitude),\(location.coordinate.longitude)]") // 保存最新的一次位置 - keychain[Constant.CurrentLongitude.rawValue] = location.coordinate.longitude.description - keychain[Constant.CurrentLatitude.rawValue] = location.coordinate.latitude.description + defaults.set(location.coordinate.longitude, for: lngKey) + defaults.set(location.coordinate.latitude, for: latKey) // 设置起始经纬度 if model.startLng == 0.0 || model.startLat == 0.0 { model.startLng = location.coordinate.longitude @@ -651,14 +647,14 @@ let maxPotencyValue = m1 + m2 + m3 + UInt(data[11]) maxValueLabel.text = maxPotencyValue.description // 判断是否需要报警 - let isOpenWarning = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpenWarning == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { if maxPotencyValue >= alarmValue { // 当前值大于设置值,需要报警 // OtherUtils.playSound(mapActivity, R.raw.alarm) AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) - let isAutoRecord = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAutoRecord == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { // 如果连续超过10个报警,自动生成报警事件 alarmCount += 1 if alarmCount >= 10 { @@ -684,16 +680,16 @@ } isGeneratingTask = true // 取最新位置作为报警位置经纬度 - let longitude = keychain[Constant.CurrentLongitude.rawValue]! as String - let latitude = keychain[Constant.CurrentLatitude.rawValue]! as String + let longitude = defaults.get(for: lngKey) + let latitude = defaults.get(for: latKey) // 提交事件 let addEventURL = baseURL! + Constant.addEvent.rawValue let param: [String: Any] = ["id": "t".id(), "inspectionId": model.id, "name": model.name, - "createTime": model.startTime, "type": "报警事件", "lng": Double(longitude)!, - "lat": Double(latitude)!, "data": Double(maxValue)!, "images": "", + "createTime": model.startTime, "type": "报警事件", "lng": longitude, + "lat": latitude, "data": Double(maxValue)!, "images": "", "description": "自动报警记录", "user": model.user] print("提交参数: \(param)") - Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { [self] response in switch response.result { case let .success(value): diff --git a/LaserMethane/ViewController/Map/NewEventViewController.swift b/LaserMethane/ViewController/Map/NewEventViewController.swift index 305282d..c3004ef 100644 --- a/LaserMethane/ViewController/Map/NewEventViewController.swift +++ b/LaserMethane/ViewController/Map/NewEventViewController.swift @@ -6,6 +6,7 @@ // import Alamofire +import DefaultsKit import HXPHPicker import KeychainAccess import Kingfisher @@ -32,6 +33,7 @@ @IBOutlet var saveEventButton: UIButton! private let keychain = Keychain() + private let defaults = Defaults.shared private let dateformatter = DateFormatter() private var imageUrlArray = [URL]() // 完整的图片url private var imageArray = [String]() // 上传图片成功后服务器返回的图片数组 @@ -54,7 +56,7 @@ let userJson = keychain[Constant.UserJson.rawValue]! let data = userJson.data(using: String.Encoding.utf8, allowLossyConversion: false) ?? Data() userModel = UserInfoModel(respJson: JSON(data)) - baseURL = keychain[Constant.ServerConfig.rawValue] + baseURL = defaults.get(for: serverConfigKey)! // setupLayerView() eventTimeLabel.text = currentTime() @@ -176,7 +178,7 @@ "lat": latitude!, "data": eventValueData, "images": imageArray.reformat(), "description": eventDesc!, "user": (userModel.data?.name)!] print("提交参数: \(param)") - Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": keychain[Constant.Token.rawValue]!]) + Alamofire.request(addEventURL, method: .post, parameters: param, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON(completionHandler: { [self] response in switch response.result { case let .success(value): @@ -215,7 +217,7 @@ LoadingHub.shared.showLoading(text: "图片上传中...") Alamofire.upload(multipartFormData: { formData in formData.append(imageData, withName: "file", fileName: imageName, mimeType: "image/jpeg") - }, usingThreshold: UInt64(), to: uploadURL, method: .post, headers: ["token": keychain[Constant.Token.rawValue]!]) { [self] result in + }, usingThreshold: UInt64(), to: uploadURL, method: .post, headers: ["token": defaults.get(for: tokenKey)!]) { [self] result in switch result { case let .success(upload, _, _): upload.responseJSON(completionHandler: { value in diff --git a/LaserMethane/ViewController/Map/SingModeMapViewController.swift b/LaserMethane/ViewController/Map/SingModeMapViewController.swift index c618044..a818132 100644 --- a/LaserMethane/ViewController/Map/SingModeMapViewController.swift +++ b/LaserMethane/ViewController/Map/SingModeMapViewController.swift @@ -8,7 +8,6 @@ import AudioToolbox import CoreBluetooth import DefaultsKit -import KeychainAccess import SnapKit import Toast_Swift import UIKit @@ -42,7 +41,6 @@ @IBOutlet var maxValueLabel: UILabel! private var valueDelegate: TransferValueDelegate! - private var keychain = Keychain() private var centralManager = CBCentralManager() // 扫描到的设备的集合 private var scanDevices = [CBPeripheral]() @@ -293,13 +291,13 @@ let msgAlertCtr = UIAlertController(title: "温馨提示", message: "确定结束巡检吗?", preferredStyle: .alert) let actionOK = UIAlertAction(title: "确定", style: .default) { [self] (_: UIAlertAction) -> Void in // 取最新位置作为结束位置经纬度 - let endLng = keychain[Constant.CurrentLongitude.rawValue]! as String - let endLat = keychain[Constant.CurrentLatitude.rawValue]! as String + let endLng = defaults.get(for: lngKey) + let endLat = defaults.get(for: latKey) // 提交巡检 let timeInterval: TimeInterval = Date().timeIntervalSince1970 model.endTime = timeFormatter.string(from: Date(timeIntervalSince1970: timeInterval)) - model.endLng = Double(endLng)! - model.endLat = Double(endLat)! + model.endLng = endLng! + model.endLat = endLat! // 保存本地数据库 inspectionShared.addInspection(newModel: model!) if inspectionShared.isAddSuccess(inspectionId: model.id) { @@ -381,8 +379,8 @@ } @IBAction func addEventAction(_ sender: Any) { - let lng = keychain[Constant.CurrentLongitude.rawValue]! as String - let lat = keychain[Constant.CurrentLatitude.rawValue]! as String + let lng = defaults.get(for: lngKey) + let lat = defaults.get(for: latKey) print("新建事件位置信息: [\(lng), \(lat)]") let newEventViewController = SingModeNewEventViewController(nibName: "SingModeNewEventViewController", bundle: nil) @@ -396,8 +394,8 @@ dic: ["isWarning": true, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) let eventLogButton = UIAlertAction(title: "自定义事件", style: .default, handler: { [self] _ in @@ -406,8 +404,8 @@ dic: ["isWarning": false, "inspectionId": model.id, "inspectionName": model.name, - "longitude": Double(lng)!, - "latitude": Double(lat)!]) + "longitude": lng, + "latitude": lat]) navigationController?.pushViewController(newEventViewController, animated: true) }) selectController.addAction(inspectButton) @@ -444,8 +442,8 @@ func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) { print("位置信息: [\(location.coordinate.latitude),\(location.coordinate.longitude)]") // 保存最新的一次位置 - keychain[Constant.CurrentLongitude.rawValue] = location.coordinate.longitude.description - keychain[Constant.CurrentLatitude.rawValue] = location.coordinate.latitude.description + defaults.set(location.coordinate.longitude, for: lngKey) + defaults.set(location.coordinate.latitude, for: latKey) // 设置起始经纬度 if model.startLng == 0.0 || model.startLat == 0.0 { model.startLng = location.coordinate.longitude @@ -636,14 +634,14 @@ let maxPotencyValue = m1 + m2 + m3 + UInt(data[11]) maxValueLabel.text = maxPotencyValue.description // 判断是否需要报警 - let isOpenWarning = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpenWarning == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { if maxPotencyValue >= alarmValue { // 当前值大于设置值,需要报警 // OtherUtils.playSound(mapActivity, R.raw.alarm) AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) - let isAutoRecord = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAutoRecord == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { // 如果连续超过10个报警,自动生成报警事件 alarmCount += 1 if alarmCount >= 10 { @@ -669,11 +667,14 @@ } isGeneratingTask = true // 取最新位置作为报警位置经纬度 - let longitude = keychain[Constant.CurrentLongitude.rawValue]! as String - let latitude = keychain[Constant.CurrentLatitude.rawValue]! as String + let longitude = defaults.get(for: lngKey)! + let latitude = defaults.get(for: latKey)! // 提交事件 let taskId = "t".id() - let eventModel = NewEventTaskModel(taskId: taskId, inspectionId: model.id, name: model.name, createTime: model.startTime, type: "报警事件", lng: Double(longitude)!, lat: Double(latitude)!, data: Double(maxValue)!, images: "", description: "自动报警记录", user: "智巡宝") + let eventModel = NewEventTaskModel(taskId: taskId, inspectionId: model.id, + name: model.name, createTime: model.startTime, type: "报警事件", + lng: longitude, lat: latitude, data: Double(maxValue)!, + images: "", description: "自动报警记录", user: "智巡宝") taskShared.addEventTask(model: eventModel) if taskShared.isAddSuccess(taskId: taskId) { view.makeToast("保存成功", duration: 2, position: .center) diff --git a/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift b/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift index c88313b..1522333 100644 --- a/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift +++ b/LaserMethane/ViewController/Map/SingModeNewEventViewController.swift @@ -7,7 +7,6 @@ import Alamofire import HXPHPicker -import KeychainAccess import Kingfisher import UIKit import ZLPhotoBrowser @@ -31,7 +30,6 @@ @IBOutlet var imageCollectionView: UICollectionView! @IBOutlet var saveEventButton: UIButton! - private let keychain = Keychain() private let dateformatter = DateFormatter() private var imageUrlArray = [URL]() // 完整的图片url private var imageArray = [String]() // 上传图片成功后服务器返回的图片数组 diff --git a/LaserMethane/ViewController/Settings/SettingViewController.swift b/LaserMethane/ViewController/Settings/SettingViewController.swift index ebeb3ae..8bcdc1e 100644 --- a/LaserMethane/ViewController/Settings/SettingViewController.swift +++ b/LaserMethane/ViewController/Settings/SettingViewController.swift @@ -7,6 +7,7 @@ import Alamofire import AudioToolbox +import DefaultsKit import KeychainAccess import SnapKit import SwiftyJSON @@ -16,6 +17,7 @@ @IBOutlet var tableView: UITableView! private var titleArray: [String] = [String]() private var keychain = Keychain() + private let defaults = Defaults.shared private var userModel: UserInfoModel! override func viewDidLoad() { @@ -75,15 +77,15 @@ cancelAction.setValue(UIColor.red, forKey: "titleTextColor") let confirmAction = UIAlertAction(title: "确定", style: .default, handler: { [self] _ in // 执行退出登录操作 - let loginOutURL = keychain[Constant.ServerConfig.rawValue]! + Constant.loginOut.rawValue - Alamofire.request(loginOutURL, method: .get, headers: ["token": keychain[Constant.Token.rawValue]!]) + let loginOutURL = defaults.get(for: serverConfigKey)! + Constant.loginOut.rawValue + Alamofire.request(loginOutURL, method: .get, headers: ["token": defaults.get(for: tokenKey)!]) .responseJSON { response in switch response.result { case let .success(value): let loginOutModel = ActionResultModel(respJson: JSON(value)) if loginOutModel.code == 200 { // 删除token - keychain[Constant.Token.rawValue] = "" + defaults.clear(tokenKey) // 回到登录页 let destinationController = LoginViewController(nibName: "LoginViewController", bundle: nil) destinationController.modalPresentationStyle = UIModalPresentationStyle.fullScreen @@ -144,16 +146,16 @@ cell.leftLabel.text = titleArray[indexPath.row] // 判断开关状态 if indexPath.row == 2 { - let isOpen = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpen == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { cell.rightSwitch.setOn(true, animated: true) } else { cell.rightSwitch.setOn(false, animated: true) } cell.rightSwitch.addTarget(self, action: #selector(switchWaringAction), for: .valueChanged) } else { - let isAuto = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAuto == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { cell.rightSwitch.setOn(true, animated: true) } else { cell.rightSwitch.setOn(false, animated: true) @@ -172,19 +174,19 @@ @objc func switchWaringAction(_ sender: UISwitch) { if sender.isOn { - keychain[Constant.OpenWarning.rawValue] = "ON" + defaults.set(true, for: openWarningKey) // 振动 AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) } else { - keychain[Constant.OpenWarning.rawValue] = "OFF" + defaults.set(false, for: openWarningKey) } } @objc func autoWriteWarningAction(_ sender: UISwitch) { if sender.isOn { - keychain[Constant.AutoRecord.rawValue] = "ON" + defaults.set(true, for: autoRecordKey) } else { - keychain[Constant.AutoRecord.rawValue] = "OFF" + defaults.set(false, for: autoRecordKey) } } } diff --git a/LaserMethane/ViewController/Settings/SingModeSettingViewController.swift b/LaserMethane/ViewController/Settings/SingModeSettingViewController.swift index 88d09ae..6aaacd4 100644 --- a/LaserMethane/ViewController/Settings/SingModeSettingViewController.swift +++ b/LaserMethane/ViewController/Settings/SingModeSettingViewController.swift @@ -6,14 +6,14 @@ // import AudioToolbox -import KeychainAccess +import DefaultsKit import SnapKit import UIKit class SingModeSettingViewController: UIViewController { @IBOutlet var tableView: UITableView! private var titleArray: [String] = [String]() - private var keychain = Keychain() + private let defaults = Defaults.shared override func viewDidLoad() { super.viewDidLoad() @@ -85,16 +85,16 @@ cell.leftLabel.text = titleArray[indexPath.row] // 判断开关状态 if indexPath.row == 0 { - let isOpen = keychain[Constant.OpenWarning.rawValue] ?? "OFF" - if isOpen == "ON" { + let isOpenWarning = defaults.get(for: openWarningKey) ?? false + if isOpenWarning { cell.rightSwitch.setOn(true, animated: true) } else { cell.rightSwitch.setOn(false, animated: true) } cell.rightSwitch.addTarget(self, action: #selector(switchWaringAction), for: .valueChanged) } else { - let isAuto = keychain[Constant.AutoRecord.rawValue] ?? "OFF" - if isAuto == "ON" { + let isAutoRecord = defaults.get(for: autoRecordKey) ?? false + if isAutoRecord { cell.rightSwitch.setOn(true, animated: true) } else { cell.rightSwitch.setOn(false, animated: true) @@ -108,19 +108,19 @@ @objc func switchWaringAction(_ sender: UISwitch) { if sender.isOn { - keychain[Constant.OpenWarning.rawValue] = "ON" + defaults.set(true, for: openWarningKey) // 振动 AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) } else { - keychain[Constant.OpenWarning.rawValue] = "OFF" + defaults.set(false, for: openWarningKey) } } @objc func autoWriteWarningAction(_ sender: UISwitch) { if sender.isOn { - keychain[Constant.AutoRecord.rawValue] = "ON" + defaults.set(true, for: autoRecordKey) } else { - keychain[Constant.AutoRecord.rawValue] = "OFF" + defaults.set(false, for: autoRecordKey) } } }