From ab6f485ee5e2f7b49ad2ba91975f25a70144529a Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期五, 08 八月 2025 17:39:44 +0800
Subject: [PATCH] 质量管理原材料检验修改。
---
src/views/qualityManagement/rawMaterialInspection/components/formDia.vue | 137 +++++++++++++++++++---
src/api/qualityManagement/rawMaterialInspection.js | 23 +++
src/views/qualityManagement/rawMaterialInspection/index.vue | 157 +++++++++++++++++++++++---
src/api/qualityManagement/metricMaintenance.js | 11 +
4 files changed, 290 insertions(+), 38 deletions(-)
diff --git a/src/api/qualityManagement/metricMaintenance.js b/src/api/qualityManagement/metricMaintenance.js
index 8857387..9bdff23 100644
--- a/src/api/qualityManagement/metricMaintenance.js
+++ b/src/api/qualityManagement/metricMaintenance.js
@@ -8,6 +8,7 @@
params: query,
})
}
+
// 鏂板鎸囨爣鍒楄〃
export function qualityTestStandardAdd(query) {
return request({
@@ -16,6 +17,7 @@
data: query,
})
}
+
// 淇敼鎸囨爣鍒楄〃
export function qualityTestStandardUpdate(query) {
return request({
@@ -24,6 +26,7 @@
data: query,
})
}
+
// 鍒犻櫎鎸囨爣鍒楄〃
export function qualityTestStandardDel(query) {
return request({
@@ -31,4 +34,12 @@
method: 'delete',
data: query,
})
+}
+
+// 鍒犻櫎鎸囨爣鍒楄〃
+export function qualityInspectDetailByProductId(productId) {
+ return request({
+ url: '/quality/qualityTestStandard/product/' + productId,
+ method: 'get',
+ })
}
\ No newline at end of file
diff --git a/src/api/qualityManagement/rawMaterialInspection.js b/src/api/qualityManagement/rawMaterialInspection.js
index e909d1a..dcb3869 100644
--- a/src/api/qualityManagement/rawMaterialInspection.js
+++ b/src/api/qualityManagement/rawMaterialInspection.js
@@ -8,6 +8,7 @@
params: query,
})
}
+
// 鏂板鍘熸潗鏂欐楠�
export function qualityInspectAdd(query) {
return request({
@@ -16,6 +17,7 @@
data: query,
})
}
+
// 淇敼鍘熸潗鏂欐楠�
export function qualityInspectUpdate(query) {
return request({
@@ -24,6 +26,7 @@
data: query,
})
}
+
// 鍒犻櫎鍘熸潗鏂欐楠�
export function qualityInspectDel(query) {
return request({
@@ -32,3 +35,23 @@
data: query,
})
}
+
+// 鎻愪氦鍘熸潗鏂欐楠�
+export function submitQualityInspect(data) {
+ return request({
+ url: '/quality/qualityInspect/submit',
+ method: 'post',
+ data: data,
+ })
+}
+
+// 鎻愪氦鍘熸潗鏂欐楠�
+export function downloadQualityInspect(data) {
+ return request({
+ url: '/quality/qualityInspect/down',
+ method: 'post',
+ data: data,
+ responseType: "blob",
+ })
+}
+
diff --git a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
index be15275..b61f84a 100644
--- a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
@@ -54,7 +54,8 @@
</el-col>
<el-col :span="12">
<el-form-item label="鏁伴噺锛�" prop="quantity">
- <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.quantity" placeholder="璇疯緭鍏�" clearable :precision="2"/>
+ <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.quantity" placeholder="璇疯緭鍏�"
+ clearable :precision="2"/>
</el-form-item>
</el-col>
</el-row>
@@ -67,8 +68,8 @@
<el-col :span="12">
<el-form-item label="妫�娴嬬粨鏋滐細" prop="checkResult">
<el-select v-model="form.checkResult">
- <el-option label="鍚堟牸" value="鍚堟牸" />
- <el-option label="涓嶅悎鏍�" value="涓嶅悎鏍�" />
+ <el-option label="鍚堟牸" value="鍚堟牸"/>
+ <el-option label="涓嶅悎鏍�" value="涓嶅悎鏍�"/>
</el-select>
</el-form-item>
</el-col>
@@ -77,7 +78,7 @@
<el-col :span="12">
<el-form-item label="妫�楠屽憳锛�" prop="checkName">
<el-input v-model="form.checkName" placeholder="璇疯緭鍏�" clearable/>
-
+
</el-form-item>
</el-col>
<el-col :span="12">
@@ -95,6 +96,22 @@
</el-col>
</el-row>
</el-form>
+ <div style="margin-bottom: 10px;text-align: right">
+ <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
+ </div>
+ <PIMTable
+ rowKey="id"
+ :column="tableColumn"
+ :tableData="tableData"
+ :tableLoading="tableLoading"
+ :isSelection="true"
+ @selection-change="handleSelectionChange"
+ height="400"
+ >
+ <template #slot="{ row }">
+ <el-input v-model="row.testValue" clearable/>
+ </template>
+ </PIMTable>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm">纭</el-button>
@@ -110,7 +127,11 @@
import {getOptions} from "@/api/procurementManagement/procurementLedger.js";
import {productTreeList} from "@/api/basicData/product.js";
import {qualityInspectAdd, qualityInspectUpdate} from "@/api/qualityManagement/rawMaterialInspection.js";
-const { proxy } = getCurrentInstance()
+import {ElMessageBox} from "element-plus";
+import {qualityInspectParamDel, qualityInspectParamInfo} from "@/api/qualityManagement/qualityInspectParam.js";
+import {qualityInspectDetailByProductId} from "@/api/qualityManagement/metricMaintenance.js";
+
+const {proxy} = getCurrentInstance()
const emit = defineEmits(['close'])
const dialogFormVisible = ref(false);
@@ -129,20 +150,48 @@
checkResult: "",
},
rules: {
- checkTime: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" },],
- supplier: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- checkName: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- productId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- model: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- unit: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- checkCompany: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- checkResult: [{ required: true, message: "璇烽�夋嫨妫�娴嬬粨鏋�", trigger: "change" }],
+ checkTime: [{required: false, message: "璇疯緭鍏�", trigger: "blur"},],
+ supplier: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+ checkName: [{required: false, message: "璇疯緭鍏�", trigger: "blur"}],
+ productId: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+ model: [{required: false, message: "璇疯緭鍏�", trigger: "blur"}],
+ unit: [{required: false, message: "璇疯緭鍏�", trigger: "blur"}],
+ quantity: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+ checkCompany: [{required: false, message: "璇疯緭鍏�", trigger: "blur"}],
+ checkResult: [{required: true, message: "璇烽�夋嫨妫�娴嬬粨鏋�", trigger: "change"}],
},
});
-const { form, rules } = toRefs(data);
+const tableColumn = ref([
+ {
+ label: "鎸囨爣",
+ prop: "parameterItem",
+ },
+ {
+ label: "鍗曚綅",
+ prop: "unit",
+ },
+ {
+ label: "鏍囧噯鍊�",
+ prop: "standardValue",
+ },
+ {
+ label: "鍐呮帶鍊�",
+ prop: "controlValue",
+ },
+ {
+ label: "妫�楠屽��",
+ prop: "testValue",
+ dataType: 'slot',
+ slot: 'slot',
+ },
+]);
+const tableData = ref([]);
+const tableLoading = ref(false);
+
+const {form, rules} = toRefs(data);
const supplierList = ref([]);
const productOptions = ref([]);
+const currentProductId = ref(0);
// 鎵撳紑寮规
const openDialog = (type, row) => {
@@ -154,6 +203,8 @@
getProductOptions();
if (operationType.value === 'edit') {
form.value = {...row}
+ currentProductId.value = row.productId || 0
+ getQualityInspectParamList(row.id)
}
}
const getProductOptions = () => {
@@ -162,7 +213,11 @@
});
};
const getModels = (value) => {
+ currentProductId.value = value
form.value.productName = findNodeById(productOptions.value, value);
+ if (currentProductId) {
+ getList();
+ }
};
const findNodeById = (nodes, productId) => {
for (let i = 0; i < nodes.length; i++) {
@@ -178,9 +233,10 @@
}
return null; // 娌℃湁鎵惧埌鑺傜偣锛岃繑鍥瀗ull
};
+
function convertIdToValue(data) {
return data.map((item) => {
- const { id, children, ...rest } = item;
+ const {id, children, ...rest} = item;
const newItem = {
...rest,
value: id, // 灏� id 鏀逛负 value
@@ -188,22 +244,24 @@
if (children && children.length > 0) {
newItem.children = convertIdToValue(children);
}
-
+
return newItem;
});
}
+
// 鎻愪氦浜у搧琛ㄥ崟
const submitForm = () => {
proxy.$refs.formRef.validate(valid => {
if (valid) {
form.value.inspectType = 0
+ const data = {...form.value, qualityInspectParams: tableData.value}
if (operationType.value === "add") {
- qualityInspectAdd(form.value).then(res => {
+ qualityInspectAdd(data).then(res => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeDia();
})
} else {
- qualityInspectUpdate(form.value).then(res => {
+ qualityInspectUpdate(data).then(res => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeDia();
})
@@ -211,9 +269,50 @@
}
})
}
+
+const handleSelectionChange = (selection) => {
+ selectedRows.value = selection;
+};
+
+const handleDelete = () => {
+ let ids = [];
+ if (selectedRows.value.length > 0) {
+ ids = selectedRows.value.map((item) => item.id);
+ } else {
+ proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
+ return;
+ }
+ ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "瀵煎嚭", {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ qualityInspectParamDel(ids).then((res) => {
+ proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ getList();
+ });
+ })
+ .catch(() => {
+ proxy.$modal.msg("宸插彇娑�");
+ });
+};
+
+const getList = () => {
+ qualityInspectDetailByProductId(currentProductId.value).then(res => {
+ tableData.value = res.data;
+ })
+}
+
+const getQualityInspectParamList = (id) => {
+ qualityInspectParamInfo(id).then(res => {
+ tableData.value = res.data;
+ })
+}
// 鍏抽棴寮规
const closeDia = () => {
proxy.resetForm("formRef");
+ tableData.value = []
dialogFormVisible.value = false;
emit('close')
};
diff --git a/src/views/qualityManagement/rawMaterialInspection/index.vue b/src/views/qualityManagement/rawMaterialInspection/index.vue
index bbee1bc..16db3eb 100644
--- a/src/views/qualityManagement/rawMaterialInspection/index.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/index.vue
@@ -11,11 +11,12 @@
clearable
:prefix-icon="Search"
/>
- <span style="margin-left: 10px" class="search_title">妫�娴嬫棩鏈燂細</span>
- <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
- placeholder="璇烽�夋嫨" clearable @change="changeDaterange" />
+ <span style="margin-left: 10px" class="search_title">妫�娴嬫棩鏈燂細</span>
+ <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
+ placeholder="璇烽�夋嫨" clearable @change="changeDaterange"/>
<el-button type="primary" @click="handleQuery" style="margin-left: 10px"
- >鎼滅储</el-button
+ >鎼滅储
+ </el-button
>
</div>
<div>
@@ -40,18 +41,42 @@
<InspectionFormDia ref="inspectionFormDia" @close="handleQuery"></InspectionFormDia>
<FormDia ref="formDia" @close="handleQuery"></FormDia>
<files-dia ref="filesDia" @close="handleQuery"></files-dia>
+ <el-dialog v-model="dialogFormVisible" title="缂栬緫妫�楠屽憳" width="70%"
+ @close="closeDia">
+ <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
+ <el-form-item label="妫�楠屽憳锛�" prop="checkName">
+ <el-select v-model="form.checkName" placeholder="璇烽�夋嫨" clearable>
+ <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName"
+ :value="item.nickName"/>
+ </el-select>
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button type="primary" @click="submitForm">纭</el-button>
+ <el-button @click="closeDia">鍙栨秷</el-button>
+ </div>
+ </template>
+ </el-dialog>
+
</div>
</template>
<script setup>
-import { Search } from "@element-plus/icons-vue";
+import {Search} from "@element-plus/icons-vue";
import {onMounted, ref} from "vue";
import InspectionFormDia from "@/views/qualityManagement/rawMaterialInspection/components/inspectionFormDia.vue";
import FormDia from "@/views/qualityManagement/rawMaterialInspection/components/formDia.vue";
import {ElMessageBox} from "element-plus";
-import {qualityInspectDel, qualityInspectListPage} from "@/api/qualityManagement/rawMaterialInspection.js";
+import {
+ downloadQualityInspect,
+ qualityInspectDel,
+ qualityInspectListPage, qualityInspectUpdate,
+ submitQualityInspect
+} from "@/api/qualityManagement/rawMaterialInspection.js";
import FilesDia from "@/views/qualityManagement/rawMaterialInspection/components/filesDia.vue";
import dayjs from "dayjs";
+import {userListNoPage} from "@/api/system/user.js";
const data = reactive({
searchForm: {
@@ -63,8 +88,11 @@
entryDateStart: dayjs().format("YYYY-MM-DD"),
entryDateEnd: dayjs().add(1, "day").format("YYYY-MM-DD"),
},
+ rules: {
+ checkName: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
+ },
});
-const { searchForm } = toRefs(data);
+const {searchForm, rules} = toRefs(data);
const tableColumn = ref([
{
label: "妫�娴嬫棩鏈�",
@@ -107,12 +135,23 @@
prop: "checkResult",
dataType: "tag",
formatType: (params) => {
- if (params == '涓嶅悎鏍�') {
+ if (params === '涓嶅悎鏍�') {
return "danger";
- } else if (params == '鍚堟牸') {
+ } else if (params === '鍚堟牸') {
return "success";
} else {
return null;
+ }
+ },
+ },
+ {
+ label: "鎻愪氦鐘舵��",
+ prop: "inspectState",
+ formatData: (params) => {
+ if (params) {
+ return "宸叉彁浜�";
+ } else {
+ return "鏈彁浜�";
}
},
},
@@ -121,7 +160,7 @@
label: "鎿嶄綔",
align: "center",
fixed: "right",
- width: 190,
+ width: 250,
operation: [
{
name: "缂栬緫",
@@ -131,17 +170,35 @@
},
},
{
- name: "鏂板妫�楠岃褰�",
- type: "text",
- clickFun: (row) => {
- openInspectionForm("edit", row);
- },
- },
- {
name: "闄勪欢",
type: "text",
clickFun: (row) => {
openFilesFormDia(row);
+ },
+ },
+ {
+ name: "鎻愪氦",
+ type: "text",
+ clickFun: (row) => {
+ submit(row.id);
+ },
+ },
+ {
+ name: "鍒嗛厤妫�楠屽憳",
+ type: "text",
+ clickFun: (row) => {
+ if (!row.checkName) {
+ open(row)
+ } else {
+ proxy.$modal.msgError("妫�楠屽憳宸插瓨鍦�");
+ }
+ },
+ },
+ {
+ name: "涓嬭浇",
+ type: "text",
+ clickFun: (row) => {
+ downLoadFile(row);
},
},
],
@@ -150,15 +207,21 @@
const tableData = ref([]);
const selectedRows = ref([]);
const tableLoading = ref(false);
+const userList = ref([]);
+const dialogFormVisible = ref(false);
+const form = ref({
+ checkName: ""
+});
const page = reactive({
current: 1,
size: 100,
total: 0
});
+const currentRow = ref(null)
const formDia = ref()
const filesDia = ref()
const inspectionFormDia = ref()
-const { proxy } = getCurrentInstance()
+const {proxy} = getCurrentInstance()
const changeDaterange = (value) => {
searchForm.value.entryDateStart = undefined;
searchForm.value.entryDateEnd = undefined;
@@ -181,7 +244,7 @@
};
const getList = () => {
tableLoading.value = true;
- const params = { ...searchForm.value, ...page };
+ const params = {...searchForm.value, ...page};
params.entryDate = undefined
qualityInspectListPage({...params, inspectType: 0}).then(res => {
tableLoading.value = false;
@@ -253,6 +316,62 @@
proxy.$modal.msg("宸插彇娑�");
});
};
+
+// 鎻愪环
+const submit = async (id) => {
+ const res = await submitQualityInspect({id: id})
+ if (res.code === 200) {
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ getList();
+ }
+}
+
+// 鍏抽棴寮规
+const closeDia = () => {
+ proxy.resetForm("formRef");
+ dialogFormVisible.value = false;
+};
+
+const submitForm = () => {
+ if (currentRow.value) {
+ const data = {
+ ...form.value,
+ id: currentRow.value.id
+ }
+ qualityInspectUpdate(data).then(res => {
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ closeDia();
+ getList();
+ })
+ }
+};
+
+const open = async (row) => {
+ let userLists = await userListNoPage();
+ userList.value = userLists.data;
+ currentRow.value = row
+ dialogFormVisible.value = true
+}
+
+const downLoadFile = (row) => {
+ downloadQualityInspect({id: row.id}).then(res => {
+ // 鍒涘缓 blob 瀵硅薄
+ const blob = new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'})
+ const downloadUrl = window.URL.createObjectURL(blob)
+
+ // 鍒涘缓涓存椂 <a> 鏍囩杩涜涓嬭浇
+ const link = document.createElement('a')
+ link.href = downloadUrl
+ link.download = '妫�楠屾姤鍛�.docx' // 杩欓噷鍜屽悗绔竴鑷�
+ document.body.appendChild(link)
+ link.click()
+
+ // 娓呯悊
+ document.body.removeChild(link)
+ window.URL.revokeObjectURL(downloadUrl)
+ })
+};
+
onMounted(() => {
getList();
});
--
Gitblit v1.9.3