Browse Source

fix: 优化取样表单字段选择与类型转换

yusheng 1 month ago
parent
commit
ba5a08ca3a
5 changed files with 154 additions and 121 deletions
  1. 4 0
      enum/dict.js
  2. 1 1
      manifest.json
  3. 135 111
      pages/qms/inspectionWork/addSample.vue
  4. 1 1
      pages/qms/inspectionWork/sampleList.vue
  5. 13 8
      store/modules/dict.js

+ 4 - 0
enum/dict.js

@@ -12,7 +12,11 @@ export default {
   取样类型: "quality_method_code",
   计量单位: "measuring_uint",
 };
+export const numberList = [
 
+  'quality_method_code',
+  
+];
 //发货审核状态
 export const reviewStatusEnum = [
   {

+ 1 - 1
manifest.json

@@ -2,7 +2,7 @@
     "name" : "智慧工厂",
     "appid" : "__UNI__45B3907",
     "description" : "",
-    "versionName" : "V1.0.3.77",
+    "versionName" : "V1.0.3.78",
     "versionCode" : "100",
     "transformPx" : false,
     "h5" : {

+ 135 - 111
pages/qms/inspectionWork/addSample.vue

@@ -1,7 +1,6 @@
 <template>
 	<view>
-		<u-popup :show="visible" :round="0" :closeOnClickOverlay="false" :zIndex="99999"
-			@close="closePopup">
+		<u-popup :show="visible" :round="0" :closeOnClickOverlay="false" :zIndex="99999" @close="closePopup">
 			<view class="popup-content">
 				<view class="popup-header">
 					<text class="popup-title">{{ title }}</text>
@@ -146,7 +145,8 @@
 							<view class="form-item">
 								<text class="label">请样目的</text>
 								<view class="value-wrap">
-									<u-input v-model="form.pleasePurpose" placeholder="请输入" border="none" :disabled="type=='view'"></u-input>
+									<u-input v-model="form.pleasePurpose" placeholder="请输入" border="none"
+										:disabled="type=='view'"></u-input>
 								</view>
 							</view>
 						</view>
@@ -154,21 +154,26 @@
 							<view class="form-item">
 								<text class="label">质检方式</text>
 								<view class="value-wrap">
-									<DictSelection v-model="form.qualityMode" @change="handleQualityModeChange"
-										:disabled="form.isFirstSampling != '1'||type=='view'" dictName="取样类型"></DictSelection>
+									<DictSelection v-model="form.qualityMode" @itemChange="handleQualityModeChange"
+										:disabled="form.isFirstSampling != '1'||type=='view'" dictName="取样类型">
+									</DictSelection>
 								</view>
 							</view>
 						</view>
 						<view class="form-row">
 							<view class="form-item">
 								<text class="label">记录方法</text>
-								<view class="value-wrap" @click="selectRecordingMethod"
-									:class="{ disabled: form.isFirstSampling != '1'||type=='view' }">
-									<u-input :value="recordingMethodList.find(item=>item.value==form.recordingMethod)&&recordingMethodList.find(item=>item.value==form.recordingMethod).label" placeholder="请选择" border="none" disabled>
-										<template #suffix>
-											<text class="arrow">›</text>
-										</template>
-									</u-input>
+								<view class="value-wrap">
+
+
+									<view class="select-input"
+										:class="{ disabled: form.isFirstSampling != '1'||type=='view' }"
+										@click="selectRecordingMethod">
+										<text
+											class="value-text">{{ recordingMethodList.find(item=>item.value==form.recordingMethod)&&recordingMethodList.find(item=>item.value==form.recordingMethod).label||'请选择' }}</text>
+										<text class="arrow">›</text>
+									</view>
+
 								</view>
 							</view>
 						</view>
@@ -177,14 +182,20 @@
 							<view class="form-row">
 								<view class="form-item">
 									<text class="label">请样类型</text>
-									<view class="value-wrap" @click="selectConditionType"
-										:class="{ disabled: form.isFirstSampling != '1'||type=='view' }">
-										<u-input :value="conditionTypeColumns.find(item=>item.value==form.conditionType)&&conditionTypeColumns.find(item=>item.value==form.conditionType).label"  placeholder="请选择" border="none"
-											disabled>
-											<template #suffix>
-												<text class="arrow">›</text>
-											</template>
-										</u-input>
+									<view class="value-wrap" @click="selectConditionType">
+
+
+										<view class="select-input"
+											:class="{ disabled: form.isFirstSampling != '1'||type=='view' }"
+											@click="selectConditionType">
+											<text
+												class="value-text">{{ conditionTypeColumns.find(item=>item.value==form.conditionType)&&conditionTypeColumns.find(item=>item.value==form.conditionType).label||'请选择' }}</text>
+											<text class="arrow">›</text>
+										</view>
+
+
+
+
 									</view>
 								</view>
 							</view>
@@ -193,20 +204,21 @@
 								<view class="form-item">
 									<text class="label">数量</text>
 									<view class="value-wrap">
-										<u-input v-model="form.quantity" :disabled="type=='view'" placeholder="请输入" border="none"></u-input>
+										<u-input v-model="form.quantity" :disabled="type=='view'" placeholder="请输入"
+											border="none"></u-input>
 									</view>
 								</view>
 							</view>
 							<view class="form-row" v-if="form.conditionType == 2">
 								<view class="form-item">
 									<text class="label">单位</text>
-									<view class="value-wrap" @click="selectUnit"
-										:class="{ disabled: form.isFirstSampling != '1'||type=='view' }">
-										<u-input v-model="form.unit" placeholder="请选择" border="none" disabled>
-											<template #suffix>
-												<text class="arrow">›</text>
-											</template>
-										</u-input>
+									<view class="value-wrap">
+										
+										<DictSelection v-model="form.unit" @itemChange="handleQualityModeChange"
+											:disabled="form.isFirstSampling != '1'||type=='view'" dictName="计量单位">
+										</DictSelection>
+										
+								
 									</view>
 								</view>
 							</view>
@@ -214,7 +226,8 @@
 								<view class="form-item">
 									<text class="label">条数</text>
 									<view class="value-wrap">
-										<u-input v-model="form.portion" :disabled="type=='view'" placeholder="请输入" border="none"></u-input>
+										<u-input v-model="form.portion" :disabled="type=='view'" placeholder="请输入"
+											border="none"></u-input>
 									</view>
 								</view>
 							</view>
@@ -223,20 +236,29 @@
 								<view class="form-item">
 									<text class="label">数量</text>
 									<view class="value-wrap">
-										<u-input v-model="form.portion" :disabled="type=='view'" placeholder="请输入" border="none"></u-input>
+										<u-input v-model="form.portion" :disabled="type=='view'" placeholder="请输入"
+											border="none"></u-input>
 									</view>
 								</view>
 							</view>
 							<view class="form-row" v-if="form.conditionType == 1">
 								<view class="form-item">
 									<text class="label">单位</text>
-									<view class="value-wrap" @click="selectPackingUnit"
-										:class="{ disabled: form.isFirstSampling != '1'||type=='view' }">
-										<u-input v-model="form.unit" placeholder="请选择" border="none" disabled>
-											<template #suffix>
-												<text class="arrow">›</text>
-											</template>
-										</u-input>
+									<view class="value-wrap"
+										>
+										
+										
+										<view class="select-input"
+											:class="{ disabled: form.isFirstSampling != '1'||type=='view' }"
+											@click="selectPackingUnit">
+											<text
+												class="value-text">{{ packingSpecificationOption.find(item=>item.id==form.packingUnit)&&packingSpecificationOption.find(item=>item.id==form.packingUnit).conversionUnit||'请选择' }}</text>
+											<text class="arrow">›</text>
+										</view>
+										
+										
+										
+							
 									</view>
 								</view>
 							</view>
@@ -282,30 +304,29 @@
 				</view>
 			</view>
 			<u-toast ref="uToast"></u-toast>
-		</u-popup>
 
-		<!-- 质检工单选择弹窗 -->
-		<inspectionWorkDialog ref="inspectionWorkDialog" @changeParent="changeParent"></inspectionWorkDialog>
+			<!-- 记录方法选择 -->
+			<u-picker :show="showRecordingMethodPicker"  keyName="label" :columns="[recordingMethodList]" @confirm="confirmRecordingMethod" @cancel="showRecordingMethodPicker = false"></u-picker>
+
+			<!-- 请样类型选择 -->
+			<u-picker :show="showConditionTypePicker" :columns="[conditionTypeColumns]" keyName="label" @confirm="confirmConditionType"
+				@cancel="showConditionTypePicker = false"></u-picker>
+
+		
+			<!-- 包装单位选择 -->
+			<u-picker :show="showPackingUnitPicker" keyName="label" :columns="[packingSpecificationOption.map(item=>{
+				return {
+					label:item.conversionUnit,
+					value:item.id
+				}
+			})]" @confirm="confirmPackingUnit"
+				@cancel="showPackingUnitPicker = false"></u-picker>
+		</u-popup>
 
