Commit 6b5d345936f24bdbc61a8db41038ec8b6c172ff4

Authored by liushiyu
1 parent af1882da

添加更改存储方式,订单搜索功能

... ... @@ -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 = &quot;CNLiveAuthListTable&quot;
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")
... ...