From d460a2475ccf345d119701f3c631584f747ce2f5 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 15 六月 2026 17:17:25 +0800
Subject: [PATCH] 君歌 1.不需要bom、生产核算 2.新增销售台账后自动生成一个生产订单,然后对订单进行排产 3.生产排产要求可以选择计划时间,时间格式为年月日+时分秒;也要可以多选报工人 4.web和app生产报工中要细分报工开始和报工结束两个操作,根据操作的提交时间记录实际报工时长展示报工台账中 5.报工人选择的谁,只有在相关账号才能看到可报工的数据 6.不合格管理字段按照单据进行修改。 7.生产工时、质量问题汇总、客户档案、销售及回款都能从各模块中导出数据
---
src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue | 239 +++++++++++++++++++++++++++++------------------------------
1 files changed, 116 insertions(+), 123 deletions(-)
diff --git a/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue b/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue
index e53fc49..c423cea 100644
--- a/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue
+++ b/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue
@@ -1,117 +1,120 @@
<template>
<div>
<el-dialog
- v-model="dialogFormVisible"
- :title="operationType === 'add' ? '鏂板涓嶅悎鏍煎鐞�' : '澶勭悊涓嶅悎鏍�'"
- width="70%"
- @close="closeDia"
+ v-model="dialogFormVisible"
+ :title="operationType === 'add' ? '鏂板涓嶅悎鏍煎鐞�' : '澶勭悊涓嶅悎鏍�'"
+ width="75%"
+ @close="closeDia"
>
- <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
- <el-row :gutter="30">
+ <el-form :model="form" label-width="130px" :rules="rules" ref="formRef">
+ <el-row :gutter="20">
<el-col :span="12">
- <el-form-item label="绫诲埆锛�" prop="inspectType">
- <el-select v-model="form.inspectType" disabled>
+ <el-form-item label="绫诲埆">
+ <el-select v-model="form.inspectType" disabled style="width: 100%">
<el-option label="鍘熸潗鏂欐楠�" :value="0" />
<el-option label="杩囩▼妫�楠�" :value="1" />
<el-option label="鍑哄巶妫�楠�" :value="2" />
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="浜у搧鍚嶇О锛�" prop="productId">
+ <el-form-item label="浜у搧鍚嶇О">
<el-tree-select
- v-model="form.productId"
- placeholder="璇烽�夋嫨"
- clearable
- disabled
- check-strictly
- @change="getModels"
- :data="productOptions"
- :render-after-expand="false"
- style="width: 100%"
+ v-model="form.productId"
+ placeholder="璇烽�夋嫨"
+ clearable
+ disabled
+ check-strictly
+ @change="getModels"
+ :data="productOptions"
+ :render-after-expand="false"
+ style="width: 100%"
/>
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="model">
- <el-input v-model="form.model" placeholder="璇疯緭鍏�" clearable disabled/>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="瑙勬牸鍨嬪彿">
+ <el-input v-model="form.model" placeholder="璇疯緭鍏�" clearable disabled />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍗曚綅">
+ <el-input v-model="form.unit" placeholder="璇疯緭鍏�" clearable disabled />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鏁伴噺">
+ <el-input v-model="form.quantity" placeholder="璇疯緭鍏�" clearable disabled />
</el-form-item>
</el-col>
</el-row>
- <el-row :gutter="30">
+
+ <el-row :gutter="20">
<el-col :span="12">
- <el-form-item label="鍗曚綅锛�" prop="unit">
- <el-input v-model="form.unit" placeholder="璇疯緭鍏�" clearable disabled/>
+ <el-form-item label="妫�楠屽憳">
+ <el-input v-model="form.checkName" placeholder="璇疯緭鍏�" clearable disabled />
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="鏁伴噺锛�" prop="quantity">
- <el-input v-model="form.quantity" placeholder="璇疯緭鍏�" clearable disabled/>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="妫�楠屽憳锛�" prop="checkName">
- <el-input v-model="form.checkName" placeholder="璇疯緭鍏�" clearable disabled/>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="妫�娴嬫棩鏈燂細" prop="checkTime">
+ <el-form-item label="妫�娴嬫棩鏈�">
<el-date-picker
- v-model="form.checkTime"
- type="date"
- disabled
- placeholder="璇烽�夋嫨鏃ユ湡"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- clearable
- style="width: 100%"
+ v-model="form.checkTime"
+ type="date"
+ disabled
+ placeholder="璇烽�夋嫨鏃ユ湡"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ clearable
+ style="width: 100%"
/>
</el-form-item>
</el-col>
</el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="涓嶅悎鏍肩幇璞★細" prop="defectivePhenomena">
- <el-input v-model="form.defectivePhenomena" placeholder="璇疯緭鍏�" clearable/>
+
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="涓嶅悎鏍肩幇璞�" prop="defectivePhenomena">
+ <el-input v-model="form.defectivePhenomena" type="textarea" :rows="2" placeholder="璇疯緭鍏�" clearable />
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="澶勭悊缁撴灉锛�" prop="dealResult">
- <el-select v-model="form.dealResult" placeholder="璇烽�夋嫨" clearable>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="澶勭悊缁撴灉" prop="dealResult">
+ <el-select v-model="form.dealResult" placeholder="璇烽�夋嫨" clearable style="width: 100%">
<el-option :label="item.label" :value="item.value" v-for="item in filteredRejectionHandling" :key="item.value" />
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="澶勭悊浜猴細" prop="dealName">
+ <el-col :span="8">
+ <el-form-item label="澶勭悊浜�" prop="dealName">
<el-select v-model="form.dealName" placeholder="璇烽�夋嫨" clearable style="width: 100%">
- <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
+ <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName" />
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="澶勭悊鏃ユ湡锛�" prop="dealTime">
+ <el-col :span="8">
+ <el-form-item label="澶勭悊鏃ユ湡" prop="dealTime">
<el-date-picker
- v-model="form.dealTime"
- type="date"
- placeholder="璇烽�夋嫨鏃ユ湡"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- clearable
- style="width: 100%"
+ v-model="form.dealTime"
+ type="date"
+ placeholder="璇烽�夋嫨鏃ユ湡"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ clearable
+ style="width: 100%"
/>
</el-form-item>
</el-col>
</el-row>
- <el-row :gutter="30">
+
+ <el-row :gutter="20">
<el-col :span="24">
- <el-form-item label="闄勪欢锛�">
+ <el-form-item label="闄勪欢">
<FileUpload v-model:file-list="form.storageBlobDTOs" :file-list="form.storageBlobVOs" />
</el-form-item>
</el-col>
@@ -128,20 +131,22 @@
</template>
<script setup>
-import {ref, reactive, toRefs, computed} from "vue";
-import {productTreeList} from "@/api/basicData/product.js";
+import { ref, reactive, toRefs, computed } from "vue";
+import { productTreeList } from "@/api/basicData/product.js";
import {
getQualityUnqualifiedInfo,
qualityUnqualifiedDeal
} from "@/api/qualityManagement/nonconformingManagement.js";
-import {userListNoPage} from "@/api/system/user.js";
+import { userListNoPage } from "@/api/system/user.js";
import FileUpload from "@/components/AttachmentUpload/file/index.vue";
-const { proxy } = getCurrentInstance()
-const emit = defineEmits(['close'])
-const { rejection_handling } = proxy.useDict("rejection_handling")
+const { proxy } = getCurrentInstance();
+const emit = defineEmits(["close"]);
+
+const { rejection_handling } = proxy.useDict("rejection_handling");
const dialogFormVisible = ref(false);
-const operationType = ref('')
+const operationType = ref("");
+
const data = reactive({
form: {
checkTime: "",
@@ -154,48 +159,36 @@
quantity: "",
checkCompany: "",
checkResult: "",
- inspectType: '',
- defectivePhenomena: '',
- dealResult: '',
- dealName: '',
- dealTime: '',
+ inspectType: "",
+ defectivePhenomena: "",
+ dealResult: "",
+ dealName: "",
+ dealTime: "",
method: undefined,
storageBlobDTOs: [],
storageBlobVOs: [],
},
rules: {
- checkTime: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" },],
- process: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- checkName: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- productId: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- model: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- unit: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- quantity: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- checkCompany: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- checkResult: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- defectivePhenomena: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- dealResult: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+ defectivePhenomena: [{ required: true, message: "璇疯緭鍏ヤ笉鍚堟牸鐜拌薄", trigger: "blur" }],
+ dealResult: [{ required: true, message: "璇烽�夋嫨澶勭悊缁撴灉", trigger: "change" }],
dealName: [{ required: true, message: "璇烽�夋嫨澶勭悊浜�", trigger: "change" }],
- dealTime: [{ required: true, message: "璇疯緭鍏�", trigger: "change" }],
+ dealTime: [{ required: true, message: "璇烽�夋嫨澶勭悊鏃ユ湡", trigger: "change" }],
},
});
const { form, rules } = toRefs(data);
const productOptions = ref([]);
-const userList = ref([]); // 澶勭悊浜轰笅鎷夊垪琛�
+const userList = ref([]);
const filteredRejectionHandling = computed(() => {
const data = rejection_handling.value;
if (form.value.method) {
- return data.filter(item => item && item.label && item.label !== '杩斿伐' && item.label !== '杩斾慨')
+ return data.filter(item => item && item.label && item.label !== "杩斿伐" && item.label !== "杩斾慨");
}
- return data
-})
+ return data;
+});
-
-// 鎵撳紑寮规
const openDialog = async (type, row) => {
operationType.value = type;
- // 澶勭悊浜轰笅鎷夊垪琛�
try {
const userRes = await userListNoPage();
userList.value = userRes.data || [];
@@ -206,74 +199,74 @@
dialogFormVisible.value = true;
form.value = {};
getProductOptions();
- if (operationType.value === 'edit') {
+ if (operationType.value === "edit") {
getQualityUnqualifiedInfo(row.id).then(res => {
- const { inspectState, ...rest } = (res.data || {})
- // 鏈夋暟鎹氨鏄剧ず榛樿鍊硷紝娌℃湁灏变笉鏄剧ず
- form.value = { ...rest }
- })
+ const { inspectState, ...rest } = (res.data || {});
+ form.value = { ...rest };
+ });
}
-}
+};
+
const getProductOptions = () => {
productTreeList().then((res) => {
productOptions.value = convertIdToValue(res);
});
};
+
const getModels = (value) => {
form.value.productName = findNodeById(productOptions.value, value);
};
+
const findNodeById = (nodes, productId) => {
for (let i = 0; i < nodes.length; i++) {
if (nodes[i].value === productId) {
- return nodes[i].label; // 鎵惧埌鑺傜偣锛岃繑鍥炶鑺傜偣
+ return nodes[i].label;
}
if (nodes[i].children && nodes[i].children.length > 0) {
const foundNode = findNodeById(nodes[i].children, productId);
if (foundNode) {
- return foundNode; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐�
+ return foundNode;
}
}
}
- return null; // 娌℃湁鎵惧埌鑺傜偣锛岃繑鍥瀗ull
+ return null;
};
+
function convertIdToValue(data) {
return data.map((item) => {
const { id, children, ...rest } = item;
const newItem = {
...rest,
- value: id, // 灏� id 鏀逛负 value
+ value: id,
};
if (children && children.length > 0) {
newItem.children = convertIdToValue(children);
}
-
return newItem;
});
}
-// 鎻愪氦浜у搧琛ㄥ崟
+
const submitForm = () => {
proxy.$refs.formRef.validate(valid => {
if (valid) {
- // 鐘舵�佸瓧娈典笉鍦ㄨ〃鍗曞~鍐欙紝涔熶笉浼犵粰鍚庣锛涘鐞嗙粺涓�璧� /deal 鎺ュ彛
- const { inspectState, ...payload } = (form.value || {})
+ const { inspectState, ...payload } = (form.value || {});
qualityUnqualifiedDeal(payload).then(() => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeDia();
- })
+ });
}
- })
-}
-// 鍏抽棴寮规
+ });
+};
+
const closeDia = () => {
proxy.resetForm("formRef");
dialogFormVisible.value = false;
- emit('close')
+ emit("close");
};
+
defineExpose({
openDialog,
});
</script>
-<style scoped>
-
-</style>
\ No newline at end of file
+<style scoped></style>
--
Gitblit v1.9.3