From 4be9b07e00bea78ae394aec67062b4db9895b565 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期六, 14 三月 2026 15:46:21 +0800
Subject: [PATCH] BOM产品选择弹窗改接口
---
src/views/productionManagement/productionProcess/index.vue | 548 +++++------
src/views/inventoryManagement/stockManagement/New.vue | 289 +++---
src/views/productionManagement/processRoute/index.vue | 8
src/views/basicData/product/ProductSelectDialog.vue | 322 ++++---
src/views/productionManagement/productionOrder/New.vue | 279 +++---
src/views/basicData/parameterMaintenance/index.vue | 118 +-
src/views/inventoryManagement/stockManagement/Subtract.vue | 310 +++---
src/views/productionManagement/productStructure/index.vue | 824 +++++++++--------
8 files changed, 1,365 insertions(+), 1,333 deletions(-)
diff --git a/src/views/basicData/parameterMaintenance/index.vue b/src/views/basicData/parameterMaintenance/index.vue
index 367f587..67ed7ef 100644
--- a/src/views/basicData/parameterMaintenance/index.vue
+++ b/src/views/basicData/parameterMaintenance/index.vue
@@ -54,6 +54,7 @@
<el-form-item label="鍙傛暟绫诲瀷"
prop="paramType">
<el-select v-model="formData.paramType"
+ @change="handleParamTypeChange"
placeholder="璇烽�夋嫨鍙傛暟绫诲瀷">
<el-option label="鏁板�兼牸寮�"
value="1" />
@@ -68,7 +69,6 @@
<el-form-item label="鍙栧�兼ā寮�"
prop="valueMode">
<el-select v-model="formData.valueMode"
- @change="handleValueModeChange"
placeholder="璇烽�夋嫨鍙栧�兼ā寮�">
<el-option label="鍗曞��"
value="1" />
@@ -81,23 +81,33 @@
<el-input v-model="formData.unit"
placeholder="璇疯緭鍏ュ崟浣�" />
</el-form-item>
- <el-form-item label="榛樿鍊�"
- v-if="formData.valueMode === '1'"
- prop="defaultValue">
- <el-input v-model="formData.defaultValue"
- placeholder="璇疯緭鍏ラ粯璁ゅ��" />
+ <el-form-item label="鍙栧�兼牸寮�"
+ v-if="formData.paramType == '1' || formData.paramType == '2'"
+ prop="paramFormat">
+ <el-input v-model="formData.paramFormat"
+ placeholder="璇疯緭鍏ュ彇鍊兼牸寮�" />
</el-form-item>
- <el-form-item label="鏈�灏忓��"
- v-if="formData.valueMode === '2'"
- prop="defaultMin">
- <el-input v-model="formData.defaultMin"
- placeholder="璇疯緭鍏ユ渶灏忓��" />
+ <el-form-item label="涓嬫媺瀛楀吀"
+ v-else-if="formData.paramType == '3'"
+ prop="paramFormat">
+ <el-select v-model="formData.paramFormat"
+ placeholder="璇烽�夋嫨鍙栧�兼ā寮�">
+ <el-option v-for="item in dictTypes"
+ :key="item.dictType"
+ :label="item.dictName"
+ :value="item.dictType" />
+ </el-select>
</el-form-item>
- <el-form-item label="鏈�澶у��"
- v-if="formData.valueMode === '2'"
- prop="defaultMax">
- <el-input v-model="formData.defaultMax"
- placeholder="璇疯緭鍏ユ渶澶у��" />
+ <el-form-item label="鏃堕棿鏍煎紡"
+ v-else-if="formData.paramType == '4'"
+ prop="paramFormat">
+ <el-select v-model="formData.paramFormat"
+ placeholder="璇烽�夋嫨鍙栧�兼ā寮�">
+ <el-option label="YYYY-MM-DD"
+ value="YYYY-MM-DD" />
+ <el-option label="YYYY-MM-DD HH:mm:ss"
+ value="YYYY-MM-DD HH:mm:ss" />
+ </el-select>
</el-form-item>
<el-form-item label="鏄惁蹇呭~"
prop="isRequired">
@@ -242,24 +252,14 @@
prop: "unit",
},
{
- label: "榛樿鍊�",
- prop: "defaultValue",
+ label: "鍙栧�兼牸寮�",
+ prop: "paramFormat",
formatData: (val, row) => {
- return row.valueMode === 2 ? "-" : val;
- },
- },
- {
- label: "鏈�灏忓��",
- prop: "defaultMin",
- formatData: (val, row) => {
- return row.valueMode === 1 ? "-" : val;
- },
- },
- {
- label: "鏈�澶у��",
- prop: "defaultMax",
- formatData: (val, row) => {
- return row.valueMode === 1 ? "-" : val;
+ if (row.paramType == "3") {
+ const dict = dictTypes.value.find(item => item.dictType === val);
+ return dict ? "瀛楀吀:" + dict.dictName : val;
+ }
+ return val;
},
},
{
@@ -308,15 +308,6 @@
size: 10,
total: 0,
});
- const handleValueModeChange = val => {
- if (val === "2") {
- formData.defaultMin = "";
- formData.defaultMax = "";
- } else {
- formData.defaultValue = "";
- }
- };
-
// 鎼滅储琛ㄥ崟
const searchForm = reactive({
paramName: "",
@@ -333,9 +324,6 @@
paramType: "",
valueMode: "1",
unit: "",
- defaultValue: "",
- defaultMin: "",
- defaultMax: "",
isRequired: "0",
remark: "",
});
@@ -343,7 +331,20 @@
paramName: [{ required: true, message: "璇疯緭鍏ュ弬鏁板悕绉�", trigger: "blur" }],
paramType: [{ required: true, message: "璇烽�夋嫨鍙傛暟绫诲瀷", trigger: "change" }],
valueMode: [{ required: true, message: "璇烽�夋嫨鍙栧�兼ā寮�", trigger: "change" }],
- unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }],
+ unit: [
+ {
+ required: false,
+ message: "璇疯緭鍏ュ崟浣�",
+ trigger: "blur",
+ validator: (rule, value, callback) => {
+ if (formData.paramType === "1" && !value) {
+ callback(new Error("鏁板�肩被鍨嬪繀椤诲~鍐欏崟浣�"));
+ } else {
+ callback();
+ }
+ },
+ },
+ ],
});
// const productTypes = ref([]);
const isEdit = ref(false);
@@ -364,13 +365,17 @@
// typeName: [{ required: true, message: "璇疯緭鍏ョ被鍨嬪悕绉�", trigger: "blur" }],
// });
// const isProductTypeEdit = ref(false);
- const handleParameterTypeChange = () => {
- if (formData.parameterType === "鏁板�兼牸寮�") {
- formData.parameterFormat = "#.0000";
- } else if (formData.parameterType === "鏃堕棿鏍煎紡") {
- formData.parameterFormat = "YYYY-MM-DD HH:mm:ss";
+ const handleParamTypeChange = () => {
+ if (formData.paramType === "1") {
+ formData.paramFormat = "#.0000";
+ } else if (formData.paramType === "4") {
+ formData.paramFormat = "YYYY-MM-DD HH:mm:ss";
} else {
- formData.parameterFormat = "";
+ formData.paramFormat = "";
+ }
+ // 瑙﹀彂鍗曚綅瀛楁楠岃瘉
+ if (formRef.value) {
+ formRef.value.validateField("unit");
}
};
// 浜у搧绫诲瀷缁存姢鎸夐挳鐐瑰嚮浜嬩欢 - 宸叉敞閲�
@@ -491,9 +496,6 @@
formData.paramType = "";
formData.valueMode = "1";
formData.unit = "";
- formData.defaultValue = "";
- formData.defaultMin = "";
- formData.defaultMax = "";
formData.isRequired = "0";
formData.remark = "";
dialogVisible.value = true;
@@ -510,12 +512,6 @@
formData.valueMode =
row.valueMode !== undefined ? String(row.valueMode) : "1";
formData.unit = row.unit || "";
- formData.defaultValue =
- row.defaultValue !== undefined ? String(row.defaultValue) : "";
- formData.defaultMin =
- row.defaultMin !== undefined ? String(row.defaultMin) : "";
- formData.defaultMax =
- row.defaultMax !== undefined ? String(row.defaultMax) : "";
formData.isRequired =
row.isRequired !== undefined ? String(row.isRequired) : "0";
formData.remark = row.remark || "";
diff --git a/src/views/basicData/product/ProductSelectDialog.vue b/src/views/basicData/product/ProductSelectDialog.vue
index 70dbb16..3c826a5 100644
--- a/src/views/basicData/product/ProductSelectDialog.vue
+++ b/src/views/basicData/product/ProductSelectDialog.vue
@@ -1,39 +1,72 @@
<template>
- <el-dialog v-model="visible" title="閫夋嫨浜у搧" width="900px" destroy-on-close :close-on-click-modal="false">
- <el-form :inline="true" :model="query" class="mb-2">
- <el-form-item label="浜у搧澶х被">
- <el-input v-model="query.productName" placeholder="杈撳叆浜у搧澶х被" clearable @keyup.enter="onSearch" />
+ <el-dialog v-model="visible"
+ title="閫夋嫨浜у搧"
+ width="900px"
+ destroy-on-close
+ :close-on-click-modal="false">
+ <el-form :inline="true"
+ :model="query"
+ class="mb-2">
+ <el-form-item label="瑙勬牸">
+ <el-input v-model="query.specification"
+ placeholder="杈撳叆瑙勬牸"
+ clearable
+ @keyup.enter="onSearch" />
</el-form-item>
-
- <el-form-item label="鍨嬪彿鍚嶇О">
- <el-input v-model="query.model" placeholder="杈撳叆鍨嬪彿鍚嶇О" clearable @keyup.enter="onSearch" />
+ <el-form-item label="鐗╂枡缂栫爜">
+ <el-input v-model="query.materialCode"
+ placeholder="杈撳叆鐗╂枡缂栫爜"
+ clearable
+ @keyup.enter="onSearch" />
</el-form-item>
-
<el-form-item>
- <el-button type="primary" @click="onSearch">鎼滅储</el-button>
+ <el-button type="primary"
+ @click="onSearch">鎼滅储</el-button>
<el-button @click="onReset">閲嶇疆</el-button>
</el-form-item>
</el-form>
-
<!-- 鍒楄〃 -->
- <el-table ref="tableRef" v-loading="loading" :data="tableData" height="420" highlight-current-row row-key="id"
- @selection-change="handleSelectionChange" @select="handleSelect">
- <el-table-column type="selection" width="55" />
- <el-table-column type="index" label="搴忓彿" width="60" />
- <el-table-column prop="productName" label="浜у搧澶х被" min-width="160" />
- <el-table-column prop="model" label="鍨嬪彿鍚嶇О" min-width="200" />
- <el-table-column prop="unit" label="鍗曚綅" min-width="160" />
+ <el-table ref="tableRef"
+ v-loading="loading"
+ :data="tableData"
+ height="420"
+ highlight-current-row
+ row-key="skuId"
+ @selection-change="handleSelectionChange"
+ @select="handleSelect">
+ <el-table-column type="selection"
+ width="55" />
+ <el-table-column type="index"
+ label="搴忓彿"
+ width="60" />
+ <el-table-column prop="materialName"
+ label="浜у搧鍚嶇О"
+ min-width="160" />
+ <el-table-column prop="materialCode"
+ label="鐗╂枡缂栫爜"
+ min-width="200" />
+ <el-table-column prop="specification"
+ label="瑙勬牸"
+ min-width="200" />
+ <el-table-column prop="baseUnit"
+ label="鍗曚綅"
+ min-width="160" />
</el-table>
-
<div class="mt-3 flex justify-end">
- <el-pagination background layout="total, sizes, prev, pager, next, jumper" :total="total"
- v-model:page-size="page.pageSize" v-model:current-page="page.pageNum" :page-sizes="[10, 20, 50, 100]"
- @size-change="onPageChange" @current-change="onPageChange" />
+ <el-pagination background
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total"
+ v-model:page-size="page.pageSize"
+ v-model:current-page="page.pageNum"
+ :page-sizes="[10, 20, 50, 100]"
+ @size-change="onPageChange"
+ @current-change="onPageChange" />
</div>
-
<template #footer>
<el-button @click="close()">鍙栨秷</el-button>
- <el-button type="primary" :disabled="multipleSelection.length === 0" @click="onConfirm">
+ <el-button type="primary"
+ :disabled="multipleSelection.length === 0"
+ @click="onConfirm">
纭畾
</el-button>
</template>
@@ -41,140 +74,147 @@
</template>
<script setup lang="ts">
-import { computed, onMounted, reactive, ref, watch, nextTick } from "vue";
-import { ElMessage } from "element-plus";
-import { productModelList } from '@/api/basicData/productModel'
+ import { computed, onMounted, reactive, ref, watch, nextTick } from "vue";
+ import { ElMessage } from "element-plus";
+ import { modelListPage } from "@/api/basicData/newProduct";
-export type ProductRow = {
- id: number;
- productName: string;
- model: string;
- unit?: string;
-};
+ export type ProductRow = {
+ skuId: number;
+ specification: string;
+ materialCode: string;
+ baseUnit?: string;
+ materialName?: string;
+ };
-const props = defineProps<{
- modelValue: boolean;
- single?: boolean; // 鏄惁鍙兘閫夋嫨涓�涓紝榛樿false锛堝彲閫夋嫨澶氫釜锛�
-}>();
+ const props = defineProps<{
+ modelValue: boolean;
+ single?: boolean; // 鏄惁鍙兘閫夋嫨涓�涓紝榛樿false锛堝彲閫夋嫨澶氫釜锛�
+ }>();
-const emit = defineEmits(['update:modelValue', 'confirm']);
+ const emit = defineEmits(["update:modelValue", "confirm"]);
-const visible = computed({
- get: () => props.modelValue,
- set: (v) => emit("update:modelValue", v),
-});
+ const visible = computed({
+ get: () => props.modelValue,
+ set: v => emit("update:modelValue", v),
+ });
-const query = reactive({
- productName: "",
- model: "",
-});
+ const query = reactive({
+ specification: "",
+ materialCode: "",
+ });
-const page = reactive({
- pageNum: 1,
- pageSize: 10,
-});
+ const page = reactive({
+ pageNum: 1,
+ pageSize: 10,
+ });
-const loading = ref(false);
-const tableData = ref<ProductRow[]>([]);
-const total = ref(0);
-const multipleSelection = ref<ProductRow[]>([]);
-const tableRef = ref();
+ const loading = ref(false);
+ const tableData = ref<ProductRow[]>([]);
+ const total = ref(0);
+ const multipleSelection = ref<ProductRow[]>([]);
+ const tableRef = ref();
-function close() {
- visible.value = false;
-}
-
-const handleSelectionChange = (val: ProductRow[]) => {
- if (props.single && val.length > 1) {
- // 濡傛灉闄愬埗涓哄崟涓�夋嫨锛屽彧淇濈暀鏈�鍚庝竴涓�変腑鐨�
- const lastSelected = val[val.length - 1];
- multipleSelection.value = [lastSelected];
- // 娓呯┖琛ㄦ牸閫変腑鐘舵�侊紝鐒跺悗閲嶆柊閫変腑鏈�鍚庝竴涓�
- nextTick(() => {
- if (tableRef.value) {
- tableRef.value.clearSelection();
- tableRef.value.toggleRowSelection(lastSelected, true);
- }
- });
- } else {
- multipleSelection.value = val;
+ function close() {
+ visible.value = false;
}
-}
-// 澶勭悊鍗曚釜閫夋嫨
-const handleSelect = (selection: ProductRow[], row: ProductRow) => {
- if (props.single) {
- // 濡傛灉闄愬埗涓哄崟涓紝娓呯┖鍏朵粬閫夋嫨锛屽彧淇濈暀褰撳墠琛�
- if (selection.includes(row)) {
- // 閫変腑褰撳墠琛屾椂锛屾竻绌哄叾浠栭�変腑
- multipleSelection.value = [row];
+ const handleSelectionChange = (val: ProductRow[]) => {
+ if (props.single && val.length > 1) {
+ // 濡傛灉闄愬埗涓哄崟涓�夋嫨锛屽彧淇濈暀鏈�鍚庝竴涓�変腑鐨�
+ const lastSelected = val[val.length - 1];
+ multipleSelection.value = [lastSelected];
+ // 娓呯┖琛ㄦ牸閫変腑鐘舵�侊紝鐒跺悗閲嶆柊閫変腑鏈�鍚庝竴涓�
nextTick(() => {
if (tableRef.value) {
- tableData.value.forEach((item) => {
- if (item.id !== row.id) {
- tableRef.value.toggleRowSelection(item, false);
- }
- });
+ tableRef.value.clearSelection();
+ tableRef.value.toggleRowSelection(lastSelected, true);
}
});
+ } else {
+ multipleSelection.value = val;
+ }
+ };
+
+ // 澶勭悊鍗曚釜閫夋嫨
+ const handleSelect = (selection: ProductRow[], row: ProductRow) => {
+ if (props.single) {
+ // 濡傛灉闄愬埗涓哄崟涓紝娓呯┖鍏朵粬閫夋嫨锛屽彧淇濈暀褰撳墠琛�
+ if (selection.includes(row)) {
+ // 閫変腑褰撳墠琛屾椂锛屾竻绌哄叾浠栭�変腑
+ multipleSelection.value = [row];
+ nextTick(() => {
+ if (tableRef.value) {
+ tableData.value.forEach(item => {
+ if (item.skuId !== row.skuId) {
+ tableRef.value.toggleRowSelection(item, false);
+ }
+ });
+ }
+ });
+ }
+ }
+ };
+
+ function onSearch() {
+ page.pageNum = 1;
+ loadData();
+ }
+
+ function onReset() {
+ query.specification = "";
+ query.materialCode = "";
+ page.pageNum = 1;
+ loadData();
+ }
+
+ function onPageChange() {
+ loadData();
+ }
+
+ function onConfirm() {
+ if (multipleSelection.value.length === 0) {
+ ElMessage.warning("璇烽�夋嫨涓�鏉′骇鍝�");
+ return;
+ }
+ if (props.single && multipleSelection.value.length > 1) {
+ ElMessage.warning("鍙兘閫夋嫨涓�涓骇鍝�");
+ return;
+ }
+ emit(
+ "confirm",
+ props.single ? [multipleSelection.value[0]] : multipleSelection.value
+ );
+ close();
+ }
+
+ async function loadData() {
+ loading.value = true;
+ try {
+ multipleSelection.value = []; // 缈婚〉/鎼滅储鍚庢竻绌洪�夋嫨鏇寸鍚堥鏈�
+ const res: any = await modelListPage({
+ specification: query.specification.trim(),
+ materialCode: query.materialCode.trim(),
+ current: page.pageNum,
+ size: page.pageSize,
+ });
+ tableData.value = res.data.records;
+ total.value = res.data.total;
+ } finally {
+ loading.value = false;
}
}
-}
-function onSearch() {
- page.pageNum = 1;
- loadData();
-}
+ // 鐩戝惉寮圭獥鎵撳紑锛岄噸缃�夋嫨
+ watch(
+ () => props.modelValue,
+ visible => {
+ if (visible) {
+ multipleSelection.value = [];
+ }
+ }
+ );
-function onReset() {
- query.productName = "";
- query.model = "";
- page.pageNum = 1;
- loadData();
-}
-
-function onPageChange() {
- loadData();
-}
-
-function onConfirm() {
- if (multipleSelection.value.length === 0) {
- ElMessage.warning("璇烽�夋嫨涓�鏉′骇鍝�");
- return;
- }
- if (props.single && multipleSelection.value.length > 1) {
- ElMessage.warning("鍙兘閫夋嫨涓�涓骇鍝�");
- return;
- }
- emit("confirm", props.single ? [multipleSelection.value[0]] : multipleSelection.value);
- close();
-}
-
-async function loadData() {
- loading.value = true;
- try {
- multipleSelection.value = []; // 缈婚〉/鎼滅储鍚庢竻绌洪�夋嫨鏇寸鍚堥鏈�
- const res: any = await productModelList({
- productName: query.productName.trim(),
- model: query.model.trim(),
- current: page.pageNum,
- size: page.pageSize,
- });
- tableData.value = res.records;
- total.value = res.total;
- } finally {
- loading.value = false;
- }
-}
-
-// 鐩戝惉寮圭獥鎵撳紑锛岄噸缃�夋嫨
-watch(() => props.modelValue, (visible) => {
- if (visible) {
- multipleSelection.value = [];
- }
-});
-
-onMounted(() => {
- loadData()
-})
+ onMounted(() => {
+ loadData();
+ });
</script>
diff --git a/src/views/inventoryManagement/stockManagement/New.vue b/src/views/inventoryManagement/stockManagement/New.vue
index 1f86fd6..2e79ace 100644
--- a/src/views/inventoryManagement/stockManagement/New.vue
+++ b/src/views/inventoryManagement/stockManagement/New.vue
@@ -1,71 +1,67 @@
<template>
<div>
- <el-dialog
- v-model="isShow"
- title="鏂板搴撳瓨"
- width="800"
- @close="closeModal"
- >
- <el-form label-width="140px" :model="formState" label-position="top" ref="formRef">
- <el-form-item
- label="浜у搧鍚嶇О"
- prop="productModelId"
- :rules="[
+ <el-dialog v-model="isShow"
+ title="鏂板搴撳瓨"
+ width="800"
+ @close="closeModal">
+ <el-form label-width="140px"
+ :model="formState"
+ label-position="top"
+ ref="formRef">
+ <el-form-item label="浜у搧鍚嶇О"
+ prop="productModelId"
+ :rules="[
{
required: true,
message: '璇烽�夋嫨浜у搧',
trigger: 'change',
}
- ]"
- >
- <el-button type="primary" @click="showProductSelectDialog = true">
+ ]">
+ <el-button type="primary"
+ @click="showProductSelectDialog = true">
{{ formState.productName ? formState.productName : '閫夋嫨浜у搧' }}
</el-button>
</el-form-item>
-
- <el-form-item
- label="瑙勬牸"
- prop="productModelName"
- >
- <el-input v-model="formState.productModelName" disabled />
+ <el-form-item label="瑙勬牸"
+ prop="productModelName">
+ <el-input v-model="formState.productModelName"
+ disabled />
</el-form-item>
-
- <el-form-item
- label="鍗曚綅"
- prop="unit"
- >
- <el-input v-model="formState.unit" disabled />
+ <el-form-item label="鍗曚綅"
+ prop="unit">
+ <el-input v-model="formState.unit"
+ disabled />
</el-form-item>
-
- <el-form-item
- label="搴撳瓨鏁伴噺"
- prop="qualitity"
- >
- <el-input-number v-model="formState.qualitity" :step="1" :min="1" style="width: 100%" />
+ <el-form-item label="搴撳瓨鏁伴噺"
+ prop="qualitity">
+ <el-input-number v-model="formState.qualitity"
+ :step="1"
+ :min="1"
+ style="width: 100%" />
</el-form-item>
-
- <el-form-item
- v-if="type === 'qualified'"
- label="搴撳瓨棰勮鏁伴噺"
- prop="warnNum"
- >
- <el-input-number v-model="formState.warnNum" :step="1" :min="0" :max="formState.qualitity" style="width: 100%" />
+ <el-form-item v-if="type === 'qualified'"
+ label="搴撳瓨棰勮鏁伴噺"
+ prop="warnNum">
+ <el-input-number v-model="formState.warnNum"
+ :step="1"
+ :min="0"
+ :max="formState.qualitity"
+ style="width: 100%" />
</el-form-item>
-
- <el-form-item label="澶囨敞" prop="remark">
- <el-input v-model="formState.remark" type="textarea" />
+ <el-form-item label="澶囨敞"
+ prop="remark">
+ <el-input v-model="formState.remark"
+ type="textarea" />
</el-form-item>
</el-form>
-
<!-- 浜у搧閫夋嫨寮圭獥 -->
- <ProductSelectDialog
- v-model="showProductSelectDialog"
- @confirm="handleProductSelect"
- single
- />
+ <ProductSelectDialog v-model="showProductSelectDialog"
+ @confirm="handleProductSelect"
+ single />
<template #footer>
<div class="dialog-footer">
- <el-button type="primary" @click="handleSubmit">纭</el-button>
+ <el-button type="primary"
+ @click="handleSubmit">纭</el-button>
<el-button @click="closeModal">鍙栨秷</el-button>
</div>
</template>
@@ -74,116 +70,115 @@
</template>
<script setup>
-import {ref, computed, getCurrentInstance} from "vue";
-import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
-import {createStockInventory} from "@/api/inventoryManagement/stockInventory.js";
-import {createStockUnInventory} from "@/api/inventoryManagement/stockUninventory.js";
+ import { ref, computed, getCurrentInstance } from "vue";
+ import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
+ import { createStockInventory } from "@/api/inventoryManagement/stockInventory.js";
+ import { createStockUnInventory } from "@/api/inventoryManagement/stockUninventory.js";
-const props = defineProps({
- visible: {
- type: Boolean,
- required: true,
- },
+ const props = defineProps({
+ visible: {
+ type: Boolean,
+ required: true,
+ },
- type: {
- type: String,
- required: true,
- default: 'qualified',
- },
-});
+ type: {
+ type: String,
+ required: true,
+ default: "qualified",
+ },
+ });
-const emit = defineEmits(['update:visible', 'completed']);
+ const emit = defineEmits(["update:visible", "completed"]);
-// 鍝嶅簲寮忔暟鎹紙鏇夸唬閫夐」寮忕殑 data锛�
-const formState = ref({
- productId: undefined,
- productModelId: undefined,
- productName: "",
- productModelName: "",
- unit: "",
- qualitity: 0,
- warnNum: 0,
- remark: '',
-});
-
-const isShow = computed({
- get() {
- return props.visible;
- },
- set(val) {
- emit('update:visible', val);
- },
-});
-
-const showProductSelectDialog = ref(false);
-
-let { proxy } = getCurrentInstance()
-
-const closeModal = () => {
- // 閲嶇疆琛ㄥ崟鏁版嵁
- formState.value = {
+ // 鍝嶅簲寮忔暟鎹紙鏇夸唬閫夐」寮忕殑 data锛�
+ const formState = ref({
productId: undefined,
productModelId: undefined,
productName: "",
productModelName: "",
- description: '',
+ unit: "",
+ qualitity: 0,
+ warnNum: 0,
+ remark: "",
+ });
+
+ const isShow = computed({
+ get() {
+ return props.visible;
+ },
+ set(val) {
+ emit("update:visible", val);
+ },
+ });
+
+ const showProductSelectDialog = ref(false);
+
+ let { proxy } = getCurrentInstance();
+
+ const closeModal = () => {
+ // 閲嶇疆琛ㄥ崟鏁版嵁
+ formState.value = {
+ productId: undefined,
+ productModelId: undefined,
+ productName: "",
+ productModelName: "",
+ description: "",
+ };
+ isShow.value = false;
};
- isShow.value = false;
-};
-// 浜у搧閫夋嫨澶勭悊
-const handleProductSelect = async (products) => {
- if (products && products.length > 0) {
- const product = products[0];
- formState.value.productId = product.productId;
- formState.value.productName = product.productName;
- formState.value.productModelName = product.model;
- formState.value.productModelId = product.id;
- formState.value.unit = product.unit;
- showProductSelectDialog.value = false;
- // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
- proxy.$refs["formRef"]?.validateField('productModelId');
- }
-};
+ // 浜у搧閫夋嫨澶勭悊
+ const handleProductSelect = async products => {
+ if (products && products.length > 0) {
+ const product = products[0];
+ formState.value.productId = product.skuId;
+ formState.value.productName = product.materialName;
+ formState.value.productModelName = product.specification;
-const handleSubmit = () => {
- proxy.$refs["formRef"].validate(valid => {
- if (valid) {
- // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佸拰瑙勬牸
- if (!formState.value.productModelId) {
- proxy.$modal.msgError("璇烽�夋嫨浜у搧");
- return;
- }
- if (!formState.value.productModelId) {
- proxy.$modal.msgError("璇烽�夋嫨瑙勬牸");
- return;
- }
- if (props.type === 'qualified') {
- createStockInventory(formState.value).then(res => {
- // 鍏抽棴妯℃�佹
- isShow.value = false;
- // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
- emit('completed');
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- })
- } else {
- createStockUnInventory(formState.value).then(res => {
- // 鍏抽棴妯℃�佹
- isShow.value = false;
- // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
- emit('completed');
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- })
- }
-
+ formState.value.productModelId = product.skuId;
+ formState.value.unit = product.baseUnit;
+ showProductSelectDialog.value = false;
+ // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
+ proxy.$refs["formRef"]?.validateField("productModelId");
}
- })
-};
+ };
+ const handleSubmit = () => {
+ proxy.$refs["formRef"].validate(valid => {
+ if (valid) {
+ // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佸拰瑙勬牸
+ if (!formState.value.productModelId) {
+ proxy.$modal.msgError("璇烽�夋嫨浜у搧");
+ return;
+ }
+ if (!formState.value.productModelId) {
+ proxy.$modal.msgError("璇烽�夋嫨瑙勬牸");
+ return;
+ }
+ if (props.type === "qualified") {
+ createStockInventory(formState.value).then(res => {
+ // 鍏抽棴妯℃�佹
+ isShow.value = false;
+ // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
+ emit("completed");
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ });
+ } else {
+ createStockUnInventory(formState.value).then(res => {
+ // 鍏抽棴妯℃�佹
+ isShow.value = false;
+ // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
+ emit("completed");
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ });
+ }
+ }
+ });
+ };
-defineExpose({
- closeModal,
- handleSubmit,
- isShow,
-});
+ defineExpose({
+ closeModal,
+ handleSubmit,
+ isShow,
+ });
</script>
diff --git a/src/views/inventoryManagement/stockManagement/Subtract.vue b/src/views/inventoryManagement/stockManagement/Subtract.vue
index a277a00..b7f983b 100644
--- a/src/views/inventoryManagement/stockManagement/Subtract.vue
+++ b/src/views/inventoryManagement/stockManagement/Subtract.vue
@@ -1,63 +1,60 @@
<template>
<div>
- <el-dialog
- v-model="isShow"
- title="棰嗙敤"
- width="800"
- @close="closeModal"
- >
- <el-form label-width="140px" :model="formState" label-position="top" ref="formRef">
- <el-form-item
- label="浜у搧鍚嶇О"
- prop="productModelId"
- :rules="[
+ <el-dialog v-model="isShow"
+ title="棰嗙敤"
+ width="800"
+ @close="closeModal">
+ <el-form label-width="140px"
+ :model="formState"
+ label-position="top"
+ ref="formRef">
+ <el-form-item label="浜у搧鍚嶇О"
+ prop="productModelId"
+ :rules="[
{
required: true,
message: '璇烽�夋嫨浜у搧',
trigger: 'change',
}
- ]"
- >
- <el-button type="primary" @click="showProductSelectDialog = true" disabled>
+ ]">
+ <el-button type="primary"
+ @click="showProductSelectDialog = true"
+ disabled>
{{ formState.productName ? formState.productName : '閫夋嫨浜у搧' }}
</el-button>
</el-form-item>
-
- <el-form-item
- label="瑙勬牸"
- prop="productModelName"
- >
- <el-input v-model="formState.model" disabled />
+ <el-form-item label="瑙勬牸"
+ prop="productModelName">
+ <el-input v-model="formState.model"
+ disabled />
</el-form-item>
-
- <el-form-item
- label="鍗曚綅"
- prop="unit"
- >
- <el-input v-model="formState.unit" disabled />
+ <el-form-item label="鍗曚綅"
+ prop="unit">
+ <el-input v-model="formState.unit"
+ disabled />
</el-form-item>
-
- <el-form-item
- label="鏁伴噺"
- prop="qualitity"
- >
- <el-input-number v-model="formState.qualitity" :step="1" :min="1" :max="maxQuality" style="width: 100%" />
+ <el-form-item label="鏁伴噺"
+ prop="qualitity">
+ <el-input-number v-model="formState.qualitity"
+ :step="1"
+ :min="1"
+ :max="maxQuality"
+ style="width: 100%" />
</el-form-item>
-
- <el-form-item label="澶囨敞" prop="remark">
- <el-input v-model="formState.remark" type="textarea" />
+ <el-form-item label="澶囨敞"
+ prop="remark">
+ <el-input v-model="formState.remark"
+ type="textarea" />
</el-form-item>
</el-form>
-
<!-- 浜у搧閫夋嫨寮圭獥 -->
- <ProductSelectDialog
- v-model="showProductSelectDialog"
- @confirm="handleProductSelect"
- single
- />
+ <ProductSelectDialog v-model="showProductSelectDialog"
+ @confirm="handleProductSelect"
+ single />
<template #footer>
<div class="dialog-footer">
- <el-button type="primary" @click="handleSubmit">纭</el-button>
+ <el-button type="primary"
+ @click="handleSubmit">纭</el-button>
<el-button @click="closeModal">鍙栨秷</el-button>
</div>
</template>
@@ -66,134 +63,133 @@
</template>
<script setup>
-import {ref, computed, getCurrentInstance} from "vue";
-import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
-import {subtractStockInventory} from "@/api/inventoryManagement/stockInventory.js";
-import {subtractStockUnInventory} from "@/api/inventoryManagement/stockUninventory.js";
+ import { ref, computed, getCurrentInstance } from "vue";
+ import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
+ import { subtractStockInventory } from "@/api/inventoryManagement/stockInventory.js";
+ import { subtractStockUnInventory } from "@/api/inventoryManagement/stockUninventory.js";
-const props = defineProps({
- visible: {
- type: Boolean,
- required: true,
- },
- record: {
- type: Object,
- default: () => {},
- },
- type: {
- type: String,
- required: true,
- default: 'qualified',
- },
-});
+ const props = defineProps({
+ visible: {
+ type: Boolean,
+ required: true,
+ },
+ record: {
+ type: Object,
+ default: () => {},
+ },
+ type: {
+ type: String,
+ required: true,
+ default: "qualified",
+ },
+ });
-const emit = defineEmits(['update:visible', 'completed']);
+ const emit = defineEmits(["update:visible", "completed"]);
-onMounted(() => {
- initFormData()
-})
+ onMounted(() => {
+ initFormData();
+ });
-const maxQuality = computed(() => {
- return props.record.unLockedQuantity ? props.record.unLockedQuantity : 0;
-})
+ const maxQuality = computed(() => {
+ return props.record.unLockedQuantity ? props.record.unLockedQuantity : 0;
+ });
-const initFormData = () => {
- if (props.record) {
- formState.value = {
- ...props.record,
+ const initFormData = () => {
+ if (props.record) {
+ formState.value = {
+ ...props.record,
+ };
}
- }
-}
+ };
-// 鍝嶅簲寮忔暟鎹紙鏇夸唬閫夐」寮忕殑 data锛�
-const formState = ref({
- productId: undefined,
- productModelId: undefined,
- productName: "",
- model: "",
- unit: "",
- qualitity: 0,
- remark: '',
-});
-
-const isShow = computed({
- get() {
- return props.visible;
- },
- set(val) {
- emit('update:visible', val);
- },
-});
-
-const showProductSelectDialog = ref(false);
-
-let { proxy } = getCurrentInstance()
-
-const closeModal = () => {
- // 閲嶇疆琛ㄥ崟鏁版嵁
- formState.value = {
+ // 鍝嶅簲寮忔暟鎹紙鏇夸唬閫夐」寮忕殑 data锛�
+ const formState = ref({
productId: undefined,
productModelId: undefined,
productName: "",
- productModelName: "",
- description: '',
+ model: "",
+ unit: "",
+ qualitity: 0,
+ remark: "",
+ });
+
+ const isShow = computed({
+ get() {
+ return props.visible;
+ },
+ set(val) {
+ emit("update:visible", val);
+ },
+ });
+
+ const showProductSelectDialog = ref(false);
+
+ let { proxy } = getCurrentInstance();
+
+ const closeModal = () => {
+ // 閲嶇疆琛ㄥ崟鏁版嵁
+ formState.value = {
+ productId: undefined,
+ productModelId: undefined,
+ productName: "",
+ productModelName: "",
+ description: "",
+ };
+ isShow.value = false;
};
- isShow.value = false;
-};
-// 浜у搧閫夋嫨澶勭悊
-const handleProductSelect = async (products) => {
- if (products && products.length > 0) {
- const product = products[0];
- console.log(product)
- formState.value.productId = product.productId;
- formState.value.productName = product.productName;
- formState.value.productModelName = product.model;
- formState.value.productModelId = product.id;
- formState.value.unit = product.unit;
- showProductSelectDialog.value = false;
- // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
- proxy.$refs["formRef"]?.validateField('productModelId');
- }
-};
-
-const handleSubmit = () => {
- proxy.$refs["formRef"].validate(valid => {
- if (valid) {
- // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佸拰瑙勬牸
- if (!formState.value.productModelId) {
- proxy.$modal.msgError("璇烽�夋嫨浜у搧");
- return;
- }
- if (!formState.value.productModelId) {
- proxy.$modal.msgError("璇烽�夋嫨瑙勬牸");
- return;
- }
- if (props.type === 'qualified') {
- subtractStockInventory(formState.value).then(res => {
- // 鍏抽棴妯℃�佹
- isShow.value = false;
- // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
- emit('completed');
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- })
- } else {
- subtractStockUnInventory(formState.value).then(res => {
- // 鍏抽棴妯℃�佹
- isShow.value = false;
- // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
- emit('completed');
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- })
- }
+ // 浜у搧閫夋嫨澶勭悊
+ const handleProductSelect = async products => {
+ if (products && products.length > 0) {
+ const product = products[0];
+ console.log(product);
+ formState.value.productId = product.skuId;
+ formState.value.productName = product.materialName;
+ formState.value.productModelName = product.specification;
+ formState.value.productModelId = product.skuId;
+ formState.value.unit = product.baseUnit;
+ showProductSelectDialog.value = false;
+ // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
+ proxy.$refs["formRef"]?.validateField("productModelId");
}
- })
-};
+ };
+ const handleSubmit = () => {
+ proxy.$refs["formRef"].validate(valid => {
+ if (valid) {
+ // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佸拰瑙勬牸
+ if (!formState.value.productModelId) {
+ proxy.$modal.msgError("璇烽�夋嫨浜у搧");
+ return;
+ }
+ if (!formState.value.productModelId) {
+ proxy.$modal.msgError("璇烽�夋嫨瑙勬牸");
+ return;
+ }
+ if (props.type === "qualified") {
+ subtractStockInventory(formState.value).then(res => {
+ // 鍏抽棴妯℃�佹
+ isShow.value = false;
+ // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
+ emit("completed");
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ });
+ } else {
+ subtractStockUnInventory(formState.value).then(res => {
+ // 鍏抽棴妯℃�佹
+ isShow.value = false;
+ // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
+ emit("completed");
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ });
+ }
+ }
+ });
+ };
-defineExpose({
- closeModal,
- handleSubmit,
- isShow,
-});
+ defineExpose({
+ closeModal,
+ handleSubmit,
+ isShow,
+ });
</script>
diff --git a/src/views/productionManagement/processRoute/index.vue b/src/views/productionManagement/processRoute/index.vue
index afdd542..e971c9b 100644
--- a/src/views/productionManagement/processRoute/index.vue
+++ b/src/views/productionManagement/processRoute/index.vue
@@ -783,7 +783,7 @@
const product = products[0];
// 鍏堟煡璇OM鍒楄〃锛堝繀閫夛級
try {
- const res = await getByModel(product.id);
+ const res = await getByModel(product.skuId);
// 澶勭悊杩斿洖鐨凚OM鏁版嵁锛氬彲鑳芥槸鏁扮粍銆佸璞℃垨鍖呭惈data瀛楁
let bomList = [];
if (Array.isArray(res)) {
@@ -795,9 +795,9 @@
}
if (bomList.length > 0) {
- routeForm.productModelId = product.id;
- routeForm.productName = product.productName;
- routeForm.productModelName = product.model;
+ routeForm.productModelId = product.skuId;
+ routeForm.productName = product.materialName;
+ routeForm.productModelName = product.specification;
routeForm.bomId = undefined; // 閲嶇疆BOM閫夋嫨
bomOptions.value = bomList;
showProductSelectDialog.value = false;
diff --git a/src/views/productionManagement/productStructure/index.vue b/src/views/productionManagement/productStructure/index.vue
index 1ae3f77..835e0f5 100644
--- a/src/views/productionManagement/productStructure/index.vue
+++ b/src/views/productionManagement/productStructure/index.vue
@@ -1,380 +1,483 @@
<template>
<div class="app-container">
<div style="text-align: right; margin-bottom: 10px;">
- <el-button type="info" plain icon="Upload" @click="handleImport"
- v-hasPermi="['product:bom:import']">瀵煎叆</el-button>
- <el-button type="warning" plain icon="Download" @click="handleExport" :disabled="selectedRows.length !== 1"
- v-hasPermi="['product:bom:export']">瀵煎嚭</el-button>
- <el-button type="primary" @click="handleAdd">鏂板</el-button>
- <el-button type="danger" plain @click="handleBatchDelete" :disabled="selectedRows.length === 0">鍒犻櫎</el-button>
+ <el-button type="info"
+ plain
+ icon="Upload"
+ @click="handleImport"
+ v-hasPermi="['product:bom:import']">瀵煎叆</el-button>
+ <el-button type="warning"
+ plain
+ icon="Download"
+ @click="handleExport"
+ :disabled="selectedRows.length !== 1"
+ v-hasPermi="['product:bom:export']">瀵煎嚭</el-button>
+ <el-button type="primary"
+ @click="handleAdd">鏂板</el-button>
+ <el-button type="danger"
+ plain
+ @click="handleBatchDelete"
+ :disabled="selectedRows.length === 0">鍒犻櫎</el-button>
</div>
- <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :isSelection="true"
- @selection-change="handleSelectionChange" :tableLoading="tableLoading" @pagination="pagination">
+ <PIMTable rowKey="id"
+ :column="tableColumn"
+ :tableData="tableData"
+ :page="page"
+ :isSelection="true"
+ @selection-change="handleSelectionChange"
+ :tableLoading="tableLoading"
+ @pagination="pagination">
<template #detail="{ row }">
- <el-button type="primary" text @click="showDetail(row)">{{ row.bomNo }}
+ <el-button type="primary"
+ text
+ @click="showDetail(row)">{{ row.bomNo }}
</el-button>
</template>
</PIMTable>
- <StructureEdit v-if="showEdit" v-model:show-model="showEdit" :record="currentRow" />
-
+ <StructureEdit v-if="showEdit"
+ v-model:show-model="showEdit"
+ :record="currentRow" />
<!-- 鏂板/缂栬緫寮圭獥 -->
- <el-dialog v-model="dialogVisible" :title="operationType === 'add' ? '鏂板BOM' : '缂栬緫BOM'" width="600px"
- @close="closeDialog">
- <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
- <el-form-item label="浜у搧鍚嶇О" prop="productModelId">
- <el-button type="primary" @click="showProductSelectDialog = true">
+ <el-dialog v-model="dialogVisible"
+ :title="operationType === 'add' ? '鏂板BOM' : '缂栬緫BOM'"
+ width="600px"
+ @close="closeDialog">
+ <el-form ref="formRef"
+ :model="form"
+ :rules="rules"
+ label-width="120px">
+ <el-form-item label="浜у搧鍚嶇О"
+ prop="productModelId">
+ <el-button type="primary"
+ @click="showProductSelectDialog = true">
{{ form.productName || '閫夋嫨浜у搧' }}
</el-button>
</el-form-item>
- <el-form-item label="鐗堟湰鍙�" prop="version">
- <el-input v-model="form.version" placeholder="璇疯緭鍏ョ増鏈彿" clearable />
+ <el-form-item label="鐗堟湰鍙�"
+ prop="version">
+ <el-input v-model="form.version"
+ placeholder="璇疯緭鍏ョ増鏈彿"
+ clearable />
</el-form-item>
- <el-form-item label="澶囨敞" prop="remark">
- <el-input v-model="form.remark" type="textarea" :rows="3" placeholder="璇疯緭鍏ュ娉�" clearable />
+ <el-form-item label="澶囨敞"
+ prop="remark">
+ <el-input v-model="form.remark"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ュ娉�"
+ clearable />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="closeDialog">鍙栨秷</el-button>
- <el-button type="primary" @click="handleSubmit">纭畾</el-button>
+ <el-button type="primary"
+ @click="handleSubmit">纭畾</el-button>
</template>
</el-dialog>
-
<!-- 浜у搧閫夋嫨寮圭獥 -->
- <ProductSelectDialog v-model="showProductSelectDialog" @confirm="handleProductSelect" single />
-
+ <ProductSelectDialog v-model="showProductSelectDialog"
+ @confirm="handleProductSelect"
+ single />
<!-- BOM瀵煎叆瀵硅瘽妗� -->
- <ImportDialog ref="uploadRef" v-model="upload.open" :title="upload.title" :action="upload.url"
- :headers="upload.headers" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress"
- :on-success="handleFileSuccess" :show-download-template="true" @confirm="submitFileForm"
- @download-template="handleDownloadTemplate" @close="handleImportClose" />
+ <ImportDialog ref="uploadRef"
+ v-model="upload.open"
+ :title="upload.title"
+ :action="upload.url"
+ :headers="upload.headers"
+ :disabled="upload.isUploading"
+ :on-progress="handleFileUploadProgress"
+ :on-success="handleFileSuccess"
+ :show-download-template="true"
+ @confirm="submitFileForm"
+ @download-template="handleDownloadTemplate"
+ @close="handleImportClose" />
</div>
</template>
<script setup>
-import { ref, reactive, toRefs, onMounted, getCurrentInstance, defineAsyncComponent } from "vue";
-import { getToken } from "@/utils/auth";
-import { listPage, add, update, batchDelete, exportBom, downloadTemplate } from "@/api/productionManagement/productBom.js";
-import { useRouter } from 'vue-router'
-import { ElMessageBox } from 'element-plus'
-import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
-import ImportDialog from "@/components/Dialog/ImportDialog.vue";
+ import {
+ ref,
+ reactive,
+ toRefs,
+ onMounted,
+ getCurrentInstance,
+ defineAsyncComponent,
+ } from "vue";
+ import { getToken } from "@/utils/auth";
+ import {
+ listPage,
+ add,
+ update,
+ batchDelete,
+ exportBom,
+ downloadTemplate,
+ } from "@/api/productionManagement/productBom.js";
+ import { useRouter } from "vue-router";
+ import { ElMessageBox } from "element-plus";
+ import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
+ import ImportDialog from "@/components/Dialog/ImportDialog.vue";
-const router = useRouter()
-const { proxy } = getCurrentInstance()
-const StructureEdit = defineAsyncComponent(() => import('@/views/productionManagement/productStructure/StructureEdit.vue'))
+ const router = useRouter();
+ const { proxy } = getCurrentInstance();
+ const StructureEdit = defineAsyncComponent(() =>
+ import("@/views/productionManagement/productStructure/StructureEdit.vue")
+ );
-const tableColumn = ref([
- {
- label: "BOM缂栧彿",
- prop: "bomNo",
- dataType: 'slot',
- slot: "detail",
- minWidth: 140
- },
- {
- label: "浜у搧鍚嶇О",
- prop: "productName",
+ const tableColumn = ref([
+ {
+ label: "BOM缂栧彿",
+ prop: "bomNo",
+ dataType: "slot",
+ slot: "detail",
+ minWidth: 140,
+ },
+ {
+ label: "浜у搧鍚嶇О",
+ prop: "productName",
- minWidth: 160
- },
- {
- label: "瑙勬牸鍨嬪彿",
- prop: "productModelName",
- minWidth: 140
- },
- {
- label: "鐗堟湰鍙�",
- prop: "version",
- width: 100
- },
- {
- label: "澶囨敞",
- prop: "remark",
- minWidth: 160
- },
- {
- dataType: "action",
- label: "鎿嶄綔",
- align: "center",
- fixed: "right",
- width: 150,
- operation: [
- {
- name: "缂栬緫",
- type: "text",
- clickFun: (row) => {
- handleEdit(row)
- }
- },
- {
- name: "鍒犻櫎",
- type: "danger",
- link: true,
- clickFun: (row) => {
- handleDelete(row)
- }
- }
- ]
- }
-]);
+ minWidth: 160,
+ },
+ {
+ label: "瑙勬牸鍨嬪彿",
+ prop: "productModelName",
+ minWidth: 140,
+ },
+ {
+ label: "鐗堟湰鍙�",
+ prop: "version",
+ width: 100,
+ },
+ {
+ label: "澶囨敞",
+ prop: "remark",
+ minWidth: 160,
+ },
+ {
+ dataType: "action",
+ label: "鎿嶄綔",
+ align: "center",
+ fixed: "right",
+ width: 150,
+ operation: [
+ {
+ name: "缂栬緫",
+ type: "text",
+ clickFun: row => {
+ handleEdit(row);
+ },
+ },
+ {
+ name: "鍒犻櫎",
+ type: "danger",
+ link: true,
+ clickFun: row => {
+ handleDelete(row);
+ },
+ },
+ ],
+ },
+ ]);
-const tableData = ref([]);
-const tableLoading = ref(false);
-const showEdit = ref(false);
-const selectedRows = ref([]);
-const currentRow = ref({});
-const dialogVisible = ref(false);
-const operationType = ref('add'); // add | edit
-const formRef = ref(null);
-const showProductSelectDialog = ref(false);
+ const tableData = ref([]);
+ const tableLoading = ref(false);
+ const showEdit = ref(false);
+ const selectedRows = ref([]);
+ const currentRow = ref({});
+ const dialogVisible = ref(false);
+ const operationType = ref("add"); // add | edit
+ const formRef = ref(null);
+ const showProductSelectDialog = ref(false);
-// BOM瀵煎叆鍙傛暟
-const upload = reactive({
- // 鏄惁鏄剧ず寮瑰嚭灞傦紙BOM瀵煎叆锛�
- open: false,
- // 寮瑰嚭灞傛爣棰橈紙BOM瀵煎叆锛�
- title: "",
- // 鏄惁绂佺敤涓婁紶
- isUploading: false,
- // 璁剧疆涓婁紶鐨勮姹傚ご閮�
- headers: { Authorization: "Bearer " + getToken() },
- // 涓婁紶鐨勫湴鍧�
- url: import.meta.env.VITE_APP_BASE_API + "/productBom/uploadBom"
-});
-
-const page = reactive({
- current: 1,
- size: 10,
- total: 0,
-});
-
-const data = reactive({
- form: {
- id: undefined,
- productName: "",
- productModelName: "",
- productModelId: "",
- remark: "",
- version: ""
- },
- rules: {
- productModelId: [{ required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" }],
- version: [{ required: true, message: "璇疯緭鍏ョ増鏈彿", trigger: "blur" }]
- }
-});
-
-const { form, rules } = toRefs(data);
-
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
- selectedRows.value = selection;
-};
-
-// 鍒嗛〉
-const pagination = (obj) => {
- page.current = obj.page;
- page.size = obj.limit;
- getList();
-};
-
-// 鏌ヨ鍒楄〃
-const getList = () => {
- tableLoading.value = true;
- listPage({
- current: page.current,
- size: page.size,
- })
- .then((res) => {
- const records = res?.data?.records || [];
- tableData.value = records;
- page.total = res?.data?.total || 0;
- })
- .catch((err) => {
- console.error("鑾峰彇鍒楄〃澶辫触锛�", err);
- })
- .finally(() => {
- tableLoading.value = false;
- });
-};
-
-// 鏂板
-const handleAdd = () => {
- operationType.value = 'add';
- Object.assign(form.value, {
- id: undefined,
- productName: "",
- productModelName: "",
- productModelId: "",
- remark: "",
- version: ""
+ // BOM瀵煎叆鍙傛暟
+ const upload = reactive({
+ // 鏄惁鏄剧ず寮瑰嚭灞傦紙BOM瀵煎叆锛�
+ open: false,
+ // 寮瑰嚭灞傛爣棰橈紙BOM瀵煎叆锛�
+ title: "",
+ // 鏄惁绂佺敤涓婁紶
+ isUploading: false,
+ // 璁剧疆涓婁紶鐨勮姹傚ご閮�
+ headers: { Authorization: "Bearer " + getToken() },
+ // 涓婁紶鐨勫湴鍧�
+ url: import.meta.env.VITE_APP_BASE_API + "/productBom/uploadBom",
});
- dialogVisible.value = true;
-};
-// 缂栬緫
-const handleEdit = (row) => {
- operationType.value = 'edit';
- Object.assign(form.value, {
- id: row.id,
- productName: row.productName || "",
- productModelName: row.productModelName || "",
- productModelId: row.productModelId || "",
- remark: row.remark || "",
- version: row.version || ""
+ const page = reactive({
+ current: 1,
+ size: 10,
+ total: 0,
});
- dialogVisible.value = true;
-};
-// 鍒犻櫎锛堝崟鏉★級
-const handleDelete = (row) => {
- ElMessageBox.confirm('纭鍒犻櫎璇OM锛�', '鎻愮ず', {
- confirmButtonText: '纭',
- cancelButtonText: '鍙栨秷',
- type: 'warning'
- })
- .then(() => {
- batchDelete([row.id])
- .then(() => {
- proxy.$modal.msgSuccess('鍒犻櫎鎴愬姛');
- getList();
- })
- .catch(() => {
- proxy.$modal.msgError('鍒犻櫎澶辫触');
- });
- })
- .catch(() => { });
-};
-
-// 鎵归噺鍒犻櫎
-const handleBatchDelete = () => {
- if (!selectedRows.value.length) {
- proxy.$modal.msgWarning('璇烽�夋嫨鏁版嵁');
- return;
- }
- const ids = selectedRows.value.map(item => item.id);
- ElMessageBox.confirm('閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�', '鍒犻櫎鎻愮ず', {
- confirmButtonText: '纭',
- cancelButtonText: '鍙栨秷',
- type: 'warning'
- })
- .then(() => {
- batchDelete(ids)
- .then(() => {
- proxy.$modal.msgSuccess('鍒犻櫎鎴愬姛');
- getList();
- })
- .catch(() => {
- proxy.$modal.msgError('鍒犻櫎澶辫触');
- });
- })
- .catch(() => { });
-};
-
-// 浜у搧閫夋嫨
-const handleProductSelect = (products) => {
- if (products && products.length > 0) {
- const product = products[0];
- form.value.productModelId = product.id;
- form.value.productName = product.productName;
- form.value.productModelName = product.model;
- }
- showProductSelectDialog.value = false;
-};
-
-// 鎻愪氦琛ㄥ崟
-const handleSubmit = () => {
- formRef.value.validate((valid) => {
- if (valid) {
- const payload = { ...form.value };
- if (operationType.value === 'add') {
- add(payload)
- .then(() => {
- proxy.$modal.msgSuccess('鏂板鎴愬姛');
- closeDialog();
- getList();
- })
- .catch(() => {
- proxy.$modal.msgError('鏂板澶辫触');
- });
- } else {
- update(payload)
- .then(() => {
- proxy.$modal.msgSuccess('淇敼鎴愬姛');
- closeDialog();
- getList();
- })
- .catch(() => {
- proxy.$modal.msgError('淇敼澶辫触');
- });
- }
- }
+ const data = reactive({
+ form: {
+ id: undefined,
+ productName: "",
+ productModelName: "",
+ productModelId: "",
+ remark: "",
+ version: "",
+ },
+ rules: {
+ productModelId: [
+ { required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" },
+ ],
+ version: [{ required: true, message: "璇疯緭鍏ョ増鏈彿", trigger: "blur" }],
+ },
});
-};
-// 鍏抽棴寮圭獥
-const closeDialog = () => {
- dialogVisible.value = false;
- formRef.value?.resetFields();
-};
+ const { form, rules } = toRefs(data);
-// 瀵煎叆鎸夐挳鎿嶄綔
-const handleImport = () => {
- upload.title = "BOM瀵煎叆";
- upload.open = true;
-};
+ // 琛ㄦ牸閫夋嫨鏁版嵁
+ const handleSelectionChange = selection => {
+ selectedRows.value = selection;
+ };
-// 鍏抽棴瀵煎叆瀵硅瘽妗嗘椂娓呴櫎鏂囦欢
-const handleImportClose = () => {
- proxy.$refs["uploadRef"].clearFiles();
-};
-
-// 鏂囦欢涓婁紶涓鐞�
-const handleFileUploadProgress = (event, file, fileList) => {
- upload.isUploading = true;
-};
-
-// 鏂囦欢涓婁紶鎴愬姛澶勭悊
-const handleFileSuccess = (response, file, fileList) => {
- upload.open = false;
- upload.isUploading = false;
- proxy.$refs["uploadRef"].clearFiles();
- if (response.code === 200) {
- proxy.$modal.msgSuccess(response.msg || "瀵煎叆鎴愬姛");
+ // 鍒嗛〉
+ const pagination = obj => {
+ page.current = obj.page;
+ page.size = obj.limit;
getList();
- } else {
- proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "瀵煎叆缁撴灉", { dangerouslyUseHTMLString: true });
- }
-};
+ };
-// 鎻愪氦涓婁紶鏂囦欢
-const submitFileForm = () => {
- proxy.$refs["uploadRef"].submit();
-};
+ // 鏌ヨ鍒楄〃
+ const getList = () => {
+ tableLoading.value = true;
+ listPage({
+ current: page.current,
+ size: page.size,
+ })
+ .then(res => {
+ const records = res?.data?.records || [];
+ tableData.value = records;
+ page.total = res?.data?.total || 0;
+ })
+ .catch(err => {
+ console.error("鑾峰彇鍒楄〃澶辫触锛�", err);
+ })
+ .finally(() => {
+ tableLoading.value = false;
+ });
+ };
-// 瀵煎嚭鎸夐挳鎿嶄綔
-const handleExport = () => {
- if (selectedRows.value.length !== 1) {
- proxy.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹繘琛屽鍑�");
- return;
- }
+ // 鏂板
+ const handleAdd = () => {
+ operationType.value = "add";
+ Object.assign(form.value, {
+ id: undefined,
+ productName: "",
+ productModelName: "",
+ productModelId: "",
+ remark: "",
+ version: "",
+ });
+ dialogVisible.value = true;
+ };
- const bomId = selectedRows.value[0].id;
- const fileName = `BOM_${selectedRows.value[0].bomNo || bomId}.xlsx`;
+ // 缂栬緫
+ const handleEdit = row => {
+ operationType.value = "edit";
+ Object.assign(form.value, {
+ id: row.id,
+ productName: row.productName || "",
+ productModelName: row.productModelName || "",
+ productModelId: row.productModelId || "",
+ remark: row.remark || "",
+ version: row.version || "",
+ });
+ dialogVisible.value = true;
+ };
- exportBom(bomId).then(res => {
- // 杩斿洖鐨勬暟鎹槸鍚︿负绌�
- if (!res) {
- proxy.$modal.msgError("瀵煎嚭澶辫触锛岃繑鍥炴暟鎹负绌�");
+ // 鍒犻櫎锛堝崟鏉★級
+ const handleDelete = row => {
+ ElMessageBox.confirm("纭鍒犻櫎璇OM锛�", "鎻愮ず", {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ batchDelete([row.id])
+ .then(() => {
+ proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ getList();
+ })
+ .catch(() => {
+ proxy.$modal.msgError("鍒犻櫎澶辫触");
+ });
+ })
+ .catch(() => {});
+ };
+
+ // 鎵归噺鍒犻櫎
+ const handleBatchDelete = () => {
+ if (!selectedRows.value.length) {
+ proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
+ return;
+ }
+ const ids = selectedRows.value.map(item => item.id);
+ ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ batchDelete(ids)
+ .then(() => {
+ proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ getList();
+ })
+ .catch(() => {
+ proxy.$modal.msgError("鍒犻櫎澶辫触");
+ });
+ })
+ .catch(() => {});
+ };
+
+ // 浜у搧閫夋嫨
+ const handleProductSelect = products => {
+ if (products && products.length > 0) {
+ const product = products[0];
+ form.value.productModelId = product.skuId;
+ form.value.productName = product.materialName;
+ form.value.productModelName = product.specification;
+ }
+ showProductSelectDialog.value = false;
+ };
+
+ // 鎻愪氦琛ㄥ崟
+ const handleSubmit = () => {
+ formRef.value.validate(valid => {
+ if (valid) {
+ const payload = { ...form.value };
+ if (operationType.value === "add") {
+ add(payload)
+ .then(() => {
+ proxy.$modal.msgSuccess("鏂板鎴愬姛");
+ closeDialog();
+ getList();
+ })
+ .catch(() => {
+ proxy.$modal.msgError("鏂板澶辫触");
+ });
+ } else {
+ update(payload)
+ .then(() => {
+ proxy.$modal.msgSuccess("淇敼鎴愬姛");
+ closeDialog();
+ getList();
+ })
+ .catch(() => {
+ proxy.$modal.msgError("淇敼澶辫触");
+ });
+ }
+ }
+ });
+ };
+
+ // 鍏抽棴寮圭獥
+ const closeDialog = () => {
+ dialogVisible.value = false;
+ formRef.value?.resetFields();
+ };
+
+ // 瀵煎叆鎸夐挳鎿嶄綔
+ const handleImport = () => {
+ upload.title = "BOM瀵煎叆";
+ upload.open = true;
+ };
+
+ // 鍏抽棴瀵煎叆瀵硅瘽妗嗘椂娓呴櫎鏂囦欢
+ const handleImportClose = () => {
+ proxy.$refs["uploadRef"].clearFiles();
+ };
+
+ // 鏂囦欢涓婁紶涓鐞�
+ const handleFileUploadProgress = (event, file, fileList) => {
+ upload.isUploading = true;
+ };
+
+ // 鏂囦欢涓婁紶鎴愬姛澶勭悊
+ const handleFileSuccess = (response, file, fileList) => {
+ upload.open = false;
+ upload.isUploading = false;
+ proxy.$refs["uploadRef"].clearFiles();
+ if (response.code === 200) {
+ proxy.$modal.msgSuccess(response.msg || "瀵煎叆鎴愬姛");
+ getList();
+ } else {
+ proxy.$alert(
+ "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+ response.msg +
+ "</div>",
+ "瀵煎叆缁撴灉",
+ { dangerouslyUseHTMLString: true }
+ );
+ }
+ };
+
+ // 鎻愪氦涓婁紶鏂囦欢
+ const submitFileForm = () => {
+ proxy.$refs["uploadRef"].submit();
+ };
+
+ // 瀵煎嚭鎸夐挳鎿嶄綔
+ const handleExport = () => {
+ if (selectedRows.value.length !== 1) {
+ proxy.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹繘琛屽鍑�");
return;
}
- const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
- const downloadElement = document.createElement('a');
+ const bomId = selectedRows.value[0].id;
+ const fileName = `BOM_${selectedRows.value[0].bomNo || bomId}.xlsx`;
+
+ exportBom(bomId)
+ .then(res => {
+ // 杩斿洖鐨勬暟鎹槸鍚︿负绌�
+ if (!res) {
+ proxy.$modal.msgError("瀵煎嚭澶辫触锛岃繑鍥炴暟鎹负绌�");
+ return;
+ }
+
+ const blob = new Blob([res], {
+ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+ });
+ const downloadElement = document.createElement("a");
+ const href = window.URL.createObjectURL(blob);
+
+ downloadElement.style.display = "none";
+ downloadElement.href = href;
+ downloadElement.download = fileName;
+
+ document.body.appendChild(downloadElement);
+ downloadElement.click();
+
+ document.body.removeChild(downloadElement);
+ window.URL.revokeObjectURL(href);
+
+ proxy.$modal.msgSuccess("瀵煎嚭鎴愬姛");
+ })
+ .catch(err => {
+ console.error("瀵煎嚭寮傚父锛�", err);
+ proxy.$modal.msgError("绯荤粺寮傚父锛屽鍑哄け璐�");
+ });
+ };
+
+ // 涓嬭浇妯℃澘
+ const handleDownloadTemplate = async () => {
+ const res = await downloadTemplate();
+ // 杩斿洖鐨勬暟鎹槸鍚︿负绌�
+ if (!res) {
+ proxy.$modal.msgError("涓嬭浇澶辫触锛岃繑鍥炴暟鎹负绌�");
+ return;
+ }
+
+ const blob = new Blob([res], {
+ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+ });
+ const downloadElement = document.createElement("a");
const href = window.URL.createObjectURL(blob);
- downloadElement.style.display = 'none';
downloadElement.href = href;
- downloadElement.download = fileName;
+ downloadElement.download = "BOM妯℃澘.xlsx";
document.body.appendChild(downloadElement);
downloadElement.click();
@@ -382,52 +485,23 @@
document.body.removeChild(downloadElement);
window.URL.revokeObjectURL(href);
- proxy.$modal.msgSuccess("瀵煎嚭鎴愬姛");
- }).catch(err => {
- console.error("瀵煎嚭寮傚父锛�", err);
- proxy.$modal.msgError("绯荤粺寮傚父锛屽鍑哄け璐�");
+ proxy.$modal.msgSuccess("涓嬭浇鎴愬姛");
+ };
+
+ // 鏌ョ湅璇︽儏
+ const showDetail = row => {
+ router.push({
+ path: "/productionManagement/productStructureDetail",
+ query: {
+ id: row.id,
+ bomNo: row.bomNo || "",
+ productName: row.productName || "",
+ productModelName: row.productModelName || "",
+ },
+ });
+ };
+
+ onMounted(() => {
+ getList();
});
-};
-
-// 涓嬭浇妯℃澘
-const handleDownloadTemplate = async () => {
- const res = await downloadTemplate();
- // 杩斿洖鐨勬暟鎹槸鍚︿负绌�
- if (!res) {
- proxy.$modal.msgError("涓嬭浇澶辫触锛岃繑鍥炴暟鎹负绌�");
- return;
- }
-
- const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
- const downloadElement = document.createElement('a');
- const href = window.URL.createObjectURL(blob);
-
- downloadElement.href = href;
- downloadElement.download = "BOM妯℃澘.xlsx";
-
- document.body.appendChild(downloadElement);
- downloadElement.click();
-
- document.body.removeChild(downloadElement);
- window.URL.revokeObjectURL(href);
-
- proxy.$modal.msgSuccess("涓嬭浇鎴愬姛");
-};
-
-// 鏌ョ湅璇︽儏
-const showDetail = (row) => {
- router.push({
- path: '/productionManagement/productStructureDetail',
- query: {
- id: row.id,
- bomNo: row.bomNo || '',
- productName: row.productName || '',
- productModelName: row.productModelName || ''
- }
- });
-};
-
-onMounted(() => {
- getList();
-});
</script>
diff --git a/src/views/productionManagement/productionOrder/New.vue b/src/views/productionManagement/productionOrder/New.vue
index c9c478b..55cb118 100644
--- a/src/views/productionManagement/productionOrder/New.vue
+++ b/src/views/productionManagement/productionOrder/New.vue
@@ -1,42 +1,37 @@
<template>
<div>
- <el-dialog
- v-model="isShow"
- title="鏂板鐢熶骇璁㈠崟"
- width="800"
- @close="closeModal"
- >
- <el-form label-width="140px" :model="formState" label-position="top" ref="formRef">
- <el-form-item
- label="浜у搧鍚嶇О"
- prop="productModelId"
- :rules="[
+ <el-dialog v-model="isShow"
+ title="鏂板鐢熶骇璁㈠崟"
+ width="800"
+ @close="closeModal">
+ <el-form label-width="140px"
+ :model="formState"
+ label-position="top"
+ ref="formRef">
+ <el-form-item label="浜у搧鍚嶇О"
+ prop="productModelId"
+ :rules="[
{
required: true,
message: '璇烽�夋嫨浜у搧',
trigger: 'change',
}
- ]"
- >
- <el-button type="primary" @click="showProductSelectDialog = true">
+ ]">
+ <el-button type="primary"
+ @click="showProductSelectDialog = true">
{{ formState.productName ? formState.productName : '閫夋嫨浜у搧' }}
</el-button>
</el-form-item>
-
- <el-form-item
- label="瑙勬牸"
- prop="productModelName"
- >
- <el-input v-model="formState.productModelName" disabled />
+ <el-form-item label="瑙勬牸"
+ prop="productModelName">
+ <el-input v-model="formState.productModelName"
+ disabled />
</el-form-item>
-
- <el-form-item
- label="鍗曚綅"
- prop="unit"
- >
- <el-input v-model="formState.unit" disabled />
+ <el-form-item label="鍗曚綅"
+ prop="unit">
+ <el-input v-model="formState.unit"
+ disabled />
</el-form-item>
-
<el-form-item label="宸ヨ壓璺嚎">
<el-select v-model="formState.routeId"
placeholder="璇烽�夋嫨宸ヨ壓璺嚎"
@@ -48,24 +43,22 @@
:value="item.id" />
</el-select>
</el-form-item>
-
- <el-form-item
- label="闇�姹傛暟閲�"
- prop="quantity"
- >
- <el-input-number v-model="formState.quantity" :step="1" :min="1" style="width: 100%" />
+ <el-form-item label="闇�姹傛暟閲�"
+ prop="quantity">
+ <el-input-number v-model="formState.quantity"
+ :step="1"
+ :min="1"
+ style="width: 100%" />
</el-form-item>
</el-form>
-
<!-- 浜у搧閫夋嫨寮圭獥 -->
- <ProductSelectDialog
- v-model="showProductSelectDialog"
- @confirm="handleProductSelect"
- single
- />
+ <ProductSelectDialog v-model="showProductSelectDialog"
+ @confirm="handleProductSelect"
+ single />
<template #footer>
<div class="dialog-footer">
- <el-button type="primary" @click="handleSubmit">纭</el-button>
+ <el-button type="primary"
+ @click="handleSubmit">纭</el-button>
<el-button @click="closeModal">鍙栨秷</el-button>
</div>
</template>
@@ -74,119 +67,123 @@
</template>
<script setup>
-import {ref, computed, getCurrentInstance} from "vue";
-import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
-import {addProductOrder, listProcessRoute} from "@/api/productionManagement/productionOrder.js";
+ import { ref, computed, getCurrentInstance } from "vue";
+ import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
+ import {
+ addProductOrder,
+ listProcessRoute,
+ } from "@/api/productionManagement/productionOrder.js";
-const props = defineProps({
- visible: {
- type: Boolean,
- required: true,
- },
+ const props = defineProps({
+ visible: {
+ type: Boolean,
+ required: true,
+ },
- type: {
- type: String,
- required: true,
- default: 'qualified',
- },
-});
+ type: {
+ type: String,
+ required: true,
+ default: "qualified",
+ },
+ });
-const emit = defineEmits(['update:visible', 'completed']);
+ const emit = defineEmits(["update:visible", "completed"]);
-// 鍝嶅簲寮忔暟鎹紙鏇夸唬閫夐」寮忕殑 data锛�
-const formState = ref({
- productId: undefined,
- productModelId: undefined,
- routeId: undefined,
- productName: "",
- productModelName: "",
- unit: "",
- quantity: 0,
-});
-
-const isShow = computed({
- get() {
- return props.visible;
- },
- set(val) {
- emit('update:visible', val);
- },
-});
-
-const showProductSelectDialog = ref(false);
-
-let { proxy } = getCurrentInstance()
-
-const closeModal = () => {
- // 閲嶇疆琛ㄥ崟鏁版嵁
- formState.value = {
+ // 鍝嶅簲寮忔暟鎹紙鏇夸唬閫夐」寮忕殑 data锛�
+ const formState = ref({
productId: undefined,
productModelId: undefined,
routeId: undefined,
productName: "",
productModelName: "",
- quantity: '',
+ unit: "",
+ quantity: 0,
+ });
+
+ const isShow = computed({
+ get() {
+ return props.visible;
+ },
+ set(val) {
+ emit("update:visible", val);
+ },
+ });
+
+ const showProductSelectDialog = ref(false);
+
+ let { proxy } = getCurrentInstance();
+
+ const closeModal = () => {
+ // 閲嶇疆琛ㄥ崟鏁版嵁
+ formState.value = {
+ productId: undefined,
+ productModelId: undefined,
+ routeId: undefined,
+ productName: "",
+ productModelName: "",
+ quantity: "",
+ };
+ isShow.value = false;
};
- isShow.value = false;
-};
-// 浜у搧閫夋嫨澶勭悊
-const handleProductSelect = async (products) => {
- if (products && products.length > 0) {
- const product = products[0];
- formState.value.productId = product.productId;
- formState.value.productName = product.productName;
- formState.value.productModelName = product.model;
- formState.value.productModelId = product.id;
- formState.value.unit = product.unit;
- showProductSelectDialog.value = false;
- fetchRouteOptions( product.id);
- // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
- proxy.$refs["formRef"]?.validateField('productModelId');
- }
-};
-
-const routeOptions = ref([]);
-const bindRouteLoading = ref(false);
-const fetchRouteOptions = (productModelId) => {
- formState.value.routeId = undefined;
- routeOptions.value = []
- bindRouteLoading.value = true;
- listProcessRoute({ productModelId: productModelId }).then(res => {
- routeOptions.value = res.data || [];
- }).finally(() => {
- bindRouteLoading.value = false;
- })
-}
-
-const handleSubmit = () => {
- proxy.$refs["formRef"].validate(valid => {
- if (valid) {
- // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佸拰瑙勬牸
- if (!formState.value.productModelId) {
- proxy.$modal.msgError("璇烽�夋嫨浜у搧");
- return;
- }
- if (!formState.value.productModelId) {
- proxy.$modal.msgError("璇烽�夋嫨瑙勬牸");
- return;
- }
-
- addProductOrder(formState.value).then(res => {
- // 鍏抽棴妯℃�佹
- isShow.value = false;
- // 鍛婄煡鐖剁粍浠跺凡瀹屾垚
- emit('completed');
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- })
+ // 浜у搧閫夋嫨澶勭悊
+ const handleProductSelect = async products => {
+ if (products && products.length > 0) {
+ const product = products[0];
+ formState.value.productId = product.skuId;
+ formState.value.productName = product.materialName;
+ formState.value.productModelName = product.specification;
+ formState.value.productModelId = product.skuId;
+ formState.value.unit = product.baseUnit;
+ showProductSelectDialog.value = false;
+ fetchRouteOptions(product.skuId);
+ // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
+ proxy.$refs["formRef"]?.validateField("productModelId");
}
- })
-};
+ };
+ const routeOptions = ref([]);
+ const bindRouteLoading = ref(false);
+ const fetchRouteOptions = productModelId => {
+ formState.value.routeId = undefined;
+ routeOptions.value = [];
+ bindRouteLoading.value = true;
+ listProcessRoute({ productModelId: productModelId })
+ .then(res => {
+ routeOptions.value = res.data || [];
+ })
+ .finally(() => {
+ bindRouteLoading.value = false;
+ });
+ };
-defineExpose({
- closeModal,
- handleSubmit,
- isShow,
-});
+ const handleSubmit = () => {
+ proxy.$refs["formRef"].validate(valid => {
+ if (valid) {
+ // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佸拰瑙勬牸
+ if (!formState.value.productModelId) {
+ proxy.$modal.msgError("璇烽�夋嫨浜у搧");
+ return;
+ }
+ if (!formState.value.productModelId) {
+ proxy.$modal.msgError("璇烽�夋嫨瑙勬牸");
+ return;
+ }
+
+ addProductOrder(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
index 5ecb747..f221b80 100644
--- a/src/views/productionManagement/productionProcess/index.vue
+++ b/src/views/productionManagement/productionProcess/index.vue
@@ -13,14 +13,15 @@
</el-icon>鏂板宸ュ簭
</el-button>
</div>
- <div class="process-card-list">
- <div v-for="process in processList"
+ <div class="process-card-list"
+ v-loading="processLoading">
+ <div v-for="process in processValueList"
:key="process.id"
class="process-card"
:class="{ active: selectedProcess?.id === process.id }"
@click="selectProcess(process)">
<div class="card-header">
- <span class="process-code">{{ process.processCode }}</span>
+ <div class="process-name">{{ process.name }} <span class="process-code">{{ process.no }}</span></div>
<div class="card-actions">
<el-button link
type="primary"
@@ -41,15 +42,21 @@
</div>
</div>
<div class="card-body">
- <div class="process-name">{{ process.processName }}</div>
- <div class="process-desc">{{ process.processDesc || '鏆傛棤鎻忚堪' }}</div>
+ <!-- <div class="process-name">{{ process.name }}</div> -->
+ <div class="process-desc">{{ process.remark || '鏆傛棤鎻忚堪' }}</div>
</div>
<div class="card-footer">
- <el-tag size="small"
- :type="process.status === '1' ? 'success' : 'info'">
- {{ process.status === '1' ? '鍚敤' : '鍋滅敤' }}
- </el-tag>
- <span class="param-count">鍙傛暟: {{ process.paramCount || 0 }}涓�</span>
+ <div class="status-tag"> <el-tag size="small"
+ :type="process.status ? 'success' : 'info'">
+ {{ process.status ? '鍚敤' : '鍋滅敤' }}
+ </el-tag>
+ <el-tag size="small"
+ :type="process.isQuality ? 'warning' : 'info'"
+ style="margin-left: 8px">
+ {{ process.isQuality ? '璐ㄦ' : '闈炶川妫�' }}
+ </el-tag>
+ </div>
+ <span class="param-count">宸ヨ祫瀹氶: 楼{{ process.salaryQuota || 0 }}</span>
</div>
</div>
</div>
@@ -58,7 +65,7 @@
<div class="param-list-section">
<div class="section-header">
<h3 class="section-title">
- {{ selectedProcess ? selectedProcess.processName + ' - 鍙傛暟閰嶇疆' : '璇烽�夋嫨宸ュ簭' }}
+ {{ selectedProcess ? selectedProcess.name + ' - 鍙傛暟閰嶇疆' : '璇烽�夋嫨宸ュ簭' }}
</h3>
<el-button type="primary"
size="small"
@@ -95,18 +102,30 @@
ref="processFormRef"
label-width="100px">
<el-form-item label="宸ュ簭缂栫爜"
- prop="processCode">
- <el-input v-model="processForm.processCode"
+ prop="no">
+ <el-input v-model="processForm.no"
placeholder="璇疯緭鍏ュ伐搴忕紪鐮�" />
</el-form-item>
<el-form-item label="宸ュ簭鍚嶇О"
- prop="processName">
- <el-input v-model="processForm.processName"
+ prop="name">
+ <el-input v-model="processForm.name"
placeholder="璇疯緭鍏ュ伐搴忓悕绉�" />
</el-form-item>
+ <el-form-item label="宸ヨ祫瀹氶"
+ prop="salaryQuota">
+ <el-input v-model="processForm.salaryQuota"
+ type="number"
+ :step="0.001" />
+ </el-form-item>
+ <el-form-item label="鏄惁璐ㄦ"
+ prop="isQuality">
+ <el-switch v-model="processForm.isQuality"
+ :active-value="true"
+ inactive-value="false" />
+ </el-form-item>
<el-form-item label="宸ュ簭鎻忚堪"
- prop="processDesc">
- <el-input v-model="processForm.processDesc"
+ prop="remark">
+ <el-input v-model="processForm.remark"
type="textarea"
:rows="3"
placeholder="璇疯緭鍏ュ伐搴忔弿杩�" />
@@ -114,8 +133,8 @@
<el-form-item label="鐘舵��"
prop="status">
<el-radio-group v-model="processForm.status">
- <el-radio label="1">鍚敤</el-radio>
- <el-radio label="0">鍋滅敤</el-radio>
+ <el-radio :label="true">鍚敤</el-radio>
+ <el-radio :label="false">鍋滅敤</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
@@ -156,15 +175,15 @@
<el-table-column prop="parameterCode"
label="鍙傛暟缂栧彿"
width="100" />
- <el-table-column prop="parameterName"
+ <el-table-column prop="paramName"
label="鍙傛暟鍚嶇О" />
- <el-table-column prop="parameterType"
+ <el-table-column prop="paramType"
label="鍙傛暟绫诲瀷"
width="100">
<template #default="scope">
<el-tag size="small"
- :type="getParamTypeTag(scope.row.parameterType)">
- {{ scope.row.parameterType }}
+ :type="getParamTypeTag(scope.row.paramType)">
+ {{ scope.row.paramType }}
</el-tag>
</template>
</el-table-column>
@@ -181,28 +200,40 @@
<span class="detail-text">{{ selectedParam.parameterCode }}</span>
</el-form-item>
<el-form-item label="鍙傛暟鍚嶇О">
- <span class="detail-text">{{ selectedParam.parameterName }}</span>
+ <span class="detail-text">{{ selectedParam.paramName }}</span>
</el-form-item>
<el-form-item label="鍙傛暟妯″紡">
<el-tag size="small"
- :type="selectedParam.parameterType2 === '1' ? 'success' : 'warning'">
- {{ selectedParam.parameterType2 === '1' ? '鍗曞��' : '鍖洪棿' }}
+ :type="selectedParam.valueMode == '1' ? 'success' : 'warning'">
+ {{ selectedParam.valueMode == '1' ? '鍗曞��' : '鍖洪棿' }}
</el-tag>
</el-form-item>
<el-form-item label="鍙傛暟绫诲瀷">
<el-tag size="small"
- :type="getParamTypeTag(selectedParam.parameterType)">
- {{ selectedParam.parameterType }}
+ :type="getParamTypeTag(selectedParam.paramType)">
+ {{ selectedParam.paramType }}
</el-tag>
</el-form-item>
<el-form-item label="鍙傛暟鏍煎紡">
- <span class="detail-text">{{ selectedParam.parameterFormat || '-' }}</span>
- </el-form-item>
- <el-form-item label="鏍囧噯鍊�">
- <span class="detail-text">{{ selectedParam.standardValue }}</span>
+ <span class="detail-text">{{ selectedParam.paramFormat || '-' }}</span>
</el-form-item>
<el-form-item label="鍗曚綅">
<span class="detail-text">{{ selectedParam.unit || '-' }}</span>
+ </el-form-item>
+ <el-form-item label="榛樿鍊�"
+ v-if="selectedParam.valueMode === '1'">
+ <el-input v-model="selectedParam.defaultValue"
+ placeholder="璇疯緭鍏ラ粯璁ゅ��" />
+ </el-form-item>
+ <el-form-item label="鏈�灏忓��"
+ v-if="selectedParam.valueMode === '2'">
+ <el-input v-model="selectedParam.defaultMin"
+ placeholder="璇疯緭鍏ユ渶灏忓��" />
+ </el-form-item>
+ <el-form-item label="鏈�澶у��"
+ v-if="selectedParam.valueMode === '2'">
+ <el-input v-model="selectedParam.defaultMax"
+ placeholder="璇疯緭鍏ユ渶澶у��" />
</el-form-item>
</el-form>
<el-empty v-else
@@ -227,9 +258,16 @@
import { Plus, Edit, Delete, Search } from "@element-plus/icons-vue";
import PIMTable from "@/components/PIMTable/PIMTable.vue";
import { listType } from "@/api/system/dict/type";
+ import {
+ add,
+ update,
+ del,
+ list as getProcessListApi,
+ processList,
+ } from "@/api/productionManagement/productionProcess.js";
// 宸ュ簭鍒楄〃鏁版嵁
- const processList = ref([]);
+ const processValueList = ref([]);
const selectedProcess = ref(null);
const processLoading = ref(false);
@@ -251,14 +289,32 @@
const processFormRef = ref(null);
const processForm = reactive({
id: null,
- processCode: "",
- processName: "",
- processDesc: "",
- status: "1",
+ no: "",
+ name: "",
+ salaryQuota: null,
+ isQuality: false,
+ remark: "",
+ status: true,
});
const processRules = {
- processCode: [{ required: true, message: "璇疯緭鍏ュ伐搴忕紪鐮�", trigger: "blur" }],
- processName: [{ required: true, message: "璇疯緭鍏ュ伐搴忓悕绉�", trigger: "blur" }],
+ no: [{ required: true, message: "璇疯緭鍏ュ伐搴忕紪鐮�", trigger: "blur" }],
+ name: [{ required: true, message: "璇疯緭鍏ュ伐搴忓悕绉�", trigger: "blur" }],
+ salaryQuota: [
+ {
+ required: true,
+ message: "璇疯緭鍏ュ伐璧勫畾棰�",
+ trigger: "blur",
+ validator: (rule, value, callback) => {
+ if (value === null || value === undefined || value === "") {
+ callback(new Error("璇疯緭鍏ュ伐璧勫畾棰�"));
+ } else if (isNaN(value) || value < 0) {
+ callback(new Error("宸ヨ祫瀹氶蹇呴』鏄潪璐熸暟瀛�"));
+ } else {
+ callback();
+ }
+ },
+ },
+ ],
};
// 鍙傛暟瀵硅瘽妗�
@@ -277,18 +333,18 @@
},
{
label: "鍙傛暟鍚嶇О",
- prop: "parameterName",
+ prop: "paramName",
},
{
label: "鍙傛暟妯″紡",
- prop: "parameterType2",
+ prop: "valueMode",
dataType: "tag",
- formatType: row => (row.parameterType2 === "1" ? "success" : "warning"),
- formatData: row => (row.parameterType2 === "1" ? "鍗曞��" : "鍖洪棿"),
+ formatType: row => (row.valueMode === "1" ? "success" : "warning"),
+ formatData: row => (row.valueMode === "1" ? "鍗曞��" : "鍖洪棿"),
},
{
label: "鍙傛暟绫诲瀷",
- prop: "parameterType",
+ prop: "paramType",
dataType: "tag",
formatType: row => {
const typeMap = {
@@ -297,17 +353,38 @@
涓嬫媺閫夐」: "warning",
鏃堕棿鏍煎紡: "success",
};
- return typeMap[row.parameterType] || "default";
+ return typeMap[row.paramType] || "default";
},
},
{
label: "鍙傛暟鏍煎紡",
- prop: "parameterFormat",
+ prop: "paramFormat",
},
{
label: "鏍囧噯鍊�",
- prop: "standardValue",
- className: row => (row.parameterType === "鏁板�兼牸寮�" ? "quantity-cell" : ""),
+ prop: "defaultValue",
+ className: row => (row.paramType === "鏁板�兼牸寮�" ? "quantity-cell" : ""),
+ },
+ {
+ label: "榛樿鍊�",
+ prop: "defaultValue",
+ formatData: (val, row) => {
+ return row.valueMode === "1" ? val : "-";
+ },
+ },
+ {
+ label: "鏈�灏忓��",
+ prop: "defaultMin",
+ formatData: (val, row) => {
+ return row.valueMode === "2" ? val : "-";
+ },
+ },
+ {
+ label: "鏈�澶у��",
+ prop: "defaultMax",
+ formatData: (val, row) => {
+ return row.valueMode === "2" ? val : "-";
+ },
},
{
label: "鍗曚綅",
@@ -328,212 +405,33 @@
// 鑾峰彇宸ュ簭鍒楄〃
const getProcessList = () => {
- // 鍋囨暟鎹�
- processList.value = [
- {
- id: 1,
- processCode: "PROC001",
- processName: "鍘熸枡閰嶆瘮",
- processDesc: "鍘熸潗鏂欓厤姣斿伐搴�",
- status: "1",
- paramCount: 3,
- },
- {
- id: 2,
- processCode: "PROC002",
- processName: "鎼呮媽娣峰悎",
- processDesc: "鎼呮媽娣峰悎宸ュ簭",
- status: "1",
- paramCount: 2,
- },
- {
- id: 3,
- processCode: "PROC003",
- processName: "娴囩瓚鎴愬瀷",
- processDesc: "娴囩瓚鎴愬瀷宸ュ簭",
- status: "1",
- paramCount: 4,
- },
- {
- id: 4,
- processCode: "PROC004",
- processName: "钂稿帇鍏绘姢",
- processDesc: "钂稿帇鍏绘姢宸ュ簭",
- status: "0",
- paramCount: 2,
- },
- {
- id: 5,
- processCode: "PROC005",
- processName: "鍒囧壊鍔犲伐",
- processDesc: "鍒囧壊鍔犲伐宸ュ簭",
- status: "1",
- paramCount: 3,
- },
- ];
+ processLoading.value = true;
+ getProcessListApi()
+ .then(res => {
+ processValueList.value = res.data || [];
+ })
+ .catch(() => {
+ ElMessage.error("鑾峰彇宸ュ簭鍒楄〃澶辫触");
+ })
+ .finally(() => {
+ processLoading.value = false;
+ });
};
// 鑾峰彇鍙傛暟鍒楄〃
const getParamList = processId => {
paramLoading.value = true;
- // 鍋囨暟鎹�
- setTimeout(() => {
- paramLoading.value = false;
- const mockData = {
- 1: [
- {
- id: 1,
- parameterCode: "P001",
- parameterName: "姘存偿姣斾緥",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "30",
- unit: "%",
- },
- {
- id: 2,
- parameterCode: "P002",
- parameterName: "鐮傛瘮渚�",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "60",
- unit: "%",
- },
- {
- id: 3,
- parameterCode: "P003",
- parameterName: "姘存瘮渚�",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "10",
- unit: "%",
- },
- ],
- 2: [
- {
- id: 4,
- parameterCode: "P004",
- parameterName: "鎼呮媽鏃堕棿",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "5",
- unit: "鍒嗛挓",
- },
- {
- id: 5,
- parameterCode: "P005",
- parameterName: "鎼呮媽閫熷害",
- parameterType2: "2",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "100-200",
- unit: "rpm",
- },
- ],
- 3: [
- {
- id: 6,
- parameterCode: "P006",
- parameterName: "娴囩瓚娓╁害",
- parameterType2: "2",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "20-30",
- unit: "鈩�",
- },
- {
- id: 7,
- parameterCode: "P007",
- parameterName: "娴囩瓚鍘嬪姏",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "0.5",
- unit: "MPa",
- },
- {
- id: 8,
- parameterCode: "P008",
- parameterName: "鎴愬瀷鐘舵��",
- parameterType2: "1",
- parameterType: "涓嬫媺閫夐」",
- parameterFormat: "status",
- standardValue: "姝e父",
- unit: "",
- },
- {
- id: 9,
- parameterCode: "P009",
- parameterName: "鎴愬瀷鏃堕棿",
- parameterType2: "1",
- parameterType: "鏃堕棿鏍煎紡",
- parameterFormat: "YYYY-MM-DD HH:mm:ss",
- standardValue: "2024-01-01 08:00:00",
- unit: "",
- },
- ],
- 4: [
- {
- id: 10,
- parameterCode: "P010",
- parameterName: "钂稿帇娓╁害",
- parameterType2: "2",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "180-200",
- unit: "鈩�",
- },
- {
- id: 11,
- parameterCode: "P011",
- parameterName: "钂稿帇鍘嬪姏",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "1.2",
- unit: "MPa",
- },
- ],
- 5: [
- {
- id: 12,
- parameterCode: "P012",
- parameterName: "鍒囧壊灏哄",
- parameterType2: "1",
- parameterType: "鏂囨湰鏍煎紡",
- parameterFormat: "",
- standardValue: "600x200x100",
- unit: "mm",
- },
- {
- id: 13,
- parameterCode: "P013",
- parameterName: "鍒囧壊绮惧害",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "卤1",
- unit: "mm",
- },
- {
- id: 14,
- parameterCode: "P014",
- parameterName: "鍒囧壊閫熷害",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "2",
- unit: "m/min",
- },
- ],
- };
- paramList.value = mockData[processId] || [];
- paramPage.total = paramList.value.length;
- }, 300);
+ getProcessParamList(processId)
+ .then(res => {
+ paramList.value = res.data || [];
+ paramPage.total = paramList.value.length;
+ })
+ .catch(() => {
+ ElMessage.error("鑾峰彇鍙傛暟鍒楄〃澶辫触");
+ })
+ .finally(() => {
+ paramLoading.value = false;
+ });
};
// 閫夋嫨宸ュ簭
@@ -546,19 +444,23 @@
const handleAddProcess = () => {
isProcessEdit.value = false;
processForm.id = null;
- processForm.processCode = "";
- processForm.processName = "";
- processForm.processDesc = "";
- processForm.status = "1";
+ processForm.no = "";
+ processForm.name = "";
+ processForm.salaryQuota = null;
+ processForm.isQuality = false;
+ processForm.remark = "";
+ processForm.status = true;
processDialogVisible.value = true;
};
const handleEditProcess = process => {
isProcessEdit.value = true;
processForm.id = process.id;
- processForm.processCode = process.processCode;
- processForm.processName = process.processName;
- processForm.processDesc = process.processDesc;
+ processForm.no = process.no;
+ processForm.name = process.name;
+ processForm.salaryQuota = process.salaryQuota;
+ processForm.isQuality = process.isQuality || false;
+ processForm.remark = process.remark || "";
processForm.status = process.status;
processDialogVisible.value = true;
};
@@ -569,21 +471,34 @@
cancelButtonText: "鍙栨秷",
type: "warning",
}).then(() => {
- ElMessage.success("鍒犻櫎鎴愬姛");
- getProcessList();
- if (selectedProcess.value?.id === process.id) {
- selectedProcess.value = null;
- paramList.value = [];
- }
+ del([process.id])
+ .then(() => {
+ ElMessage.success("鍒犻櫎鎴愬姛");
+ getProcessList();
+ if (selectedProcess.value?.id === process.id) {
+ selectedProcess.value = null;
+ paramList.value = [];
+ }
+ })
+ .catch(() => {
+ ElMessage.error("鍒犻櫎澶辫触");
+ });
});
};
const handleProcessSubmit = () => {
processFormRef.value.validate(valid => {
if (valid) {
- ElMessage.success(isProcessEdit.value ? "缂栬緫鎴愬姛" : "鏂板鎴愬姛");
- processDialogVisible.value = false;
- getProcessList();
+ const apiMethod = isProcessEdit.value ? update : add;
+ apiMethod(processForm)
+ .then(() => {
+ ElMessage.success(isProcessEdit.value ? "缂栬緫鎴愬姛" : "鏂板鎴愬姛");
+ processDialogVisible.value = false;
+ getProcessList();
+ })
+ .catch(() => {
+ ElMessage.error(isProcessEdit.value ? "缂栬緫澶辫触" : "鏂板澶辫触");
+ });
}
});
};
@@ -599,71 +514,71 @@
{
id: 101,
parameterCode: "P101",
- parameterName: "娓╁害",
- parameterType2: "2",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "20-30",
+ paramName: "娓╁害",
+ valueMode: "2",
+ paramType: "鏁板�兼牸寮�",
+ paramFormat: "",
+ defaultValue: "20-30",
unit: "鈩�",
},
{
id: 102,
parameterCode: "P102",
- parameterName: "鍘嬪姏",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "0.5",
+ paramName: "鍘嬪姏",
+ valueMode: "1",
+ paramType: "鏁板�兼牸寮�",
+ paramFormat: "",
+ defaultValue: "0.5",
unit: "MPa",
},
{
id: 103,
parameterCode: "P103",
- parameterName: "婀垮害",
- parameterType2: "2",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "40-60",
+ paramName: "婀垮害",
+ valueMode: "2",
+ paramType: "鏁板�兼牸寮�",
+ paramFormat: "",
+ defaultValue: "40-60",
unit: "%",
},
{
id: 104,
parameterCode: "P104",
- parameterName: "閫熷害",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "100",
+ paramName: "閫熷害",
+ valueMode: "1",
+ paramType: "鏁板�兼牸寮�",
+ paramFormat: "",
+ defaultValue: "100",
unit: "m/min",
},
{
id: 105,
parameterCode: "P105",
- parameterName: "鐘舵��",
- parameterType2: "1",
- parameterType: "涓嬫媺閫夐」",
- parameterFormat: "status",
- standardValue: "姝e父",
+ paramName: "鐘舵��",
+ valueMode: "1",
+ paramType: "涓嬫媺閫夐」",
+ paramFormat: "status",
+ defaultValue: "姝e父",
unit: "",
},
{
id: 106,
parameterCode: "P106",
- parameterName: "璁板綍鏃堕棿",
- parameterType2: "1",
- parameterType: "鏃堕棿鏍煎紡",
- parameterFormat: "YYYY-MM-DD HH:mm:ss",
- standardValue: "2024-01-01 08:00:00",
+ paramName: "璁板綍鏃堕棿",
+ valueMode: "1",
+ paramType: "鏃堕棿鏍煎紡",
+ paramFormat: "YYYY-MM-DD HH:mm:ss",
+ defaultValue: "2024-01-01 08:00:00",
unit: "",
},
{
id: 107,
parameterCode: "P107",
- parameterName: "澶囨敞",
- parameterType2: "1",
- parameterType: "鏂囨湰鏍煎紡",
- parameterFormat: "",
- standardValue: "鏃�",
+ paramName: "澶囨敞",
+ valueMode: "1",
+ paramType: "鏂囨湰鏍煎紡",
+ paramFormat: "",
+ defaultValue: "鏃�",
unit: "",
},
];
@@ -683,7 +598,7 @@
filteredParamList.value = availableParamList.value;
} else {
filteredParamList.value = availableParamList.value.filter(item =>
- item.parameterName.toLowerCase().includes(keyword)
+ item.paramName.toLowerCase().includes(keyword)
);
}
};
@@ -704,8 +619,14 @@
cancelButtonText: "鍙栨秷",
type: "warning",
}).then(() => {
- ElMessage.success("鍒犻櫎鎴愬姛");
- getParamList(selectedProcess.value.id);
+ deleteProcessParam(row.id)
+ .then(() => {
+ ElMessage.success("鍒犻櫎鎴愬姛");
+ getParamList(selectedProcess.value.id);
+ })
+ .catch(() => {
+ ElMessage.error("鍒犻櫎澶辫触");
+ });
});
};
@@ -714,9 +635,21 @@
ElMessage.warning("璇峰厛閫夋嫨涓�涓弬鏁�");
return;
}
- ElMessage.success("娣诲姞鎴愬姛");
- paramDialogVisible.value = false;
- getParamList(selectedProcess.value.id);
+ addProcessParam({
+ processId: selectedProcess.value.id,
+ paramId: selectedParam.value.id,
+ defaultValue: selectedParam.value.defaultValue,
+ defaultMin: selectedParam.value.defaultMin,
+ defaultMax: selectedParam.value.defaultMax,
+ })
+ .then(() => {
+ ElMessage.success("娣诲姞鎴愬姛");
+ paramDialogVisible.value = false;
+ getParamList(selectedProcess.value.id);
+ })
+ .catch(() => {
+ ElMessage.error("娣诲姞澶辫触");
+ });
};
const handleParamPagination = obj => {
@@ -810,7 +743,8 @@
.process-code {
font-size: 12px;
- color: #909399;
+ // color: #909399;
+ color: #cb9b18;
font-family: "Courier New", monospace;
}
--
Gitblit v1.9.3