wukai пре 2 месеци
родитељ
комит
2db66faaea
1 измењених фајлова са 44 додато и 34 уклоњено
  1. 44 34
      src/views/lean/cap/index.vue

+ 44 - 34
src/views/lean/cap/index.vue

@@ -29,18 +29,19 @@
           </template>
           <el-row :gutter="20">
             <el-col :span="6">
-              <el-statistic title="预测CPK值" :value="predictionResult.cpkPrediction" />
+              <el-statistic title="预测CPK值" :value="predictionResult.cpkPrediction"/>
               <div style="font-size: 12px; color: #666; margin-top: 5px;">{{ cpkDescription }}</div>
             </el-col>
             <el-col :span="6">
-              <el-statistic title="预测标准差" :value="predictionResult.stdDevPrediction" />
+              <el-statistic title="预测标准差" :value="predictionResult.stdDevPrediction"/>
               <div style="font-size: 12px; color: #666; margin-top: 5px;">{{ stdDevDescription }}</div>
             </el-col>
             <el-col :span="6">
               <div class="trend-analysis">
                 <div class="trend-title">趋势分析</div>
                 <div class="trend-content">
-                  <el-tag :type="getTrendTagType(predictionResult.trend)" v-if="predictionResult.trend && predictionResult.trend !== '0'">
+                  <el-tag :type="getTrendTagType(predictionResult.trend)"
+                          v-if="predictionResult.trend && predictionResult.trend !== '0'">
                     {{ predictionResult.trend }}
                   </el-tag>
                   <el-tag :type="getTrendTagType('稳定趋势')" v-else>
