|
@@ -175,8 +175,8 @@
|
|
|
<span class="dot"></span>
|
|
<span class="dot"></span>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <!-- ask_user 交互提问 UI(分步向导) -->
|
|
|
|
|
- <div v-if="message.isPendingApproval && message.pendingApprovalData?.ask_user" class="approval-card">
|
|
|
|
|
|
|
+ <!-- ask_user 交互提问 UI(分步向导):ask_user 存在但 questions 缺失时不渲染,避免模板访问异常 -->
|
|
|
|
|
+ <div v-if="message.isPendingApproval && message.pendingApprovalData?.ask_user?.questions?.length" class="approval-card">
|
|
|
<div class="approval-icon"></div>
|
|
<div class="approval-icon"></div>
|
|
|
<div class="approval-content">
|
|
<div class="approval-content">
|
|
|
<div class="approval-title">{{ message.pendingApprovalData?.message }}</div>
|
|
<div class="approval-title">{{ message.pendingApprovalData?.message }}</div>
|
|
@@ -460,29 +460,6 @@
|
|
|
messages: Message[];
|
|
messages: Message[];
|
|
|
}>();
|
|
}>();
|
|
|
|
|
|
|
|
- // Track the last pendingApprovalData reference to detect new interrupts
|
|
|
|
|
- const lastApprovalDataRef = new Map<number, any>();
|
|
|
|
|
-
|
|
|
|
|
- // 自动初始化 ask_user 答案状态
|
|
|
|
|
- watch(
|
|
|
|
|
- () => props.messages,
|
|
|
|
|
- (msgs) => {
|
|
|
|
|
- msgs.forEach((msg, idx) => {
|
|
|
|
|
- if (msg.isPendingApproval && msg.pendingApprovalData?.ask_user?.questions) {
|
|
|
|
|
- // Only reinitialize if pendingApprovalData object reference changed (new interrupt)
|
|
|
|
|
- const lastRef = lastApprovalDataRef.get(idx);
|
|
|
|
|
- if (lastRef !== msg.pendingApprovalData) {
|
|
|
|
|
- lastApprovalDataRef.set(idx, msg.pendingApprovalData);
|
|
|
|
|
- initAskUserAnswers(idx, msg.pendingApprovalData.ask_user.questions);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- lastApprovalDataRef.delete(idx);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- },
|
|
|
|
|
- { immediate: true, deep: true }
|
|
|
|
|
- );
|
|
|
|
|
-
|
|
|
|
|
export interface AgentDetailData {
|
|
export interface AgentDetailData {
|
|
|
messageIndex: number;
|
|
messageIndex: number;
|
|
|
agent: string;
|
|
agent: string;
|
|
@@ -775,6 +752,31 @@
|
|
|
askUserCurrentStep[index] = 0;
|
|
askUserCurrentStep[index] = 0;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ // Track the last pendingApprovalData reference to detect new interrupts
|
|
|
|
|
+ const lastApprovalDataRef = new Map<number, any>();
|
|
|
|
|
+
|
|
|
|
|
+ // 自动初始化 ask_user 答案状态。
|
|
|
|
|
+ // 必须注册在 initAskUserAnswers 等 const 声明之后:immediate watcher 在 setup 阶段同步执行,
|
|
|
|
|
+ // 若带审批消息重新挂载(关闭弹框后再打开),回调会访问尚未初始化的变量(TDZ 报错导致整个弹框挂载失败)
|
|
|
|
|
+ watch(
|
|
|
|
|
+ () => props.messages,
|
|
|
|
|
+ (msgs) => {
|
|
|
|
|
+ msgs.forEach((msg, idx) => {
|
|
|
|
|
+ if (msg.isPendingApproval && msg.pendingApprovalData?.ask_user?.questions) {
|
|
|
|
|
+ // Only reinitialize if pendingApprovalData object reference changed (new interrupt)
|
|
|
|
|
+ const lastRef = lastApprovalDataRef.get(idx);
|
|
|
|
|
+ if (lastRef !== msg.pendingApprovalData) {
|
|
|
|
|
+ lastApprovalDataRef.set(idx, msg.pendingApprovalData);
|
|
|
|
|
+ initAskUserAnswers(idx, msg.pendingApprovalData.ask_user.questions);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ lastApprovalDataRef.delete(idx);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+ { immediate: true, deep: true }
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
const isCurrentStepAnswered = (msgIndex: number, qIndex: number, question: { required?: boolean; type: string }) => {
|
|
const isCurrentStepAnswered = (msgIndex: number, qIndex: number, question: { required?: boolean; type: string }) => {
|
|
|
const answers = askUserAnswers[msgIndex];
|
|
const answers = askUserAnswers[msgIndex];
|
|
|
if (!answers) return false;
|
|
if (!answers) return false;
|