liu
2026-09-24 a974cff29f2495edc6f2788240aec2e51bd6f1d4
feat(生产核算): 前端适配「中提琴」大类与折算率配置

- 报工台账、生产报工的产品大类下拉增加「中提琴」
- 生产核算明细增加「中提琴数量」「中提折算率」两列
- 折算率配置弹窗增加中提琴折算率录入(默认值与表单重置同步补齐)
- 工序管理增加「中提琴系数」录入、校验与回显

Co-Authored-By: Claude <noreply@anthropic.com>
已修改5个文件
40 ■■■■■ 文件已修改
src/views/productionManagement/productionCosting/components/CostConfigDialog.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionCosting/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionProcess/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionReporting/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionReportingEntry/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionCosting/components/CostConfigDialog.vue
@@ -66,6 +66,7 @@
          <el-table-column label="工序" prop="processName" min-width="110" />
          <el-table-column label="员工" prop="staffName" min-width="110" />
          <el-table-column label="小提琴折算率" prop="violinFactor" min-width="110" />
          <el-table-column label="中提琴折算率" prop="midViolinFactor" min-width="110" />
          <el-table-column label="大提琴折算率" prop="violaFactor" min-width="110" />
          <el-table-column label="贝斯折算率" prop="bassFactor" min-width="100" />
          <el-table-column label="操作" width="140" fixed="right">
@@ -174,6 +175,9 @@
        </el-form-item>
        <el-form-item label="小提琴折算率">
          <el-input-number v-model="factorForm.violinFactor" :min="0" :precision="4" style="width: 100%" />
        </el-form-item>
        <el-form-item label="中提琴折算率">
          <el-input-number v-model="factorForm.midViolinFactor" :min="0" :precision="4" style="width: 100%" />
        </el-form-item>
        <el-form-item label="大提琴折算率">
          <el-input-number v-model="factorForm.violaFactor" :min="0" :precision="4" style="width: 100%" />
@@ -340,12 +344,12 @@
  /* ---------- 折算率 ---------- */
  const factorFormVisible = ref(false);
  const factorForm = reactive({
    id: null, processId: null, staffId: null, staffName: "", violinFactor: 1, violaFactor: 1, bassFactor: 1, remark: "",
    id: null, processId: null, staffId: null, staffName: "", violinFactor: 1, midViolinFactor: 1, violaFactor: 1, bassFactor: 1, remark: "",
  });
  const openFactorForm = row => {
    Object.assign(factorForm, {
      id: null, processId: factorQuery.processId || null, staffId: null, staffName: "",
      violinFactor: 1, violaFactor: 1, bassFactor: 1, remark: "",
      violinFactor: 1, midViolinFactor: 1, violaFactor: 1, bassFactor: 1, remark: "",
    }, row || {});
    factorFormVisible.value = true;
  };
src/views/productionManagement/productionCosting/index.vue
@@ -139,8 +139,10 @@
      { label: "生产人", prop: "staffName", minWidth: 90 },
      { label: "工序", prop: "processName", minWidth: 80 },
      { label: "小提琴数量", prop: "violinQty", minWidth: 90 },
      { label: "中提琴数量", prop: "violaQty", minWidth: 90 },
      { label: "大提琴数量", prop: "celloQty", minWidth: 90 },
      { label: "贝斯数量", prop: "bassQty", minWidth: 80 },
      { label: "中提折算率", prop: "violaFactor", minWidth: 90 },
      { label: "大提折算率", prop: "celloFactor", minWidth: 90 },
      { label: "贝斯折算率", prop: "bassFactor", minWidth: 90 },
      { label: "月产折合小提琴", prop: "foldedQuantity", minWidth: 120 },
src/views/productionManagement/productionProcess/index.vue
@@ -134,6 +134,13 @@
                    :step="0.001"
                    placeholder="请输入小提琴系数" />
        </el-form-item>
        <el-form-item label="中提琴系数"
                      prop="midViolinFactor">
          <el-input v-model="processForm.midViolinFactor"
                    type="number"
                    :step="0.001"
                    placeholder="请输入中提琴系数" />
        </el-form-item>
        <el-form-item label="大提琴系数"
                      prop="violaFactor">
          <el-input v-model="processForm.violaFactor"
@@ -369,6 +376,7 @@
    name: "",
    standardQuantity: null,
    violinFactor: null,
    midViolinFactor: null,
    violaFactor: null,
    bassFactor: null,
    isQuality: false,
@@ -410,6 +418,24 @@
          }
          if (isNaN(value) || value < 0) {
            callback(new Error("小提琴系数必须是非负数字"));
          } else {
            callback();
          }
        },
      },
    ],
    midViolinFactor: [
      {
        required: false,
        message: "请输入中提琴系数",
        trigger: "blur",
        validator: (rule, value, callback) => {
          if (value == null || value === "") {
            callback();
            return;
          }
          if (isNaN(value) || value < 0) {
            callback(new Error("中提琴系数必须是非负数字"));
          } else {
            callback();
          }
@@ -654,6 +680,7 @@
    processForm.name = "";
    processForm.standardQuantity = null;
    processForm.violinFactor = null;
    processForm.midViolinFactor = null;
    processForm.violaFactor = null;
    processForm.bassFactor = null;
    processForm.isQuality = false;
@@ -671,6 +698,7 @@
    processForm.name = process.name;
    processForm.standardQuantity = process.standardQuantity;
    processForm.violinFactor = process.violinFactor;
    processForm.midViolinFactor = process.midViolinFactor;
    processForm.violaFactor = process.violaFactor;
    processForm.bassFactor = process.bassFactor;
    processForm.isQuality = !!process.isQuality;
src/views/productionManagement/productionReporting/index.vue
@@ -39,6 +39,7 @@
                     style="width: 200px;"
                     @change="handleQuery">
            <el-option label="小提琴" value="小提琴" />
            <el-option label="中提琴" value="中提琴" />
            <el-option label="大提琴" value="大提琴" />
            <el-option label="贝斯" value="贝斯" />
          </el-select>
src/views/productionManagement/productionReportingEntry/index.vue
@@ -51,6 +51,7 @@
                     placeholder="请选择"
                     @change="handleQuery">
            <el-option label="小提琴" value="小提琴" />
            <el-option label="中提琴" value="中提琴" />
            <el-option label="大提琴" value="大提琴" />
            <el-option label="贝斯" value="贝斯" />
          </el-select>