| | |
| | | ref="formRef"> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="产品大类" |
| | | <el-form-item label="产品" |
| | | prop="productId" |
| | | :rules="[ |
| | | { |
| | | required: true, |
| | | message: '请选择产品大类', |
| | | message: '请选择产品', |
| | | trigger: 'change', |
| | | } |
| | | ]"> |
| | | <!-- 油品由「产品 + 规格型号」两级选出,不单独维护 --> |
| | | <el-tree-select v-model="formState.productId" |
| | | placeholder="请选择" |
| | | clearable |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item label="油品" |
| | | prop="oilProduct" |
| | | :rules="[{ required: true, message: '请选择油品', trigger: 'change' }]"> |
| | | <el-input :model-value="formState.oilProduct" |
| | | readonly |
| | | placeholder="--" /> |
| | | :rules="[{ required: true, message: '请输入油品', trigger: 'change' }]"> |
| | | <!-- 选完「产品 + 规格型号」自动写入,也能自己改 --> |
| | | <el-input v-model="formState.oilProduct" |
| | | placeholder="选完产品与规格型号后自动生成" |
| | | @input="handleOilProductInput" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | prop="trailerPlateNo" |
| | | :rules="[{ required: true, message: '请输入车挂牌号', trigger: 'blur' }]"> |
| | | <el-input v-model="formState.trailerPlateNo" |
| | | :readonly="!!formState.vehicleId" |
| | | placeholder="请输入" |
| | | clearable /> |
| | | </el-form-item> |
| | |
| | | const productOptions = ref([]); |
| | | const modelOptions = ref([]); |
| | | |
| | | // 油品默认由「产品 + 规格型号」两级拼出来(两级都选完才有值)。 |
| | | // autoOilProduct 记住自动写进去的值,用来判断用户有没有手改过——手改过就不再覆盖 |
| | | const autoOilProduct = ref(""); |
| | | |
| | | const oilProductLabel = (productName, model) => |
| | | [productName, model].filter(Boolean).join(" / "); |
| | | |
| | | const syncOilProduct = next => { |
| | | const current = formState.value.oilProduct; |
| | | if (!current || current === autoOilProduct.value) { |
| | | formState.value.oilProduct = next || undefined; |
| | | } |
| | | autoOilProduct.value = next || ""; |
| | | }; |
| | | |
| | | // 手改过之后 autoOilProduct 就对不上了,后面的产品/规格联动不再覆盖它 |
| | | const handleOilProductInput = () => { |
| | | autoOilProduct.value = ""; |
| | | }; |
| | | |
| | | let { proxy } = getCurrentInstance(); |
| | | |
| | | const closeModal = () => { |
| | |
| | | } |
| | | }; |
| | | |
| | | // 车辆选择改变:车牌号、车挂牌号与司机信息由车辆主数据带出,司机可手动覆盖 |
| | | // 车辆选择改变:车牌号与司机信息由车辆主数据带出,司机可手动覆盖。 |
| | | // 车挂牌号是挂车自己的牌、不在车辆主数据里,始终手填,不参与联动。 |
| | | const vehicleChange = id => { |
| | | const vehicle = vehicleList.value.find(item => item.id === id); |
| | | if (vehicle) { |
| | | formState.value.truckPlateNo = vehicle.plateNumber || ""; |
| | | // 车挂牌号与车牌号是同一个牌,选了车辆就带出并置为只读,避免手填出两个不一致的值 |
| | | formState.value.trailerPlateNo = vehicle.plateNumber || ""; |
| | | formState.value.driverName = vehicle.driverName || ""; |
| | | formState.value.driverPhone = vehicle.driverPhone || ""; |
| | | } else { |
| | | if (!vehicle) { |
| | | formState.value.truckPlateNo = ""; |
| | | formState.value.trailerPlateNo = ""; |
| | | return; |
| | | } |
| | | formState.value.truckPlateNo = vehicle.plateNumber || ""; |
| | | formState.value.driverName = vehicle.driverName || ""; |
| | | formState.value.driverPhone = vehicle.driverPhone || ""; |
| | | }; |
| | | |
| | | const getProductOptions = () => |
| | |
| | | formState.value.productName = ""; |
| | | formState.value.productModelName = ""; |
| | | formState.value.unit = ""; |
| | | formState.value.oilProduct = undefined; |
| | | // 油品是产品 + 规格拼出来的,换了产品就一起作废,手改过的不动 |
| | | syncOilProduct(""); |
| | | modelOptions.value = []; |
| | | if (!value) { |
| | | return; |
| | |
| | | }); |
| | | }; |
| | | |
| | | // 规格型号改变:产品名称/规格/单位由规格主数据带出,油品取产品名称 |
| | | // 规格型号改变:产品名称/规格/单位由规格主数据带出 |
| | | const handleProductModelChange = value => { |
| | | const item = modelOptions.value.find(row => row.id === value); |
| | | formState.value.productName = item?.productName || ""; |
| | | formState.value.productModelName = item?.model || ""; |
| | | formState.value.unit = item?.unit || ""; |
| | | // 本租户「油品」就是产品名称(库存明细/出库台账的油品列绑的都是 productName) |
| | | formState.value.oilProduct = item?.productName || undefined; |
| | | // 本租户「油品」按「产品名称 / 规格型号」展示,库存明细、出库台账的油品列取的就是它 |
| | | syncOilProduct(oilProductLabel(item?.productName, item?.model)); |
| | | proxy.$refs["formRef"]?.validateField("productModelId"); |
| | | }; |
| | | |