From 2a146bcbd2c3752d699338bad39a07feabe6890e Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期五, 26 十二月 2025 16:39:52 +0800
Subject: [PATCH] 产品结构
---
src/api/basicData/product.js | 8 --
src/api/productionManagement/productStructure.js | 2
src/views/productionManagement/productStructure/StructureEdit.vue | 161 ++++++++++++++++++++++++++++++++++++-----------------
src/views/productionManagement/productStructure/index.vue | 9 +--
4 files changed, 113 insertions(+), 67 deletions(-)
diff --git a/src/api/basicData/product.js b/src/api/basicData/product.js
index 3be642d..10f8fd1 100644
--- a/src/api/basicData/product.js
+++ b/src/api/basicData/product.js
@@ -56,11 +56,3 @@
params: query
})
}
-
-export function modelPage(query) {
- return request({
- url: '/basic/product/pageModel',
- method: 'get',
- params: query
- })
-}
diff --git a/src/api/productionManagement/productStructure.js b/src/api/productionManagement/productStructure.js
index ce2c31f..074e27a 100644
--- a/src/api/productionManagement/productStructure.js
+++ b/src/api/productionManagement/productStructure.js
@@ -4,7 +4,7 @@
// 鍒嗛〉鏌ヨ
export function queryList(id) {
return request({
- url: "/productStructure/" + id,
+ url: "/productStructure/listByproductModelId/" + id,
method: "get",
});
}
diff --git a/src/views/productionManagement/productStructure/StructureEdit.vue b/src/views/productionManagement/productStructure/StructureEdit.vue
index c202473..fb5784f 100644
--- a/src/views/productionManagement/productStructure/StructureEdit.vue
+++ b/src/views/productionManagement/productStructure/StructureEdit.vue
@@ -1,50 +1,74 @@
<template>
<el-dialog
v-model="visible"
- title="Tips"
- width="500"
- :before-close="visible = false"
+ title="缁撴瀯"
+ width="1200"
+ close-on-click-modal
+ @close="visible = false"
>
+ <el-button
+ v-if="dataValue.isEdit"
+ type="primary"
+ @click="addItem"
+ style="margin-bottom: 10px"
+ >娣诲姞
+ </el-button>
+ <el-button
+ v-if="!dataValue.isEdit"
+ type="primary"
+ @click="dataValue.isEdit = true"
+ style="margin-bottom: 10px"
+ >缂栬緫
+ </el-button>
+ <el-button
+ v-if="dataValue.isEdit"
+ type="primary"
+ @click="cancelEdit"
+ style="margin-bottom: 10px"
+ >鍙栨秷
+ </el-button>
<el-form
ref="form"
:model="dataValue"
- label-width="80px"
>
<el-table :data="dataValue.dataList" style="width: 100%">
- <el-table-column prop="productName" label="浜у搧" width="180" />
- <el-table-column prop="model" label="瑙勬牸" width="180">
- <template #default="{ row, index }">
+ <el-table-column prop="productName" label="浜у搧" width="150"/>
+ <el-table-column prop="model" label="瑙勬牸" width="150">
+ <template #default="{ row, $index }">
<el-form-item
- :prop="`dataList.${index}.model`"
+ v-if="dataValue.isEdit"
+ :prop="`dataList.${$index}.model`"
:rules="[{ required: true, message: '璇烽�夋嫨瑙勬牸', trigger: ['blur','change'] }]"
style="margin: 0"
>
- <el-input
- v-model="dataValue.dataList[index].model"
+ <el-select
+ v-model="row.model"
placeholder="璇烽�夋嫨浜у搧"
- readonly
- @focus="() => {
- dataValue.currentRowIndex = index
- showModel = true
- }"
- />
+ clearable
+ :disabled="!dataValue.isEdit"
+ style="width: 100%"
+ @visible-change="(v) => { if (v) openDialog($index) }"
+ >
+ <el-option v-if="row.model" :label="row.model" :value="row.model" />
+ </el-select>
</el-form-item>
</template>
</el-table-column>
- <el-table-column prop="processName" label="娑堣�楀伐搴�" width="180">
- <template #default="{ row, index }">
+ <el-table-column prop="processId" label="娑堣�楀伐搴�" width="150">
+ <template #default="{ row, $index }">
<el-form-item
- :prop="`dataList.${index}.processId`"
+ :prop="`dataList.${$index}.processId`"
:rules="[{ required: true, message: '璇烽�夋嫨娑堣�楀伐搴�', trigger: 'change' }]"
style="margin: 0"
>
<el-select
- v-model="dataValue.dataList[index].processId"
+ v-model="row.processId"
placeholder="璇烽�夋嫨"
filterable
clearable
style="width: 100%"
+ :disabled="!dataValue.isEdit"
>
<el-option
v-for="item in dataValue.processOptions"
@@ -57,86 +81,89 @@
</template>
</el-table-column>
- <el-table-column prop="unitQuantity" label="鍗曚綅浜у嚭鎵�闇�鏁伴噺">
- <template #default="{ row, index }">
+ <el-table-column prop="unitQuantity" label="鍗曚綅浜у嚭鎵�闇�鏁伴噺" width="150">
+ <template #default="{ row, $index }">
<el-form-item
- :prop="`dataList.${index}.unitQuantity`"
+ :prop="`dataList.${$index}.unitQuantity`"
:rules="[{ required: true, message: '璇疯緭鍏ュ崟浣嶄骇鍑烘墍闇�鏁伴噺', trigger: ['blur','change'] }]"
style="margin: 0"
>
<el-input-number
- v-model="dataValue.dataList[index].unitQuantity"
+ v-model="row.unitQuantity"
:min="0"
:precision="2"
:step="1"
controls-position="right"
style="width: 100%"
+ :disabled="!dataValue.isEdit"
/>
</el-form-item>
</template>
</el-table-column>
- <el-table-column prop="demandedQuantity" label="闇�姹傛�婚噺">
- <template #default="{ row, index }">
+ <el-table-column prop="demandedQuantity" label="闇�姹傛�婚噺" width="150">
+ <template #default="{ row, $index }">
<el-form-item
- :prop="`dataList.${index}.demandedQuantity`"
+ :prop="`dataList.${$index}.demandedQuantity`"
:rules="[{ required: true, message: '璇疯緭鍏ラ渶姹傛�婚噺', trigger: ['blur','change'] }]"
style="margin: 0"
>
<el-input-number
- v-model="dataValue.dataList[index].demandedQuantity"
+ v-model="row.demandedQuantity"
:min="0"
:precision="2"
:step="1"
controls-position="right"
style="width: 100%"
+ :disabled="!dataValue.isEdit"
/>
</el-form-item>
</template>
</el-table-column>
- <el-table-column prop="unit" label="鍗曚綅">
- <template #default="{ row, index }">
+ <el-table-column prop="unit" label="鍗曚綅" width="150">
+ <template #default="{ row, $index }">
<el-form-item
- :prop="`dataList.${index}.unit`"
+ :prop="`dataList.${$index}.unit`"
:rules="[{ required: true, message: '璇疯緭鍏ュ崟浣�', trigger: ['blur','change'] }]"
style="margin: 0"
>
<el-input
- v-model="dataValue.dataList[index].unit"
+ v-model="row.unit"
placeholder="璇疯緭鍏ュ崟浣�"
clearable
+ :disabled="!dataValue.isEdit"
/>
</el-form-item>
</template>
</el-table-column>
- <el-table-column prop="address" label="鐩樻暟锛堢洏锛�">
- <template #default="{ row, index }">
+ <el-table-column prop="diskQuantity" label="鐩樻暟锛堢洏锛�" width="150">
+ <template #default="{ row, $index }">
<el-form-item
- :prop="`dataList.${index}.address`"
+ :prop="`dataList.${$index}.diskQuantity`"
:rules="[{ required: true, message: '璇疯緭鍏ョ洏鏁�', trigger: ['blur','change'] }]"
style="margin: 0"
>
<el-input-number
- v-model="dataValue.dataList[index].address"
+ v-model="row.diskQuantity"
:min="0"
:precision="0"
:step="1"
controls-position="right"
style="width: 100%"
+ :disabled="!dataValue.isEdit"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="鎿嶄綔">
- <template #default="{ row, index }">
+ <template #default="{ row, $index }">
<el-button
type="danger"
- icon="el-icon-delete"
- circle
- @click="dataValue.dataList.splice(index, 1)"
+ text
+ @click="dataValue.dataList.splice($index, 1)"
>鍒犻櫎
</el-button>
</template>
@@ -146,12 +173,12 @@
<product-select-dialog
v-if="dataValue.showProductDialog"
- :model-value="dataValue.showProductDialog"
+ v-model:model-value="dataValue.showProductDialog"
@confirm="handleProduct"/>
<template #footer>
<div class="dialog-footer">
<el-button @click="visible = false">鍙栨秷</el-button>
- <el-button type="primary" :loading="dataValue.loading" @click="submit">
+ <el-button type="primary" :loading="dataValue.loading" @click="submit" :disabled="!dataValue.isEdit">
纭
</el-button>
</div>
@@ -160,7 +187,7 @@
</template>
<script setup lang="ts">
-import {computed, defineComponent, onMounted, reactive, ref} from "vue";
+import {computed, defineAsyncComponent, defineComponent, onMounted, reactive, ref} from "vue";
import {queryList, add} from '@/api/productionManagement/productStructure.js'
import {list} from '@/api/productionManagement/productionProcess'
import {ElMessage} from "element-plus";
@@ -170,8 +197,9 @@
name: "StructureEdit",
})
-const ProductSelectDialog = () => import('@/views/basicData/product/ProductSelectDialog.vue')
-const from = ref()
+const ProductSelectDialog = defineAsyncComponent(() => import('@/views/basicData/product/ProductSelectDialog.vue'))
+const form = ref()
+
const props = defineProps({
@@ -185,13 +213,13 @@
}
})
-const emits = defineEmits(['update:visible'])
+const emits = defineEmits(['update:showModel'])
const visible = computed({
get() {
return props.showModel
},
set(val) {
- emits('update:visible', val)
+ emits('update:showModel', val)
}
})
@@ -202,7 +230,13 @@
showProductDialog: false,
currentRowIndex: null,
loading: false,
+ isEdit: false,
});
+
+const openDialog = (index) => {
+ dataValue.currentRowIndex = index
+ dataValue.showProductDialog = true
+}
const fetchData = async () => {
const {data} = await queryList(props.productModelId)
@@ -215,18 +249,22 @@
}
const handleProduct = (row) => {
+ if (row?.length > 1) {
+ ElMessage.error('鍙兘閫夋嫨涓�涓骇鍝�')
+ }
+ dataValue.dataList[dataValue.currentRowIndex].productName = row[0].productName
+ dataValue.dataList[dataValue.currentRowIndex].model = row[0].model
+ dataValue.dataList[dataValue.currentRowIndex].productModelId = row[0].id
dataValue.showProductDialog = false
- dataValue.dataList[dataValue.currentRowIndex].speculativeTradingName = row.productName + '-' + row.model
- dataValue.dataList[dataValue.currentRowIndex].productModelId = row.id
}
const submit = () => {
- from.value.validate(valid => {
+ form.value.validate(valid => {
dataValue.loading = true
if (valid) {
add({
- productModelId: props.productModelId,
- dataList: dataValue.dataList
+ parentId: props.productModelId,
+ productStructureList: dataValue.dataList || []
}).then(res => {
ElMessage.success('淇濆瓨鎴愬姛')
visible.value = false
@@ -238,6 +276,25 @@
})
}
+const addItem = () => {
+ dataValue.dataList.push({
+ productName: '',
+ productId: '',
+ model: undefined,
+ productModelId: undefined,
+ processId: '',
+ unitQuantity: 0,
+ demandedQuantity: 0,
+ unit: '',
+ diskQuantity: 0,
+ })
+}
+
+const cancelEdit = () => {
+ dataValue.isEdit = false
+ dataValue.dataList = dataValue.dataList.filter(item => item.id !== undefined)
+}
+
onMounted(() => {
fetchData()
fetchProcessOptions()
diff --git a/src/views/productionManagement/productStructure/index.vue b/src/views/productionManagement/productStructure/index.vue
index 44fae1c..bdbec9c 100644
--- a/src/views/productionManagement/productStructure/index.vue
+++ b/src/views/productionManagement/productStructure/index.vue
@@ -28,11 +28,9 @@
<script setup>
import {ref} from "vue";
-import {
- modelPage,
-} from "@/api/basicData/product.js";
+import {productModelList} from "@/api/basicData/productModel.js";
-const StructureEdit = () => import('@/views/productionManagement/productStructure/StructureEdit.vue')
+const StructureEdit = defineAsyncComponent(() => import('@/views/productionManagement/productStructure/StructureEdit.vue'))
const tableColumn = ref([
{
@@ -88,11 +86,10 @@
};
const getModelList = () => {
tableLoading.value = true;
- modelPage({
+ productModelList({
current: page.current,
size: page.size,
}).then((res) => {
- console.log("res", res);
tableData.value = res.records;
page.total = res.total;
tableLoading.value = false;
--
Gitblit v1.9.3