|
@@ -3,7 +3,7 @@
|
|
|
// ORDER-FLOW-CHAIN-FILTER-STAGE-1:6 维多选筛选 + 关键环节默认全选 + 全图矩阵 + 点击列切换详情焦点。
|
|
// ORDER-FLOW-CHAIN-FILTER-STAGE-1:6 维多选筛选 + 关键环节默认全选 + 全图矩阵 + 点击列切换详情焦点。
|
|
|
// 入口:总览页订单卡「链路全景」按钮 → store.selectOrderForChain + router.push。
|
|
// 入口:总览页订单卡「链路全景」按钮 → store.selectOrderForChain + router.push。
|
|
|
// 刷新恢复:onMounted 调 store.restoreChainSelection() 从 sessionStorage 重建 selectedOrderNo。
|
|
// 刷新恢复:onMounted 调 store.restoreChainSelection() 从 sessionStorage 重建 selectedOrderNo。
|
|
|
-import { computed, onMounted, ref, watch } from 'vue';
|
|
|
|
|
|
|
+import { computed, onMounted, ref, shallowRef, watch } from 'vue';
|
|
|
import { useRouter } from 'vue-router';
|
|
import { useRouter } from 'vue-router';
|
|
|
import { useOrderExecutionStore } from '/@/stores/orderExecution';
|
|
import { useOrderExecutionStore } from '/@/stores/orderExecution';
|
|
|
import type {
|
|
import type {
|
|
@@ -43,6 +43,15 @@ import {
|
|
|
PPT_REVIEW_SUBSTEPS,
|
|
PPT_REVIEW_SUBSTEPS,
|
|
|
PPT_OPINION_DRILLDOWN,
|
|
PPT_OPINION_DRILLDOWN,
|
|
|
} from '/@/views/aidop/s8/monitoring/data/order-execution/ppt-baseline';
|
|
} from '/@/views/aidop/s8/monitoring/data/order-execution/ppt-baseline';
|
|
|
|
|
+// S8-ORDER-REVIEW-PI-FROM-S0-1:baseline 态订单评审 PI 优先消费 S0 pi-config。
|
|
|
|
|
+import {
|
|
|
|
|
+ getContractReviewCyclePiConfig,
|
|
|
|
|
+ type S0ContractReviewCyclePiConfig,
|
|
|
|
|
+} from '/@/views/aidop/s8/api/s8OrderReviewPiConfigApi';
|
|
|
|
|
+import {
|
|
|
|
|
+ mergeReviewSubStepsWithS0Pi,
|
|
|
|
|
+ buildOpinionBreakdownFromS0Pi,
|
|
|
|
|
+} from '/@/views/aidop/s8/monitoring/data/order-execution/pi-config-merge';
|
|
|
|
|
|
|
|
const ALL_STAGE_KEYS: OrderNodeKey[] = [
|
|
const ALL_STAGE_KEYS: OrderNodeKey[] = [
|
|
|
'order_review',
|
|
'order_review',
|
|
@@ -60,10 +69,24 @@ const ORDER_REVIEW_STAGE_KEY: OrderNodeKey = 'order_review';
|
|
|
const store = useOrderExecutionStore();
|
|
const store = useOrderExecutionStore();
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
|
|
|
|
|
|
|
+// S8-ORDER-REVIEW-PI-FROM-S0-1:S0 PI 配置以 SysOrg 雪花 ID 索引,本批单工厂硬编码。
|
|
|
|
|
+const REVIEW_PI_FACTORY_REF_ID = 1329900200002; // S0-F001 一工厂 SysOrg Id
|
|
|
|
|
+const reviewPiConfig = shallowRef<S0ContractReviewCyclePiConfig | null>(null);
|
|
|
|
|
+
|
|
|
|
|
+async function loadReviewPiConfig() {
|
|
|
|
|
+ try {
|
|
|
|
|
+ reviewPiConfig.value = await getContractReviewCyclePiConfig(REVIEW_PI_FACTORY_REF_ID);
|
|
|
|
|
+ } catch (err) {
|
|
|
|
|
+ console.warn('[OrderChainOverview] pi-config fetch failed, fallback to PPT baseline', err);
|
|
|
|
|
+ reviewPiConfig.value = null;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
onMounted(async () => {
|
|
onMounted(async () => {
|
|
|
// ORDER-FLOW-S8-INTEGRATED-DOMAIN-RESET-1 t3i:Chain 页走正式 API。
|
|
// ORDER-FLOW-S8-INTEGRATED-DOMAIN-RESET-1 t3i:Chain 页走正式 API。
|
|
|
await store.loadFromDomain();
|
|
await store.loadFromDomain();
|
|
|
void store.loadAggregateFromDomain('BASELINE_PPT');
|
|
void store.loadAggregateFromDomain('BASELINE_PPT');
|
|
|
|
|
+ void loadReviewPiConfig();
|
|
|
store.restoreChainSelection();
|
|
store.restoreChainSelection();
|
|
|
const focused = store.selectedOrderNo;
|
|
const focused = store.selectedOrderNo;
|
|
|
if (focused) {
|
|
if (focused) {
|
|
@@ -196,7 +219,7 @@ const currentStageSubSteps = computed<SubStepDetail[]>(() => {
|
|
|
const key = activeStageKey.value;
|
|
const key = activeStageKey.value;
|
|
|
if (!key) return [];
|
|
if (!key) return [];
|
|
|
if (isUnfiltered.value && key === ORDER_REVIEW_STAGE_KEY) {
|
|
if (isUnfiltered.value && key === ORDER_REVIEW_STAGE_KEY) {
|
|
|
- return PPT_REVIEW_SUBSTEPS;
|
|
|
|
|
|
|
+ return mergeReviewSubStepsWithS0Pi(PPT_REVIEW_SUBSTEPS, reviewPiConfig.value, classifyStatus);
|
|
|
}
|
|
}
|
|
|
const ordersSubSteps = filteredChainOrders.value
|
|
const ordersSubSteps = filteredChainOrders.value
|
|
|
.map((o) => o.lifecycle.find((s) => s.key === key)?.subSteps)
|
|
.map((o) => o.lifecycle.find((s) => s.key === key)?.subSteps)
|
|
@@ -214,7 +237,7 @@ const currentStageBreakdown = computed<SubStepDetail[]>(() => {
|
|
|
const key = activeStageKey.value;
|
|
const key = activeStageKey.value;
|
|
|
if (!key) return [];
|
|
if (!key) return [];
|
|
|
if (isUnfiltered.value && key === ORDER_REVIEW_STAGE_KEY) {
|
|
if (isUnfiltered.value && key === ORDER_REVIEW_STAGE_KEY) {
|
|
|
- return PPT_OPINION_DRILLDOWN;
|
|
|
|
|
|
|
+ return buildOpinionBreakdownFromS0Pi(PPT_OPINION_DRILLDOWN, reviewPiConfig.value, classifyStatus);
|
|
|
}
|
|
}
|
|
|
const ordersBreakdowns = filteredChainOrders.value
|
|
const ordersBreakdowns = filteredChainOrders.value
|
|
|
.map(
|
|
.map(
|