新增工序选择功能,优化设备管理页面,支持工序列表的动态加载和表单验证
已修改2个文件
60 ■■■■■ 文件已修改
src/pages/equipmentManagement/ledger/detail.vue 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/equipmentManagement/ledger/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/equipmentManagement/ledger/detail.vue
@@ -7,6 +7,24 @@
        <u-form @submit="sendForm" ref="formRef" :model="form" :rules="formRules" label-width="110">
            <!-- 基本信息 -->
            <u-cell-group title="基本信息">
                <u-form-item label="工序" prop="productProcessId" required border-bottom>
                    <u-input
                        v-model="form.productProcessName"
                        placeholder="请选择工序"
                        readonly
                        @click="showProcessPicker = true"
                    />
                    <template #right>
                        <u-icon name="arrow-right" @click="showProcessPicker = true"></u-icon>
                    </template>
                    <up-action-sheet
                        :show="showProcessPicker"
                        :actions="processActionList"
                        title="选择工序"
                        @select="onProcessSelect"
                        @close="showProcessPicker = false"
                    />
                </u-form-item>
                <u-form-item label="设备名称" prop="deviceName" required border-bottom>
                    <u-input
                        v-model="form.deviceName"
@@ -149,6 +167,7 @@
import { onShow } from '@dcloudio/uni-app';
import PageHeader from '@/components/PageHeader.vue';
import { getLedgerById, addLedger, editLedger } from '@/api/equipmentManagement/ledger';
import { list as getProductProcessList } from '@/api/qualityManagement/materialInspection.js';
import dayjs from "dayjs";
import {
    calculateTaxIncludeTotalPrice,
@@ -172,11 +191,19 @@
const showDate = ref(false);
const pickerDateValue = ref(Date.now());
const showTaxRatePicker = ref(false);
const showProcessPicker = ref(false);
const taxRateActionList = ref([
  { name: '1', value: 1 },
  { name: '6', value: 6 },
  { name: '13', value: 13 }
]);
const processList = ref([]);
const processActionList = computed(() =>
  (processList.value || []).map((item) => ({
    name: item.name,
    value: item.id
  }))
);
// 表单验证规则
const formRules = {
@@ -186,6 +213,7 @@
    supplierName: [{ required: true, trigger: "blur", message: "请输入" }],
    storageLocation: [{ required: true, trigger: "blur", message: "请输入" }],
    unit: [{ required: true, trigger: "blur", message: "请输入" }],
    productProcessId: [{ required: true, trigger: "change", message: "请选择工序" }],
    // 数字类型字段需要特殊处理,确保有数值时不会触发必填校验
    number: [{
        required: true,
@@ -238,6 +266,8 @@
    storageLocation: undefined, // 存放位置
    unit: undefined, // 单位
    enableDepreciation: false, // 启用折旧
    productProcessId: undefined, // 工序ID
    productProcessName: undefined, // 工序名称
    number: undefined, // 数量
    taxIncludingPriceUnit: undefined, // 含税单价
    taxIncludingPriceTotal: undefined, // 含税总价
@@ -265,6 +295,11 @@
            form.value.storageLocation = data.storageLocation || '';
            form.value.unit = data.unit;
            form.value.enableDepreciation = !!data.enableDepreciation;
            form.value.productProcessId = data.productProcessId;
            form.value.productProcessName =
                data.productProcessName ||
                processList.value.find((item) => item.id == data.productProcessId)?.name ||
                '';
            form.value.number = data.number;
            form.value.taxIncludingPriceUnit = data.taxIncludingPriceUnit;
            form.value.taxIncludingPriceTotal = data.taxIncludingPriceTotal;
@@ -330,6 +365,9 @@
        } else if (!form.value.unit) {
            isValid = false;
            errorMessage = '请输入单位';
        } else if (!form.value.productProcessId) {
            isValid = false;
            errorMessage = '请选择工序';
        }
        
        // 检查数字类型必填字段
@@ -428,6 +466,23 @@
    mathNum(); // 重新计算
};
// 获取工序列表
const getProcessList = async () => {
    try {
        const res = await getProductProcessList();
        processList.value = res?.data || [];
    } catch (e) {
        processList.value = [];
    }
};
// 选择工序
const onProcessSelect = (e) => {
    form.value.productProcessId = e.value;
    form.value.productProcessName = e.name;
    showProcessPicker.value = false;
};
// 显示日期选择器
const showDatePicker = () => {
    showDate.value = true;
@@ -450,6 +505,7 @@
onMounted(() => {
    // 页面加载时获取参数
    getProcessList();
    getPageParams();
});
</script>
src/pages/equipmentManagement/ledger/index.vue
@@ -37,6 +37,10 @@
          
          <view class="item-details">
            <view class="detail-row">
              <text class="detail-label">工序</text>
              <text class="detail-value">{{ item.productProcessName || item.processName || '-' }}</text>
            </view>
            <view class="detail-row">
              <text class="detail-label">规格型号</text>
              <text class="detail-value">{{ item.deviceModel || '-' }}</text>
            </view>