Merge branch 'dev_pro_河南鹤壁' of http://114.132.189.42:9002/r/product-inventory-management into dev_pro_河南鹤壁
| | |
| | | # ä¸å°ä¼ä¸æ°åå转åäºçº§å¥é¤å
/å¼åç¯å¢
|
| | | VITE_APP_BASE_API = '/dev-api'
|
| | |
|
| | | VITE_BASE_API = http://1.15.17.182:9048
|
| | | VITE_BASE_API = 'http://localhost:9003'
|
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 页颿 é¢ |
| | | VITE_APP_TITLE = 绿ç¾èè½ç®¡çç³»ç» |
| | | |
| | | # å¼åç¯å¢é
ç½® |
| | | VITE_APP_ENV = 'development' |
| | | |
| | | # ä¸å°ä¼ä¸æ°åå转åäºçº§å¥é¤å
/å¼åç¯å¢ |
| | | VITE_APP_BASE_API = '/dev-api' |
| | | |
| | | VITE_BASE_API = 'http://localhost:9004' |
| | |
| | | "logo": "logo/XCDQLogo.png", |
| | | "favicon": "favicon/XCDQfavicon.ico" |
| | | }, |
| | | "LMJN": { |
| | | "env": { |
| | | "VITE_APP_TITLE": "绿ç¾èè½ç®¡çç³»ç»", |
| | | "VITE_BASE_API": "http://192.168.1.23:9001", |
| | | "VITE_JAVA_API": "http://192.168.1.23:9000" |
| | | }, |
| | | "logo": "logo/Logo.png", |
| | | "favicon": "favicon/favicon.ico" |
| | | }, |
| | | "logo": "/src/assets/logo/logo.png", |
| | | "favicon": "/public/favicon.ico" |
| | | } |
| | |
| | | clearInitTimer() |
| | | }) |
| | | |
| | | defineExpose({ |
| | | resize: windowResizeListener, |
| | | }) |
| | | |
| | | // Watch all reactive props that affect the chart |
| | | watch( |
| | | () => [props.xAxis, props.yAxis, props.series, props.legend, props.tooltip, props.visualMap], |
| | |
| | | <el-descriptions-item label="è§æ ¼åå·">{{ record.model || '-' }}</el-descriptions-item> |
| | | <el-descriptions-item label="æ°é">{{ record.quantity || 0 }} {{ record.unit || '-' }}</el-descriptions-item> |
| | | <el-descriptions-item label="æ£æµåä½">{{ record.checkCompany || '-' }}</el-descriptions-item> |
| | | <el-descriptions-item label="æ£æµç»æ"> |
| | | <el-tag :type="record.checkResult === 'åæ ¼' ? 'success' : 'danger'"> |
| | | {{ record.checkResult || 'å¾
æ£æµ' }} |
| | | <el-descriptions-item label="åæ ¼ç"> |
| | | <el-tag :type="getPassRateTagType(record)"> |
| | | {{ getPassRateDisplay(record) }} |
| | | </el-tag> |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | |
| | | return "#67c23a"; |
| | | }; |
| | | |
| | | const getPassRate = (record) => { |
| | | const qualified = Number(record.qualifiedQuantity) || 0; |
| | | const unqualified = Number(record.unqualifiedQuantity) || 0; |
| | | const total = qualified + unqualified; |
| | | if (total === 0) return null; |
| | | return Number(((qualified / total) * 100).toFixed(2)); |
| | | }; |
| | | |
| | | const getPassRateDisplay = (record) => { |
| | | const rate = getPassRate(record); |
| | | if (rate === null) return 'â'; |
| | | return `${rate}%`; |
| | | }; |
| | | |
| | | const getPassRateTagType = (record) => { |
| | | const rate = getPassRate(record); |
| | | if (rate === null) return 'info'; |
| | | if (rate >= 100) return 'success'; |
| | | if (rate >= 75) return 'primary'; |
| | | return 'danger'; |
| | | }; |
| | | |
| | | // 模ææç´¢æ¹æ³ |
| | | const handleNpsNoSearch = async query => { |
| | | npsNoLoading.value = true; |
| | |
| | | import ProductTypeSwitch from './ProductTypeSwitch.vue' |
| | | import { productInOutAnalysis } from '@/api/viewIndex.js' |
| | | |
| | | const productType = ref(1) // 1=åææ 2=åæå 3=æå |
| | | const productType = ref(2) // 1=åææ 3=åæå 2=æå |
| | | |
| | | const chartStyle = { width: '100%', height: '130%' } |
| | | |
| | |
| | | height: '100%', |
| | | } |
| | | |
| | | const dateType = ref(1) // 1=å¨ 2=æ 3=å£åº¦ |
| | | const dateType = ref(3) // 1=å¨ 2=æ 3=å£åº¦ |
| | | |
| | | // 飿ºå¾æ SVG pathï¼ä¸ right-top ä¸è´ï¼ |
| | | const aircraft = |
| | |
| | | height: '100%', |
| | | } |
| | | |
| | | const radio1 = ref(1) |
| | | const radio1 = ref(3) |
| | | |
| | | // 飿ºå¾æ SVG path |
| | | const aircraft = |
| | |
| | | /> |
| | | <span class="equipment-title">æå
¥äº§åºåæ</span> |
| | | </div> |
| | | |
| | | <div class="filters-row"> |
| | | <DateTypeSwitch v-model="dateType" @change="handleDateTypeChange" /> |
| | | </div> |
| | | <Echarts |
| | | ref="chart" |
| | | ref="chartRef" |
| | | :chartStyle="chartStyle" |
| | | :grid="grid" |
| | | :legend="lineLegend" |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, onMounted, inject, watch } from 'vue' |
| | | import { ref, onMounted, inject, watch, nextTick } from 'vue' |
| | | 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"; |
| | | |
| | | const dateType = ref(3) // 1=å¨ 2=æ 3=å£åº¦ |
| | | const chartRef = ref(null) |
| | | const chartStyle = { width: '100%', height: '100%' } |
| | | const grid = { |
| | | left: '3%', |
| | |
| | | splitLine: { lineStyle: { color: '#B8C8E0' } }, |
| | | }, |
| | | ] |
| | | |
| | | const handleDateTypeChange = () => { |
| | | fetchData() |
| | | } |
| | | |
| | | const lineSeries = ref([ |
| | | { |
| | |
| | | } |
| | | |
| | | const fetchData = () => { |
| | | inputOutputAnalysis() |
| | | inputOutputAnalysis({ type: dateType.value }) |
| | | .then((res) => { |
| | | if (res.code === 200 && Array.isArray(res.data)) { |
| | | const list = res.data |
| | | xAxis1.value[0].data = list.map((d) => d.date) |
| | | lineSeries.value[0].data = list.map((d) => Number(d.outputSum) || 0) |
| | | lineSeries.value[1].data = list.map((d) => Number(d.inputSum) || 0) |
| | | scheduleChartResize() |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | console.error('è·åæå
¥äº§åºåæå¤±è´¥:', err) |
| | | }) |
| | | } |
| | | |
| | | const scheduleChartResize = () => { |
| | | nextTick(() => { |
| | | ;[0, 150, 400].forEach((ms) => { |
| | | setTimeout(() => chartRef.value?.resize?.(), ms) |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | const dataDashboardRefreshTick = inject('dataDashboardRefreshTick', null) |
| | |
| | | |
| | | onMounted(() => { |
| | | fetchData() |
| | | scheduleChartResize() |
| | | }) |
| | | </script> |
| | | |
| | |
| | | width: 50px; |
| | | height: 50px; |
| | | } |
| | | |
| | | .filters-row { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | } |
| | | </style> |
| | |
| | | import DateTypeSwitch from './DateTypeSwitch.vue' |
| | | import Echarts from '@/components/Echarts/echarts.vue' |
| | | |
| | | const dateType = ref(1) |
| | | const dateType = ref(3) |
| | | |
| | | const chartStyle = { |
| | | width: '100%', |
| | |
| | | import Echarts from '@/components/Echarts/echarts.vue' |
| | | import DateTypeSwitch from './DateTypeSwitch.vue' |
| | | |
| | | const dateType = ref(1) // 1=å¨ 2=æ 3=å£åº¦ |
| | | const dateType = ref(3) // 1=å¨ 2=æ 3=å£åº¦ |
| | | |
| | | const chartStyle = { |
| | | width: '100%', |
| | |
| | | } |
| | | |
| | | const fetchData = () => { |
| | | workOrderEfficiencyAnalysis({ dateType: dateType.value }) |
| | | workOrderEfficiencyAnalysis({ type: dateType.value }) |
| | | .then((res) => { |
| | | if (res.code !== 200 || !Array.isArray(res.data)) return |
| | | const items = res.data |