From c7262ac9c1ac9f844f79b9193734c96644e3a165 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期二, 22 七月 2025 15:45:53 +0800
Subject: [PATCH] 报工增加按人员或按组报工

---
 pages/product/report/components/saveForm.vue   |    4 +
 pages/product/outputRegister/addProductOut.vue |    2 
 pages/product/report/index.vue                 |  155 ++++++++++++++++++++++++++++++++++----
 common/http.api.js                             |    3 
 pages/product/report/index.scss                |   31 +++++++
 5 files changed, 177 insertions(+), 18 deletions(-)

diff --git a/common/http.api.js b/common/http.api.js
index 38a0be5..b1c614b 100644
--- a/common/http.api.js
+++ b/common/http.api.js
@@ -489,6 +489,7 @@
 			//鑾峰彇浠诲姟绫诲瀷
 			getAssemblyProcessType:(params = {}) => vm.$u.get('/admin/dict/type/assembly_process_type')
 		},
+		// jdhj-mes
 		// 鎶ュ伐
 		workReporting: {
 			// 鑾峰彇杞﹂棿璁㈠崟鍒楄〃
@@ -499,6 +500,8 @@
 			operationTask: (params = {}) => vm.$u.get('/mes/operationTask/'+ params.id),
 			// 鎻愪氦
 			submitPDA: (params = {}) => vm.$u.post('/mes/product/submitPDA', params),
+			// 鑾峰彇浜哄憳
+			getPersonByDutyRecordId: (params = {}) => vm.$u.get('/mes/dutyRecord/getPersonByDutyRecordId/'+ params.id),
 		},
 		// 鎶ュ伐
 		cancelReporting: {
diff --git a/pages/product/outputRegister/addProductOut.vue b/pages/product/outputRegister/addProductOut.vue
index dd7401f..c6e8647 100644
--- a/pages/product/outputRegister/addProductOut.vue
+++ b/pages/product/outputRegister/addProductOut.vue
@@ -503,4 +503,4 @@
 	.uni-input-placeholder{font-size: 12px;color: rgb(192, 196, 204);}
 	
 	>>>.uni-input-input{font-size: 12px;}
-</style>
+</style>
\ No newline at end of file
diff --git a/pages/product/report/components/saveForm.vue b/pages/product/report/components/saveForm.vue
index 22841b1..b8b2169 100644
--- a/pages/product/report/components/saveForm.vue
+++ b/pages/product/report/components/saveForm.vue
@@ -167,6 +167,10 @@
       }
       this.operationTaskList.operationTaskId = this.operationTaskList.id;
       this.form.operationTaskId = this.operationTaskList.id;
+      this.form.status = this.operationTaskList.status;
+      this.form.Persons = this.operationTaskList.Persons;
+      this.form.productStaffIds = this.operationTaskList.productStaffIds;
+      this.form.productStaffs = this.operationTaskList.productStaffs;
       this.operationTaskList.productOutputList = []; // 鍒涘缓涓�涓┖鏁扮粍
       this.operationTaskList.productOutputList.push(this.form); // 鍚戞暟缁勪腑娣诲姞鍏冪礌
       console.log("this.operationTaskList", this.operationTaskList);
