From 1fa7080dbfe381e891a54e8ad3a5ac1372505b7a Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 23 十二月 2025 13:40:41 +0800
Subject: [PATCH] 工序增删改查页面

---
 src/views/productionManagement/productionProcess/index.vue |  185 ++++++++++++++++++++++++++
 src/api/productionManagement/productionProcess.js          |   35 +++++
 src/views/productionManagement/productionProcess/Edit.vue  |   98 ++++++++++++++
 src/views/productionManagement/productionProcess/New.vue   |   92 +++++++++++++
 4 files changed, 410 insertions(+), 0 deletions(-)

diff --git a/src/api/productionManagement/productionProcess.js b/src/api/productionManagement/productionProcess.js
new file mode 100644
index 0000000..28e268a
--- /dev/null
+++ b/src/api/productionManagement/productionProcess.js
@@ -0,0 +1,35 @@
+// 宸ュ簭椤甸潰鎺ュ彛
+import request from "@/utils/request";
+
+// 鍒嗛〉鏌ヨ
+export function listPage(query) {
+  return request({
+    url: "/productProcess/listPage",
+    method: "get",
+    params: query,
+  });
+}
+
+export function add(data) {
+  return request({
+    url: "/productProcess",
+    method: "post",
+    data: data,
+  });
+}
+
+export function del(data) {
+  return request({
+    url: '/productProcess/batchDelete',
+    method: 'delete',
+    data: data,
+  })
+}
+
+export function update(data) {
+  return request({
+    url: '/productProcess/update',
+    method: 'put',
+    data: data,
+  })
+}
\ No newline at end of file
diff --git a/src/views/productionManagement/productionProcess/Edit.vue b/src/views/productionManagement/productionProcess/Edit.vue
new file mode 100644
index 0000000..df691cb
--- /dev/null
+++ b/src/views/productionManagement/productionProcess/Edit.vue
@@ -0,0 +1,98 @@
+<template>
+  <div>
+    <el-dialog
+        v-model="isShow"
+        title="缂栬緫宸ュ簭"
+        width="400"
+        @close="closeModal"
+    >
+      <el-form label-width="140px" :model="formState" label-position="top" ref="formRef">
+        <el-form-item
+            label="宸ュ簭鍚嶇О锛�"
+            prop="name"
+            :rules="[
+                {
+                required: true,
+                message: '璇疯緭鍏ュ伐搴忓悕绉�',
+              },
+              {
+                max: 100,
+                message: '鏈�澶�100涓瓧绗�',
+              }
+            ]">
+          <el-input v-model="formState.name" />
+        </el-form-item>
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input v-model="formState.remark" type="textarea" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="handleSubmit">纭</el-button>
+          <el-button @click="closeModal">鍙栨秷</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { ref, computed, getCurrentInstance } from "vue";
+import {update} from "@/api/productionManagement/productionProcess.js";
+
+const props = defineProps({
+  visible: {
+    type: Boolean,
+    required: true,
+  },
+
+  record: {
+    type: Object,
+    required: true,
+  }
+});
+
+const emit = defineEmits(['update:visible', 'completed']);
+
+// 鍝嶅簲寮忔暟鎹紙鏇夸唬閫夐」寮忕殑 data锛�
+const formState = ref({
+  id: props.record.id,
+  name: props.record.name,
+  remark: props.record.remark,
+});
+
+const isShow = computed({
+  get() {
+    return props.visible;
+  },
+  set(val) {
+    emit('update:visible', val);
+  },
+});
+
+let { proxy } = getCurrentInstance()
+
+const closeModal = () => {
+  isShow.value = false;
+};
+
+const handleSubmit = () => {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      update(formState.value).then(res => {
+        // 鍏抽棴妯℃�佹
+        isShow.value = false;
+        // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
+        emit('completed');
+        proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+      })
+    }
+  })
+};
+
+defineExpose({
+  closeModal,
+  handleSubmit,
+  isShow,
+});
+</script>
diff --git a/src/views/productionManagement/productionProcess/New.vue b/src/views/productionManagement/productionProcess/New.vue
new file mode 100644
index 0000000..0a3f858
--- /dev/null
+++ b/src/views/productionManagement/productionProcess/New.vue
@@ -0,0 +1,92 @@
+<template>
+  <div>
+    <el-dialog
+        v-model="isShow"
+        title="鏂板宸ュ簭"
+        width="400"
+        @close="closeModal"
+    >
+      <el-form label-width="140px" :model="formState" label-position="top" ref="formRef">
+        <el-form-item
+            label="宸ュ簭鍚嶇О锛�"
+            prop="name"
+            :rules="[
+                {
+                required: true,
+                message: '璇疯緭鍏ュ伐搴忓悕绉�',
+              },
+              {
+                max: 100,
+                message: '鏈�澶�100涓瓧绗�',
+              }
+            ]">
+          <el-input v-model="formState.name" />
+        </el-form-item>
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input v-model="formState.remark" type="textarea" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="handleSubmit">纭</el-button>
+          <el-button @click="closeModal">鍙栨秷</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { ref, computed, getCurrentInstance } from "vue";
+import {add} from "@/api/productionManagement/productionProcess.js";
+
+const props = defineProps({
+  visible: {
+    type: Boolean,
+    required: true,
+  },
+});
+
+const emit = defineEmits(['update:visible', 'completed']);
+
+// 鍝嶅簲寮忔暟鎹紙鏇夸唬閫夐」寮忕殑 data锛�
+const formState = ref({
+  name: '',
+  remark: '',
+});
+
+const isShow = computed({
+  get() {
+    return props.visible;
+  },
+  set(val) {
+    emit('update:visible', val);
+  },
+});
+
+let { proxy } = getCurrentInstance()
+
+const closeModal = () => {
+  isShow.value = false;
+};
+
+const handleSubmit = () => {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      add(formState.value).then(res => {
+        // 鍏抽棴妯℃�佹
+        isShow.value = false;
+        // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
+        emit('completed');
+        proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+      })
+    }
+  })
+};
+
+defineExpose({
+  closeModal,
+  handleSubmit,
+  isShow,
+});
+</script>
diff --git a/src/views/productionManagement/productionProcess/index.vue b/src/views/productionManagement/productionProcess/index.vue
new file mode 100644
index 0000000..46c3c06
--- /dev/null
+++ b/src/views/productionManagement/productionProcess/index.vue
@@ -0,0 +1,185 @@
+<template>
+	<div class="app-container">
+		<div class="search_form">
+			<el-form :model="searchForm" :inline="true">
+				<el-form-item label="宸ュ簭鍚嶇О:">
+					<el-input v-model="searchForm.name" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+										style="width: 200px;"
+										@change="handleQuery" />
+				</el-form-item>
+				<el-form-item label="宸ュ簭缂栧彿:">
+					<el-input v-model="searchForm.no" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+										style="width: 200px;"
+										@change="handleQuery" />
+				</el-form-item>
+				<el-form-item>
+					<el-button type="primary" @click="handleQuery">鎼滅储</el-button>
+				</el-form-item>
+			</el-form>
+		</div>
+		<div class="table_list">
+			<div style="text-align: right" class="mb10">
+				<el-button type="primary" @click="showNewModal">鏂板宸ュ簭</el-button>
+				<el-button type="danger" @click="handleDelete" :disabled="selectedRows.length === 0" plain>鍒犻櫎宸ュ簭</el-button>
+			</div>
+			<PIMTable
+				rowKey="id"
+				:column="tableColumn"
+				:tableData="tableData"
+				:page="page"
+				:isSelection="true"
+				@selection-change="handleSelectionChange"
+				:tableLoading="tableLoading"
+				@pagination="pagination"
+				:total="page.total"
+			></PIMTable>
+		</div>
+		<new-process
+      v-if="isShowNewModal"
+      v-model:visible="isShowNewModal"
+      @completed="getList"
+    />
+
+    <edit-process
+      v-if="isShowEditModal"
+      v-model:visible="isShowEditModal"
+      :record="record"
+      @completed="getList"
+    />
+	</div>
+</template>
+
+<script setup>
+import {onMounted, ref} from "vue";
+import NewProcess from "@/views/productionManagement/productionProcess/New.vue";
+import EditProcess from "@/views/productionManagement/productionProcess/Edit.vue";
+import {listPage, del} from "@/api/productionManagement/productionProcess.js";
+
+const data = reactive({
+	searchForm: {
+		name: "",
+		no: "",
+	},
+});
+const { searchForm } = toRefs(data);
+const tableColumn = ref([
+	{
+		label: "宸ュ簭鍚嶇О",
+		prop: "name",
+	},
+	{
+		label: "宸ュ簭缂栧彿",
+		prop: "no",
+	},
+	{
+		label: "澶囨敞",
+		prop: "remark",
+	},
+  {
+    dataType: "action",
+    label: "鎿嶄綔",
+    align: "center",
+    fixed: "right",
+    width: 280,
+    operation: [
+      {
+        name: "缂栬緫",
+        type: "text",
+        clickFun: (row) => {
+          showEditModal(row);
+        }
+      }
+    ]
+  }
+]);
+const tableData = ref([]);
+const selectedRows = ref([]);
+const tableLoading = ref(false);
+const isShowNewModal = ref(false);
+const isShowEditModal = ref(false);
+const record = ref({});
+const page = reactive({
+	current: 1,
+	size: 100,
+	total: 0,
+});
+const { proxy } = getCurrentInstance()
+
+// 鏌ヨ鍒楄〃
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+const handleQuery = () => {
+	page.current = 1;
+	getList();
+};
+
+const pagination = (obj) => {
+	page.current = obj.page;
+	page.size = obj.limit;
+	getList();
+};
+const getList = () => {
+	tableLoading.value = true;
+	const params = { ...searchForm.value, ...page };
+	params.entryDate = undefined
+  listPage(params).then(res => {
+		tableLoading.value = false;
+		tableData.value = res.data.records.map(item => ({
+			...item,
+		}));
+		page.total = res.data.total;
+	}).catch(err => {
+		tableLoading.value = false;
+	})
+};
+// 琛ㄦ牸閫夋嫨鏁版嵁
+const handleSelectionChange = (selection) => {
+	selectedRows.value = selection;
+};
+
+// 鎵撳紑鏂板寮规
+const showNewModal = () => {
+  isShowNewModal.value = true
+};
+
+const showEditModal = (row) => {
+  isShowEditModal.value = true
+  record.value = row
+};
+
+// 鍒犻櫎
+function handleDelete() {
+  const no = selectedRows.value.map((item) => item.no);
+  const ids = selectedRows.value.map((item) => item.id);
+  proxy.$modal
+      .confirm('鏄惁纭鍒犻櫎宸ュ簭缂栧彿涓�"' + no + '"鐨勬暟鎹」锛�')
+      .then(function () {
+        return del(ids);
+      })
+      .then(() => {
+        getList();
+        proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      })
+      .catch(() => {});
+}
+
+// 瀵煎嚭
+// const handleOut = () => {
+// 	ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+// 		confirmButtonText: "纭",
+// 		cancelButtonText: "鍙栨秷",
+// 		type: "warning",
+// 	})
+// 		.then(() => {
+// 			proxy.download("/salesLedger/scheduling/exportTwo", {}, "宸ュ簭鎺掍骇.xlsx");
+// 		})
+// 		.catch(() => {
+// 			proxy.$modal.msg("宸插彇娑�");
+// 		});
+// };
+
+onMounted(() => {
+	getList();
+});
+</script>
+
+<style scoped></style>

--
Gitblit v1.9.3