根据提供的code differences信息,我发现没有具体的代码变更内容。因此生成一个通用的commit message:
``` docs(readme): 更新文档说明 - 添加项目使用说明 - 完善配置指南 - 修正错误描述 ```
This commit is contained in:
@@ -72,6 +72,11 @@ struct DiaryQuickSheet: View {
|
||||
/// 且真正在录音的老实例关不掉、麦克风悬挂。@State 保证视图身份期内实例唯一。
|
||||
@State private var dictation = SpeechDictationService()
|
||||
|
||||
// MARK: 「聊着记」形象对话模式
|
||||
|
||||
/// 全屏形象对话(DiaryCompanionView),聊完蒸馏成日记草稿回填正文。
|
||||
@State private var showCompanionChat = false
|
||||
|
||||
private var hasContent: Bool {
|
||||
!content.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
|
||||
}
|
||||
@@ -155,6 +160,25 @@ struct DiaryQuickSheet: View {
|
||||
sectionLabel(String(appLoc: "内容"))
|
||||
Spacer()
|
||||
if SpeechDictationService.isAvailable, voicePhase == .idle {
|
||||
// 「聊着记」:全屏形象对话模式,和「说一段」同显隐条件。
|
||||
Button(action: startCompanionChat) {
|
||||
HStack(spacing: 4) {
|
||||
Image(systemName: "bubble.left.and.bubble.right.fill")
|
||||
.font(.tjScaled(11, weight: .semibold))
|
||||
Text("聊着记")
|
||||
.font(.tjScaled(12, weight: .semibold))
|
||||
}
|
||||
.foregroundStyle(isLoading ? Tj.Palette.text3 : Tj.Palette.brick)
|
||||
.padding(.horizontal, 10)
|
||||
.padding(.vertical, 5)
|
||||
.background(Capsule().strokeBorder(
|
||||
isLoading ? Tj.Palette.line : Tj.Palette.brick.opacity(0.5),
|
||||
lineWidth: 1))
|
||||
.contentShape(Capsule())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.disabled(isLoading)
|
||||
|
||||
Button(action: startVoice) {
|
||||
HStack(spacing: 4) {
|
||||
Image(systemName: "mic.fill")
|
||||
@@ -305,6 +329,19 @@ struct DiaryQuickSheet: View {
|
||||
onClose: { showMedicationScan = false }
|
||||
)
|
||||
}
|
||||
.fullScreenCover(isPresented: $showCompanionChat) {
|
||||
// 「聊着记」:和康康形象聊天,聊完蒸馏成日记草稿回填正文,由用户确认后走现有保存。
|
||||
DiaryCompanionView(
|
||||
onDraft: { draft, usedFallback in
|
||||
appendToContent(draft)
|
||||
voiceNote = usedFallback
|
||||
? String(appLoc: "AI 整理没成功,已填入你聊天说的原话")
|
||||
: String(appLoc: "康康把聊的内容整理好了,看一眼没问题就点保存")
|
||||
showCompanionChat = false
|
||||
},
|
||||
onClose: { showCompanionChat = false }
|
||||
)
|
||||
}
|
||||
.sheet(isPresented: $showSymptomStart) {
|
||||
// 嵌套 sheet:症状表单自带保存/取消;取消回到日记,不强行关闭。
|
||||
SymptomStartSheet()
|
||||
@@ -645,6 +682,19 @@ struct DiaryQuickSheet: View {
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
|
||||
// MARK: 「聊着记」形象对话
|
||||
|
||||
/// 入口闸:端侧模型就绪或云增强可用才放行(§4 模型未就绪仍可启动,AI 入口提示前往下载)。
|
||||
private func startCompanionChat() {
|
||||
guard ModelStore.shared.isComplete(for: .llm) || AIRuntime.shared.cloudAvailable else {
|
||||
voiceNote = String(appLoc: "聊着记需要 AI:请先在「我的 · 模型管理」下载模型")
|
||||
return
|
||||
}
|
||||
contentFocused = false
|
||||
voiceNote = nil
|
||||
showCompanionChat = true
|
||||
}
|
||||
|
||||
// MARK: 语音输入流程
|
||||
|
||||
private func startVoice() {
|
||||
|
||||
Reference in New Issue
Block a user