gongchunyi
7 小时以前 672400898397dd453d11e8fbacd92c448c4633a0
Merge branch 'dev_pro_河南鹤壁' of http://114.132.189.42:9002/r/product-inventory-management into dev_pro_河南鹤壁
已添加1个文件
已修改10个文件
98 ■■■■ 文件已修改
.env.development 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.lmtx 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multiple/config.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Echarts/echarts.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionTraceability/index.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/PSIDataAnalysis/components/center-bottom.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/dataDashboard/components/basic/right-bottom.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/dataDashboard/components/basic/right-top.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/productionAnalysis/components/center-center.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/productionAnalysis/components/right-bottom.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/productionAnalysis/components/right-top.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.development
@@ -7,4 +7,4 @@
# ä¸­å°ä¼ä¸šæ•°å­—化转型二级套餐包/开发环境
VITE_APP_BASE_API = '/dev-api'
VITE_BASE_API = http://1.15.17.182:9048
VITE_BASE_API = 'http://localhost:9003'
.env.lmtx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
# é¡µé¢æ ‡é¢˜
VITE_APP_TITLE = ç»¿ç¾ŽèŠ‚èƒ½ç®¡ç†ç³»ç»Ÿ
# å¼€å‘环境配置
VITE_APP_ENV = 'development'
# ä¸­å°ä¼ä¸šæ•°å­—化转型二级套餐包/开发环境
VITE_APP_BASE_API = '/dev-api'
VITE_BASE_API = 'http://localhost:9004'
multiple/config.json
@@ -114,6 +114,15 @@
    "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"
}
src/components/Echarts/echarts.vue
@@ -203,6 +203,10 @@
  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],
src/views/productionManagement/productionTraceability/index.vue
@@ -240,9 +240,9 @@
              <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>
@@ -360,6 +360,28 @@
    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;
src/views/reportAnalysis/PSIDataAnalysis/components/center-bottom.vue
@@ -30,7 +30,7 @@
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%' }
src/views/reportAnalysis/dataDashboard/components/basic/right-bottom.vue
@@ -33,7 +33,7 @@
  height: '100%',
}
const dateType = ref(1) // 1=周 2=月 3=季度
const dateType = ref(3) // 1=周 2=月 3=季度
// é£žæœºå›¾æ ‡ SVG path(与 right-top ä¸€è‡´ï¼‰
const aircraft =
src/views/reportAnalysis/dataDashboard/components/basic/right-top.vue
@@ -32,7 +32,7 @@
  height: '100%',
}
const radio1 = ref(1)
const radio1 = ref(3)
// é£žæœºå›¾æ ‡ SVG path
const aircraft =
src/views/reportAnalysis/productionAnalysis/components/center-center.vue
@@ -10,8 +10,12 @@
        />
        <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"
@@ -27,11 +31,14 @@
</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%',
@@ -77,6 +84,10 @@
    splitLine: { lineStyle: { color: '#B8C8E0' } },
  },
]
const handleDateTypeChange = () => {
  fetchData()
}
const lineSeries = ref([
  {
@@ -132,18 +143,27 @@
}
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)
@@ -155,6 +175,7 @@
onMounted(() => {
  fetchData()
  scheduleChartResize()
})
</script>
@@ -197,4 +218,10 @@
  width: 50px;
  height: 50px;
}
.filters-row {
  display: flex;
  justify-content: flex-end;
  align-items: center;
}
</style>
src/views/reportAnalysis/productionAnalysis/components/right-bottom.vue
@@ -28,7 +28,7 @@
import DateTypeSwitch from './DateTypeSwitch.vue'
import Echarts from '@/components/Echarts/echarts.vue'
const dateType = ref(1)
const dateType = ref(3)
const chartStyle = {
  width: '100%',
src/views/reportAnalysis/productionAnalysis/components/right-top.vue
@@ -28,7 +28,7 @@
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%',
@@ -135,7 +135,7 @@
}
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