src/views/index.vue
@@ -227,9 +227,8 @@ </el-radio-group> </div> <div class="quality-cards"> <div class="quality-card one">原材料已检测数 <span>{{ qualityStatisticsObject.supplierNum }}件</span></div> <div class="quality-card two">过程检验数量 <span>{{ qualityStatisticsObject.processNum }}件</span></div> <div class="quality-card three">出厂已检数量 <span>{{ qualityStatisticsObject.factoryNum }}件</span></div> <div class="quality-card three">成品已检数量 <span>{{ qualityStatisticsObject.factoryNum }}件</span></div> </div> <Echarts ref="chart" :chartStyle="chartStyle" :grid="grid" :legend="barLegend" :series="barSeries1" :tooltip="tooltip" :xAxis="xAxis1" :yAxis="yAxis1" style="height: 260px"></Echarts> @@ -277,7 +276,6 @@ todayInventoryNum: 0, }) const qualityStatisticsObject = ref({ supplierNum: 0, processNum: 0, factoryNum: 0, }) @@ -300,15 +298,6 @@ const barSeries1 = ref([ { name: '原材料不合格数', type: 'bar', barGap: 0, emphasis: { focus: 'series' }, data: [] }, { name: '过程不合格数', type: 'bar', emphasis: { @@ -317,7 +306,7 @@ data: [] }, { name: '出厂不合格数', name: '成品不合格数', type: 'bar', emphasis: { focus: 'series' @@ -341,7 +330,7 @@ } const barLegend = { show: true, data: ['原材料不合格数', '过程不合格数', '出厂不合格数'] data: [ '过程不合格数', '成品不合格数'] } const barLegend1 = { show: true, @@ -522,14 +511,11 @@ xAxis1.value[0].data = [] barSeries1.value[0].data = [] barSeries1.value[1].data = [] barSeries1.value[2].data = [] res.data.item.forEach(item => { xAxis1.value[0].data.push(item.date) barSeries1.value[0].data.push(item.supplierNum) barSeries1.value[1].data.push(item.processNum) barSeries1.value[2].data.push(item.factoryNum) barSeries1.value[0].data.push(item.processNum) barSeries1.value[1].data.push(item.factoryNum) }) qualityStatisticsObject.value.supplierNum = res.data.supplierNum qualityStatisticsObject.value.processNum = res.data.processNum qualityStatisticsObject.value.factoryNum = res.data.factoryNum }) src/views/productionManagement/productionOrder/Detail/index.vue
@@ -89,6 +89,10 @@ <div class="grid-value">{{ p.outputQty ?? 0 }}</div> </div> <div class="grid-item"> <div class="grid-label">报废数量</div> <div class="grid-value success">{{ p.scrapQty ?? 0 }}</div> </div> <div class="grid-item"> <div class="grid-label">合格数量</div> <div class="grid-value success">{{ p.qualifiedQty ?? 0 }}</div> </div> @@ -124,8 +128,9 @@ <el-table-column label="报工人员" prop="nickName" min-width="120" show-overflow-tooltip /> <el-table-column label="报工时间" prop="createTime" min-width="160" show-overflow-tooltip /> <el-table-column label="产出数量" prop="quantity" min-width="110" /> <el-table-column label="报废数量" prop="scrapQty" min-width="110" /> <el-table-column label="合格数量" prop="qualifiedQty" min-width="110" /> <el-table-column label="不良数量" prop="scrapQty" min-width="110" /> <el-table-column label="不良数量" prop="defectiveQuantity" min-width="110" /> <el-table-column label="不合格处理" prop="dealResult" min-width="160" show-overflow-tooltip /> <el-table-column label="操作" width="150" fixed="right"> <template #default="{ row }"> @@ -232,13 +237,14 @@ const normalizeProcess = (item) => { // 字段以接口约定为准(你给的截图字段映射) // 工序:completionStatus/statusText/processNo/scrapRate/planQuantity/completeQuantity/completeQty/scrapQty // 工序:completionStatus/statusText/processNo/defectiveRate/planQuantity/completeQuantity/completeQty/scrapQty const inputQty = Number(item?.planQuantity ?? item?.inputQty ?? 0); const outputQty = Number(item?.completeQuantity ?? item?.outputQty ?? 0); const outputQty = Number(item?.totalQty ?? item?.outputQty ?? 0); const qualifiedQty = Number(item?.completeQty ?? item?.qualifiedQty ?? item?.goodQty ?? 0); const badQty = Number(item?.scrapQty ?? item?.badQty ?? item?.defectQty ?? 0); const badQty = Number(item?.defectiveQuantity ?? item?.badQty ?? item?.defectQty ?? 0); const scrapQty = Number(item?.scrapQty ?? 0); const completionStatus = Number(item?.completionStatus ?? 0); const scrapRate = Number(item?.scrapRate ?? NaN); const defectiveRate = Number(item?.defectiveRate ?? NaN); const status = normalizeStatus(item?.statusText ?? item?.status ?? item?.workStatus ?? item?.processStatus ?? item?.state, completionStatus, inputQty, outputQty); @@ -250,8 +256,9 @@ outputQty: Number.isFinite(outputQty) ? outputQty : 0, qualifiedQty: Math.max(0, Number.isFinite(qualifiedQty) ? qualifiedQty : 0), badQty: Math.max(0, Number.isFinite(badQty) ? badQty : 0), scrapQty: Math.max(0, Number.isFinite(scrapQty) ? scrapQty : 0), completionStatus: Number.isFinite(completionStatus) ? completionStatus : 0, scrapRate: Number.isFinite(scrapRate) ? scrapRate : null, defectiveRate: Number.isFinite(defectiveRate) ? defectiveRate : null, status, }; }; @@ -417,11 +424,11 @@ // 不良率:不良数量 / 产出数量(先按此口径,后续对接接口可调整) const defectRateText = (p) => { // 优先使用接口字段 scrapRate(你给的截图“不良率”) const scrapRate = Number(p?.scrapRate ?? NaN); if (Number.isFinite(scrapRate)) { // 有些接口 scrapRate 可能是 0~1 或 0~100,这里做一个简单判断 const percent = scrapRate <= 1 ? scrapRate * 100 : scrapRate; // 优先使用接口字段 defectiveRate(你给的截图“不良率”) const defectiveRate = Number(p?.defectiveRate ?? NaN); if (Number.isFinite(defectiveRate)) { // 有些接口 defectiveRate 可能是 0~1 或 0~100,这里做一个简单判断 const percent = defectiveRate <= 1 ? defectiveRate * 100 : defectiveRate; return `${percent.toFixed(2)}%`; } @@ -740,7 +747,7 @@ .step-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; .grid-item { background: #ffffff; src/views/productionManagement/workOrder/components/GranulationForm.vue
@@ -152,7 +152,7 @@ formData.otherData.burningMaterial.userName = selectedUser.userName; break; case 'burningMaterialConfirmId': formData.otherData.stirredMillIncludesMixing.confirmName = selectedUser.userName; formData.otherData.burningMaterial.confirmName = selectedUser.userName; break; case 'stirredMillUserId': formData.otherData.stirredMill.userName = selectedUser.userName; @@ -858,7 +858,7 @@ placeholder="请选择确认人" clearable filterable @change="handleUserChange($event, 'stirredMillConfirmId')"> @change="handleUserChange($event, 'granulationBConfirmId')"> <el-option v-for="user in userOptions" :key="user.userId" :label="user.userName" src/views/productionManagement/workOrder/components/ProductionRecordForm.vue
@@ -84,67 +84,70 @@ <template> <el-form ref="formRef" :model="formData" :rules="rules" :label-width="`${labelWidth}px`"> <el-form-item v-for="(item, index) in formData.list" :key="item.id" :label="fieldLabel(item)" :prop="`list.${index}.value`" > <el-input-number v-if="getType(item) === '数值格式'" v-model="item.value" :controls="false" style="width: 100%" placeholder="请输入" /> <el-date-picker v-else-if="getType(item) === '时间格式'" v-model="item.value" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" placeholder="请选择" style="width: 100%" /> <el-date-picker v-else-if="getType(item) === '日期格式'" v-model="item.value" type="date" value-format="YYYY-MM-DD" format="YYYY-MM-DD" placeholder="请选择" style="width: 100%" /> <el-select v-else-if="getType(item) === '是/否选框'" v-model="item.value" placeholder="请选择" clearable style="width: 100%" > <el-option label="是" value="是"/> <el-option label="否" value="否"/> </el-select> <el-select v-else-if="getType(item) === '机台选择'" v-model="item.value" placeholder="请选择" clearable style="width: 100%" > <el-option v-for="(item, index) in deviceOptions" :key="index" :label="item.deviceName" :value="item.deviceName" ></el-option> </el-select> <el-input v-else v-model="item.value" placeholder="请输入" clearable /> </el-form-item> <el-row :gutter="20"> <el-col :span="12" v-for="(item, index) in formData.list" :key="item.id"> <el-form-item :label="fieldLabel(item)" :prop="`list.${index}.value`" > <el-input-number v-if="getType(item) === '数值格式'" v-model="item.value" :controls="false" style="width: 100%" placeholder="请输入" /> <el-date-picker v-else-if="getType(item) === '时间格式'" v-model="item.value" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" placeholder="请选择" style="width: 100%" /> <el-date-picker v-else-if="getType(item) === '日期格式'" v-model="item.value" type="date" value-format="YYYY-MM-DD" format="YYYY-MM-DD" placeholder="请选择" style="width: 100%" /> <el-select v-else-if="getType(item) === '是/否选框'" v-model="item.value" placeholder="请选择" clearable style="width: 100%" > <el-option label="是" value="是"/> <el-option label="否" value="否"/> </el-select> <el-select v-else-if="getType(item) === '机台选择'" v-model="item.value" placeholder="请选择" clearable style="width: 100%" > <el-option v-for="(device, deviceIndex) in deviceOptions" :key="deviceIndex" :label="device.deviceName" :value="device.deviceName" ></el-option> </el-select> <el-input v-else v-model="item.value" placeholder="请输入" clearable style="width: 100%" /> </el-form-item> </el-col> </el-row> </el-form> </template> src/views/productionManagement/workOrder/components/VoltageSortingForm.vue
@@ -73,7 +73,7 @@ // 用户选择变化时更新 userName const handleUserChange = (value) => { if (value) { formData.userName = userOptions.value.find(user => user.userId === value).userName; formData.otherData.userName = userOptions.value.find(user => user.userId === value).userName; } }; const handleReport = () => { @@ -110,6 +110,7 @@ if (!props.isEdit) { formData.otherData = JSON.parse(props.row.otherData || '{}'); formData.quantity = props.row.quantity; formData.scrapQty = props.row.scrapQty; } else { const row = props.row; formData.planQuantity = row.planQuantity @@ -184,7 +185,7 @@ :label="user.userName" :value="user.userId"/> </el-select> <span v-else class="view-value">{{ displayValue(formData.userName || formData.userId) }}</span> <span v-else class="view-value">{{ displayValue(formData.otherData.userName || formData.otherData.userId) }}</span> </td> </tr> <tr> src/views/productionManagement/workOrder/index.vue
@@ -182,47 +182,57 @@ </el-dialog> <el-dialog v-model="reportDialogVisible" title="报工" width="500px"> width="800px"> <el-form ref="reportFormRef" :model="reportForm" :rules="reportFormRules" label-width="120px"> <el-form-item label="待生产数量"> <el-input v-model="reportForm.planQuantity" readonly style="width: 300px"/> </el-form-item> <el-form-item label="本次生产数量" prop="quantity"> <el-input v-model.number="reportForm.quantity" type="number" min="1" step="1" style="width: 300px" placeholder="请输入本次生产数量" @input="handleQuantityInput"/> </el-form-item> <el-form-item label="报废数量" prop="scrapQty"> <el-input v-model.number="reportForm.scrapQty" type="number" min="0" step="1" style="width: 300px" placeholder="请输入报废数量" @input="handleScrapQtyInput"/> </el-form-item> <el-form-item label="班组信息"> <el-select v-model="reportForm.userId" style="width: 300px" placeholder="请选择班组信息" clearable filterable @change="handleUserChange"> <el-option v-for="user in userOptions" :key="user.userId" :label="user.userName" :value="user.userId"/> </el-select> </el-form-item> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="待生产数量"> <el-input v-model="reportForm.planQuantity" readonly style="width: 100%"/> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="本次生产数量" prop="quantity"> <el-input v-model.number="reportForm.quantity" type="number" min="1" step="1" style="width: 100%" placeholder="请输入本次生产数量" @input="handleQuantityInput"/> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="报废数量" prop="scrapQty"> <el-input v-model.number="reportForm.scrapQty" type="number" min="0" step="1" style="width: 100%" placeholder="请输入报废数量" @input="handleScrapQtyInput"/> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="班组信息"> <el-select v-model="reportForm.userId" style="width: 100%" placeholder="请选择班组信息" clearable filterable @change="handleUserChange"> <el-option v-for="user in userOptions" :key="user.userId" :label="user.userName" :value="user.userId"/> </el-select> </el-form-item> </el-col> </el-row> <ProductionRecordForm ref="productionRecordFormRef" :list="processParamList"/> </el-form> <template #footer> @@ -986,4 +996,4 @@ height: 140px !important; } } </style> </style> src/views/qualityManagement/metricBinding/index.vue
@@ -53,9 +53,9 @@ @change="handleQuery" @clear="handleQuery" > <el-option label="原材料检验" value="0" /> <el-option label="过程检验" value="1" /> <el-option label="出厂检验" value="2" /> <el-option label="成品检验" value="2" /> <el-option label="巡检" value="3" /> </el-select> </template> <template #stateHeader> @@ -213,7 +213,7 @@ align: 'center', dataType: 'tag', formatData: (val) => { const map = { 0: '原材料检验', 1: '过程检验', 2: '出厂检验' } const map = { 1: '过程检验', 2: '成品检验', 3: '巡检' } return map[val] || val } }, src/views/qualityManagement/metricMaintenance/index.vue
@@ -63,9 +63,9 @@ @change="handleQuery" @clear="handleQuery" > <el-option label="原材料检验" value="0" /> <el-option label="过程检验" value="1" /> <el-option label="出厂检验" value="2" /> <el-option label="成品检验" value="2" /> <el-option label="巡检" value="3" /> </el-select> </template> <template #stateHeader> @@ -302,9 +302,9 @@ dataType: 'tag', formatData: (val) => { const map = { 0: '原材料检验', 1: '过程检验', 2: '成品检验' 2: '成品检验', 3: '巡检' } return map[val] || val } src/views/qualityManagement/nonconformingManagement/components/formDia.vue
@@ -11,9 +11,8 @@ <el-col :span="12"> <el-form-item label="类别:" prop="inspectType"> <el-select v-model="form.inspectType"> <el-option label="原材料检验" :value="0" /> <el-option label="过程检验" :value="1" /> <el-option label="出厂检验" :value="2" /> <el-option label="成品检验" :value="2" /> </el-select> </el-form-item> </el-col> src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue
@@ -11,7 +11,6 @@ <el-col :span="12"> <el-form-item label="类别:" prop="inspectType"> <el-select v-model="form.inspectType" disabled> <el-option label="原材料检验" :value="0" /> <el-option label="过程检验" :value="1" /> <el-option label="成品检验" :value="2" /> </el-select> src/views/qualityManagement/nonconformingManagement/index.vue
@@ -5,9 +5,8 @@ <div> <span class="search_title">类型:</span> <el-select v-model="searchForm.inspectType" clearable style="width: 200px" @change="handleQuery"> <el-option label="原材料检验" :value="0" /> <el-option label="过程检验" :value="1" /> <el-option label="出厂检验" :value="2" /> <el-option label="成品检验" :value="2" /> </el-select> </div> <div style="margin-left: 10px"> @@ -113,12 +112,10 @@ dataType: "tag", width: 120, formatData: (params) => { if (params == 0) { return "原材料检验"; } else if (params == 1) { if (params == 1) { return "过程检验"; } else { return '出厂检验'; return '成品检验'; } }, formatType: (params) => {