Commit 968359d6 authored by Steven杜宇's avatar Steven杜宇

Merge branch 'develop' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS into develop

parents 977f071c 0cf673d3
......@@ -5,9 +5,12 @@ platform :ios, '13.0'
target 'galaxy' do
use_frameworks!
#图片预览
pod 'JXPhotoBrowser',"3.1.4"
pod 'SDWebImage','5.18.10'
#与H5进行交互
pod "dsBridge",'3.0.6'
#网络检查
pod 'ReachabilitySwift','5.0.0'
#键盘处理
......
......@@ -594,6 +594,8 @@
A5EF21352BA6E05E005027E6 /* YHQuestionAndAnswerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EF21342BA6E05E005027E6 /* YHQuestionAndAnswerViewController.swift */; };
A5EF21372BA6E2D1005027E6 /* YHQuestionAndAnswerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EF21362BA6E2D1005027E6 /* YHQuestionAndAnswerModel.swift */; };
A5EF213B2BA6EC98005027E6 /* YHQuestionAndAnswerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EF213A2BA6EC98005027E6 /* YHQuestionAndAnswerCell.swift */; };
A5F886B42C61CEA700B63CF5 /* YHPictureReviewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5F886B32C61CEA700B63CF5 /* YHPictureReviewManager.swift */; };
A5F886B62C61F76200B63CF5 /* YHLongtapPictureSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5F886B52C61F76100B63CF5 /* YHLongtapPictureSheetView.swift */; };
A5F8AC082B9F414000A21EFA /* YHCustomTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5F8AC072B9F414000A21EFA /* YHCustomTextView.swift */; };
A5FD45232C523DD300908AD9 /* YHJsApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5FD45222C523DD300908AD9 /* YHJsApi.swift */; };
A5FD63BD2B623C2C00D1D9DA /* YHInformationPerfectListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5FD63BC2B623C2C00D1D9DA /* YHInformationPerfectListVC.swift */; };
......@@ -1239,6 +1241,8 @@
A5EF21342BA6E05E005027E6 /* YHQuestionAndAnswerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHQuestionAndAnswerViewController.swift; sourceTree = "<group>"; };
A5EF21362BA6E2D1005027E6 /* YHQuestionAndAnswerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHQuestionAndAnswerModel.swift; sourceTree = "<group>"; };
A5EF213A2BA6EC98005027E6 /* YHQuestionAndAnswerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHQuestionAndAnswerCell.swift; sourceTree = "<group>"; };
A5F886B32C61CEA700B63CF5 /* YHPictureReviewManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHPictureReviewManager.swift; sourceTree = "<group>"; };
A5F886B52C61F76100B63CF5 /* YHLongtapPictureSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHLongtapPictureSheetView.swift; sourceTree = "<group>"; };
A5F8AC072B9F414000A21EFA /* YHCustomTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHCustomTextView.swift; sourceTree = "<group>"; };
A5FD45222C523DD300908AD9 /* YHJsApi.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YHJsApi.swift; sourceTree = "<group>"; };
A5FD63BC2B623C2C00D1D9DA /* YHInformationPerfectListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHInformationPerfectListVC.swift; sourceTree = "<group>"; };
......@@ -3178,6 +3182,7 @@
A5ACE91B2B4564F7002C94D2 /* Modules */ = {
isa = PBXGroup;
children = (
A5F886B22C61CDAA00B63CF5 /* PictureReview(图片预览) */,
A5FD45212C523D3200908AD9 /* InteractionH5(与H5交互) */,
F8BAADA12C4FAE820074D6C3 /* UatModule(灰度功能) */,
044D0BE82C2019AC00C5CF5E /* Community(社区) */,
......@@ -3299,6 +3304,15 @@
path = radar;
sourceTree = "<group>";
};
A5F886B22C61CDAA00B63CF5 /* PictureReview(图片预览) */ = {
isa = PBXGroup;
children = (
A5F886B32C61CEA700B63CF5 /* YHPictureReviewManager.swift */,
A5F886B52C61F76100B63CF5 /* YHLongtapPictureSheetView.swift */,
);
path = "PictureReview(图片预览)";
sourceTree = "<group>";
};
A5FD45212C523D3200908AD9 /* InteractionH5(与H5交互) */ = {
isa = PBXGroup;
children = (
......@@ -3619,6 +3633,7 @@
045EEEDE2B9F171A0022A143 /* YHEducationInfoCell.swift in Sources */,
0409BEEB2C5B41D4003FCFD7 /* YHPrincipleUnapprovedCell.swift in Sources */,
A5ACE93A2B4564F7002C94D2 /* NSAttributedString+Extension.swift in Sources */,
A5F886B42C61CEA700B63CF5 /* YHPictureReviewManager.swift in Sources */,
04E86E662B86EB6F00A35F4B /* YHLoginManager.swift in Sources */,
04A7BD112BA4218B00BD35A2 /* YHMyDocumentsListViewModel.swift in Sources */,
0472CBA82C5A11640096F48F /* YHPrincipleReviewListVC.swift in Sources */,
......@@ -4028,6 +4043,7 @@
045EEEBB2B9F171A0022A143 /* YHWorkIntroductionTableViewCell.swift in Sources */,
045EEEED2B9F171A0022A143 /* YHParentInfoVC.swift in Sources */,
04A7BC912B6B7B89000E8D47 /* YHTwoOptionAlertView.swift in Sources */,
A5F886B62C61F76200B63CF5 /* YHLongtapPictureSheetView.swift in Sources */,
045EEF1C2B9F171A0022A143 /* YHAddressPresentAnimated.swift in Sources */,
04E86E0D2B70D51D00A35F4B /* YHWebViewViewController.swift in Sources */,
A5EF21312BA6DF94005027E6 /* YHMineSchemeViewController.swift in Sources */,
......
......@@ -9,17 +9,19 @@
import UIKit
import WebKit
import Photos
import dsBridge
class YHHomeWebViewController: YHBaseViewController, WKUIDelegate, WKNavigationDelegate {
var operationFlag:Bool = false
typealias Block = (YHWebModel) -> ()
var block: Block?
var viewModel: YHHomeWebViewModel!
var webview = WKWebView()
var webview = DWKWebView()
var progBar = UIProgressView()
var bottomView: YHHomeWebBottomView!
var url = ""
......@@ -100,9 +102,21 @@ class YHHomeWebViewController: YHBaseViewController, WKUIDelegate, WKNavigationD
//获取状态栏高度
let statusHeight = k_Height_statusBar()
// 创建wkwebview
webview = WKWebView(frame: CGRect(x: 0, y: statusHeight + navHeight!, width: self.view.frame.width, height: self.view.frame.height - statusHeight - navHeight! - 59 - k_Height_safeAreaInsetsBottom()))
webview = DWKWebView(frame: CGRect(x: 0, y: statusHeight + navHeight!, width: self.view.frame.width, height: self.view.frame.height - statusHeight - navHeight! - 59 - k_Height_safeAreaInsetsBottom()))
webview.navigationDelegate = self
webview.scrollView.contentInsetAdjustmentBehavior = .never
webview.navigationDelegate = self
let api = YHJsApi()
// api.delegate = self
webview.addJavascriptObject(api, namespace: nil)
// 创建网址
let url = NSURL(string: url)
// 创建请求
......
......@@ -9,17 +9,32 @@
import UIKit
class YHOrderDetailViewController: YHBaseViewController {
var backDate: ((YHContactItemModel) -> Void)?
var model: YHContactItemModel = YHContactItemModel()
var tableView: UITableView!
var viewModel: YHServiceOrderSearchViewModel = YHServiceOrderSearchViewModel()
var dataSource: [YHContactItemModel] = []
override func viewDidLoad() {
super.viewDidLoad()
setView()
getWhiteList()
getData()
// Do any additional setup after loading the view.
}
func getData() {
viewModel.getAssistList {[weak self] success, error in
guard let self = self else { return }
if success {
dataSource.append(model)
for item in self.viewModel.arrContactList {
dataSource.append(item)
}
self.tableView.reloadData()
}
}
}
func getWhiteList() {
viewModel.getWhitelist {[weak self] success, error in
guard let self = self else { return }
......@@ -83,14 +98,20 @@ class YHOrderDetailViewController: YHBaseViewController {
extension YHOrderDetailViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
return dataSource.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withClass: YHOrderDetailTableViewCell.self)
cell.dataSource = model
cell.dataSource = dataSource[indexPath.row]
if indexPath.row > 0 {
cell.otherTypeView.isHidden = false
}
cell.cellBlock = {[weak self] model in
guard let self = self else { return }
if self.backDate != nil {
self.backDate?(model)
}
self.navigationController?.popViewController()
}
return cell
......@@ -133,6 +154,7 @@ class YHOrderDetailTableViewCell: UITableViewCell {
var nameLabel: UILabel!
var nameValueLabel: UILabel!
var showDetailButton: UIButton!
var otherTypeView: UIImageView!
var dataSource: YHContactItemModel? {
didSet {
......@@ -176,7 +198,7 @@ class YHOrderDetailTableViewCell: UITableViewCell {
make.top.equalTo(8)
make.left.equalTo(16)
make.right.equalTo(-16)
make.bottom.equalTo(8)
make.bottom.equalTo(-8)
}
titleLabel = {
......@@ -193,6 +215,20 @@ class YHOrderDetailTableViewCell: UITableViewCell {
make.height.equalTo(24)
}
otherTypeView = {
let view = UIImageView()
view.image = UIImage(named: "service_other_order")
view.isHidden = true
return view
}()
centerView.addSubview(otherTypeView)
otherTypeView.snp.makeConstraints { make in
make.centerY.equalTo(titleLabel.snp.centerY)
make.left.equalTo(titleLabel.snp.right).offset(8)
make.height.equalTo(18)
make.width.equalTo(48)
}
lineView = {
let view = UIView()
view.backgroundColor = UIColor.separatorColor
......
......@@ -21,6 +21,7 @@ class YHServiceCenterMainViewController: YHBaseViewController {
var orderId: Int = 0
var mobile: String = ""
var model: YHContactItemModel = YHContactItemModel()
var oldModel: YHContactItemModel = YHContactItemModel()
var doneCount: Int = 0
private lazy var topBkg : UIView = {
let imagV = UIImageView()
......@@ -116,7 +117,7 @@ class YHServiceCenterMainViewController: YHBaseViewController {
extension YHServiceCenterMainViewController {
func loadData() {
if model.id != -1 && self.navigationController?.viewControllers.count != 1 {
if model.id != -1 {
noDataView.isHidden = true
nameBgImageView.isHidden = false
segmentedView.isHidden = false
......@@ -251,7 +252,11 @@ extension YHServiceCenterMainViewController {
@objc func pushOrderView() {
let vc = YHOrderDetailViewController()
vc.model = model
vc.model = oldModel
vc.backDate = { [weak self] model in
guard let self = self else { return }
self.model = model
}
self.navigationController?.pushViewController(vc)
}
}
......@@ -310,6 +315,7 @@ extension YHServiceCenterMainViewController {
orderId = model.id
mobile = model.mobile
self.model = model
self.oldModel = model
UserDefaults.standard.set(orderId, forKey: "orderIdForPreview")
UserDefaults.standard.synchronize()
for i in 0..<arrItemTitles.count {
......@@ -330,14 +336,14 @@ extension YHServiceCenterMainViewController {
}
func getStep() {
serviceCenterMainReqVM.getPersonInfoFillStep(params: ["orderId":orderId]) {[weak self] success, error in
serviceCenterMainReqVM.getStageInformation(params: ["orderId":orderId]) {[weak self] success, error in
guard let self = self else { return }
var name = ""
if let applicant = self.serviceCenterMainReqVM.informationFillStepModel {
if applicant.applicantName.isEmpty {
let applicant = serviceCenterMainReqVM.personInfoModel
if applicant.user_name.isEmpty {
name = "尊敬的客户"
} else {
name = applicant.applicantName
name = applicant.user_name
if applicant.sex == 1 {
name = "尊敬的" + name + "先生"
} else if applicant.sex == 2 {
......@@ -346,20 +352,13 @@ extension YHServiceCenterMainViewController {
}
}
}
if doneCount == 6 {
let a: ASAttributedString = .init("您好,\(name),您的资料已全部准备完成,已进入", .font(UIFont.PFSC_R(ofSize: 13)),.foreground(UIColor.mainTextColor))
let aa: ASAttributedString = .init(NSAttributedString(string: "全套资料审核"), .font(UIFont.PFSC_M(ofSize: 13)),.foreground(UIColor.brandMainColor))
let aaa: ASAttributedString = .init("阶段,审核没问题会安排递交入境处哦~", .font(UIFont.PFSC_R(ofSize: 13)),.foreground(UIColor.mainTextColor))
self.nameLabel.attributed.text = a + aa + aaa
} else {
let a: ASAttributedString = .init("您好,\(name),您现处于", .font(UIFont.PFSC_R(ofSize: 13)),.foreground(UIColor.mainTextColor))
let aa: ASAttributedString = .init(NSAttributedString(string: "信息提交"), .font(UIFont.PFSC_M(ofSize: 13)),.foreground(UIColor.brandMainColor))
let aa: ASAttributedString = .init(NSAttributedString(string: applicant.stage_name), .font(UIFont.PFSC_M(ofSize: 13)),.foreground(UIColor.brandMainColor))
let aaa: ASAttributedString = .init("阶段,让我们一起共同完成您的身份申请之旅吧~", .font(UIFont.PFSC_R(ofSize: 13)),.foreground(UIColor.mainTextColor))
self.nameLabel.attributed.text = a + aa + aaa
}
}
}
func addListView() {
nameBgImageView = {
......
......@@ -249,76 +249,6 @@ extension YHImagePickerView: UINavigationControllerDelegate, UIImagePickerContro
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
}
// //原生上传
// func uploadImage(imageURL: URL) {
// let url = URL(string: "https://test-comserver.galaxy-immi.com/oss/upload/storage")! // 设置上传接口地址
//
// var request = URLRequest(url: url)
// request.httpMethod = "POST"
//
// do {
// let imageData = try Data(contentsOf: imageURL) // 读取要上传的图片数据
//
// let boundary = UUID().uuidString // 生成随机边界字符串
// request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
// request.addValue("4001001", forHTTPHeaderField: "businessCode")
//
// var body = ""
// body += "--\(boundary)\r\n"
// body += "Content-Disposition: form-data; name=\"file\"; filename=\"image.jpg\"\r\n" // 根据需求修改文件名称
// body += "Content-Type: image/jpeg\r\n\r\n" // 根据实际情况指定正确的MIME类型
// if let data = imageData.base64EncodedString(options: .lineLength76Characters).addingPercentEncoding(withAllowedCharacters: CharacterSet.alphanumerics) {
// let encodedBody = body + "\r\n" + data + "\r\n" + "--" + boundary + "--"
// guard let postData = encodedBody.data(using: String.Encoding.utf8) else { return }
//
// request.httpBody = postData
//
// let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
// if let error = error {
// print("Error: \(error)")
// } else if let httpResponse = response as? HTTPURLResponse {
// switch httpResponse.statusCode {
// case 200..<300:
// if let data = data {
// let string = String(data: data, encoding: .utf8)
//
// }
// print("Upload successful.")
// default:
// print("Failed to upload the image with status code: \(httpResponse.statusCode)")
// }
// }
// }
// task.resume()
// }
// } catch {
// print("Error reading image file: \(error)")
// }
// }
// // Alamofire上传
// func uploadImage(image: UIImage) {
// // 获取图片的二进制数据
// guard let imageData = image.jpegData(compressionQuality: 1) else { return }
// let boundary = UUID().uuidString
// let headers: HTTPHeaders = [
// "Content-type": "multipart/form-data; boundary=\(boundary)",
// "businessCode": "4001001"
// ]
// // 创建MultipartFormData对象
// let multipartFormData = MultipartFormData()
//
// // 将图片添加到multipartFormData中
// multipartFormData.append(imageData, withName: "file", fileName: "image.jpg", mimeType: "image/jpeg")
//
// // 发送POST请求
// let uploadRequest = AF.upload(multipartFormData: multipartFormData, to: "https://test-comserver.galaxy-immi.com/oss/upload/storage", headers: headers)
//
// uploadRequest.responseString(completionHandler: { string in
// printLog("\n网络请求已返回 string=\(string)")
// })
// }
}
extension YHImagePickerView {
......
......@@ -28,7 +28,7 @@ class YHServiceCenterMainViewModel: YHBaseViewModel {
//服务中心进度模型
var arrDataForSeviceCenterProgress : [YHServiceCenterProgressModel] = []
var personInfoModel: YHPersonInfoModel = YHPersonInfoModel()
}
//请求接口
......@@ -363,6 +363,30 @@ extension YHServiceCenterMainViewModel {
callBackBlock(false,err)
}
}
func getStageInformation( params:[String : Any],callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Order.stage
let _ = YHNetRequest.getRequest(url: strUrl, params: params) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
let dic = json.data
guard let resultModel = YHPersonInfoModel.deserialize(dict: dic as? [AnyHashable : Any]) else {
callBackBlock(false,nil)
return
}
if json.code == 200 {
self.personInfoModel = resultModel
callBackBlock(true,nil)
} else {
let err : YHErrorModel = YHErrorModel(errorCode:Int32(json.code),errorMsg: json.msg)
callBackBlock(false,err)
}
} failBlock: { err in
callBackBlock(false,err)
}
}
}
//其他方法
......@@ -394,3 +418,10 @@ extension YHServiceCenterMainViewModel {
struct YHContactItemHoldModel : SmartCodable {
var orders : [YHContactItemModel] = []
}
struct YHPersonInfoModel: SmartCodable {
var order_id : Int = 0
var user_name : String = ""
var stage_name : String = ""
var sex : Int = 0
}
......@@ -65,4 +65,34 @@ class YHServiceOrderSearchViewModel: YHBaseViewModel {
callBackBlock(false,err)
}
}
func getAssistList(callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Order.assist
let _ = YHNetRequest.getRequest(url: strUrl) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
if json.code == 200 {
let dic = json.data as! [String: Any]
let data = dic["orders"] as? [Any]
guard let resultModel = [YHContactItemModel].deserialize(array: data) else {
self.arrContactList = []
callBackBlock(false,nil)
return
}
let lastArray = resultModel.compactMap { $0 }
self.arrContactList = lastArray
callBackBlock(true,nil)
} else {
self.arrContactList = []
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code),errorMsg: json.msg.count > 0 ? json.msg : "数据错误")
callBackBlock(false,error)
}
} failBlock: { err in
self.arrContactList = []
callBackBlock(false,err)
}
}
}
......@@ -13,29 +13,44 @@ typealias JSCallback = (String, Bool)->Void
typealias JSDicCallback = ([String : Any],Bool)->Void
class YHJsApi: NSObject {
weak var delegate : YHH5WebViewVC? = nil
weak var delegate : YHBaseViewController? = nil
}
extension YHJsApi {
//展示pics
@objc func showPicsSyn(_ dicPics:[String : Any]) {
//dsBridge.call("showPicsSyn",{pics:["123","456"], curIndex:1})
if dicPics.isEmpty == false {
let curIndex : Int = dicPics["curIndex"] as? Int ?? -1
let arrPics : [String] = dicPics["pics"] as? [String] ?? []
if curIndex > -1,arrPics.count > 0 {
DispatchQueue.main.async {
// let arr = ["https://img1.baidu.com/it/u=2032777443,4245182967&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1422","http://img0.baidu.com/it/u=594725074,698294204&fm=253&app=138&f=JPEG?w=800&h=1422"]
YHPictureReviewManager.shared.showNetWorkPicturs(curIndex: curIndex, arrPicturs: arrPics)
}
}
}
}
//设置app导航栏隐藏、显示
@objc func setAppNavigation(_ tag : Any) {
let tmp : Bool = tag as? Bool ?? false
DispatchQueue.main.async {
self.delegate?.setAppNavigation(tmp)
if let delegate = self.delegate as? YHH5WebViewVC {
delegate.setAppNavigation(tmp)
}
}
}
//保存图片到本地
@objc func saveLocalPictureSyn(_ picUrl: String) {
DispatchQueue.main.async {
self.delegate?.saveLocalPictureSyn(picUrl)
}
if let delegate = self.delegate as? YHH5WebViewVC {
delegate.saveLocalPictureSyn(picUrl)
}
}
}
}
//
// YHLongtapPictureSheetView.swift
// galaxy
//
// Created by davidhuangA on 2024/8/6.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import Photos
import PhotosUI
class YHLongtapPictureSheetView: UIView {
private var uploadTypeArr = ["分享图片","保存图片","取消"]
private let testUrl = "https://img1.baidu.com/it/u=2032777443,4245182967&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1422"
lazy var blackMaskView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hex: 0x0F1214, alpha: 0.5)
let tap = UITapGestureRecognizer(target: self, action: #selector(dismiss))
view.addGestureRecognizer(tap)
return view
}()
lazy var whiteContentView: UIView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
lazy var topView:UIView = {
let view = UIView()
view.addSubview(titleLabel)
view.addSubview(closeBtn)
let line = UIView()
line.backgroundColor = .separatorColor
view.addSubview(line)
titleLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.left.right.equalToSuperview()
make.height.equalTo(24)
}
closeBtn.snp.makeConstraints { make in
make.centerY.equalTo(titleLabel)
make.right.equalToSuperview().offset(-20)
make.width.height.equalTo(24)
}
line.snp.makeConstraints { make in
make.left.equalToSuperview().offset(20)
make.right.equalToSuperview().offset(-20)
make.height.equalTo(1)
make.bottom.equalToSuperview()
}
return view
}()
lazy var titleLabel: UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.textAlignment = .center
label.font = UIFont.PFSC_B(ofSize:17)
label.text = "请选择"
return label
}()
lazy var closeBtn: UIButton = {
let btn = UIButton()
btn.setImage(UIImage(named:"my_cer_sheet_close"), for: .normal)
btn.addTarget(self, action: #selector(dismiss), for: .touchUpInside)
return btn
}()
lazy var shareBtn: UIButton = {
let btn = UIButton()
btn.addTarget(self, action: #selector(share), for: .touchUpInside)
btn.setTitle("分享图片", for:.normal)
btn.setTitleColor(UIColor.mainTextColor, for: .normal)
btn.titleLabel?.font = UIFont.PFSC_M(ofSize:14)
return btn
}()
lazy var saveBtn: UIButton = {
let btn = UIButton()
btn.addTarget(self, action: #selector(save), for: .touchUpInside)
btn.setTitle("保存图片", for:.normal)
btn.setTitleColor(UIColor.mainTextColor, for: .normal)
btn.titleLabel?.font = UIFont.PFSC_M(ofSize:14)
return btn
}()
lazy var closeBtn2: UIButton = {
let btn = UIButton()
btn.addTarget(self, action: #selector(dismiss), for: .touchUpInside)
btn.setTitle("取消", for:.normal)
btn.setTitleColor(UIColor(hex: 0x909090, alpha: 1.0), for: .normal)
btn.titleLabel?.font = UIFont.PFSC_M(ofSize:14)
return btn
}()
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame: frame)
createUI()
}
static func sheetView() -> YHLongtapPictureSheetView {
let view = YHLongtapPictureSheetView(frame:UIScreen.main.bounds)
return view
}
func createUI() {
self.addSubview(blackMaskView)
self.addSubview(whiteContentView)
whiteContentView.addSubview(topView)
whiteContentView.addSubview(shareBtn)
let line = UIView()
line.backgroundColor = .separatorColor
whiteContentView.addSubview(line)
whiteContentView.addSubview(saveBtn)
let line2 = UIView()
line2.backgroundColor = .separatorColor
whiteContentView.addSubview(line2)
whiteContentView.addSubview(closeBtn2)
let corner = UIRectCorner(rawValue: UIRectCorner.topLeft.rawValue | UIRectCorner.topRight.rawValue)
let path = UIBezierPath(roundedRect:bounds,byRoundingCorners: corner,cornerRadii:CGSizeMake(16.0, 16.0));
let layer = CAShapeLayer();
layer.frame = whiteContentView.bounds;
layer.path = path.cgPath;
whiteContentView.layer.mask = layer;
blackMaskView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
let whiteHeight = calculateHeight()
whiteContentView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(whiteHeight)
}
topView.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(53)
}
shareBtn.snp.makeConstraints { make in
make.top.equalTo(topView.snp.bottom)
make.left.equalToSuperview().offset(20)
make.right.equalToSuperview().offset(-20)
make.height.equalTo(52)
}
line.snp.makeConstraints { make in
make.top.equalTo(shareBtn.snp.bottom)
make.left.equalToSuperview().offset(20)
make.right.equalToSuperview().offset(-20)
make.height.equalTo(1)
}
saveBtn.snp.makeConstraints { make in
make.top.equalTo(line.snp.bottom)
make.left.equalToSuperview().offset(20)
make.right.equalToSuperview().offset(-20)
make.height.equalTo(52)
}
line2.snp.makeConstraints { make in
make.top.equalTo(saveBtn.snp.bottom)
make.left.equalToSuperview().offset(20)
make.right.equalToSuperview().offset(-20)
make.height.equalTo(1)
}
closeBtn2.snp.makeConstraints { make in
make.top.equalTo(line2.snp.bottom)
make.left.equalToSuperview().offset(20)
make.right.equalToSuperview().offset(-20)
make.height.equalTo(52)
}
}
func calculateHeight() -> CGFloat {
// 底部四个操作行高度之和
let tableViewHeight = 52.0 * Double(self.uploadTypeArr.count) + (Double(self.uploadTypeArr.count - 1)) * 1
// 白色View总高度
var totalHeight = 52.0 + 1 + tableViewHeight + k_Height_safeAreaInsetsBottom()
return totalHeight
}
}
extension YHLongtapPictureSheetView {
func show() {
UIApplication.shared.yhKeyWindow()?.addSubview(self)
}
@objc func dismiss() {
DispatchQueue.main.async {
self.removeFromSuperview()
}
}
}
private extension YHLongtapPictureSheetView {
@objc func share() {
self.dismiss()
guard let url = URL(string: testUrl) else {
return
}
let task = URLSession.shared.dataTask(with: url) { data, response, error in
DispatchQueue.main.async {
guard let data = data, error == nil else { return }
let image = UIImage(data: data)
if let image = image {
YHShareManager.shared.sendImageContent(image)
}
}
}
task.resume()
}
@objc func save() {
saveLocalPictureSyn(testUrl)
self.dismiss()
}
func saveLocalPictureSyn(_ picUrl: String) {
let imageView = UIImageView()
imageView.kf.setImage(with: URL(string: picUrl)) { result in
switch result {
case .success(let value):
self.saveImage(value.image)
case .failure(_):
YHHUD.flash(message: "保存失败")
}
}
}
func saveImage(_ image: UIImage) {
// 确保应用有权访问相册
PHPhotoLibrary.requestAuthorization { status in
if status == .authorized {
// 保存图片到相册
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
DispatchQueue.main.async {
YHHUD.flash(message: "保存成功")
}
}
}
}
}
//
// YHPictureReviewManager.swift
// galaxy
//
// Created by davidhuangA on 2024/8/6.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import JXPhotoBrowser
import SDWebImage
class YHPictureReviewManager: NSObject {
static let shared = YHPictureReviewManager()
override init() {
super.init()
}
private var curIndex : Int = 0
private var arrPics : [String] = []
}
extension YHPictureReviewManager {
func showNetWorkPicturs(curIndex : Int,arrPicturs:[String]) {
guard curIndex > 0,arrPicturs.count > 0 else { return }
self.curIndex = curIndex
self.arrPics = arrPicturs
let browser = JXPhotoBrowser()
browser.numberOfItems = {
self.arrPics.count
}
browser.reloadCellAtIndex = { context in
let url = URL(string: self.arrPics[context.index])
let browserCell = context.cell as? JXPhotoBrowserImageCell
browserCell?.index = context.index
let placeholder = UIImage(named: "global_default_image")
browserCell?.imageView.sd_setImage(with: url, placeholderImage: placeholder, options: [], completed: { (_, _, _, _) in
browserCell?.setNeedsLayout()
})
// 添加长按事件
browserCell?.longPressedAction = { cell, _ in
self.longPress(cell: cell)
}
}
// 数字样式的页码指示器
browser.pageIndicator = JXPhotoBrowserNumberPageIndicator()
browser.pageIndex = self.curIndex
browser.show()
}
}
extension YHPictureReviewManager {
private func longPress(cell: JXPhotoBrowserImageCell) {
let view = YHLongtapPictureSheetView.sheetView()
view.show()
}
}
......@@ -114,6 +114,10 @@ class YHAllApiName {
//搜索白名单
static let bywhitelist = "infoflow/permissiondict/bywhitelist"
static let byorderid = "infoflow/order/byorderid"
//协作订单
static let assist = "infoflow/order/assist-list"
//服务首页信息
static let stage = "super-app/stage/information"
}
struct Family {
......
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "service_other_order@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "service_other_order@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
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