diff --git a/pages/product/report/index.scss b/pages/product/report/index.scss
index 8a12a47..14d2df6 100644
--- a/pages/product/report/index.scss
+++ b/pages/product/report/index.scss
@@ -1,4 +1,33 @@
-	.packing-registration-param {
+		/* 寮圭獥鏍峰紡 */
+		/* 澶嶉�夋鏍峰紡 */
+	.checkbox-item {
+		width: 230px;
+		display: flex;
+		align-items: center;
+		padding: 20rpx 0;
+		border-bottom: 1rpx solid #f5f5f5;
+		background-color: #f8f9fa;
+
+		.label {
+			position: relative;
+			left: 130px;
+		}
+	}
+    .popup-content {
+		padding: 30rpx;
+		max-height: 70vh;
+		overflow-y: auto;
+	}
+
+	.popup-header {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding-bottom: 20rpx;
+		border-bottom: 1rpx solid #eee;
+		margin-bottom: 20rpx;
+	}
+  .packing-registration-param {
   padding: 40rpx 30rpx 10rpx 30rpx;
   height: 350px;
   overflow: hidden;
diff --git a/pages/product/report/index.vue b/pages/product/report/index.vue
index fa65a7f..6b92297 100644
--- a/pages/product/report/index.vue
+++ b/pages/product/report/index.vue
@@ -80,20 +80,16 @@
 	      <u-radio name="false">鍚�</u-radio>
 	    </u-radio-group>
 	  </u-form-item>
-<!--      <u-form-item label="宸ュ簭">
-        <u-checkbox-group>
-          <u-checkbox
-            :name="item.name"
-            v-for="(item, index) in checkboxList"
-            :key="index"
-            v-model="item.value"
-            @change="changeCheckbox"
-            :disabled="subdisabled || item.disabled"
-          >
-            {{ item.name }}
-          </u-checkbox>
-        </u-checkbox-group>
-      </u-form-item> -->
+      <u-form-item label="鎶ュ伐鏂瑰紡" prop="status">
+        <u-radio-group v-model="form.status" :disabled="subdisabled" @change="handleReportTypeChange">
+          <u-radio name="false">鎸夌彮缁勬姤宸�</u-radio>
+          <u-radio name="true">鎸変汉鍛樻姤宸�</u-radio>
+        </u-radio-group>
+      </u-form-item>
+      <u-form-item label="浜哄憳鍚嶇О" :border-bottom="false" prop="Persons">
+				<u-input v-model="form.Persons" type="select" placeholder="璇烽�夋嫨"
+					@click="openselectedPersons" :disabled="!canSelectPerson || subdisabled"/>
+			</u-form-item>
       <u-form-item label="浜у嚭鍒楄〃" :border-bottom="false"></u-form-item>
     </u-form>
     <view class="wrap">
@@ -205,6 +201,19 @@
         </view>
       </view>
     </u-modal>
+    <u-modal v-model="personShowModal" title="" :show-cancel-button="true" :show-confirm-button="true"
+			@confirm="confirmSelection" @cancel="cancelSelection">
+			<view class="popup-content">
+				<view class="popup-header">
+					<checkbox-group @change="checkboxChange">
+						<label class="checkbox-item" v-for="(item, index) in selectedPersons" :key="index">
+							<checkbox :value="item.staffId" :checked="item.checked" />
+							<text class="label">{{ item.staffName }}</text>
+						</label>
+					</checkbox-group>
+				</view>
+			</view>
+		</u-modal>
     <scan></scan>
   </div>
 </template>
@@ -235,6 +244,7 @@
       //   },
       // ],
       InventoryReceiptList: [],
+        selectedPersons: [],
       form: {
         workstationId: "",
         work: "",
@@ -251,7 +261,13 @@
         materialCost: "",
         // autoReport: false,
         simplifyMaterials: 'false',
+        status: 'false',
+        Persons: '',
+        productStaffIds: [],
+        productStaffs:[]
       },
+      personList: [],
+      canSelectPerson: false,
       rules: {
         work: [
           {
@@ -295,6 +311,20 @@
             trigger: ["change"],
           },
         ],
+        status: [
+          {
+            required: true,
+            message: "璇烽�夋嫨鎶ュ伐鏂瑰紡",
+            trigger: ["change"],
+          },
+        ],
+        Persons: [
+          {
+            required: true,
+            message: "璇烽�夋嫨浜哄憳",
+            trigger: ["change"],
+          },
+        ],
       },
       showSave: false,
       operationTaskId: "",
@@ -302,6 +332,8 @@
       codeInfoId: "",
       detailedList: {},
       showModal: false,
+      personShowModal: false,
+			checkboxList: [],
     };
   },
   // 鐐瑰嚮鎻愪氦鎸夐挳鐨勪簨浠跺鐞嗗嚱鏁�
@@ -355,8 +387,71 @@
     "form.taskNo": function (newVal, oldVal) {
       this.subdisabled = false;
     },
