release(ios): 发布 0.2.1 并重构图标与界面细节
- 应用图标改用与 Web favicon 同源的扁平标记,金色 SIM 卡体加三格递增信号,29pt 下仍可读 - 标签统一为胶囊形状,提高深色主题下的描边权重,避免标签在暗色下消失 - 消息卡片与详情分区卡片收紧行距,单屏信息密度明显提升 - 详情头部指标精简为 4 行,数据模块改为单条读数 - 批量选择勾选框移出名称区域,工具栏控件统一为等高 34pt - 分组编辑器改为点选即生效,移除说明文字与常驻禁用按钮
This commit is contained in:
@@ -8,6 +8,7 @@ struct InstanceGroupManagerView: View {
|
||||
@State private var editingName = ""
|
||||
@State private var validationMessage: String?
|
||||
@State private var isWorking = false
|
||||
@State private var pendingDelete: InstanceGroup?
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
@@ -62,24 +63,16 @@ struct InstanceGroupManagerView: View {
|
||||
|
||||
Spacer()
|
||||
|
||||
Button {
|
||||
AISymbolAction("重命名分组 \(group.name)", systemImage: "pencil", tint: AITheme.muted) {
|
||||
editingGroup = group
|
||||
editingName = group.name
|
||||
validationMessage = nil
|
||||
} label: {
|
||||
Image(systemName: "pencil")
|
||||
}
|
||||
.buttonStyle(AIButtonStyle(kind: .secondary, size: .toolbarInline, fixedWidth: 44))
|
||||
|
||||
Button {
|
||||
Task {
|
||||
await delete(group)
|
||||
}
|
||||
} label: {
|
||||
Image(systemName: "trash")
|
||||
AISymbolAction("删除分组 \(group.name)", systemImage: "trash", tint: AITheme.danger) {
|
||||
pendingDelete = group
|
||||
}
|
||||
.buttonStyle(AIButtonStyle(kind: .danger, size: .toolbarInline, fixedWidth: 44))
|
||||
.disabled(instanceCount(group.id) > 0 || isWorking)
|
||||
.disabled(isWorking)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -124,6 +117,23 @@ struct InstanceGroupManagerView: View {
|
||||
} message: {
|
||||
Text("分组名称最多 100 个字符。")
|
||||
}
|
||||
.confirmationDialog(
|
||||
pendingDelete == nil
|
||||
? "删除分组?"
|
||||
: "删除「\(pendingDelete!.name)」?该分组下的 \(instanceCount(pendingDelete!.id)) 个实例会回到未分组。",
|
||||
isPresented: Binding(
|
||||
get: { pendingDelete != nil },
|
||||
set: { if !$0 { pendingDelete = nil } }
|
||||
),
|
||||
titleVisibility: .visible
|
||||
) {
|
||||
if let group = pendingDelete {
|
||||
Button("删除分组", role: .destructive) {
|
||||
Task { await delete(group) }
|
||||
}
|
||||
}
|
||||
Button("取消", role: .cancel) {}
|
||||
}
|
||||
.task {
|
||||
await model.loadGroups()
|
||||
}
|
||||
@@ -163,6 +173,7 @@ struct InstanceGroupManagerView: View {
|
||||
private func delete(_ group: InstanceGroup) async {
|
||||
guard !isWorking else { return }
|
||||
isWorking = true
|
||||
pendingDelete = nil
|
||||
do {
|
||||
try await model.deleteGroup(group.id)
|
||||
} catch {
|
||||
|
||||
Reference in New Issue
Block a user