TodoTaskProcessViewController.swift 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. //
  2. // TodoTaskProcessViewController.swift
  3. // O2Platform
  4. //
  5. // Created by 刘振兴 on 16/8/5.
  6. // Copyright © 2016年 zoneland. All rights reserved.
  7. //
  8. import UIKit
  9. import Alamofire
  10. import AlamofireImage
  11. import AlamofireObjectMapper
  12. import SwiftyJSON
  13. import ObjectMapper
  14. import Eureka
  15. import Whisper
  16. import CocoaLumberjack
  17. import Promises
  18. enum TaskError: Error {
  19. case apiError(String)
  20. }
  21. class TodoTaskProcessViewController:FormViewController {
  22. @IBOutlet weak var submitButton: TaskBarButtonItem!
  23. @IBOutlet weak var taskToolbar: TaskUIToolbar!
  24. var backFlag:Int = 0
  25. var taskProcess:TaskProcess?
  26. var option:String?
  27. var ideaText:String?
  28. var mediaOpinion: String = ""
  29. override func viewDidLoad() {
  30. super.viewDidLoad()
  31. //self.tableView?.backgroundColor = UIColor.blue
  32. let continents = taskProcess?.decisonList
  33. var oneFlag = false
  34. if continents!.count == 1 {
  35. oneFlag = true
  36. }
  37. form +++ SelectableSection<ImageCheckRow<String>>() { section in
  38. section.header = HeaderFooterView(title: "选择决策")
  39. }
  40. self.option = continents?[0] ?? "无决策"
  41. for option in continents! {
  42. form.last! <<< ImageCheckRow<String>(option){ lrow in
  43. lrow.title = option
  44. lrow.selectableValue = option
  45. lrow.value = (oneFlag == true ? option : (option == self.option ? option : nil))
  46. //lrow.cell.isSelected = option == self.option
  47. }
  48. }
  49. form +++ Section("流程意见")
  50. <<< SegmentedRow<String>("segments"){
  51. $0.options = ["输入意见", "手写意见"]
  52. $0.value = "输入意见"
  53. }
  54. <<< TextAreaRow("idea") { row in
  55. row.hidden = "$segments != '输入意见'"
  56. row.placeholder = "请输入意见"
  57. row.value = self.taskProcess?.opinion ?? ""
  58. }
  59. <<< SignatureViewRow("sign") { row in
  60. row.hidden = "$segments != '手写意见'"
  61. }
  62. self.view.bringSubviewToFront(taskToolbar)
  63. }
  64. private func finishSubmit() {
  65. if self.backFlag != 1 && self.backFlag != 2 {
  66. // 门户页面跳过来的情况
  67. self.navigationController?.popToRootViewController(animated: true)
  68. }else {
  69. //原路返回
  70. self.performSegue(withIdentifier: "backTodoMe", sender: self.backFlag)
  71. }
  72. }
  73. @IBAction func submitFlowButton(_ sender: UIBarButtonItem) {
  74. DDLogDebug("submit Button Tap")
  75. guard let _ = self.option else {
  76. guard let navigationController = navigationController else { return }
  77. let message = Message(title: "请选择决策", backgroundColor: UIColor.brown)
  78. Whisper.show(whisper: message, to: navigationController)
  79. return
  80. }
  81. ProgressHUD.show("提交中...")
  82. //保存、提交
  83. self.saveTaskData().then { (result) -> Promise<String> in
  84. DDLogDebug("save task is success ....\(result)")
  85. let signRow = self.form.rowBy(tag: "sign")
  86. let signImage = (signRow as? SignatureViewRow)?.cell.signView.getSignatureImage()
  87. return self.uploadSignaturePNG(image: signImage)
  88. }.then({ (result) -> Promise<Bool> in
  89. if result != "" { // 签名上传后的id
  90. self.mediaOpinion = result
  91. }
  92. return self.submitWork()
  93. }).then { (result) in
  94. DDLogDebug("submit work is success....\(result)")
  95. DispatchQueue.main.async {
  96. ProgressHUD.showSuccess("提交成功", interaction: true)
  97. self.finishSubmit()
  98. }
  99. }.catch { (err) in
  100. DDLogError("提交异常。。。。\(err.localizedDescription)")
  101. DispatchQueue.main.async {
  102. ProgressHUD.showError("提交失败")
  103. }
  104. }
  105. }
  106. func saveTaskData() -> Promise<Bool> {
  107. DDLogDebug("保存表单数据,。。。。。。。。。")
  108. return Promise { fulfill, reject in
  109. let url = AppDelegate.o2Collect.generateURLWithAppContextKey(TaskContext.taskDataContextKey, query: TaskContext.taskDataSaveQuery, parameter: ["##id##":self.taskProcess!.workId! as AnyObject])
  110. Alamofire.request(url!,method:.put, parameters: self.taskProcess!.businessDataDict!, encoding: JSONEncoding.default, headers: nil).responseJSON { response in
  111. switch response.result {
  112. case .success(let val):
  113. let json = JSON(val)
  114. if json["type"] == "success" {
  115. fulfill(true)
  116. }else{
  117. DDLogError(json.description)
  118. reject(TaskError.apiError(json.description))
  119. }
  120. case .failure(let err):
  121. DDLogError(err.localizedDescription)
  122. reject(err)
  123. }
  124. }
  125. }
  126. }
  127. func uploadSignaturePNG(image: UIImage?) -> Promise<String> {
  128. DDLogDebug("上传签名。。。。。。。。。。。")
  129. return Promise { fulfill, reject in
  130. if image == nil {
  131. //没有签名图片 不上传
  132. DDLogDebug("没有签名图片 不上。。。。。。")
  133. fulfill("")
  134. }else {
  135. let updloadURL = AppDelegate.o2Collect.generateURLWithAppContextKey(TaskContext.taskContextKey, query: TaskContext.todoTaskUploadAttachmentQuery, parameter: ["##workId##":self.taskProcess!.workId! as AnyObject])
  136. let site = "$mediaOpinion"
  137. Alamofire.upload(multipartFormData: { (mData) in
  138. let pngData = image?.pngData()
  139. mData.append(pngData!, withName: "file", fileName: "signature.png", mimeType: "application/octet-stream")
  140. let siteData = site.data(using: String.Encoding.utf8, allowLossyConversion: false)
  141. mData.append(siteData!, withName: "site")
  142. }, to: updloadURL!, encodingCompletion: { (encodingResult) in
  143. switch encodingResult {
  144. case .success(let upload, _, _):
  145. upload.responseJSON {
  146. respJSON in
  147. switch respJSON.result {
  148. case .success(let val):
  149. let attachId = JSON(val)["data"]["id"].string!
  150. DDLogDebug("上传签名成功。。。id:\(attachId)")
  151. fulfill(attachId)
  152. case .failure(let err):
  153. reject(err)
  154. break
  155. }
  156. }
  157. case .failure(let errType):
  158. reject(errType)
  159. }
  160. })
  161. }
  162. }
  163. }
  164. func submitWork() -> Promise<Bool> {
  165. return Promise { fulfill, reject in
  166. self.taskProcess?.decisionRoute = self.option
  167. self.taskProcess?.decisionIdea = self.ideaText ?? ""
  168. var params:[String:String] = [:]
  169. params["routeName"]=self.option
  170. params["opinion"]=self.ideaText ?? ""
  171. params["mediaOpinion"] = self.mediaOpinion
  172. let url = AppDelegate.o2Collect.generateURLWithAppContextKey(TaskContext.taskContextKey, query: TaskContext.todoTaskSaveAndSubmitQuery, parameter: ["##id##":(self.taskProcess?.taskId)! as AnyObject])
  173. Alamofire.request(url!,method:.post, parameters: params, encoding:JSONEncoding.default, headers: nil).responseJSON { response in
  174. switch response.result {
  175. case .success(let val):
  176. let json = JSON(val)
  177. if json["type"] == "success" {
  178. fulfill(true)
  179. }else{
  180. DDLogError(json.description)
  181. reject(TaskError.apiError(json.description))
  182. }
  183. case .failure(let err):
  184. DDLogError(err.localizedDescription)
  185. reject(err)
  186. }
  187. }
  188. }
  189. }
  190. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  191. if segue.identifier == "backTodoMe" {
  192. let destVC = segue.destination as! TodoTaskDetailViewController
  193. destVC.backFlag = backFlag
  194. }
  195. }
  196. /**
  197. 自动监测各行变化的值
  198. - parameter row: row
  199. - parameter oldValue: 旧值
  200. - parameter newValue: 新值
  201. */
  202. override func valueHasBeenChanged(for row: BaseRow, oldValue: Any?, newValue: Any?) {
  203. DDLogDebug("oldValue = \(String(describing: oldValue)),newValue=\(String(describing: newValue))")
  204. if row.section == form[0] {
  205. //if newValue != nil {
  206. self.option = newValue as? String
  207. //}
  208. }
  209. if row.section == form[1] {
  210. if row.tag == "idea" {
  211. self.ideaText = newValue as? String
  212. }
  213. if row.tag == "segments" {
  214. DDLogDebug("切换。。。。。。。。。")
  215. let key = newValue as? String
  216. if key == "输入意见" {
  217. let signRow = form.rowBy(tag: "sign") as? SignatureViewRow
  218. signRow?.cell.signView.clearSignature()
  219. self.tableView.isScrollEnabled = true
  220. }else if key == "手写意见" {
  221. let editRow = form.rowBy(tag: "idea") as? TextAreaRow
  222. editRow?.value = ""
  223. self.tableView.isScrollEnabled = false
  224. }
  225. }
  226. }
  227. }
  228. }