@@ -86,13 +87,13 @@
           <span>{{ parseTime(scope.row.dataTime, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="目标值" align="center" prop="targetValue"/>
+      <el-table-column label="目标值(克)" align="center" prop="targetValue"/>
       <el-table-column label="误差范围" align="center" prop="toleranceRange">
         <template #default="scope">
           <span>±{{ scope.row.toleranceRange !== null ? (scope.row.toleranceRange + '%') : '' }}</span>
         </template>
       </el-table-column>
-<!--      <el-table-column label="误差值" align="center" prop="toleranceValue"/>-->
+      <!--      <el-table-column label="误差值" align="center" prop="toleranceValue"/>-->
       <!--      <el-table-column label="测量值" align="center" prop="measuredValue" />-->
       <el-table-column label="CPK" align="center" prop="cpkValue"/>
       <el-table-column label="标准差" align="center" prop="stdDeviation"/>
@@ -117,7 +118,7 @@
     <el-dialog :title="title" v-model="open" style="width: 1366px;height: 768px;" append-to-body>
       <el-form ref="capRef" :model="form" :rules="rules" label-width="120px">
         <el-row :gutter="20">
-          <el-col :span="8">
+          <el-col :span="6">
             <el-form-item label="测量时间" prop="dataTime">
               <el-date-picker clearable
                               v-model="form.dataTime"
@@ -127,13 +128,13 @@
               </el-date-picker>
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item label="目标值" prop="targetValue">
+          <el-col :span="6">
+            <el-form-item label="目标值(克)" prop="targetValue">
               <el-input-number v-model="form.targetValue" placeholder="请输入目标值" :min="0" :precision="0"
                                controls-position="right"/>
             </el-form-item>
           </el-col>
-          <el-col :span="8">
+          <el-col :span="6">
             <el-form-item label="偏差" prop="toleranceRange">
               <div style="display: flex; align-items: center;">
                 <span style="margin-right: 5px;">±</span>
@@ -143,6 +144,11 @@
               </div>
             </el-form-item>
           </el-col>
+          <el-col :span="6">
+            <el-form-item label="设备号" prop="remark">
+              <el-input v-model="form.remark" placeholder="请输入设备号"/>
+            </el-form-item>
+          </el-col>
         </el-row>
         <!--        <el-form-item label="测量值" prop="measuredValue">-->
         <!--          <el-input v-model="form.measuredValue" type="textarea" placeholder="测量值将通过子表录入并自动转换为JSON数组" :disabled="true" />-->
@@ -174,9 +180,7 @@
         <!--        <el-form-item label="规格下限" prop="lsl">-->
         <!--          <el-input v-model="form.lsl" placeholder="请输入规格下限" />-->
         <!--        </el-form-item>-->
-        <el-form-item label="设备号" prop="remark">
-          <el-input v-model="form.remark" placeholder="请输入设备号" />
-        </el-form-item>
+
 
         <!-- 子表录入测量值 -->
         <el-divider content-position="center">测量值输入</el-divider>
@@ -330,10 +334,13 @@
             <el-col :span="8" style="height: 100%; display: flex; flex-direction: column;">
               <div style="height: 45%; margin-bottom: 15px;">
                 <el-descriptions title="基本信息" :column="2" border size="small" style="height: 100%;">
-                  <el-descriptions-item label="测量时间">{{ parseTime(viewForm.dataTime, '{y}-{m}-{d}') }}</el-descriptions-item>
+                  <el-descriptions-item label="测量时间">{{
+                      parseTime(viewForm.dataTime, '{y}-{m}-{d}')
+                    }}
+                  </el-descriptions-item>
                   <el-descriptions-item label="目标值">{{ viewForm.targetValue }}</el-descriptions-item>
                   <el-descriptions-item label="误差范围">±{{ viewForm.toleranceRange }}%</el-descriptions-item>
-<!--                  <el-descriptions-item label="误差值">{{ viewForm.toleranceValue }}</el-descriptions-item>-->
+                  <!--                  <el-descriptions-item label="误差值">{{ viewForm.toleranceValue }}</el-descriptions-item>-->
                   <el-descriptions-item label="规格上限">{{ viewForm.usl }}</el-descriptions-item>
                   <el-descriptions-item label="规格下限">{{ viewForm.lsl }}</el-descriptions-item>
                 </el-descriptions>
@@ -359,10 +366,12 @@
         <div style="flex: 1; overflow: hidden;">
           <el-row :gutter="15" style="height: 100%;">
             <el-col :span="10" style="height: 100%; display: flex; flex-direction: column;">
-              <div style="font-size: 14px; font-weight: bold; margin-bottom: 10px;">整体质量水平评价(CPK过程能力分析)</div>
+              <div style="font-size: 14px; font-weight: bold; margin-bottom: 10px;">整体质量水平评价(CPK过程能力分析)
+              </div>
               <div style="flex: 1; overflow: hidden;">
-                <el-table :data="cpkEvaluation" border :row-class-name="cpkTableRowClassName" size="mini" style="font-size: 12px; width: 100%;">
-                  <el-table-column prop="cpk" label="Cpk值"  width="125" ></el-table-column>
+                <el-table :data="cpkEvaluation" border :row-class-name="cpkTableRowClassName" size="mini"
+                          style="font-size: 12px; width: 100%;">
+                  <el-table-column prop="cpk" label="Cpk值" width="125"></el-table-column>
                   <el-table-column prop="level" label="水平" width="70"></el-table-column>
                   <el-table-column prop="evaluation" label="过程能力评价" width="110"></el-table-column>
                   <el-table-column prop="defectRate" label="大约对应不良率" width="118"></el-table-column>
@@ -373,7 +382,8 @@
             <el-col :span="14" style="height: 100%; display: flex; flex-direction: column;">
               <div style="font-size: 14px; font-weight: bold; margin-bottom: 10px;">重量稳定性评价(标准差分析)</div>
               <div style="flex: 1; overflow: auto;">
-                <el-table :data="calculatedStdDeviationEvaluation" border :row-class-name="stdDeviationTableRowClassName" size="mini" style="font-size: 12px;">
+                <el-table :data="calculatedStdDeviationEvaluation" border
+                          :row-class-name="stdDeviationTableRowClassName" size="mini" style="font-size: 12px;">
                   <el-table-column prop="level" label="标准差水平" width="100"></el-table-column>
                   <el-table-column prop="stdValue" label="标准差値" width="110"></el-table-column>
                   <el-table-column prop="cpk" label="Cpk值" width="80"></el-table-column>
@@ -398,16 +408,16 @@
     <!-- 标准差前5的记录弹窗 -->
     <el-dialog title="工艺需调整机台" v-model="topStdDevOpen" width="800px" append-to-body>
       <el-table :data="topStdDevList" stripe>
-        <el-table-column label="序号" type="index" width="60" align="center" />
-        <el-table-column label="设备号" align="center" >
+        <el-table-column label="序号" type="index" width="60" align="center"/>
+        <el-table-column label="设备号" align="center">
           <template #default="scope">
             {{ [77, 121, 63, 18, 35][scope.$index] }}
           </template>
         </el-table-column>
-        <el-table-column label="目标值" prop="targetValue" align="center" />
-        <el-table-column label="标准差" prop="stdDeviation" align="center" />
-        <el-table-column label="CPK" prop="cpkValue" align="center" />
-        <el-table-column label="平均值" prop="meanValue" align="center" />
+        <el-table-column label="目标值(克)" prop="targetValue" align="center"/>
+        <el-table-column label="标准差" prop="stdDeviation" align="center"/>
+        <el-table-column label="CPK" prop="cpkValue" align="center"/>
+        <el-table-column label="平均值" prop="meanValue" align="center"/>
         <el-table-column label="操作建议" align="center">
           <template #default="scope">
             <span v-if="parseFloat(scope.row.meanValue) > parseFloat(scope.row.targetValue)">调轻</span>
@@ -428,8 +438,8 @@
 <script setup name="Cap">
 import * as echarts from 'echarts';
 import {addCap, delCap, getCap, listCap, updateCap} from "@/api/lean/cap";
-import { parseTime } from "@/utils/ruoyi";
-import { watch } from 'vue';
+import {parseTime} from "@/utils/ruoyi";
+import {watch} from 'vue';
 
 const {proxy} = getCurrentInstance();
 
@@ -824,7 +834,7 @@ function calculatePrediction() {
     const recentCpkValues = sortedData.slice(-5).map(item => parseFloat(item.cpkValue) || 0);
     let cpkSum = 0;
     for (let i = 1; i < recentCpkValues.length; i++) {
-      cpkSum += (recentCpkValues[i] - recentCpkValues[i-1]);
+      cpkSum += (recentCpkValues[i] - recentCpkValues[i - 1]);
     }
     cpkTrend = cpkSum / (recentCpkValues.length - 1);
 
@@ -832,7 +842,7 @@ function calculatePrediction() {
     const recentStdDevValues = sortedData.slice(-5).map(item => parseFloat(item.stdDeviation) || 0);
     let stdDevSum = 0;
     for (let i = 1; i < recentStdDevValues.length; i++) {
-      stdDevSum += (recentStdDevValues[i] - recentStdDevValues[i-1]);
+      stdDevSum += (recentStdDevValues[i] - recentStdDevValues[i - 1]);
     }
     stdDevTrend = stdDevSum / (recentStdDevValues.length - 1);
   }
@@ -1003,7 +1013,7 @@ function handleUpdate(row) {
 
             // 为显示目的解析并保存测量值
             measuredValues.value = parsed.map(item =>
-              typeof item === 'object' ? item.value : item
+                typeof item === 'object' ? item.value : item
             );
           } else if (parsed.length > 0 && typeof parsed[0] === 'number') {
             // 简单数组形式 [1,2,3,4,5]
@@ -1053,7 +1063,7 @@ function handleView(row) {
         if (parsed.length > 0 && typeof parsed[0] === 'object') {
           // 对象数组形式 [{value: 1}, {value: 2}]
           measuredValues.value = parsed.map(item =>
-            typeof item === 'object' ? item.value : item
+              typeof item === 'object' ? item.value : item
           );
         } else if (parsed.length > 0 && typeof parsed[0] === 'number') {
           // 简单数组形式 [1,2,3,4,5]
@@ -1137,9 +1147,9 @@ function handleDelete(row) {
 function showTopStdDev() {
   // 按标准差降序排序,取前5条记录
   const sortedList = [...capList.value]
-    .filter(item => item.stdDeviation !== null && item.stdDeviation !== undefined)
-    .sort((a, b) => parseFloat(b.stdDeviation) - parseFloat(a.stdDeviation))
-    .slice(0, 5);
+      .filter(item => item.stdDeviation !== null && item.stdDeviation !== undefined)
+      .sort((a, b) => parseFloat(b.stdDeviation) - parseFloat(a.stdDeviation))
+      .slice(0, 5);
 
   topStdDevList.value = sortedList;
   topStdDevOpen.value = true;
@@ -1447,7 +1457,7 @@ function drawChart() {
   const normalY = binCenters.map(x => {
     // 正态分布概率密度函数
     return (1 / (Math.sqrt(2 * Math.PI) * stdDev)) *
-           Math.exp(-0.5 * Math.pow((x - mean) / stdDev, 2));
+        Math.exp(-0.5 * Math.pow((x - mean) / stdDev, 2));
   });
 
   // 将概率密度转换为可与直方图比较的频率