From d6bcd2806fcf3a2f8da602152f2423f7f86226d7 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 05 一月 2026 17:18:40 +0800
Subject: [PATCH] 增加生产报工-投入产出页面

---
 src/views/productionManagement/productionReporting/index.vue  |   58 ++++++-----
 src/views/productionManagement/productionReporting/Output.vue |   92 ++++++++++++++++++
 src/views/productionManagement/productionReporting/Input.vue  |   92 ++++++++++++++++++
 3 files changed, 215 insertions(+), 27 deletions(-)

diff --git a/src/views/productionManagement/productionReporting/Input.vue b/src/views/productionManagement/productionReporting/Input.vue
new file mode 100644
index 0000000..144e5bd
--- /dev/null
+++ b/src/views/productionManagement/productionReporting/Input.vue
@@ -0,0 +1,92 @@
+<template>
+  <div>
+    <el-dialog
+        v-model="isShow"
+        title="鎶曞叆"
+        @close="closeModal"
+    >
+      <PIMTable
+          rowKey="id"
+          :column="tableColumn"
+          :tableData="data"
+          :page="page"
+          :tableLoading="tableLoading"
+          @pagination="pagination"
+      ></PIMTable>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="closeModal">鍏抽棴</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import {ref, computed, onMounted} from "vue";
+
+const props = defineProps({
+  visible: {
+    type: Boolean,
+    required: true,
+  },
+});
+
+const emit = defineEmits(['update:visible', 'completed']);
+
+const page = reactive({
+  current: 1,
+  size: 100,
+  total: 0
+});
+
+const pagination = (obj) => {
+  page.current = obj.page;
+  page.size = obj.limit;
+  fetchData();
+};
+
+const tableLoading = ref(false);
+
+const tableColumn = [
+  {
+    label: '鎶ュ伐鍗曞彿',
+    prop: 'productNo',
+  },
+  {
+    label: '浜у搧鍨嬪彿',
+    prop: 'productModelName',
+  },
+  {
+    label: '鎶曞叆鏁伴噺',
+    prop: 'quantity',
+  },
+]
+
+const isShow = computed({
+  get() {
+    return props.visible;
+  },
+  set(val) {
+    emit('update:visible', val);
+  },
+});
+
+const data = ref([])
+
+const closeModal = () => {
+  isShow.value = false;
+};
+
+const fetchData = () => {
+};
+
+defineExpose({
+  closeModal,
+  isShow,
+});
+
+onMounted(() => {
+  fetchData()
+})
+</script>
diff --git a/src/views/productionManagement/productionReporting/Output.vue b/src/views/productionManagement/productionReporting/Output.vue
new file mode 100644
index 0000000..b033dc0
--- /dev/null
+++ b/src/views/productionManagement/productionReporting/Output.vue
@@ -0,0 +1,92 @@
+<template>
+  <div>
+    <el-dialog
+        v-model="isShow"
+        title="浜у嚭"
+        @close="closeModal"
+    >
+      <PIMTable
+          rowKey="id"
+          :column="tableColumn"
+          :tableData="data"
+          :page="page"
+          :tableLoading="tableLoading"
+          @pagination="pagination"
+      ></PIMTable>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="closeModal">鍏抽棴</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import {ref, computed, onMounted} from "vue";
+
+const props = defineProps({
+  visible: {
+    type: Boolean,
+    required: true,
+  },
+});
+
+const emit = defineEmits(['update:visible', 'completed']);
+
+const page = reactive({
+  current: 1,
+  size: 100,
+  total: 0
+});
+
+const pagination = (obj) => {
+  page.current = obj.page;
+  page.size = obj.limit;
+  fetchData();
+};
+
+const tableLoading = ref(false);
+
+const tableColumn = [
+  {
+    label: '鎶ュ伐鍗曞彿',
+    prop: 'productNo',
+  },
+  {
+    label: '浜у搧鍨嬪彿',
+    prop: 'productModelName',
+  },
+  {
+    label: '浜у嚭鏁伴噺',
+    prop: 'quantity',
+  },
+]
+
+const isShow = computed({
+  get() {
+    return props.visible;
+  },
+  set(val) {
+    emit('update:visible', val);
+  },
+});
+
+const data = ref([])
+
+const closeModal = () => {
+  isShow.value = false;
+};
+
+const fetchData = () => {
+};
+
+defineExpose({
+  closeModal,
+  isShow,
+});
+
+onMounted(() => {
+  fetchData()
+})
+</script>
diff --git a/src/views/productionManagement/productionReporting/index.vue b/src/views/productionManagement/productionReporting/index.vue
index c254d23..7d55dd6 100644
--- a/src/views/productionManagement/productionReporting/index.vue
+++ b/src/views/productionManagement/productionReporting/index.vue
@@ -127,15 +127,21 @@
 			</PIMTable>
 		</div>
 		<form-dia ref="formDia" @close="handleQuery"></form-dia>
+    <input-modal
+        v-if="isShowInput"
+        v-model:visible="isShowInput"
+    />
+    <output-modal
+        v-if="isShowOutput"
+        v-model:visible="isShowOutput"
+    />
 	</div>
 </template>
 
 <script setup>
 import {onMounted, ref} from "vue";
 import FormDia from "@/views/productionManagement/productionReporting/components/formDia.vue";
-import {staffJoinDel, staffJoinListPage} from "@/api/personnelManagement/onboarding.js";
 import {ElMessageBox} from "element-plus";
-import dayjs from "dayjs";
 import {
 	productionReportUpdate,
 	workListPageById
@@ -144,6 +150,8 @@
   productionProductMainListPage,
 } from "@/api/productionManagement/production_product_main.js";
 import {userListNoPageByTenantId} from "@/api/system/user.js";
+import InputModal from "@/views/productionManagement/productionReporting/Input.vue";
+import OutputModal from "@/views/productionManagement/productionReporting/Output.vue";
 
 const data = reactive({
 	searchForm: {
@@ -236,9 +244,17 @@
     width: 200,
     operation: [
       {
-        name: "鏌ョ湅",
+        name: "鏌ョ湅鎶曞叆",
         type: "text",
         clickFun: (row) => {
+          showInput(row)
+        }
+      },
+      {
+        name: "鏌ョ湅浜у嚭",
+        type: "text",
+        clickFun: (row) => {
+          showOutput(row)
         }
       },
     ]
@@ -376,30 +392,18 @@
 	})
 };
 
-// 鍒犻櫎
-const handleDelete = () => {
-	let ids = [];
-	if (selectedRows.value.length > 0) {
-		ids = selectedRows.value.map((item) => item.id);
-	} else {
-		proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
-		return;
-	}
-	ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "瀵煎嚭", {
-		confirmButtonText: "纭",
-		cancelButtonText: "鍙栨秷",
-		type: "warning",
-	})
-		.then(() => {
-			staffJoinDel(ids).then((res) => {
-				proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-				getList();
-			});
-		})
-		.catch(() => {
-			proxy.$modal.msg("宸插彇娑�");
-		});
-};
+// 鎵撳紑鎶曞叆妯℃�佹
+const isShowInput = ref(false);
+const showInput = (row) => {
+	isShowInput.value = true;
+}
+
+// 鎵撳紑浜у嚭妯℃�佹
+const isShowOutput = ref(false);
+const showOutput = (row) => {
+	isShowOutput.value = true;
+}
+
 // 瀵煎嚭
 const handleOut = () => {
 	ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {

--
Gitblit v1.9.3