Commit 6b5d345936f24bdbc61a8db41038ec8b6c172ff4
1 parent
af1882da
添加更改存储方式,订单搜索功能
Showing
20 changed files
with
1523 additions
and
577 deletions
Podfile
| ... | ... | @@ -36,7 +36,7 @@ target 'metaCode' do |
| 36 | 36 | #加载GIF |
| 37 | 37 | pod 'SwiftGifOrigin', '~> 1.7.0' |
| 38 | 38 | #数据库存储 |
| 39 | - pod 'WCDB.swift' | |
| 39 | + #pod 'WCDB.swift' | |
| 40 | 40 | #占位按钮 |
| 41 | 41 | pod 'APButton' |
| 42 | 42 | #分类滚动切换视图 |
| ... | ... | @@ -44,7 +44,7 @@ target 'metaCode' do |
| 44 | 44 | pod 'JXPagingView/Paging' |
| 45 | 45 | #轮播图 |
| 46 | 46 | pod 'FSPagerView', '0.8.3' |
| 47 | -# pod 'SDCycleScrollView', '~> 1.82' | |
| 47 | + #pod 'SDCycleScrollView', '~> 1.82' | |
| 48 | 48 | |
| 49 | 49 | target 'metaCodeTests' do |
| 50 | 50 | inherit! :search_paths | ... | ... |
metaCode.xcodeproj/project.pbxproj
| ... | ... | @@ -77,6 +77,9 @@ |
| 77 | 77 | 79396EF12A31C21B0053E1AF /* CNLiveInfoShowViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79396EF02A31C21B0053E1AF /* CNLiveInfoShowViewController.swift */; }; |
| 78 | 78 | 793CAF522A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793CAF512A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift */; }; |
| 79 | 79 | 794BC1652AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794BC1642AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift */; }; |
| 80 | + 794FF1052B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794FF1042B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift */; }; | |
| 81 | + 794FF1072B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794FF1062B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift */; }; | |
| 82 | + 794FF1092B02131300385E85 /* CNLiveFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794FF1082B02131300385E85 /* CNLiveFileManager.swift */; }; | |
| 80 | 83 | 796398942A260C0100D045EB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963988D2A260C0100D045EB /* AppDelegate.swift */; }; |
| 81 | 84 | 7963989D2A260E6200D045EB /* CNLiveBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */; }; |
| 82 | 85 | 79656E382AAEBA8E00119A61 /* CNLiveMineInputViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79656E372AAEBA8E00119A61 /* CNLiveMineInputViewController.swift */; }; |
| ... | ... | @@ -127,7 +130,6 @@ |
| 127 | 130 | 7C4931362A307B60000E44B4 /* slide_up.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7C4931352A307B60000E44B4 /* slide_up.gif */; }; |
| 128 | 131 | 7C4931382A307BDB000E44B4 /* CNHomePageGuideView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C4931372A307BDB000E44B4 /* CNHomePageGuideView.swift */; }; |
| 129 | 132 | 7C7C62F62A4D72E9007A912E /* CNLiveIdentityDB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C7C62F52A4D72E9007A912E /* CNLiveIdentityDB.swift */; }; |
| 130 | - 7C83B43E2A52B8BA004BF4A4 /* CNHomePageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C83B43D2A52B8BA004BF4A4 /* CNHomePageViewModel.swift */; }; | |
| 131 | 133 | 7C83B4402A52BB2B004BF4A4 /* CNGlobalEnum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C83B43F2A52BB2B004BF4A4 /* CNGlobalEnum.swift */; }; |
| 132 | 134 | 7C83B4422A541EBF004BF4A4 /* CALayer+CNLiveExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C83B4412A541EBF004BF4A4 /* CALayer+CNLiveExtensions.swift */; }; |
| 133 | 135 | 7C83B4442A541F36004BF4A4 /* NSDate+CNLiveExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C83B4432A541F36004BF4A4 /* NSDate+CNLiveExtensions.swift */; }; |
| ... | ... | @@ -243,6 +245,9 @@ |
| 243 | 245 | 79396EF02A31C21B0053E1AF /* CNLiveInfoShowViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveInfoShowViewController.swift; sourceTree = "<group>"; }; |
| 244 | 246 | 793CAF512A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineExchangeViewController.swift; sourceTree = "<group>"; }; |
| 245 | 247 | 794BC1642AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSendViewController.swift; sourceTree = "<group>"; }; |
| 248 | + 794FF1042B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSearchViewController.swift; sourceTree = "<group>"; }; | |
| 249 | + 794FF1062B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSearchListViewController.swift; sourceTree = "<group>"; }; | |
| 250 | + 794FF1082B02131300385E85 /* CNLiveFileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveFileManager.swift; sourceTree = "<group>"; }; | |
| 246 | 251 | 7963988D2A260C0100D045EB /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; |
| 247 | 252 | 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveBaseViewController.swift; sourceTree = "<group>"; }; |
| 248 | 253 | 79656E372AAEBA8E00119A61 /* CNLiveMineInputViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineInputViewController.swift; sourceTree = "<group>"; }; |
| ... | ... | @@ -292,7 +297,6 @@ |
| 292 | 297 | 7C4931352A307B60000E44B4 /* slide_up.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = slide_up.gif; sourceTree = "<group>"; }; |
| 293 | 298 | 7C4931372A307BDB000E44B4 /* CNHomePageGuideView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNHomePageGuideView.swift; sourceTree = "<group>"; }; |
| 294 | 299 | 7C7C62F52A4D72E9007A912E /* CNLiveIdentityDB.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveIdentityDB.swift; sourceTree = "<group>"; }; |
| 295 | - 7C83B43D2A52B8BA004BF4A4 /* CNHomePageViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNHomePageViewModel.swift; sourceTree = "<group>"; }; | |
| 296 | 300 | 7C83B43F2A52BB2B004BF4A4 /* CNGlobalEnum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNGlobalEnum.swift; sourceTree = "<group>"; }; |
| 297 | 301 | 7C83B4412A541EBF004BF4A4 /* CALayer+CNLiveExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CALayer+CNLiveExtensions.swift"; sourceTree = "<group>"; }; |
| 298 | 302 | 7C83B4432A541F36004BF4A4 /* NSDate+CNLiveExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSDate+CNLiveExtensions.swift"; sourceTree = "<group>"; }; |
| ... | ... | @@ -539,6 +543,7 @@ |
| 539 | 543 | 7C7C62F52A4D72E9007A912E /* CNLiveIdentityDB.swift */, |
| 540 | 544 | 79BA085C2AB18E8300D01875 /* CNLiveSaveAuthDB.swift */, |
| 541 | 545 | 79EABB882AB4497700F3A4E2 /* CNLiveSaveStandDB.swift */, |
| 546 | + 794FF1082B02131300385E85 /* CNLiveFileManager.swift */, | |
| 542 | 547 | ); |
| 543 | 548 | path = Database; |
| 544 | 549 | sourceTree = "<group>"; |
| ... | ... | @@ -709,6 +714,8 @@ |
| 709 | 714 | 791C1C872AFB6FD7003E6362 /* CNLiveShopOrderExpressFirmViewController.swift */, |
| 710 | 715 | 791C1C892AFB84EE003E6362 /* CNLiveShopOrderExpressListViewController.swift */, |
| 711 | 716 | 792B53272AFCD7640009AB49 /* CNLiveShopOrderExpressDetailViewController.swift */, |
| 717 | + 794FF1042B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift */, | |
| 718 | + 794FF1062B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift */, | |
| 712 | 719 | ); |
| 713 | 720 | path = Controller; |
| 714 | 721 | sourceTree = "<group>"; |
| ... | ... | @@ -760,7 +767,6 @@ |
| 760 | 767 | isa = PBXGroup; |
| 761 | 768 | children = ( |
| 762 | 769 | 19565ED12AF9FE56007D6727 /* GoodsManager */, |
| 763 | - 7C83B43D2A52B8BA004BF4A4 /* CNHomePageViewModel.swift */, | |
| 764 | 770 | 1926C28E2AE0D76C00C71DC3 /* CNLiveDownSlideViewModel.swift */, |
| 765 | 771 | 19BB1FE22AEB8B7C0094D962 /* CNLiveShopConsoleViewModel.swift */, |
| 766 | 772 | 19BB1FED2AF0E1EC0094D962 /* CNLiveShopDetailViewModel.swift */, |
| ... | ... | @@ -1189,7 +1195,6 @@ |
| 1189 | 1195 | 7CD675522A29C04B008354C1 /* CNLiveConfigstant.swift in Sources */, |
| 1190 | 1196 | 79282A402A2F055100B5F8CF /* CNLiveConfigUserInfo.swift in Sources */, |
| 1191 | 1197 | 1965FA402AFB38AA00F0F435 /* CNLiveAddGoodsSelectUploadImageView.swift in Sources */, |
| 1192 | - 7C83B43E2A52B8BA004BF4A4 /* CNHomePageViewModel.swift in Sources */, | |
| 1193 | 1198 | 19BB1FDF2AEA3A450094D962 /* CNSlideBaseNavigationController.swift in Sources */, |
| 1194 | 1199 | 19BB1FE12AEB5C220094D962 /* CNLiveShopConsoleController.swift in Sources */, |
| 1195 | 1200 | 7C4931382A307BDB000E44B4 /* CNHomePageGuideView.swift in Sources */, |
| ... | ... | @@ -1227,6 +1232,7 @@ |
| 1227 | 1232 | 798A44F92A30835400815935 /* CNLiveHelpFeedBackViewController.swift in Sources */, |
| 1228 | 1233 | 79A68C4A2A26E6CE00DC3B43 /* (null) in Sources */, |
| 1229 | 1234 | 790D01852A2D89E100C5978D /* UIColor+CNLiveExtensions.swift in Sources */, |
| 1235 | + 794FF1092B02131300385E85 /* CNLiveFileManager.swift in Sources */, | |
| 1230 | 1236 | 79396EED2A319F220053E1AF /* NSObject+CNLiveExtensions.swift in Sources */, |
| 1231 | 1237 | 19FA201B2AE60423001F7186 /* CNLiveDownSlideModelLayout.swift in Sources */, |
| 1232 | 1238 | 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */, |
| ... | ... | @@ -1235,6 +1241,7 @@ |
| 1235 | 1241 | 19CC4D562ADD19C200308E2A /* String+Extension.swift in Sources */, |
| 1236 | 1242 | 7905BB492AB0588B0089BC50 /* CNLiveMineAuthResultViewController.swift in Sources */, |
| 1237 | 1243 | 19565EC22AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift in Sources */, |
| 1244 | + 794FF1052B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift in Sources */, | |
| 1238 | 1245 | 798A44EC2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift in Sources */, |
| 1239 | 1246 | 791C1C882AFB6FD7003E6362 /* CNLiveShopOrderExpressFirmViewController.swift in Sources */, |
| 1240 | 1247 | 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */, |
| ... | ... | @@ -1255,6 +1262,7 @@ |
| 1255 | 1262 | 1965FA3E2AFB176E00F0F435 /* CNLiveShopAddGoodsSingleView.swift in Sources */, |
| 1256 | 1263 | 7CD6753C2A2740B0008354C1 /* CNUpSlideViewRemindView.swift in Sources */, |
| 1257 | 1264 | 19BB1FEC2AF0AB8E0094D962 /* CNLiveDownShopDetailController.swift in Sources */, |
| 1265 | + 794FF1072B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift in Sources */, | |
| 1258 | 1266 | 798A44E82A30134400815935 /* CNLiveMineHeaderView.swift in Sources */, |
| 1259 | 1267 | 7C49312D2A2DB9FA000E44B4 /* UITabBar+CNLiveExtensions.swift in Sources */, |
| 1260 | 1268 | 79A267832AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift in Sources */, |
| ... | ... | @@ -1443,7 +1451,7 @@ |
| 1443 | 1451 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; |
| 1444 | 1452 | CLANG_ENABLE_MODULES = YES; |
| 1445 | 1453 | CODE_SIGN_STYLE = Automatic; |
| 1446 | - CURRENT_PROJECT_VERSION = 1.0.1.23.11.10.17; | |
| 1454 | + CURRENT_PROJECT_VERSION = 1.0.1.23.11.13.10; | |
| 1447 | 1455 | DEVELOPMENT_TEAM = 94X49GG3ZW; |
| 1448 | 1456 | EXCLUDED_ARCHS = ""; |
| 1449 | 1457 | GENERATE_INFOPLIST_FILE = YES; |
| ... | ... | @@ -1488,7 +1496,7 @@ |
| 1488 | 1496 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; |
| 1489 | 1497 | CLANG_ENABLE_MODULES = YES; |
| 1490 | 1498 | CODE_SIGN_STYLE = Automatic; |
| 1491 | - CURRENT_PROJECT_VERSION = 1.0.1.23.11.10.17; | |
| 1499 | + CURRENT_PROJECT_VERSION = 1.0.1.23.11.13.10; | |
| 1492 | 1500 | DEVELOPMENT_TEAM = 94X49GG3ZW; |
| 1493 | 1501 | EXCLUDED_ARCHS = ""; |
| 1494 | 1502 | GENERATE_INFOPLIST_FILE = YES; | ... | ... |
metaCode/Classes/Common/Util/CNLiveCommonBaseModel.swift
| ... | ... | @@ -8,21 +8,10 @@ |
| 8 | 8 | import Foundation |
| 9 | 9 | import UIKit |
| 10 | 10 | import HandyJSON |
| 11 | -import WCDBSwift | |
| 12 | 11 | |
| 13 | 12 | class BaseModel: HandyJSON { |
| 14 | 13 | |
| 15 | -// var database:Database | |
| 16 | - | |
| 17 | - required init() { | |
| 18 | - //数据库地址 | |
| 19 | -// let filePath = NSHomeDirectory() + "/Documents/DB/CNLiveBaseModel.db" | |
| 20 | -// database = Database(at: filePath) | |
| 21 | - | |
| 22 | -// super.init() | |
| 23 | - | |
| 24 | -// try database.create(table: NSStringFromClass(self), of: BaseModel.self) | |
| 25 | - } | |
| 14 | + required init() {} | |
| 26 | 15 | |
| 27 | 16 | func mapping(mapper: HelpingMapper) { |
| 28 | 17 | ... | ... |
metaCode/Classes/Config/Database/CNLiveFileManager.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveFileManager.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by open on 2023/11/13. | |
| 6 | +// | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | + | |
| 10 | +class CNLiveFileManager: NSObject { | |
| 11 | + | |
| 12 | + static let shared = CNLiveFileManager.init() | |
| 13 | + | |
| 14 | + open func save(object: Any, key: String) { | |
| 15 | + var temp_dic = NSMutableDictionary.init(contentsOfFile: userFileDir+"storage.plist") | |
| 16 | + if (temp_dic == nil) { | |
| 17 | + temp_dic = NSMutableDictionary.init() | |
| 18 | + } | |
| 19 | + temp_dic?.setObject(object, forKey: key as NSCopying) | |
| 20 | + temp_dic?.write(toFile: userFileDir+"storage.plist", atomically: true) | |
| 21 | + } | |
| 22 | + | |
| 23 | + open func take(key: String) -> Any { | |
| 24 | + let temp_dic = NSMutableDictionary.init(contentsOfFile: userFileDir+"storage.plist") | |
| 25 | + if (temp_dic == nil) { | |
| 26 | + return NSMutableDictionary() | |
| 27 | + } | |
| 28 | + return temp_dic?.object(forKey: key) as Any | |
| 29 | + } | |
| 30 | + | |
| 31 | + open func takeAll() -> NSDictionary { | |
| 32 | + let temp_dic = NSMutableDictionary.init(contentsOfFile: userFileDir+"storage.plist") | |
| 33 | + if (temp_dic == nil) { | |
| 34 | + return NSMutableDictionary() | |
| 35 | + } | |
| 36 | + return temp_dic ?? NSDictionary() | |
| 37 | + } | |
| 38 | + | |
| 39 | + open func resetAllSave() { | |
| 40 | + let temp_dic = NSMutableDictionary.init(contentsOfFile: userFileDir+"storage.plist") | |
| 41 | + if temp_dic != nil { | |
| 42 | + temp_dic?.removeAllObjects() | |
| 43 | + temp_dic?.write(toFile: userFileDir+"storage.plist", atomically: true) | |
| 44 | + } | |
| 45 | + } | |
| 46 | + | |
| 47 | + open func delete(key: String) { | |
| 48 | + let temp_dic = NSMutableDictionary.init(contentsOfFile: userFileDir+"storage.plist") | |
| 49 | + if temp_dic != nil { | |
| 50 | + temp_dic?.removeObject(forKey: key) | |
| 51 | + temp_dic?.write(toFile: userFileDir+"storage.plist", atomically: true) | |
| 52 | + } | |
| 53 | + } | |
| 54 | + | |
| 55 | + private lazy var userFileDir: String = { | |
| 56 | + let userFileDir = NSString() | |
| 57 | + var path: String = "" | |
| 58 | + path = "\(fileDir)/userId_\(UserInfoManager.shared.userInfo.uid)/" | |
| 59 | + let fileManager = FileManager.default | |
| 60 | + var isDir: ObjCBool = false | |
| 61 | + let exist: Bool = fileManager.fileExists(atPath: path, isDirectory: &isDir) | |
| 62 | + if !(isDir.boolValue && exist) { | |
| 63 | + do { | |
| 64 | + try fileManager.createDirectory(atPath: path, withIntermediateDirectories: true) | |
| 65 | + } catch { | |
| 66 | + debugPrint("文件目录创建失败") | |
| 67 | + return "" | |
| 68 | + } | |
| 69 | + } | |
| 70 | + return path as String | |
| 71 | + }() | |
| 72 | + | |
| 73 | + private lazy var fileDir: String = { | |
| 74 | + let path = "\(NSHomeDirectory())/Documents/metaCode" | |
| 75 | + let fileManager = FileManager.default | |
| 76 | + var isDir: ObjCBool = false | |
| 77 | + let exist: Bool = fileManager.fileExists(atPath: path, isDirectory: &isDir) | |
| 78 | + if !(isDir.boolValue && exist) { | |
| 79 | + do { | |
| 80 | + try fileManager.createDirectory(atPath: path, withIntermediateDirectories: true) | |
| 81 | + } catch { | |
| 82 | + debugPrint("文件目录创建失败") | |
| 83 | + return "" | |
| 84 | + } | |
| 85 | + } | |
| 86 | + return path as String | |
| 87 | + }() | |
| 88 | + | |
| 89 | +} | ... | ... |
metaCode/Classes/Config/Database/CNLiveIdentityDB.swift
| ... | ... | @@ -6,131 +6,131 @@ |
| 6 | 6 | // |
| 7 | 7 | |
| 8 | 8 | import Foundation |
| 9 | -import WCDBSwift | |
| 10 | - | |
| 11 | -///身份认证表名 | |
| 12 | -let CNLiveIdentityTableName = "CNLiveIdentityTable" | |
| 13 | - | |
| 14 | -///身份model | |
| 15 | -final class CNLiveIdentityModel: BaseModel,TableCodable { | |
| 16 | - var id: String = ""//ID号 | |
| 17 | - var name: String? = ""//名称 | |
| 18 | - var icon: String? = ""//小圆图标 | |
| 19 | - var createTime: String? = ""//注册时间 | |
| 20 | - var enable: Bool?//没用 | |
| 21 | - var backgroundImg:String? = ""//首页背景图 | |
| 22 | - var backgroundColor:String? = ""//添加身份按钮背景色 | |
| 23 | - var description:String? = ""//首页身份说明描述 | |
| 24 | - var auth: Bool?//身份是否验证 | |
| 25 | - | |
| 26 | - enum CodingKeys: String, CodingTableKey { | |
| 27 | - typealias Root = CNLiveIdentityModel | |
| 28 | - static let objectRelationalMapping = TableBinding(CodingKeys.self){ | |
| 29 | - //设置表的主键key为id,用来区分数据唯一性, 如果id为int类型,可以按实现按顺序递增 | |
| 30 | - BindColumnConstraint(id, isPrimary: true) | |
| 31 | - } | |
| 32 | - case id //不修改数据库字段名,和属性名保持一直 | |
| 33 | - case name //不修改数据库字段名,和属性名保持一直 | |
| 34 | - case icon | |
| 35 | - case createTime | |
| 36 | - case enable | |
| 37 | - case backgroundImg | |
| 38 | - case backgroundColor | |
| 39 | - case description | |
| 40 | - case auth | |
| 41 | - } | |
| 42 | - | |
| 43 | -} | |
| 44 | - | |
| 45 | -///身份列表数据库 | |
| 46 | -class CNLiveIdentityDB :NSObject{ | |
| 47 | - | |
| 48 | - ///数据库 | |
| 49 | - var database:Database | |
| 50 | - | |
| 51 | - //重新init方法为私有,不让外部调用 | |
| 52 | - override init() { | |
| 53 | - | |
| 54 | - //数据库地址 | |
| 55 | - let filePath = NSHomeDirectory() + "/Documents/DB/CNLiveIdentity.db" | |
| 56 | - database = Database(at: filePath) | |
| 57 | - | |
| 58 | - super.init() | |
| 59 | - self.createTable(name: CNLiveIdentityTableName, classType: CNLiveIdentityModel.self) | |
| 60 | - } | |
| 61 | - | |
| 62 | - /// 创建表 | |
| 63 | - /// - Parameters: | |
| 64 | - /// - name: 表名 | |
| 65 | - /// - classType: class类型,当前class需要实现 TableCodable | |
| 66 | - private func createTable<Root:TableDecodable>(name:String, classType: Root.Type){ | |
| 67 | - do{ | |
| 68 | - try database.create(table: name, of: classType) | |
| 69 | - }catch{ | |
| 70 | - print("创建失败") | |
| 71 | - } | |
| 72 | - | |
| 73 | - } | |
| 74 | - | |
| 75 | - /// 新增一条数据 | |
| 76 | - /// - Parameter object: 数据 | |
| 77 | - func insterObject(object: CNLiveIdentityModel){ | |
| 78 | - let array: [CNLiveIdentityModel] = [object] | |
| 79 | - self.insterObjects(objects: array) | |
| 80 | - } | |
| 81 | - | |
| 82 | - ///新增多条数据 | |
| 83 | - func insterObjects(objects: Array<CNLiveIdentityModel>){ | |
| 84 | - do{ | |
| 85 | - try database.insert(objects, intoTable: CNLiveIdentityTableName) | |
| 86 | - }catch{ | |
| 87 | - print("增加一条数据失败") | |
| 88 | - } | |
| 89 | - } | |
| 90 | - | |
| 91 | - /// 删除一条数据 | |
| 92 | - /// - Parameter delete: 被删除的数据 | |
| 93 | - func deleteObject(delete: CNLiveIdentityModel){ | |
| 94 | - | |
| 95 | - do{ | |
| 96 | - try database.delete(fromTable: CNLiveIdentityTableName, where: CNLiveIdentityModel.Properties.id == delete.id) | |
| 97 | - } | |
| 98 | - catch{ | |
| 99 | - print("删除一条数据失败") | |
| 100 | - } | |
| 101 | - } | |
| 102 | - | |
| 103 | - ///更新一条数据 | |
| 104 | - func updateObject(newObject:CNLiveIdentityModel){ | |
| 105 | - do{ | |
| 106 | - //需要更新的字段 | |
| 107 | - let updateProperties = [CNLiveIdentityModel.Properties.name, | |
| 108 | - CNLiveIdentityModel.Properties.icon, | |
| 109 | - CNLiveIdentityModel.Properties.createTime, | |
| 110 | - CNLiveIdentityModel.Properties.enable] | |
| 111 | - | |
| 112 | - try database.update(table: CNLiveIdentityTableName, on:updateProperties, with: newObject,where: CNLiveIdentityModel.Properties.id == newObject.id) | |
| 113 | - } | |
| 114 | - catch{ | |
| 115 | - print("更新一条数据失败") | |
| 116 | - } | |
| 117 | - } | |
| 118 | - | |
| 119 | - ///获取所有数据 | |
| 120 | - func searchAllObject()-> Array<CNLiveIdentityModel>{ | |
| 121 | - do{ | |
| 122 | - let allData: [CNLiveIdentityModel] = try database.getObjects(fromTable: CNLiveIdentityTableName) | |
| 123 | - return allData | |
| 124 | - } | |
| 125 | - catch{ | |
| 126 | - print("获取失败") | |
| 127 | - return [] | |
| 128 | - } | |
| 129 | - | |
| 130 | - | |
| 131 | - } | |
| 132 | - | |
| 133 | -} | |
| 9 | +//import WCDBSwift | |
| 10 | +// | |
| 11 | +/////身份认证表名 | |
| 12 | +//let CNLiveIdentityTableName = "CNLiveIdentityTable" | |
| 13 | +// | |
| 14 | +/////身份model | |
| 15 | +//final class CNLiveIdentityModel: BaseModel,TableCodable { | |
| 16 | +// var id: String = ""//ID号 | |
| 17 | +// var name: String? = ""//名称 | |
| 18 | +// var icon: String? = ""//小圆图标 | |
| 19 | +// var createTime: String? = ""//注册时间 | |
| 20 | +// var enable: Bool?//没用 | |
| 21 | +// var backgroundImg:String? = ""//首页背景图 | |
| 22 | +// var backgroundColor:String? = ""//添加身份按钮背景色 | |
| 23 | +// var description:String? = ""//首页身份说明描述 | |
| 24 | +// var auth: Bool?//身份是否验证 | |
| 25 | +// | |
| 26 | +// enum CodingKeys: String, CodingTableKey { | |
| 27 | +// typealias Root = CNLiveIdentityModel | |
| 28 | +// static let objectRelationalMapping = TableBinding(CodingKeys.self){ | |
| 29 | +// //设置表的主键key为id,用来区分数据唯一性, 如果id为int类型,可以按实现按顺序递增 | |
| 30 | +// BindColumnConstraint(id, isPrimary: true) | |
| 31 | +// } | |
| 32 | +// case id //不修改数据库字段名,和属性名保持一直 | |
| 33 | +// case name //不修改数据库字段名,和属性名保持一直 | |
| 34 | +// case icon | |
| 35 | +// case createTime | |
| 36 | +// case enable | |
| 37 | +// case backgroundImg | |
| 38 | +// case backgroundColor | |
| 39 | +// case description | |
| 40 | +// case auth | |
| 41 | +// } | |
| 42 | +// | |
| 43 | +//} | |
| 44 | +// | |
| 45 | +/////身份列表数据库 | |
| 46 | +//class CNLiveIdentityDB :NSObject{ | |
| 47 | +// | |
| 48 | +// ///数据库 | |
| 49 | +// var database:Database | |
| 50 | +// | |
| 51 | +// //重新init方法为私有,不让外部调用 | |
| 52 | +// override init() { | |
| 53 | +// | |
| 54 | +// //数据库地址 | |
| 55 | +// let filePath = NSHomeDirectory() + "/Documents/DB/CNLiveIdentity.db" | |
| 56 | +// database = Database(at: filePath) | |
| 57 | +// | |
| 58 | +// super.init() | |
| 59 | +// self.createTable(name: CNLiveIdentityTableName, classType: CNLiveIdentityModel.self) | |
| 60 | +// } | |
| 61 | +// | |
| 62 | +// /// 创建表 | |
| 63 | +// /// - Parameters: | |
| 64 | +// /// - name: 表名 | |
| 65 | +// /// - classType: class类型,当前class需要实现 TableCodable | |
| 66 | +// private func createTable<Root:TableDecodable>(name:String, classType: Root.Type){ | |
| 67 | +// do{ | |
| 68 | +// try database.create(table: name, of: classType) | |
| 69 | +// }catch{ | |
| 70 | +// print("创建失败") | |
| 71 | +// } | |
| 72 | +// | |
| 73 | +// } | |
| 74 | +// | |
| 75 | +// /// 新增一条数据 | |
| 76 | +// /// - Parameter object: 数据 | |
| 77 | +// func insterObject(object: CNLiveIdentityModel){ | |
| 78 | +// let array: [CNLiveIdentityModel] = [object] | |
| 79 | +// self.insterObjects(objects: array) | |
| 80 | +// } | |
| 81 | +// | |
| 82 | +// ///新增多条数据 | |
| 83 | +// func insterObjects(objects: Array<CNLiveIdentityModel>){ | |
| 84 | +// do{ | |
| 85 | +// try database.insert(objects, intoTable: CNLiveIdentityTableName) | |
| 86 | +// }catch{ | |
| 87 | +// print("增加一条数据失败") | |
| 88 | +// } | |
| 89 | +// } | |
| 90 | +// | |
| 91 | +// /// 删除一条数据 | |
| 92 | +// /// - Parameter delete: 被删除的数据 | |
| 93 | +// func deleteObject(delete: CNLiveIdentityModel){ | |
| 94 | +// | |
| 95 | +// do{ | |
| 96 | +// try database.delete(fromTable: CNLiveIdentityTableName, where: CNLiveIdentityModel.Properties.id == delete.id) | |
| 97 | +// } | |
| 98 | +// catch{ | |
| 99 | +// print("删除一条数据失败") | |
| 100 | +// } | |
| 101 | +// } | |
| 102 | +// | |
| 103 | +// ///更新一条数据 | |
| 104 | +// func updateObject(newObject:CNLiveIdentityModel){ | |
| 105 | +// do{ | |
| 106 | +// //需要更新的字段 | |
| 107 | +// let updateProperties = [CNLiveIdentityModel.Properties.name, | |
| 108 | +// CNLiveIdentityModel.Properties.icon, | |
| 109 | +// CNLiveIdentityModel.Properties.createTime, | |
| 110 | +// CNLiveIdentityModel.Properties.enable] | |
| 111 | +// | |
| 112 | +// try database.update(table: CNLiveIdentityTableName, on:updateProperties, with: newObject,where: CNLiveIdentityModel.Properties.id == newObject.id) | |
| 113 | +// } | |
| 114 | +// catch{ | |
| 115 | +// print("更新一条数据失败") | |
| 116 | +// } | |
| 117 | +// } | |
| 118 | +// | |
| 119 | +// ///获取所有数据 | |
| 120 | +// func searchAllObject()-> Array<CNLiveIdentityModel>{ | |
| 121 | +// do{ | |
| 122 | +// let allData: [CNLiveIdentityModel] = try database.getObjects(fromTable: CNLiveIdentityTableName) | |
| 123 | +// return allData | |
| 124 | +// } | |
| 125 | +// catch{ | |
| 126 | +// print("获取失败") | |
| 127 | +// return [] | |
| 128 | +// } | |
| 129 | +// | |
| 130 | +// | |
| 131 | +// } | |
| 132 | +// | |
| 133 | +//} | |
| 134 | 134 | |
| 135 | 135 | |
| 136 | 136 | ... | ... |
metaCode/Classes/Config/Database/CNLiveSaveAuthDB.swift
| ... | ... | @@ -6,7 +6,7 @@ |
| 6 | 6 | // |
| 7 | 7 | |
| 8 | 8 | import Foundation |
| 9 | -import WCDBSwift | |
| 9 | +//import WCDBSwift | |
| 10 | 10 | |
| 11 | 11 | ///身份认证表名 |
| 12 | 12 | let CNLiveAuthListTableName = "CNLiveAuthListTable" |
| ... | ... | @@ -14,154 +14,211 @@ let CNLiveAuthListTableName = "CNLiveAuthListTable" |
| 14 | 14 | class CNLiveSaveAuthDB : NSObject{ |
| 15 | 15 | |
| 16 | 16 | ///数据库 |
| 17 | - var database: Database | |
| 17 | +// var database: Database | |
| 18 | 18 | |
| 19 | 19 | static let shared = CNLiveSaveAuthDB() |
| 20 | 20 | |
| 21 | 21 | //重新init方法为私有,不让外部调用 |
| 22 | - private override init() { | |
| 23 | - //数据库地址 | |
| 24 | - let filePath = NSHomeDirectory() + "/Documents/DB"+UserInfoManager.shared.userInfo.uid+"/CNLiveAuthListTable.db" | |
| 25 | - database = Database(at: filePath) | |
| 26 | - | |
| 27 | - super.init() | |
| 28 | - do { | |
| 29 | - try database.create(table: CNLiveAuthListTableName, of: MineAuthListModel.self) | |
| 30 | - } catch { | |
| 31 | - print("创建失败") | |
| 32 | - } | |
| 33 | - } | |
| 22 | +// private override init() { | |
| 23 | +// //数据库地址 | |
| 24 | +// let filePath = NSHomeDirectory() + "/Documents/DB"+UserInfoManager.shared.userInfo.uid+"/CNLiveAuthListTable.db" | |
| 25 | +// database = Database(at: filePath) | |
| 26 | +// | |
| 27 | +// super.init() | |
| 28 | +// do { | |
| 29 | +// try database.create(table: CNLiveAuthListTableName, of: MineAuthListModel.self) | |
| 30 | +// } catch { | |
| 31 | +// print("创建失败") | |
| 32 | +// } | |
| 33 | +// } | |
| 34 | 34 | |
| 35 | 35 | /// 新增一条数据 |
| 36 | 36 | /// - Parameter object: 数据 |
| 37 | - func insterObject(object: MineAuthListModel){ | |
| 38 | - let array: [MineAuthListModel] = [object] | |
| 39 | - do{ | |
| 40 | - try database.insert(array, intoTable: CNLiveAuthListTableName) | |
| 41 | - }catch{ | |
| 42 | - print("增加一条数据失败") | |
| 43 | - } | |
| 37 | + func insterObject(object: MineAuthListModel) { | |
| 38 | +// let array: [MineAuthListModel] = [object] | |
| 39 | +// do{ | |
| 40 | +// try database.insert(array, intoTable: CNLiveAuthListTableName) | |
| 41 | +// }catch{ | |
| 42 | +// print("增加一条数据失败") | |
| 43 | +// } | |
| 44 | 44 | } |
| 45 | 45 | |
| 46 | 46 | /// 批量增加数据 |
| 47 | 47 | /// - Parameter objects: 数据组 |
| 48 | 48 | func insertObjects(objects: [MineAuthListModel]) { |
| 49 | - if objects.count > 0 { | |
| 50 | - do{ | |
| 51 | - for model in objects { | |
| 52 | - let m = model | |
| 53 | - print("插入时的数据结构===>\(m.identityId)") | |
| 54 | - } | |
| 55 | - try database.insert(objects, intoTable: CNLiveAuthListTableName) | |
| 56 | - }catch{ | |
| 57 | - print("增加一条数据失败") | |
| 58 | - } | |
| 59 | - }else{ | |
| 60 | - print("数据为空") | |
| 49 | + | |
| 50 | + var temp_dic = NSMutableDictionary.init(contentsOfFile: userFileDir+"storage.plist") | |
| 51 | + if (temp_dic == nil) { | |
| 52 | + temp_dic = NSMutableDictionary.init() | |
| 61 | 53 | } |
| 54 | + for item in objects { | |
| 55 | + temp_dic?.setObject((item.toJSON() ?? Dictionary()) as Dictionary, forKey: CNLiveAuthListTableName+"\(item.identityId)" as NSCopying) | |
| 56 | + } | |
| 57 | + temp_dic?.write(toFile: userFileDir+"storage.plist", atomically: true) | |
| 58 | + | |
| 59 | +// if objects.count > 0 { | |
| 60 | +// do{ | |
| 61 | +// for model in objects { | |
| 62 | +// let m = model | |
| 63 | +// print("插入时的数据结构===>\(m.identityId)") | |
| 64 | +// } | |
| 65 | +// try database.insert(objects, intoTable: CNLiveAuthListTableName) | |
| 66 | +// }catch{ | |
| 67 | +// print("增加一条数据失败") | |
| 68 | +// } | |
| 69 | +// }else{ | |
| 70 | +// print("数据为空") | |
| 71 | +// } | |
| 62 | 72 | } |
| 63 | 73 | |
| 64 | 74 | /// 删除一条数据 |
| 65 | 75 | /// - Parameter delete: 被删除的数据 |
| 66 | 76 | func deleteObject(delete: MineAuthListModel){ |
| 67 | 77 | |
| 68 | - do{ | |
| 69 | - try database.delete(fromTable: CNLiveAuthListTableName, where: MineAuthListModel.Properties.identityId == delete.identityId) | |
| 70 | - }catch{ | |
| 71 | - print("删除一条数据失败") | |
| 72 | - } | |
| 78 | +// do{ | |
| 79 | +// try database.delete(fromTable: CNLiveAuthListTableName, where: MineAuthListModel.Properties.identityId == delete.identityId) | |
| 80 | +// }catch{ | |
| 81 | +// print("删除一条数据失败") | |
| 82 | +// } | |
| 73 | 83 | } |
| 74 | 84 | |
| 75 | 85 | /// 删除本地所有数据 |
| 76 | 86 | func deleteAllObjects() { |
| 77 | - do { | |
| 78 | - try database.delete(fromTable: CNLiveAuthListTableName) | |
| 79 | - } catch { | |
| 80 | - print("数据删除失败") | |
| 81 | - } | |
| 87 | +// do { | |
| 88 | +// try database.delete(fromTable: CNLiveAuthListTableName) | |
| 89 | +// } catch { | |
| 90 | +// print("数据删除失败") | |
| 91 | +// } | |
| 82 | 92 | } |
| 83 | 93 | |
| 84 | 94 | |
| 85 | 95 | /// 更新一条数据 |
| 86 | 96 | /// - Parameter newObject: 更新的数据源 |
| 87 | 97 | func updateObject(newObject: MineAuthListModel) { |
| 88 | - do{ | |
| 89 | - //需要更新的字段 | |
| 90 | - let updateProperties = [MineAuthListModel.Properties.name, | |
| 91 | - MineAuthListModel.Properties.icon, | |
| 92 | - MineAuthListModel.Properties.cardImg, | |
| 93 | - MineAuthListModel.Properties.authTime, | |
| 94 | - MineAuthListModel.Properties.code, | |
| 95 | - MineAuthListModel.Properties.userStatus,] | |
| 96 | - | |
| 97 | - try database.update(table: CNLiveAuthListTableName, on:updateProperties, with: newObject,where: MineAuthListModel.Properties.identityId == newObject.identityId) | |
| 98 | - }catch{ | |
| 99 | - print("更新一条数据失败") | |
| 100 | - } | |
| 98 | +// do{ | |
| 99 | +// //需要更新的字段 | |
| 100 | +// let updateProperties = [MineAuthListModel.Properties.name, | |
| 101 | +// MineAuthListModel.Properties.icon, | |
| 102 | +// MineAuthListModel.Properties.cardImg, | |
| 103 | +// MineAuthListModel.Properties.authTime, | |
| 104 | +// MineAuthListModel.Properties.code, | |
| 105 | +// MineAuthListModel.Properties.userStatus,] | |
| 106 | +// | |
| 107 | +// try database.update(table: CNLiveAuthListTableName, on:updateProperties, with: newObject,where: MineAuthListModel.Properties.identityId == newObject.identityId) | |
| 108 | +// }catch{ | |
| 109 | +// print("更新一条数据失败") | |
| 110 | +// } | |
| 101 | 111 | } |
| 102 | 112 | |
| 103 | 113 | /// 更新多条数据 |
| 104 | 114 | /// - Parameter newObjects: 新数据数组 |
| 105 | 115 | func updateObjects(newObjects: [MineAuthListModel]) { |
| 106 | - do { | |
| 107 | - let tempArray = NSMutableArray() | |
| 108 | - for _ in newObjects { | |
| 109 | - //需要更新的字段 | |
| 110 | - let updateProperties = [MineAuthListModel.Properties.name, | |
| 111 | - MineAuthListModel.Properties.icon, | |
| 112 | - MineAuthListModel.Properties.cardImg, | |
| 113 | - MineAuthListModel.Properties.authTime, | |
| 114 | - MineAuthListModel.Properties.code, | |
| 115 | - MineAuthListModel.Properties.userStatus,] | |
| 116 | - tempArray.add(updateProperties) | |
| 117 | - } | |
| 118 | - try database.update(table: CNLiveAuthListTableName, on: tempArray as! [PropertyConvertible], with: newObjects) | |
| 119 | - } catch { | |
| 120 | - print("更新多条数据失败") | |
| 121 | - } | |
| 116 | +// do { | |
| 117 | +// let tempArray = NSMutableArray() | |
| 118 | +// for _ in newObjects { | |
| 119 | +// //需要更新的字段 | |
| 120 | +// let updateProperties = [MineAuthListModel.Properties.name, | |
| 121 | +// MineAuthListModel.Properties.icon, | |
| 122 | +// MineAuthListModel.Properties.cardImg, | |
| 123 | +// MineAuthListModel.Properties.authTime, | |
| 124 | +// MineAuthListModel.Properties.code, | |
| 125 | +// MineAuthListModel.Properties.userStatus,] | |
| 126 | +// tempArray.add(updateProperties) | |
| 127 | +// } | |
| 128 | +// try database.update(table: CNLiveAuthListTableName, on: tempArray as! [PropertyConvertible], with: newObjects) | |
| 129 | +// } catch { | |
| 130 | +// print("更新多条数据失败") | |
| 131 | +// } | |
| 122 | 132 | } |
| 123 | 133 | |
| 124 | 134 | |
| 125 | 135 | /// 获取所有数据 |
| 126 | 136 | /// - Returns: 返回查找的所以数据 |
| 127 | 137 | func searchAllObject() -> Array<MineAuthListModel>{ |
| 128 | - do{ | |
| 129 | - let allData: [MineAuthListModel] = try database.getObjects(fromTable: CNLiveAuthListTableName) | |
| 130 | - return allData | |
| 131 | - }catch{ | |
| 132 | - print("获取失败") | |
| 133 | - return [] | |
| 138 | + | |
| 139 | + let temp_dic = NSMutableDictionary.init(contentsOfFile: userFileDir+"storage.plist") | |
| 140 | + if (temp_dic == nil) { | |
| 141 | + return Array() | |
| 134 | 142 | } |
| 143 | + let tempArray = NSMutableArray.init() | |
| 144 | + temp_dic?.allValues.forEach({ value in | |
| 145 | + let listModel = dictionaryToModel(value as! [String : Any], MineAuthListModel.self,"") | |
| 146 | + tempArray.add(listModel) | |
| 147 | + }) | |
| 148 | + return tempArray as! Array<MineAuthListModel> | |
| 149 | + | |
| 150 | +// do{ | |
| 151 | +// let allData: [MineAuthListModel] = try database.getObjects(fromTable: CNLiveAuthListTableName) | |
| 152 | +// return allData | |
| 153 | +// }catch{ | |
| 154 | +// print("获取失败") | |
| 155 | +// return [] | |
| 156 | +// } | |
| 135 | 157 | } |
| 136 | 158 | |
| 137 | 159 | /// 获取所有数据唯一值id |
| 138 | 160 | /// - Returns: 返回查找的所以数据 |
| 139 | - func searchAllObjectId() -> Array<String>{ | |
| 140 | - do{ | |
| 141 | - let allData: [MineAuthListModel] = try database.getObjects(fromTable: CNLiveAuthListTableName) | |
| 142 | - let tempArray = NSMutableArray.init() | |
| 143 | - for item in allData { | |
| 144 | - print("数据库查找之后数据==>\(item.identityId)") | |
| 145 | - tempArray.add(item.identityId) | |
| 146 | - } | |
| 147 | - return tempArray as! Array<String> | |
| 148 | - }catch{ | |
| 149 | - print("获取失败") | |
| 150 | - return [] | |
| 151 | - } | |
| 152 | - } | |
| 161 | +// func searchAllObjectId() -> Array<String>{ | |
| 162 | +// do{ | |
| 163 | +// let allData: [MineAuthListModel] = try database.getObjects(fromTable: CNLiveAuthListTableName) | |
| 164 | +// let tempArray = NSMutableArray.init() | |
| 165 | +// for item in allData { | |
| 166 | +// print("数据库查找之后数据==>\(item.identityId)") | |
| 167 | +// tempArray.add(item.identityId) | |
| 168 | +// } | |
| 169 | +// return tempArray as! Array<String> | |
| 170 | +// }catch{ | |
| 171 | +// print("获取失败") | |
| 172 | +// return [] | |
| 173 | +// } | |
| 174 | +// } | |
| 153 | 175 | |
| 154 | 176 | /// 通过id获取特定数据 |
| 155 | 177 | /// - Parameter identityId: id |
| 156 | 178 | /// - Returns: 返回查找的数据 |
| 157 | - func searchOneObject(identityId: String) -> MineAuthListModel{ | |
| 158 | - do { | |
| 159 | - let searchPropertie = [MineAuthListModel.Properties.identityId] | |
| 160 | - let array: [MineAuthListModel] = try database.getObjects(on: searchPropertie, fromTable: CNLiveAuthListTableName, where: MineAuthListModel.Properties.identityId == identityId) | |
| 161 | - return array.count > 0 ? array.first! : MineAuthListModel.init() | |
| 162 | - } catch { | |
| 163 | - print("获取失败") | |
| 164 | - return MineAuthListModel.init() | |
| 179 | +// func searchOneObject(identityId: String) -> MineAuthListModel{ | |
| 180 | +// do { | |
| 181 | +// let searchPropertie = [MineAuthListModel.Properties.identityId] | |
| 182 | +// let array: [MineAuthListModel] = try database.getObjects(on: searchPropertie, fromTable: CNLiveAuthListTableName, where: MineAuthListModel.Properties.identityId == identityId) | |
| 183 | +// return array.count > 0 ? array.first! : MineAuthListModel.init() | |
| 184 | +// } catch { | |
| 185 | +// print("获取失败") | |
| 186 | +// return MineAuthListModel.init() | |
| 187 | +// } | |
| 188 | +// } | |
| 189 | + | |
| 190 | + | |
| 191 | + private lazy var userFileDir: String = { | |
| 192 | + let userFileDir = NSString() | |
| 193 | + var path: String = "" | |
| 194 | + path = "\(fileDir)/userId_\(UserInfoManager.shared.userInfo.uid)/" | |
| 195 | + let fileManager = FileManager.default | |
| 196 | + var isDir: ObjCBool = false | |
| 197 | + let exist: Bool = fileManager.fileExists(atPath: path, isDirectory: &isDir) | |
| 198 | + if !(isDir.boolValue && exist) { | |
| 199 | + do { | |
| 200 | + try fileManager.createDirectory(atPath: path, withIntermediateDirectories: true) | |
| 201 | + } catch { | |
| 202 | + debugPrint("文件目录创建失败") | |
| 203 | + return "" | |
| 204 | + } | |
| 165 | 205 | } |
| 166 | - } | |
| 206 | + return path as String | |
| 207 | + }() | |
| 208 | + | |
| 209 | + private lazy var fileDir: String = { | |
| 210 | + let path = "\(NSHomeDirectory())/Documents/metaCode/saveAuth" | |
| 211 | + let fileManager = FileManager.default | |
| 212 | + var isDir: ObjCBool = false | |
| 213 | + let exist: Bool = fileManager.fileExists(atPath: path, isDirectory: &isDir) | |
| 214 | + if !(isDir.boolValue && exist) { | |
| 215 | + do { | |
| 216 | + try fileManager.createDirectory(atPath: path, withIntermediateDirectories: true) | |
| 217 | + } catch { | |
| 218 | + debugPrint("文件目录创建失败") | |
| 219 | + return "" | |
| 220 | + } | |
| 221 | + } | |
| 222 | + return path as String | |
| 223 | + }() | |
| 167 | 224 | } | ... | ... |
metaCode/Classes/Config/Database/CNLiveSaveStandDB.swift
| ... | ... | @@ -6,169 +6,226 @@ |
| 6 | 6 | // |
| 7 | 7 | |
| 8 | 8 | import Foundation |
| 9 | -import WCDBSwift | |
| 9 | +//import WCDBSwift | |
| 10 | 10 | |
| 11 | 11 | ///身份列表表名 identityApi/allList 接口数据存储 |
| 12 | 12 | let CNLiveStandListTableName = "CNLiveStandListTableName" |
| 13 | 13 | class CNLiveSaveStandDB: NSObject { |
| 14 | 14 | |
| 15 | 15 | ///数据库 |
| 16 | - var database: Database | |
| 16 | +// var database: Database | |
| 17 | 17 | |
| 18 | 18 | static let shared = CNLiveSaveStandDB() |
| 19 | 19 | |
| 20 | - //重新init方法为私有,不让外部调用 | |
| 21 | - private override init() { | |
| 22 | - //数据库地址 | |
| 23 | - let filePath = NSHomeDirectory() + "/Documents/DB"+UserInfoManager.shared.userInfo.uid+"/CNLiveStandListTableName.db" | |
| 24 | - database = Database(at: filePath) | |
| 25 | - | |
| 26 | - super.init() | |
| 27 | - do { | |
| 28 | - try database.create(table: CNLiveStandListTableName, of: StandListModel.self) | |
| 29 | - } catch { | |
| 30 | - print("创建失败") | |
| 31 | - } | |
| 32 | - } | |
| 20 | +// //重新init方法为私有,不让外部调用 | |
| 21 | +// private override init() { | |
| 22 | +// //数据库地址 | |
| 23 | +// let filePath = NSHomeDirectory() + "/Documents/DB"+UserInfoManager.shared.userInfo.uid+"/CNLiveStandListTableName.db" | |
| 24 | +// database = Database(at: filePath) | |
| 25 | +// | |
| 26 | +// super.init() | |
| 27 | +// do { | |
| 28 | +// try database.create(table: CNLiveStandListTableName, of: StandListModel.self) | |
| 29 | +// } catch { | |
| 30 | +// print("创建失败") | |
| 31 | +// } | |
| 32 | +// } | |
| 33 | 33 | |
| 34 | 34 | /// 新增一条数据 |
| 35 | 35 | /// - Parameter object: 数据 |
| 36 | - func insterObject(object: StandListModel){ | |
| 37 | - let array: [StandListModel] = [object] | |
| 38 | - do{ | |
| 39 | - try database.insert(array, intoTable: CNLiveStandListTableName) | |
| 40 | - }catch{ | |
| 41 | - print("增加一条数据失败") | |
| 42 | - } | |
| 43 | - } | |
| 36 | +// func insterObject(object: StandListModel){ | |
| 37 | +// let array: [StandListModel] = [object] | |
| 38 | +// do{ | |
| 39 | +// try database.insert(array, intoTable: CNLiveStandListTableName) | |
| 40 | +// }catch{ | |
| 41 | +// print("增加一条数据失败") | |
| 42 | +// } | |
| 43 | +// } | |
| 44 | 44 | |
| 45 | 45 | /// 批量增加数据 |
| 46 | 46 | /// - Parameter objects: 数据组 |
| 47 | 47 | func insertObjects(objects: [StandListModel]) { |
| 48 | - if objects.count > 0 { | |
| 49 | - do{ | |
| 50 | - try database.insert(objects, intoTable: CNLiveStandListTableName) | |
| 51 | - }catch{ | |
| 52 | - print("增加一条数据失败") | |
| 53 | - } | |
| 54 | - }else{ | |
| 55 | - print("数据为空") | |
| 48 | + | |
| 49 | + var temp_dic = NSMutableDictionary.init(contentsOfFile: userFileDir+"storage.plist") | |
| 50 | + if (temp_dic == nil) { | |
| 51 | + temp_dic = NSMutableDictionary.init() | |
| 52 | + } | |
| 53 | + for item in objects { | |
| 54 | + temp_dic?.setObject((item.toJSON() ?? Dictionary()) as Dictionary, forKey: CNLiveStandListTableName+"\(item.id)" as NSCopying) | |
| 56 | 55 | } |
| 56 | + temp_dic?.write(toFile: userFileDir+"storage.plist", atomically: true) | |
| 57 | + | |
| 58 | + | |
| 59 | +// if objects.count > 0 { | |
| 60 | +// do{ | |
| 61 | +// try database.insert(objects, intoTable: CNLiveStandListTableName) | |
| 62 | +// }catch{ | |
| 63 | +// print("增加一条数据失败") | |
| 64 | +// } | |
| 65 | +// }else{ | |
| 66 | +// print("数据为空") | |
| 67 | +// } | |
| 68 | + } | |
| 69 | + | |
| 70 | + /// 获取所有数据 | |
| 71 | + /// - Returns: 返回查找的所以数据 | |
| 72 | + func searchAllObject() -> Array<StandListModel>{ | |
| 73 | + | |
| 74 | + let temp_dic = NSMutableDictionary.init(contentsOfFile: userFileDir+"storage.plist") | |
| 75 | + if (temp_dic == nil) { | |
| 76 | + return Array() | |
| 77 | + } | |
| 78 | + let tempArray = NSMutableArray.init() | |
| 79 | + temp_dic?.allValues.forEach({ value in | |
| 80 | + let listModel = dictionaryToModel(value as! [String : Any], StandListModel.self,"") | |
| 81 | + tempArray.add(listModel) | |
| 82 | + }) | |
| 83 | + return tempArray as! Array<StandListModel> | |
| 84 | + | |
| 85 | +// do{ | |
| 86 | +// let allData: [StandListModel] = try database.getObjects(fromTable: CNLiveStandListTableName) | |
| 87 | +// return allData | |
| 88 | +// }catch{ | |
| 89 | +// print("获取失败") | |
| 90 | +// return [] | |
| 91 | +// } | |
| 57 | 92 | } |
| 58 | 93 | |
| 59 | 94 | /// 删除一条数据 |
| 60 | 95 | /// - Parameter delete: 被删除的数据 |
| 61 | 96 | func deleteObject(delete: StandListModel){ |
| 62 | 97 | |
| 63 | - do{ | |
| 64 | - try database.delete(fromTable: CNLiveStandListTableName, where: StandListModel.Properties.id == delete.id) | |
| 65 | - }catch{ | |
| 66 | - print("删除一条数据失败") | |
| 67 | - } | |
| 98 | +// do{ | |
| 99 | +// try database.delete(fromTable: CNLiveStandListTableName, where: StandListModel.Properties.id == delete.id) | |
| 100 | +// }catch{ | |
| 101 | +// print("删除一条数据失败") | |
| 102 | +// } | |
| 68 | 103 | } |
| 69 | 104 | |
| 70 | 105 | /// 删除本地所有数据 |
| 71 | 106 | func deleteAllObjects() { |
| 72 | - do { | |
| 73 | - try database.delete(fromTable: CNLiveStandListTableName) | |
| 74 | - } catch { | |
| 75 | - print("数据删除失败") | |
| 76 | - } | |
| 107 | +// do { | |
| 108 | +// try database.delete(fromTable: CNLiveStandListTableName) | |
| 109 | +// } catch { | |
| 110 | +// print("数据删除失败") | |
| 111 | +// } | |
| 77 | 112 | } |
| 78 | 113 | |
| 79 | 114 | |
| 80 | 115 | /// 更新一条数据 |
| 81 | 116 | /// - Parameter newObject: 更新的数据源 |
| 82 | 117 | func updateObject(newObject: StandListModel){ |
| 83 | - do{ | |
| 84 | - //需要更新的字段 | |
| 85 | - let updateProperties = [StandListModel.Properties.name, | |
| 86 | - StandListModel.Properties.enable, | |
| 87 | - StandListModel.Properties.createTime, | |
| 88 | - StandListModel.Properties.createTimeString, | |
| 89 | - StandListModel.Properties.timeString, | |
| 90 | - StandListModel.Properties.auth, | |
| 91 | - StandListModel.Properties.backgroundImg, | |
| 92 | - StandListModel.Properties.backgroundColor, | |
| 93 | - StandListModel.Properties.backgroundColour, | |
| 94 | - StandListModel.Properties.description, | |
| 95 | - StandListModel.Properties.cardImg, | |
| 96 | - StandListModel.Properties.downPath,] | |
| 97 | - | |
| 98 | - try database.update(table: CNLiveStandListTableName, on:updateProperties, with: newObject,where: StandListModel.Properties.id == newObject.id) | |
| 99 | - }catch{ | |
| 100 | - print("更新一条数据失败") | |
| 101 | - } | |
| 118 | +// do{ | |
| 119 | +// //需要更新的字段 | |
| 120 | +// let updateProperties = [StandListModel.Properties.name, | |
| 121 | +// StandListModel.Properties.enable, | |
| 122 | +// StandListModel.Properties.createTime, | |
| 123 | +// StandListModel.Properties.createTimeString, | |
| 124 | +// StandListModel.Properties.timeString, | |
| 125 | +// StandListModel.Properties.auth, | |
| 126 | +// StandListModel.Properties.backgroundImg, | |
| 127 | +// StandListModel.Properties.backgroundColor, | |
| 128 | +// StandListModel.Properties.backgroundColour, | |
| 129 | +// StandListModel.Properties.description, | |
| 130 | +// StandListModel.Properties.cardImg, | |
| 131 | +// StandListModel.Properties.downPath,] | |
| 132 | +// | |
| 133 | +// try database.update(table: CNLiveStandListTableName, on:updateProperties, with: newObject,where: StandListModel.Properties.id == newObject.id) | |
| 134 | +// }catch{ | |
| 135 | +// print("更新一条数据失败") | |
| 136 | +// } | |
| 102 | 137 | } |
| 103 | 138 | |
| 104 | 139 | /// 更新多条数据 |
| 105 | 140 | /// - Parameter newObjects: 新数据数组 |
| 106 | 141 | func updateObjects(newObjects: [StandListModel]) { |
| 107 | - do { | |
| 108 | - let tempArray = NSMutableArray() | |
| 109 | - for _ in newObjects { | |
| 110 | - //需要更新的字段 | |
| 111 | - let updateProperties = [StandListModel.Properties.name, | |
| 112 | - StandListModel.Properties.enable, | |
| 113 | - StandListModel.Properties.createTime, | |
| 114 | - StandListModel.Properties.createTimeString, | |
| 115 | - StandListModel.Properties.timeString, | |
| 116 | - StandListModel.Properties.auth, | |
| 117 | - StandListModel.Properties.backgroundImg, | |
| 118 | - StandListModel.Properties.backgroundColor, | |
| 119 | - StandListModel.Properties.backgroundColour, | |
| 120 | - StandListModel.Properties.description, | |
| 121 | - StandListModel.Properties.cardImg, | |
| 122 | - StandListModel.Properties.downPath,] | |
| 123 | - tempArray.add(updateProperties) | |
| 124 | - } | |
| 125 | - try database.update(table: CNLiveStandListTableName, on: tempArray as! [PropertyConvertible], with: newObjects) | |
| 126 | - } catch { | |
| 127 | - print("更新多条数据失败") | |
| 128 | - } | |
| 129 | - } | |
| 130 | - | |
| 131 | - | |
| 132 | - /// 获取所有数据 | |
| 133 | - /// - Returns: 返回查找的所以数据 | |
| 134 | - func searchAllObject() -> Array<StandListModel>{ | |
| 135 | - do{ | |
| 136 | - let allData: [StandListModel] = try database.getObjects(fromTable: CNLiveStandListTableName) | |
| 137 | - return allData | |
| 138 | - }catch{ | |
| 139 | - print("获取失败") | |
| 140 | - return [] | |
| 141 | - } | |
| 142 | +// do { | |
| 143 | +// let tempArray = NSMutableArray() | |
| 144 | +// for _ in newObjects { | |
| 145 | +// //需要更新的字段 | |
| 146 | +// let updateProperties = [StandListModel.Properties.name, | |
| 147 | +// StandListModel.Properties.enable, | |
| 148 | +// StandListModel.Properties.createTime, | |
| 149 | +// StandListModel.Properties.createTimeString, | |
| 150 | +// StandListModel.Properties.timeString, | |
| 151 | +// StandListModel.Properties.auth, | |
| 152 | +// StandListModel.Properties.backgroundImg, | |
| 153 | +// StandListModel.Properties.backgroundColor, | |
| 154 | +// StandListModel.Properties.backgroundColour, | |
| 155 | +// StandListModel.Properties.description, | |
| 156 | +// StandListModel.Properties.cardImg, | |
| 157 | +// StandListModel.Properties.downPath,] | |
| 158 | +// tempArray.add(updateProperties) | |
| 159 | +// } | |
| 160 | +// try database.update(table: CNLiveStandListTableName, on: tempArray as! [PropertyConvertible], with: newObjects) | |
| 161 | +// } catch { | |
| 162 | +// print("更新多条数据失败") | |
| 163 | +// } | |
| 142 | 164 | } |
| 143 | 165 | |
| 144 | 166 | /// 获取所有数据唯一值id |
| 145 | 167 | /// - Returns: 返回查找的所以数据 |
| 146 | - func searchAllObjectId() -> Array<String>{ | |
| 147 | - do{ | |
| 148 | - let allData: [StandListModel] = try database.getObjects(fromTable: CNLiveStandListTableName) | |
| 149 | - let tempArray = NSMutableArray.init() | |
| 150 | - for item in allData { | |
| 151 | - tempArray.add("\(item.id)") | |
| 152 | - } | |
| 153 | - return tempArray as! Array<String> | |
| 154 | - }catch{ | |
| 155 | - print("获取失败") | |
| 156 | - return [] | |
| 157 | - } | |
| 158 | - } | |
| 168 | +// func searchAllObjectId() -> Array<String>{ | |
| 169 | +// do{ | |
| 170 | +// let allData: [StandListModel] = try database.getObjects(fromTable: CNLiveStandListTableName) | |
| 171 | +// let tempArray = NSMutableArray.init() | |
| 172 | +// for item in allData { | |
| 173 | +// tempArray.add("\(item.id)") | |
| 174 | +// } | |
| 175 | +// return tempArray as! Array<String> | |
| 176 | +// }catch{ | |
| 177 | +// print("获取失败") | |
| 178 | +// return [] | |
| 179 | +// } | |
| 180 | +// } | |
| 159 | 181 | |
| 160 | 182 | /// 通过id获取特定数据 |
| 161 | 183 | /// - Parameter identityId: id |
| 162 | 184 | /// - Returns: 返回查找的数据 |
| 163 | - func searchOneObject(identityId: String) -> StandListModel{ | |
| 164 | - do { | |
| 165 | - let searchPropertie = [StandListModel.Properties.id] | |
| 166 | - let array: [StandListModel] = try database.getObjects(on: searchPropertie, fromTable: CNLiveStandListTableName, where: StandListModel.Properties.id == identityId) | |
| 167 | - return array.count > 0 ? array.first! : StandListModel.init() | |
| 168 | - } catch { | |
| 169 | - print("获取失败") | |
| 170 | - return StandListModel.init() | |
| 185 | +// func searchOneObject(identityId: String) -> StandListModel{ | |
| 186 | +// do { | |
| 187 | +// let searchPropertie = [StandListModel.Properties.id] | |
| 188 | +// let array: [StandListModel] = try database.getObjects(on: searchPropertie, fromTable: CNLiveStandListTableName, where: StandListModel.Properties.id == identityId) | |
| 189 | +// return array.count > 0 ? array.first! : StandListModel.init() | |
| 190 | +// } catch { | |
| 191 | +// print("获取失败") | |
| 192 | +// return StandListModel.init() | |
| 193 | +// } | |
| 194 | +// } | |
| 195 | + | |
| 196 | + | |
| 197 | + private lazy var userFileDir: String = { | |
| 198 | + let userFileDir = NSString() | |
| 199 | + var path: String = "" | |
| 200 | + path = "\(fileDir)/userId_\(UserInfoManager.shared.userInfo.uid)/" | |
| 201 | + let fileManager = FileManager.default | |
| 202 | + var isDir: ObjCBool = false | |
| 203 | + let exist: Bool = fileManager.fileExists(atPath: path, isDirectory: &isDir) | |
| 204 | + if !(isDir.boolValue && exist) { | |
| 205 | + do { | |
| 206 | + try fileManager.createDirectory(atPath: path, withIntermediateDirectories: true) | |
| 207 | + } catch { | |
| 208 | + debugPrint("文件目录创建失败") | |
| 209 | + return "" | |
| 210 | + } | |
| 171 | 211 | } |
| 172 | - } | |
| 212 | + return path as String | |
| 213 | + }() | |
| 214 | + | |
| 215 | + private lazy var fileDir: String = { | |
| 216 | + let path = "\(NSHomeDirectory())/Documents/metaCode/saveStannd" | |
| 217 | + let fileManager = FileManager.default | |
| 218 | + var isDir: ObjCBool = false | |
| 219 | + let exist: Bool = fileManager.fileExists(atPath: path, isDirectory: &isDir) | |
| 220 | + if !(isDir.boolValue && exist) { | |
| 221 | + do { | |
| 222 | + try fileManager.createDirectory(atPath: path, withIntermediateDirectories: true) | |
| 223 | + } catch { | |
| 224 | + debugPrint("文件目录创建失败") | |
| 225 | + return "" | |
| 226 | + } | |
| 227 | + } | |
| 228 | + return path as String | |
| 229 | + }() | |
| 173 | 230 | |
| 174 | 231 | } | ... | ... |
metaCode/Classes/Main/HomePage/ViewModel/CNHomePageViewModel.swift deleted
100644 → 0
| 1 | -// | |
| 2 | -// CNLiveHomePageViewModel.swift | |
| 3 | -// metaCode | |
| 4 | -// | |
| 5 | -// Created by daojian on 2023/7/3. | |
| 6 | -// | |
| 7 | - | |
| 8 | -import Foundation | |
| 9 | -import CNLiveRequestBastKit | |
| 10 | - | |
| 11 | -///请求响应回调 | |
| 12 | -typealias responseBlock = (_ listArray:Array<CNLiveIdentityModel>, _ responseType:CNLiveNetworkingResponseType, _ errorMsg:String) -> Void | |
| 13 | - | |
| 14 | -class CNLiveHomePageViewModel:NSObject { | |
| 15 | - | |
| 16 | - /// 获取身份列表 | |
| 17 | - class func getUserIdentityApi(resultBlock:@escaping responseBlock){ | |
| 18 | - | |
| 19 | - //先从本地获取,本地有直接返回 | |
| 20 | - let db = CNLiveIdentityDB() | |
| 21 | -// let allDbArray = db.searchAllObject() | |
| 22 | -// if(allDbArray.count > 0){ | |
| 23 | -// resultBlock(allDbArray,.success,"") | |
| 24 | -// return | |
| 25 | -// } | |
| 26 | - | |
| 27 | - //从网络获取 | |
| 28 | - CNLiveNetworking.setAllowRequestDefaultArgument(false) | |
| 29 | - CNLiveNetworking.setupShowDataResult(false) | |
| 30 | - CNLiveNetworking.requestNetwork(with: .GET, urlString: "\(APPBaseMCUrl)/identityApi/allList?sid=\(UserInfoManager.shared.userInfo.uid)&page=1&pageSize=1000", param: nil, cacheType: .networkOnly) { task , result, error in | |
| 31 | - | |
| 32 | - if((error) != nil){ | |
| 33 | - //网络请求失败 | |
| 34 | - if CNLiveNetworking.isNetworking(){ | |
| 35 | - resultBlock([],.failed,error?.localizedDescription ?? "请求失败") | |
| 36 | - }else{ | |
| 37 | - resultBlock([],.noNetwork,"无网络连接") | |
| 38 | - } | |
| 39 | - return | |
| 40 | - } | |
| 41 | - | |
| 42 | - let resultDic:NSDictionary = result as! NSDictionary | |
| 43 | - | |
| 44 | - let errorCode:String = "\(resultDic["errorCode"]!)" | |
| 45 | - if (errorCode == "0"){ | |
| 46 | - let data:NSDictionary = resultDic["data"] as! NSDictionary | |
| 47 | - let list:NSArray = data["list"] as! NSArray | |
| 48 | - | |
| 49 | - //list数据转CNLiveIdentityModel, 并把model存入本地 | |
| 50 | - | |
| 51 | - var array:Array = Array<CNLiveIdentityModel>() | |
| 52 | - for index in 0..<list.count{ | |
| 53 | - let item = dictionaryToModel(list[index] as! [String : Any], CNLiveIdentityModel.self, "") | |
| 54 | - array.append(item as! CNLiveIdentityModel) | |
| 55 | - //存入数据库 | |
| 56 | - db.insterObject(object: item as! CNLiveIdentityModel) | |
| 57 | - } | |
| 58 | - resultBlock(array,.success,"") | |
| 59 | - } | |
| 60 | - else{ | |
| 61 | - let errorMessage:String = resultDic["errorMessage"] as! String | |
| 62 | - showMessage(message: errorMessage) | |
| 63 | - resultBlock([],.failed,errorMessage) | |
| 64 | - } | |
| 65 | - | |
| 66 | - } | |
| 67 | - | |
| 68 | - } | |
| 69 | - | |
| 70 | - | |
| 71 | -} |
metaCode/Classes/Main/MinePage/Controller/CNLiveMineViewController.swift
| ... | ... | @@ -46,7 +46,7 @@ class CNLiveMineViewController : CNLiveBaseViewController, UITableViewDelegate, |
| 46 | 46 | dataArray.add(array03) |
| 47 | 47 | |
| 48 | 48 | |
| 49 | -// dataArray.add([["name":"订单列表","icon":"mine_list_icon_help_feedback"]]) | |
| 49 | + dataArray.add([["name":"订单列表","icon":"mine_list_icon_help_feedback"]]) | |
| 50 | 50 | |
| 51 | 51 | |
| 52 | 52 | return dataArray | ... | ... |
metaCode/Classes/Main/MinePage/ViewModel/CNLiveMineBaseModel.swift
| ... | ... | @@ -7,7 +7,6 @@ |
| 7 | 7 | |
| 8 | 8 | import Foundation |
| 9 | 9 | import HandyJSON |
| 10 | -import WCDBSwift | |
| 11 | 10 | |
| 12 | 11 | class UpdateInfoModel: BaseModel { |
| 13 | 12 | |
| ... | ... | @@ -134,7 +133,7 @@ class StandListBaseModel: BaseModel { |
| 134 | 133 | var pages: Int = 0 |
| 135 | 134 | } |
| 136 | 135 | |
| 137 | -final class StandListModel: BaseModel, TableCodable { | |
| 136 | +final class StandListModel: BaseModel {//, TableCodable { | |
| 138 | 137 | |
| 139 | 138 | var id: Int = 0//ID号- |
| 140 | 139 | var name: String?//名称- |
| ... | ... | @@ -184,31 +183,31 @@ final class StandListModel: BaseModel, TableCodable { |
| 184 | 183 | }) |
| 185 | 184 | } |
| 186 | 185 | |
| 187 | - enum CodingKeys: String, CodingTableKey { | |
| 188 | - typealias Root = StandListModel | |
| 189 | - static let objectRelationalMapping = TableBinding(CodingKeys.self) | |
| 190 | - { | |
| 191 | - //设置表的主键key为id,用来区分数据唯一性, 如果id为int类型,可以按实现按顺序递增 | |
| 192 | - BindColumnConstraint(id, isPrimary: true, isAutoIncrement: true) | |
| 193 | - } | |
| 194 | - case id | |
| 195 | - case name | |
| 196 | - case icon | |
| 197 | - case enable | |
| 198 | - case createTime | |
| 199 | - case createTimeString | |
| 200 | - case timeString | |
| 201 | - case auth | |
| 202 | - case backgroundImg | |
| 203 | - case backgroundColor | |
| 204 | - case backgroundColour | |
| 205 | - case description | |
| 206 | - case cardImg | |
| 207 | - case downPath | |
| 208 | - case descBackgroundImg | |
| 209 | - case upPath | |
| 210 | - case downType | |
| 211 | - } | |
| 186 | +// enum CodingKeys: String, CodingTableKey { | |
| 187 | +// typealias Root = StandListModel | |
| 188 | +// static let objectRelationalMapping = TableBinding(CodingKeys.self) | |
| 189 | +// { | |
| 190 | +// //设置表的主键key为id,用来区分数据唯一性, 如果id为int类型,可以按实现按顺序递增 | |
| 191 | +// BindColumnConstraint(id, isPrimary: true, isAutoIncrement: true) | |
| 192 | +// } | |
| 193 | +// case id | |
| 194 | +// case name | |
| 195 | +// case icon | |
| 196 | +// case enable | |
| 197 | +// case createTime | |
| 198 | +// case createTimeString | |
| 199 | +// case timeString | |
| 200 | +// case auth | |
| 201 | +// case backgroundImg | |
| 202 | +// case backgroundColor | |
| 203 | +// case backgroundColour | |
| 204 | +// case description | |
| 205 | +// case cardImg | |
| 206 | +// case downPath | |
| 207 | +// case descBackgroundImg | |
| 208 | +// case upPath | |
| 209 | +// case downType | |
| 210 | +// } | |
| 212 | 211 | } |
| 213 | 212 | |
| 214 | 213 | // !!!: /api/identityApi/getIdentity 接口标记 |
| ... | ... | @@ -267,8 +266,8 @@ class MineAuthListBaseModel: BaseModel { |
| 267 | 266 | var pages: Int = 0 |
| 268 | 267 | } |
| 269 | 268 | |
| 270 | -final class MineAuthListModel: BaseModel , TableCodable { | |
| 271 | - | |
| 269 | +final class MineAuthListModel: BaseModel {//,TableCodable { | |
| 270 | + | |
| 272 | 271 | required init() {} |
| 273 | 272 | |
| 274 | 273 | var cardImg: String? = "" |
| ... | ... | @@ -279,22 +278,22 @@ final class MineAuthListModel: BaseModel , TableCodable { |
| 279 | 278 | var identityId: Int = 0 |
| 280 | 279 | var userStatus: Int = 0 |
| 281 | 280 | |
| 282 | - enum CodingKeys: String, CodingTableKey { | |
| 283 | - | |
| 284 | - typealias Root = MineAuthListModel | |
| 285 | - static let objectRelationalMapping = TableBinding(CodingKeys.self) | |
| 286 | - { | |
| 287 | - //设置表的主键key为id,用来区分数据唯一性, 如果id为int类型,可以按实现按顺序递增 | |
| 288 | - BindColumnConstraint(identityId, isPrimary: true, isAutoIncrement: true) | |
| 289 | - } | |
| 290 | - case identityId //不修改数据库字段名,和属性名保持一直 | |
| 291 | - case name //不修改数据库字段名,和属性名保持一直 | |
| 292 | - case icon | |
| 293 | - case cardImg | |
| 294 | - case authTime | |
| 295 | - case code | |
| 296 | - case userStatus | |
| 297 | - } | |
| 281 | +// enum CodingKeys: String, CodingTableKey { | |
| 282 | +// | |
| 283 | +// typealias Root = MineAuthListModel | |
| 284 | +// static let objectRelationalMapping = TableBinding(CodingKeys.self) | |
| 285 | +// { | |
| 286 | +// //设置表的主键key为id,用来区分数据唯一性, 如果id为int类型,可以按实现按顺序递增 | |
| 287 | +// BindColumnConstraint(identityId, isPrimary: true, isAutoIncrement: true) | |
| 288 | +// } | |
| 289 | +// case identityId //不修改数据库字段名,和属性名保持一直 | |
| 290 | +// case name //不修改数据库字段名,和属性名保持一直 | |
| 291 | +// case icon | |
| 292 | +// case cardImg | |
| 293 | +// case authTime | |
| 294 | +// case code | |
| 295 | +// case userStatus | |
| 296 | +// } | |
| 298 | 297 | } |
| 299 | 298 | |
| 300 | 299 | // !!!: /Api/Index3/myOrderCount 数据返回 | ... | ... |
metaCode/Classes/Main/ShopPage/Controller/CNLiveShopOrderDetailViewController.swift
| ... | ... | @@ -109,6 +109,9 @@ class CNLiveShopOrderDetailViewController: CNLiveBaseViewController, EmptyDataSe |
| 109 | 109 | |
| 110 | 110 | func loadDataSourceAction() { |
| 111 | 111 | CNLiveShopViewModel.requestOrderDetail(orderId: _orderId, isOrderDetai: _show_type == .order, isRefund: _form_type == .afterSale) { [weak self] result, respStatue in |
| 112 | + if self == nil { | |
| 113 | + return | |
| 114 | + } | |
| 112 | 115 | if respStatue == .success { |
| 113 | 116 | if self!._show_type == .order { |
| 114 | 117 | self!.detailModel = result as? ShopOrderDetailModel |
| ... | ... | @@ -197,7 +200,8 @@ extension CNLiveShopOrderDetailViewController { |
| 197 | 200 | if detailModel.send_num > 1 || detailModel.is_send == "0" { |
| 198 | 201 | self.navigationController?.pushViewController(CNLiveShopOrderExpressListViewController.init(orderId: detailModel.id! as NSString), animated: true) |
| 199 | 202 | } else { |
| 200 | - self.navigationController?.pushViewController(CNLiveShopOrderExpressDetailViewController.init(orderId: "1000021749", expId: "0", express_num: "1234556789012345", show_type: .orderExpress, progress: .Zero), animated: true) | |
| 203 | +// self.navigationController?.pushViewController(CNLiveShopOrderExpressDetailViewController.init(orderId: "1000021749", expId: "0", express_num: "1234556789012345", show_type: .orderExpress, progress: .Zero), animated: true) | |
| 204 | + self.navigationController?.pushViewController(CNLiveShopOrderExpressDetailViewController.init(orderId: detailModel.id! as NSString, expId: "", express_num: detailModel.express_num! as NSString, show_type: .orderExpress, progress: .Zero), animated: true) | |
| 201 | 205 | } |
| 202 | 206 | } |
| 203 | 207 | ... | ... |
metaCode/Classes/Main/ShopPage/Controller/CNLiveShopOrderExpressDetailViewController.swift
| ... | ... | @@ -32,16 +32,25 @@ class CNLiveShopOrderExpressDetailViewController: CNLiveBaseViewController, UITa |
| 32 | 32 | return tableView |
| 33 | 33 | }() |
| 34 | 34 | |
| 35 | + lazy var headerView: ShopBodyOrderExpressDetailHeaderView = { | |
| 36 | + let headerView = ShopBodyOrderExpressDetailHeaderView.init(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: 0), show_type: _show_type) | |
| 37 | + if _show_type == .orderExpress || _show_type == .refundExpress { | |
| 38 | + headerView.expressModel = self.expressModel | |
| 39 | + headerView.express_num = _express_num! as String | |
| 40 | + headerView._orderId = _orderId! as String | |
| 41 | + headerView._expId = _expId! as String | |
| 42 | + } else { | |
| 43 | + headerView.TBY_progress = _progress | |
| 44 | + } | |
| 45 | + headerView.isUserInteractionEnabled = true | |
| 46 | + return headerView | |
| 47 | + }() | |
| 48 | + | |
| 35 | 49 | lazy var dataArray: NSMutableArray = { |
| 36 | 50 | let dataArray = NSMutableArray.init() |
| 37 | 51 | return dataArray |
| 38 | 52 | }() |
| 39 | 53 | |
| 40 | - lazy var temp_array: NSMutableArray = { | |
| 41 | - let temp_array = NSMutableArray.init() | |
| 42 | - return temp_array | |
| 43 | - }() | |
| 44 | - | |
| 45 | 54 | var _expId: NSString! |
| 46 | 55 | var _orderId: NSString! |
| 47 | 56 | var _refundId: NSString! |
| ... | ... | @@ -68,7 +77,7 @@ class CNLiveShopOrderExpressDetailViewController: CNLiveBaseViewController, UITa |
| 68 | 77 | navigationBarHidden = false |
| 69 | 78 | titleName = "物流详情" |
| 70 | 79 | |
| 71 | -// loadDataSourceAction() | |
| 80 | + loadDataSourceAction() | |
| 72 | 81 | |
| 73 | 82 | view.addSubview(tableView) |
| 74 | 83 | tableView.snp.makeConstraints { make in |
| ... | ... | @@ -84,6 +93,7 @@ class CNLiveShopOrderExpressDetailViewController: CNLiveBaseViewController, UITa |
| 84 | 93 | if respStatue == .success { |
| 85 | 94 | self!.expressModel = (result as! ShopOrderExpressDetailModel).express |
| 86 | 95 | self!.dataArray.addObjects(from: (result as! ShopOrderExpressDetailModel).data) |
| 96 | + self!.tableView.tableHeaderView = self!.headerView | |
| 87 | 97 | self!.tableView.reloadData() |
| 88 | 98 | }else if (respStatue == .noNetwork) { |
| 89 | 99 | self!.network_type = .noNetwork |
| ... | ... | @@ -108,7 +118,6 @@ extension CNLiveShopOrderExpressDetailViewController { |
| 108 | 118 | } |
| 109 | 119 | } |
| 110 | 120 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| 111 | - return UITableViewCell.init() | |
| 112 | 121 | guard let cell = tableView.dequeueReusableCell(withIdentifier: kShopBodyOrderExpressDetailTableViewCellIdentifier) as? ShopBodyOrderExpressDetailTableViewCell else { |
| 113 | 122 | return ShopBodyOrderExpressDetailTableViewCell() |
| 114 | 123 | } |
| ... | ... | @@ -129,24 +138,11 @@ extension CNLiveShopOrderExpressDetailViewController { |
| 129 | 138 | isLastRow = true |
| 130 | 139 | } |
| 131 | 140 | } |
| 132 | - cell.setupDataSource(dataModel: detailModel, row: indexPath.row, isLastRow: isLastRow, type: _show_type, address: expressModel.address! as NSString, express_state: expressModel.state! as NSString, temp_array: temp_array) | |
| 141 | + cell.setupDataSource(dataModel: detailModel, row: indexPath.row, isLastRow: isLastRow, type: _show_type, address: expressModel.address! as NSString, express_state: expressModel.state! as NSString) | |
| 133 | 142 | return cell |
| 134 | 143 | } |
| 135 | -// func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 136 | -// var detailModel: ShopOrderExpressDetailDateModel! | |
| 137 | -// if _show_type == .orderExpress || _show_type == .refundExpress { | |
| 138 | -// if indexPath.row == 0 { | |
| 139 | -// detailModel = ShopOrderExpressDetailDateModel() | |
| 140 | -// } else { | |
| 141 | -// detailModel = (dataArray[indexPath.row - 1] as! ShopOrderExpressDetailDateModel) | |
| 142 | -// } | |
| 143 | -// } else { | |
| 144 | -// detailModel = (dataArray[indexPath.row] as! ShopOrderExpressDetailDateModel) | |
| 145 | -// } | |
| 146 | -// return adapt_length(length: detailModel.cellH+70) | |
| 147 | -// } | |
| 148 | - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 149 | - return 0.01 | |
| 144 | + func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 145 | + return adapt_length(length: 80) | |
| 150 | 146 | } |
| 151 | 147 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| 152 | 148 | } | ... | ... |
metaCode/Classes/Main/ShopPage/Controller/CNLiveShopOrderExpressViewController.swift
| ... | ... | @@ -197,7 +197,9 @@ extension CNLiveShopOrderExpressViewController { |
| 197 | 197 | title = "快递单号" |
| 198 | 198 | if express_num.isNotBlank() { |
| 199 | 199 | content = express_num! as String |
| 200 | - selectExpressModel.no = express_num as String | |
| 200 | + if selectExpressModel != nil { | |
| 201 | + selectExpressModel.no = "\(express_num ?? "")" | |
| 202 | + } | |
| 201 | 203 | } else { |
| 202 | 204 | if selectExpressModel != nil { |
| 203 | 205 | content = (selectExpressModel.no != nil) ? selectExpressModel.no! : "" |
| ... | ... | @@ -210,7 +212,9 @@ extension CNLiveShopOrderExpressViewController { |
| 210 | 212 | cell.setup(title: title, content: content, placeHolder: placeHolder, contentIsEdit: contentIsEdit, isShowArrowImage: isShowArrowImage, isShowLine: isShowLine) |
| 211 | 213 | cell.clickBlock = {[weak self] content, row in |
| 212 | 214 | if row == (self!.hiddenShop ? 1 : 2) { |
| 213 | - self!.selectExpressModel.no = content | |
| 215 | + if self!.selectExpressModel != nil { | |
| 216 | + self!.selectExpressModel.no = content | |
| 217 | + } | |
| 214 | 218 | } |
| 215 | 219 | } |
| 216 | 220 | return cell | ... | ... |
metaCode/Classes/Main/ShopPage/Controller/CNLiveShopOrderListViewController.swift
| ... | ... | @@ -85,21 +85,21 @@ class CNLiveShopOrderListViewController: CNLiveBaseViewController, UITableViewDe |
| 85 | 85 | state = "6" |
| 86 | 86 | } |
| 87 | 87 | showLoading(message: "") |
| 88 | - CNLiveShopViewModel.requestOrderList(state: state, page: page) { [weak self] result, respStatue in | |
| 88 | + CNLiveShopViewModel.requestOrderList(state: state, keyword: "", page: page) { [weak self] result, respStatue in | |
| 89 | 89 | if respStatue == .success { |
| 90 | 90 | if self!.pageNum == 1 { |
| 91 | 91 | self!.dataArray.removeAllObjects() |
| 92 | 92 | self!.dataArray.addObjects(from: result as! [ShopOrderListModel]) |
| 93 | - if self!.dataArray.count > 0 { | |
| 93 | + if self!.dataArray.count > 0 && self!.tableView.mj_header == nil && self!.tableView.mj_footer == nil { | |
| 94 | 94 | self!.addRefreshView() |
| 95 | 95 | } |
| 96 | 96 | } |
| 97 | 97 | if self!.pageNum > 1 { |
| 98 | 98 | self!.dataArray.addObjects(from: result as! [ShopOrderListModel]) |
| 99 | 99 | } |
| 100 | - self!.tableView.reloadData() | |
| 101 | 100 | self!.tableView.mj_header?.endRefreshing() |
| 102 | 101 | self!.tableView.mj_footer?.endRefreshing() |
| 102 | + self!.tableView.reloadData() | |
| 103 | 103 | if (result as! Array<Any>).count == 0 { |
| 104 | 104 | self!.tableView.mj_footer?.endRefreshingWithNoMoreData() |
| 105 | 105 | self!.tableView.reloadData() |
| ... | ... | @@ -283,7 +283,8 @@ extension CNLiveShopOrderListViewController { |
| 283 | 283 | self.navigationController?.pushViewController(CNLiveShopOrderExpressListViewController.init(orderId: listModel.id! as NSString), animated: true) |
| 284 | 284 | // self.navigationController?.pushViewController(CNLiveShopOrderExpressListViewController.init(orderId: "1000073435"), animated: true) |
| 285 | 285 | } else { |
| 286 | - self.navigationController?.pushViewController(CNLiveShopOrderExpressDetailViewController.init(orderId: "1000021749", expId: "0", express_num: "1234556789012345", show_type: .orderExpress, progress: .Zero), animated: true) | |
| 286 | + self.navigationController?.pushViewController(CNLiveShopOrderExpressDetailViewController.init(orderId: listModel.id! as NSString, expId: "", express_num: listModel.express_num! as NSString, show_type: .orderExpress, progress: .Zero), animated: true) | |
| 287 | +// self.navigationController?.pushViewController(CNLiveShopOrderExpressDetailViewController.init(orderId: "1000021749", expId: "0", express_num: "1234556789012345", show_type: .orderExpress, progress: .Zero), animated: true) | |
| 287 | 288 | } |
| 288 | 289 | } |
| 289 | 290 | ... | ... |
metaCode/Classes/Main/ShopPage/Controller/CNLiveShopOrderSearchListViewController.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveShopOrderSearchListViewController.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by open on 2023/11/13. | |
| 6 | +// | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | +import EmptyDataSet_Swift | |
| 10 | +import MJRefresh | |
| 11 | + | |
| 12 | +class CNLiveShopOrderSearchListViewController: CNLiveBaseViewController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource, EmptyDataSetSource, EmptyDataSetDelegate { | |
| 13 | + | |
| 14 | + let kShopBodyOrderListViewCellIdentifier = "kShopBodyListViewCellIdentifier" | |
| 15 | + let kShopBodyOrderHeaderViewCellIdentifier = "kShopBodyOrderHeaderViewCellIdentifier" | |
| 16 | + let kShopBodyOrderFooterViewCellIdentifier = "kShopBodyOrderFooterViewCellIdentifier" | |
| 17 | + lazy var tableView : UITableView = { | |
| 18 | + let tableView = UITableView(frame: .zero, style: .grouped) | |
| 19 | + tableView.dataSource = self | |
| 20 | + tableView.delegate = self | |
| 21 | + tableView.emptyDataSetSource = self | |
| 22 | + tableView.emptyDataSetDelegate = self | |
| 23 | + tableView.backgroundColor = .clear | |
| 24 | + tableView.tableFooterView = UIView.init() | |
| 25 | + tableView.separatorStyle = .none | |
| 26 | + tableView.register(ShopBodyOrderListViewCell.self, forCellReuseIdentifier: kShopBodyOrderListViewCellIdentifier) | |
| 27 | + tableView.register(ShopBodyOrderHeaderViewCell.self, forHeaderFooterViewReuseIdentifier: kShopBodyOrderHeaderViewCellIdentifier) | |
| 28 | + tableView.register(ShopBodyOrderFooterViewCell.self, forHeaderFooterViewReuseIdentifier: kShopBodyOrderFooterViewCellIdentifier) | |
| 29 | + return tableView | |
| 30 | + }() | |
| 31 | + | |
| 32 | + lazy var searchTextField: UITextField = { | |
| 33 | + let searchTextField = UITextField.init(frame: CGRectMake(adapt_length(length: 30), get_system_statusBar_height() + (get_system_nav_ui_height() - adapt_length(length: 30))/2, KSreenWidth - adapt_length(length: 40), adapt_length(length: 30))) | |
| 34 | + return searchTextField | |
| 35 | + }() | |
| 36 | + | |
| 37 | + lazy var dataArray: NSMutableArray = { | |
| 38 | + let dataArray = NSMutableArray.init() | |
| 39 | + return dataArray | |
| 40 | + }() | |
| 41 | + | |
| 42 | + var pageNum: NSInteger! | |
| 43 | + var _searchText: String! | |
| 44 | + var network_type: CNLiveMineResponseType! | |
| 45 | + init(searchText: String) { | |
| 46 | + pageNum = 1 | |
| 47 | + _searchText = searchText | |
| 48 | + super.init(nibName:nil, bundle:nil) | |
| 49 | + } | |
| 50 | + | |
| 51 | + required init?(coder: NSCoder) { | |
| 52 | + fatalError("init(coder:) has not been implemented") | |
| 53 | + } | |
| 54 | + | |
| 55 | + override func viewDidLoad() { | |
| 56 | + super.viewDidLoad() | |
| 57 | + navigationBarHidden = false | |
| 58 | + | |
| 59 | + initNav() | |
| 60 | + view.addSubview(tableView) | |
| 61 | + | |
| 62 | + loadDataSourceAction(page: 1) | |
| 63 | + } | |
| 64 | + | |
| 65 | + func initNav() { | |
| 66 | + let view = UIView.init(frame: CGRectMake(0, 0, adapt_length(length: 30), adapt_length(length: 30))) | |
| 67 | + | |
| 68 | + let imageView = UIImageView.init(frame: CGRect(x: adapt_length(length: 7), y: adapt_length(length: 4), width: adapt_length(length: 22), height: adapt_length(length: 22))) | |
| 69 | + imageView.image = UIImage(named: "DS_order_search") | |
| 70 | + imageView.clipsToBounds = true | |
| 71 | + imageView.contentMode = .scaleAspectFit | |
| 72 | + view.addSubview(imageView) | |
| 73 | + | |
| 74 | + searchTextField.leftView = view | |
| 75 | + searchTextField.delegate = self | |
| 76 | + searchTextField.leftViewMode = .always | |
| 77 | + searchTextField.placeholder = "请输入关键字..." | |
| 78 | + searchTextField.backgroundColor = HexColor("#f0f0f0") | |
| 79 | + searchTextField.returnKeyType = .search | |
| 80 | + searchTextField.layer.cornerRadius = adapt_length(length: 15) | |
| 81 | + searchTextField.layer.masksToBounds = true | |
| 82 | + searchTextField.font = regular_adapt_font(pointSize: 13) | |
| 83 | + searchTextField.text = _searchText | |
| 84 | + topNavView.addSubview(searchTextField) | |
| 85 | + } | |
| 86 | + | |
| 87 | + func loadDataSourceAction(page: NSInteger) { | |
| 88 | + showLoading(message: "") | |
| 89 | + CNLiveShopViewModel.requestOrderList(state: "", keyword: searchTextField.text!, page: page) { [weak self] result, respStatue in | |
| 90 | + if respStatue == .success { | |
| 91 | + if self!.pageNum == 1 { | |
| 92 | + self!.dataArray.removeAllObjects() | |
| 93 | + self!.dataArray.addObjects(from: result as! [ShopOrderListModel]) | |
| 94 | + if self!.dataArray.count > 0 && self!.tableView.mj_header == nil && self!.tableView.mj_footer == nil { | |
| 95 | + self!.addRefreshView() | |
| 96 | + } | |
| 97 | + } | |
| 98 | + if self!.pageNum > 1 { | |
| 99 | + self!.dataArray.addObjects(from: result as! [ShopOrderListModel]) | |
| 100 | + } | |
| 101 | + self!.tableView.mj_header?.endRefreshing() | |
| 102 | + self!.tableView.mj_footer?.endRefreshing() | |
| 103 | + self!.tableView.reloadData() | |
| 104 | + if (result as! Array<Any>).count == 0 { | |
| 105 | + self!.tableView.mj_footer?.endRefreshingWithNoMoreData() | |
| 106 | + self!.tableView.reloadData() | |
| 107 | + } | |
| 108 | + }else if (respStatue == .noNetwork) { | |
| 109 | + self!.network_type = .noNetwork | |
| 110 | + self!.tableView.reloadEmptyDataSet() | |
| 111 | + } else { | |
| 112 | + self!.network_type = .failed | |
| 113 | + self!.tableView.reloadEmptyDataSet() | |
| 114 | + } | |
| 115 | + } | |
| 116 | + } | |
| 117 | + | |
| 118 | + func addRefreshView() { | |
| 119 | + tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in | |
| 120 | + self!.pageNum = 1 | |
| 121 | + self!.loadDataSourceAction(page: 1) | |
| 122 | + }) | |
| 123 | + | |
| 124 | + tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in | |
| 125 | + self!.pageNum = self!.pageNum + 1 | |
| 126 | + self!.loadDataSourceAction(page: self!.pageNum) | |
| 127 | + }) | |
| 128 | + } | |
| 129 | + | |
| 130 | + override func viewWillLayoutSubviews() { | |
| 131 | + super.viewWillLayoutSubviews() | |
| 132 | + tableView.frame = CGRect(x: 0, y: get_system_nav_height(), width: KSreenWidth, height: view.height - get_system_nav_height()) | |
| 133 | + } | |
| 134 | +} | |
| 135 | + | |
| 136 | +extension CNLiveShopOrderSearchListViewController { | |
| 137 | + | |
| 138 | + func numberOfSections(in tableView: UITableView) -> Int { | |
| 139 | + return dataArray.count | |
| 140 | + } | |
| 141 | + | |
| 142 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 143 | + let order_detail = (dataArray[section] as! ShopOrderListModel).order_detail | |
| 144 | + return order_detail.count | |
| 145 | + } | |
| 146 | + | |
| 147 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 148 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kShopBodyOrderListViewCellIdentifier) as? ShopBodyOrderListViewCell else { | |
| 149 | + return ShopBodyOrderListViewCell() | |
| 150 | + } | |
| 151 | + let order_detail = (dataArray[indexPath.section] as! ShopOrderListModel).order_detail | |
| 152 | + let addTime = (dataArray[indexPath.section] as! ShopOrderListModel).addtime! | |
| 153 | + cell.setupDataSource(goodsModel: order_detail[indexPath.row] , addTime: addTime) | |
| 154 | + return cell | |
| 155 | + } | |
| 156 | + | |
| 157 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 158 | + return adapt_length(length: 110) | |
| 159 | + } | |
| 160 | + | |
| 161 | + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { | |
| 162 | + return adapt_length(length: 40) | |
| 163 | + } | |
| 164 | + | |
| 165 | + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { | |
| 166 | + let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: kShopBodyOrderHeaderViewCellIdentifier) as! ShopBodyOrderHeaderViewCell | |
| 167 | + let listModel = (dataArray[section] as! ShopOrderListModel) | |
| 168 | + headerView.setupDataSource(listModel: listModel) | |
| 169 | + return headerView | |
| 170 | + } | |
| 171 | + | |
| 172 | + func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { | |
| 173 | + let listModel = (dataArray[section] as! ShopOrderListModel) | |
| 174 | + if listModel.isRefund == "1" { | |
| 175 | + return adapt_length(length: 60) | |
| 176 | + } else { | |
| 177 | + return adapt_length(length: 110) | |
| 178 | + } | |
| 179 | + } | |
| 180 | + | |
| 181 | + func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { | |
| 182 | + let footerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: kShopBodyOrderFooterViewCellIdentifier) as! ShopBodyOrderFooterViewCell | |
| 183 | + let listModel = (dataArray[section] as! ShopOrderListModel) | |
| 184 | + footerView.setupDataSource(listModel: listModel) | |
| 185 | + footerView.clickRightBtnCallBack = { [weak self] title, clickEvent, listModel in | |
| 186 | + self?.orderOperation(title: title, event: clickEvent, listModel: listModel) | |
| 187 | + } | |
| 188 | + return footerView | |
| 189 | + } | |
| 190 | + | |
| 191 | + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | |
| 192 | + let listModel = (dataArray[indexPath.section] as! ShopOrderListModel) | |
| 193 | + pushOrderDetail(listModel: listModel) | |
| 194 | + } | |
| 195 | +} | |
| 196 | +extension CNLiveShopOrderSearchListViewController { | |
| 197 | + | |
| 198 | + | |
| 199 | + func textFieldShouldReturn(_ textField: UITextField) -> Bool { | |
| 200 | + view.endEditing(true) | |
| 201 | + | |
| 202 | + if textField.text!.count > 30 { | |
| 203 | + textField.text = "\(textField.text?.prefix(29) ?? "")" | |
| 204 | + } | |
| 205 | + | |
| 206 | + let historyDataArr = CNLiveFileManager.shared.take(key: kShopOrderListSearchHistroyDatas) as! NSMutableArray | |
| 207 | + if historyDataArr.contains(textField.text! as String) { | |
| 208 | + historyDataArr.remove(textField.text! as String) | |
| 209 | + } | |
| 210 | + | |
| 211 | + historyDataArr.insert(textField.text! as String, at: 0) | |
| 212 | + CNLiveFileManager.shared.save(object: historyDataArr, key: kShopOrderListSearchHistroyDatas) | |
| 213 | + | |
| 214 | + loadDataSourceAction(page: 1) | |
| 215 | + | |
| 216 | + return true | |
| 217 | + } | |
| 218 | +} | |
| 219 | + | |
| 220 | +extension CNLiveShopOrderSearchListViewController { | |
| 221 | + | |
| 222 | + func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? { | |
| 223 | + if network_type == .failed || network_type == .unkonw { | |
| 224 | + return UIImage(named: "mine_list_source_unusual_failed") | |
| 225 | + } | |
| 226 | + if dataArray.count == 0 { | |
| 227 | + return UIImage(named: "mine_list_source_unusual_empty") | |
| 228 | + } | |
| 229 | + if network_type == .noNetwork { | |
| 230 | + return UIImage(named: "mine_list_source_unusual_noNet") | |
| 231 | + } | |
| 232 | + return UIImage(named: "mine_list_source_unusual_empty") | |
| 233 | + } | |
| 234 | + | |
| 235 | + func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { | |
| 236 | + var defult_string = "" | |
| 237 | + if network_type == .failed || network_type == .unkonw { | |
| 238 | + defult_string = "接口请求错误,刷新试试~" | |
| 239 | + } | |
| 240 | + if network_type == .noNetwork { | |
| 241 | + defult_string = "网络开小差了,刷新试试~" | |
| 242 | + } | |
| 243 | + if dataArray.count == 0 { | |
| 244 | + defult_string = "暂时没有数据~" | |
| 245 | + } | |
| 246 | + return NSAttributedString(string: defult_string, attributes: [.font: Font_17,.foregroundColor: HexColor("#666666")!]) | |
| 247 | + } | |
| 248 | + | |
| 249 | + func buttonTitle(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> NSAttributedString? { | |
| 250 | + if network_type == .failed || network_type == .noNetwork { | |
| 251 | + let attributes = [NSAttributedString.Key.font:Font_16_Fit, | |
| 252 | + NSAttributedString.Key.foregroundColor: HexColor("#609BFF")] | |
| 253 | + return NSAttributedString(string: "刷一刷", attributes: attributes as [NSAttributedString.Key : Any]) | |
| 254 | + } | |
| 255 | + return nil | |
| 256 | + } | |
| 257 | + | |
| 258 | + func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) { | |
| 259 | + if network_type == .failed || network_type == .noNetwork { | |
| 260 | + loadDataSourceAction(page: 1) | |
| 261 | + } | |
| 262 | + } | |
| 263 | +} | |
| 264 | + | |
| 265 | +extension CNLiveShopOrderSearchListViewController { | |
| 266 | + | |
| 267 | + /// 通过不同的按钮逻辑跳转不同界面 | |
| 268 | + /// - Parameters: | |
| 269 | + /// - clickEvent: 按钮类型 | |
| 270 | + /// - listModel: 数据源 | |
| 271 | + private func orderOperation(title: String, event: CNDSOrderListSectionFooterBtnClickEvent, listModel: ShopOrderListModel) { | |
| 272 | + switch event { | |
| 273 | + case .delivery: | |
| 274 | + if listModel.is_tui == "2" { | |
| 275 | + showMessage(message: "此为退款订单") | |
| 276 | + return | |
| 277 | + } | |
| 278 | + delivery(listModel: listModel) | |
| 279 | + break | |
| 280 | + case .notifyOrder: | |
| 281 | + if listModel.is_tui == "2" { | |
| 282 | + showMessage(message: "此为退款订单") | |
| 283 | + return | |
| 284 | + } | |
| 285 | + notifyOrder(listModel: listModel) | |
| 286 | + break | |
| 287 | + case .connection: | |
| 288 | + pushOrderDetail(listModel: listModel) | |
| 289 | + break | |
| 290 | + case .expDetail: | |
| 291 | + delivery(listModel: listModel) | |
| 292 | + break | |
| 293 | + case .checkExpress: | |
| 294 | + pushExpressVC(listModel: listModel) | |
| 295 | + break | |
| 296 | + case .express: | |
| 297 | + pushExpressVC(listModel: listModel) | |
| 298 | + break | |
| 299 | + default: | |
| 300 | + break | |
| 301 | + } | |
| 302 | + } | |
| 303 | + | |
| 304 | + /// 跳转物流相关界面 | |
| 305 | + /// - Parameter detailModel: 数据源 | |
| 306 | + private func pushExpressVC(listModel: ShopOrderListModel) { | |
| 307 | + if listModel.send_num > 1 || listModel.is_send == "0" { | |
| 308 | + self.navigationController?.pushViewController(CNLiveShopOrderExpressListViewController.init(orderId: listModel.id! as NSString), animated: true) | |
| 309 | +// self.navigationController?.pushViewController(CNLiveShopOrderExpressListViewController.init(orderId: "1000073435"), animated: true) | |
| 310 | + } else { | |
| 311 | + self.navigationController?.pushViewController(CNLiveShopOrderExpressDetailViewController.init(orderId: listModel.id! as NSString, expId: "", express_num: listModel.express_num! as NSString, show_type: .orderExpress, progress: .Zero), animated: true) | |
| 312 | +// self.navigationController?.pushViewController(CNLiveShopOrderExpressDetailViewController.init(orderId: "1000021749", expId: "0", express_num: "1234556789012345", show_type: .orderExpress, progress: .Zero), animated: true) | |
| 313 | + } | |
| 314 | + } | |
| 315 | + | |
| 316 | + /// 选取商品及拆单 | |
| 317 | + /// - Parameter listModel: 数据源 | |
| 318 | + private func delivery(listModel: ShopOrderListModel) { | |
| 319 | + var type: CNLiveShopOrderSpliteSendViewType = .splite | |
| 320 | + if listModel.is_send == "0" { | |
| 321 | + type = .select | |
| 322 | + } | |
| 323 | + self.navigationController?.pushViewController(CNLiveShopOrderSendViewController.init(orderId: listModel.id! as NSString, show_type: type), animated: true) | |
| 324 | + } | |
| 325 | + | |
| 326 | + /// 通知用户自提 | |
| 327 | + /// - Parameter listModel: 数据源 | |
| 328 | + private func notifyOrder(listModel: ShopOrderListModel) { | |
| 329 | + ConfigAlertManager.shared.presentAlert(title: "提示", message: "确认通知用户自提?", actionTitles: ["取消","确认"]) { index in | |
| 330 | + if index == 1 { | |
| 331 | + CNLiveShopViewModel.requestNotifyOrder(orderId: listModel.id!) { result, respStatue in | |
| 332 | + if respStatue == .success { | |
| 333 | + showMessage(message: "通知成功") | |
| 334 | + } | |
| 335 | + } | |
| 336 | + } | |
| 337 | + } | |
| 338 | + } | |
| 339 | + | |
| 340 | + /// 跳转到订单详情界面 | |
| 341 | + /// - Parameter listModel: 数据源 | |
| 342 | + private func pushOrderDetail(listModel: ShopOrderListModel) { | |
| 343 | + if listModel.isRefund == "1" { | |
| 344 | + let detailVC = CNLiveShopOrderDetailViewController.init(orderId: listModel.id!, show_type: .sale, form_type: .afterSale) | |
| 345 | + self.navigationController?.pushViewController(detailVC, animated: true) | |
| 346 | + } else { | |
| 347 | + if listModel.address_address!.count > 0 { | |
| 348 | + self.navigationController?.pushViewController(CNLiveShopOrderDetailViewController.init(orderId: listModel.id!, show_type: .order, form_type: .afterSale), animated: true) | |
| 349 | + } else { | |
| 350 | + showMessage(message: "目前没有地址信息,暂无法发货") | |
| 351 | + } | |
| 352 | + } | |
| 353 | + } | |
| 354 | +} | ... | ... |
metaCode/Classes/Main/ShopPage/Controller/CNLiveShopOrderSearchViewController.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveShopOrderSearchViewController.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by open on 2023/11/13. | |
| 6 | +// | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | + | |
| 10 | +let kShopOrderListSearchHistroyDatas = "kShopOrderListSearchHistroyDatas" | |
| 11 | +class CNLiveShopOrderSearchViewController: CNLiveBaseViewController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource { | |
| 12 | + | |
| 13 | + | |
| 14 | + let kShopBodyOrderSearchHistoryTableViewCellIdentifier = "kShopBodyOrderSearchHistoryTableViewCellIdentifier" | |
| 15 | + lazy var tableView: UITableView = { | |
| 16 | + let tableView = UITableView.init(frame: CGRect(x: 0, y: get_system_nav_height(), width: KSreenWidth, height: KSreenHeight - get_system_nav_height()), style: .plain) | |
| 17 | + tableView.delegate = self | |
| 18 | + tableView.dataSource = self | |
| 19 | + tableView.separatorInset = UIEdgeInsets(top: 0, left: adapt_length(length: 20), bottom: 0, right: adapt_length(length: 20)) | |
| 20 | + tableView.rowHeight = adapt_length(length: 45) | |
| 21 | + tableView.sectionHeaderHeight = adapt_length(length: 45) | |
| 22 | + tableView.backgroundColor = HexColor("#f1f2f6") | |
| 23 | + tableView.register(ShopBodyOrderSearchHistoryTableViewCell.self, forCellReuseIdentifier: kShopBodyOrderSearchHistoryTableViewCellIdentifier) | |
| 24 | + | |
| 25 | + let footerView = UIView.init(frame: CGRectMake(0, 0, KSreenWidth, adapt_length(length: 45))) | |
| 26 | + footerView.backgroundColor = .white | |
| 27 | + | |
| 28 | + let deleteBtn = UIButton.init(type: .custom) | |
| 29 | + deleteBtn.frame = footerView.bounds | |
| 30 | + if historyArr.count > 0 { | |
| 31 | + deleteBtn.setTitle("清除搜索历史", for: .normal) | |
| 32 | + deleteBtn.setTitleColor(HexColor("#FF3355"), for: .normal) | |
| 33 | + } else { | |
| 34 | + deleteBtn.setTitle("无搜索历史", for: .normal) | |
| 35 | + deleteBtn.setTitleColor(HexColor("#898989"), for: .normal) | |
| 36 | + } | |
| 37 | + deleteBtn.tag = 1 | |
| 38 | + deleteBtn.titleLabel?.font = regular_adapt_font(pointSize: 14) | |
| 39 | + deleteBtn.addTarget(self, action: #selector(deleteAllBtnClick), for: .touchUpInside) | |
| 40 | + footerView.addSubview(deleteBtn) | |
| 41 | + | |
| 42 | + tableView.tableFooterView = footerView | |
| 43 | + | |
| 44 | + return tableView | |
| 45 | + }() | |
| 46 | + | |
| 47 | + | |
| 48 | + lazy var searchTextField: UITextField = { | |
| 49 | + let searchTextField = UITextField.init(frame: CGRectMake(adapt_length(length: 15), get_system_statusBar_height() + (get_system_nav_ui_height() - adapt_length(length: 30))/2, KSreenWidth - adapt_length(length: 95), adapt_length(length: 30))) | |
| 50 | + return searchTextField | |
| 51 | + }() | |
| 52 | + | |
| 53 | + lazy var cancelButton: UIButton = { | |
| 54 | + let cancelButton = UIButton.init(type: .custom) | |
| 55 | + cancelButton.frame = CGRect(x: KSreenWidth - 70, y: (get_system_nav_height() - (get_system_statusBar_height() + 25))/2 + get_system_statusBar_height(), width: 60, height: 25) | |
| 56 | + cancelButton.setTitle("取消", for: .normal) | |
| 57 | + cancelButton.titleLabel?.font = semibold_adapt_font(pointSize: 15) | |
| 58 | + cancelButton.setTitleColor(HexColor("#ff3355"), for: .normal) | |
| 59 | + cancelButton.backgroundColor = .clear | |
| 60 | + cancelButton.layer.masksToBounds = true | |
| 61 | + cancelButton.layer.cornerRadius = 5 | |
| 62 | + cancelButton.addTarget(self, action: #selector(cancelBtnClick), for: .touchUpInside) | |
| 63 | + return cancelButton | |
| 64 | + }() | |
| 65 | + | |
| 66 | + lazy var historyArr: NSMutableArray = { | |
| 67 | + let historyArr = NSMutableArray.init() | |
| 68 | + return historyArr | |
| 69 | + }() | |
| 70 | + | |
| 71 | + override func viewWillAppear(_ animated: Bool) { | |
| 72 | + super.viewWillAppear(animated) | |
| 73 | + take() | |
| 74 | + searchTextField.text = "" | |
| 75 | + } | |
| 76 | + | |
| 77 | + override func viewWillLayoutSubviews() { | |
| 78 | + super.viewWillLayoutSubviews() | |
| 79 | + tableView.frame = CGRect(x: 0, y: get_system_nav_height(), width: KSreenWidth, height: view.height - get_system_nav_height()) | |
| 80 | + } | |
| 81 | + | |
| 82 | + override func viewDidLoad() { | |
| 83 | + super.viewDidLoad() | |
| 84 | + navigationBarHidden = false | |
| 85 | + | |
| 86 | + initNav() | |
| 87 | + view.addSubview(tableView) | |
| 88 | + } | |
| 89 | + | |
| 90 | + func initNav() { | |
| 91 | + let btn = self.leftNavBtns.first! as UIButton | |
| 92 | + btn.isHidden = true | |
| 93 | + | |
| 94 | + let view = UIView.init(frame: CGRectMake(0, 0, adapt_length(length: 30), adapt_length(length: 30))) | |
| 95 | + | |
| 96 | + let imageView = UIImageView.init(frame: CGRect(x: adapt_length(length: 7), y: adapt_length(length: 4), width: adapt_length(length: 22), height: adapt_length(length: 22))) | |
| 97 | + imageView.image = UIImage(named: "DS_order_search") | |
| 98 | + imageView.clipsToBounds = true | |
| 99 | + imageView.contentMode = .scaleAspectFit | |
| 100 | + view.addSubview(imageView) | |
| 101 | + | |
| 102 | + searchTextField.leftView = view | |
| 103 | + searchTextField.delegate = self | |
| 104 | + searchTextField.leftViewMode = .always | |
| 105 | + searchTextField.placeholder = "请输入关键字..." | |
| 106 | + searchTextField.backgroundColor = HexColor("#f0f0f0") | |
| 107 | + searchTextField.returnKeyType = .search | |
| 108 | + searchTextField.layer.cornerRadius = adapt_length(length: 15) | |
| 109 | + searchTextField.layer.masksToBounds = true | |
| 110 | + searchTextField.font = regular_adapt_font(pointSize: 13) | |
| 111 | + topNavView.addSubview(searchTextField) | |
| 112 | + | |
| 113 | + topNavView.addSubview(cancelButton) | |
| 114 | + } | |
| 115 | + | |
| 116 | + @objc func cancelBtnClick() { | |
| 117 | + self.navigationController?.popViewController(animated: true) | |
| 118 | + } | |
| 119 | + | |
| 120 | + @objc func deleteAllBtnClick(deleteBtn: UIButton) { | |
| 121 | + if historyArr.count > 0 { | |
| 122 | + deleteAll() | |
| 123 | + deleteBtn.setTitle("无搜索历史", for: .normal) | |
| 124 | + deleteBtn.setTitleColor(HexColor("#898989"), for: .normal) | |
| 125 | + } | |
| 126 | + } | |
| 127 | + | |
| 128 | + ///!!!: | |
| 129 | + ///增删改查 | |
| 130 | + func saveRecord(title: String) { | |
| 131 | + if !title.isNotBlank() { | |
| 132 | + return | |
| 133 | + } | |
| 134 | + if historyArr.contains(title) { | |
| 135 | + historyArr.remove(title) | |
| 136 | + } | |
| 137 | + historyArr.insert(title, at: 0) | |
| 138 | + tableView.reloadData() | |
| 139 | + | |
| 140 | + CNLiveFileManager.shared.save(object: historyArr, key: kShopOrderListSearchHistroyDatas) | |
| 141 | + } | |
| 142 | + | |
| 143 | + func take() { | |
| 144 | + let takeArr = CNLiveFileManager.shared.take(key: kShopOrderListSearchHistroyDatas) | |
| 145 | + if (takeArr as AnyObject).count > 0 { | |
| 146 | + historyArr = NSMutableArray.init(array: takeArr as! [Any]) | |
| 147 | + tableView.reloadData() | |
| 148 | + } | |
| 149 | + | |
| 150 | + | |
| 151 | + let deleteBtn = tableView.tableFooterView?.viewWithTag(1) as! UIButton | |
| 152 | + if historyArr.count > 0 { | |
| 153 | + deleteBtn.setTitle("清除搜索历史", for: .normal) | |
| 154 | + deleteBtn.setTitleColor(HexColor("#ff3355"), for: .normal) | |
| 155 | + } else { | |
| 156 | + deleteBtn.setTitle("无搜索历史", for: .normal) | |
| 157 | + deleteBtn.setTitleColor(HexColor("#898989"), for: .normal) | |
| 158 | + } | |
| 159 | + } | |
| 160 | + | |
| 161 | + func deleteAll() { | |
| 162 | + | |
| 163 | + historyArr.removeAllObjects() | |
| 164 | + CNLiveFileManager.shared.delete(key: kShopOrderListSearchHistroyDatas) | |
| 165 | + | |
| 166 | + tableView.reloadData() | |
| 167 | + } | |
| 168 | + | |
| 169 | + func delete(index: NSInteger) { | |
| 170 | + | |
| 171 | + historyArr.removeObject(at: index) | |
| 172 | + CNLiveFileManager.shared.save(object: historyArr, key: kShopOrderListSearchHistroyDatas) | |
| 173 | + | |
| 174 | + tableView.reloadData() | |
| 175 | + } | |
| 176 | +} | |
| 177 | + | |
| 178 | +extension CNLiveShopOrderSearchViewController { | |
| 179 | + | |
| 180 | + | |
| 181 | + func textFieldShouldReturn(_ textField: UITextField) -> Bool { | |
| 182 | + view.endEditing(true) | |
| 183 | + | |
| 184 | + saveRecord(title: textField.text ?? "") | |
| 185 | + | |
| 186 | + let delectBtn = (tableView.tableFooterView?.viewWithTag(1))! as! UIButton | |
| 187 | + delectBtn.setTitle("清除搜索历史", for: .normal) | |
| 188 | + delectBtn.setTitleColor(HexColor("#ff3355"), for: .normal) | |
| 189 | + | |
| 190 | + self.navigationController?.pushViewController(CNLiveShopOrderSearchListViewController.init(searchText: textField.text!), animated: true) | |
| 191 | + | |
| 192 | + return true | |
| 193 | + } | |
| 194 | +} | |
| 195 | + | |
| 196 | +extension CNLiveShopOrderSearchViewController { | |
| 197 | + | |
| 198 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 199 | + return historyArr.count | |
| 200 | + } | |
| 201 | + | |
| 202 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 203 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kShopBodyOrderSearchHistoryTableViewCellIdentifier) as? ShopBodyOrderSearchHistoryTableViewCell else { | |
| 204 | + return ShopBodyOrderSearchHistoryTableViewCell() | |
| 205 | + } | |
| 206 | + | |
| 207 | + cell.titleLabel.text = historyArr[indexPath.row] as? String | |
| 208 | + cell.deleteBtn.tag = indexPath.row | |
| 209 | + cell.clickBlock = {[weak self] button in | |
| 210 | + self!.delete(index: button.tag) | |
| 211 | + | |
| 212 | + if self!.historyArr.count == 0 { | |
| 213 | + let delectBtn = tableView.tableFooterView?.viewWithTag(1) as! UIButton | |
| 214 | + delectBtn.setTitle("无搜索历史", for: .normal) | |
| 215 | + delectBtn.setTitleColor(HexColor("#898989"), for: .normal) | |
| 216 | + } | |
| 217 | + } | |
| 218 | + return cell | |
| 219 | + } | |
| 220 | + | |
| 221 | + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { | |
| 222 | + let headerView = UIView(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: adapt_length(length: 45))) | |
| 223 | + headerView.backgroundColor = .white | |
| 224 | + | |
| 225 | + let titleLabel = UILabel.init(frame: CGRect(x: adapt_length(length: 20), y: 0, width: KSreenWidth - adapt_length(length: 65), height: adapt_length(length: 45))) | |
| 226 | + titleLabel.textColor = HexColor("#898989") | |
| 227 | + titleLabel.font = regular_adapt_font(pointSize: 14) | |
| 228 | + titleLabel.text = "历史搜索" | |
| 229 | + headerView.addSubview(titleLabel) | |
| 230 | + | |
| 231 | + let lineLabel = UILabel.init(frame: CGRect(x: adapt_length(length: 20), y: adapt_length(length: 44), width: KSreenWidth, height: adapt_length(length: 1))) | |
| 232 | + lineLabel.backgroundColor = HexColor("#e4e4e4") | |
| 233 | + headerView.addSubview(lineLabel) | |
| 234 | + return headerView | |
| 235 | + } | |
| 236 | + | |
| 237 | + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | |
| 238 | + | |
| 239 | + self.navigationController?.pushViewController(CNLiveShopOrderSearchListViewController.init(searchText: historyArr[indexPath.row] as! String), animated: true) | |
| 240 | + | |
| 241 | + saveRecord(title: historyArr[indexPath.row] as! String) | |
| 242 | + } | |
| 243 | + | |
| 244 | + func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { | |
| 245 | + view.endEditing(true) | |
| 246 | + } | |
| 247 | +} | ... | ... |
metaCode/Classes/Main/ShopPage/Controller/CNLiveShopOrderViewController.swift
| ... | ... | @@ -52,6 +52,17 @@ class CNLiveShopOrderViewController: CNLiveBaseViewController { |
| 52 | 52 | return categoryView |
| 53 | 53 | }() |
| 54 | 54 | |
| 55 | + lazy var searchButton: UIButton = { | |
| 56 | + let searchButton = UIButton.init(type: .custom) | |
| 57 | + searchButton.frame = CGRect(x: KSreenWidth - adapt_length(length: 40), y: (get_system_nav_height() - (get_system_statusBar_height() + adapt_length(length: 30)))/2 + get_system_statusBar_height(), width: adapt_length(length: 30), height: adapt_length(length: 30)) | |
| 58 | + searchButton.setImage(UIImage(named: "DS_order_search"), for: .normal) | |
| 59 | + searchButton.backgroundColor = .clear | |
| 60 | + searchButton.layer.masksToBounds = true | |
| 61 | + searchButton.layer.cornerRadius = 5 | |
| 62 | + searchButton.addTarget(self, action: #selector(searchBtnClick), for: .touchUpInside) | |
| 63 | + return searchButton | |
| 64 | + }() | |
| 65 | + | |
| 55 | 66 | lazy var listContainerView: JXSegmentedListContainerView! = { |
| 56 | 67 | return JXSegmentedListContainerView(dataSource: self) |
| 57 | 68 | }() |
| ... | ... | @@ -67,6 +78,8 @@ class CNLiveShopOrderViewController: CNLiveBaseViewController { |
| 67 | 78 | categoryView.listContainer = listContainerView |
| 68 | 79 | view.addSubview(listContainerView) |
| 69 | 80 | |
| 81 | + topNavView.addSubview(searchButton) | |
| 82 | + | |
| 70 | 83 | } |
| 71 | 84 | |
| 72 | 85 | override func viewDidLayoutSubviews() { |
| ... | ... | @@ -75,6 +88,10 @@ class CNLiveShopOrderViewController: CNLiveBaseViewController { |
| 75 | 88 | categoryView.frame = CGRect(x: 0, y: KNavigationHeight, width: view.bounds.size.width, height: CGFloat(kCNLiveShopOrderListSectionTitleHeight)) |
| 76 | 89 | listContainerView.frame = CGRect(x: 0, y: KNavigationHeight+CGFloat(kCNLiveShopOrderListSectionTitleHeight), width: view.bounds.size.width, height: view.bounds.size.height - CGFloat(kCNLiveShopOrderListSectionTitleHeight) - KNavigationHeight) |
| 77 | 90 | } |
| 91 | + | |
| 92 | + @objc func searchBtnClick() { | |
| 93 | + self.navigationController?.pushViewController(CNLiveShopOrderSearchViewController.init(), animated: true) | |
| 94 | + } | |
| 78 | 95 | } |
| 79 | 96 | |
| 80 | 97 | extension CNLiveShopOrderViewController: JXSegmentedViewDelegate { | ... | ... |
metaCode/Classes/Main/ShopPage/View/CNLiveShopBodyCustomView.swift
| ... | ... | @@ -11,6 +11,7 @@ import Kingfisher |
| 11 | 11 | |
| 12 | 12 | typealias clickAgreeCallBack = (_ refundView: ShopBodyOrderRefundView,_ desc: String) -> Void |
| 13 | 13 | typealias clickButtonCallBack = (_ isSelected: Bool) -> Void |
| 14 | +typealias clickSearchCallBack = (_ button: UIButton) -> Void | |
| 14 | 15 | typealias clickInputCallBack = (_ content: String, _ row: NSInteger) -> Void |
| 15 | 16 | class ShopBodyOrderRefundView: UIView, UITextViewDelegate { |
| 16 | 17 | |
| ... | ... | @@ -685,3 +686,52 @@ class ShopBodyOrderExpressFirmTableViewCell: UITableViewCell { |
| 685 | 686 | fatalError("init(coder:) has not been implemented") |
| 686 | 687 | } |
| 687 | 688 | } |
| 689 | + | |
| 690 | +class ShopBodyOrderSearchHistoryTableViewCell: UITableViewCell { | |
| 691 | + | |
| 692 | + lazy var titleLabel: UILabel = { | |
| 693 | + let titleLabel = UILabel.init() | |
| 694 | + titleLabel.textColor = HexColor("#6a6a6a") | |
| 695 | + titleLabel.font = regular_adapt_font(pointSize: 14) | |
| 696 | + return titleLabel | |
| 697 | + }() | |
| 698 | + | |
| 699 | + lazy var deleteBtn: UIButton = { | |
| 700 | + let deleteBtn = UIButton.init(type: .custom) | |
| 701 | + deleteBtn.setImage(UIImage(named: "mine_header_icon_close"), for: .normal) | |
| 702 | + deleteBtn.addTarget(self, action: #selector(buttonClick), for: .touchUpInside) | |
| 703 | + return deleteBtn | |
| 704 | + }() | |
| 705 | + | |
| 706 | + var clickBlock: clickSearchCallBack! | |
| 707 | + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { | |
| 708 | + super.init(style: style, reuseIdentifier: reuseIdentifier) | |
| 709 | + contentView.backgroundColor = .clear | |
| 710 | + selectionStyle = .none | |
| 711 | + | |
| 712 | + addSubview(deleteBtn) | |
| 713 | + deleteBtn.snp.makeConstraints { make in | |
| 714 | + make.centerY.equalToSuperview() | |
| 715 | + make.size.equalTo(adapt_length(length: 30)) | |
| 716 | + make.right.equalToSuperview().offset(-adapt_length(length: 15)) | |
| 717 | + } | |
| 718 | + | |
| 719 | + addSubview(titleLabel) | |
| 720 | + titleLabel.snp.makeConstraints { make in | |
| 721 | + make.centerY.equalToSuperview() | |
| 722 | + make.left.equalToSuperview().offset(adapt_length(length: 15)) | |
| 723 | + make.right.equalTo(deleteBtn.snp.left).offset(-adapt_length(length: 10)) | |
| 724 | + } | |
| 725 | + } | |
| 726 | + | |
| 727 | + | |
| 728 | + @objc func buttonClick(button: UIButton) { | |
| 729 | + if (clickBlock != nil) { | |
| 730 | + clickBlock(button) | |
| 731 | + } | |
| 732 | + } | |
| 733 | + | |
| 734 | + required init?(coder: NSCoder) { | |
| 735 | + fatalError("init(coder:) has not been implemented") | |
| 736 | + } | |
| 737 | +} | ... | ... |
metaCode/Classes/Main/ShopPage/View/CNLiveShopBodyExpressView.swift
| ... | ... | @@ -7,6 +7,7 @@ |
| 7 | 7 | |
| 8 | 8 | import Foundation |
| 9 | 9 | import EmptyDataSet_Swift |
| 10 | +import Kingfisher | |
| 10 | 11 | |
| 11 | 12 | class ShopBodyOrderExpressListTableViewCell: UITableViewCell, UICollectionViewDataSource { |
| 12 | 13 | |
| ... | ... | @@ -145,7 +146,7 @@ class ShopBodyOrderExpressListTableViewCell: UITableViewCell, UICollectionViewDa |
| 145 | 146 | func setupDataSource(listModel: ShopOrderExpressListModel) { |
| 146 | 147 | _listModel = listModel |
| 147 | 148 | |
| 148 | - logoImageView.kf.setImage(with: URL(string: listModel.simg!)) | |
| 149 | + logoImageView.kf.setImage(with: URL(string: listModel.simg!), placeholder: UIImage.imageWithColor(color: HexColor("#f9f9f9")!, size: CGSize(width: adapt_length(length: 39.68), height: adapt_length(length: 39.68)))) | |
| 149 | 150 | expressName.text = listModel.express |
| 150 | 151 | expressName.sizeToFit() |
| 151 | 152 | expressNo.text = "快递编号:\(listModel.express_num ?? "0")" |
| ... | ... | @@ -168,7 +169,7 @@ class ShopBodyOrderExpressListTableViewCell: UITableViewCell, UICollectionViewDa |
| 168 | 169 | } |
| 169 | 170 | |
| 170 | 171 | @objc func pushExpressDetail() { |
| 171 | - currentViewController()?.navigationController?.pushViewController(CNLiveShopOrderExpressDetailViewController.init(orderId: _listModel.id! as NSString, expId: _listModel.express_num! as NSString, express_num: _listModel.express_num! as NSString, show_type: .orderExpress, progress: .Zero), animated: true) | |
| 172 | + currentViewController()?.navigationController?.pushViewController(CNLiveShopOrderExpressDetailViewController.init(orderId: _listModel.order_id! as NSString, expId: _listModel.id! as NSString, express_num: _listModel.express_num! as NSString, show_type: .orderExpress, progress: .Zero), animated: true) | |
| 172 | 173 | } |
| 173 | 174 | |
| 174 | 175 | @objc func actionClick(sender: UIButton) { |
| ... | ... | @@ -239,22 +240,6 @@ class ShopBodyOrderExpressListCollectionViewCell: UICollectionViewCell { |
| 239 | 240 | } |
| 240 | 241 | } |
| 241 | 242 | |
| 242 | -class ShopBodyOrderExpressDetailHeaderView: UIView { | |
| 243 | - | |
| 244 | - var _showType: CNLiveShopOrderExpressDetailShowType! | |
| 245 | - init(frame: CGRect, showType: CNLiveShopOrderExpressDetailShowType) { | |
| 246 | - super.init(frame: frame) | |
| 247 | - _showType = showType | |
| 248 | - } | |
| 249 | - | |
| 250 | - | |
| 251 | - | |
| 252 | - required init?(coder: NSCoder) { | |
| 253 | - fatalError("init(coder:) has not been implemented") | |
| 254 | - } | |
| 255 | - | |
| 256 | -} | |
| 257 | - | |
| 258 | 243 | |
| 259 | 244 | class ShopBodyOrderExpressDetailTableViewCell: UITableViewCell, UITextViewDelegate { |
| 260 | 245 | |
| ... | ... | @@ -295,19 +280,16 @@ class ShopBodyOrderExpressDetailTableViewCell: UITableViewCell, UITextViewDelega |
| 295 | 280 | super.init(style: style, reuseIdentifier: reuseIdentifier) |
| 296 | 281 | contentView.backgroundColor = .white |
| 297 | 282 | selectionStyle = .none |
| 298 | - _have_layout = false | |
| 299 | 283 | |
| 300 | 284 | addSubview(lineLabel) |
| 301 | 285 | addSubview(pointImageView) |
| 302 | 286 | addSubview(titleTextView) |
| 303 | 287 | addSubview(timeLabel) |
| 304 | 288 | addSubview(bottomLine) |
| 305 | - | |
| 306 | -// initLayout() | |
| 307 | 289 | } |
| 308 | 290 | |
| 309 | 291 | func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { |
| 310 | - if URL.absoluteString == "tel://" { | |
| 292 | + if URL.absoluteString.contains("tel://") { | |
| 311 | 293 | let phone = URL.absoluteString.components(separatedBy: "tel://").last |
| 312 | 294 | ConfigAlertManager.shared.presentAlert(title: phone!, message: "", actionTitles: ["取消","呼叫"]) { index in |
| 313 | 295 | if index == 1 { |
| ... | ... | @@ -322,14 +304,13 @@ class ShopBodyOrderExpressDetailTableViewCell: UITableViewCell, UITextViewDelega |
| 322 | 304 | return false |
| 323 | 305 | } |
| 324 | 306 | |
| 325 | - var _have_layout: Bool! | |
| 326 | 307 | var _dataModel: ShopOrderExpressDetailDateModel! |
| 327 | 308 | var _row: NSInteger! |
| 328 | 309 | var _isLastRow: Bool! |
| 329 | 310 | var _type: CNLiveShopOrderExpressDetailShowType! |
| 330 | 311 | var _address: NSString! |
| 331 | 312 | var _express_state: NSString! |
| 332 | - func setupDataSource(dataModel: ShopOrderExpressDetailDateModel, row: NSInteger, isLastRow: Bool, type: CNLiveShopOrderExpressDetailShowType, address: NSString, express_state: NSString, temp_array: NSMutableArray) { | |
| 313 | + func setupDataSource(dataModel: ShopOrderExpressDetailDateModel, row: NSInteger, isLastRow: Bool, type: CNLiveShopOrderExpressDetailShowType, address: NSString, express_state: NSString) { | |
| 333 | 314 | _dataModel = dataModel |
| 334 | 315 | _row = row |
| 335 | 316 | _isLastRow = isLastRow |
| ... | ... | @@ -350,7 +331,7 @@ class ShopBodyOrderExpressDetailTableViewCell: UITableViewCell, UITextViewDelega |
| 350 | 331 | pointImageView.image = nil |
| 351 | 332 | pointImageView.backgroundColor = HexColor("#d2d2d2") |
| 352 | 333 | pointImageView.size = CGSizeMake(adapt_length(length: 5), adapt_length(length: 5)) |
| 353 | - pointImageView.layer.cornerRadius = pointImageView.height/2 | |
| 334 | + pointImageView.layer.cornerRadius = adapt_length(length: 2.5) | |
| 354 | 335 | pointImageView.layer.masksToBounds = true |
| 355 | 336 | } else if (_row == 1) { |
| 356 | 337 | let state = _express_state == "3" ? "已签收" : "运输中" |
| ... | ... | @@ -363,8 +344,8 @@ class ShopBodyOrderExpressDetailTableViewCell: UITableViewCell, UITextViewDelega |
| 363 | 344 | pointImageView.image = UIImage(named: "DS_express_current") |
| 364 | 345 | pointImageView.backgroundColor = .clear |
| 365 | 346 | pointImageView.size = CGSizeMake(adapt_length(length: 15), adapt_length(length: 15)) |
| 366 | - pointImageView.layer.cornerRadius = 0 | |
| 367 | - pointImageView.layer.masksToBounds = false | |
| 347 | + pointImageView.layer.cornerRadius = adapt_length(length: 7.5) | |
| 348 | + pointImageView.layer.masksToBounds = true | |
| 368 | 349 | } else { |
| 369 | 350 | let title = NSMutableAttributedString.init(string: dataModel.AcceptStation!, attributes: [.font:medium_adapt_font(pointSize: 12),.foregroundColor:HexColor("#b4b4b4")!,.paragraphStyle:para.copy()]) |
| 370 | 351 | titleTextView.attributedText = setHyperlinksAttrStr(attrStr: title) |
| ... | ... | @@ -373,7 +354,7 @@ class ShopBodyOrderExpressDetailTableViewCell: UITableViewCell, UITextViewDelega |
| 373 | 354 | pointImageView.image = nil |
| 374 | 355 | pointImageView.backgroundColor = backgroundColor |
| 375 | 356 | pointImageView.size = CGSize(width: adapt_length(length: 5), height: adapt_length(length: 5)) |
| 376 | - pointImageView.layer.cornerRadius = pointImageView.height/2 | |
| 357 | + pointImageView.layer.cornerRadius = adapt_length(length: 2.5) | |
| 377 | 358 | pointImageView.layer.masksToBounds = true |
| 378 | 359 | pointImageView.layer.borderColor = HexColor("#d2d2d2")?.cgColor |
| 379 | 360 | pointImageView.layer.borderWidth = adapt_length(length: 1) |
| ... | ... | @@ -386,7 +367,7 @@ class ShopBodyOrderExpressDetailTableViewCell: UITableViewCell, UITextViewDelega |
| 386 | 367 | pointImageView.image = UIImage(named: "DS_express_current") |
| 387 | 368 | pointImageView.backgroundColor = .clear |
| 388 | 369 | pointImageView.size = CGSizeMake(adapt_length(length: 15), adapt_length(length: 15)) |
| 389 | - pointImageView.layer.cornerRadius = 0 | |
| 370 | + pointImageView.layer.cornerRadius = adapt_length(length: 7.5) | |
| 390 | 371 | pointImageView.layer.masksToBounds = false |
| 391 | 372 | } else { |
| 392 | 373 | titleTextView.textColor = HexColor("#999999") |
| ... | ... | @@ -394,7 +375,7 @@ class ShopBodyOrderExpressDetailTableViewCell: UITableViewCell, UITextViewDelega |
| 394 | 375 | pointImageView.image = UIImage(named: "DS_express_current") |
| 395 | 376 | pointImageView.backgroundColor = .clear |
| 396 | 377 | pointImageView.size = CGSizeMake(adapt_length(length: 15), adapt_length(length: 15)) |
| 397 | - pointImageView.layer.cornerRadius = pointImageView.height/2 | |
| 378 | + pointImageView.layer.cornerRadius = adapt_length(length: 7.5) | |
| 398 | 379 | pointImageView.layer.masksToBounds = true |
| 399 | 380 | pointImageView.layer.borderColor = HexColor("#d2d2d2")?.cgColor |
| 400 | 381 | pointImageView.layer.borderWidth = adapt_length(length: 1) |
| ... | ... | @@ -402,26 +383,12 @@ class ShopBodyOrderExpressDetailTableViewCell: UITableViewCell, UITextViewDelega |
| 402 | 383 | titleTextView.text = dataModel.AcceptStation |
| 403 | 384 | timeLabel.text = dataModel.AcceptTime |
| 404 | 385 | } |
| 405 | -// titleTextView.sizeToFit() | |
| 386 | + titleTextView.snp.removeConstraints() | |
| 387 | + pointImageView.snp.removeConstraints() | |
| 388 | + lineLabel.snp.removeConstraints() | |
| 389 | + titleTextView.sizeToFit() | |
| 406 | 390 | setupLayout() |
| 407 | - } | |
| 408 | - | |
| 409 | - func initLayout() { | |
| 410 | - lineLabel.snp.makeConstraints { make in | |
| 411 | - make.centerX.equalTo(pointImageView) | |
| 412 | - make.top.bottom.equalToSuperview() | |
| 413 | - make.width.equalTo(adapt_length(length: 1)) | |
| 414 | - } | |
| 415 | - pointImageView.snp.makeConstraints { make in | |
| 416 | - make.top.equalToSuperview().offset(adapt_length(length: 16)) | |
| 417 | - make.left.equalTo(adapt_length(length: 20)) | |
| 418 | - make.size.equalTo(adapt_length(length: 5)) | |
| 419 | - } | |
| 420 | - titleTextView.snp.makeConstraints { make in | |
| 421 | - make.top.equalToSuperview().offset(adapt_length(length: 15)) | |
| 422 | - make.left.equalToSuperview().offset(adapt_length(length: 48)) | |
| 423 | - make.right.equalToSuperview().offset(-adapt_length(length: 20)) | |
| 424 | - } | |
| 391 | + | |
| 425 | 392 | } |
| 426 | 393 | |
| 427 | 394 | func setupLayout() { |
| ... | ... | @@ -464,26 +431,26 @@ class ShopBodyOrderExpressDetailTableViewCell: UITableViewCell, UITextViewDelega |
| 464 | 431 | make.top.equalToSuperview().offset(adapt_length(length: 15)) |
| 465 | 432 | make.left.equalToSuperview().offset(adapt_length(length: 48)) |
| 466 | 433 | make.right.equalToSuperview().offset(-adapt_length(length: 20)) |
| 467 | - make.height.equalTo(_dataModel.cellH) | |
| 468 | - } | |
| 469 | -// let top = timeLabel.text!.isNotBlank() ? adapt_length(length: 15) : 0 | |
| 470 | -// timeLabel.snp.makeConstraints { make in | |
| 471 | -// make.top.equalTo(titleTextView.snp.bottom).offset(adapt_length(length: top)) | |
| 472 | -// make.left.equalTo(titleTextView.snp.left) | |
| 473 | -// make.right.equalToSuperview().offset(-adapt_length(length: 20)) | |
| 474 | -// make.bottom.equalToSuperview().offset(-adapt_length(length: 15)) | |
| 475 | -// } | |
| 476 | -// bottomLine.snp.makeConstraints { make in | |
| 477 | -// make.left.equalTo(titleTextView.snp.left) | |
| 478 | -// make.right.equalToSuperview().offset(-adapt_length(length: 20)) | |
| 479 | -// make.bottom.equalToSuperview() | |
| 480 | -// make.height.equalTo(adapt_length(length: 1)) | |
| 481 | -// } | |
| 434 | + make.height.equalTo(titleTextView.size) | |
| 435 | + } | |
| 436 | + let top = timeLabel.text!.isNotBlank() ? adapt_length(length: 15) : 0 | |
| 437 | + timeLabel.snp.makeConstraints { make in | |
| 438 | + make.top.equalTo(titleTextView.snp.bottom).offset(adapt_length(length: top)) | |
| 439 | + make.left.equalTo(titleTextView.snp.left) | |
| 440 | + make.right.equalToSuperview().offset(-adapt_length(length: 20)) | |
| 441 | + make.bottom.equalToSuperview().offset(-adapt_length(length: 15)) | |
| 442 | + } | |
| 443 | + bottomLine.snp.makeConstraints { make in | |
| 444 | + make.left.equalTo(titleTextView.snp.left) | |
| 445 | + make.right.equalToSuperview().offset(-adapt_length(length: 20)) | |
| 446 | + make.bottom.equalToSuperview() | |
| 447 | + make.height.equalTo(adapt_length(length: 1)) | |
| 448 | + } | |
| 482 | 449 | } |
| 483 | 450 | |
| 484 | 451 | func setHyperlinksAttrStr(attrStr: NSMutableAttributedString) -> NSAttributedString { |
| 485 | 452 | do { |
| 486 | - let dataDetector = try NSDataDetector(types: NSTextCheckingTypes(NSTextCheckingResult.CheckingType.link.rawValue) | NSTextCheckingTypes(NSTextCheckingResult.CheckingType.phoneNumber.rawValue)) | |
| 453 | + let dataDetector = try NSDataDetector(types: NSTextCheckingTypes(NSTextCheckingResult.CheckingType.phoneNumber.rawValue) | NSTextCheckingTypes(NSTextCheckingResult.CheckingType.link.rawValue)) | |
| 487 | 454 | let res = dataDetector.matches(in: attrStr.string, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, attrStr.string.count)) |
| 488 | 455 | for checkingRes in res { |
| 489 | 456 | if (checkingRes.phoneNumber != nil) { |
| ... | ... | @@ -503,3 +470,181 @@ class ShopBodyOrderExpressDetailTableViewCell: UITableViewCell, UITextViewDelega |
| 503 | 470 | fatalError("init(coder:) has not been implemented") |
| 504 | 471 | } |
| 505 | 472 | } |
| 473 | + | |
| 474 | +class ShopBodyOrderExpressDetailHeaderView: UIView { | |
| 475 | + | |
| 476 | + lazy var iconImageView: UIImageView = { | |
| 477 | + let iconImageView = UIImageView.init(frame: CGRectMake(0, 0, adapt_length(length: 40), adapt_length(length: 40))) | |
| 478 | + iconImageView.contentMode = .scaleAspectFill | |
| 479 | + return iconImageView | |
| 480 | + }() | |
| 481 | + | |
| 482 | + lazy var titleLabel: UILabel = { | |
| 483 | + let titleLabel = UILabel.init() | |
| 484 | + titleLabel.textColor = HexColor("#333333") | |
| 485 | + titleLabel.font = medium_adapt_font(pointSize: 14) | |
| 486 | + return titleLabel | |
| 487 | + }() | |
| 488 | + | |
| 489 | + lazy var descLabel: UILabel = { | |
| 490 | + let descLabel = UILabel.init() | |
| 491 | + descLabel.textColor = HexColor("#b4b4b4") | |
| 492 | + descLabel.font = regular_adapt_font(pointSize: 12) | |
| 493 | + descLabel.isHidden = !(_show_type == .orderExpress || _show_type == .refundExpress) | |
| 494 | + return descLabel | |
| 495 | + }() | |
| 496 | + | |
| 497 | + lazy var editBtn: UIButton = { | |
| 498 | + let editBtn = UIButton.init(type: .custom) | |
| 499 | + editBtn.size = CGSizeMake(adapt_length(length: 47), adapt_length(length: 30)) | |
| 500 | + editBtn.setTitle("修改", for: .normal) | |
| 501 | + editBtn.setTitleColor(HexColor("#28c1c6"), for: .normal) | |
| 502 | + editBtn.titleLabel?.font = medium_adapt_font(pointSize: 14) | |
| 503 | + editBtn.layer.cornerRadius = adapt_length(length: 4) | |
| 504 | + editBtn.layer.masksToBounds = true | |
| 505 | + editBtn.layer.borderColor = HexColor("#28c1c6")?.cgColor | |
| 506 | + editBtn.layer.borderWidth = adapt_length(length: 1) | |
| 507 | + editBtn.isHidden = !(_show_type == .orderExpress || _show_type == .refundExpress) | |
| 508 | + editBtn.addTarget(self, action: #selector(editBtnClick), for: .touchUpInside) | |
| 509 | + return editBtn | |
| 510 | + }() | |
| 511 | + | |
| 512 | + lazy var enCopyBtn: UIButton = { | |
| 513 | + let enCopyBtn = UIButton.init(type: .custom) | |
| 514 | + enCopyBtn.size = CGSizeMake(adapt_length(length: 77), adapt_length(length: 30)) | |
| 515 | + enCopyBtn.setTitle("复制单号", for: .normal) | |
| 516 | + enCopyBtn.setTitleColor(HexColor("#28c1c6"), for: .normal) | |
| 517 | + enCopyBtn.titleLabel?.font = medium_adapt_font(pointSize: 14) | |
| 518 | + enCopyBtn.layer.cornerRadius = adapt_length(length: 4) | |
| 519 | + enCopyBtn.layer.masksToBounds = true | |
| 520 | + enCopyBtn.layer.borderColor = HexColor("#28c1c6")?.cgColor | |
| 521 | + enCopyBtn.layer.borderWidth = adapt_length(length: 1) | |
| 522 | + enCopyBtn.isHidden = !(_show_type == .orderExpress || _show_type == .refundExpress) | |
| 523 | + enCopyBtn.addTarget(self, action: #selector(enCopyBtnClick), for: .touchUpInside) | |
| 524 | + return enCopyBtn | |
| 525 | + }() | |
| 526 | + | |
| 527 | + lazy var lineLabel: UILabel = { | |
| 528 | + let lineLabel = UILabel.init() | |
| 529 | + lineLabel.backgroundColor = HexColor("#f6f6f6") | |
| 530 | + return lineLabel | |
| 531 | + }() | |
| 532 | + // 自取进度 (自取有用) | |
| 533 | + var _TBY_progress: CNLiveShopOrderExpressDetailYBYProgress! | |
| 534 | + var TBY_progress: CNLiveShopOrderExpressDetailYBYProgress? { | |
| 535 | + set { | |
| 536 | + _TBY_progress = newValue | |
| 537 | + if _TBY_progress == .Zero { | |
| 538 | + titleLabel.text = "备货完成" | |
| 539 | + } else { | |
| 540 | + titleLabel.text = "自取完毕" | |
| 541 | + } | |
| 542 | + } | |
| 543 | + get { | |
| 544 | + _TBY_progress | |
| 545 | + } | |
| 546 | + } | |
| 547 | + // 快递公司信息 (快递有用) | |
| 548 | + var _expressModel: ShopOrderExpressModel! | |
| 549 | + var expressModel: ShopOrderExpressModel? { | |
| 550 | + set { | |
| 551 | + _expressModel = newValue | |
| 552 | + iconImageView.kf.setImage(with: URL(string: _expressModel.simg!), placeholder: UIImage.imageWithColor(color: HexColor("#f9f9f9")!, size: CGSize(width: adapt_length(length: 40), height: adapt_length(length: 40)))) | |
| 553 | + titleLabel.text = _expressModel.com | |
| 554 | + } | |
| 555 | + get { | |
| 556 | + _expressModel | |
| 557 | + } | |
| 558 | + } | |
| 559 | + // 快递编号 (快递有用) | |
| 560 | + var _express_num: String! | |
| 561 | + var express_num: String { | |
| 562 | + set { | |
| 563 | + _express_num = newValue | |
| 564 | + descLabel.text = "快递编号:\(_express_num ?? "")" | |
| 565 | + } | |
| 566 | + get { | |
| 567 | + _express_num | |
| 568 | + } | |
| 569 | + } | |
| 570 | + var _orderId: String! // 快递订单号 (快递有用) | |
| 571 | + var _expId: String! // 发货单id (多物流快递有用) | |
| 572 | + | |
| 573 | + var _show_type: CNLiveShopOrderExpressDetailShowType! | |
| 574 | + init(frame: CGRect,show_type: CNLiveShopOrderExpressDetailShowType) { | |
| 575 | + _show_type = show_type | |
| 576 | + super.init(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: (_show_type == .orderExpress || _show_type == .refundExpress) ? adapt_length(length: 80) : adapt_length(length: 58))) | |
| 577 | + backgroundColor = UIColor.white | |
| 578 | + | |
| 579 | + addSubview(iconImageView) | |
| 580 | + iconImageView.snp.makeConstraints { make in | |
| 581 | + make.left.equalToSuperview().offset(adapt_length(length: 20)) | |
| 582 | + make.top.equalToSuperview().offset(adapt_length(length: 15)) | |
| 583 | + make.size.equalTo(adapt_length(length: 40)) | |
| 584 | + } | |
| 585 | + addSubview(enCopyBtn) | |
| 586 | + enCopyBtn.snp.makeConstraints { make in | |
| 587 | + make.right.equalToSuperview().offset(-adapt_length(length: 20)) | |
| 588 | + make.top.equalToSuperview().offset(adapt_length(length: 6)) | |
| 589 | + make.size.equalTo(enCopyBtn.size) | |
| 590 | + } | |
| 591 | + addSubview(editBtn) | |
| 592 | + editBtn.snp.makeConstraints { make in | |
| 593 | + make.right.equalTo(enCopyBtn.snp.left).offset(-adapt_length(length: 10)) | |
| 594 | + make.centerY.equalTo(enCopyBtn) | |
| 595 | + make.size.equalTo(editBtn.size) | |
| 596 | + } | |
| 597 | + addSubview(titleLabel) | |
| 598 | + titleLabel.snp.makeConstraints { make in | |
| 599 | + make.left.equalTo(iconImageView.snp.right).offset(adapt_length(length: 16)) | |
| 600 | + if _show_type == .orderExpress || _show_type == .refundExpress { | |
| 601 | + make.right.equalTo(enCopyBtn.snp.left).offset(-adapt_length(length: 16)) | |
| 602 | + make.top.equalToSuperview().offset(adapt_length(length: 16)) | |
| 603 | + make.height.equalTo(adapt_length(length: 17)) | |
| 604 | + } else { | |
| 605 | + make.centerY.equalTo(iconImageView) | |
| 606 | + make.right.equalToSuperview().offset(-adapt_length(length: 16)) | |
| 607 | + } | |
| 608 | + } | |
| 609 | + addSubview(descLabel) | |
| 610 | + descLabel.snp.makeConstraints { make in | |
| 611 | + make.left.equalTo(iconImageView.snp.right).offset(adapt_length(length: 16)) | |
| 612 | + if _show_type == .orderExpress || _show_type == .refundExpress { | |
| 613 | + make.right.equalTo(enCopyBtn.snp.left).offset(-adapt_length(length: 16)) | |
| 614 | + } else { | |
| 615 | + make.right.equalToSuperview().offset(-adapt_length(length: 16)) | |
| 616 | + } | |
| 617 | + make.top.equalTo(titleLabel.snp.bottom).offset(adapt_length(length: 10)) | |
| 618 | + make.height.equalTo(adapt_length(length: 17)) | |
| 619 | + } | |
| 620 | + addSubview(lineLabel) | |
| 621 | + lineLabel.snp.makeConstraints { make in | |
| 622 | + make.left.right.bottom.equalToSuperview() | |
| 623 | + make.height.equalTo(adapt_length(length: 10)) | |
| 624 | + } | |
| 625 | + } | |
| 626 | + | |
| 627 | + @objc func editBtnClick(sender: UIButton) { | |
| 628 | + if _show_type == .orderExpress || _show_type == .refundExpress { | |
| 629 | + let vc = CNLiveShopOrderExpressViewController.init(orderId: _orderId! as NSString, isExp: (_expId != nil), goods_arr: []) | |
| 630 | + vc.expressModel = _expressModel | |
| 631 | + vc.express_num = _express_num | |
| 632 | + vc.expId = _expId | |
| 633 | + vc.hiddenShop = true | |
| 634 | + currentViewController()?.navigationController?.pushViewController(vc, animated: true) | |
| 635 | + } | |
| 636 | + } | |
| 637 | + | |
| 638 | + @objc func enCopyBtnClick(sender: UIButton) { | |
| 639 | + if !_express_num.isNotBlank() { | |
| 640 | + return | |
| 641 | + } | |
| 642 | + let pasteboard = UIPasteboard.general | |
| 643 | + pasteboard.string = _express_num | |
| 644 | + showMessage(message: "复制成功") | |
| 645 | + } | |
| 646 | + | |
| 647 | + required init?(coder: NSCoder) { | |
| 648 | + fatalError("init(coder:) has not been implemented") | |
| 649 | + } | |
| 650 | +} | ... | ... |
metaCode/Classes/Main/ShopPage/ViewModel/CNLiveShopViewModel.swift
| ... | ... | @@ -15,7 +15,7 @@ class CNLiveShopViewModel: NSObject { |
| 15 | 15 | /// - Parameters: |
| 16 | 16 | /// - state: 0全部 1待发货 2配送中 3代付款 4订单退款 |
| 17 | 17 | /// - resultShopBlock: 返回 |
| 18 | - static func requestOrderList(state: String, page: NSInteger, resultBlock: @escaping resultShopBlock) { | |
| 18 | + static func requestOrderList(state: String, keyword: String, page: NSInteger, resultBlock: @escaping resultShopBlock) { | |
| 19 | 19 | if state == "6" { |
| 20 | 20 | let param = NSMutableDictionary() |
| 21 | 21 | param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "uid") |
| ... | ... | @@ -65,7 +65,7 @@ class CNLiveShopViewModel: NSObject { |
| 65 | 65 | param.setValue("\(page)", forKey: "page") |
| 66 | 66 | param.setValue("", forKey: "delivery") |
| 67 | 67 | param.setValue(state, forKey: "state") |
| 68 | - param.setValue("", forKey: "keyword") | |
| 68 | + param.setValue(keyword, forKey: "keyword") | |
| 69 | 69 | let custom_param = NSMutableDictionary() |
| 70 | 70 | custom_param.setValue(APPId_wjj, forKey: "appId") |
| 71 | 71 | custom_param.setValue(APPKey_wjj, forKey: "appKey") | ... | ... |