From aa413c744a41ccf7bd2dd3017e4f682d103f7471 Mon Sep 17 00:00:00 2001 From: liangzhenying <867174124@qq.com> Date: Wed, 5 Nov 2025 15:14:10 +0800 Subject: [PATCH] =?utf8?q?=E5=BD=95=E9=9F=B3=E8=AF=A6=E6=83=85=E4=BF=AE?= =?utf8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../HistoryRecord/CloudHistoryRecordVC.swift | 142 -------------- .../UI/Home/HistoryRecord/HistoryFontVC.swift | 80 -------- .../HistoryRecord/HistoryRecordShareVC.swift | 182 ------------------ .../Home/HistoryRecord/HistoryRecordVC.swift | 91 --------- .../HistoryRecord/VC/HistoryRecordVC.swift | 166 ++++++++++++++++ .../UI/Mine/Login/ViewModel/UserInfo.swift | 54 ------ .../UI/Mine/Login/ViewModel/UserModel.swift | 65 ------- .../UI/common/Cache/CacheManager.swift | 98 ---------- .../ShenYin/UI/common/Cache/FontCache.swift | 19 -- .../ShenYin/UI/common/Cache/RecordCache.swift | 43 ----- .../UI/common/Cache/RecordDetailModel.swift | 97 ---------- .../ShenYin/UI/common/Cache/TipsCache.swift | 22 --- 12 files changed, 166 insertions(+), 893 deletions(-) delete mode 100644 ShenYin/ShenYin/UI/Home/HistoryRecord/CloudHistoryRecordVC.swift delete mode 100644 ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryFontVC.swift delete mode 100644 ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryRecordShareVC.swift delete mode 100644 ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryRecordVC.swift create mode 100644 ShenYin/ShenYin/UI/Home/HistoryRecord/VC/HistoryRecordVC.swift delete mode 100644 ShenYin/ShenYin/UI/Mine/Login/ViewModel/UserInfo.swift delete mode 100644 ShenYin/ShenYin/UI/Mine/Login/ViewModel/UserModel.swift delete mode 100644 ShenYin/ShenYin/UI/common/Cache/CacheManager.swift delete mode 100644 ShenYin/ShenYin/UI/common/Cache/FontCache.swift delete mode 100644 ShenYin/ShenYin/UI/common/Cache/RecordCache.swift delete mode 100644 ShenYin/ShenYin/UI/common/Cache/RecordDetailModel.swift delete mode 100644 ShenYin/ShenYin/UI/common/Cache/TipsCache.swift diff --git a/ShenYin/ShenYin/UI/Home/HistoryRecord/CloudHistoryRecordVC.swift b/ShenYin/ShenYin/UI/Home/HistoryRecord/CloudHistoryRecordVC.swift deleted file mode 100644 index 9821b11..0000000 --- a/ShenYin/ShenYin/UI/Home/HistoryRecord/CloudHistoryRecordVC.swift +++ /dev/null @@ -1,142 +0,0 @@ -// -// CloudHistoryRecordVC.swift -// ShenYin -// -// Created by liangshi on 2025/10/25. -// - - -import UIKit -import MJRefresh -class CloudHistoryRecordVC: BaseVC{ - let tableView = UITableView(frame: .zero, style: .plain) - let vm = HistoryRecordVM() - var list = [RecordHistoryModel]() - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view. - } - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - tableView.reloadData() - } - override func setupViews() { - navBar.do { v in - v.title = "云存储空间" - let items = [NavigationRightItem(image: UIImage(named: "filter"),target: self, action: #selector(filterAction)),NavigationRightItem(image: UIImage(named: "search"), target: self,action: #selector(searchAction))] - v.setupRightViews(items) - } - - tableView.do { v in - v.backgroundColor = .rgb(0xF7F7F7) - v.delegate = self - v.dataSource = self - v.estimatedRowHeight = 84 - v.separatorStyle = .none - v.register(HistoryRecordCell.self, forCellReuseIdentifier: HistoryRecordCell.reuseID) - v.mj_header = MJRefreshNormalHeader(refreshingTarget: self, refreshingAction: #selector(refreshAction)) - v.mj_footer = MJRefreshBackNormalFooter(refreshingTarget: self, refreshingAction: #selector(loadMoreAction)) - } - view.addSubviews([tableView]) - } - override func setupLayout() { - tableView.snp.makeConstraints { make in - make.left.right.equalToSuperview() - make.top.equalTo(kNavBtm) - make.bottom.equalToSuperview() - } - } - override func setupData() { - refreshAction() - } - @objc func searchAction(){ - - } - @objc func filterAction(){ - let list = FiltterRecordType.alls.map({$0.title}) - let v = CustomPicker(title: "筛选录音", list:list ) - v.selectedIndex = list.firstIndex(where: {vm.type.title == $0})! - v.show() - v.didSelected = {[weak self] (index,value) in - guard let self = self else { return } - vm.type = FiltterRecordType.alls.first(where: {$0.title == value})! - tableView.mj_header?.beginRefreshing() - } - } - @objc func refreshAction(){ - vm.refresh {[weak self] result in - guard let self = self else {return} - tableView.mj_header?.endRefreshing() - if result.success{ - tableView.reloadData() - } - - if result.success,result.data.hasNext == false{ - tableView.mj_footer?.endRefreshingWithNoMoreData() - } - else{ - tableView.mj_footer?.endRefreshing() - } - } - } - @objc func loadMoreAction(){ - vm.loadMore {[weak self] result in - guard let self = self else {return} - if result.success{ - tableView.reloadData() - } - } - } -} - -extension CloudHistoryRecordVC:UITableViewDelegate,UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return vm.list.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = HistoryRecordCell.cell(withTableView: tableView, indexPath: indexPath) - cell.model = vm.list[indexPath.row] - return cell - } - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let data = vm.list[indexPath.row] - let vc = RecordDetailVC(remoteData: data) - vc.delegateCallback = {[weak self] in - guard let self = self else{return} - vm.list.removeAll(where: {data === $0}) - tableView.reloadData() - } - App.shared.goToPage(vc) -// let api = CommomApi.getVoiceRecord(recordId: data.id) -// HttpClient.request(api) {[weak self] (result:RecordHistoryDetailRoot,res) in -// guard let self = self else {return} -// if result.isSuccess{ -// let model = RecordDetailModel() -// model.type = .translate -// model.origin = result.data.summary -// model.translate = "" -// model.path = result.data.fileId -// model.name = result.data.name -// App.shared.goToPage(RecordDetailVC(record: model)) -// } -// } - - - } - // 实现滑动删除功能 - func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { - if editingStyle == .delete { - // 从数据源中移除对应数据 - vm.list.remove(at: indexPath.row) - // 从表格中删除对应行 - tableView.deleteRows(at: [indexPath], with:.fade) - } - } - - // 允许编辑 - func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { - return true - } -} diff --git a/ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryFontVC.swift b/ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryFontVC.swift deleted file mode 100644 index 81ed008..0000000 --- a/ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryFontVC.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// HistoryFontVC.swift -// ShenYin -// -// Created by liangshi on 2025/8/13. -// - -import UIKit -class HistoryFontVC: BaseVC{ - let tableView = UITableView(frame: .zero, style: .plain) - var list:[FontType] = [.min,.stand,.big] - var currentType = FontCache.getFont() - let btn = CustomButton() - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view. - } - override func setupViews() { - self.navBar.title = "调整字号" - tableView.do { v in - v.backgroundColor = .rgb(0xF7F7F7) - v.delegate = self - v.dataSource = self - v.rowHeight = 52 - v.separatorStyle = .none - v.contentInset = UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0) - v.register(SelectCell.self, forCellReuseIdentifier: SelectCell.reuseID) - } - view.addSubviews([tableView,btn]) - - btn.set(title: "设置", target: self, action: #selector(btnAction)) - } - override func setupLayout() { - tableView.snp.makeConstraints { make in - make.left.right.bottom.equalToSuperview() - make.top.equalTo(kNavBtm) - } - btn.snp.makeConstraints { make in - make.width.equalTo(272) - make.height.equalTo(46) - make.centerX.equalToSuperview() - make.bottom.equalToSuperview().inset(82) - } - } - @objc func btnAction(){ - FontCache.saveFont(type: currentType) - self.navigationController?.popViewController(animated: true) - } -} - -extension HistoryFontVC:UITableViewDelegate,UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return list.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = SelectCell.cell(withTableView: tableView, indexPath: indexPath) - cell.fontType = list[indexPath.row] - let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52) - if indexPath.row == 0 { - cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 8, height: 8)) - } - else if indexPath.row == list.count - 1{ - cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: 8, height: 8)) - } - else{ - cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0)) - } - cell.selectedIcon.isHidden = cell.fontType != currentType - return cell - } - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let data = list[indexPath.row] - currentType = data - tableView.reloadData() - } -} - - diff --git a/ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryRecordShareVC.swift b/ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryRecordShareVC.swift deleted file mode 100644 index f697724..0000000 --- a/ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryRecordShareVC.swift +++ /dev/null @@ -1,182 +0,0 @@ -// -// HistoryRecordShareVC.swift -// ShenYin -// -// Created by liangshi on 2025/8/13. -// - -import UIKit -class HistoryRecordShareVC: BaseVC{ - let tableView = UITableView(frame: .zero, style: .plain) - var list:[ShareType] = [.audio_document,.audio,.document] - var currentType = ShareType.audio_document - let btn = CustomButton() - - let recordModel:RecordDetailModel - - init(record model: RecordDetailModel,fileId:String?) { - self.recordModel = model - super.init() - if let id = fileId { - loadFile(filedId: id) - } - } - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view. - } - override func setupViews() { - self.navBar.title = "分享" - tableView.do { v in - v.backgroundColor = .rgb(0xF7F7F7) - v.delegate = self - v.dataSource = self - v.rowHeight = 52 - v.contentInset = UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0) - v.separatorStyle = .none - v.register(SelectCell.self, forCellReuseIdentifier: SelectCell.reuseID) - v.tableHeaderView = ShareHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 70)) - } - view.addSubviews([tableView,btn]) - - btn.set(title: "导出", target: self, action: #selector(btnAction)) - } - override func setupLayout() { - tableView.snp.makeConstraints { make in - make.left.right.bottom.equalToSuperview() - make.top.equalTo(kNavBtm) - } - btn.snp.makeConstraints { make in - make.width.equalTo(272) - make.height.equalTo(46) - make.centerX.equalToSuperview() - make.bottom.equalToSuperview().inset(82) - } - } - - override func setupData() { - - } - func loadFile(filedId id:String){ - let api = CommomApi.recordUrl(filedId: id) - HttpClient.request(api) {[weak self] (model:CommonDataModel,res) in - guard let self = self else {return} - if model.isSuccess{ - startDownload(url: model.data) - } - } - } - func startDownload(url:String){ - // let url = "https://dc-cloud-priv.tos-cn-guangzhou.volces.com/music-file/2025_10_09/1976135290430767105.mp3" - HttpClient.download(url: url,type: "wav"){[weak self] result in - guard let self = self else {return} - if let path = result{ - recordModel.path = path - } - } - } - - @objc func btnAction(){ - if currentType == .audio { - if recordModel.path.isNotEmpty { - saveFile(filePath: recordModel.path) - } - - } - else if currentType == .document{ - guard let path = FileSaver.saveStringAsTxt(recordModel.origin) else { - return - } - saveFile(filePath: path) - } - else{ - - guard let orginPath = FileSaver.saveStringAsTxt(recordModel.origin) else { - return - } - var list = [orginPath] - if recordModel.path.isNotEmpty { - list.append(recordModel.path) - } - - if recordModel.translate.count > 0,let path = FileSaver.saveStringAsTxt(recordModel.translate) { - list.append(path) - } - if recordModel.summary.count > 0,let path = FileSaver.saveStringAsTxt(recordModel.summary) { - list.append(path) - } - guard let path = FileSaver.zipFiles(files: list) else { return } - - saveFile(filePath: path) - } - - } -} -extension HistoryRecordShareVC:UIDocumentPickerDelegate{ - //保存文件到手机文件指定目录 - func saveFile(filePath:String) { - let fUrl = NSURL(fileURLWithPath: filePath) - let vc = UIDocumentPickerViewController(url: fUrl as URL, in: .exportToService); - vc.delegate = self - vc.modalPresentationStyle = .overFullScreen - self.present(vc, animated: true) - } - public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { - controller.dismiss(animated: true) - } -} - -extension HistoryRecordShareVC:UITableViewDelegate,UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return list.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = SelectCell.cell(withTableView: tableView, indexPath: indexPath) - cell.shareType = list[indexPath.row] - let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52) - if indexPath.row == 0 { - cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 8, height: 8)) - } - else if indexPath.row == list.count - 1{ - cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: 8, height: 8)) - } - else{ - cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0)) - } - cell.selectedIcon.isHidden = cell.shareType != currentType - return cell - } - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let data = list[indexPath.row] - currentType = data - tableView.reloadData() - } -} - -class ShareHeaderView: BaseView { - let titleLabel = UILabel() - - override func setupViews() { - addSubviews([titleLabel]) - titleLabel.do { (v) in - v.textColor = .hexString("#666666") - v.font = .regular(14) - v.numberOfLines = 0 - - let text = "多个文件将压缩成一个.zip的文件以便于分享。请选择您需要导出的文件类型:" - let textString = NSAttributedString(string: text) - let mutableAttributedString = NSMutableAttributedString() - mutableAttributedString.append(textString) - v.attributedText = mutableAttributedString - } - } - - override func setupLayout() { - titleLabel.snp.makeConstraints { make in - make.left.right.equalToSuperview().inset(18) - make.top.equalToSuperview() - make.bottom.equalToSuperview() - } - } -} diff --git a/ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryRecordVC.swift b/ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryRecordVC.swift deleted file mode 100644 index e7ba7ce..0000000 --- a/ShenYin/ShenYin/UI/Home/HistoryRecord/HistoryRecordVC.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// HistoryRecordVC.swift -// ShenYin -// -// Created by liangshi on 2025/8/6. -// - - -import UIKit -class HistoryRecordVC: BaseVC{ - let tableView = UITableView(frame: .zero, style: .plain) -// let bottomView = HistoryBottonView() - var list = [RecordDetailModel]() - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view. - } - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - tableView.reloadData() - } - override func setupViews() { - navBar.do { v in - v.title = "历史记录" - let items = [NavigationRightItem(image: UIImage(named: "filter"),target: self, action: #selector(filterAction)),NavigationRightItem(image: UIImage(named: "search"), target: self,action: #selector(searchAction))] - v.setupRightViews(items) - } - - tableView.do { v in - v.backgroundColor = .rgb(0xF7F7F7) - v.delegate = self - v.dataSource = self - v.estimatedRowHeight = 84 - v.separatorStyle = .none - v.register(HistoryRecordCell.self, forCellReuseIdentifier: HistoryRecordCell.reuseID) - } - view.addSubviews([tableView]) - } - override func setupLayout() { -// bottomView.snp.makeConstraints { make in -// make.left.right.bottom.equalToSuperview() -// } - tableView.snp.makeConstraints { make in - make.left.right.equalToSuperview() - make.top.equalTo(kNavBtm) - make.bottom.equalToSuperview() - } - } - override func setupData() { - list = RecordCache.shared.getList() - list = list.sorted(by: {$0.createTime > $1.createTime}) - tableView.reloadData() - } - @objc func searchAction(){ - - } - @objc func filterAction(){ - - } -} - -extension HistoryRecordVC:UITableViewDelegate,UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return list.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = HistoryRecordCell.cell(withTableView: tableView, indexPath: indexPath) - cell.localModel = list[indexPath.row] - return cell - } - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let data = list[indexPath.row] - App.shared.goToPage(RecordDetailVC(record: data,needFrontVC:true)) - } - // 实现滑动删除功能 - func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { - if editingStyle == .delete { - // 从数据源中移除对应数据 - list.remove(at: indexPath.row) - // 从表格中删除对应行 - tableView.deleteRows(at: [indexPath], with:.fade) - } - } - - // 允许编辑 - func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { - return true - } -} diff --git a/ShenYin/ShenYin/UI/Home/HistoryRecord/VC/HistoryRecordVC.swift b/ShenYin/ShenYin/UI/Home/HistoryRecord/VC/HistoryRecordVC.swift new file mode 100644 index 0000000..2079f98 --- /dev/null +++ b/ShenYin/ShenYin/UI/Home/HistoryRecord/VC/HistoryRecordVC.swift @@ -0,0 +1,166 @@ +// +// HistoryRecordVC.swift +// ShenYin +// +// Created by liangshi on 2025/8/6. +// + + +import UIKit +class HistoryRecordVC: BaseVC{ + let tableView = UITableView(frame: .zero, style: .plain) +// let bottomView = HistoryBottonView() + var list = [RecordDetailModel]() + var filtterType = FiltterRecordType.all + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + tableView.reloadData() + } + override func setupViews() { + navBar.do { v in + v.title = "历史记录" + let items = [NavigationRightItem(image: UIImage(named: "filter"),target: self, action: #selector(filterAction)),NavigationRightItem(image: UIImage(named: "search"), target: self,action: #selector(searchAction))] + v.setupRightViews(items) + } + + tableView.do { v in + v.backgroundColor = .rgb(0xF7F7F7) + v.delegate = self + v.dataSource = self + v.estimatedRowHeight = 84 + v.separatorStyle = .none +// v.isEditing = true + v.register(HistoryRecordCell.self, forCellReuseIdentifier: HistoryRecordCell.reuseID) + } + view.addSubviews([tableView]) + } + override func setupLayout() { + tableView.snp.makeConstraints { make in + make.left.right.equalToSuperview() + make.top.equalTo(kNavBtm) + make.bottom.equalToSuperview() + } + } + override func setupData() { + var cacheList = RecordCache.shared.getList() + cacheList = cacheList.sorted(by: {$0.createTime > $1.createTime}) + if filtterType == .all { + list = cacheList + } + else if filtterType == .colletion{ + list = cacheList.filter({$0.favorite == "1"}) + } + else { + list = cacheList.filter({$0.type == RecordType(rawValue: filtterType.rawValue)}) + } + tableView.reloadData() + } + @objc func searchAction(){ + + } + @objc func filterAction(){ + let list = FiltterRecordType.alls.map({$0.title}) + let v = CustomPicker(title: "筛选录音", list:list ) + v.selectedIndex = list.firstIndex(where: {filtterType.title == $0})! + v.show() + v.didSelected = {[weak self] (index,value) in + guard let self = self else { return } + filtterType = FiltterRecordType.alls.first(where: {$0.title == value})! + setupData() + } + } + func longpressAction(cell:HistoryRecordCell){ + let window = App.shared.window + let rect = cell.superview!.convert(cell.frame, to: window) + let top = CGRectGetMaxY(rect) + Logger.debug(rect,top) + + let model = cell.localModel! + + let v = RecordPopView() + v.contentTop = top + v.show() + v.hidenCallback = { + cell.bgView.backgroundColor = .white + } + v.shareCallback = { + App.shared.goToPage(RecordShareVC(localList: [model])) + } + v.renameCallback = {[weak self] in + let v = PopTextField() + v.textFiled.text = model.name + v.cancelButton.setTitle("取消", for: .normal) + v.show() + v.cancelTap = { + + } + v.okTap = { [weak self] text in + guard let self = self else{return} + model.name = text + RecordCache.shared.add(model) + tableView.reloadData() + } + } + v.deleteCallback = {[weak self] in + self?.deleteAction(model) + } + v.selectedCallback = { [weak self] in + guard let self = self else{return} + let vc = HistorySelectedVC(data: list) + vc.deleteCallback = { [weak self] deleteList in + guard let self = self else{return} + for item in deleteList{ + list.removeAll(where: {$0.createTime == item.createTime}) + } + tableView.reloadData() + } + App.shared.goToPage(vc,animated: false) + } + } + func deleteAction(_ model:RecordDetailModel){ + CustomAlert.showWith(title: "您要删除这条录音吗?", messgage: "删除后,此记录将无法恢复。", cancelCallback: {}) {[weak self] in + guard let self = self else{return} + list.removeAll(where: {$0 === model}) + RecordCache.shared.remove(model) + tableView.reloadData() + } + } +} + +extension HistoryRecordVC:UITableViewDelegate,UITableViewDataSource { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return list.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = HistoryRecordCell.cell(withTableView: tableView, indexPath: indexPath) + cell.localModel = list[indexPath.row] + cell.longPressCallback = {[weak self] cell in + self?.longpressAction(cell: cell) + } + return cell + } + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let data = list[indexPath.row] + App.shared.goToPage(RecordDetailVC(record: data,needFrontVC:true)) + } + // 实现滑动删除功能 + func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { + if editingStyle == .delete { + // 从数据源中移除对应数据 + list.remove(at: indexPath.row) + // 从表格中删除对应行 + tableView.deleteRows(at: [indexPath], with:.fade) + } + } + + // 允许编辑 + func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + return true + } +} diff --git a/ShenYin/ShenYin/UI/Mine/Login/ViewModel/UserInfo.swift b/ShenYin/ShenYin/UI/Mine/Login/ViewModel/UserInfo.swift deleted file mode 100644 index ff31390..0000000 --- a/ShenYin/ShenYin/UI/Mine/Login/ViewModel/UserInfo.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// Untitled.swift -// ShenYin -// -// Created by liangshi on 2025/9/29. -// -import HandyJSON - -enum GenderType:String,HandyJSONEnum{ - case man = "1" - case female = "0" - case unnkown = "2" - var title:String{ - switch self { - case .man: - return "男" - case .female: - return "女" - case .unnkown: - return "保密" - } - } -} - - -class UserInfoRoot:ResponseBaseModel { - var data = UserInfo() -} - -class UserInfo:ResponseBaseModel { - var id = "" - var avatar = "" - var userName = "" - var createTime = "" - var phone = "" - var state = "1" - var gender = GenderType.unnkown - var verify = false - var countryName = "" - var countryId = "" - var email = "" - -// var genderText:String{ -// if gender == 1 { -// return "男" -// } -// else if gender == 0 { -// return "女" -// } -// else{ -// return "保密" -// } -// } -} diff --git a/ShenYin/ShenYin/UI/Mine/Login/ViewModel/UserModel.swift b/ShenYin/ShenYin/UI/Mine/Login/ViewModel/UserModel.swift deleted file mode 100644 index e7e9d08..0000000 --- a/ShenYin/ShenYin/UI/Mine/Login/ViewModel/UserModel.swift +++ /dev/null @@ -1,65 +0,0 @@ -// -// UserModel.swift -// ShenYin -// -// Created by liangshi on 2025/7/30. -// -class StorageSizeModel:ResponseBaseModel { - var data:Int = 0 -} - - -class UserModel { - static let cacheKey = "Login" - var token:String? { - didSet{ - saveToken(text: token) - } - } - var isLogin:Bool{ - return token != nil - } - func loadCache(){ - self.token = getToken() - if self.token != nil { - } - } - - var storageSize = 0 - var info = UserInfo() -} - -extension UserModel{ - func getStorageSize(completion:@escaping (_ result:StorageSizeModel) ->Void){ - HttpClient.request(.storageSize) { [weak self](result:StorageSizeModel,res) in - guard let self = self else{return} - if result.isSuccess{ - storageSize = result.data - } - completion(result) - } - } -} - - - - -extension UserModel{ - private func getToken()->String?{ - if let value = UserDefaults.standard.value(forKey: UserModel.cacheKey),let token = value as? String{ - return token - } - return nil - - } - private func saveToken(text:String?){ - if let text = text { - UserDefaults.standard.set(text, forKey: UserModel.cacheKey) - UserDefaults.standard.synchronize() - } - else{ - UserDefaults.standard.removeObject(forKey: UserModel.cacheKey) - UserDefaults.standard.synchronize() - } - } -} diff --git a/ShenYin/ShenYin/UI/common/Cache/CacheManager.swift b/ShenYin/ShenYin/UI/common/Cache/CacheManager.swift deleted file mode 100644 index 9a0b2c2..0000000 --- a/ShenYin/ShenYin/UI/common/Cache/CacheManager.swift +++ /dev/null @@ -1,98 +0,0 @@ -// -// c.swift -// ShenYin -// -// Created by liangshi on 2025/9/11. -// -import CoreBluetooth - -class CacheManager{ - static let shared = CacheManager() -// var currentDevice:DeviceModel? -// -// func saveDevice(_ device: DeviceModel) { -// self.currentDevice = device -// DeviceCache.shared.saveDevice(device) -// } - - var user = UserModel() - - init(){ - user.loadCache() - if user.isLogin{ - tokenIsValid() - } - - } -} - -extension CacheManager{ - func login(token:String){ - user.token = token - NotificationManager.post(type: .login, objtect: nil) - - } - func logout(){ - user.token = nil - NotificationManager.post(type: .logout, objtect: nil) - App.shared.goToLogin() - } - func tokenIsValid(finished: (() -> Void)? = nil){ - HttpClient.request(CommomApi.token) { [weak self](model:UserInfoRoot,res) in - guard let self = self else{return} - if model.isSuccess{ - user.info = model.data - } - else{ - logout() - } - finished?() - } - } -} - - -extension CacheManager{ - static func uuid()->String{ - if let value = UserDefaults.standard.value(forKey: "uuid"),let uuid = value as? String{ - return uuid - } - let uuid = UUID().uuidString - UserDefaults.standard.setValue(uuid, forKey: "uuid") - UserDefaults.standard.synchronize() - return uuid - } -} - - -extension CacheManager{ - static func saveImg(_ img:UIImage)->String?{ - guard let data = img.pngData() else{ - return nil - } - - let filePath = getCacheDirectoryPath()! + "/\(Date().timeIntervalSince1970).png" - return saveToFile(data: data, filePath: filePath) - } - static func saveToFile(data:Data,filePath:String)->String?{ - let url = URL(fileURLWithPath: filePath) - do { - try data.write(to: url) - return filePath - } catch { - Logger.debug("Error saving compressed data: \(error)") - return nil - } - } - - // 获取应用沙盒中的缓存目录路径 - static func getCacheDirectoryPath() -> String? { - // 获取缓存目录的URL - if let cacheURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first { - // 转换为路径字符串 - return cacheURL.path - } - return nil - } -} - diff --git a/ShenYin/ShenYin/UI/common/Cache/FontCache.swift b/ShenYin/ShenYin/UI/common/Cache/FontCache.swift deleted file mode 100644 index 36f1c61..0000000 --- a/ShenYin/ShenYin/UI/common/Cache/FontCache.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// FontCache.swift -// ShenYin -// -// Created by liangshi on 2025/10/24. -// - -class FontCache{ - static func saveFont(type:FontType){ - UserDefaults.standard.set(type.rawValue, forKey: "FontCache") - UserDefaults.standard.synchronize() - } - static func getFont()->FontType{ - if let value = UserDefaults.standard.value(forKey: "FontCache"),let font = value as? Int { - return FontType(rawValue: font) ?? .stand - } - return FontType.stand - } -} diff --git a/ShenYin/ShenYin/UI/common/Cache/RecordCache.swift b/ShenYin/ShenYin/UI/common/Cache/RecordCache.swift deleted file mode 100644 index f8e214d..0000000 --- a/ShenYin/ShenYin/UI/common/Cache/RecordCache.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// RecordCache.swift -// ShenYin -// -// Created by liangshi on 2025/10/24. -// - -class RecordCache { - static let shared = RecordCache() - private let userDefaults = UserDefaults.standard - private let deviceListKey = "deviceListKey" - - func add(_ device: RecordDetailModel) { - var deviceList = getList() - if let index = deviceList.firstIndex(where: { $0.createTime == device.createTime }) { - deviceList[index] = device - } - else{ - deviceList.append(device) - } - let encoder = NSKeyedArchiver.archivedData(withRootObject: deviceList) - userDefaults.set(encoder, forKey: deviceListKey) - userDefaults.synchronize() - } - func remove(_ device: RecordDetailModel) { - var deviceList = getList() - if let index = deviceList.firstIndex(where: { $0.createTime == device.createTime }) { - deviceList.remove(at: index) - } - - let encoder = NSKeyedArchiver.archivedData(withRootObject: deviceList) - userDefaults.set(encoder, forKey: deviceListKey) - userDefaults.synchronize() - } - - func getList() -> [RecordDetailModel] { - if let data = userDefaults.data(forKey: deviceListKey), - let deviceList = NSKeyedUnarchiver.unarchiveObject(with: data) as? [RecordDetailModel] { - return deviceList - } - return [] - } -} diff --git a/ShenYin/ShenYin/UI/common/Cache/RecordDetailModel.swift b/ShenYin/ShenYin/UI/common/Cache/RecordDetailModel.swift deleted file mode 100644 index 04e0f1a..0000000 --- a/ShenYin/ShenYin/UI/common/Cache/RecordDetailModel.swift +++ /dev/null @@ -1,97 +0,0 @@ -// -// RecordDetailModel.swift -// ShenYin -// -// Created by liangshi on 2025/10/23. -// -import HandyJSON - -enum FiltterRecordType:String,HandyJSONEnum{ - case present = "present" - case phone = "phone" - case translate = "translate" - case all = "all" - case colletion = "colletion" - - var title:String{ - switch self { - case .present: - return "现场录音" - case .phone: - return "通话录音" - case .translate: - return "同传听译" - case .all: - return "全部录音" - case .colletion: - return "收藏录音" - } - } - static var alls:[FiltterRecordType]{ - return [.all,.colletion,.present,.phone,.translate] - } -} - -enum RecordType:String,HandyJSONEnum{ - case present = "present" - case phone = "phone" - case translate = "translate" - - var title:String{ - switch self { - case .present: - return "现场录音" - case .phone: - return "通话录音" - case .translate: - return "同传听译" - } - } -} - -class RecordDetailModel:NSObject, NSCoding{ - func encode(with coder: NSCoder) { - coder.encode(from.rawValue, forKey: "from") - coder.encode(to.rawValue, forKey: "to") - coder.encode(type.rawValue, forKey: "type") - coder.encode(origin, forKey: "origin") - coder.encode(translate, forKey: "translate") - coder.encode(summary, forKey: "summary") - coder.encode(path, forKey: "path") - coder.encode(name, forKey: "name") - coder.encode("\(duration)", forKey: "duration") - coder.encode(createTime, forKey: "createTime") - coder.encode(favorite, forKey: "favorite") - } - override init() { - createTime = Date().format(.full) - } - - required init?(coder: NSCoder) { - from = AiSupportLanguage(rawValue: coder.decodeObject(forKey: "from") as! String) ?? .chinse - to = AiSupportLanguage(rawValue: coder.decodeObject(forKey: "to") as! String) ?? .english - type = RecordType(rawValue: coder.decodeObject(forKey: "type") as! String) ?? .present - origin = coder.decodeObject(forKey: "origin") as? String ?? "" - translate = coder.decodeObject(forKey: "translate") as? String ?? "" - summary = coder.decodeObject(forKey: "summary") as? String ?? "" - path = coder.decodeObject(forKey: "path") as? String ?? "" - name = coder.decodeObject(forKey: "name") as? String ?? "" - duration = Int(coder.decodeObject(forKey: "duration") as! String) ?? 0 - createTime = coder.decodeObject(forKey: "createTime") as? String ?? "" - favorite = coder.decodeObject(forKey: "favorite") as? String ?? "" - } - var type:RecordType = .present - var from:AiSupportLanguage = .chinse - var to:AiSupportLanguage = .english - var path = "" - var name = "" - var duration = 0 - var createTime = "" - var origin = "" - - var translate = "" - var summary = "" - var favorite = "0" - - -} diff --git a/ShenYin/ShenYin/UI/common/Cache/TipsCache.swift b/ShenYin/ShenYin/UI/common/Cache/TipsCache.swift deleted file mode 100644 index c8958a2..0000000 --- a/ShenYin/ShenYin/UI/common/Cache/TipsCache.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// TipsCache.swift -// ShenYin -// -// Created by liangshi on 2025/9/26. -// - - - - -class TipsCache{ - static func needShow(type:RecordTipsType,show:Bool){ - UserDefaults.standard.set(show, forKey: type.title) - UserDefaults.standard.synchronize() - } - static func needShow(type:RecordTipsType)->Bool{ - if let value = UserDefaults.standard.value(forKey: type.title){ - return value as? Bool ?? false - } - return true - } -} -- 2.17.1