You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

206 lines
7.3 KiB

import SwiftUI
// MARK: -
struct SocialInputView: View {
@Binding var username: String
@Binding var message: String
let platform: SocialPlatform
@FocusState var focusedField: SocialField?
//
enum SocialPlatform: String, CaseIterable {
case instagram = "Instagram"
case facebook = "Facebook"
case twitter = "Twitter"
case tiktok = "Tiktok"
case snapchat = "Snapchat"
case whatsapp = "Whatsapp"
case viber = "Viber"
case spotify = "Spotify"
var displayName: String {
switch self {
case .instagram: return "Instagram"
case .facebook: return "Facebook"
case .twitter: return "Twitter"
case .tiktok: return "TikTok"
case .snapchat: return "Snapchat"
case .whatsapp: return "WhatsApp"
case .viber: return "Viber"
case .spotify: return "Spotify"
}
}
var icon: String {
switch self {
case .instagram: return "camera"
case .facebook: return "person.2"
case .twitter: return "bird"
case .tiktok: return "music.note"
case .snapchat: return "ghost"
case .whatsapp: return "message"
case .viber: return "phone"
case .spotify: return "music.note.list"
}
}
var placeholder: String {
switch self {
case .instagram: return "用户名或链接"
case .facebook: return "用户名或链接"
case .twitter: return "用户名或链接"
case .tiktok: return "用户名或链接"
case .snapchat: return "用户名"
case .whatsapp: return "输入WhatsApp电话号码"
case .viber: return "消息内容"
case .spotify: return "歌曲或播放列表链接"
}
}
var hint: String {
switch self {
case .instagram: return "输入Instagram用户名"
case .facebook: return "输入Facebook用户ID"
case .twitter: return "输入Twitter用户名或完整链接"
case .tiktok: return "输入TikTok用户名或完整链接"
case .snapchat: return "输入Snapchat用户名"
case .whatsapp: return "输入WhatsApp消息内容"
case .viber: return "输入Viber消息内容"
case .spotify: return "输入Spotify歌曲或播放列表链接"
}
}
}
//
enum SocialField: Hashable {
case username, message
}
var body: some View {
VStack(spacing: 16) {
//
HStack {
Image(systemName: platform.icon)
.font(.title2)
.foregroundColor(.blue)
VStack(alignment: .leading, spacing: 2) {
Text(platform.displayName)
.font(.headline)
.foregroundColor(.primary)
Text(platform.hint)
.font(.caption)
.foregroundColor(.secondary)
}
Spacer()
}
.padding(.horizontal, 12)
.padding(.vertical, 8)
.background(
RoundedRectangle(cornerRadius: 8)
.fill(Color.blue.opacity(0.1))
)
// / ()
VStack(alignment: .leading, spacing: 8) {
HStack {
Text(platform == .whatsapp ? "电话号码" : (platform == .viber ? "消息内容" : "用户名/链接"))
.font(.subheadline)
.foregroundColor(.primary)
Text("*")
.foregroundColor(.red)
Spacer()
}
TextField(platform.placeholder, text: $username)
.textFieldStyle(RoundedBorderTextFieldStyle())
.autocapitalization(.none)
.focused($focusedField, equals: .username)
}
// (Viber)
if platform == .viber {
VStack(alignment: .leading, spacing: 8) {
HStack {
Text("消息内容")
.font(.subheadline)
.foregroundColor(.primary)
Spacer()
}
TextField("输入消息内容", text: $message)
.textFieldStyle(RoundedBorderTextFieldStyle())
.focused($focusedField, equals: .message)
}
}
//
VStack(alignment: .leading, spacing: 8) {
HStack {
Image(systemName: "info.circle")
.font(.caption)
.foregroundColor(.blue)
Text("格式说明")
.font(.caption)
.foregroundColor(.primary)
Spacer()
}
Text(getFormatHint())
.font(.caption)
.foregroundColor(.secondary)
.lineLimit(nil)
}
.padding(.horizontal, 12)
.padding(.vertical, 8)
.background(
RoundedRectangle(cornerRadius: 8)
.fill(Color.blue.opacity(0.1))
)
}
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Spacer()
Button("完成") {
focusedField = nil
}
.foregroundColor(.blue)
.font(.system(size: 16, weight: .medium))
}
}
}
private func getFormatHint() -> String {
switch platform {
case .instagram, .facebook, .twitter, .tiktok:
if platform == .instagram {
return "• 输入Instagram用户名\n• 将生成instagram://user?username=用户名格式"
} else if platform == .facebook {
return "• 输入Facebook用户ID\n• 将生成fb://profile/用户ID格式"
} else {
return "• 可以输入用户名username\n• 或输入完整链接https://twitter.com/username"
}
case .snapchat:
return "• 输入Snapchat用户名\n• 例如username"
case .whatsapp:
return "• 输入WhatsApp电话号码+1234567890\n• 将生成whatsapp://send?phone=电话号码格式\n• 用户扫描后可直接打开WhatsApp聊天"
case .viber:
return "• 输入Viber消息内容\n• 将生成可分享的链接"
case .spotify:
return "• 输入歌曲或播放列表链接\n• 或输入Spotify ID"
}
}
}
#Preview {
SocialInputView(
username: .constant(""),
message: .constant(""),
platform: .instagram
)
}