self.tabBar.backgroundColor = .white
view.backgroundColor = .color(.bgColor)
- self.selectedIndex = 4
+ self.selectedIndex = 3
}
}
//
import UIKit
-
class CustomerVC:BaseVC{
-
+ let scrollView = UIScrollView()
+ let toolBar = SendToolBar()
+ let qaView = QaHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 160))
+ let tableView = UITableView(frame: CGRectZero, style: .plain)
+ var dataList:[FeedbackContentModel] = []
override func viewDidLoad() {
super.viewDidLoad()
- self.navBar.title = "客服"
-
}
override func setupViews() {
- navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal)
+ self.navBar.title = "客服"
+// navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal)
+
+ view.addSubviews([scrollView])
+ scrollView.addSubviews([toolBar,tableView])
+
+ tableView.do { v in
+ v.keyboardDismissMode = .onDragWithAccessory
+ v.backgroundColor = .clear
+ v.delegate = self
+ v.dataSource = self
+ v.estimatedRowHeight = 60
+ v.separatorStyle = .none
+ v.tableHeaderView = qaView
+ v.register(FeedbackContentViewCell.self, forCellReuseIdentifier: FeedbackContentViewCell.reuseID)
+ }
+ toolBar.do { v in
+ v.textField.text = ""
+ v.delegate = self
+// v.backgroundColor = .green
+ }
+ qaView.do { v in
+ v.didSelected = {[weak self] model in
+ guard let self = self else{return}
+ addModel(model)
+ }
+ }
}
override func setupLayout() {
+ scrollView.snp.makeConstraints { make in
+ make.top.equalTo(kNavBtm)
+ make.left.equalToSuperview()
+ make.height.equalTo(kScreenHei - kNavBtm - 56)
+ make.width.equalTo(kScreenWid)
+ }
+ tableView.snp.makeConstraints { make in
+ make.top.equalToSuperview()
+ make.left.equalToSuperview()
+ make.width.equalTo(kScreenWid)
+ make.height.equalTo(kScreenHei - kNavBtm - 56 - 62)
+ }
+ toolBar.snp.makeConstraints { make in
+ make.width.centerX.equalToSuperview()
+ make.height.equalTo(52)
+ make.top.equalTo(tableView.snp.bottom).offset(10)
+ make.bottom.equalToSuperview()
+ }
+ }
+ override func setupData() {
+ let api = CommomApi.qaCategory
+ HttpClient.request(api) {[weak self] (model:QaCategoryModelRoot,res) in
+ guard let self = self else {return}
+ if model.isSuccess,let item = model.data.first{
+ self.qaView.loadData(categoryId: item.id)
+ }
+ }
+ }
+ func refreshData(){
+ tableView.reloadData()
+ if dataList.count > 0 {
+ tableView.scrollToRow(at: IndexPath(row: dataList.count - 1, section: 0), at: .none, animated: true)
+ }
+ }
+ func addModel(_ model:QaModelListModel){
+ dataList.append(FeedbackContentModel(content: model.title,isSend: true))
+ dataList.append(FeedbackContentModel(content: model.content,isSend: false))
+ refreshData()
}
- override func navRightViewTapped() {
+}
+extension CustomerVC:UITableViewDelegate,UITableViewDataSource {
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return dataList.count
+ }
+
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell = FeedbackContentViewCell.cell(withTableView: tableView, indexPath: indexPath)
+ cell.data = dataList[indexPath.row]
+ return cell
+ }
+ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+
+ }
+}
+extension CustomerVC:SendToolBarDelegate{
+ func sendToolBar(_ toolBar: SendToolBar, _ text: String) {
+ toolBar.textField.resignFirstResponder()
+ dataList.append(FeedbackContentModel(content: text,isSend: true))
+ dataList.append(FeedbackContentModel(content: "请加企业微信:123456",isSend: false))
+ refreshData()
+ toolBar.textField.text = ""
+
+
+// JoyGemAIManager.shared().translate(text, from: from, to: to) {[weak self] result, finish in
+// guard let self = self else{return}
+// if !finish{
+// dataList.last!.response = dataList.last!.response + result
+// refreshData()
+// }
+//
+// } error: { error in
+//
+// }
}
}
--- /dev/null
+//
+// QaHeaderView.swift
+// ShenYin
+//
+// Created by liangshi on 2025/10/20.
+//
+
+class QaHeaderView: BaseView {
+ let bgView = UIView()
+ let titleLabel = UILabel()
+ let tableView = UITableView(frame: .zero, style: .plain)
+ let vm = FeedbackVM()
+ var didSelected:((_ model:QaModelListModel)->Void)?
+
+ override func setupViews() {
+// backgroundColor = .red
+ bgView.do { v in
+ v.backgroundColor = .white
+ v.yc.setCornerRadius(12)
+ }
+ titleLabel.do { (v) in
+ v.textColor = .rgb(0x121212)
+ v.font = .regular(18)
+ v.textAlignment = .left
+ v.lineBreakMode = .byTruncatingTail
+ v.text = "Hi," + CacheManager.shared.user.info.userName
+ }
+ tableView.do { v in
+ v.delegate = self
+ v.dataSource = self
+ v.separatorStyle = .none
+ v.estimatedRowHeight = 50
+ v.register(QaHeaderViewCell.self, forCellReuseIdentifier: QaHeaderViewCell.reuseID)
+ }
+
+ addSubviews([titleLabel,bgView])
+ bgView.addSubview(tableView)
+ }
+ override func setupLayout() {
+ titleLabel.snp.makeConstraints { make in
+ make.top.equalToSuperview().inset(20)
+ make.left.right.equalToSuperview().inset(18)
+ }
+ bgView.snp.makeConstraints { make in
+ make.left.right.equalToSuperview().inset(18)
+ make.bottom.equalToSuperview()
+ make.top.equalToSuperview().inset(60)
+ }
+
+ tableView.snp.makeConstraints { make in
+ make.left.right.equalToSuperview()
+ make.top.equalToSuperview().inset(10)
+ make.bottom.equalToSuperview().inset(10)
+ }
+ }
+
+ func loadData(categoryId:String){
+ vm.categoryId = categoryId
+ vm.refresh {[weak self] model in
+ guard let self = self else{return}
+ if model.isSuccess{
+ tableView.reloadData()
+ }
+ }
+ }
+}
+extension QaHeaderView:UITableViewDelegate,UITableViewDataSource {
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return vm.list.count
+ }
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell = QaHeaderViewCell.cell(withTableView: tableView, indexPath: indexPath)
+ cell.titleLabel.text = "\(indexPath.row + 1)." + vm.list[indexPath.row].title
+ return cell
+ }
+ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+ let data = vm.list[indexPath.row]
+ didSelected?(data)
+ }
+}
+class QaHeaderViewCell: BaseTableViewCell {
+ let titleLabel = UILabel()
+
+
+ override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+ super.init(style: style, reuseIdentifier: reuseIdentifier)
+ }
+
+ required init?(coder: NSCoder) {
+ fatalError("init(coder:) has not been implemented")
+ }
+ override func setupViews() {
+ contentView.addSubviews([titleLabel])
+
+ titleLabel.do { (v) in
+ v.textColor = .rgb(0x666666)
+ v.font = .regular(14)
+ v.textAlignment = .left
+ v.numberOfLines = 0
+ }
+ }
+
+ override func setupLayout() {
+ titleLabel.snp.makeConstraints { (m) in
+ m.top.bottom.equalToSuperview().inset(5)
+ m.left.equalToSuperview().inset(15)
+ m.right.lessThanOrEqualToSuperview().inset(10)
+ }
+ }
+
+
+}
App.shared.goToPage(vc)
}
else if data == .update{
-
+ YLprogressHUD.showAutoHiden("当前已经是最新版本")
}
}
}
class FeekbackVC:BaseVC{
let bottomView = FeedbackBottomView()
- let qaView = FeedbackQaListView()
- let contentView = FeedbackContentView()
-
+ let qaView = QaHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 160))
+ let tableView = UITableView()
+ var dataList:[FeedbackContentModel] = []
override func viewDidLoad() {
super.viewDidLoad()
override func setupViews() {
self.navBar.title = "意见反馈"
view.backgroundColor = .color(.bgColor)
- view.addSubviews([bottomView,qaView,contentView])
+ view.addSubviews([bottomView, tableView])
qaView.do { v in
v.didSelected = {[weak self] model in
v.feedbackItem.yc.addTap(target: self, action: #selector(feedbackAction))
v.chatItem.yc.addTap(target: self, action: #selector(chatAction))
}
+ tableView.do { v in
+ v.keyboardDismissMode = .onDragWithAccessory
+ v.backgroundColor = .clear
+ v.delegate = self
+ v.dataSource = self
+ v.estimatedRowHeight = 60
+ v.separatorStyle = .none
+ v.tableHeaderView = qaView
+ v.register(FeedbackContentViewCell.self, forCellReuseIdentifier: FeedbackContentViewCell.reuseID)
+ }
}
override func setupLayout() {
bottomView.snp.makeConstraints { make in
make.left.width.bottom.equalToSuperview()
make.height.equalTo(73)
}
- qaView.snp.makeConstraints { make in
- make.left.right.equalToSuperview().inset(18)
- make.height.equalTo(162)
- make.top.equalToSuperview().inset(150)
- }
- contentView.snp.makeConstraints { make in
- make.left.right.equalToSuperview().inset(18)
+
+ tableView.snp.makeConstraints { make in
+ make.left.right.equalToSuperview()
make.bottom.equalTo(bottomView.snp.top).offset(0)
- make.top.equalTo(qaView.snp.bottom).offset(20)
+ make.top.equalTo(kNavBtm)
}
}
override func setupData() {
}
}
- func addModel(_ model:QaModelListModel){
- contentView.addData(model: FeedbackContentModel(content: model.title,isSend: true))
- contentView.addData(model: FeedbackContentModel(content: model.content,isSend: false))
- }
-
@objc func feedbackAction(){
App.shared.goToPage(FeedbackCommitVC())
}
App.shared.tabController?.selectedIndex = 3
}
+
+ func refreshData(){
+ tableView.reloadData()
+ if dataList.count > 0 {
+ tableView.scrollToRow(at: IndexPath(row: dataList.count - 1, section: 0), at: .none, animated: true)
+ }
+ }
+ func addModel(_ model:QaModelListModel){
+ dataList.append(FeedbackContentModel(content: model.title,isSend: true))
+ dataList.append(FeedbackContentModel(content: model.content,isSend: false))
+ refreshData()
+ }
+}
+extension FeekbackVC:UITableViewDelegate,UITableViewDataSource {
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return dataList.count
+ }
+
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell = FeedbackContentViewCell.cell(withTableView: tableView, indexPath: indexPath)
+ cell.data = dataList[indexPath.row]
+ return cell
+ }
+ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+
+ }
}
}
}
@objc func tapAction(){
-
+ YLprogressHUD.showAutoHiden("当前已经是最新版本")
}
}
class ModeVC:BaseVC{
let bgView = UIScrollView()
let headerView = CurrentDeviceView()
- let controlView = ModeControView()
+// let controlView = ModeControView()
let effectsView = ModeEffectsView()
let findView = ModeFindView()
// navBar.rightView.setImage(UIImage(named: "add_icon"), for: .normal)
view.addSubview(bgView)
- bgView.addSubviews([headerView,controlView,effectsView,findView])
+ bgView.addSubviews([headerView,effectsView,findView])
// bgView.backgroundColor = .red
effectsView.do { v in
make.left.equalToSuperview()
make.width.equalTo(kScreenWid)
}
- controlView.snp.makeConstraints { make in
+// controlView.snp.makeConstraints { make in
+// make.top.equalTo(headerView.snp.bottom).offset(10)
+// make.centerX.equalToSuperview()
+// make.width.equalTo(kScreenWid - 36)
+// make.height.equalTo(128)
+// }
+ effectsView.snp.makeConstraints { make in
make.top.equalTo(headerView.snp.bottom).offset(10)
make.centerX.equalToSuperview()
make.width.equalTo(kScreenWid - 36)
- make.height.equalTo(128)
- }
- effectsView.snp.makeConstraints { make in
- make.top.equalTo(controlView.snp.bottom).offset(10)
- make.left.width.equalTo(controlView)
make.height.equalTo(325)
}
findView.snp.makeConstraints { make in
make.top.equalTo(effectsView.snp.bottom).offset(10)
- make.left.width.equalTo(effectsView)
+ make.centerX.equalToSuperview()
+ make.width.equalTo(kScreenWid - 36)
make.height.equalTo(62)
make.bottom.equalToSuperview().inset(20)
}