-		<!-- 质检方式选择 -->
-		<u-picker :show="showQualityModePicker" :columns="qualityModeColumns" @confirm="confirmQualityMode"
-			@cancel="showQualityModePicker = false"></u-picker>
 
-		<!-- 记录方法选择 -->
-		<u-picker :show="showRecordingMethodPicker" :columns="[recordingMethodList]" @confirm="confirmRecordingMethod"
-			@cancel="showRecordingMethodPicker = false"></u-picker>
 
-		<!-- 请样类型选择 -->
-		<u-picker :show="showConditionTypePicker" :columns="[conditionTypeColumns]" @confirm="confirmConditionType"
-			@cancel="showConditionTypePicker = false"></u-picker>
 
-		<!-- 单位选择 -->
-		<u-picker :show="showUnitPicker" :columns="unitColumns" @confirm="confirmUnit"
-			@cancel="showUnitPicker = false"></u-picker>
 
-		<!-- 包装单位选择 -->
-		<u-picker :show="showPackingUnitPicker" :columns="packingUnitColumns" @confirm="confirmPackingUnit"
-			@cancel="showPackingUnitPicker = false"></u-picker>
 	</view>
 </template>
 
@@ -333,7 +354,7 @@
 		qualityWorkOrderCode: "",
 		qualityWorkOrderName: "",
 		isFirstSampling: "",
