From 8bc17a9ea84a6af0b7d01e451c702f404a3ff895 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期六, 10 一月 2026 11:36:34 +0800
Subject: [PATCH] Merge branch 'dev_tide' into dev_tide_cbsglxt

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

diff --git a/src/views/productionManagement/operationScheduling/components/formDia.vue b/src/views/productionManagement/operationScheduling/components/formDia.vue
new file mode 100644
index 0000000..5d8fe3a
--- /dev/null
+++ b/src/views/productionManagement/operationScheduling/components/formDia.vue
@@ -0,0 +1,181 @@
+<template>
+  <div>
+    <el-dialog
+        v-model="dialogFormVisible"
+        title="宸ュ簭鎺掍骇"
+        width="70%"
+        @close="closeDia"
+    >
+      <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" stripe>
+        <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-input
+              v-model="scope.row.process"
+              placeholder="璇疯緭鍏ュ伐搴�"
+              clearable
+            />
+          </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 {userListNoPageByTenantId} from "@/api/system/user.js";
+import {processScheduling} from "@/api/productionManagement/operationScheduling.js";
+const { proxy } = getCurrentInstance()
+const emit = defineEmits(['close'])
+
+const dialogFormVisible = ref(false);
+const operationType = ref('')
+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;
+	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 = () => {
+	// 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 = () => {
+  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>
+
+</style>
\ No newline at end of file

--
Gitblit v1.9.3