1.调试ai
This commit is contained in:
@@ -110,7 +110,7 @@ export interface AiDailyReportSaveReqVO {
|
||||
/** 执行表查询参数(季节 jijie、大类 dalei 等下拉选项) */
|
||||
export interface ExecuteTableParams {
|
||||
reportId: number
|
||||
tableName: string // 表名:jijie-季节归属,dalei-大类
|
||||
tableName: string // 表名:jijie-季节归属,dalei-大类,kehu-客户,pinpai 等
|
||||
}
|
||||
|
||||
/** 品类表现/品类诊断查询参数(与统一查询参数一致,存储过程 YDY_AI_GET_SPDP2) */
|
||||
|
||||
@@ -762,9 +762,21 @@ const remainingRouter: AppRouteRecordRaw[] = [
|
||||
component: Layout,
|
||||
name: 'Reports',
|
||||
meta: {
|
||||
hidden: true
|
||||
hidden: false,
|
||||
title: '数据报表'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: 'sales-daily',
|
||||
name: 'SalesDailyAI',
|
||||
meta: {
|
||||
title: '销售日报',
|
||||
icon: 'ep:calendar',
|
||||
noCache: true,
|
||||
hidden: false
|
||||
},
|
||||
component: () => import('@/views/ydoyun/report/salesdaily/index.vue')
|
||||
},
|
||||
{
|
||||
path: 'lijun/category-diagnostic',
|
||||
name: 'CategoryDiagnostic',
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="middle-class-ranking-page">
|
||||
<div ref="reportPageRootRef" class="middle-class-ranking-page">
|
||||
<!-- 查询条件区域:与报表页一致,支持携带条件进入 -->
|
||||
<el-card class="query-card" shadow="never">
|
||||
<div class="query-header">
|
||||
@@ -162,7 +162,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, computed, onMounted, onUnmounted, watch } from 'vue'
|
||||
import { ref, reactive, computed, onMounted, onUnmounted, watch, nextTick } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import dayjs from 'dayjs'
|
||||
import { ReportApi } from '@/api/ydoyun/report/reportpage'
|
||||
@@ -191,10 +191,16 @@ interface MiddleClassItem {
|
||||
defineOptions({ name: 'MiddleClassRanking' })
|
||||
|
||||
const route = useRoute()
|
||||
const { setPageLoading } = useAiAssistant()
|
||||
const { setPageLoading, setPageModuleName, setPageModuleCode, setScreenshotTarget } = useAiAssistant()
|
||||
const reportPageRootRef = ref<HTMLElement | null>(null)
|
||||
const loading = ref(false)
|
||||
watch(loading, (v) => setPageLoading(v), { immediate: true })
|
||||
onUnmounted(() => setPageLoading(false))
|
||||
onUnmounted(() => {
|
||||
setPageModuleName(null)
|
||||
setPageModuleCode(null)
|
||||
setScreenshotTarget(null)
|
||||
setPageLoading(false)
|
||||
})
|
||||
const dateRange = ref<[string, string] | null>([
|
||||
dayjs().subtract(6, 'day').format('YYYY-MM-DD'),
|
||||
dayjs().format('YYYY-MM-DD')
|
||||
@@ -315,6 +321,10 @@ function formatNumber(n: number): string {
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
setPageModuleName('中类销售排名')
|
||||
setPageModuleCode('MiddleClassRanking:main')
|
||||
await nextTick()
|
||||
if (reportPageRootRef.value) setScreenshotTarget(reportPageRootRef.value)
|
||||
applyQueryFromRoute()
|
||||
await Promise.all([fetchBrandOptions(), fetchSeasonOptions(), fetchCategoryOptions(), fetchStoreOptions()])
|
||||
})
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="product-cards-page">
|
||||
<div ref="reportPageRootRef" class="product-cards-page">
|
||||
<!-- 查询条件区域:与主页/详情页一致,首行时间+快捷+查询/重置/更多条件,其余折叠 -->
|
||||
<el-card class="query-card" shadow="never">
|
||||
<div class="query-form">
|
||||
@@ -520,7 +520,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, computed, onMounted, onUnmounted, watch } from 'vue'
|
||||
import { ref, reactive, computed, onMounted, onUnmounted, watch, nextTick } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import dayjs from 'dayjs'
|
||||
import { Picture, Grid, List, Search } from '@element-plus/icons-vue'
|
||||
@@ -586,10 +586,16 @@ defineOptions({ name: 'ProductCardsPage' })
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const { setPageLoading } = useAiAssistant()
|
||||
const { setPageLoading, setPageModuleName, setPageModuleCode, setScreenshotTarget } = useAiAssistant()
|
||||
const reportPageRootRef = ref<HTMLElement | null>(null)
|
||||
const loading = ref(false)
|
||||
watch(loading, (v) => setPageLoading(v), { immediate: true })
|
||||
onUnmounted(() => setPageLoading(false))
|
||||
onUnmounted(() => {
|
||||
setPageModuleName(null)
|
||||
setPageModuleCode(null)
|
||||
setScreenshotTarget(null)
|
||||
setPageLoading(false)
|
||||
})
|
||||
const userStore = useUserStore()
|
||||
const username = computed(() => userStore.user?.username || '')
|
||||
|
||||
@@ -1130,6 +1136,10 @@ async function fetchStoreOptions() {
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
setPageModuleName('产品卡片')
|
||||
setPageModuleCode('ProductCards:main')
|
||||
await nextTick()
|
||||
if (reportPageRootRef.value) setScreenshotTarget(reportPageRootRef.value)
|
||||
applyQueryFromRoute()
|
||||
await Promise.all([fetchBrandOptions(), fetchSeasonOptions(), fetchCategoryOptions(), fetchLineOptions(), fetchStoreOptions()])
|
||||
// 门店默认全选
|
||||
|
||||
@@ -213,7 +213,13 @@
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="view-toolbar-right">
|
||||
<el-button link type="primary" size="small" @click="openPromptEdit">
|
||||
<el-button
|
||||
v-if="canEditAiModulePrompt"
|
||||
link
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="openPromptEdit"
|
||||
>
|
||||
<Icon icon="ep:edit" /> 编辑提示词
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -376,6 +382,7 @@
|
||||
</el-card>
|
||||
|
||||
<AiPromptEditDialog
|
||||
v-if="canEditAiModulePrompt"
|
||||
v-model="promptEditVisible"
|
||||
:module-key="SUPPLIER_PERFORMANCE_MODULE_KEY"
|
||||
module-name="供应商表现"
|
||||
@@ -397,6 +404,7 @@ import { Icon } from '@/components/Icon'
|
||||
import { ReportApi } from '@/api/ydoyun/report/reportpage'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import { useAiAssistant } from '@/components/AiAssistant/useAiAssistant'
|
||||
import { useAiModulePromptEditor } from '@/hooks/web/useAiModulePromptEditor'
|
||||
import { AiModulePromptApi } from '@/api/ydoyun/aiModulePrompt'
|
||||
import AiPromptEditDialog from './AiPromptEditDialog.vue'
|
||||
|
||||
@@ -414,6 +422,7 @@ const SUPPLIER_PERFORMANCE_MODULE_KEY = `${SUPPLIER_PERFORMANCE_COMPONENT}:main`
|
||||
const REPORT_ID = 6
|
||||
const route = useRoute()
|
||||
const userStore = useUserStore()
|
||||
const { canEditAiModulePrompt } = useAiModulePromptEditor()
|
||||
const { openWithScreenshot, setPageLoading, setPageModuleName, setPageModuleCode, setScreenshotTarget } =
|
||||
useAiAssistant()
|
||||
const pageRootRef = ref<HTMLElement | null>(null)
|
||||
@@ -437,6 +446,7 @@ const promptMap = ref<Record<string, string>>({})
|
||||
const promptEditVisible = ref(false)
|
||||
|
||||
const openPromptEdit = () => {
|
||||
if (!canEditAiModulePrompt.value) return
|
||||
promptEditVisible.value = true
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="supplier-ranking-page">
|
||||
<div ref="reportPageRootRef" class="supplier-ranking-page">
|
||||
<!-- 查询条件区域:与报表页一致,支持携带条件进入 -->
|
||||
<el-card class="query-card" shadow="never">
|
||||
<div class="query-header">
|
||||
@@ -168,7 +168,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, computed, onMounted, onUnmounted, watch } from 'vue'
|
||||
import { ref, reactive, computed, onMounted, onUnmounted, watch, nextTick } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import dayjs from 'dayjs'
|
||||
import { ReportApi } from '@/api/ydoyun/report/reportpage'
|
||||
@@ -196,10 +196,16 @@ interface SupplierContributionData {
|
||||
defineOptions({ name: 'SupplierRanking' })
|
||||
|
||||
const route = useRoute()
|
||||
const { setPageLoading } = useAiAssistant()
|
||||
const { setPageLoading, setPageModuleName, setPageModuleCode, setScreenshotTarget } = useAiAssistant()
|
||||
const reportPageRootRef = ref<HTMLElement | null>(null)
|
||||
const loading = ref(false)
|
||||
watch(loading, (v) => setPageLoading(v), { immediate: true })
|
||||
onUnmounted(() => setPageLoading(false))
|
||||
onUnmounted(() => {
|
||||
setPageModuleName(null)
|
||||
setPageModuleCode(null)
|
||||
setScreenshotTarget(null)
|
||||
setPageLoading(false)
|
||||
})
|
||||
const dateRange = ref<[string, string] | null>([
|
||||
dayjs().subtract(6, 'day').format('YYYY-MM-DD'),
|
||||
dayjs().format('YYYY-MM-DD')
|
||||
@@ -328,6 +334,10 @@ function getRankClass(index: number): string {
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
setPageModuleName('供货商销售排行')
|
||||
setPageModuleCode('SupplierRanking:main')
|
||||
await nextTick()
|
||||
if (reportPageRootRef.value) setScreenshotTarget(reportPageRootRef.value)
|
||||
applyQueryFromRoute()
|
||||
await Promise.all([fetchBrandOptions(), fetchSeasonOptions(), fetchCategoryOptions(), fetchStoreOptions()])
|
||||
})
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="category-diagnostic-dashboard">
|
||||
<div ref="reportPageRootRef" class="category-diagnostic-dashboard">
|
||||
<!-- 查询条件区域:与供应商详情页一致 -->
|
||||
<el-card class="query-card" shadow="never">
|
||||
<div class="query-form">
|
||||
@@ -473,10 +473,16 @@ const getTimeRange = (range: string) => {
|
||||
return { rq: start.format('YYYY-MM-DD'), rq2: end.format('YYYY-MM-DD') }
|
||||
}
|
||||
|
||||
const { setPageLoading } = useAiAssistant()
|
||||
const { setPageLoading, setPageModuleName, setPageModuleCode, setScreenshotTarget } = useAiAssistant()
|
||||
const reportPageRootRef = ref<HTMLElement | null>(null)
|
||||
const loading = ref(false)
|
||||
watch(loading, (v) => setPageLoading(v), { immediate: true })
|
||||
onUnmounted(() => setPageLoading(false))
|
||||
onUnmounted(() => {
|
||||
setPageModuleName(null)
|
||||
setPageModuleCode(null)
|
||||
setScreenshotTarget(null)
|
||||
setPageLoading(false)
|
||||
})
|
||||
/** 展示形式:卡片 | 列表 */
|
||||
const displayMode = ref<'card' | 'table'>('card')
|
||||
const columns = ref<{ title: string; key: string; order?: number; labelKey?: string; colorKey?: string }[]>([])
|
||||
@@ -938,7 +944,10 @@ const handleReset = () => {
|
||||
|
||||
// 初始化:从路由读取参数并查询
|
||||
onMounted(async () => {
|
||||
setPageModuleName('品类诊断')
|
||||
setPageModuleCode('CategoryCardListComponents:main')
|
||||
await nextTick()
|
||||
if (reportPageRootRef.value) setScreenshotTarget(reportPageRootRef.value)
|
||||
initQueryParamsFromRoute()
|
||||
await Promise.all([fetchBrandOptions(), fetchSeasonOptions(), fetchCategoryOptions(), fetchLineOptions(), fetchStoreOptions()])
|
||||
applyQueryDefaults()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="product-detail-page">
|
||||
<div ref="reportPageRootRef" class="product-detail-page">
|
||||
<!-- 查询条件区域:与主页一致 -->
|
||||
<el-card class="query-card" shadow="never">
|
||||
<div class="query-form">
|
||||
@@ -434,7 +434,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted, onUnmounted, reactive, ref, watch } from 'vue'
|
||||
import { computed, onMounted, onUnmounted, reactive, ref, watch, nextTick } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import dayjs from 'dayjs'
|
||||
@@ -450,10 +450,16 @@ const REPORT_ID = 6
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const userStore = useUserStore()
|
||||
const { setPageLoading } = useAiAssistant()
|
||||
const { setPageLoading, setPageModuleName, setPageModuleCode, setScreenshotTarget } = useAiAssistant()
|
||||
const reportPageRootRef = ref<HTMLElement | null>(null)
|
||||
const loading = ref(false)
|
||||
watch(loading, (v) => setPageLoading(v), { immediate: true })
|
||||
onUnmounted(() => setPageLoading(false))
|
||||
onUnmounted(() => {
|
||||
setPageModuleName(null)
|
||||
setPageModuleCode(null)
|
||||
setScreenshotTarget(null)
|
||||
setPageLoading(false)
|
||||
})
|
||||
const productList = ref<ProductDetailData[]>([])
|
||||
/** 标签分类筛选 */
|
||||
const labelFilter = ref<string>('all')
|
||||
@@ -1204,6 +1210,10 @@ function handleReset() {
|
||||
|
||||
// 初始化
|
||||
onMounted(async () => {
|
||||
setPageModuleName('商品明细详情')
|
||||
setPageModuleCode('ProductDetailPage:main')
|
||||
await nextTick()
|
||||
if (reportPageRootRef.value) setScreenshotTarget(reportPageRootRef.value)
|
||||
initQueryParamsFromRoute()
|
||||
await Promise.all([
|
||||
fetchBrandOptions(),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="product-dashboard">
|
||||
<div ref="reportPageRootRef" class="product-dashboard">
|
||||
<!-- 查询条件区域 -->
|
||||
<el-card class="query-card" shadow="never">
|
||||
<div class="query-form">
|
||||
@@ -1264,13 +1264,19 @@ const loadingPie = ref(false)
|
||||
/** 商品明细列表加载状态 */
|
||||
const loadingProductList = ref(false)
|
||||
|
||||
const { setPageLoading } = useAiAssistant()
|
||||
const { setPageLoading, setPageModuleName, setPageModuleCode, setScreenshotTarget } = useAiAssistant()
|
||||
const reportPageRootRef = ref<HTMLElement | null>(null)
|
||||
watch(
|
||||
[loadingKpi, loadingCategory, loadingPie, loadingProductList],
|
||||
([a, b, c, d]) => setPageLoading(!!(a || b || c || d)),
|
||||
{ immediate: true }
|
||||
)
|
||||
onUnmounted(() => setPageLoading(false))
|
||||
onUnmounted(() => {
|
||||
setPageModuleName(null)
|
||||
setPageModuleCode(null)
|
||||
setScreenshotTarget(null)
|
||||
setPageLoading(false)
|
||||
})
|
||||
|
||||
const searchKeyword = ref('')
|
||||
const hoverDetail = ref<ProductDetailData | null>(null)
|
||||
@@ -2630,6 +2636,10 @@ function applyQueryDefaults() {
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
setPageModuleName('商品驾驶舱')
|
||||
setPageModuleCode('ProductDashboard:main')
|
||||
await nextTick()
|
||||
if (reportPageRootRef.value) setScreenshotTarget(reportPageRootRef.value)
|
||||
activeTimeRange.value = 'week7'
|
||||
const timeRange = getTimeRange('week7')
|
||||
queryParams.rq = timeRange.rq
|
||||
|
||||
Reference in New Issue
Block a user