-    measureUnit:''
+		measureUnit: ''
 	};
 	import {
 		queryQualityInventory,
@@ -345,11 +366,13 @@
 		samplingrecordUpdate,
 		samplingRecordsPage,
 	} from "@/api/samplingRecords";
-	import inspectionWorkDialog from "./components/inspectionWorkDialog.vue";
-	import { getCodeList, getCode, parameterGetByCode } from '@/api/pda/picking.js'
+	import {
+		getCodeList,
+		getCode,
+		parameterGetByCode
+	} from '@/api/pda/picking.js'
 	export default {
 		components: {
-			inspectionWorkDialog,
 			DictSelection
 		},
 
@@ -383,12 +406,11 @@
 				],
 				selection: [],
 				// 弹窗相关
-				showQualityModePicker: false,
+
 				showRecordingMethodPicker: false,
 				showConditionTypePicker: false,
 				showUnitPicker: false,
 				showPackingUnitPicker: false,
-				qualityModeColumns: [],
 				recordingMethodPickerColumns: [],
 				conditionTypeColumns: [{
 						label: "请整样",
@@ -399,9 +421,7 @@
 						value: 2
 					},
 				],
-				unitColumns: [
-					[]
-				],
+		
 				packingUnitColumns: [
 					[]
 				],
@@ -520,24 +540,12 @@
 					this.getById(row.id);
 				}
 			},
-			// 选择质检工单
-			selectQualityWorkOrder() {
-				this.$refs.inspectionWorkDialog.open();
-			},
-			// 质检方式选择
-			selectQualityMode() {
-				if (this.form.isFirstSampling != "1") return;
-				this.qualityModeColumns = [this.sampleNumberList];
-				this.showQualityModePicker = true;
-			},
-			confirmQualityMode(e) {
-				this.form.qualityMode = e.value[0].value;
-				this.form.qualityModeName = e.value[0].label;
-				this.handleQualityModeChange(e.value[0].value);
-				this.showQualityModePicker = false;
-			},
+
+
+
 			// 记录方法选择
 			selectRecordingMethod() {
+				console.log(this.form.isFirstSampling, 'this.form.isFirstSampling')
 				if (this.form.isFirstSampling != "1") return;
 				// this.recordingMethodPickerColumns = [this.recordingMethodList];
 				this.showRecordingMethodPicker = true;
@@ -558,37 +566,20 @@
 				this.form.conditionTypeName = e.value[0].label;
 				this.showConditionTypePicker = false;
 			},
