// // RoomCard.swift // fiveConstant // // Created by 李建 on 2023/1/31. // import SwiftUI struct RoomCard: View { var roomData: RoomInfo @State private var rotating = false var body: some View { HStack { ZStack(alignment: .top) { RoundedRectangle(cornerRadius: 20) .fill(roomData.power! ? Color("MainColor") : Color(hex: 0xF0F5F6, alpha: 1)) VStack(alignment: .leading, spacing: 40) { // 标题 HStack { Text("\(roomData.name!)") .bold() Spacer() Image(systemName: roomData.power! ? "fanblades.fill": "fanblades.slash.fill").font(.title2) .foregroundColor(roomData.power! ? .white : .gray) .rotationEffect(.degrees(rotating ? 360 : 0)) .onAppear { if roomData.power! { withAnimation(.linear(duration: 1).repeatForever(autoreverses: false)) { self.rotating = true } } } .onTapGesture { let data = PowerControlReq(controlNumber: roomData.control_number!, gateway: "YX-SS", power: !roomData.power!) HttpRequest.loadData(target: RoomControlApi.power(data: data)) { returnData in } } } VStack(spacing: 10) { HStack { Image(systemName: "thermometer.medium") .foregroundColor(roomData.power! ? .white : Color(hex: 0xEE9898, alpha: 1)) Text("\(roomData.temperature!)℃") .font(.callout) Spacer() Image(systemName: "aqi.medium") .foregroundColor(roomData.power! ? .white : Color(hex: 0xf0932b, alpha: 1)) Text("\(roomData.air_quality!)") .font(.callout) } HStack{ Image(systemName: "drop.fill") .foregroundColor(roomData.power! ? .white : Color(hex: 0x68B2FC, alpha: 1)) Text("\(roomData.humidity!)%") .font(.callout) Spacer() Image(systemName: "carbon.dioxide.cloud") .foregroundColor(roomData.power! ? .white : Color(hex: 0x34495e, alpha: 1)) Text("\(roomData.co2)") .font(.callout) } } } .foregroundColor(roomData.power! ? .white : Color("SecondColor")) .padding() } .frame(width: 160, height: 170) } } } struct RoomCard_Previews: PreviewProvider { static let json = """ {"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} """.data(using: .utf8)! static var previews: some View { let decoder = JSONDecoder() let product = try? decoder.decode(RoomInfo.self, from: json) RoomCard(roomData: product!) } }