| | |
| | | <template> |
| | | <div> |
| | | <PanelHeader title="éè´ååå¸" to="/procurementManagement/paymentLedger" /> |
| | | <PanelHeader title="éè´ååå¸" to="/procurementManagement/procurementLedger" /> |
| | | <div class="main-panel panel-item-customers"> |
| | | <CarouselCards :items="cardItems" :visible-count="3" /> |
| | | <div class="pie-chart-wrapper" ref="pieWrapperRef"> |
| | |
| | | <template> |
| | | <div> |
| | | <PanelHeader title="éå®ååå¸" to="/salesManagement/receiptPaymentLedger" /> |
| | | <PanelHeader title="éå®ååå¸" to="/salesManagement/salesLedger" /> |
| | | <div class="main-panel panel-item-customers"> |
| | | <CarouselCards :items="cardItems" :visible-count="3" /> |
| | | <div class="pie-chart-wrapper" ref="pieWrapperRef"> |
| | |
| | | export const PSI_ROUTE_MAP = { |
| | | éå®ååå¸: '/salesManagement/receiptPaymentLedger', |
| | | éè´ååå¸: '/procurementManagement/paymentLedger', |
| | | éå®ååå¸: '/salesManagement/salesLedger', |
| | | éè´ååå¸: '/procurementManagement/procurementLedger', |
| | | éå®äº§åæ°: '/salesManagement/salesLedger', |
| | | éè´äº§åæ°: '/procurementManagement/procurementLedger', |
| | | å¨åäº§åæ°: '/inventoryManagement/stockManagement', |
| | |
| | | <template> |
| | | <div class="panel-header"> |
| | | <div |
| | | class="panel-header" |
| | | :class="{ clickable: !!to }" |
| | | @click="handleClick" |
| | | > |
| | | <span class="panel-title">{{ title }}</span> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | defineProps({ |
| | | import { useRouter } from 'vue-router' |
| | | |
| | | const props = defineProps({ |
| | | title: { |
| | | type: String, |
| | | required: true, |
| | | default: '' |
| | | }, |
| | | to: { |
| | | type: String, |
| | | default: '' |
| | | } |
| | | }) |
| | | |
| | | const router = useRouter() |
| | | |
| | | const handleClick = () => { |
| | | if (props.to) { |
| | | router.push(props.to) |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | |
| | | padding-left: 46px; |
| | | line-height: 36px; |
| | | } |
| | | |
| | | .panel-header.clickable { |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .panel-header.clickable:hover .panel-title { |
| | | color: #43e8fc; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div> |
| | | <PanelHeader title="ç产订å宿è¿åº¦" /> |
| | | <PanelHeader title="ç产订å宿è¿åº¦" to="/productionManagement/productionOrder" /> |
| | | <div class="main-panel"> |
| | | <div class="panel-item-customers"> |
| | | <CarouselCards :items="cardItems" :visible-count="4" /> |
| | |
| | | <div> |
| | | <!-- 设å¤ç»è®¡ --> |
| | | <div class="equipment-stats"> |
| | | <div class="equipment-header"> |
| | | <div class="equipment-header clickable" @click="handleNavigate"> |
| | | <img |
| | | src="@/assets/BI/shujutongjiicon@2x.png" |
| | | alt="徿 " |
| | |
| | | |
| | | <script setup> |
| | | import { ref, onMounted, inject, watch, nextTick } from 'vue' |
| | | import { useRouter } from 'vue-router' |
| | | import * as echarts from 'echarts' |
| | | import Echarts from '@/components/Echarts/echarts.vue' |
| | | import { inputOutputAnalysis } from '@/api/viewIndex.js' |
| | | import DateTypeSwitch from "@/views/reportAnalysis/productionAnalysis/components/DateTypeSwitch.vue"; |
| | | import { getProductionRoute } from '../productionNavigation.js' |
| | | |
| | | const router = useRouter() |
| | | |
| | | const handleNavigate = () => { |
| | | const path = getProductionRoute('æå
¥äº§åºåæ') |
| | | if (path) { |
| | | router.push(path) |
| | | } |
| | | } |
| | | |
| | | const dateType = ref(3) // 1=å¨ 2=æ 3=å£åº¦ |
| | | const chartRef = ref(null) |
| | |
| | | padding-bottom: 2px; |
| | | } |
| | | |
| | | .equipment-header.clickable { |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .equipment-header.clickable:hover .equipment-title { |
| | | opacity: 0.85; |
| | | } |
| | | |
| | | .equipment-title { |
| | | font-weight: 500; |
| | | font-size: 18px; |
| | |
| | | v-for="item in statItems" |
| | | :key="item.name" |
| | | class="stat-card" |
| | | :class="{ clickable: !!getStatRoute(item.name) }" |
| | | @click="handleStatClick(item.name)" |
| | | > |
| | | <img src="@/assets/BI/icon@2x.png" alt="徿 " class="card-icon" /> |
| | | <div class="card-content"> |
| | |
| | | |
| | | <script setup> |
| | | import { ref, onMounted, inject, watch } from 'vue' |
| | | import { useRouter } from 'vue-router' |
| | | import { orderCount } from '@/api/viewIndex.js' |
| | | import { getProductionRoute } from '../productionNavigation.js' |
| | | |
| | | const router = useRouter() |
| | | const statItems = ref([]) |
| | | |
| | | const getStatRoute = (name) => getProductionRoute(name) |
| | | |
| | | const handleStatClick = (name) => { |
| | | const path = getStatRoute(name) |
| | | if (path) { |
| | | router.push(path) |
| | | } |
| | | } |
| | | |
| | | const formatPercent = (val) => { |
| | | const num = Number(val) || 0 |
| | |
| | | height: 142px; |
| | | } |
| | | |
| | | .stat-card.clickable { |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .stat-card.clickable:hover .card-label { |
| | | color: #43e8fc; |
| | | } |
| | | |
| | | .card-icon { |
| | | width: 100px; |
| | | height: 100px; |
| | |
| | | <template> |
| | | <div> |
| | | <PanelHeader title="å¨å¶åç»è®¡åæ" /> |
| | | <PanelHeader title="å¨å¶åç»è®¡åæ" to="/productionManagement/productionOrder" /> |
| | | <div class="main-panel panel-item-customers"> |
| | | <CarouselCards :items="cardItems" :visible-count="3" /> |
| | | <div class="chart-wrapper"> |
| | |
| | | <template> |
| | | <div> |
| | | <PanelHeader title="å·¥åºäº§åºåæ" /> |
| | | <PanelHeader title="å·¥åºäº§åºåæ" to="/productionManagement/processStatistics" /> |
| | | <div class="main-panel panel-item-customers"> |
| | | <div class="filters-row"> |
| | | <DateTypeSwitch v-model="dateType" @change="handleDateTypeChange" /> |
| | |
| | | <template> |
| | | <div> |
| | | <PanelHeader title="çäº§æ ¸ç®åæ" /> |
| | | <PanelHeader title="çäº§æ ¸ç®åæ" to="/productionManagement/productionCosting" /> |
| | | <div class="main-panel panel-item-customers"> |
| | | <div class="filters-row"> |
| | | <DateTypeSwitch v-model="dateType" @change="handleDateTypeChange" /> |
| | |
| | | <template> |
| | | <div> |
| | | <PanelHeader title="å·¥åæ§è¡æçåæ" /> |
| | | <PanelHeader title="å·¥åæ§è¡æçåæ" to="/productionManagement/productionManagement/workOrderEdit/index" /> |
| | | <div class="main-panel panel-item-customers"> |
| | | <div class="filters-row"> |
| | | <DateTypeSwitch v-model="dateType" @change="handleDateTypeChange" /> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | const PRODUCTION_ORDER_ROUTE = '/productionManagement/productionOrder' |
| | | |
| | | export const PRODUCTION_ROUTE_MAP = { |
| | | å·¥åºäº§åºåæ: '/productionManagement/processStatistics', |
| | | å¨å¶åç»è®¡åæ: PRODUCTION_ORDER_ROUTE, |
| | | çäº§è®¢åæ°: PRODUCTION_ORDER_ROUTE, |
| | | å·²å®æè®¢åæ°: PRODUCTION_ORDER_ROUTE, |
| | | å¾
ç产订å: PRODUCTION_ORDER_ROUTE, |
| | | å¾
çäº§è®¢åæ°: PRODUCTION_ORDER_ROUTE, |
| | | ç产订å宿è¿åº¦: PRODUCTION_ORDER_ROUTE, |
| | | ç产订å宿è¿åº¦æ°: PRODUCTION_ORDER_ROUTE, |
| | | æå
¥äº§åºåæ: '/productionManagement/productionReporting', |
| | | å·¥åæ§è¡æçåæ: '/productionManagement/productionManagement/workOrderEdit/index', |
| | | çäº§æ ¸ç®åæ: '/productionManagement/productionCosting', |
| | | } |
| | | |
| | | export function getProductionRoute(name) { |
| | | return PRODUCTION_ROUTE_MAP[name] || '' |
| | | } |