Commit b3ebefaf authored by Steven杜宇's avatar Steven杜宇

// 文件清单添加上传功能

parent 4d6d956b
......@@ -12,13 +12,12 @@ import Photos
文件清单
*/
class YHFileListViewController: YHBaseViewController {
var orderId : Int?
private let certificateReqVM : YHCertificateViewModel = YHCertificateViewModel()
private lazy var headView : YHFileListHeaerView = {
let view = YHFileListHeaerView()
view.backgroundColor = .clear
......@@ -37,6 +36,7 @@ class YHFileListViewController: YHBaseViewController {
view.backgroundColor = .white
view.layer.cornerRadius = kCornerRadius12
view.clipsToBounds = true
view.orderId = self.orderId ?? 0
return view
}()
......@@ -51,15 +51,18 @@ class YHFileListViewController: YHBaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 【WARNING】加载数据不要在viewWillAppear里请求数据 因为点击itemView上传文件拉起系统VC,dismiss后 所有itemView会被移除,导致itemView中使用的block找不到self(即itemView本身)引起上传功能bug
// pushVC返回需要刷新数据时通过通知或block重新刷新数据
loadData()
loadData2()
NotificationCenter.default.addObserver(self, selector: #selector(refreshListData), name: YhConstant.YhNotification.refreshCertificateFileListNotifiction, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
private lazy var footLable : UILabel = {
let footLable = UILabel()
......@@ -75,9 +78,15 @@ class YHFileListViewController: YHBaseViewController {
}
extension YHFileListViewController {
@objc func refreshListData() {
loadData()
loadData2()
}
func loadData() {
if let orderID = UserDefaults.standard.value(forKey: "orderIdForPreview") {
let param = ["order_id":orderID,"node":"1","state":"1"]
if let orderID = orderId {
let param = ["order_id":orderID,"node":"1","state":"1"] as [String : Any]
certificateReqVM.getCertificateFileListData(params: param) { success, error in
if success == true {
self.myContentView.dataModel = self.certificateReqVM.arrFileListData
......@@ -104,8 +113,8 @@ extension YHFileListViewController {
}
func loadData2() {
if let orderID = UserDefaults.standard.value(forKey: "orderIdForPreview") {
let param = ["order_id":orderID,"node":"1","state":"1"]
if let orderID = orderId {
let param = ["order_id":orderID,"node":"1","state":"1"] as [String : Any]
certificateReqVM.getCertificateStatisticData(params: param) { success, error in
if success == true {
self.headView.dataModel = self.certificateReqVM.certificateEntryModel
......
......@@ -13,7 +13,7 @@ class YHFileListModel: SmartCodable {
var ApplicantName : String = ""
var category_id : Int = -1
var checks_tatus : Int = -1
var supplement_list : [YHFileListSubModel] = []
var supplement_list : [YHSupplementInfo] = []
var type : Int = 0 //0-数据来自服务端 1-客户端自己添加的
var arrTxt : [String] = [] //type=1时使用的内容
......@@ -21,13 +21,3 @@ class YHFileListModel: SmartCodable {
required init() {
}
}
class YHFileListSubModel: SmartCodable {
var name : String = ""
var type_name : String = ""
var check_status : Int = -1
required init() {
}
}
......@@ -9,6 +9,9 @@
import UIKit
class YHFileListContentView: UIView {
var orderId: Int = 0
override init(frame: CGRect) {
super.init(frame: frame)
initView()
......@@ -20,7 +23,7 @@ class YHFileListContentView: UIView {
var dataModel : [YHFileListModel?]? {
didSet {
updataUI()
updateUI()
}
}
}
......@@ -34,7 +37,7 @@ private extension YHFileListContentView {
}
extension YHFileListContentView {
func updataUI() {
func updateUI() {
guard let arrData = dataModel,arrData.count > 0 else { return }
removeSubviews()
......@@ -72,7 +75,10 @@ extension YHFileListContentView {
for (index,item) in arrData.enumerated() {
if let iii = item {
var view : UIView = YHFileListItemsView()
if view is YHFileListItemsView {
let targetView = view as! YHFileListItemsView
targetView.orderId = self.orderId
}
if iii.type == 0 {
(view as! YHFileListItemsView).dataModel = item
} else {
......
......@@ -9,6 +9,9 @@
import UIKit
class YHFileListItemView: UIView {
var clickBlock:((YHSupplementInfo?)->())?
override init(frame: CGRect) {
super.init(frame: frame)
initView()
......@@ -68,7 +71,7 @@ class YHFileListItemView: UIView {
var dataModel : YHFileListSubModel? {
var dataModel : YHSupplementInfo? {
didSet {
updateUI()
}
......@@ -83,6 +86,10 @@ class YHFileListItemView: UIView {
private extension YHFileListItemView {
func initView() {
let tap = UITapGestureRecognizer(target: self, action: #selector(didItemViewClicked))
self.addGestureRecognizer(tap)
addSubview(indexLable)
indexLable.snp.makeConstraints { make in
make.left.equalTo(8)
......@@ -129,20 +136,20 @@ extension YHFileListItemView {
func updateUI() {
guard let dataModel = dataModel else { return }
titleLable.text = dataModel.name
subtitleLable.text = dataModel.type_name
subtitleLable.text = dataModel.typeName
var text : String = "--"
var color : UIColor = .failColor
if dataModel.check_status == 2 {
if dataModel.checkStatus == 2 {
text = "需重传"
color = .failColor
} else if dataModel.check_status == 3 {
} else if dataModel.checkStatus == 3 {
text = "待提交"
color = .brandMainColor
} else {
text = "需过滤" + String(dataModel.check_status)
text = "需过滤" + String(dataModel.checkStatus)
color = UIColor.purple
}
......@@ -157,4 +164,8 @@ extension YHFileListItemView {
let index = String(myIndex + 1)
indexLable.text = index.defaultStringIfEmpty(detaultValue: "-")
}
@objc func didItemViewClicked() {
clickBlock?(self.dataModel)
}
}
......@@ -9,6 +9,10 @@
import UIKit
class YHFileListItemsView: UIView {
var orderId:Int = 0
var viewModel: YHCertificateViewModel = YHCertificateViewModel()
override init(frame: CGRect) {
super.init(frame: frame)
}
......@@ -133,8 +137,14 @@ private extension YHFileListItemsView {
let view = YHFileListItemView()
view.myIndex = index
view.dataModel = item
view.clickBlock = {
[weak self] model in
guard let self = self else { return }
self.handleClickDataModel(model)
}
holdView.addSubview(view)
if index == dataModel.supplement_list.count - 1 {
view.snp.makeConstraints { make in
make.top.equalTo(lastView.snp.bottom)
......@@ -156,3 +166,179 @@ private extension YHFileListItemsView {
holdView.layer.borderColor = UIColor(hex: 0xDEE5F1, alpha: 1.0).cgColor
}
}
private extension YHFileListItemsView {
func handleClickDataModel(_ targetModel: YHSupplementInfo?) {
guard let model = targetModel else {
return
}
if model.checkStatus == YHCertificateUploadStatus.preUpload.rawValue { // 待上传
showUploadSheetView(model)
return
}
// 非待上传的进入详情
let vc = YHCertificateUploadContentListVC()
vc.orderId = self.orderId
vc.categoryId = self.dataModel?.category_id ?? 0
vc.supplementId = model.id
UIViewController.current?.navigationController?.pushViewController(vc)
}
func showUploadSheetView(_ supplementInfo: YHSupplementInfo) {
let sheetView = YHCertificateUploadSheetView.sheetView()
sheetView.maxSelectCount = 9
sheetView.uploadFilesBlock = {
[weak self] fileUrl in
guard let self = self else { return }
print(fileUrl)
uploadFile(fileUrl, supplementInfo: supplementInfo) {
// 待上传的进入详情
DispatchQueue.main.async {
let vc = YHCertificateUploadContentListVC()
vc.orderId = self.orderId
vc.categoryId = self.dataModel?.category_id ?? 0
vc.supplementId = supplementInfo.id
UIViewController.current?.navigationController?.pushViewController(vc)
}
}
}
sheetView.uploadImageBlock = {
[weak self] targetImgArr in
guard let self = self else { return }
let ossGroup = DispatchGroup()
var ossArr:[YHContentUrl] = []
YHHUD.show(.progress(message: "上传中..."))
// 先将所有图片组上传到OSS
for item in targetImgArr {
if let image = item.data {
ossGroup.enter()
uploadImage(image, imageName:item.name, supplementInfo: supplementInfo) {
success, urlModel in
if success, let model = urlModel {
ossArr.append(model)
}
ossGroup.leave()
}
}
}
// 再将OSS上传信息组上传到服务器
ossGroup.notify(queue: .main) {
if ossArr.count <= 0 {
YHHUD.hide()
YHHUD.flash(message: "上传失败")
return
}
self.viewModel.updateCertificateItem(supplementsId:supplementInfo.id, urlModels:ossArr, operation: "add", rename: "") {
[weak self] success, error in
guard let self = self else { return }
YHHUD.hide()
if success {
if ossArr.count == targetImgArr.count {
YHHUD.flash(message: "上传成功")
} else {
YHHUD.flash(message: "\(ossArr.count)张照片上传成功\n\(targetImgArr.count-ossArr.count)张照片上传失败")
}
let vc = YHCertificateUploadContentListVC()
vc.orderId = self.orderId
vc.categoryId = self.dataModel?.category_id ?? 0
vc.supplementId = supplementInfo.id
UIViewController.current?.navigationController?.pushViewController(vc)
} else {
YHHUD.flash(message: "上传失败")
}
}
}
}
sheetView.show()
}
func uploadImage(_ img: UIImage, imageName:String, supplementInfo:YHSupplementInfo, callBack:((Bool, YHContentUrl?)->())?) {
// 先OSS上传得到URL
self.viewModel.uploadImage(img) {
url, error in
if let url = url, !url.isEmpty {
var suffix = "jpg"
let suffixName = url.pathExtension.lowercased()
if !suffixName.isEmpty {
suffix = suffixName
}
// 再调用业务接口
let model = YHContentUrl()
model.name = imageName
model.url = url
model.suffix = suffix
callBack?(true, model)
} else {
callBack?(false, nil)
}
}
}
func uploadFile(_ fileUrl:URL, supplementInfo:YHSupplementInfo, successBlock:(()->())?) {
if let fileData = try? Data(contentsOf: fileUrl) {
// 将文件数据上传到服务器
let size = String(format: "%.2fM", Double(fileData.count)/(1024.0 * 1024.0))
print("\(size)")
// 先OSS上传得到URL
YHHUD.show(.progress(message: "上传中..."))
self.viewModel.uploadFile(fileUrl.absoluteString) {
[weak self] successUrl, error in
guard let self = self else { return }
YHHUD.hide()
// 再调用业务接口
if let successUrl = successUrl, !successUrl.isEmpty {
let fileName = successUrl.lastPathComponent
let suffixName = successUrl.pathExtension.lowercased()
let model = YHContentUrl()
model.name = fileName
model.url = successUrl
model.suffix = suffixName
YHHUD.show(.progress(message: "上传中..."))
self.viewModel.updateCertificateItem(supplementsId:supplementInfo.id, urlModels:[model], operation: "add", rename: "") {
success, error in
YHHUD.hide()
// self.requestList(status:self.status)
if success {
YHHUD.flash(message: "上传成功")
} else {
var msg = "上传失败"
if let errorMsg = error?.errorMsg, !errorMsg.isEmpty {
msg = errorMsg
}
YHHUD.flash(message:msg)
}
if success {
successBlock?()
}
}
return
}
var msg = "上传图片失败"
if let errorMsg = error?.errorMsg, !errorMsg.isEmpty {
msg = errorMsg
}
YHHUD.flash(message: msg)
}
} else {
YHHUD.flash(message: "识别文件失败")
}
}
}
......@@ -129,6 +129,11 @@ class YHCertificateUploadContentListVC: YHBaseViewController {
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.post(name: YhConstant.YhNotification.refreshCertificateFileListNotifiction, object: nil)
}
deinit {
removeNotify()
}
......
......@@ -131,6 +131,7 @@ extension YHMineCertificateEntryViewController {
} else {
//生成清单
let vc = YHFileListViewController()
vc.orderId = self.orderId
self.navigationController?.pushViewController(vc)
}
}
......
......@@ -61,7 +61,7 @@ class YHSupplementInfo: SmartCodable {
var id: Int = 0
var name: String = ""
var typeName: String = ""
var checkStatus: Int = 0
var checkStatus: Int = -1
var templateCateName: String = ""
var templateCateShortName: String = ""
var templateCateShortColor: String = ""
......
......@@ -26,7 +26,7 @@ enum YHCertificateUploadStatus : Int {
case review = 0
// 已完成
case finish = 1
// 审核中
// 已驳回
case rejected = 2
// 待上传
case preUpload = 3
......@@ -63,7 +63,7 @@ class YHCertificateViewModel: YHBaseViewModel {
for (_,item) in resultModel.enumerated() {
let arr = item?.supplement_list.filter { (item) -> Bool in
return item.check_status == 2 || item.check_status == 3
return item.checkStatus == 2 || item.checkStatus == 3
}
item?.supplement_list = arr ?? []
}
......@@ -190,22 +190,20 @@ class YHCertificateViewModel: YHBaseViewModel {
}
// 上传/重命名/删除 证件
func updateCertificates(params:[String : Any], callBack:@escaping ((Bool, YHErrorModel?)->())) {
func updateCertificates(params:[String : Any], callBack:((Bool, YHErrorModel?)->())?) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Certificate.certificateUploadApi
let _ = YHNetRequest.postRequest(url: strUrl, params:params) { json, code in
if json.code == 200 {
callBack(true, nil)
callBack?(true, nil)
} else {
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBack(false, error)
callBack?(false, error)
}
} failBlock: { err in
callBack(false, err)
callBack?(false, err)
}
}
......@@ -230,8 +228,7 @@ class YHCertificateViewModel: YHBaseViewModel {
]
self.updateCertificates(params: params) {
[weak self] success, error in
guard self != nil else { return }
success, error in
callBack?(success, error)
}
}
......
......@@ -214,5 +214,9 @@ extension YhConstant {
//强制更新通知
public static let didForceUpgradeNotifiction = Notification.Name(rawValue: "com.yinhe.version.forceUpgrade")
// 刷新证件文件列表通知
public static let refreshCertificateFileListNotifiction = Notification.Name(rawValue: "com.yinhe.certificate.updateFileList")
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment