From 0c5b607e028bd756079cb328dd0914db2c9093f5 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 04 十二月 2025 14:59:55 +0800
Subject: [PATCH] 1.部署修改

---
 src/views/productionManagement/operationScheduling/components/formDia.vue |  333 ++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 206 insertions(+), 127 deletions(-)

diff --git a/src/views/productionManagement/operationScheduling/components/formDia.vue b/src/views/productionManagement/operationScheduling/components/formDia.vue
index 9e5f1eb..542e4f5 100644
--- a/src/views/productionManagement/operationScheduling/components/formDia.vue
+++ b/src/views/productionManagement/operationScheduling/components/formDia.vue
@@ -2,162 +2,241 @@
   <div>
     <el-dialog
         v-model="dialogFormVisible"
-        :title="operationType === 'add' ? '鏂板鍏ヨ亴' : '缂栬緫浜哄憳'"
+        title="宸ュ簭鎺掍骇"
         width="70%"
         @close="closeDia"
     >
-      <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="椤圭洰鍚嶇О锛�" prop="staffNo">
-              <el-input v-model="form.staffNo" placeholder="璇疯緭鍏�" clearable disabled/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="浜у搧澶х被锛�" prop="staffNo">
-              <el-input v-model="form.staffNo" placeholder="璇疯緭鍏�" clearable disabled/>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鎬绘暟閲忥細" prop="staffNo">
-              <el-input v-model="form.staffNo" placeholder="璇疯緭鍏�" clearable disabled/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏈鎺掍骇鏁伴噺锛�" prop="staffNo">
-							<el-input-number
-								v-model="form.ticketsNum"
-								placeholder="璇疯緭鍏�"
-								:min="0"
-								:step="0.1"
-								:precision="2"
-								clearable
-								style="width: 100%"
+      <el-button type="primary" @click="addRow" style="margin-bottom: 10px;">鏂板</el-button>
+			<span style="font-size: 18px;margin-left: 10px">寰呮帓浜ф暟閲忥細{{pendingNum}}</span>
+<!--			<div style="margin-bottom: 10px; margin-left: 10px;">-->
+<!--				<el-form-item label="棰嗙敤锛�" style="margin-bottom: 0;">-->
+<!--					<el-input v-model="receive" placeholder="璇疯緭鍏ラ鐢�" style="width: 200px;" />-->
+<!--				</el-form-item>-->
+<!--			</div>-->
+      <el-table :data="tableData" border style="width: 100%" :summary-method="summarizeMainTable" show-summary :row-key="row => row.id">
+        <el-table-column label="搴忓彿" width="60" align="center">
+          <template #default="scope">
+            {{ scope.$index + 1 }}
+          </template>
+        </el-table-column>
+        <el-table-column label="宸ュ簭" prop="process" width="150">
+          <template #default="scope">
+							<el-select
+								v-model="scope.row.process"
+								placeholder="閫夋嫨宸ュ簭"
+								style="width: 100%;"
+                filterable
+                clearable
+							>
+								<el-option
+									v-for="process in processList"
+									:key="process.id"
+									:label="process.name"
+									:value="process.name"
+								/>
+							</el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="鍗曚綅" prop="unit" width="90">
+          <template #default="scope">
+            <el-input v-model="scope.row.unit" placeholder="璇疯緭鍏ュ崟浣�" />
+          </template>
+        </el-table-column>
+        <el-table-column label="鍙e懗/鍝佸悕/瑙勬牸" prop="type" width="150">
+          <template #default="scope">
+            <el-input v-model="scope.row.type" placeholder="璇疯緭鍏�" />
+          </template>
+        </el-table-column>
+        <el-table-column label="鎺掍骇鏁伴噺" width="200" prop="schedulingNum">
+          <template #default="scope">
+						<el-input-number
+							v-model="scope.row.schedulingNum"
+							placeholder="璇疯緭鍏�"
+							:min="0"
+							:step="0.1"
+							:precision="2"
+							clearable
+							style="width: 100%"
+						/>
+          </template>
+        </el-table-column>
+        <el-table-column label="宸ヨ祫" width="200" prop="workHours">
+          <template #default="scope">
+						<el-input-number
+							v-model="scope.row.workHours"
+							placeholder="璇疯緭鍏�"
+							:min="0"
+							:step="0.1"
+							:precision="2"
+							clearable
+							style="width: 100%"
+						/>
+          </template>
+        </el-table-column>
+        <el-table-column label="鎺掍骇鏃ユ湡" prop="schedulingDate" width="200">
+          <template #default="scope">
+            <el-date-picker v-model="scope.row.schedulingDate" type="date" placeholder="閫夋嫨鏃ユ湡" style="width: 100%;" value-format="YYYY-MM-DD" format="YYYY-MM-DD"/>
+          </template>
+        </el-table-column>
+        <el-table-column label="鎺掍骇浜�" prop="schedulingUserId" width="150">
+          <template #default="scope">
+						<el-select
+							v-model="scope.row.schedulingUserId"
+							placeholder="閫夋嫨浜哄憳"
+							style="width: 100%;"
+              filterable
+              default-first-option
+              :reserve-keyword="false"
+						>
+							<el-option
+								v-for="user in userList"
+								:key="user.userId"
+								:label="user.nickName"
+								:value="user.userId"
 							/>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-					<el-col :span="12">
-						<el-form-item label="鎺掍骇浜猴細" prop="staffName">
-							<el-input v-model="form.staffName" placeholder="璇疯緭鍏�" clearable/>
-						</el-form-item>
-					</el-col>
-          <el-col :span="12">
-            <el-form-item label="鎺掍骇鏃ユ湡锛�" prop="contractStartTime">
-              <el-date-picker
-                  v-model="form.contractStartTime"
-                  type="date"
-                  placeholder="璇烽�夋嫨鏃ユ湡"
-                  value-format="YYYY-MM-DD"
-                  format="YYYY-MM-DD"
-                  clearable
-                  style="width: 100%"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button type="primary" @click="submitForm">纭</el-button>
-          <el-button @click="closeDia">鍙栨秷</el-button>
-        </div>
-      </template>
+						</el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="澶囨敞" prop="remark" width="200">
+          <template #default="scope">
+            <el-input v-model="scope.row.remark" placeholder="璇疯緭鍏ュ娉�" />
+          </template>
+        </el-table-column>
+        <el-table-column label="鎿嶄綔" width="80">
+          <template #default="scope">
+            <el-button type="danger" size="small" @click="removeRow(scope.$index)">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+			<template #footer>
+				<div class="dialog-footer">
+					<el-button type="primary" @click="submitForm">纭</el-button>
+					<el-button @click="closeDia">鍙栨秷</el-button>
+				</div>
+			</template>
     </el-dialog>
   </div>
 </template>
 
 <script setup>
-import {ref} from "vue";
-import {getStaffJoinInfo, staffJoinAdd, staffJoinUpdate} from "@/api/personnelManagement/onboarding.js";
+import {ref, getCurrentInstance} from "vue";
+import {userListNoPageByTenantId} from "@/api/system/user.js";
+import {processScheduling} from "@/api/productionManagement/operationScheduling.js";
+import {laborConfListPage} from "@/api/lavorissce/issue.js";
 const { proxy } = getCurrentInstance()
+const { work_step } = proxy.useDict("work_step")
 const emit = defineEmits(['close'])
 
 const dialogFormVisible = ref(false);
 const operationType = ref('')
