2026-10-12 20:33:39 +08:00
|
|
|
<script setup lang="ts">
|
2026-10-14 00:07:05 +08:00
|
|
|
import { computed, ref } from 'vue'
|
|
|
|
|
import { useRoute, useRouter } from 'vue-router'
|
2026-10-12 20:33:39 +08:00
|
|
|
import AnalyticsView from '../components/AnalyticsView.vue'
|
2026-10-14 00:07:05 +08:00
|
|
|
import InventoryTurnoverView from '../components/InventoryTurnoverView.vue'
|
|
|
|
|
import { inventoryView } from '../turnoverNavigation'
|
|
|
|
|
const route = useRoute(), router = useRouter()
|
|
|
|
|
const retainedWarehouse = ref('')
|
|
|
|
|
const selected = computed(() => {
|
|
|
|
|
try { return { view: inventoryView(route.query), error: '' } }
|
|
|
|
|
catch (cause) { return { view: null, error: (cause as Error).message } }
|
|
|
|
|
})
|
|
|
|
|
function switchView(view: 'TURNOVER' | 'DETAIL') {
|
|
|
|
|
const warehouseCode = retainedWarehouse.value || (typeof route.query.warehouseCode === 'string' ? route.query.warehouseCode : '')
|
|
|
|
|
void router.push({ path: '/self-operated/inventory', query: { view, ...(warehouseCode ? { warehouseCode } : {}) } })
|
|
|
|
|
}
|
2026-10-12 20:33:39 +08:00
|
|
|
</script>
|
2026-10-14 00:07:05 +08:00
|
|
|
<template>
|
|
|
|
|
<nav class="inventory-views" aria-label="库存分析视图"><el-button :type="selected.view === 'TURNOVER' ? 'primary' : undefined" @click="switchView('TURNOVER')">库存周转</el-button><el-button :type="selected.view === 'DETAIL' ? 'primary' : undefined" @click="switchView('DETAIL')">库存明细</el-button></nav>
|
|
|
|
|
<p v-if="selected.error" role="alert">{{ selected.error }}</p>
|
|
|
|
|
<AnalyticsView v-else-if="selected.view === 'DETAIL'" mode="inventory" />
|
|
|
|
|
<InventoryTurnoverView v-else @warehouse-selected="retainedWarehouse = $event" />
|
|
|
|
|
</template>
|
|
|
|
|
<style scoped>.inventory-views { display: flex; gap: 8px; padding: 16px 20px 0; }</style>
|