+    'form.status'(newVal) {
+      this.selectedPersons = this.selectedPersons.map(item => ({
+        ...item,
+        checked: newVal === 'false'
+      }));
+    }
   },
   methods: {
+    // 澶勭悊鎶ュ伐鏂瑰紡鍙樻洿
+    handleReportTypeChange() {
+      // 鍒囨崲鎶ュ伐鏂瑰紡鏃舵竻绌轰汉鍛樺悕绉�
+      this.form.Persons = '';
+      this.form.productStaffs = [];
+      this.form.productStaffIds = [];
+    },
+    // 浜哄憳鍚嶇О
+    			openselectedPersons() {
+				this.personShowModal = true;
+    },
+      			// 澶嶉�夋鍙樺寲浜嬩欢
+    checkboxChange(e) {
+      console.log('e',e)
+				const values = e.target.value || [];
+				if (this.form.status === 'true') {
+					// 鍗曢�夋ā寮忥紝鍙厑璁搁�夋嫨涓�涓汉
+					const previouslySelected = this.selectedPersons.find(item => item.checked);
+					const newlySelected = values.length > 0 ? values[values.length - 1] : null;					 
+					if (previouslySelected && newlySelected && previouslySelected.staffId !== newlySelected) {
+						// 宸叉湁閫変腑椤逛笖閫夋嫨浜嗘柊鐨勯」锛屾彁绀哄彧鑳介�夋嫨涓�涓汉
+						this.$u.toast('鎸変汉鍛樻姤宸ユ椂鍙兘閫夋嫨涓�浣嶄汉鍛�');
+						// 淇濇寔鍘熼�夋嫨
+						this.selectedPersons = this.selectedPersons.map(item => ({
+							...item,
+							checked: item.staffId === previouslySelected.staffId
+            }));
+            
+					} else {
+						// 棣栨閫夋嫨鎴栧彇娑堥�夋嫨
+						this.selectedPersons = this.selectedPersons.map(item => ({
+							...item,
+							checked: newlySelected ? item.staffId === newlySelected : false
+            }));
+            
+					}
+				} else {
+					// 澶氶�夋ā寮�
+					this.selectedPersons = this.selectedPersons.map(item => ({
+						...item,
+						checked: values.includes(item.staffId)
+					}));
+				}
+    },
+      			// 纭閫夋嫨
+			confirmSelection() {
+        const selected = this.selectedPersons.filter(item => item.checked);
+				// 鏍规嵁鎶ュ伐鏂瑰紡璁剧疆浜哄憳鍚嶇О
+				if (this.form.status === 'true' && selected.length > 0) {
+					this.form.Persons = selected[0].staffName;
+				} else {
+					this.form.Persons = selected.map(item => item.staffName).join(',');
+				}
+				this.form.productStaffs = selected.map(item => item.staffNo);
+				this.form.productStaffIds = selected.map(item => item.staffId);
+    },
+      cancelSelection(){},
     // 閾滄潌鎶ュ伐
     CopperReportingWork(val) {
       const copperList = {};
@@ -368,6 +463,10 @@
       copperList.specificationType = val.ST
       copperList.grossWeight = val.TR
       copperList.operationTaskId = this.form.id
+      copperList.status = this.form.status;
+      copperList.Persons = this.form.Persons;
+      copperList.productStaffIds = this.form.productStaffIds;
+      copperList.productStaffs = this.form.productStaffs;
       this.form.productOutputList = [];
       this.form.operationTaskId = this.form.id;
       this.form.productOutputList.push(copperList);
@@ -382,6 +481,26 @@
     radioChange() {
       // 澶勭悊鍗曢�夋鍙樺寲浜嬩欢
     },
+    // 鑾峰彇浜哄憳鍒楄〃
+    getPersonList(dutyId) {
+      console.log('111111')
+      try {
+        this.$u.api.workReporting.getPersonByDutyRecordId({ id: dutyId }).then((res) => {
+        this.selectedPersons = res.data.map(item => ({
+          ...item,
+          checked: this.form.status === 'false'
+        }));
+      })
+      .catch(err => {
+        console.log(err)
+      })
+      } catch (err) {
+        console.log(err)
+        
+      }
+
+    },
+
     confirmModle() {
       console.log("鐐瑰嚮纭鍚庤幏鍙栧彇娑堟姤宸ヨ褰�");
       // 澶勭悊纭閫昏緫
@@ -481,12 +600,16 @@
         materialCost: val.materialCost,
         // autoReport: false,
         simplifyMaterials: 'false',
+        status: 'false',
+        Persons:'',
       };
-      this.checkboxList[1].value = false;
-      this.checkboxList[0].value = false;
       if (this.form.materialCost == "鍊掑啿") {
         this.simplifyDisabled = true;
       }
+      // 濡傛灉鏈塪utyNo锛岃幏鍙栦汉鍛樺垪琛�
+      if (val.dutyId) {
+        this.getPersonList(val.dutyId);
+      }
     },
   },
 };

--
Gitblit v1.9.3