-const data = reactive({
-  form: {
-    staffNo: "",
-    staffName: "",
-    sex: "",
-    nativePlace: "",
-    postJob: "",
-    adress: "",
-    firstStudy: "",
-    profession: "",
-    identityCard: "",
-    age: 0,
-    phone: "",
-    emergencyContact: "",
-    emergencyContactPhone: "",
-    contractTerm: 0,
-    contractStartTime: "",
-    contractEndTime: "",
-    staffState: "",
-  },
-  rules: {
-    staffNo: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" },],
-    staffName: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    sex: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    nativePlace: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    postJob: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    adress: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    firstStudy: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    profession: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    identityCard: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    age: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    phone: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    emergencyContact: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    emergencyContactPhone: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    contractTerm: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    contractStartTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    contractEndTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-  },
-});
-const { form, rules } = toRefs(data);
+const tableData = ref([]);
+const unitFromRow = ref('');
+const idFromRow = ref('');
+const specificationModelFromRow = ref('');
+const pendingNum = ref(0);
+const userList = ref([])
+const processList = ref([])
+const receive = ref('')
+const productionLineIdFromRow = ref('');
+const productionUserIdFromRow = ref('');
 
 // 鎵撳紑寮规
 const openDialog = (type, row) => {
   operationType.value = type;
   dialogFormVisible.value = true;
-  if (operationType.value === 'edit') {
-    getStaffJoinInfo(row.id).then(res => {
-      form.value = {...res.data}
-    })
-  }
-}
-// 鎻愪氦浜у搧琛ㄥ崟
-const submitForm = () => {
-  proxy.$refs.formRef.validate(valid => {
-    if (valid) {
-      form.value.staffState = 1
-      if (operationType.value === "add") {
-        staffJoinAdd(form.value).then(res => {
-          proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-          closeDia();
-        })
-      } else {
-        staffJoinUpdate(form.value).then(res => {
-          proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-          closeDia();
-        })
-      }
-    }
-  })
+	userListNoPageByTenantId().then((res) => {
+		userList.value = res.data;
+	});
+	// 鏍规嵁閫変腑鏁版嵁鐨刾roductionLineId鏌ヨ宸ュ簭鍒楄〃
+	if (row?.productionLineId) {
+		laborConfListPage({ id: row.productionLineId, current: -1, size: -1 }).then((res) => {
+			processList.value = res.data.records || [];
+		});
+	}
+	pendingNum.value = row?.pendingNum ?? 0;
+	unitFromRow.value = row?.unit ?? '';
+	idFromRow.value = row?.id ?? '';
+	specificationModelFromRow.value = row?.specificationModel ?? '';
+	productionLineIdFromRow.value = row?.productionLineId ?? '';
+	productionUserIdFromRow.value = row?.productionUserId ?? '';
+	tableData.value = [createRow()];
 }
 
+const createRow = () => ({
+	id: idFromRow.value,
+	process: '',
+	schedulingDate: '',
+	schedulingNum: null,
+	schedulingUserId: '',
+	workHours: null,
+	unit: unitFromRow.value,
+	remark: '',
+	type: specificationModelFromRow.value,
+});
+
+const submitForm = () => {
+	// 1. 妫�鏌ユ瘡涓�琛屾槸鍚﹀~鍐欏畬鏁�
+	for (let i = 0; i < tableData.value.length; i++) {
+		const row = tableData.value[i];
+		if (
+			!row.process ||
+			!row.schedulingDate ||
+			row.schedulingNum === '' || row.schedulingNum === null ||
+			!row.schedulingUserId ||
+			row.workHours === '' || row.workHours === null ||
+			!row.unit
+		) {
+			proxy.$modal.msgError(`绗�${i + 1}琛屾暟鎹湭濉啓瀹屾暣`);
+			return;
+		}
+	}
+	// 2. 鍚堣鎺掍骇鏁伴噺
+	const totalSchedulingNum = tableData.value.reduce((sum, row) => {
+		return sum + Number(row.schedulingNum || 0);
+	}, 0);
+	if (totalSchedulingNum > Number(pendingNum.value)) {
+		proxy.$modal.msgError('鎺掍骇鏁伴噺鍚堣涓嶈兘瓒呰繃寰呮帓浜ф暟閲�');
+		return;
+	}
+	// 3. 灏� receive銆乸roductionLineId銆乸roductionUserId 瀛楁娣诲姞鍒版瘡鏉℃暟鎹腑锛屽苟绉婚櫎 loss 瀛楁
+	const submitData = tableData.value.map(row => {
+		const { loss, ...rest } = row;
+		return {
+			...rest,
+			receive: receive.value,
+			productionLineId: productionLineIdFromRow.value,
+			productionUserId: productionUserIdFromRow.value
+		};
+	});
+	processScheduling(submitData).then((res) => {
+		proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+		closeDia();
+	})
+}
+const summarizeMainTable = (param) => {
+	return proxy.summarizeTable(param, ['schedulingNum']);
+};
 // 鍏抽棴寮规
 const closeDia = () => {
-  proxy.resetForm("formRef");
   dialogFormVisible.value = false;
+  receive.value = '';
+  tableData.value = [];
+  unitFromRow.value = '';
+  idFromRow.value = '';
+  specificationModelFromRow.value = '';
+  pendingNum.value = 0;
   emit('close')
 };
 defineExpose({
   openDialog,
 });
+
+const addRow = () => {
+  tableData.value.push(createRow());
+};
+const removeRow = (index) => {
+  tableData.value.splice(index, 1);
+};
 </script>
 
 <style scoped>

--
Gitblit v1.9.3