From 4d3882045d317ddb3c7416f606ac738ca6ec2c01 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 23 七月 2025 10:21:05 +0800
Subject: [PATCH] 1.生产管理联调

---
 src/views/productionManagement/operationScheduling/components/formDia.vue |  268 ++++++++++++++++++++++++++++------------------------
 1 files changed, 144 insertions(+), 124 deletions(-)

diff --git a/src/views/productionManagement/operationScheduling/components/formDia.vue b/src/views/productionManagement/operationScheduling/components/formDia.vue
index 9e5f1eb..ad37c4b 100644
--- a/src/views/productionManagement/operationScheduling/components/formDia.vue
+++ b/src/views/productionManagement/operationScheduling/components/formDia.vue
@@ -2,162 +2,182 @@
   <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>
+      <el-table :data="tableData" border style="width: 100%" :summary-method="summarizeMainTable" show-summary :row-key="row => row.id">
+        <el-table-column label="搴忓彿" width="60">
+          <template #default="scope">
+            {{ scope.$index + 1 }}
+          </template>
+        </el-table-column>
+        <el-table-column label="宸ュ簭" prop="process">
+          <template #default="scope">
+						<el-select v-model="scope.row.process" placeholder="璇烽�夋嫨" clearable style="width: 100%">
+							<el-option
+								v-for="dict in work_step"
+								:key="dict.value"
+								:label="dict.label"
+								:value="dict.value"
 							/>
-            </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="unit">
+          <template #default="scope">
+            <el-input v-model="scope.row.unit" 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">
+          <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">
+          <template #default="scope">
+						<el-select
+							v-model="scope.row.schedulingUserId"
+							placeholder="閫夋嫨浜哄憳"
+							style="width: 100%;"
+						>
+							<el-option
+								v-for="user in userList"
+								:key="user.userId"
+								:label="user.nickName"
+								:value="user.userId"
+							/>
+						</el-select>
+          </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 {userListNoPageByTenantId} from "@/api/system/user.js";
+import {processScheduling} from "@/api/productionManagement/operationScheduling.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([
+	{ process: '', schedulingDate: '', schedulingNum: '', schedulingUserId: '', workHours: '', unit: '' }
+]);
+const unitFromRow = ref('');
+const idFromRow = ref('');
+const pendingNum = ref('');
+const userList = ref([])
 
 // 鎵撳紑寮规
 const openDialog = (type, row) => {
   operationType.value = type;
   dialogFormVisible.value = true;
-  if (operationType.value === 'edit') {
-    getStaffJoinInfo(row.id).then(res => {
-      form.value = {...res.data}
-    })
+	userListNoPageByTenantId().then((res) => {
+		userList.value = res.data;
+	});
+	pendingNum.value = row.pendingNum
+  if (row && row.unit !== undefined) {
+    unitFromRow.value = row.unit;
+    idFromRow.value = row.id;
+    tableData.value.forEach(item => {
+      item.unit = row.unit;
+      item.id = row.id;
+    });
+  } else {
+    unitFromRow.value = '';
   }
 }
-// 鎻愪氦浜у搧琛ㄥ崟
 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();
-        })
-      }
-    }
-  })
+	// 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;
+	}
+	processScheduling(tableData.value).then((res) => {
+		proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+		closeDia();
+	})
 }
-
+const summarizeMainTable = (param) => {
+	return proxy.summarizeTable(param, ['schedulingNum']);
+};
 // 鍏抽棴寮规
 const closeDia = () => {
-  proxy.resetForm("formRef");
   dialogFormVisible.value = false;
   emit('close')
 };
 defineExpose({
   openDialog,
 });
+
+const addRow = () => {
+  tableData.value.push({ id: idFromRow.value, process: '', unit: unitFromRow.value, schedulingNum: '', workHours: '', schedulingDate: '', schedulingUserId: '' });
+};
+const removeRow = (index) => {
+  tableData.value.splice(index, 1);
+};
 </script>
 
 <style scoped>

--
Gitblit v1.9.3