From 44c1a1c40029e0eeef20a33f551a42e174cdac64 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期六, 14 三月 2026 14:32:07 +0800
Subject: [PATCH] 生产记录
---
src/views/productionManagement/productionRecords/New.vue | 122 +++++++++++++
src/views/productionManagement/productionRecords/Edit.vue | 165 ++++++++++++++++++
src/api/productionManagement/productionRecords.js | 38 ++++
src/views/productionManagement/productionRecords/index.vue | 189 +++++++++++++++++++++
4 files changed, 514 insertions(+), 0 deletions(-)
diff --git a/src/api/productionManagement/productionRecords.js b/src/api/productionManagement/productionRecords.js
new file mode 100644
index 0000000..6393901
--- /dev/null
+++ b/src/api/productionManagement/productionRecords.js
@@ -0,0 +1,38 @@
+// 鐢熶骇璁板綍锛堝弬鏁帮級鎺ュ彛
+import request from "@/utils/request";
+
+// 鍒嗛〉鏌ヨ
+export function listPage(query) {
+ return request({
+ url: "/productParameter/listPage",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板
+export function add(data) {
+ return request({
+ url: "/productParameter/addProductParameter",
+ method: "post",
+ data: data,
+ });
+}
+
+// 淇敼
+export function update(data) {
+ return request({
+ url: "/productParameter/updProductParameter",
+ method: "put",
+ data: data,
+ });
+}
+
+// 鍒犻櫎 ids 涓烘暟缁勬椂浼氭嫾鎴� productParameter/1,2,3
+export function del(ids) {
+ const idStr = Array.isArray(ids) ? ids.join(",") : ids;
+ return request({
+ url: `/productParameter/${idStr}`,
+ method: "delete",
+ });
+}
diff --git a/src/views/productionManagement/productionRecords/Edit.vue b/src/views/productionManagement/productionRecords/Edit.vue
new file mode 100644
index 0000000..97ea9cb
--- /dev/null
+++ b/src/views/productionManagement/productionRecords/Edit.vue
@@ -0,0 +1,165 @@
+<template>
+ <div>
+ <el-dialog
+ v-model="isShow"
+ title="缂栬緫鐢熶骇璁板綍"
+ width="520px"
+ @close="closeModal"
+ >
+ <el-form
+ ref="formRef"
+ label-width="120px"
+ :model="formState"
+ label-position="top"
+ >
+ <el-form-item
+ label="鍙傛暟椤�"
+ prop="parameterItem"
+ :rules="[{ required: true, message: '璇疯緭鍏ュ弬鏁伴」' }]"
+ >
+ <el-input v-model="formState.parameterItem" placeholder="璇疯緭鍏ュ弬鏁伴」" />
+ </el-form-item>
+ <el-form-item
+ label="鍙傛暟绫诲瀷"
+ prop="type"
+ :rules="[{ required: true, message: '璇烽�夋嫨鍙傛暟绫诲瀷' }]"
+ >
+ <el-select v-model="formState.type" placeholder="璇烽�夋嫨鍙傛暟绫诲瀷" style="width: 100%;">
+ <el-option
+ v-for="dict in parameter_tyep"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item
+ label="鍗曚綅"
+ prop="unit"
+ :rules="[{ required: true, message: '璇疯緭鍏ュ崟浣�' }]"
+ >
+ <el-input v-model="formState.unit" placeholder="璇疯緭鍏ュ崟浣�" />
+ </el-form-item>
+ <el-form-item label="鍙傛暟鏍煎紡" prop="parameterFormat">
+ <el-input v-model="formState.parameterFormat" placeholder="璇疯緭鍏ュ弬鏁版牸寮忥紙閫夊~锛�" />
+ </el-form-item>
+ <el-form-item
+ label="鏄惁蹇呭~"
+ prop="isRequired"
+ :rules="[{ required: true, message: '璇烽�夋嫨鏄惁蹇呭~' }]"
+ >
+ <el-select v-model="formState.isRequired" placeholder="璇烽�夋嫨" style="width: 100%;">
+ <el-option label="鏄�" value="1" />
+ <el-option label="鍚�" value="0" />
+ </el-select>
+ </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, watch } from "vue";
+import { update } from "@/api/productionManagement/productionRecords.js";
+
+const props = defineProps({
+ visible: {
+ type: Boolean,
+ required: true,
+ },
+ record: {
+ type: Object,
+ default: () => ({}),
+ },
+});
+
+const emit = defineEmits(["update:visible", "completed"]);
+
+const formRef = ref(null);
+const formState = ref({
+ id: undefined,
+ code: "",
+ parameterItem: "",
+ type: "",
+ unit: "",
+ parameterFormat: "",
+ isRequired: undefined,
+});
+
+const isShow = computed({
+ get() {
+ return props.visible;
+ },
+ set(val) {
+ emit("update:visible", val);
+ },
+});
+
+// 鍥炴樉锛氱洃鍚� record 鍙樺寲
+watch(
+ () => props.record,
+ (newRecord) => {
+ if (newRecord && Object.keys(newRecord).length) {
+ formState.value = {
+ id: newRecord.id,
+ code: newRecord.code ?? "",
+ parameterItem: newRecord.parameterItem ?? "",
+ type: newRecord.type ?? "",
+ unit: newRecord.unit ?? "",
+ parameterFormat: newRecord.parameterFormat ?? "",
+ isRequired: newRecord.isRequired,
+ };
+ }
+ },
+ { immediate: true, deep: true }
+);
+
+// 寮圭獥鎵撳紑鏃堕噸鏂板洖鏄�
+watch(
+ () => props.visible,
+ (visible) => {
+ if (visible && props.record && Object.keys(props.record).length) {
+ formState.value = {
+ id: props.record.id,
+ code: props.record.code ?? "",
+ parameterItem: props.record.parameterItem ?? "",
+ type: props.record.type ?? "",
+ unit: props.record.unit ?? "",
+ parameterFormat: props.record.parameterFormat ?? "",
+ isRequired: props.record.isRequired,
+ };
+ }
+ }
+);
+
+const { proxy } = getCurrentInstance();
+const { parameter_tyep } = proxy.useDict("parameter_tyep");
+
+const closeModal = () => {
+ isShow.value = false;
+};
+
+const handleSubmit = () => {
+ formRef.value.validate((valid) => {
+ if (valid) {
+ update(formState.value).then(() => {
+ isShow.value = false;
+ emit("completed");
+ proxy.$modal.msgSuccess("淇敼鎴愬姛");
+ });
+ }
+ });
+};
+
+defineExpose({
+ closeModal,
+ handleSubmit,
+ isShow,
+});
+</script>
diff --git a/src/views/productionManagement/productionRecords/New.vue b/src/views/productionManagement/productionRecords/New.vue
new file mode 100644
index 0000000..f0e2e9f
--- /dev/null
+++ b/src/views/productionManagement/productionRecords/New.vue
@@ -0,0 +1,122 @@
+<template>
+ <div>
+ <el-dialog
+ v-model="isShow"
+ title="鏂板鐢熶骇璁板綍"
+ width="520px"
+ @close="closeModal"
+ >
+ <el-form
+ ref="formRef"
+ label-width="120px"
+ :model="formState"
+ label-position="top"
+ >
+ <el-form-item
+ label="鍙傛暟椤�"
+ prop="parameterItem"
+ :rules="[{ required: true, message: '璇疯緭鍏ュ弬鏁伴」' }]"
+ >
+ <el-input v-model="formState.parameterItem" placeholder="璇疯緭鍏ュ弬鏁伴」" />
+ </el-form-item>
+ <el-form-item
+ label="鍙傛暟绫诲瀷"
+ prop="type"
+ :rules="[{ required: true, message: '璇烽�夋嫨鍙傛暟绫诲瀷' }]"
+ >
+ <el-select v-model="formState.type" placeholder="璇烽�夋嫨鍙傛暟绫诲瀷" style="width: 100%;">
+ <el-option
+ v-for="dict in parameter_tyep"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item
+ label="鍗曚綅"
+ prop="unit"
+ :rules="[{ required: true, message: '璇疯緭鍏ュ崟浣�' }]"
+ >
+ <el-input v-model="formState.unit" placeholder="璇疯緭鍏ュ崟浣�" />
+ </el-form-item>
+ <el-form-item label="鍙傛暟鏍煎紡" prop="parameterFormat">
+ <el-input v-model="formState.parameterFormat" placeholder="璇疯緭鍏ュ弬鏁版牸寮忥紙閫夊~锛�" />
+ </el-form-item>
+ <el-form-item
+ label="鏄惁蹇呭~"
+ prop="isRequired"
+ :rules="[{ required: true, message: '璇烽�夋嫨鏄惁蹇呭~' }]"
+ >
+ <el-select v-model="formState.isRequired" placeholder="璇烽�夋嫨" style="width: 100%;">
+ <el-option label="鏄�" value="1" />
+ <el-option label="鍚�" value="0" />
+ </el-select>
+ </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/productionRecords.js";
+
+const props = defineProps({
+ visible: {
+ type: Boolean,
+ required: true,
+ },
+});
+
+const emit = defineEmits(["update:visible", "completed"]);
+
+const formRef = ref(null);
+const formState = ref({
+ parameterItem: "",
+ type: "",
+ unit: "",
+ parameterFormat: "",
+ isRequired: undefined,
+});
+
+const isShow = computed({
+ get() {
+ return props.visible;
+ },
+ set(val) {
+ emit("update:visible", val);
+ },
+});
+
+const { proxy } = getCurrentInstance();
+const { parameter_tyep } = proxy.useDict("parameter_tyep");
+
+const closeModal = () => {
+ isShow.value = false;
+};
+
+const handleSubmit = () => {
+ formRef.value.validate((valid) => {
+ if (valid) {
+ add(formState.value).then(() => {
+ isShow.value = false;
+ emit("completed");
+ proxy.$modal.msgSuccess("鏂板鎴愬姛");
+ });
+ }
+ });
+};
+
+defineExpose({
+ closeModal,
+ handleSubmit,
+ isShow,
+});
+</script>
diff --git a/src/views/productionManagement/productionRecords/index.vue b/src/views/productionManagement/productionRecords/index.vue
new file mode 100644
index 0000000..7422fa3
--- /dev/null
+++ b/src/views/productionManagement/productionRecords/index.vue
@@ -0,0 +1,189 @@
+<!-- 鐢熶骇璁板綍 -->
+<template>
+ <div class="app-container">
+ <div class="search_form">
+ <el-form :model="searchForm" :inline="true">
+ <el-form-item label="鍙傛暟缂栫爜:">
+ <el-input
+ v-model="searchForm.code"
+ placeholder="璇疯緭鍏�"
+ clearable
+ style="width: 200px;"
+ @change="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="鍙傛暟椤�:">
+ <el-input
+ v-model="searchForm.parameterItem"
+ placeholder="璇疯緭鍏�"
+ clearable
+ style="width: 200px;"
+ @change="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="鍙傛暟绫诲瀷:">
+ <el-select
+ v-model="searchForm.type"
+ placeholder="璇烽�夋嫨"
+ clearable
+ style="width: 200px;"
+ @change="handleQuery"
+ >
+ <el-option
+ v-for="dict in parameter_tyep"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </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>
+ </div>
+ <PIMTable
+ rowKey="id"
+ :column="tableColumn"
+ :tableData="tableData"
+ :page="page"
+ :tableLoading="tableLoading"
+ @pagination="pagination"
+ :total="page.total"
+ />
+ </div>
+ <NewRecord v-if="isShowNewModal" v-model:visible="isShowNewModal" @completed="getList" />
+ <EditRecord
+ v-if="isShowEditModal"
+ v-model:visible="isShowEditModal"
+ :record="record"
+ @completed="getList"
+ />
+ </div>
+</template>
+
+<script setup>
+import { onMounted, ref, reactive, toRefs, getCurrentInstance } from "vue";
+import NewRecord from "./New.vue";
+import EditRecord from "./Edit.vue";
+import { listPage, del } from "@/api/productionManagement/productionRecords.js";
+
+const data = reactive({
+ searchForm: {
+ code: "",
+ parameterItem: "",
+ type: "",
+ },
+});
+const { searchForm } = toRefs(data);
+const { proxy } = getCurrentInstance();
+const { parameter_tyep } = proxy.useDict("parameter_tyep");
+
+const tableColumn = ref([
+ { label: "鍙傛暟缂栫爜", prop: "code" },
+ { label: "鍙傛暟椤�", prop: "parameterItem" },
+ {
+ label: "鍙傛暟绫诲瀷",
+ prop: "type",
+ formatData: (params) =>
+ (parameter_tyep?.value ?? parameter_tyep ?? []).find((d) => String(d.value) === String(params))?.label ?? params,
+ },
+ { label: "鍗曚綅", prop: "unit" },
+ { label: "鍙傛暟鏍煎紡", prop: "parameterFormat" },
+ {
+ label: "鏄惁蹇呭~",
+ prop: "isRequired",
+ formatData: (params) => (params === '1' ? "鏄�" : "鍚�"),
+ },
+// { label: "鍒涘缓浜�", prop: "createUser" },
+ { label: "鍒涘缓鏃ユ湡", prop: "createTime" },
+// { label: "鏇存柊浜�", prop: "updateUser" },
+ { label: "鏇存柊鏃ユ湡", prop: "updateTime" },
+ {
+ dataType: "action",
+ label: "鎿嶄綔",
+ align: "center",
+ fixed: "right",
+ width: 160,
+ operation: [
+ {
+ name: "缂栬緫",
+ type: "text",
+ clickFun: (row) => showEditModal(row),
+ },
+ {
+ name: "鍒犻櫎",
+ type: "text",
+ clickFun: (row) => handleDeleteRow(row),
+ },
+ ],
+ },
+]);
+
+const tableData = 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 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 };
+ listPage(params)
+ .then((res) => {
+ tableLoading.value = false;
+ const data = res.data;
+ tableData.value = data?.records ?? (Array.isArray(data) ? data : []);
+ page.total = data?.total ?? 0;
+ })
+ .catch(() => {
+ tableLoading.value = false;
+ });
+};
+
+const showNewModal = () => {
+ isShowNewModal.value = true;
+};
+
+const showEditModal = (row) => {
+ record.value = { ...row };
+ isShowEditModal.value = true;
+};
+
+const handleDeleteRow = (row) => {
+ proxy.$modal
+ .confirm(`鏄惁纭鍒犻櫎鍙傛暟缂栫爜涓�"${row.code}"鐨勬暟鎹紵`)
+ .then(() => del([row.id]))
+ .then(() => {
+ getList();
+ proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ })
+ .catch(() => {});
+};
+
+onMounted(() => {
+ getList();
+});
+</script>
+
+<style scoped></style>
--
Gitblit v1.9.3