Commit 4243ac84334a1795543c1e511ad63adf9aacca07
1 parent
ce22b596
新增工作记录页面逻辑
Showing
11 changed files
with
421 additions
and
74 deletions
metaCode/Classes/Common/Util/CNLiveCommonQiniuTool.swift
| ... | ... | @@ -52,6 +52,28 @@ class UploadManager: NSObject { |
| 52 | 52 | return key |
| 53 | 53 | } |
| 54 | 54 | |
| 55 | + /// 数字简历上传图片 | |
| 56 | + /// - Parameters: | |
| 57 | + /// - imageData: 图片数据 | |
| 58 | + /// - progressBlock: 进度回调 | |
| 59 | + /// - successBlock: 成功回调 | |
| 60 | + static func uploadViateImage(imageData: NSData, progressBlock:@escaping ProgressBlcok, successBlock: @escaping SuccessBlock) -> String { | |
| 61 | + let key = UploadManager.createViateImageFileName() | |
| 62 | + UploadManager.uploadData(madiaData: imageData, key: key, progress: progressBlock, success: successBlock) | |
| 63 | + return key | |
| 64 | + } | |
| 65 | + | |
| 66 | + /// 数字简历上传视频 | |
| 67 | + /// - Parameters: | |
| 68 | + /// - imageData: 视频数据 | |
| 69 | + /// - progressBlock: 进度回调 | |
| 70 | + /// - successBlock: 成功回调 | |
| 71 | + static func uploadViateVideo(videoData: NSData, progressBlock:@escaping ProgressBlcok, successBlock: @escaping SuccessBlock) -> String { | |
| 72 | + let key = UploadManager.createViateVideoFileName() | |
| 73 | + UploadManager.uploadData(madiaData: videoData, key: key, progress: progressBlock, success: successBlock) | |
| 74 | + return key | |
| 75 | + } | |
| 76 | + | |
| 55 | 77 | // MARK: - 取消上传 |
| 56 | 78 | func cancelUploadKey(key:String){ |
| 57 | 79 | for (_,obj) in self.uploadModels.enumerated() { |
| ... | ... | @@ -95,14 +117,14 @@ class UploadManager: NSObject { |
| 95 | 117 | param.setValue("2", forKey: "storageType") |
| 96 | 118 | param.setValue(kBucketName_QN, forKey: "bucket") |
| 97 | 119 | let custom_param = NSMutableDictionary() |
| 98 | - custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | |
| 99 | - custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey, forKey: "appKey") | |
| 120 | + custom_param.setValue("802_li40qhp922", forKey: "appId")//CNLiveMCEnvironmentManager.shared.appId | |
| 121 | + custom_param.setValue("ae3a7ad3e4b9beb7cfe2078db648ebb89aa249ca2e82ac", forKey: "appKey")//CNLiveMCEnvironmentManager.shared.appKey | |
| 100 | 122 | CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) |
| 101 | 123 | CNLiveNetworking.setupShowResult(true) |
| 102 | 124 | CNLiveNetworking.setAllowRequestDefaultArgument(true) |
| 103 | 125 | CNLiveNetworking.setupShowDataResult(false) |
| 104 | - CNLiveNetworking.setupSignRequestKey(CNLiveMCEnvironmentManager.shared.appKey)//APPKey_wjj APPKey | |
| 105 | - | |
| 126 | + CNLiveNetworking.setupSignRequestKey("ae3a7ad3e4b9beb7cfe2078db648ebb89aa249ca2e82ac")//CNLiveMCEnvironmentManager.shared.appKey)//APPKey_wjj APPKey | |
| 127 | + | |
| 106 | 128 | CNLiveNetworking.requestNetwork(with: .POST, urlString: "\(CNLiveMCEnvironmentManager.shared.img_token_url)/vod_epg/getUploadAuthForApp", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in |
| 107 | 129 | hiddenLoading() |
| 108 | 130 | |
| ... | ... | @@ -166,6 +188,21 @@ class UploadManager: NSObject { |
| 166 | 188 | let imageName = "802/mateCode/video/\(NSDate().string(withFormat: "yyyy/MM/dd") )/\(arc4random()).mp4" |
| 167 | 189 | return imageName |
| 168 | 190 | } |
| 191 | + | |
| 192 | + ///数字简历使用的bucket,图片bucket是"vitae_photo_" , 视频是"vitae_video_" | |
| 193 | + /// 设置图片名称 | |
| 194 | + /// - Returns: 图片名 | |
| 195 | + static private func createViateImageFileName() -> String { | |
| 196 | + let imageName = "802/mateCode/img/vitae_photo_0/\(NSDate().string(withFormat: "yyyy/MM/dd") )/\(arc4random()).jpg" | |
| 197 | + return imageName | |
| 198 | + } | |
| 199 | + | |
| 200 | + /// 设置视频名称 | |
| 201 | + /// - Returns: 图片名 | |
| 202 | + static private func createViateVideoFileName() -> String { | |
| 203 | + let imageName = "802/mateCode/video/vitae_video_0/\(NSDate().string(withFormat: "yyyy/MM/dd") )/\(arc4random()).mp4" | |
| 204 | + return imageName | |
| 205 | + } | |
| 169 | 206 | } |
| 170 | 207 | |
| 171 | 208 | class QiNiuUploadModel: BaseModel { | ... | ... |
metaCode/Classes/Main/HomePage/Controller/DigitalAuth/CNLiveDigitalResumeInfoController.swift
| ... | ... | @@ -10,12 +10,10 @@ import SnapKit |
| 10 | 10 | import CoreLocation |
| 11 | 11 | |
| 12 | 12 | |
| 13 | -class CNLiveDigitalResumeInfoController:CNLiveBaseViewController, UITextFieldDelegate,CLLocationManagerDelegate{ | |
| 13 | +class CNLiveDigitalResumeInfoController:CNLiveBaseViewController, UITextFieldDelegate{ | |
| 14 | 14 | |
| 15 | 15 | var selectAreaVC:CNLiveDigitalResumeInfoSelectAddressController? |
| 16 | 16 | |
| 17 | - let locationManager = CLLocationManager() | |
| 18 | - | |
| 19 | 17 | lazy var topWhiteView :UIView = { |
| 20 | 18 | let bottomNavView = UIView() |
| 21 | 19 | bottomNavView.backgroundColor = .white | ... | ... |
metaCode/Classes/Main/HomePage/Controller/DigitalAuth/工作相关页面/CNLiveVitaeAddWorkController.swift
| ... | ... | @@ -10,6 +10,11 @@ import SnapKit |
| 10 | 10 | |
| 11 | 11 | class CNLiveVitaeAddWorkController:CNLiveBaseViewController,UITableViewDataSource, UITableViewDelegate{ |
| 12 | 12 | |
| 13 | + var hangHeight:CGFloat = (KSreenWidth-90)/3.0+10 | |
| 14 | + var secCell:CNLiveVitaeAddWorkSecCell? | |
| 15 | + var seleArr:Array<String>? | |
| 16 | + var seleVideoUrl:String = "" | |
| 17 | + | |
| 13 | 18 | let kCNLiveVitaeAddWorkFirCellIdentifier = "kCNLiveVitaeAddWorkFirCellIdentifier" |
| 14 | 19 | let kCNLiveVitaeAddWorkSecCellIdentifier = "kCNLiveVitaeAddWorkSecCellIdentifier" |
| 15 | 20 | let kCNLiveVitaeAddWorkThreeCellIdentifier = "kCNLiveVitaeAddWorkThreeCellIdentifier" |
| ... | ... | @@ -117,6 +122,22 @@ class CNLiveVitaeAddWorkController:CNLiveBaseViewController,UITableViewDataSourc |
| 117 | 122 | cell.uploadImageSuceessBlock = { imageUrl in |
| 118 | 123 | |
| 119 | 124 | } |
| 125 | + cell.selectUploadImageView?.changeUploadDataCallBack = { imageUrls , videoUrl in | |
| 126 | + self.seleVideoUrl = videoUrl | |
| 127 | + self.seleArr = imageUrls | |
| 128 | + } | |
| 129 | + | |
| 130 | + cell.updateAddWorkSecCellHeightBlock = {cell, hangHeight in | |
| 131 | + self.hangHeight = hangHeight | |
| 132 | + self.secCell = cell | |
| 133 | + let arr = cell.selectUploadImageView?.getCurrentSelectImageUrls() | |
| 134 | + let videoUrl = cell.selectUploadImageView?.getCurrentSelectVideoUrl() | |
| 135 | + self.seleVideoUrl = videoUrl ?? "" | |
| 136 | + self.seleArr = arr | |
| 137 | + self.tableView.reloadData() | |
| 138 | + print("11111video\(self.seleVideoUrl)") | |
| 139 | + print("11111photo\(self.seleArr)") | |
| 140 | + } | |
| 120 | 141 | return cell |
| 121 | 142 | }else if indexPath.row == 2{ |
| 122 | 143 | //ThreeCell |
| ... | ... | @@ -139,7 +160,11 @@ class CNLiveVitaeAddWorkController:CNLiveBaseViewController,UITableViewDataSourc |
| 139 | 160 | if indexPath.row == 0{ |
| 140 | 161 | return 276+15 |
| 141 | 162 | }else if indexPath.row == 1{ |
| 142 | - return 368+15 | |
| 163 | + if self.secCell == nil{ | |
| 164 | + return self.hangHeight+268+15 | |
| 165 | + }else{ | |
| 166 | + return self.hangHeight | |
| 167 | + } | |
| 143 | 168 | }else if indexPath.row == 2{ |
| 144 | 169 | return 123+15 |
| 145 | 170 | }else{ |
| ... | ... | @@ -149,25 +174,70 @@ class CNLiveVitaeAddWorkController:CNLiveBaseViewController,UITableViewDataSourc |
| 149 | 174 | |
| 150 | 175 | //确认提交证书 |
| 151 | 176 | @objc func addWorkBtnAction(){ |
| 152 | -// let cell = self.tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as! CNLiveVitaeCertificateAddInfoCell | |
| 153 | -// //判断非空 | |
| 154 | -// if self.seleImage == nil{ | |
| 155 | -// showMessage(message: "请上传图片") | |
| 156 | -// return | |
| 157 | -// } | |
| 158 | -// if cell.cerNameTF.text?.count == 0{ | |
| 159 | -// showMessage(message: "请填写证书名称") | |
| 160 | -// return | |
| 161 | -// } | |
| 162 | -// if cell.cerNumberTF.text?.count == 0{ | |
| 163 | -// showMessage(message: "请填写资格证编号") | |
| 164 | -// return | |
| 165 | -// } | |
| 166 | -// if cell.cerJiGouTF.text?.count == 0{ | |
| 167 | -// showMessage(message: "请填写发证机构") | |
| 168 | -// return | |
| 169 | -// } | |
| 170 | -// let vsid = UserInfoManager.shared.userInfo.currentUser?.vsid ?? "" | |
| 177 | + let firCell = self.tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as? CNLiveVitaeAddWorkFirCell | |
| 178 | + let secCell = self.tableView.cellForRow(at: IndexPath(row: 1, section: 0)) as? CNLiveVitaeAddWorkSecCell | |
| 179 | + let threeCell = self.tableView.cellForRow(at: IndexPath(row: 2, section: 0)) as? CNLiveVitaeAddWorkThreeCell | |
| 180 | + //判断非空 | |
| 181 | + if firCell?.weizhiRightTitleLabel.text?.count == 0 || firCell?.weizhiRightTitleLabel.text == "请选择"{ | |
| 182 | + showMessage(message: "请选择职业") | |
| 183 | + return | |
| 184 | + } | |
| 185 | + if firCell?.phoneTextFiled.text?.count == 0 || firCell?.phoneTextFiled.text == "请填写"{ | |
| 186 | + showMessage(message: "请填写岗位名称") | |
| 187 | + return | |
| 188 | + } | |
| 189 | + if firCell?.canjiaRightTitleLabel.text?.count == 0 || firCell?.canjiaRightTitleLabel.text == "请选择"{ | |
| 190 | + showMessage(message: "请选择开始时间") | |
| 191 | + return | |
| 192 | + } | |
| 193 | + if firCell?.endTimeRightTitleLabel.text?.count == 0 || firCell?.endTimeRightTitleLabel.text == "请选择"{ | |
| 194 | + showMessage(message: "请选择结束时间") | |
| 195 | + return | |
| 196 | + } | |
| 197 | + if secCell?.huoJiangtextView.text?.count == 0 || secCell?.huoJiangtextView.text == "获奖描述"{ | |
| 198 | + showMessage(message: "请填写经历描述") | |
| 199 | + return | |
| 200 | + } | |
| 201 | + | |
| 202 | + var newString = "" | |
| 203 | + if self.seleArr?.count ?? 0 > 0{ | |
| 204 | + if self.seleVideoUrl.count > 0{ | |
| 205 | + self.seleArr!.append(self.seleVideoUrl) | |
| 206 | + } | |
| 207 | + newString = self.seleArr!.joined(separator: ",") | |
| 208 | + }else{ | |
| 209 | + if self.seleArr == nil || self.seleArr?.count ?? 0 == 0{ | |
| 210 | + if self.seleVideoUrl.count == 0{ | |
| 211 | + // | |
| 212 | + showMessage(message: "请上传凭证") | |
| 213 | + return | |
| 214 | + }else{ | |
| 215 | + if self.seleVideoUrl.count > 0{ | |
| 216 | + newString = self.seleVideoUrl | |
| 217 | + } | |
| 218 | + } | |
| 219 | + }else{ | |
| 220 | + | |
| 221 | + } | |
| 222 | + } | |
| 223 | + let danWei = threeCell?.phoneTextFiled.text ?? "" | |
| 224 | + let workDiDian = threeCell?.weizhiRightTitleLabel.text ?? "" | |
| 225 | + let vsid = UserInfoManager.shared.userInfo.currentUser?.vsid ?? "" | |
| 226 | + if let userDic = UserDefaults.standard.dictionary(forKey: UserInfoManager.shared.userInfo.uid){ | |
| 227 | + let jianli_vitaeId = userDic["jianli_vitaeId"] as? String | |
| 228 | + let vsid = userDic["vsid"] as? String | |
| 229 | + //提交工作记录 | |
| 230 | + CNLiveVitaeViewModel.saveWork(city: workDiDian, companyName: danWei, imgs: newString, jobDuties: secCell?.huoJiangtextView.text ?? "", startWorkingDate: firCell?.canjiaRightTitleLabel.text ?? "", endWorkingDate: firCell?.endTimeRightTitleLabel.text ?? "", position: firCell?.phoneTextFiled.text ?? "", profession: firCell?.weizhiRightTitleLabel.text ?? "", vsid: vsid ?? "", vitaeId: jianli_vitaeId ?? "") { result, status in | |
| 231 | + if status == .success{ | |
| 232 | + self.navigationController?.viewControllers.forEach({ item in | |
| 233 | + if (item.isKind(of: CNLiveDigitalResumeController.self)) { | |
| 234 | + self.navigationController?.popToViewController(item, animated: true) | |
| 235 | + } | |
| 236 | + }) | |
| 237 | + } | |
| 238 | + } | |
| 239 | + | |
| 240 | + } | |
| 171 | 241 | // //提交证书 |
| 172 | 242 | // CNLiveVitaeViewModel.saveCertificate(img: self.seleImageUrl, lv: cell.cerLevelTF.text ?? "", number: cell.cerNumberTF.text ?? "", organization: cell.cerJiGouTF.text ?? "", time: cell.cerTimeTF.text ?? "", title: cell.cerNameTF.text ?? "", uploadTime: "", validity: cell.cerYouXiaoTF.text ?? "", vsid: vsid){result, respStatue in |
| 173 | 243 | // if respStatue == .success{ |
| ... | ... | @@ -179,5 +249,6 @@ class CNLiveVitaeAddWorkController:CNLiveBaseViewController,UITableViewDataSourc |
| 179 | 249 | // } |
| 180 | 250 | // |
| 181 | 251 | // } |
| 252 | + | |
| 182 | 253 | } |
| 183 | 254 | } | ... | ... |
metaCode/Classes/Main/HomePage/View/DigitalAuthViews/DigitalResume/CNLiveDigitalResumeCell.swift
| ... | ... | @@ -241,7 +241,7 @@ class CNLiveDigitalResumeCell: UITableViewCell { |
| 241 | 241 | lazy var chakanTitleLabel: UILabel = { |
| 242 | 242 | let titleLabel = UILabel() |
| 243 | 243 | titleLabel.textColor = HexColor("#999999") |
| 244 | - titleLabel.textAlignment = .right | |
| 244 | + titleLabel.textAlignment = .center | |
| 245 | 245 | titleLabel.text = "查看完整资料 >" |
| 246 | 246 | titleLabel.font = Font_14 |
| 247 | 247 | titleLabel.isUserInteractionEnabled = true |
| ... | ... | @@ -462,7 +462,7 @@ class CNLiveDigitalResumeCell: UITableViewCell { |
| 462 | 462 | self.chakanTitleLabel.snp.makeConstraints { make in |
| 463 | 463 | make.top.equalTo(self.bottomLineView.snp.bottom).offset(15) |
| 464 | 464 | make.centerX.equalToSuperview() |
| 465 | - make.width.equalTo(100) | |
| 465 | + make.width.equalTo(200) | |
| 466 | 466 | } |
| 467 | 467 | self.whiteBgView.addSubview(self.shezhiView) |
| 468 | 468 | self.shezhiView.snp.makeConstraints { make in | ... | ... |
metaCode/Classes/Main/HomePage/View/DigitalAuthViews/Vitae/Certificate/CNLiveVitaeCertificateAddPhotoCell.swift
| ... | ... | @@ -190,7 +190,7 @@ extension CNLiveVitaeCertificateAddPhotoCell { |
| 190 | 190 | didFinishSelection result: PickerResult) { |
| 191 | 191 | result.getImage { [weak self] (image, photoAsset, index) in |
| 192 | 192 | if let image = image { |
| 193 | - let uploadKey = UploadManager.uploadImage(imageData: image.jpegData(compressionQuality: 1.0)! as NSData, progressBlock: {key, progress in | |
| 193 | + let uploadKey = UploadManager.uploadViateImage(imageData: image.jpegData(compressionQuality: 1.0)! as NSData, progressBlock: {key, progress in | |
| 194 | 194 | print("获取进度==>\(progress)") |
| 195 | 195 | }, successBlock: { [weak self] key,url in |
| 196 | 196 | self?.selectImageBlock?(image,key,url) | ... | ... |
metaCode/Classes/Main/HomePage/View/DigitalAuthViews/Vitae/Work/CNLiveVitaeAddWorkFirCell.swift
| ... | ... | @@ -306,14 +306,60 @@ class CNLiveVitaeAddWorkFirCell:UITableViewCell, UITextFieldDelegate{ |
| 306 | 306 | } |
| 307 | 307 | |
| 308 | 308 | @objc func startTimeTapAction(){ |
| 309 | - | |
| 309 | + currentViewController()?.view.endEditing(true) | |
| 310 | + MineInfoAlertView.showSelectView(showType: .selectDay) { [weak self] text in | |
| 311 | + print("刷新之后的数据是=>\(text)")//"2024-06-18" | |
| 312 | + if (text as! String).count > 0{ | |
| 313 | + let textStr = text as! String | |
| 314 | + self?.canjiaRightTitleLabel.text = textStr | |
| 315 | + self?.canjiaRightTitleLabel.textColor = HexColor("#333333") | |
| 316 | + }else{ | |
| 317 | + self?.canjiaRightTitleLabel.text = "请选择" | |
| 318 | + self?.canjiaRightTitleLabel.textColor = HexColor("#B4B4B4") | |
| 319 | + } | |
| 320 | + } | |
| 310 | 321 | } |
| 311 | 322 | @objc func endTimeTapAction(){ |
| 312 | - | |
| 323 | + currentViewController()?.view.endEditing(true) | |
| 324 | + MineInfoAlertView.showSelectView(showType: .selectDay) { [weak self] text in | |
| 325 | + print("刷新之后的数据是=>\(text)")//"2024-06-18" | |
| 326 | + if (text as! String).count > 0{ | |
| 327 | + let textStr = text as! String | |
| 328 | + self?.endTimeRightTitleLabel.text = textStr | |
| 329 | + self?.endTimeRightTitleLabel.textColor = HexColor("#333333") | |
| 330 | + }else{ | |
| 331 | + self?.endTimeRightTitleLabel.text = "请选择" | |
| 332 | + self?.endTimeRightTitleLabel.textColor = HexColor("#B4B4B4") | |
| 333 | + } | |
| 334 | + } | |
| 313 | 335 | } |
| 314 | 336 | |
| 315 | 337 | @objc func zhiJinBtnAction(){ |
| 316 | - | |
| 338 | + if let text = getCurrentDateAsString() { | |
| 339 | + print(text) // 输出类似 "2024-06-18" 的字符串,具体取决于当前日期 | |
| 340 | + let textStr = text | |
| 341 | + self.endTimeRightTitleLabel.text = textStr | |
| 342 | + self.endTimeRightTitleLabel.textColor = HexColor("#333333") | |
| 343 | + }else{ | |
| 344 | + self.endTimeRightTitleLabel.text = "请选择" | |
| 345 | + self.endTimeRightTitleLabel.textColor = HexColor("#B4B4B4") | |
| 346 | + } | |
| 347 | + } | |
| 348 | + func getCurrentDateAsString() -> String? { | |
| 349 | + // 创建一个Date对象,它默认表示当前日期和时间 | |
| 350 | + let now = Date() | |
| 351 | + | |
| 352 | + // 创建一个DateFormatter对象 | |
| 353 | + let formatter = DateFormatter() | |
| 354 | + | |
| 355 | + // 设置DateFormatter的日期格式 | |
| 356 | + formatter.dateFormat = "yyyy-MM-dd" | |
| 357 | + | |
| 358 | + // 使用DateFormatter将Date对象格式化为字符串 | |
| 359 | + let dateString = formatter.string(from: now) | |
| 360 | + | |
| 361 | + // 返回格式化后的日期字符串 | |
| 362 | + return dateString | |
| 317 | 363 | } |
| 318 | 364 | |
| 319 | 365 | } | ... | ... |
metaCode/Classes/Main/HomePage/View/DigitalAuthViews/Vitae/Work/CNLiveVitaeAddWorkSecCell.swift
| ... | ... | @@ -9,7 +9,7 @@ import Foundation |
| 9 | 9 | import Kingfisher |
| 10 | 10 | import SnapKit |
| 11 | 11 | |
| 12 | -typealias UpdateAddWorkSecCellHeightBlock = (_ currentCell: CNLiveVitaeAddWorkSecCell ,_ height:Int) -> Void | |
| 12 | +typealias UpdateAddWorkSecCellHeightBlock = (_ currentCell: CNLiveVitaeAddWorkSecCell ,_ uploadHeight:CGFloat) -> Void | |
| 13 | 13 | |
| 14 | 14 | class CNLiveVitaeAddWorkSecCell:UITableViewCell, UITextViewDelegate{ |
| 15 | 15 | var updateAddWorkSecCellHeightBlock:UpdateAddWorkSecCellHeightBlock? |
| ... | ... | @@ -66,14 +66,54 @@ class CNLiveVitaeAddWorkSecCell:UITableViewCell, UITextViewDelegate{ |
| 66 | 66 | var selectUploadImageView:CNLiveAddGoodsSelectUploadImageView?{ |
| 67 | 67 | get{ |
| 68 | 68 | if _selectUploadImageView == nil{ |
| 69 | - _selectUploadImageView = CNLiveAddGoodsSelectUploadImageView(frame: CGRect(x: 0, y: 248, width: KSreenWidth, height: 100)) | |
| 69 | + _selectUploadImageView = CNLiveAddGoodsSelectUploadImageView(frame: CGRect(x: 0, y: 248, width: KSreenWidth-30, height: 110)) | |
| 70 | 70 | _selectUploadImageView?.maxSelectImageCount = 9 |
| 71 | + _selectUploadImageView?.column = 3 | |
| 71 | 72 | _selectUploadImageView?.isAbleSelectVideo = true |
| 73 | + _selectUploadImageView?.isViate = true | |
| 72 | 74 | _selectUploadImageView?.deleteImage = UIImage(named: "DS_happ_daren_dynamic_delete") |
| 75 | + _selectUploadImageView?.changeFrameCallBack = { | |
| 76 | + let whiteH = self.selectUploadImageView!.height + self.selectUploadImageView!.top+20 | |
| 77 | + self.topWhiteView.snp.remakeConstraints { make in | |
| 78 | + make.top.equalTo(15) | |
| 79 | + make.left.equalTo(15) | |
| 80 | + make.right.equalToSuperview().offset(-15) | |
| 81 | + make.height.equalTo(whiteH) | |
| 82 | + } | |
| 83 | + self.updateAddWorkSecCellHeightBlock!(self, whiteH+20) | |
| 84 | + | |
| 85 | + } | |
| 73 | 86 | _selectUploadImageView?.endUploadImageCallBack = { |
| 74 | 87 | let imageUrl = self.selectUploadImageView?.getCurrentSelectImageUrls().first |
| 75 | 88 | self.uploadImageSuceessBlock!(imageUrl ?? "") |
| 89 | + | |
| 90 | + let arr = self.selectUploadImageView?.getCurrentSelectImageUrls() | |
| 91 | + var hangNum = 1 | |
| 92 | + if arr?.count ?? 0 <= 1{ | |
| 93 | + hangNum = 1 | |
| 94 | + }else if arr?.count ?? 0 <= 4{ | |
| 95 | + hangNum = 2 | |
| 96 | + }else if arr?.count ?? 0 <= 9{ | |
| 97 | + hangNum = 3 | |
| 98 | + }else{ | |
| 99 | + hangNum = 4 | |
| 100 | + } | |
| 101 | + let addXRSpace = 15 - 17*0.5 | |
| 102 | + let addXSpace = 15 - 17*0.5 | |
| 103 | + let column:CGFloat = 3 | |
| 104 | + let totalSpace = 15 + addXRSpace + addXSpace*CGFloat(column - 1) | |
| 105 | + let aHeight = ((KSreenWidth-30 - totalSpace) / column) | |
| 106 | + self.selectUploadImageView?.height = (aHeight+10)*CGFloat(hangNum) | |
| 107 | + let whiteH = self.selectUploadImageView!.height + self.selectUploadImageView!.top+20 | |
| 108 | + self.topWhiteView.snp.remakeConstraints { make in | |
| 109 | + make.top.equalTo(15) | |
| 110 | + make.left.equalTo(15) | |
| 111 | + make.right.equalToSuperview().offset(-15) | |
| 112 | + make.height.equalTo(whiteH) | |
| 113 | + } | |
| 114 | + self.updateAddWorkSecCellHeightBlock!(self, whiteH+20) | |
| 76 | 115 | } |
| 116 | + | |
| 77 | 117 | |
| 78 | 118 | } |
| 79 | 119 | return _selectUploadImageView |
| ... | ... | @@ -103,7 +143,7 @@ class CNLiveVitaeAddWorkSecCell:UITableViewCell, UITextViewDelegate{ |
| 103 | 143 | make.top.equalTo(15) |
| 104 | 144 | make.left.equalTo(15) |
| 105 | 145 | make.right.equalToSuperview().offset(-15) |
| 106 | - make.height.equalTo(368) | |
| 146 | + make.height.equalTo(368+15) | |
| 107 | 147 | } |
| 108 | 148 | self.topWhiteView.addSubview(self.weizhiTitleLabel) |
| 109 | 149 | self.weizhiTitleLabel.snp.makeConstraints { make in | ... | ... |
metaCode/Classes/Main/HomePage/View/DigitalAuthViews/Vitae/Work/CNLiveVitaeAddWorkThreeCell.swift
| ... | ... | @@ -10,6 +10,8 @@ import Kingfisher |
| 10 | 10 | import SnapKit |
| 11 | 11 | |
| 12 | 12 | class CNLiveVitaeAddWorkThreeCell:UITableViewCell, UITextFieldDelegate{ |
| 13 | + var selectAreaVC:CNLiveDigitalResumeInfoSelectAddressController? | |
| 14 | + | |
| 13 | 15 | lazy var topWhiteView :UIView = { |
| 14 | 16 | let bottomNavView = UIView() |
| 15 | 17 | bottomNavView.backgroundColor = .white |
| ... | ... | @@ -185,8 +187,24 @@ class CNLiveVitaeAddWorkThreeCell:UITableViewCell, UITextFieldDelegate{ |
| 185 | 187 | } |
| 186 | 188 | |
| 187 | 189 | @objc func workCityTapAction(){ |
| 188 | - | |
| 190 | + self.displaySelectAreaVC() | |
| 189 | 191 | } |
| 192 | + func displaySelectAreaVC(){ | |
| 193 | + if self.selectAreaVC == nil{ | |
| 194 | + let vc = CNLiveDigitalResumeInfoSelectAddressController() | |
| 195 | + vc.finishSelectAreaCallBack = { [weak self] in | |
| 196 | + self?.weizhiRightTitleLabel.text = String(format: "%@%@%@",self?.selectAreaVC?.province ?? "",self?.selectAreaVC?.city ?? "",self?.selectAreaVC?.area ?? "" ) | |
| 197 | + } | |
| 198 | + let currVC = currentViewController() | |
| 199 | + currVC?.addChild(vc) | |
| 200 | + vc.view.frame = CGRect(x: 0, y: 0, width: KSreenWidth, height: KSreenHeight) | |
| 201 | + currVC?.view.addSubview(vc.view) | |
| 202 | + vc.didMove(toParent: currVC) | |
| 203 | + self.selectAreaVC = vc | |
| 204 | + } | |
| 205 | + self.selectAreaVC?.display() | |
| 206 | + } | |
| 207 | + | |
| 190 | 208 | |
| 191 | 209 | } |
| 192 | 210 | ... | ... |
metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveAddGoodsSelectUploadImageView.swift
| ... | ... | @@ -36,6 +36,7 @@ typealias endUploadImageCallBackBlock = ()->Void |
| 36 | 36 | |
| 37 | 37 | |
| 38 | 38 | class CNLiveAddGoodsSelectUploadImageView: UIView,UIImagePickerControllerDelegate, PhotoPickerControllerDelegate { |
| 39 | + var isViate = false//是否是 数字简历,bucket不一样 | |
| 39 | 40 | |
| 40 | 41 | // MARK: - 属性 |
| 41 | 42 | /// 显示类型 |
| ... | ... | @@ -715,6 +716,26 @@ class CNLiveAddGoodsSelectUploadImageView: UIView,UIImagePickerControllerDelegat |
| 715 | 716 | } |
| 716 | 717 | } |
| 717 | 718 | break |
| 719 | + }else{ | |
| 720 | + if model.isVideo == true{ | |
| 721 | + //当前要删除的是视频 | |
| 722 | + if self.uploadVideoModel?.isVideo == true{ | |
| 723 | + //subview是视频 | |
| 724 | + if self.uploadVideoModel?.isUploading == true{ | |
| 725 | + //subview正在上传中 | |
| 726 | + UploadManager.shared.cancelUploadKey(key: self.uploadVideoModel!.uploadKey!) | |
| 727 | + self.uploadVideoModel = nil | |
| 728 | + }else{ | |
| 729 | + //subview上传完成 | |
| 730 | + //标记当前有视频,并替换model | |
| 731 | + self.replaceVideoUrls.append(self.uploadVideoModel!) | |
| 732 | + let videoModel = CNLiveSelectUploadImageModel() | |
| 733 | + videoModel.isVideo = true | |
| 734 | + self.uploadVideoModel = videoModel | |
| 735 | + } | |
| 736 | + } | |
| 737 | + break | |
| 738 | + } | |
| 718 | 739 | } |
| 719 | 740 | |
| 720 | 741 | } |
| ... | ... | @@ -746,25 +767,47 @@ class CNLiveAddGoodsSelectUploadImageView: UIView,UIImagePickerControllerDelegat |
| 746 | 767 | self.uploadVideoModel?.image = firstImage.first |
| 747 | 768 | self.uploadVideoModel?.localVideoUrl = videoUrl |
| 748 | 769 | self.uploadVideoModel?.isUploading = true |
| 749 | - | |
| 750 | - self.uploadVideoModel?.uploadKey = UploadManager.uploadVideo(videoData: videoData, progressBlock: { [weak self] key, progress in | |
| 751 | - self!.uploadVideoModel?.uploadingPercent = progress | |
| 752 | - self?.replaceVideoModelInSubviews(model: (self?.uploadVideoModel)!, target: firstImage.first!) | |
| 753 | - }, successBlock: { [weak self] key,url in | |
| 754 | - self?.uploadVideoModel?.videoUrl = url | |
| 755 | - self?.uploadVideoModel?.isUploading = false | |
| 756 | - self?.uploadVideoModel?.uploadKey = nil | |
| 757 | - self?.replaceVideoModelInSubviews(model: (self?.uploadVideoModel)!, target: firstImage.first!) | |
| 758 | - self?.uploadingCount = self!.uploadingCount - 1 | |
| 759 | - if self?.uploadingCount == 0{ | |
| 760 | - if ((self?.endUploadImageCallBack?()) != nil){ | |
| 761 | - self?.endUploadImageCallBack!() | |
| 770 | + if self.isViate == true{ | |
| 771 | + self.uploadVideoModel?.uploadKey = UploadManager.uploadViateVideo(videoData: videoData, progressBlock: { [weak self] key, progress in | |
| 772 | + self!.uploadVideoModel?.uploadingPercent = progress | |
| 773 | + self?.replaceVideoModelInSubviews(model: (self?.uploadVideoModel)!, target: firstImage.first!) | |
| 774 | + }, successBlock: { [weak self] key,url in | |
| 775 | + self?.uploadVideoModel?.videoUrl = url | |
| 776 | + self?.uploadVideoModel?.isUploading = false | |
| 777 | + self?.uploadVideoModel?.uploadKey = nil | |
| 778 | + self?.replaceVideoModelInSubviews(model: (self?.uploadVideoModel)!, target: firstImage.first!) | |
| 779 | + self?.uploadingCount = self!.uploadingCount - 1 | |
| 780 | + if self?.uploadingCount == 0{ | |
| 781 | + if ((self?.endUploadImageCallBack?()) != nil){ | |
| 782 | + self?.endUploadImageCallBack!() | |
| 783 | + } | |
| 762 | 784 | } |
| 763 | - } | |
| 764 | - if ((self?.changeUploadDataCallBack?((self?.getCurrentSelectImageUrls())!,(self?.getCurrentSelectVideoUrl())!)) != nil){ | |
| 765 | - self?.changeUploadDataCallBack!((self?.getCurrentSelectImageUrls())!,(self?.getCurrentSelectVideoUrl())!) | |
| 766 | - } | |
| 767 | - }) | |
| 785 | + if ((self?.changeUploadDataCallBack?((self?.getCurrentSelectImageUrls())!,(self?.getCurrentSelectVideoUrl())!)) != nil){ | |
| 786 | + self?.changeUploadDataCallBack!((self?.getCurrentSelectImageUrls())!,(self?.getCurrentSelectVideoUrl())!) | |
| 787 | + } | |
| 788 | + }) | |
| 789 | + | |
| 790 | + }else{ | |
| 791 | + self.uploadVideoModel?.uploadKey = UploadManager.uploadVideo(videoData: videoData, progressBlock: { [weak self] key, progress in | |
| 792 | + self!.uploadVideoModel?.uploadingPercent = progress | |
| 793 | + self?.replaceVideoModelInSubviews(model: (self?.uploadVideoModel)!, target: firstImage.first!) | |
| 794 | + }, successBlock: { [weak self] key,url in | |
| 795 | + self?.uploadVideoModel?.videoUrl = url | |
| 796 | + self?.uploadVideoModel?.isUploading = false | |
| 797 | + self?.uploadVideoModel?.uploadKey = nil | |
| 798 | + self?.replaceVideoModelInSubviews(model: (self?.uploadVideoModel)!, target: firstImage.first!) | |
| 799 | + self?.uploadingCount = self!.uploadingCount - 1 | |
| 800 | + if self?.uploadingCount == 0{ | |
| 801 | + if ((self?.endUploadImageCallBack?()) != nil){ | |
| 802 | + self?.endUploadImageCallBack!() | |
| 803 | + } | |
| 804 | + } | |
| 805 | + if ((self?.changeUploadDataCallBack?((self?.getCurrentSelectImageUrls())!,(self?.getCurrentSelectVideoUrl())!)) != nil){ | |
| 806 | + self?.changeUploadDataCallBack!((self?.getCurrentSelectImageUrls())!,(self?.getCurrentSelectVideoUrl())!) | |
| 807 | + } | |
| 808 | + }) | |
| 809 | + | |
| 810 | + } | |
| 768 | 811 | DispatchQueue.main.async { |
| 769 | 812 | self.resetUI() |
| 770 | 813 | self.autoAdjustHeight() |
| ... | ... | @@ -790,27 +833,54 @@ class CNLiveAddGoodsSelectUploadImageView: UIView,UIImagePickerControllerDelegat |
| 790 | 833 | model.image = image |
| 791 | 834 | model.isUploading = true |
| 792 | 835 | |
| 793 | - self!.uploadVideoModel?.uploadKey = UploadManager.uploadImage(imageData: imageData) { [weak self] key, percent in | |
| 794 | - model.uploadingPercent = percent | |
| 795 | - self?.replaceImageModelInDataArr(model: model, target: image) | |
| 796 | - } successBlock: { key, url in | |
| 797 | - model.imageUrl = url | |
| 798 | - model.isUploading = false | |
| 799 | - model.uploadKey = nil | |
| 800 | - self!.replaceImageModelInDataArr(model: model, target: image) | |
| 801 | - | |
| 802 | - self!.uploadingCount = self!.uploadingCount - 1 | |
| 803 | - | |
| 804 | - if self!.uploadingCount == 0{ | |
| 805 | - if self!.endUploadImageCallBack?() != nil{ | |
| 806 | - self!.endUploadImageCallBack!() | |
| 836 | + if self!.isViate == true{ | |
| 837 | + self!.uploadVideoModel?.uploadKey = UploadManager.uploadViateImage(imageData: imageData) { [weak self] key, percent in | |
| 838 | + model.uploadingPercent = percent | |
| 839 | + self?.replaceImageModelInDataArr(model: model, target: image) | |
| 840 | + } successBlock: { key, url in | |
| 841 | + model.imageUrl = url | |
| 842 | + model.isUploading = false | |
| 843 | + model.uploadKey = nil | |
| 844 | + self!.replaceImageModelInDataArr(model: model, target: image) | |
| 845 | + | |
| 846 | + self!.uploadingCount = self!.uploadingCount - 1 | |
| 847 | + | |
| 848 | + if self!.uploadingCount == 0{ | |
| 849 | + if self!.endUploadImageCallBack?() != nil{ | |
| 850 | + self!.endUploadImageCallBack!() | |
| 851 | + } | |
| 852 | + } | |
| 853 | + | |
| 854 | + if self!.changeUploadDataCallBack?(self!.getCurrentSelectImageUrls(),self!.getCurrentSelectVideoUrl()) != nil{ | |
| 855 | + self!.changeUploadDataCallBack!(self!.getCurrentSelectImageUrls(),self!.getCurrentSelectVideoUrl()) | |
| 807 | 856 | } |
| 808 | 857 | } |
| 809 | - | |
| 810 | - if self!.changeUploadDataCallBack?(self!.getCurrentSelectImageUrls(),self!.getCurrentSelectVideoUrl()) != nil{ | |
| 811 | - self!.changeUploadDataCallBack!(self!.getCurrentSelectImageUrls(),self!.getCurrentSelectVideoUrl()) | |
| 858 | + | |
| 859 | + }else{ | |
| 860 | + self!.uploadVideoModel?.uploadKey = UploadManager.uploadImage(imageData: imageData) { [weak self] key, percent in | |
| 861 | + model.uploadingPercent = percent | |
| 862 | + self?.replaceImageModelInDataArr(model: model, target: image) | |
| 863 | + } successBlock: { key, url in | |
| 864 | + model.imageUrl = url | |
| 865 | + model.isUploading = false | |
| 866 | + model.uploadKey = nil | |
| 867 | + self!.replaceImageModelInDataArr(model: model, target: image) | |
| 868 | + | |
| 869 | + self!.uploadingCount = self!.uploadingCount - 1 | |
| 870 | + | |
| 871 | + if self!.uploadingCount == 0{ | |
| 872 | + if self!.endUploadImageCallBack?() != nil{ | |
| 873 | + self!.endUploadImageCallBack!() | |
| 874 | + } | |
| 875 | + } | |
| 876 | + | |
| 877 | + if self!.changeUploadDataCallBack?(self!.getCurrentSelectImageUrls(),self!.getCurrentSelectVideoUrl()) != nil{ | |
| 878 | + self!.changeUploadDataCallBack!(self!.getCurrentSelectImageUrls(),self!.getCurrentSelectVideoUrl()) | |
| 879 | + } | |
| 812 | 880 | } |
| 881 | + | |
| 813 | 882 | } |
| 883 | + | |
| 814 | 884 | self!.uploadImageUrls.append(model) |
| 815 | 885 | self!.resetUI() |
| 816 | 886 | self!.autoAdjustHeight() | ... | ... |
metaCode/Classes/Main/HomePage/ViewModel/Vitae/CNLiveVitaeViewModel.swift
| ... | ... | @@ -231,6 +231,65 @@ class CNLiveVitaeViewModel:NSObject{ |
| 231 | 231 | } |
| 232 | 232 | |
| 233 | 233 | } |
| 234 | + | |
| 235 | + /* | |
| 236 | + 保存简历-工作经历(新增工作记录) | |
| 237 | + 参数 vsid 实名对象id | |
| 238 | + */ | |
| 239 | + static func saveWork(city:String,companyName:String,imgs:String,jobDuties:String,startWorkingDate:String,endWorkingDate:String,position:String,profession:String,vsid:String,vitaeId:String,resultBlock: @escaping downSlideResultBlock) { | |
| 240 | + let values = NSMutableDictionary() | |
| 241 | + values.addEntries(from: ["profession":profession]) | |
| 242 | + values.addEntries(from: ["position":position]) | |
| 243 | + values.addEntries(from: ["startWorkingDate":startWorkingDate]) | |
| 244 | + values.addEntries(from: ["endWorkingDate":endWorkingDate]) | |
| 245 | + values.addEntries(from: ["jobDuties":jobDuties]) | |
| 246 | + values.addEntries(from: ["imgs":imgs]) | |
| 247 | + values.addEntries(from: ["companyName":companyName]) | |
| 248 | + values.addEntries(from: ["city":city]) | |
| 249 | + values.addEntries(from: ["vsid":vsid]) | |
| 250 | + values.addEntries(from: ["vitaeId":vitaeId]) | |
| 251 | + do { | |
| 252 | + let request = URLRequest.init(url: URL.init(string: APPBaseMCUrl+"/userApi/saveVitaeWork")!) as! NSMutableURLRequest | |
| 253 | + request.httpMethod = "POST" | |
| 254 | + request.timeoutInterval = 10 | |
| 255 | + request.setValue("application/json", forHTTPHeaderField: "Content-Type") | |
| 256 | + let data = try JSONSerialization.data(withJSONObject: values, options: .prettyPrinted) | |
| 257 | + request.httpBody = data | |
| 258 | + showLoading(message: "") | |
| 259 | + let custom_param = NSMutableDictionary() | |
| 260 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | |
| 261 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey, forKey: "appKey") | |
| 262 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | |
| 263 | + CNLiveNetworking.setAllowRequestDefaultArgument(false) | |
| 264 | + CNLiveNetworking.setupShowDataResult(false) | |
| 265 | + CNLiveNetworking.setBuildCustomUrlRequest(request as URLRequest) { task, result, error in | |
| 266 | + hiddenLoading() | |
| 267 | + if (error == nil) { | |
| 268 | + let resp = result as! NSDictionary | |
| 269 | + let errorCode = "\(resp["errorCode"] ?? "0")" | |
| 270 | + if (errorCode == "0") { | |
| 271 | + resultBlock(true,.success) | |
| 272 | + } else { | |
| 273 | + showMessage(message: resp["errorMessage"] as! String) | |
| 274 | + resultBlock(NSNull(),.failed) | |
| 275 | + } | |
| 276 | + } else { | |
| 277 | + if CNLiveNetworking.isNetworking() { | |
| 278 | + showMessage(message: "上传失败") | |
| 279 | + resultBlock(NSNull(),.failed) | |
| 280 | + } else { | |
| 281 | + showMessage(message: "似乎与网络断开链接") | |
| 282 | + resultBlock(NSNull(),.noNetwork) | |
| 283 | + } | |
| 284 | + } | |
| 285 | + } | |
| 286 | + } catch { | |
| 287 | + showMessage(message: "上传失败") | |
| 288 | + resultBlock(NSNull(),.failed) | |
| 289 | + } | |
| 290 | + | |
| 291 | + } | |
| 292 | + | |
| 234 | 293 | } |
| 235 | 294 | |
| 236 | 295 | ... | ... |
metaCode/Classes/Main/MinePage/View/CNLiveMineInfoAlertView.swift
| ... | ... | @@ -287,8 +287,8 @@ class MineInfoAlertView: UIView { |
| 287 | 287 | case .other: |
| 288 | 288 | break |
| 289 | 289 | } |
| 290 | - | |
| 291 | - let window = UIApplication.shared.windows.last | |
| 290 | + | |
| 291 | + let window = UIApplication.shared.windows.first | |
| 292 | 292 | window?.addSubview(pickerView) |
| 293 | 293 | pickerView.snp.makeConstraints { make in |
| 294 | 294 | make.edges.equalToSuperview() |
| ... | ... | @@ -334,6 +334,14 @@ class MineInfoAlertView: UIView { |
| 334 | 334 | } |
| 335 | 335 | if type == .selectDay { |
| 336 | 336 | value = selectDay ?? "" |
| 337 | + if value.count == 0{ | |
| 338 | + let formatter = DateFormatter() | |
| 339 | + formatter.dateFormat = "yyyy-MM-dd" | |
| 340 | + let date = formatter.string(from: datePicker.date) | |
| 341 | + print("获取到的时间是:\(date)") | |
| 342 | + result!(date) | |
| 343 | + return | |
| 344 | + } | |
| 337 | 345 | result!(value) |
| 338 | 346 | return |
| 339 | 347 | } | ... | ... |