diff --git a/src/api/ydoyun/report/reportpage/index.ts b/src/api/ydoyun/report/reportpage/index.ts
index c1dd562..95ca4d5 100644
--- a/src/api/ydoyun/report/reportpage/index.ts
+++ b/src/api/ydoyun/report/reportpage/index.ts
@@ -14,6 +14,13 @@ export interface ExecuteProcedureParams {
rq_e?: string // 结束日期,格式:YYYY-MM-DD(可选)
p?: string // 密码(可选)
username?: string // 用户名(可选)
+ /** 存储过程入参 @auth(VARCHAR(MAX),如 YDY_GET_TAG 第一个参数) */
+ auth?: string
+ /**
+ * 存储过程入参 @params(VARCHAR(MAX),JSON 字符串,如 YDY_GET_TAG 第二个参数)
+ * 注意与 axios 的 `params` 配置重名,此处为查询参数字段名
+ */
+ params?: string
}
/** 日报表-当日总销售数据 */
diff --git a/src/components/AiAssistant/AiImageChatDialog.vue b/src/components/AiAssistant/AiImageChatDialog.vue
index b1aa622..8feb934 100644
--- a/src/components/AiAssistant/AiImageChatDialog.vue
+++ b/src/components/AiAssistant/AiImageChatDialog.vue
@@ -1,9 +1,13 @@
-
-
-
-
(null)
const streamingText = ref('')
/** 多轮对话会话 ID,由 Dify 返回,后续请求携带以保持上下文 */
const conversationId = ref('')
-const dialogWidth = ref('420px')
const isFullscreen = ref(false)
+/** 仅聊天时抽屉宽度 = 分栏时左侧对话区宽度(与全屏/宽屏无联动) */
+const NARROW_DRAWER_PX = 380
+const splitConvoStyle = computed(() => ({
+ flex: `0 1 ${NARROW_DRAWER_PX}px`,
+ width: `${NARROW_DRAWER_PX}px`,
+ maxWidth: `${NARROW_DRAWER_PX}px`,
+ minWidth: '240px',
+ boxSizing: 'border-box' as const
+}))
+/** 全屏或每日汇报为宽分栏时调整宽度;每日汇报打开时会同步 isFullscreen=100% */
+const drawerSize = computed(() => {
+ if (isFullscreen.value) return '100%'
+ if (reportDocVisible.value) return 'min(100%, 1280px)'
+ return `${NARROW_DRAWER_PX}px`
+})
const displayStreamingHtml = computed(() => renderMarkdown(streamingText.value))
const imageViewerVisible = ref(false)
const imageViewerList = ref([])
@@ -593,6 +620,7 @@ const handleClosed = () => {
streamAbortController.value?.abort()
}
isFullscreen.value = false
+ reportDocVisible.value = false
if (picPreviewUrl.value) {
URL.revokeObjectURL(picPreviewUrl.value)
picPreviewUrl.value = ''
@@ -760,6 +788,31 @@ function getGreeting(): string {
height: max(calc(100vh - 120px), calc(100vh - var(--left-menu-max-width, 200px) - 80px));
max-height: max(calc(100vh - 120px), calc(100vh - var(--left-menu-max-width, 200px) - 80px));
}
+.ai-image-chat-dialog .ai-chat-dialog-body--split {
+ flex-direction: row;
+ align-items: stretch;
+ gap: 0;
+}
+.ai-image-chat-dialog .ai-chat-panel--convo {
+ flex: 1;
+ min-width: 0;
+ min-height: 0;
+ display: flex;
+ flex-direction: column;
+}
+.ai-image-chat-dialog .ai-chat-panel--report {
+ flex: 1;
+ min-width: 0;
+ min-height: 0;
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ border-left: 1px solid #e2e8f0;
+}
+.ai-image-chat-dialog .ai-chat-panel--report :deep(.el-dialog) {
+ --el-dialog-margin-top: 0;
+ margin: 0;
+}
.ai-image-chat-dialog.is-fullscreen .ai-chat-dialog-body {
height: calc(100vh - 120px) !important;
max-height: calc(100vh - 120px) !important;
@@ -1208,6 +1261,11 @@ function getGreeting(): string {
box-shadow: 0 4px 12px rgba(64, 158, 255, 0.16);
transform: translateY(-1px);
}
+.daily-report-entry.is-open {
+ border-color: var(--el-color-primary);
+ background: linear-gradient(135deg, #ecf5ff 0%, #d9ecff 100%);
+ box-shadow: inset 0 0 0 1px rgba(64, 158, 255, 0.25);
+}
.daily-report-entry:disabled {
opacity: 0.6;
cursor: not-allowed;
diff --git a/src/components/AiAssistant/ReportDocumentModal.vue b/src/components/AiAssistant/ReportDocumentModal.vue
index 6489dfa..40ced9f 100644
--- a/src/components/AiAssistant/ReportDocumentModal.vue
+++ b/src/components/AiAssistant/ReportDocumentModal.vue
@@ -1,41 +1,13 @@
-
+
-
-
每日汇报
-
-
@@ -318,7 +290,7 @@
-
+
()
+/** 与 AI 助手侧栏同屏时占满父级,内部 tabs 可滚动 */
+const surfaceBodyStyle = {
+ minHeight: 0,
+ flex: 1,
+ height: '100%',
+ maxHeight: '100%',
+ boxSizing: 'border-box' as const,
+ display: 'flex',
+ flexDirection: 'column' as const,
+ overflow: 'hidden' as const
+}
+
const emit = defineEmits<{
'update:modelValue': [value: boolean]
}>()
@@ -558,7 +541,6 @@ async function loadDetailRows(reportId: number | null) {
resetDetailRows()
}
}
-const reportModalFullscreen = ref(false)
const optimizing = ref(false)
const saving = ref(false)
/** 历史列表中单条详情弹窗(全屏:正文 + AI 详表 + 截图) */
@@ -668,14 +650,23 @@ function filterReportRowsByScope(rows: T[]): T[
})
}
-watch(modalVisible, (v) => {
- if (v && !hasModuleScope.value) {
- ElMessage.warning('请进入一个模块进行每日汇报')
- nextTick(() => {
- modalVisible.value = false
- })
+watch(
+ () => props.modelValue,
+ (open, wasOpen) => {
+ if (open) {
+ nextTick(() => {
+ if (!hasModuleScope.value) {
+ ElMessage.warning('请进入一个模块进行每日汇报')
+ modalVisible.value = false
+ return
+ }
+ loadAllData()
+ })
+ } else if (wasOpen) {
+ handleClosed()
+ }
}
-})
+)
/** 截图地址补全(相对路径拼 API 根) */
function resolveMediaUrl(url?: string | null): string {
@@ -1204,7 +1195,6 @@ function handleClosed() {
reportContent.value = ''
currentReportId.value = null
resetDetailRows()
- reportModalFullscreen.value = false
historyRecordDetailVisible.value = false
historyRecordDetail.value = null
historyList.value = []
@@ -1330,30 +1320,11 @@ function truncateContent(text?: string, maxLen = 60): string {
-
+
- 商品列表
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-