-			// 单位选择
-			selectUnit() {
-				if (this.form.isFirstSampling != "1") return;
-				let unitList = this.packingSpecificationOption.map(
-					(item) => item.conversionUnit,
-				);
-				this.unitColumns = [unitList];
-				this.showUnitPicker = true;
-			},
-			confirmUnit(e) {
-				this.form.unit = e.value[0];
-				this.showUnitPicker = false;
-			},
+
 			// 包装单位选择
 			selectPackingUnit() {
 				if (this.form.isFirstSampling != "1") return;
-				let unitList = this.packingSpecificationOption.map(
-					(item) => item.conversionUnit,
-				);
-				this.packingUnitColumns = [unitList];
+				// let unitList = this.packingSpecificationOption.map(
+				// 	(item) => item.conversionUnit,
+				// );
+				// this.packingUnitColumns = [unitList];
 				this.showPackingUnitPicker = true;
 			},
 			confirmPackingUnit(e) {
-				let selectedItem = this.packingSpecificationOption.find(
-					(item) => item.conversionUnit === e.value[0],
-				);
-				if (selectedItem) {
-					this.form.packingUnit = selectedItem.id;
-					this.form.packingUnitName = selectedItem.conversionUnit;
-					this.form.unit = selectedItem.conversionUnit;
-				}
+		
+				this.$set(this.form, 'packingUnit', e.value[0].value);
+				this.$set(this.form, 'unit', e.value[0].label);
 				this.showPackingUnitPicker = false;
 			},
 			parameterGetByCode() {
@@ -618,6 +609,7 @@
 					this.form.qualityWorkOrderCode = row.code;
 					this.form.qualityWorkOrderName = row.name;
 					this.workSampleQuantity = Number(row.sampleQuantity) || 0;
+					this.form.recordingMethod = this.form.recordingMethod || '1'
 
 					if (!list1?.length) {
 						this.form.isFirstSampling = 1;
@@ -687,7 +679,7 @@
 				this.form = {
 					...defForm,
 				};
-        this.workSampleQuantity=0
+				this.workSampleQuantity = 0
 				this.schemeList = [];
 				this.packingSpecificationOption = [];
 				this.sampleList = [];
@@ -695,9 +687,7 @@
 
 				this.visible = false;
 			},
-			changeParent(row) {
-				this.init(row);
-			},
+
 			async datasource(unit, isPackingUnit) {
 				const res = await queryQualityInventory({
 					qualityWorkerId: this.form.qualityWorkOrderId,
@@ -1135,8 +1125,11 @@
 				return true;
 			},
 
-			handleQualityModeChange(val) {
-				if (val == 1) {
+			handleQualityModeChange({
+				dictCode,
+				dictValue
+			}) {
+				if (dictCode == 1) {
 					this.updatePackingList();
 				} else {
 					this.sampleList = [];
@@ -1580,4 +1573,35 @@
 			flex: 1;
 		}
 	}
+
+	.select-input {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 20rpx 0;
+		min-height: 70rpx;
+		border-bottom: 1rpx solid #e5e5e5;
+		width: 100%;
+
+		&.disabled {
+			opacity: 0.6;
+		}
+
+		.value-text {
+			flex: 1;
+			font-size: 28rpx;
+			color: #333;
+
+			&.empty {
+				color: #999;
+			}
+		}
+
+		.arrow {
+			font-size: 40rpx;
+			color: #999;
+			line-height: 1;
+			margin-left: 20rpx;
+		}
+	}
 </style>

+ 1 - 1
pages/qms/inspectionWork/sampleList.vue

@@ -142,7 +142,7 @@
 			<view style="height: 84rpx"></view>
 			<view class="footerButton">
 				<u-button @click="handleClose" type="default" text="返回"></u-button>
-				<u-button v-if="type != 'view'&&!isCorrelationId" type="primary" @click="save" text="保存"></u-button>
+				<u-button v-if="type != 'view'&&!isCorrelationId&&workData.status!=1" type="primary" @click="save" text="保存"></u-button>
 			</view>
 		</view>
 		<u-toast ref="uToast"></u-toast>

+ 13 - 8
store/modules/dict.js

@@ -1,4 +1,7 @@
-import dictEnum from '@/enum/dict'
+import dictEnum, {
+	numberList
+} from '@/enum/dict';
+
 import Vue from 'vue'
 // import {
 // 	get,
@@ -86,17 +89,18 @@ const actions = {
 			}
 		} else {
 			res = await getDictListByMainCode(code)
+			const isNumber = numberList.includes(code);
 			if (res?.code == 0) {
 				commit('ADD_DICT', {
 					code,
 					dict: res.data.map((item) => {
-					const arr = Object.entries(item)[0] || [];
+						const arr = Object.entries(item)[0] || [];
 
-					return {
-						dictCode:  arr[0],
-						dictValue: arr[1]
-					};
-				})
+						return {
+							dictCode: isNumber ? Number(arr[0]) : arr[0],
+							dictValue: arr[1]
+						};
+					})
 				})
 				return res.data
 			}
@@ -110,6 +114,7 @@ const actions = {
 	}, enumName) {
 		const code = dictEnum[enumName]
 		const res = await getDictListByMainCode(code)
+		const isNumber = numberList.includes(code);
 		if (res?.success) {
 			commit('ADD_DICT', {
 				code,
@@ -117,7 +122,7 @@ const actions = {
 					const arr = Object.entries(item)[0] || [];
 
 					return {
-						dictCode:arr[0],
+						dictCode: isNumber ? Number(arr[0]) : arr[0],
 						dictValue: arr[1]
 					};
 				})