From 19aa78a505d468739a61054f07d0840477192b2d Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 27 三月 2026 10:10:10 +0800
Subject: [PATCH] 军泰伟业 1.产品维护列表展示工艺路线
---
src/views/basicData/product/index.vue | 192 +++++++++++++++++++++++++++++++++++++++++------
1 files changed, 165 insertions(+), 27 deletions(-)
diff --git a/src/views/basicData/product/index.vue b/src/views/basicData/product/index.vue
index 5a243a3..940c4b5 100644
--- a/src/views/basicData/product/index.vue
+++ b/src/views/basicData/product/index.vue
@@ -96,19 +96,17 @@
clearable
/>
</el-form-item>
- <el-form-item label="瑙勬牸鍨嬪彿" prop="drawingNumber">
- <el-input
- v-model="modelForm.drawingNumber"
- placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
- clearable
- />
- </el-form-item>
<el-form-item label="鍗曚綅" prop="unit">
- <el-input
+ <el-select
v-model="modelForm.unit"
- placeholder="璇疯緭鍏ュ崟浣�"
+ placeholder="璇烽�夋嫨鍗曚綅"
clearable
- />
+ style="width: 100%"
+ >
+ <el-option label="浠�" value="浠�" />
+ <el-option label="濂�" value="濂�" />
+ <el-option label="鍙�" value="鍙�" />
+ </el-select>
</el-form-item>
<el-form-item label="浜у搧灞炴��" prop="productType">
<el-select
@@ -122,6 +120,43 @@
<el-option label="濮斿" :value="3" />
</el-select>
</el-form-item>
+ <el-form-item label="宸ヨ壓璺嚎" prop="routeId">
+ <el-select
+ v-model="modelForm.routeId"
+ placeholder="璇烽�夋嫨宸ヨ壓璺嚎"
+ clearable
+ style="width: 100%"
+ filterable
+ >
+ <el-option
+ v-for="item in processRouteList"
+ :key="item.id"
+ :label="item.processRouteName"
+ :value="item.id"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="涓婁紶鍥剧焊" prop="drawingFile">
+ <el-upload
+ v-model:file-list="drawingFileList"
+ :action="upload.url"
+ :headers="upload.headers"
+ :data="upload.data"
+ :on-success="handleDrawingUploadSuccess"
+ :on-remove="handleDrawingRemove"
+ :before-upload="handleDrawingBeforeUpload"
+ :limit="1"
+ accept=".pdf,.jpg,.jpeg,.png,.dwg"
+ list-type="picture-card"
+ >
+ <el-icon class="avatar-uploader-icon"><Plus /></el-icon>
+ <template #tip>
+ <div class="el-upload__tip">
+ 鏀寔 pdf銆乯pg銆乯peg銆乸ng銆乨wg 鏍煎紡锛屽ぇ灏忎笉瓒呰繃 10MB
+ </div>
+ </template>
+ </el-upload>
+ </el-form-item>
</el-form>
</FormDialog>
@@ -130,6 +165,7 @@
title="浜у搧瀵煎叆"
width="600px"
@cancel="importDia = false"
+ @confirm="submitImport"
>
<el-upload
ref="importUploadRef"
@@ -156,20 +192,15 @@
</div>
</template>
</el-upload>
- <template #footer>
- <div class="dialog-footer">
- <el-button type="primary" @click="submitImport">纭瀵煎叆</el-button>
- </div>
- </template>
</FormDialog>
</div>
</template>
<script setup>
-import { ref, reactive } from "vue";
+import { ref, reactive, onMounted } from "vue";
import { ElMessageBox } from "element-plus";
+import { Plus } from "@element-plus/icons-vue";
import { getToken } from "@/utils/auth.js";
-import { FileUpload } from "@/components/Upload";
import FormDialog from "@/components/Dialog/FormDialog.vue";
import {
addOrEditProductModel,
@@ -177,6 +208,7 @@
productListPage,
downloadTemplate,
} from "@/api/basicData/product.js";
+import { listPage as getProcessRouteList } from "@/api/productionManagement/processRoute.js";
import ImportExcel from "./ImportExcel/index.vue";
const { proxy } = getCurrentInstance();
@@ -189,6 +221,14 @@
const tableLoading = ref(false);
const selectedRows = ref([]);
const modelFormRef = ref();
+const processRouteList = ref([]);
+const drawingFileList = ref([]);
+
+const upload = reactive({
+ url: import.meta.env.VITE_APP_BASE_API + "/file/upload",
+ headers: { Authorization: "Bearer " + getToken() },
+ data: { type: 13 },
+});
const queryForm = reactive({
productName: "",
@@ -214,20 +254,25 @@
minWidth: 150,
},
{
- label: "瑙勬牸鍨嬪彿",
- prop: "drawingNumber",
- minWidth: 150,
- },
- {
label: "鍗曚綅",
prop: "unit",
+ minWidth: 100,
+ },
+ {
+ label: "宸ヨ壓璺嚎",
+ prop: "routeName",
minWidth: 100,
},
{
label: "浜у搧灞炴��",
prop: "productType",
width: 100,
+ dataType: "tag",
formatData: (v) => ({ "1": "鑷埗", "2": "澶栬喘", "3": "濮斿" }[String(v)] ?? v),
+ formatType: (v) => {
+ const typeMap = { "1": "success", "2": "warning", "3": "info" };
+ return typeMap[String(v)] || "info";
+ },
},
{
dataType: "action",
@@ -251,8 +296,11 @@
productName: "",
model: "",
unit: "",
- drawingNumber: "",
productType: null,
+ routeId: null,
+ drawingFile: "",
+ tempFileIds: [],
+ salesLedgerFiles: [],
},
modelRules: {
productName: [
@@ -260,8 +308,7 @@
{ max: 50, message: "浜у搧鍚嶇О涓嶈兘瓒呰繃50涓瓧绗�", trigger: "blur" },
],
model: [{ required: true, message: "璇疯緭鍏ュ浘绾哥紪鍙�", trigger: "blur" }],
- unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }],
- drawingNumber: [],
+ unit: [{ required: true, message: "璇烽�夋嫨鍗曚綅", trigger: "change" }],
productType: [{ required: true, message: "璇烽�夋嫨浜у搧灞炴��", trigger: "change" }],
},
});
@@ -333,10 +380,22 @@
modelForm.value.model = "";
modelForm.value.id = "";
modelForm.value.unit = "";
- modelForm.value.drawingNumber = "";
modelForm.value.productType = null;
+ modelForm.value.routeId = null;
+ modelForm.value.drawingFile = "";
+ modelForm.value.tempFileIds = [];
+ modelForm.value.salesLedgerFiles = [];
+ drawingFileList.value = [];
if (type === "edit") {
modelForm.value = { ...data };
+ modelForm.value.tempFileIds = data.tempFileIds || [];
+ modelForm.value.salesLedgerFiles = data.salesLedgerFiles || [];
+ if (data.drawingFile) {
+ drawingFileList.value = [{
+ name: data.drawingFile.split('/').pop(),
+ url: data.drawingFile
+ }];
+ }
}
};
@@ -428,7 +487,61 @@
proxy.download("/basic/product/downloadTemplate", {}, "浜у搧瀵煎叆妯℃澘.xlsx");
};
-getModelList();
+const getProcessRouteListData = () => {
+ getProcessRouteList({ current: 1, size: 1000 }).then((res) => {
+ processRouteList.value = res.data.records || [];
+ }).catch(() => {
+ processRouteList.value = [];
+ });
+};
+
+const handleDrawingBeforeUpload = (file) => {
+ const isAllowed = [
+ 'application/pdf',
+ 'image/jpeg',
+ 'image/jpg',
+ 'image/png',
+ 'application/dwg'
+ ].includes(file.type) || file.name.endsWith('.dwg');
+ const isLt10M = file.size / 1024 / 1024 < 10;
+
+ if (!isAllowed) {
+ proxy.$modal.msgError("鍙兘涓婁紶 pdf銆乯pg銆乯peg銆乸ng銆乨wg 鏍煎紡鐨勬枃浠讹紒");
+ return false;
+ }
+ if (!isLt10M) {
+ proxy.$modal.msgError("涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 10MB锛�");
+ return false;
+ }
+ return true;
+};
+
+const handleDrawingUploadSuccess = (response, file, fileList) => {
+ console.log('涓婁紶鎴愬姛鍝嶅簲', response);
+ console.log('response.data', response.data);
+ if (response.code === 200) {
+ modelForm.value.tempFileIds = [response.data?.tempId];
+ modelForm.value.salesLedgerFiles = [{
+ tempId: response.data?.tempId,
+ originalName: response.data?.originalName || file.name,
+ tempPath: response.data?.tempPath,
+ type: response.data?.type || 13
+ }];
+ proxy.$modal.msgSuccess("涓婁紶鎴愬姛");
+ } else {
+ proxy.$modal.msgError(response.msg || "涓婁紶澶辫触");
+ }
+};
+
+const handleDrawingRemove = (file) => {
+ modelForm.value.tempFileIds = [];
+ modelForm.value.salesLedgerFiles = [];
+};
+
+onMounted(() => {
+ getModelList();
+ getProcessRouteListData();
+});
</script>
<style scoped>
@@ -468,6 +581,31 @@
margin-top: 16px;
}
+.avatar-uploader-icon {
+ font-size: 28px;
+ color: #8c939d;
+ width: 148px;
+ height: 148px;
+ text-align: center;
+ line-height: 148px;
+}
+
+:deep(.el-upload--picture-card) {
+ width: 148px;
+ height: 148px;
+}
+
+:deep(.el-upload-list__item) {
+ width: 148px;
+ height: 148px;
+}
+
+:deep(.el-upload__tip) {
+ font-size: 12px;
+ color: #909399;
+ margin-top: 8px;
+}
+
:deep(.el-dialog__body) {
padding: 20px 24px;
}
--
Gitblit v1.9.3