已修改11个文件
304 ■■■■ 文件已修改
src/views/index.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionOrder/Detail/index.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/workOrder/components/GranulationForm.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/workOrder/components/ProductionRecordForm.vue 127 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/workOrder/components/VoltageSortingForm.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/workOrder/index.vue 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/qualityManagement/metricBinding/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/qualityManagement/metricMaintenance/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/qualityManagement/nonconformingManagement/components/formDia.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/qualityManagement/nonconformingManagement/index.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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) => {