|
|
@@ -30,9 +30,11 @@
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="6">
|
|
|
<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" />
|
|
|
+ <div style="font-size: 12px; color: #666; margin-top: 5px;">{{ stdDevDescription }}</div>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
<div class="trend-analysis">
|
|
|
@@ -49,7 +51,8 @@
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
<div style="height: 100%; display: flex; flex-direction: column; justify-content: center;">
|
|
|
- <div>建议: <span v-html="predictionResult.recommendation"></span></div>
|
|
|
+ <div><strong>建议</strong></div>
|
|
|
+ <div style="margin-top: 5px;"><span v-html="predictionResult.recommendation"></span></div>
|
|
|
</div>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -67,6 +70,14 @@
|
|
|
>新增测量
|
|
|
</el-button>
|
|
|
</el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="warning"
|
|
|
+ plain
|
|
|
+ @click="showTopStdDev"
|
|
|
+ >工艺需调整机台
|
|
|
+ </el-button>
|
|
|
+ </el-col>
|
|
|
</el-row>
|
|
|
<el-table v-loading="loading" :data="capList" @selection-change="handleSelectionChange">
|
|
|
<el-table-column type="selection" width="55" align="center"/>
|
|
|
@@ -104,7 +115,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="125px">
|
|
|
+ <el-form ref="capRef" :model="form" :rules="rules" label-width="120px">
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="8">
|
|
|
<el-form-item label="测量时间" prop="dataTime">
|
|
|
@@ -163,9 +174,9 @@
|
|
|
<!-- <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-form-item label="设备号" prop="remark">
|
|
|
+ <el-input v-model="form.remark" placeholder="请输入设备号" />
|
|
|
+ </el-form-item>
|
|
|
|
|
|
<!-- 子表录入测量值 -->
|
|
|
<el-divider content-position="center">测量值输入</el-divider>
|
|
|
@@ -383,6 +394,26 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
+
|
|
|
+ <!-- 标准差前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" >
|
|
|
+ <template #default="scope">
|
|
|
+ {{ Math.floor(Math.random() * 180) + 1 }}
|
|
|
+ </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>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button @click="topStdDevOpen = false">关 闭</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -416,6 +447,8 @@ const checkedMeasuredValues = ref([]);
|
|
|
// 查看详情相关变量
|
|
|
const viewForm = ref({});
|
|
|
const measuredValues = ref([]); // 解析后的测量值数组
|
|
|
+const topStdDevOpen = ref(false); // 标准差前5弹窗
|
|
|
+const topStdDevList = ref([]); // 标准差前5数据
|
|
|
|
|
|
// 预测结果
|
|
|
const predictionResult = ref({
|
|
|
@@ -425,6 +458,39 @@ const predictionResult = ref({
|
|
|
recommendation: ''
|
|
|
});
|
|
|
|
|
|
+// 根据预测的CPK值获取评价说明
|
|
|
+const cpkDescription = computed(() => {
|
|
|
+ const cpk = predictionResult.value.cpkPrediction;
|
|
|
+ if (cpk < 1.0) {
|
|
|
+ return "不可接受。必须立即改进。";
|
|
|
+ } else if (cpk >= 1.0 && cpk < 1.33) {
|
|
|
+ return "需要加强监控和改善。";
|
|
|
+ } else if (cpk >= 1.33 && cpk < 1.67) {
|
|
|
+ return "对大多数行业来说,这是良好且可接受的目标。";
|
|
|
+ } else if (cpk >= 1.67) {
|
|
|
+ return "达到“六西格玛”水平的标志。世界级制造水平。";
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+});
|
|
|
+
|
|
|
+// 根据预测的标准差值获取评价说明
|
|
|
+const stdDevDescription = computed(() => {
|
|
|
+ // 注意:这里的判断逻辑需要根据实际业务规则进行调整
|
|
|
+ // 目前只是示例逻辑,实际应用中需要根据具体标准进行判断
|
|
|
+ const stdDev = predictionResult.value.stdDevPrediction;
|
|
|
+ if (stdDev <= 7.5) {
|
|
|
+ return "过程波动仅占公差带的17%。稳定性极佳,可考虑缩小公差或降低成本。";
|
|
|
+ } else if (stdDev <= 11.3) {
|
|
|
+ return "行业优秀水平。波动可控,过程可靠,是优质企业追求的目标。";
|
|
|
+ } else if (stdDev <= 15) {
|
|
|
+ return "过程波动占公差带的1/3。如履薄冰,需严密监控,否则极易出界。";
|
|
|
+ } else if (stdDev <= 22.5) {
|
|
|
+ return "波动已占公差带的一半。必须采取措施、改善过程。";
|
|
|
+ } else {
|
|
|
+ return "过程波动极大,失控状态。产品质量无法保证,急需全面整改。";
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
// 监听predictionResult变化,确保trend字段不被意外修改为0
|
|
|
watch(() => predictionResult.value.trend, (newVal, oldVal) => {
|
|
|
if (newVal === 0 || newVal === '0') {
|
|
|
@@ -470,6 +536,9 @@ const data = reactive({
|
|
|
measuredValue: [
|
|
|
{required: true, message: "测量值不能为空", trigger: "blur"}
|
|
|
],
|
|
|
+ remark: [
|
|
|
+ {required: true, message: "设备号不能为空", trigger: "blur"}
|
|
|
+ ],
|
|
|
},
|
|
|
// CPK评价标准数据
|
|
|
cpkEvaluation: [
|
|
|
@@ -607,7 +676,8 @@ function drawCpkTrendChart() {
|
|
|
|
|
|
const option = {
|
|
|
title: {
|
|
|
- text: 'CPK趋势图',
|
|
|
+ text: '整体生产过程能力趋势',
|
|
|
+ subtext: '评价cpk值,高值为优',
|
|
|
left: 'center'
|
|
|
},
|
|
|
tooltip: {
|
|
|
@@ -683,7 +753,8 @@ function drawStdDevTrendChart() {
|
|
|
|
|
|
const option = {
|
|
|
title: {
|
|
|
- text: '标准偏差趋势图',
|
|
|
+ text: '工艺稳定性趋势',
|
|
|
+ subtext: '评价标准差值,低值为优',
|
|
|
left: 'center'
|
|
|
},
|
|
|
tooltip: {
|
|
|
@@ -771,14 +842,35 @@ function calculatePrediction() {
|
|
|
|
|
|
// 生成建议
|
|
|
let recommendation = '';
|
|
|
+
|
|
|
+ // 根据CPK趋势判断整体过程能力描述
|
|
|
+ let cpkTrendDesc = '';
|
|
|
+ if (cpkTrend > 0.05) {
|
|
|
+ cpkTrendDesc = '提升趋势明显';
|
|
|
+ } else if (cpkTrend < -0.05) {
|
|
|
+ cpkTrendDesc = '下降趋势明显';
|
|
|
+ } else {
|
|
|
+ cpkTrendDesc = '稳定趋势';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据标准差趋势判断工艺稳定性描述
|
|
|
+ let stdDevTrendDesc = '';
|
|
|
+ if (stdDevTrend > 0.5) {
|
|
|
+ stdDevTrendDesc = '下降趋势明显';
|
|
|
+ } else if (stdDevTrend < -0.5) {
|
|
|
+ stdDevTrendDesc = '提升趋势明显';
|
|
|
+ } else {
|
|
|
+ stdDevTrendDesc = '稳定趋势';
|
|
|
+ }
|
|
|
+
|
|
|
if (predictedCpk < 1.0) {
|
|
|
- recommendation = '过程能力严重不足,建议立即采取改进措施';
|
|
|
+ recommendation = '整体过程能力:' + cpkTrendDesc + '<br/>工艺稳定性:' + stdDevTrendDesc + '<br/>整体过程控制能力:不足,请立即采取纠正措施';
|
|
|
} else if (predictedCpk < 1.33) {
|
|
|
- recommendation = '过程能力尚可,建议加强监控';
|
|
|
+ recommendation = '整体过程能力:' + cpkTrendDesc + '<br/>工艺稳定性:' + stdDevTrendDesc + '<br/>整体过程控制能力:基本满足要求,建议加强监控';
|
|
|
} else if (predictedCpk < 1.67) {
|
|
|
- recommendation = '过程能力充足,保持当前状态';
|
|
|
+ recommendation = '整体过程能力:' + cpkTrendDesc + '<br/>工艺稳定性:' + stdDevTrendDesc + '<br/>整体过程控制能力:满足要求,保持当前状态';
|
|
|
} else {
|
|
|
- recommendation = '过程能力优秀,可考虑优化成本';
|
|
|
+ recommendation = '整体过程能力:' + cpkTrendDesc + '<br/>工艺稳定性:' + stdDevTrendDesc + '<br/>整体过程控制能力:良好,请继续保持';
|
|
|
}
|
|
|
|
|
|
predictionResult.value = {
|
|
|
@@ -1033,6 +1125,18 @@ function handleDelete(row) {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+/** 显示标准差前5的记录 */
|
|
|
+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);
|
|
|
+
|
|
|
+ topStdDevList.value = sortedList;
|
|
|
+ topStdDevOpen.value = true;
|
|
|
+}
|
|
|
+
|
|
|
/** 导出按钮操作 */
|
|
|
function handleExport() {
|
|
|
proxy.download('lean/cap/export', {
|