import SwiftUI struct SendMessageFormView: View { @Environment(\.dismiss) private var dismiss @ObservedObject var model: MessagesViewModel @State private var phoneNumber = "" @State private var content = "" @State private var validationMessage: String? var body: some View { NavigationStack { ZStack { AITheme.canvas.ignoresSafeArea() ScrollView { VStack(spacing: 12) { AICard { VStack(alignment: .leading, spacing: 14) { Picker("实例", selection: Binding( get: { model.selectedInstanceID ?? model.instances.first?.id }, set: { model.selectedInstanceID = $0 } )) { ForEach(model.instances) { instance in Text(instance.name).tag(Optional(instance.id)) } } .pickerStyle(.menu) TextField("收件号码", text: $phoneNumber) .padding(.horizontal, 12) .frame(minHeight: AITheme.buttonHeight) .background(AITheme.canvas) .clipShape(RoundedRectangle(cornerRadius: AITheme.buttonRadius)) TextField("消息内容", text: $content, axis: .vertical) .lineLimit(4...8) .padding(12) .background(AITheme.canvas) .clipShape(RoundedRectangle(cornerRadius: AITheme.buttonRadius)) } } if let validationMessage { Text(validationMessage) .font(.subheadline) .foregroundStyle(AITheme.danger) .frame(maxWidth: .infinity, alignment: .leading) } } .padding(16) } } .navigationTitle("发送消息") .toolbar { ToolbarItem(placement: .cancellationAction) { Button("取消") { dismiss() } .buttonStyle(AIButtonStyle(kind: .secondary, size: .regular)) } ToolbarItem(placement: .confirmationAction) { Button("发送") { send() } .buttonStyle(AIButtonStyle(kind: .primary, size: .regular)) } } } } private func send() { Task { do { try await model.send(phoneNumber: phoneNumber, content: content) phoneNumber = "" content = "" validationMessage = nil dismiss() } catch { validationMessage = "发送失败,请检查号码、内容和实例登录状态。" } } } }