RoomCard.swift 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // RoomCard.swift
  3. // fiveConstant
  4. //
  5. // Created by 李建 on 2023/1/31.
  6. //
  7. import SwiftUI
  8. struct RoomCard: View {
  9. var roomData: RoomInfo
  10. @State private var rotating = false
  11. var body: some View {
  12. HStack {
  13. ZStack(alignment: .top) {
  14. RoundedRectangle(cornerRadius: 20)
  15. .fill(roomData.power! ? Color("MainColor") : Color(hex: 0xF0F5F6, alpha: 1))
  16. VStack(alignment: .leading, spacing: 40) {
  17. // 标题
  18. HStack {
  19. Text("\(roomData.name!)")
  20. .bold()
  21. Spacer()
  22. Image(systemName: roomData.power! ? "fanblades.fill": "fanblades.slash.fill").font(.title2)
  23. .foregroundColor(roomData.power! ? .white : .gray)
  24. .rotationEffect(.degrees(rotating ? 360 : 0))
  25. .onAppear {
  26. if roomData.power! {
  27. withAnimation(.linear(duration: 1).repeatForever(autoreverses: false)) {
  28. self.rotating = true
  29. }
  30. }
  31. }
  32. .onTapGesture {
  33. let data = PowerControlReq(controlNumber: roomData.control_number!, gateway: "YX-SS", power: !roomData.power!)
  34. HttpRequest<String>.loadData(target: RoomControlApi.power(data: data)) { returnData in
  35. }
  36. }
  37. }
  38. VStack(spacing: 10) {
  39. HStack {
  40. Image(systemName: "thermometer.medium")
  41. .foregroundColor(roomData.power! ? .white : Color(hex: 0xEE9898, alpha: 1))
  42. Text("\(roomData.temperature!)℃")
  43. .font(.callout)
  44. Spacer()
  45. Image(systemName: "aqi.medium")
  46. .foregroundColor(roomData.power! ? .white : Color(hex: 0xf0932b, alpha: 1))
  47. Text("\(roomData.air_quality!)")
  48. .font(.callout)
  49. }
  50. HStack{
  51. Image(systemName: "drop.fill")
  52. .foregroundColor(roomData.power! ? .white : Color(hex: 0x68B2FC, alpha: 1))
  53. Text("\(roomData.humidity!)%")
  54. .font(.callout)
  55. Spacer()
  56. Image(systemName: "carbon.dioxide.cloud")
  57. .foregroundColor(roomData.power! ? .white : Color(hex: 0x34495e, alpha: 1))
  58. Text("\(roomData.co2)")
  59. .font(.callout)
  60. }
  61. }
  62. }
  63. .foregroundColor(roomData.power! ? .white : Color("SecondColor"))
  64. .padding()
  65. }
  66. .frame(width: 160, height: 170)
  67. }
  68. }
  69. }
  70. struct RoomCard_Previews: PreviewProvider {
  71. static let json = """
  72. {"record_id":"1t7svi03170copjp9iimtd3z005isbfj","name":"样板间","home_id":"1t7svi01jj7copaplj7q47n170kd6hw6","home_name":"李建的家","is_master":true,"control_number":"1","user_id":"","power":false,"set_temp":27,"air_quality":0,"co2":0,"temperature":7,"humidity":0,"mode":2,"fan_speed":4,"fan_value":1,"timer_status":false,"duration":0}
  73. """.data(using: .utf8)!
  74. static var previews: some View {
  75. let decoder = JSONDecoder()
  76. let product = try? decoder.decode(RoomInfo.self, from: json)
  77. RoomCard(roomData: product!)
  78. }
  79. }