From cc5f8607d1f80fdb5d31b29d87b25d708505b03a Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期六, 19 九月 2026 21:06:53 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_天津_君歌化工new' into dev_天津_君歌化工new
---
doc/提取.png | 0
src/views/qualityManagement/processInspection/components/formDia.vue | 769 +++++------------
multiple/assets/logo/JunGeJiTuan-logo.png | 0
src/views/basicData/product/index.vue | 3
src/views/qualityManagement/finalInspection/components/formDia.vue | 395 ++-------
src/views/qualityManagement/rawMaterialInspection/components/formDia.vue | 436 +--------
src/views/qualityManagement/rawMaterialInspection/index.vue | 296 +-----
src/views/qualityManagement/finalInspection/index.vue | 253 -----
src/views/qualityManagement/processInspection/index.vue | 341 ++-----
9 files changed, 603 insertions(+), 1,890 deletions(-)
diff --git "a/doc/\346\217\220\345\217\226.png" "b/doc/\346\217\220\345\217\226.png"
new file mode 100644
index 0000000..767d1a8
--- /dev/null
+++ "b/doc/\346\217\220\345\217\226.png"
Binary files differ
diff --git a/multiple/assets/logo/JunGeJiTuan-logo.png b/multiple/assets/logo/JunGeJiTuan-logo.png
new file mode 100644
index 0000000..8540571
--- /dev/null
+++ b/multiple/assets/logo/JunGeJiTuan-logo.png
Binary files differ
diff --git a/src/views/basicData/product/index.vue b/src/views/basicData/product/index.vue
index b05b215..e1e3926 100644
--- a/src/views/basicData/product/index.vue
+++ b/src/views/basicData/product/index.vue
@@ -66,8 +66,7 @@
</div>
</div>
<div class="right">
- <div style="margin-bottom: 10px"
- v-if="isShowButton">
+ <div style="margin-bottom: 10px">
<el-button type="primary"
@click="openModelDia('add')">
鏂板瑙勬牸鍨嬪彿
diff --git a/src/views/qualityManagement/finalInspection/components/formDia.vue b/src/views/qualityManagement/finalInspection/components/formDia.vue
index 10bfad9..b87d37c 100644
--- a/src/views/qualityManagement/finalInspection/components/formDia.vue
+++ b/src/views/qualityManagement/finalInspection/components/formDia.vue
@@ -6,10 +6,10 @@
width="70%"
@close="closeDia"
>
- <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
+ <el-form :model="form" label-position="top" :rules="rules" ref="formRef">
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="浜у搧鍚嶇О锛�" prop="productId">
+ <el-form-item label="鍚嶇О锛�" prop="productId">
<el-tree-select
v-model="form.productId"
placeholder="璇烽�夋嫨"
@@ -24,9 +24,9 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="productModelId">
+ <el-form-item label="鍥惧彿锛�" prop="productModelId">
<el-select v-model="form.productModelId" placeholder="璇烽�夋嫨" clearable :disabled="isViewMode || operationType === 'edit'"
- filterable readonly @change="handleChangeModel">
+ filterable readonly @change="handleChangeModel" style="width: 100%">
<el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id" />
</el-select>
</el-form-item>
@@ -34,94 +34,43 @@
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="鎸囨爣閫夋嫨锛�" prop="testStandardId">
- <el-select
- v-model="form.testStandardId"
- placeholder="璇烽�夋嫨鎸囨爣"
- clearable
- @change="handleTestStandardChange"
- style="width: 100%"
- :disabled="isViewMode"
- >
- <el-option
- v-for="item in testStandardOptions"
- :key="item.id"
- :label="item.standardName || item.standardNo"
- :value="item.id"
- />
- </el-select>
+ <el-form-item label="鏉愯川锛�" prop="material">
+ <el-input v-model="form.material" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="楠屾敹渚濇嵁锛�" prop="acceptanceBasis">
+ <el-input v-model="form.acceptanceBasis" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="鍗曚綅锛�" prop="unit">
- <el-input v-model="form.unit" placeholder="璇疯緭鍏�" disabled/>
- </el-form-item>
- </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" :disabled="isViewMode || processQuantityDisabled"/>
+ <el-input v-model="form.quantity" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎶芥鏁帮細" prop="samplingCount">
+ <el-input v-model="form.samplingCount" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="鍚堟牸鏁伴噺锛�"
- prop="qualifiedQuantity">
- <el-input-number :step="0.01"
- :min="0"
- style="width: 100%"
- v-model="form.qualifiedQuantity"
- placeholder="璇疯緭鍏�"
- clearable
- :precision="2"
- @change="handleQualifiedQuantityChange"
- :disabled="isViewMode" />
+ <el-form-item label="鍥剧焊鍏抽敭閮ㄤ綅灏哄锛�" prop="drawingKeyDimensions">
+ <el-input v-model="form.drawingKeyDimensions" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="涓嶅悎鏍兼暟閲忥細"
- prop="unqualifiedQuantity">
- <el-input-number :step="0.01"
- :min="0"
- style="width: 100%"
- v-model="form.unqualifiedQuantity"
- placeholder="璇疯緭鍏�"
- clearable
- :precision="2"
- @change="handleUnqualifiedQuantityChange"
- :disabled="isViewMode" />
+ <el-form-item label="瀹炴祴鍏抽敭閮ㄤ綅灏哄锛�" prop="measuredKeyDimensions">
+ <el-input v-model="form.measuredKeyDimensions" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="妫�娴嬪崟浣嶏細" prop="checkCompany">
- <el-input v-model="form.checkCompany" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="妫�娴嬬粨鏋滐細" prop="checkResult">
- <el-select v-model="form.checkResult" :disabled="isViewMode">
- <el-option label="鍚堟牸" value="鍚堟牸" />
- <el-option label="涓嶅悎鏍�" value="涓嶅悎鏍�" />
- <el-option label="閮ㄥ垎鍚堟牸" value="閮ㄥ垎鍚堟牸" />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="妫�楠屽憳锛�" prop="checkName">
- <el-select v-model="form.checkName" placeholder="璇烽�夋嫨" clearable :disabled="isViewMode">
- <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="checkTime">
+ <el-form-item label="妫�楠屾棩鏈燂細" prop="checkTime">
<el-date-picker
v-model="form.checkTime"
type="date"
@@ -134,19 +83,36 @@
/>
</el-form-item>
</el-col>
+ <el-col :span="12">
+ <el-form-item label="鍏ュ簱缂栧彿锛�" prop="warehouseCode">
+ <el-input v-model="form.warehouseCode" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="鎵�灞炶澶囧悕绉帮細" prop="equipmentName">
+ <el-input v-model="form.equipmentName" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椤圭洰鍚嶇О锛�" prop="projectName">
+ <el-input v-model="form.projectName" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="鍒ゅ畾锛�" prop="verdict">
+ <el-select v-model="form.verdict" placeholder="璇烽�夋嫨" clearable :disabled="isViewMode" style="width: 100%">
+ <el-option label="鍚堟牸" value="鍚堟牸" />
+ <el-option label="涓嶅悎鏍�" value="涓嶅悎鏍�" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12"></el-col>
</el-row>
</el-form>
- <PIMTable
- rowKey="id"
- :column="tableColumn"
- :tableData="tableData"
- :tableLoading="tableLoading"
- height="400"
- >
- <template #slot="{ row }">
- <el-input v-model="row.testValue" clearable :disabled="isViewMode"/>
- </template>
- </PIMTable>
<template #footer>
<div class="dialog-footer">
<template v-if="!isViewMode">
@@ -162,12 +128,8 @@
<script setup>
import {ref, reactive, toRefs, computed, getCurrentInstance, nextTick} from "vue";
-import {getOptions} from "@/api/procurementManagement/procurementLedger.js";
import {modelList, productTreeList} from "@/api/basicData/product.js";
import {qualityInspectAdd, qualityInspectUpdate} from "@/api/qualityManagement/rawMaterialInspection.js";
-import {userListNoPage} from "@/api/system/user.js";
-import {qualityInspectDetailByProductId, getQualityTestStandardParamByTestStandardId} from "@/api/qualityManagement/metricMaintenance.js";
-import {qualityInspectParamInfo} from "@/api/qualityManagement/qualityInspectParam.js";
const { proxy } = getCurrentInstance()
const emit = defineEmits(['close'])
@@ -175,164 +137,66 @@
const operationType = ref("");
const data = reactive({
form: {
+ id: "",
checkTime: "",
- process: "",
- checkName: "",
- productName: "",
productId: "",
productModelId: "",
model: "",
- testStandardId: "",
- unit: "",
- quantity: "",
- qualifiedQuantity: "",
- unqualifiedQuantity: "",
- checkCompany: "",
- checkResult: "",
+ productName: "",
+ material: "",
+ acceptanceBasis: "",
+ quantity: undefined,
+ samplingCount: undefined,
+ drawingKeyDimensions: "",
+ measuredKeyDimensions: "",
+ warehouseCode: "",
+ equipmentName: "",
+ projectName: "",
+ verdict: "",
},
rules: {
- checkTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- process: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- checkName: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- productId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+ productId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
productModelId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- testStandardId: [{ required: false, message: "璇烽�夋嫨鎸囨爣", trigger: "change" }],
- unit: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- qualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- unqualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- checkCompany: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- checkResult: [{ required: true, message: "璇疯緭鍏�", trigger: "change" }],
},
});
const { form, rules } = toRefs(data);
-// 鏄惁涓烘煡鐪嬫ā寮�
-const isViewMode = computed(() => operationType.value === 'view');
-// 缂栬緫鏃讹細productMainId 鎴� purchaseLedgerId 浠讳竴鏈夊�煎垯宸ュ簭銆佹暟閲忕疆鐏�
-const processQuantityDisabled = computed(() => {
- const v = form.value || {};
- return !!(v.productMainId != null || v.purchaseLedgerId != null);
-});
-const supplierList = ref([]);
+// 宸叉彁浜ょ殑璁板綍鐐圭紪杈戞椂鎸夊彧璇诲鐞�
+const readOnlyEdit = ref(false);
+// 鏄惁涓哄彧璇绘ā寮忥紙鏌ョ湅 鎴� 宸叉彁浜よ褰曠偣缂栬緫锛�
+const isViewMode = computed(() => operationType.value === 'view' || readOnlyEdit.value);
const productOptions = ref([]);
-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 userList = ref([]);
-const currentProductId = ref(0);
-const testStandardOptions = ref([]); // 鎸囨爣閫夋嫨涓嬫媺妗嗘暟鎹�
const modelOptions = ref([]);
+const currentProductId = ref(0);
// 鎵撳紑寮规
const openDialog = async (type, row) => {
+ readOnlyEdit.value = type === 'edit' && row?.inspectState == 1;
operationType.value = type;
+ // 鍏堥噸缃〃鍗曪紝閬垮厤寮傛鍔犺浇澶辫触鏃舵畫鐣欎笂涓�娆′細璇濈殑鏁版嵁锛堝惈id锛�
+ form.value = { ...data.form };
+ if (operationType.value === 'edit' || operationType.value === 'view') {
+ form.value = { ...form.value, ...row };
+ }
dialogFormVisible.value = true;
- // 鍏堟竻绌鸿〃鍗曢獙璇佺姸鎬侊紝閬垮厤闂儊
await nextTick();
proxy.$refs.formRef?.clearValidate();
- // 骞惰鍔犺浇鍩虹鏁版嵁
- const [userListsRes] = await Promise.all([
- userListNoPage(),
- getProductOptions(),
- getOptions().then((res) => {
- supplierList.value = res.data;
- })
- ]);
- userList.value = userListsRes.data;
-
- form.value = {}
- testStandardOptions.value = [];
- tableData.value = [];
+ await getProductOptions();
+ modelOptions.value = [];
if (operationType.value === 'edit' || operationType.value === 'view') {
- // 鍏堜繚瀛� testStandardId锛岄伩鍏嶈娓呯┖
- const savedTestStandardId = row.testStandardId;
- // 鍏堣缃〃鍗曟暟鎹紝浣嗘殏鏃舵竻绌� testStandardId锛岀瓑閫夐」鍔犺浇瀹屾垚鍚庡啀璁剧疆
- form.value = {...row, testStandardId: ''}
- currentProductId.value = row.productId || 0
- // 娓呯┖楠岃瘉鐘舵�侊紝閬垮厤鏁版嵁鍔犺浇杩囩▼涓殑鏍¢獙闂儊
- nextTick(() => {
- proxy.$refs.formRef?.clearValidate();
- });
-
- // 缂栬緫妯″紡涓嬶紝骞惰鍔犺浇瑙勬牸鍨嬪彿鍜屾寚鏍囬�夐」
+ currentProductId.value = row.productId || 0;
if (currentProductId.value) {
- // 璁剧疆浜у搧鍚嶇О
form.value.productName = findNodeById(productOptions.value, currentProductId.value);
-
- // 骞惰鍔犺浇瑙勬牸鍨嬪彿鍜屾寚鏍囬�夐」
- const params = {
- productId: currentProductId.value,
- inspectType: 2
- };
-
- Promise.all([
- modelList({ id: currentProductId.value }),
- qualityInspectDetailByProductId(params)
- ]).then(([modelRes, testStandardRes]) => {
- // 璁剧疆瑙勬牸鍨嬪彿閫夐」
- modelOptions.value = modelRes || [];
- // 濡傛灉琛ㄥ崟涓凡鏈� productModelId锛岃缃搴旂殑 model 鍜� unit
- if (form.value.productModelId && modelOptions.value.length > 0) {
- const selectedModel = modelOptions.value.find(item => item.id == form.value.productModelId);
- if (selectedModel) {
- form.value.model = selectedModel.model || '';
- form.value.unit = selectedModel.unit || '';
- }
- }
-
- // 璁剧疆鎸囨爣閫夐」
- testStandardOptions.value = testStandardRes.data || [];
-
- // 璁剧疆 testStandardId 骞跺姞杞藉弬鏁板垪琛�
- nextTick(() => {
- if (savedTestStandardId) {
- // 纭繚绫诲瀷鍖归厤锛坕tem.id 鍙兘鏄暟瀛楁垨瀛楃涓诧級
- const matchedOption = testStandardOptions.value.find(item =>
- item.id == savedTestStandardId || String(item.id) === String(savedTestStandardId)
- );
- if (matchedOption) {
- // 纭繚浣跨敤鍖归厤椤圭殑 id锛堜繚鎸佺被鍨嬩竴鑷达級
- form.value.testStandardId = matchedOption.id;
- } else {
- // 濡傛灉鎵句笉鍒板尮閰嶉」锛屽皾璇曠洿鎺ヤ娇鐢ㄥ師鍊�
- console.warn('鏈壘鍒板尮閰嶇殑鎸囨爣閫夐」锛宼estStandardId:', savedTestStandardId, '鍙敤閫夐」:', testStandardOptions.value);
- form.value.testStandardId = savedTestStandardId;
- }
- }
- // 缂栬緫鍦烘櫙淇濈暀宸叉湁妫�楠屽�硷紝鐩存帴鎷夊彇鍘熷弬鏁版暟鎹�
- getQualityInspectParamList(row.id);
- });
+ modelList({ id: currentProductId.value }).then((res) => {
+ modelOptions.value = res || [];
});
- } else {
- getQualityInspectParamList(row.id);
}
}
-}
+ nextTick(() => {
+ proxy.$refs.formRef?.clearValidate();
+ });
+};
const getProductOptions = () => {
return productTreeList().then((res) => {
productOptions.value = convertIdToValue(res);
@@ -340,44 +204,20 @@
};
const getModels = (value) => {
form.value.productModelId = undefined;
- form.value.unit = undefined;
+ form.value.model = undefined;
modelOptions.value = [];
currentProductId.value = value
form.value.productName = findNodeById(productOptions.value, value);
- modelList({ id: value }).then((res) => {
- modelOptions.value = res;
- })
- if (currentProductId.value) {
- getList();
+ if (value) {
+ modelList({ id: value }).then((res) => {
+ modelOptions.value = res || [];
+ })
}
};
const handleChangeModel = (value) => {
form.value.model = modelOptions.value.find(item => item.id == value)?.model || '';
- form.value.unit = modelOptions.value.find(item => item.id == value)?.unit || '';
}
-
-const handleQualifiedQuantityChange = (value) => {
- if (value === null || value === undefined) {
- form.value.qualifiedQuantity = 0;
- return;
- }
- const quantity = parseFloat(form.value.quantity) || 0;
- const qualified = parseFloat(value) || 0;
- form.value.qualifiedQuantity = qualified > quantity?quantity:qualified;
- form.value.unqualifiedQuantity = Math.max(0, quantity - qualified);
-};
-
-const handleUnqualifiedQuantityChange = (value) => {
- if (value === null || value === undefined) {
- form.value.unqualifiedQuantity = 0;
- return;
- }
- const quantity = parseFloat(form.value.quantity) || 0;
- const unqualified = parseFloat(value) || 0;
- form.value.unqualifiedQuantity = unqualified > quantity?quantity:unqualified;
- form.value.qualifiedQuantity = Math.max(0, quantity - unqualified);
-};
const findNodeById = (nodes, productId) => {
for (let i = 0; i < nodes.length; i++) {
@@ -411,14 +251,9 @@
const submitForm = () => {
proxy.$refs.formRef.validate(valid => {
if (valid) {
- form.value.inspectType = 2;
+ const data = { ...form.value, inspectType: 2 };
if (operationType.value === "add") {
- tableData.value.forEach((item) => {
- delete item.id;
- });
- }
- const data = { ...form.value, qualityInspectParams: tableData.value };
- if (operationType.value === "add") {
+ delete data.id;
qualityInspectAdd(data).then(res => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeDia();
@@ -432,57 +267,11 @@
}
});
}
-const getList = () => {
- if (!currentProductId.value) {
- testStandardOptions.value = [];
- tableData.value = [];
- return;
- }
- let params = {
- productId: currentProductId.value,
- inspectType: 2
- };
- qualityInspectDetailByProductId(params).then(res => {
- // 淇濆瓨涓嬫媺妗嗛�夐」鏁版嵁
- testStandardOptions.value = res.data || [];
- // 娓呯┖琛ㄦ牸鏁版嵁锛岀瓑寰呯敤鎴烽�夋嫨鎸囨爣
- tableData.value = [];
- // 娓呯┖鎸囨爣閫夋嫨
- form.value.testStandardId = '';
- });
-}
-
-// 鎸囨爣閫夋嫨鍙樺寲澶勭悊
-const handleTestStandardChange = (testStandardId) => {
- if (!testStandardId) {
- tableData.value = [];
- return;
- }
- tableLoading.value = true;
- getQualityTestStandardParamByTestStandardId(testStandardId).then(res => {
- tableData.value = res.data || [];
- tableData.value = tableData.value.map(item => ({
- ...item,
- id: null
- }));
- }).catch(error => {
- console.error('鑾峰彇鏍囧噯鍙傛暟澶辫触:', error);
- tableData.value = [];
- }).finally(() => {
- tableLoading.value = false;
- });
-}
-const getQualityInspectParamList = (id) => {
- qualityInspectParamInfo(id).then(res => {
- tableData.value = res.data;
- });
-}
// 鍏抽棴寮规
const closeDia = () => {
proxy.resetForm("formRef");
- tableData.value = [];
- testStandardOptions.value = [];
- form.value.testStandardId = '';
+ modelOptions.value = [];
+ readOnlyEdit.value = false;
dialogFormVisible.value = false;
emit('close');
}
diff --git a/src/views/qualityManagement/finalInspection/index.vue b/src/views/qualityManagement/finalInspection/index.vue
index 4a59fa4..8ea8b97 100644
--- a/src/views/qualityManagement/finalInspection/index.vue
+++ b/src/views/qualityManagement/finalInspection/index.vue
@@ -4,44 +4,29 @@
<el-form ref="searchFormRef"
:model="searchForm"
class="demo-form-inline">
- <el-row :gutter="20">
- <el-col :span="4">
- <el-form-item label="浜у搧鍚嶇О"
+ <el-row :gutter="32">
+ <el-col :span="6">
+ <el-form-item label="鍚嶇О"
prop="productName">
<el-input v-model="searchForm.productName"
- style="width: 240px"
- placeholder="璇疯緭鍏ヤ骇鍝佸悕绉版悳绱�"
+ style="width: 300px"
+ placeholder="璇疯緭鍏ュ悕绉版悳绱�"
clearable />
</el-form-item>
</el-col>
- <el-col :span="6">
- <el-form-item label="妫�娴嬫棩鏈�"
+ <el-col :span="8">
+ <el-form-item label="妫�楠屾棩鏈�"
prop="entryDate">
<el-date-picker v-model="searchForm.entryDate"
+ style="width: 360px"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
type="daterange"
- placeholder="璇烽�夋嫨"
+ start-placeholder="璧锋鏃ユ湡"
+ end-placeholder="璧锋鏃ユ湡"
+ range-separator="-"
clearable
@change="changeDaterange" />
- </el-form-item>
- </el-col>
- <el-col :span="4">
- <el-form-item label="閿�鍞崟鍙�"
- prop="salesContractNo">
- <el-input v-model="searchForm.salesContractNo"
- style="width: 240px"
- placeholder="璇疯緭鍏ラ攢鍞崟鍙锋悳绱�"
- clearable />
- </el-form-item>
- </el-col>
- <el-col :span="4">
- <el-form-item label="鐢熶骇宸ュ崟鍙�"
- prop="workOrderNo">
- <el-input v-model="searchForm.workOrderNo"
- style="width: 240px"
- placeholder="璇疯緭鍏ョ敓浜у伐鍗曞彿鎼滅储"
- clearable />
</el-form-item>
</el-col>
<!-- 鎸夐挳 -->
@@ -75,46 +60,14 @@
@pagination="pagination"
:total="page.total"></PIMTable>
</div>
- <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="30%"
- @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 {
onMounted,
ref,
@@ -123,121 +76,73 @@
getCurrentInstance,
nextTick,
} from "vue";
- import InspectionFormDia from "@/views/qualityManagement/finalInspection/components/inspectionFormDia.vue";
import FormDia from "@/views/qualityManagement/finalInspection/components/formDia.vue";
import { ElMessageBox } from "element-plus";
import {
downloadQualityInspect,
qualityInspectDel,
qualityInspectListPage,
- qualityInspectUpdate,
submitQualityInspect,
} from "@/api/qualityManagement/rawMaterialInspection.js";
import FilesDia from "@/views/qualityManagement/finalInspection/components/filesDia.vue";
import dayjs from "dayjs";
- import { userListNoPage } from "@/api/system/user.js";
- import useUserStore from "@/store/modules/user";
const data = reactive({
searchForm: {
productName: "",
- salesContractNo: "",
- workOrderNo: "",
- entryDate: undefined, // 褰曞叆鏃ユ湡
+ entryDate: undefined, // 妫�楠屾棩鏈�
entryDateStart: undefined,
entryDateEnd: undefined,
- },
- rules: {
- checkName: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
},
});
const { searchForm } = toRefs(data);
const tableColumn = ref([
{
- label: "妫�娴嬫棩鏈�",
+ label: "妫�楠屾棩鏈�",
prop: "checkTime",
width: 120,
},
{
- label: "閿�鍞崟鍙�",
- prop: "salesContractNo",
- width: 120,
- },
- {
- label: "鐢熶骇宸ュ崟鍙�",
- prop: "workOrderNo",
- width: 120,
- },
- {
- label: "妫�楠屽憳",
- prop: "checkName",
- },
- {
- label: "浜у搧鍚嶇О",
+ label: "鍚嶇О",
prop: "productName",
},
{
- label: "瑙勬牸鍨嬪彿",
+ label: "鍥惧彿",
prop: "model",
},
{
- label: "鍗曚綅",
- prop: "unit",
+ label: "鏉愯川",
+ prop: "material",
},
{
- label: "鎬绘暟閲�",
+ label: "鏁伴噺",
prop: "quantity",
width: 100,
},
{
- label: "鍚堟牸鏁伴噺",
- prop: "qualifiedQuantity",
+ label: "鎶芥鏁�",
+ prop: "samplingCount",
width: 100,
},
{
- label: "涓嶅悎鏍兼暟閲�",
- prop: "unqualifiedQuantity",
- width: 100,
- },
- {
- label: "鍚堟牸鐜�",
- prop: "passRate",
+ label: "鍒ゅ畾",
+ prop: "verdict",
width: 100,
dataType: "tag",
formatType: params => {
- if (!params) return "";
- const rate = parseFloat(params);
- if (rate < 90) {
- return "danger";
- } else if (rate === 100) {
+ if (params == "鍚堟牸") {
return "success";
- } else {
- return "warning";
- }
- },
- },
- {
- label: "妫�娴嬪崟浣�",
- prop: "checkCompany",
- width: 120,
- },
- {
- label: "妫�娴嬬粨鏋�",
- prop: "checkResult",
- dataType: "tag",
- formatType: params => {
- if (params == "涓嶅悎鏍�") {
+ } else if (params == "涓嶅悎鏍�") {
return "danger";
- } else if (params == "鍚堟牸") {
- return "success";
} else {
- return "danger";
+ return "info";
}
},
},
{
label: "鎻愪氦鐘舵��",
prop: "inspectState",
+ width: 100,
formatData: params => {
if (params) {
return "宸叉彁浜�";
@@ -251,22 +156,13 @@
label: "鎿嶄綔",
align: "center",
fixed: "right",
- width: 280,
+ width: 290,
operation: [
{
name: "缂栬緫",
type: "text",
clickFun: row => {
openForm("edit", row);
- },
- disabled: row => {
- // 宸叉彁浜ゅ垯绂佺敤
- if (row.inspectState == 1) return true;
- // 濡傛灉妫�楠屽憳鏈夊�硷紝鍙湁褰撳墠鐧诲綍鐢ㄦ埛鑳界紪杈�
- if (row.checkName) {
- return row.checkName !== userStore.nickName;
- }
- return false;
},
},
{
@@ -289,44 +185,20 @@
clickFun: row => {
submit(row.id);
},
- disabled: row => {
- // 宸叉彁浜ゅ垯绂佺敤
- if (row.inspectState == 1) return true;
- // 濡傛灉妫�楠屽憳鏈夊�硷紝鍙湁褰撳墠鐧诲綍鐢ㄦ埛鑳芥彁浜�
- if (row.checkName) {
- return row.checkName !== userStore.nickName;
- }
- return false;
- },
},
- {
- name: "鍒嗛厤妫�楠屽憳",
- type: "text",
- clickFun: row => {
- if (!row.checkName) {
- open(row);
- } else {
- proxy.$modal.msgError("妫�楠屽憳宸插瓨鍦�");
- }
- },
- disabled: row => {
- return row.inspectState == 1 || row.checkName;
- },
- },
- {
- name: "涓嬭浇",
- type: "text",
- clickFun: row => {
- downLoadFile(row);
- },
- },
+ // {
+ // name: "涓嬭浇",
+ // type: "text",
+ // clickFun: row => {
+ // downLoadFile(row);
+ // },
+ // },
],
},
]);
const tableData = ref([]);
const selectedRows = ref([]);
const tableLoading = ref(false);
- const currentRow = ref(null);
const page = reactive({
current: 1,
size: 100,
@@ -334,14 +206,7 @@
});
const formDia = ref();
const filesDia = ref();
- const inspectionFormDia = ref();
const { proxy } = getCurrentInstance();
- const userStore = useUserStore();
- const userList = ref([]);
- const form = ref({
- checkName: "",
- });
- const dialogFormVisible = ref(false);
const changeDaterange = value => {
searchForm.value.entryDateStart = undefined;
@@ -370,18 +235,7 @@
qualityInspectListPage({ ...params, inspectType: 2 })
.then(res => {
tableLoading.value = false;
- tableData.value = res.data.records.map(item => {
- const quantity = parseFloat(item.quantity);
- const qualifiedQuantity = parseFloat(item.qualifiedQuantity);
- let passRate = null;
- if (!isNaN(quantity) && !isNaN(qualifiedQuantity) && quantity > 0) {
- passRate = ((qualifiedQuantity / quantity) * 100).toFixed(2) + "%";
- }
- return {
- ...item,
- passRate: passRate,
- };
- });
+ tableData.value = res.data.records;
page.total = res.data.total;
})
.catch(err => {
@@ -397,12 +251,6 @@
const openForm = (type, row) => {
nextTick(() => {
formDia.value?.openDialog(type, row);
- });
- };
- // 鎵撳紑鏂板妫�楠屽脊妗�
- const openInspectionForm = (type, row) => {
- nextTick(() => {
- inspectionFormDia.value?.openDialog(type, row);
});
};
// 鎵撳紑闄勪欢寮规
@@ -455,40 +303,13 @@
});
};
- // 鎻愪环
+ // 鎻愪氦
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 => {
@@ -500,7 +321,7 @@
const link = document.createElement("a");
link.href = downloadUrl;
- link.download = "鍘熸潗鏂欐楠屾姤鍛�.docx";
+ link.download = "鍑哄巶妫�楠屾姤鍛�.docx";
document.body.appendChild(link);
link.click();
diff --git a/src/views/qualityManagement/processInspection/components/formDia.vue b/src/views/qualityManagement/processInspection/components/formDia.vue
index 635360f..db5a44f 100644
--- a/src/views/qualityManagement/processInspection/components/formDia.vue
+++ b/src/views/qualityManagement/processInspection/components/formDia.vue
@@ -1,203 +1,126 @@
<template>
<div>
- <el-dialog v-model="dialogFormVisible"
- :title="operationType === 'add' ? '鏂板杩囩▼妫�楠�' : operationType === 'view' ? '鏌ョ湅杩囩▼妫�楠�' : '缂栬緫杩囩▼妫�楠�'"
- width="70%"
- @close="closeDia">
- <el-form :model="form"
- label-width="140px"
- label-position="top"
- :rules="rules"
- ref="formRef">
+ <el-dialog
+ v-model="dialogFormVisible"
+ :title="operationType === 'add' ? '鏂板杩囩▼妫�楠�' : operationType === 'view' ? '鏌ョ湅杩囩▼妫�楠�' : '缂栬緫杩囩▼妫�楠�'"
+ width="70%"
+ @close="closeDia"
+ >
+ <el-form :model="form" label-position="top" :rules="rules" ref="formRef">
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="宸ュ簭锛�"
- prop="process">
- <el-select v-model="form.process"
- placeholder="璇烽�夋嫨宸ュ簭"
- clearable
- :disabled="isViewMode || processQuantityDisabled"
- style="width: 100%">
- <el-option v-for="item in processList"
- :key="item.name"
- :label="item.name"
- :value="item.name" />
- </el-select>
+ <el-form-item label="鍚嶇О锛�" prop="productId">
+ <el-tree-select
+ v-model="form.productId"
+ placeholder="璇烽�夋嫨"
+ clearable
+ check-strictly
+ @change="getModels"
+ :data="productOptions"
+ :render-after-expand="false"
+ :disabled="isViewMode || operationType === 'edit'"
+ style="width: 100%"
+ />
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="浜у搧鍚嶇О锛�"
- prop="productId">
- <el-tree-select v-model="form.productId"
- placeholder="璇烽�夋嫨"
- clearable
- check-strictly
- @change="getModels"
- :data="productOptions"
- :render-after-expand="false"
- :disabled="isViewMode || operationType === 'edit'"
- style="width: 100%" />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="瑙勬牸鍨嬪彿锛�"
- prop="productModelId">
- <el-select v-model="form.productModelId"
- placeholder="璇烽�夋嫨"
- clearable
- :disabled="isViewMode || operationType === 'edit'"
- filterable
- readonly
- @change="handleChangeModel">
- <el-option v-for="item in modelOptions"
- :key="item.id"
- :label="item.model"
- :value="item.id" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鎸囨爣閫夋嫨锛�"
- prop="testStandardId">
- <el-select v-model="form.testStandardId"
- placeholder="璇烽�夋嫨鎸囨爣"
- clearable
- @change="handleTestStandardChange"
- style="width: 100%"
- :disabled="isViewMode">
- <el-option v-for="item in testStandardOptions"
- :key="item.id"
- :label="item.standardName || item.standardNo"
- :value="item.id" />
+ <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="productModelId">
+ <el-select v-model="form.productModelId" placeholder="璇烽�夋嫨" clearable :disabled="isViewMode || operationType === 'edit'"
+ filterable readonly @change="handleChangeModel" style="width: 100%">
+ <el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="鍗曚綅锛�"
- prop="unit">
- <el-input v-model="form.unit"
- placeholder="璇疯緭鍏�"
- disabled />
+ <el-form-item label="鏉愯川锛�" prop="material">
+ <el-input v-model="form.material" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
</el-form-item>
</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"
- :disabled="isViewMode || processQuantityDisabled" />
+ <el-form-item label="楠屾敹渚濇嵁锛�" prop="acceptanceBasis">
+ <el-input v-model="form.acceptanceBasis" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="鍚堟牸鏁伴噺锛�"
- prop="qualifiedQuantity">
- <el-input-number :step="0.01"
- :min="0"
- style="width: 100%"
- v-model="form.qualifiedQuantity"
- placeholder="璇疯緭鍏�"
- clearable
- :precision="2"
- @change="handleQualifiedQuantityChange"
- :disabled="isViewMode" />
+ <el-form-item label="鏁伴噺锛�" prop="quantity">
+ <el-input v-model="form.quantity" placeholder="0.00" clearable :disabled="isViewMode"/>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="涓嶅悎鏍兼暟閲忥細"
- prop="unqualifiedQuantity">
- <el-input-number :step="0.01"
- :min="0"
- style="width: 100%"
- v-model="form.unqualifiedQuantity"
- placeholder="璇疯緭鍏�"
- clearable
- :precision="2"
- @change="handleUnqualifiedQuantityChange"
- :disabled="isViewMode" />
+ <el-form-item label="鎶芥鏁帮細" prop="samplingCount">
+ <el-input v-model="form.samplingCount" placeholder="0.00" clearable :disabled="isViewMode"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="妫�娴嬪崟浣嶏細"
- prop="checkCompany">
- <el-input v-model="form.checkCompany"
- placeholder="璇疯緭鍏�"
- clearable
- :disabled="isViewMode" />
+ <el-form-item label="涓昏鎶�鏈弬鏁帮細" prop="mainTechnicalParams">
+ <el-input v-model="form.mainTechnicalParams" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="妫�娴嬬粨鏋滐細"
- prop="checkResult">
- <el-select v-model="form.checkResult" :disabled="isViewMode">
- <el-option label="鍚堟牸"
- value="鍚堟牸" />
- <el-option label="涓嶅悎鏍�"
- value="涓嶅悎鏍�" />
- <el-option label="閮ㄥ垎鍚堟牸"
- value="閮ㄥ垎鍚堟牸" />
+ <el-form-item label="瀹為檯鎶�鏈弬鏁帮細" prop="actualTechnicalParams">
+ <el-input v-model="form.actualTechnicalParams" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="璇存槑涔︼細" prop="specificationManual">
+ <el-input v-model="form.specificationManual" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="妫�楠屾棩鏈燂細" prop="checkTime">
+ <el-date-picker
+ v-model="form.checkTime"
+ type="date"
+ placeholder="璇烽�夋嫨鏃ユ湡"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ clearable
+ style="width: 100%"
+ :disabled="isViewMode"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="鍏ュ簱缂栧彿锛�" prop="warehouseCode">
+ <el-input v-model="form.warehouseCode" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎵�灞炶澶囧悕绉帮細" prop="equipmentName">
+ <el-input v-model="form.equipmentName" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="椤圭洰鍚嶇О锛�" prop="projectName">
+ <el-input v-model="form.projectName" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍒ゅ畾锛�" prop="verdict">
+ <el-select v-model="form.verdict" placeholder="璇烽�夋嫨" clearable :disabled="isViewMode" style="width: 100%">
+ <el-option label="鍚堟牸" value="鍚堟牸" />
+ <el-option label="涓嶅悎鏍�" value="涓嶅悎鏍�" />
</el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="妫�楠屽憳锛�"
- prop="checkName">
- <el-select v-model="form.checkName"
- placeholder="璇烽�夋嫨"
- clearable
- :disabled="isViewMode">
- <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="checkTime">
- <el-date-picker v-model="form.checkTime"
- type="date"
- placeholder="璇烽�夋嫨鏃ユ湡"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- clearable
- style="width: 100%"
- :disabled="isViewMode" />
</el-form-item>
</el-col>
</el-row>
</el-form>
- <PIMTable rowKey="id"
- :column="tableColumn"
- :tableData="tableData"
- :tableLoading="tableLoading"
- height="400">
- <template #slot="{ row }">
- <el-input v-model="row.testValue"
- clearable
- :disabled="isViewMode" />
- </template>
- </PIMTable>
<template #footer>
<div class="dialog-footer">
<template v-if="!isViewMode">
- <el-button type="primary"
- @click="submitForm">纭</el-button>
+ <el-button type="primary" @click="submitForm">纭</el-button>
<el-button @click="closeDia">鍙栨秷</el-button>
</template>
<el-button v-else @click="closeDia">鍏抽棴</el-button>
@@ -208,398 +131,160 @@
</template>
<script setup>
- import {
- ref,
- reactive,
- toRefs,
- computed,
- getCurrentInstance,
- nextTick,
- } from "vue";
- import { getOptions } from "@/api/procurementManagement/procurementLedger.js";
- import { modelList, productTreeList } from "@/api/basicData/product.js";
- import {
- qualityInspectAdd,
- qualityInspectUpdate,
- } from "@/api/qualityManagement/rawMaterialInspection.js";
- import {
- qualityInspectDetailByProductId,
- getQualityTestStandardParamByTestStandardId,
- } from "@/api/qualityManagement/metricMaintenance.js";
- import { userListNoPage } from "@/api/system/user.js";
- import { qualityInspectParamInfo } from "@/api/qualityManagement/qualityInspectParam.js";
- import { list } from "@/api/productionManagement/productionProcess";
- import qualified from "@/views/inventoryManagement/stockManagement/Qualified.vue";
- const { proxy } = getCurrentInstance();
- const emit = defineEmits(["close"]);
+import {ref, reactive, toRefs, computed, getCurrentInstance, nextTick} from "vue";
+import {modelList, productTreeList} from "@/api/basicData/product.js";
+import {qualityInspectAdd, qualityInspectUpdate} from "@/api/qualityManagement/rawMaterialInspection.js";
+const { proxy } = getCurrentInstance()
+const emit = defineEmits(['close'])
- const dialogFormVisible = ref(false);
- const operationType = ref("");
- const data = reactive({
- form: {
- checkTime: "",
- process: "",
- checkName: "",
- productName: "",
- productId: "",
- productModelId: "",
- model: "",
- testStandardId: "",
- unit: "",
- quantity: "",
- qualifiedQuantity: "",
- unqualifiedQuantity: "",
- checkCompany: "",
- checkResult: "",
- },
- rules: {
- checkTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- process: [{ required: true, message: "璇烽�夋嫨宸ュ簭", trigger: "change" }],
- checkName: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- productId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- productModelId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- testStandardId: [{ required: false, message: "璇烽�夋嫨鎸囨爣", trigger: "change" }],
- unit: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- qualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- unqualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
- checkCompany: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- checkResult: [{ required: true, message: "璇疯緭鍏�", trigger: "change" }],
- },
- });
- const userList = ref([]);
- const { form, rules } = toRefs(data);
- // 鏄惁涓烘煡鐪嬫ā寮�
- const isViewMode = computed(() => operationType.value === 'view');
- // 缂栬緫鏃讹細productMainId 鎴� purchaseLedgerId 浠讳竴鏈夊�煎垯宸ュ簭銆佹暟閲忕疆鐏�
- const processQuantityDisabled = computed(() => {
- const v = form.value || {};
- return !!(v.productMainId != null || v.purchaseLedgerId != null);
- });
- const processList = ref([]); // 宸ュ簭涓嬫媺鍒楄〃锛堝伐搴忓悕绉� name锛�
- const supplierList = ref([]);
- const productOptions = ref([]);
- 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 currentProductId = ref(0);
- const testStandardOptions = ref([]); // 鎸囨爣閫夋嫨涓嬫媺妗嗘暟鎹�
- const modelOptions = ref([]);
+const dialogFormVisible = ref(false);
+const operationType = ref("");
+const data = reactive({
+ form: {
+ id: "",
+ checkTime: "",
+ productId: "",
+ productModelId: "",
+ model: "",
+ productName: "",
+ material: "",
+ acceptanceBasis: "",
+ quantity: undefined,
+ samplingCount: undefined,
+ mainTechnicalParams: "",
+ actualTechnicalParams: "",
+ specificationManual: "",
+ warehouseCode: "",
+ equipmentName: "",
+ projectName: "",
+ verdict: "",
+ },
+ rules: {
+ productId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+ productModelId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+ },
+});
+const { form, rules } = toRefs(data);
+// 宸叉彁浜ょ殑璁板綍鐐圭紪杈戞椂鎸夊彧璇诲鐞�
+const readOnlyEdit = ref(false);
+// 鏄惁涓哄彧璇绘ā寮忥紙鏌ョ湅 鎴� 宸叉彁浜よ褰曠偣缂栬緫锛�
+const isViewMode = computed(() => operationType.value === 'view' || readOnlyEdit.value);
+const productOptions = ref([]);
+const modelOptions = ref([]);
+const currentProductId = ref(0);
- // 鎵撳紑寮规
- const openDialog = async (type, row) => {
- operationType.value = type;
- getOptions().then(res => {
- supplierList.value = res.data;
- });
- // 鍔犺浇宸ュ簭涓嬫媺鍒楄〃
- try {
- const res = await list({ size: -1, current: -1 });
- processList.value = res.data.records || [];
- } catch (e) {
- console.error("鍔犺浇宸ュ簭鍒楄〃澶辫触", e);
- processList.value = [];
+// 鎵撳紑寮规
+const openDialog = async (type, row) => {
+ readOnlyEdit.value = type === 'edit' && row?.inspectState == 1;
+ operationType.value = type;
+ // 鍏堥噸缃〃鍗曪紝閬垮厤寮傛鍔犺浇澶辫触鏃舵畫鐣欎笂涓�娆′細璇濈殑鏁版嵁锛堝惈id锛�
+ form.value = { ...data.form };
+ if (operationType.value === 'edit' || operationType.value === 'view') {
+ form.value = { ...form.value, ...row };
+ }
+ dialogFormVisible.value = true;
+ await nextTick();
+ proxy.$refs.formRef?.clearValidate();
+
+ await getProductOptions();
+ modelOptions.value = [];
+
+ if (operationType.value === 'edit' || operationType.value === 'view') {
+ currentProductId.value = row.productId || 0;
+ if (currentProductId.value) {
+ form.value.productName = findNodeById(productOptions.value, currentProductId.value);
+ modelList({ id: currentProductId.value }).then((res) => {
+ modelOptions.value = res || [];
+ });
}
- let userLists = await userListNoPage();
- userList.value = userLists.data;
- // 鍏堥噸缃〃鍗曟暟鎹紙淇濇寔瀛楁瀹屾暣锛岄伩鍏嶅脊绐楅娆℃覆鏌撴椂瑙﹀彂蹇呭~绾㈡鈥滈棯涓�涓嬧�濓級
- form.value = {
- checkTime: "",
- process: "",
- checkName: "",
- productName: "",
- productId: "",
- productModelId: "",
- model: "",
- testStandardId: "",
- unit: "",
- quantity: "",
- checkCompany: "",
- checkResult: "",
- };
- testStandardOptions.value = [];
- tableData.value = [];
- // 鍏堢‘淇濅骇鍝佹爲宸插姞杞斤紝鍚﹀垯缂栬緫鏃朵骇鍝�/瑙勬牸鍨嬪彿鏃犳硶鍙嶆樉
- await getProductOptions();
- if (operationType.value === "edit" || operationType.value === "view") {
- // 鍏堜繚瀛� testStandardId锛岄伩鍏嶈娓呯┖
- const savedTestStandardId = row.testStandardId;
- // 鍏堣缃〃鍗曟暟鎹紝浣嗘殏鏃舵竻绌� testStandardId锛岀瓑閫夐」鍔犺浇瀹屾垚鍚庡啀璁剧疆
- form.value = { ...row, testStandardId: "" };
- currentProductId.value = row.productId || 0;
- // 鍏抽敭锛氱紪杈戞椂鍔犺浇瑙勬牸鍨嬪彿涓嬫媺閫夐」锛屾墠鑳藉弽鏄� productModelId
- if (currentProductId.value) {
- try {
- const res = await modelList({ id: currentProductId.value });
- modelOptions.value = res || [];
- // 鍚屾鍥炲~ model / unit锛堟湁浜涙帴鍙h繑鍥炵殑 row 閲屽彲鑳芥病甯﹀叏锛�
- if (form.value.productModelId) {
- handleChangeModel(form.value.productModelId);
- }
- } catch (e) {
- console.error("鍔犺浇瑙勬牸鍨嬪彿澶辫触", e);
- modelOptions.value = [];
- }
+ }
+ nextTick(() => {
+ proxy.$refs.formRef?.clearValidate();
+ });
+};
+const getProductOptions = () => {
+ return productTreeList().then((res) => {
+ productOptions.value = convertIdToValue(res);
+ });
+};
+const getModels = (value) => {
+ form.value.productModelId = undefined;
+ form.value.model = undefined;
+ modelOptions.value = [];
+ currentProductId.value = value
+ form.value.productName = findNodeById(productOptions.value, value);
+ if (value) {
+ modelList({ id: value }).then((res) => {
+ modelOptions.value = res || [];
+ })
+ }
+};
+
+const handleChangeModel = (value) => {
+ form.value.model = modelOptions.value.find(item => item.id == value)?.model || '';
+}
+
+const findNodeById = (nodes, productId) => {
+ for (let i = 0; i < nodes.length; i++) {
+ if (nodes[i].value === productId) {
+ return nodes[i].label; // 鎵惧埌鑺傜偣锛岃繑鍥炶鑺傜偣
+ }
+ if (nodes[i].children && nodes[i].children.length > 0) {
+ const foundNode = findNodeById(nodes[i].children, productId);
+ if (foundNode) {
+ return foundNode; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐�
}
- // 缂栬緫妯″紡涓嬶紝鍏堝姞杞芥寚鏍囬�夐」锛岀劧鍚庡姞杞藉弬鏁板垪琛�
- if (currentProductId.value) {
- // 鍏堝姞杞芥寚鏍囬�夐」
- let params = {
- productId: currentProductId.value,
- inspectType: 1,
- process: form.value.process || "",
- };
- qualityInspectDetailByProductId(params).then(res => {
- testStandardOptions.value = res.data || [];
- // 浣跨敤 nextTick 鍜� setTimeout 纭繚閫夐」宸茬粡娓叉煋鍒� DOM
- nextTick(() => {
- setTimeout(() => {
- // 濡傛灉缂栬緫鏁版嵁涓湁 testStandardId锛屽垯璁剧疆骞跺姞杞藉搴旂殑鍙傛暟
- if (savedTestStandardId) {
- // 纭繚绫诲瀷鍖归厤锛坕tem.id 鍙兘鏄暟瀛楁垨瀛楃涓诧級
- const matchedOption = testStandardOptions.value.find(
- item =>
- item.id == savedTestStandardId ||
- String(item.id) === String(savedTestStandardId)
- );
- if (matchedOption) {
- // 纭繚浣跨敤鍖归厤椤圭殑 id锛堜繚鎸佺被鍨嬩竴鑷达級
- form.value.testStandardId = matchedOption.id;
- // 缂栬緫淇濈暀鍘熸楠屽�硷紝鐩存帴鎷夊彇鍘熷弬鏁版暟鎹�
- getQualityInspectParamList(row.id);
- } else {
- // 濡傛灉鎵句笉鍒板尮閰嶉」锛屽皾璇曠洿鎺ヤ娇鐢ㄥ師鍊�
- console.warn(
- "鏈壘鍒板尮閰嶇殑鎸囨爣閫夐」锛宼estStandardId:",
- savedTestStandardId,
- "鍙敤閫夐」:",
- testStandardOptions.value
- );
- form.value.testStandardId = savedTestStandardId;
- getQualityInspectParamList(row.id);
- }
- } else {
- // 鍚﹀垯浣跨敤鏃х殑閫昏緫
- getQualityInspectParamList(row.id);
- }
- }, 100);
- });
+ }
+ }
+ return null; // 娌℃湁鎵惧埌鑺傜偣锛岃繑鍥瀗ull
+};
+function convertIdToValue(data) {
+ return data.map((item) => {
+ const { id, children, ...rest } = item;
+ const newItem = {
+ ...rest,
+ value: id, // 灏� id 鏀逛负 value
+ };
+ if (children && children.length > 0) {
+ newItem.children = convertIdToValue(children);
+ }
+
+ return newItem;
+ });
+}
+// 鎻愪氦浜у搧琛ㄥ崟
+const submitForm = () => {
+ proxy.$refs.formRef.validate(valid => {
+ if (valid) {
+ const data = { ...form.value, inspectType: 1 };
+ if (operationType.value === "add") {
+ delete data.id;
+ qualityInspectAdd(data).then(res => {
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ closeDia();
});
} else {
- getQualityInspectParamList(row.id);
+ qualityInspectUpdate(data).then(res => {
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ closeDia();
+ });
}
}
- // 鏈�鍚庡啀鎵撳紑寮圭獥锛屽苟娓呯悊鏍¢獙鎬侊紝閬垮厤蹇呭~鎻愮ず闂儊
- dialogFormVisible.value = true;
- nextTick(() => {
- proxy.$refs?.formRef?.clearValidate?.();
- });
- };
- const getProductOptions = () => {
- return productTreeList().then(res => {
- productOptions.value = convertIdToValue(res);
- return productOptions.value;
- });
- };
- const getModels = value => {
- form.value.productModelId = undefined;
- form.value.unit = undefined;
- modelOptions.value = [];
- currentProductId.value = value;
- form.value.productName = findNodeById(productOptions.value, value);
- modelList({ id: value }).then(res => {
- modelOptions.value = res;
- });
- if (currentProductId.value) {
- getList();
- }
- };
-
- const handleChangeModel = value => {
- form.value.model =
- modelOptions.value.find(item => item.id == value)?.model || "";
- form.value.unit =
- modelOptions.value.find(item => item.id == value)?.unit || "";
- };
-
- const handleQualifiedQuantityChange = (value) => {
- if (value === null || value === undefined) {
- form.value.qualifiedQuantity = 0;
- return;
- }
- const quantity = parseFloat(form.value.quantity) || 0;
- const qualified = parseFloat(value) || 0;
- form.value.qualifiedQuantity = qualified > quantity?quantity:qualified;
- form.value.unqualifiedQuantity = Math.max(0, quantity - qualified);
- };
-
- const handleUnqualifiedQuantityChange = (value) => {
- if (value === null || value === undefined) {
- form.value.unqualifiedQuantity = 0;
- return;
- }
- const quantity = parseFloat(form.value.quantity) || 0;
- const unqualified = parseFloat(value) || 0;
- form.value.unqualifiedQuantity = unqualified > quantity?quantity:unqualified;
- form.value.qualifiedQuantity = Math.max(0, quantity - unqualified);
- };
-
- const findNodeById = (nodes, productId) => {
- for (let i = 0; i < nodes.length; i++) {
- if (nodes[i].value === productId) {
- 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 null; // 娌℃湁鎵惧埌鑺傜偣锛岃繑鍥瀗ull
- };
- function convertIdToValue(data) {
- return data.map(item => {
- const { id, children, ...rest } = item;
- const newItem = {
- ...rest,
- value: id, // 灏� id 鏀逛负 value
- };
- if (children && children.length > 0) {
- newItem.children = convertIdToValue(children);
- }
-
- return newItem;
- });
- }
- // 宸ュ簭鍙樺寲澶勭悊
- // 鎻愪氦浜у搧琛ㄥ崟
- const submitForm = () => {
- proxy.$refs.formRef.validate(valid => {
- if (valid) {
- form.value.inspectType = 1;
- const processName = form.value.process || "";
- if (operationType.value === "add") {
- tableData.value.forEach(item => {
- delete item.id;
- });
- }
- // 纭繚鏁伴噺涓嶄负null
- const quantity = parseFloat(form.value.quantity) || 0;
- const qualified = parseFloat(form.value.qualifiedQuantity) || 0;
- const unqualified = parseFloat(form.value.unqualifiedQuantity) || 0;
-
- // 楠岃瘉鏁伴噺鍏崇郴
- if (qualified + unqualified !== quantity) {
- proxy.$modal.msgError("鍚堟牸鏁伴噺涓庝笉鍚堟牸鏁伴噺涔嬪拰蹇呴』绛変簬鎬绘暟閲�");
- return;
- }
-
- const data = {
- ...form.value,
- process: processName, // 淇濈暀 process 瀛楁浠ュ吋瀹瑰悗绔�
- qualityInspectParams: tableData.value,
- };
- if (operationType.value === "add") {
- qualityInspectAdd(data).then(res => {
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- closeDia();
- });
- } else {
- qualityInspectUpdate(data).then(res => {
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- closeDia();
- });
- }
- }
- });
- };
- const getList = () => {
- if (!currentProductId.value) {
- testStandardOptions.value = [];
- tableData.value = [];
- return;
- }
- const processName = form.value.process || "";
- let params = {
- productId: currentProductId.value,
- inspectType: 1,
- process: processName,
- };
- qualityInspectDetailByProductId(params).then(res => {
- // 淇濆瓨涓嬫媺妗嗛�夐」鏁版嵁
- testStandardOptions.value = res.data || [];
- // 娓呯┖琛ㄦ牸鏁版嵁锛岀瓑寰呯敤鎴烽�夋嫨鎸囨爣
- tableData.value = [];
- // 娓呯┖鎸囨爣閫夋嫨
- form.value.testStandardId = "";
- });
- };
-
- // 鎸囨爣閫夋嫨鍙樺寲澶勭悊
- const handleTestStandardChange = testStandardId => {
- if (!testStandardId) {
- tableData.value = [];
- return;
- }
- tableLoading.value = true;
- getQualityTestStandardParamByTestStandardId(testStandardId)
- .then(res => {
- tableData.value = res.data || [];
- tableData.value = tableData.value.map(item => ({
- ...item,
- id: null
- }));
- })
- .catch(error => {
- console.error("鑾峰彇鏍囧噯鍙傛暟澶辫触:", error);
- tableData.value = [];
- })
- .finally(() => {
- tableLoading.value = false;
- });
- };
- const getQualityInspectParamList = id => {
- qualityInspectParamInfo(id).then(res => {
- tableData.value = res.data;
- });
- };
- // 鍏抽棴寮规
- const closeDia = () => {
- proxy.resetForm("formRef");
- tableData.value = [];
- testStandardOptions.value = [];
- form.value.testStandardId = "";
- dialogFormVisible.value = false;
- emit("close");
- };
- defineExpose({
- openDialog,
});
+}
+// 鍏抽棴寮规
+const closeDia = () => {
+ proxy.resetForm("formRef");
+ modelOptions.value = [];
+ readOnlyEdit.value = false;
+ dialogFormVisible.value = false;
+ emit('close');
+}
+defineExpose({
+ openDialog,
+});
</script>
<style scoped>
+
</style>
diff --git a/src/views/qualityManagement/processInspection/index.vue b/src/views/qualityManagement/processInspection/index.vue
index 58d1a3a..bb7db62 100644
--- a/src/views/qualityManagement/processInspection/index.vue
+++ b/src/views/qualityManagement/processInspection/index.vue
@@ -1,36 +1,45 @@
<template>
<div class="app-container">
<div class="search_form mb20">
- <div>
- <span class="search_title">宸ュ簭锛�</span>
- <el-input v-model="searchForm.process"
- style="width: 240px"
- placeholder="璇疯緭鍏ュ伐搴忔悳绱�"
- @change="handleQuery"
- 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-input v-model="searchForm.workOrderNo"
- style="width: 240px"
- placeholder="璇疯緭鍏ョ敓浜у伐鍗曞彿鎼滅储"
- @change="handleQuery"
- clearable
- :prefix-icon="Search" />
- <el-button type="primary"
- @click="handleQuery"
- style="margin-left: 10px">鎼滅储</el-button>
- </div>
- <div>
+ <el-form ref="searchFormRef"
+ :model="searchForm"
+ class="demo-form-inline">
+ <el-row :gutter="32">
+ <el-col :span="6">
+ <el-form-item label="鍚嶇О"
+ prop="productName">
+ <el-input v-model="searchForm.productName"
+ style="width: 300px"
+ placeholder="璇疯緭鍏ュ悕绉版悳绱�"
+ clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="妫�楠屾棩鏈�"
+ prop="entryDate">
+ <el-date-picker v-model="searchForm.entryDate"
+ style="width: 360px"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ type="daterange"
+ start-placeholder="璧锋鏃ユ湡"
+ end-placeholder="璧锋鏃ユ湡"
+ range-separator="-"
+ clearable
+ @change="changeDaterange" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <el-form-item>
+ <el-button type="primary"
+ @click="getList">
+ 鎼滅储
+ </el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div class="actions">
<el-button type="primary"
@click="openForm('add')">鏂板</el-button>
<el-button @click="handleOut">瀵煎嚭</el-button>
@@ -50,46 +59,14 @@
@pagination="pagination"
:total="page.total"></PIMTable>
</div>
- <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="30%"
- @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 {
onMounted,
ref,
@@ -98,120 +75,76 @@
getCurrentInstance,
nextTick,
} from "vue";
- import InspectionFormDia from "@/views/qualityManagement/processInspection/components/inspectionFormDia.vue";
import FormDia from "@/views/qualityManagement/processInspection/components/formDia.vue";
import { ElMessageBox } from "element-plus";
import {
downloadQualityInspect,
qualityInspectDel,
qualityInspectListPage,
- qualityInspectUpdate,
submitQualityInspect,
} from "@/api/qualityManagement/rawMaterialInspection.js";
import FilesDia from "@/views/qualityManagement/processInspection/components/filesDia.vue";
import dayjs from "dayjs";
- import { userListNoPage } from "@/api/system/user.js";
- import useUserStore from "@/store/modules/user";
const data = reactive({
searchForm: {
- process: "",
- entryDate: undefined, // 褰曞叆鏃ユ湡
- workOrderNo: "",
+ productName: "",
+ entryDate: undefined, // 妫�楠屾棩鏈�
entryDateStart: undefined,
entryDateEnd: undefined,
- },
- rules: {
- checkName: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
},
});
const { searchForm } = toRefs(data);
const tableColumn = ref([
{
- label: "妫�娴嬫棩鏈�",
+ label: "妫�楠屾棩鏈�",
prop: "checkTime",
width: 120,
},
{
- label: "鐢熶骇宸ュ崟鍙�",
- prop: "workOrderNo",
- width: 120,
- },
- {
- label: "宸ュ簭",
- prop: "process",
- width: 230,
- },
- {
- label: "妫�楠屽憳",
- prop: "checkName",
- },
- {
- label: "浜у搧鍚嶇О",
+ label: "鍚嶇О",
prop: "productName",
+ minWidth: 160,
},
{
label: "瑙勬牸鍨嬪彿",
prop: "model",
+ minWidth: 140,
},
{
- label: "鍗曚綅",
- prop: "unit",
+ label: "鏉愯川",
+ prop: "material",
+ minWidth: 120,
},
{
- label: "鎬绘暟閲�",
+ label: "鏁伴噺",
prop: "quantity",
width: 100,
},
{
- label: "鍚堟牸鏁伴噺",
- prop: "qualifiedQuantity",
+ label: "鎶芥鏁�",
+ prop: "samplingCount",
width: 100,
},
{
- label: "涓嶅悎鏍兼暟閲�",
- prop: "unqualifiedQuantity",
- width: 100,
- },
- {
- label: "鍚堟牸鐜�",
- prop: "passRate",
+ label: "鍒ゅ畾",
+ prop: "verdict",
width: 100,
dataType: "tag",
formatType: params => {
- if (!params) return "";
- const rate = parseFloat(params);
- if (rate < 90) {
- return "danger";
- } else if (rate === 100) {
+ if (params == "鍚堟牸") {
return "success";
- } else {
- return "warning";
- }
- },
- },
- {
- label: "妫�娴嬪崟浣�",
- prop: "checkCompany",
- width: 120,
- },
- {
- label: "妫�娴嬬粨鏋�",
- prop: "checkResult",
- dataType: "tag",
- formatType: params => {
- if (params == "涓嶅悎鏍�") {
+ } else if (params == "涓嶅悎鏍�") {
return "danger";
- } else if (params == "鍚堟牸") {
- return "success";
} else {
- return "danger";
+ return "info";
}
},
},
{
label: "鎻愪氦鐘舵��",
prop: "inspectState",
+ width: 100,
formatData: params => {
if (params) {
return "宸叉彁浜�";
@@ -225,22 +158,13 @@
label: "鎿嶄綔",
align: "center",
fixed: "right",
- width: 280,
+ width: 260,
operation: [
{
name: "缂栬緫",
type: "text",
clickFun: row => {
openForm("edit", row);
- },
- disabled: row => {
- // 宸叉彁浜ゅ垯绂佺敤
- if (row.inspectState == 1) return true;
- // 濡傛灉妫�楠屽憳鏈夊�硷紝鍙湁褰撳墠鐧诲綍鐢ㄦ埛鑳界紪杈�
- if (row.checkName) {
- return row.checkName !== userStore.nickName;
- }
- return false;
},
},
{
@@ -263,49 +187,20 @@
clickFun: row => {
submit(row.id);
},
- disabled: row => {
- // 宸叉彁浜ゅ垯绂佺敤
- if (row.inspectState == 1) return true;
- // 濡傛灉妫�楠屽憳鏈夊�硷紝鍙湁褰撳墠鐧诲綍鐢ㄦ埛鑳芥彁浜�
- if (row.checkName) {
- return row.checkName !== userStore.nickName;
- }
- return false;
- },
},
- {
- name: "鍒嗛厤妫�楠屽憳",
- type: "text",
- clickFun: row => {
- if (!row.checkName) {
- open(row);
- } else {
- proxy.$modal.msgError("妫�楠屽憳宸插瓨鍦�");
- }
- },
- disabled: row => {
- return row.inspectState == 1 || row.checkName;
- },
- },
- {
- name: "涓嬭浇",
- type: "text",
- clickFun: row => {
- downLoadFile(row);
- },
- },
+ // {
+ // name: "涓嬭浇",
+ // type: "text",
+ // clickFun: row => {
+ // downLoadFile(row);
+ // },
+ // },
],
},
]);
- const userList = ref([]);
- const currentRow = ref(null);
const tableData = ref([]);
const selectedRows = ref([]);
const tableLoading = ref(false);
- const dialogFormVisible = ref(false);
- const form = ref({
- checkName: "",
- });
const page = reactive({
current: 1,
size: 100,
@@ -313,9 +208,8 @@
});
const formDia = ref();
const filesDia = ref();
- const inspectionFormDia = ref();
const { proxy } = getCurrentInstance();
- const userStore = useUserStore();
+
const changeDaterange = value => {
searchForm.value.entryDateStart = undefined;
searchForm.value.entryDateEnd = undefined;
@@ -343,18 +237,7 @@
qualityInspectListPage({ ...params, inspectType: 1 })
.then(res => {
tableLoading.value = false;
- tableData.value = res.data.records.map(item => {
- const quantity = parseFloat(item.quantity);
- const qualifiedQuantity = parseFloat(item.qualifiedQuantity);
- let passRate = null;
- if (!isNaN(quantity) && !isNaN(qualifiedQuantity) && quantity > 0) {
- passRate = ((qualifiedQuantity / quantity) * 100).toFixed(2) + "%";
- }
- return {
- ...item,
- passRate: passRate,
- };
- });
+ tableData.value = res.data.records;
page.total = res.data.total;
})
.catch(err => {
@@ -372,49 +255,11 @@
formDia.value?.openDialog(type, row);
});
};
- // 鎵撳紑鏂板妫�楠屽脊妗�
- const openInspectionForm = (type, row) => {
- nextTick(() => {
- inspectionFormDia.value?.openDialog(type, row);
- });
- };
// 鎵撳紑闄勪欢寮规
const openFilesFormDia = (type, row) => {
nextTick(() => {
filesDia.value?.openDialog(type, row);
});
- };
- // 鎻愪环
- const submit = async id => {
- const res = await submitQualityInspect({ id: id });
- if (res.code === 200) {
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- getList();
- }
- };
- const open = async row => {
- let userLists = await userListNoPage();
- userList.value = userLists.data;
- currentRow.value = row;
- dialogFormVisible.value = true;
- };
- // 鍏抽棴寮规
- 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();
- });
- }
};
// 鍒犻櫎
@@ -441,23 +286,6 @@
proxy.$modal.msg("宸插彇娑�");
});
};
- const downLoadFile = row => {
- downloadQualityInspect({ id: row.id }).then(blobData => {
- const blob = new Blob([blobData], {
- type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
- });
- const downloadUrl = window.URL.createObjectURL(blob);
-
- 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);
- });
- };
// 瀵煎嚭
const handleOut = () => {
ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
@@ -476,9 +304,42 @@
proxy.$modal.msg("宸插彇娑�");
});
};
+
+ // 鎻愪氦
+ const submit = async id => {
+ const res = await submitQualityInspect({ id: id });
+ if (res.code === 200) {
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ getList();
+ }
+ };
+
+ const downLoadFile = row => {
+ downloadQualityInspect({ id: row.id }).then(blobData => {
+ const blob = new Blob([blobData], {
+ type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ });
+ const downloadUrl = window.URL.createObjectURL(blob);
+
+ 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();
});
</script>
-<style scoped></style>
+<style scoped lang="scss">
+ .actions {
+ display: flex;
+ justify-content: flex-end;
+ margin-bottom: 10px;
+ }
+</style>
diff --git a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
index 2016416..ab9b0bf 100644
--- a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
@@ -6,29 +6,15 @@
width="70%"
@close="closeDia"
>
- <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
+ <el-form :model="form" label-position="top" :rules="rules" ref="formRef">
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="渚涘簲鍟嗭細" prop="supplier">
- <el-select
- v-model="form.supplier"
- placeholder="璇烽�夋嫨"
- clearable
- filterable
- :disabled="isViewMode || supplierQuantityDisabled"
- style="width: 100%"
- >
- <el-option
- v-for="item in supplierList"
- :key="item.id"
- :label="item.supplierName"
- :value="item.supplierName"
- />
- </el-select>
+ <el-form-item label="椤圭洰锛�" prop="projectName">
+ <el-input v-model="form.projectName" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="浜у搧鍚嶇О锛�" prop="productId">
+ <el-form-item label="鐗╂枡鍚嶇О锛�" prop="productId">
<el-tree-select
v-model="form.productId"
placeholder="璇烽�夋嫨"
@@ -45,89 +31,24 @@
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="productModelId">
- <el-select v-model="form.productModelId" placeholder="璇烽�夋嫨" clearable :disabled="isViewMode || operationType === 'edit'"
- filterable readonly @change="handleChangeModel">
- <el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鎸囨爣閫夋嫨锛�" prop="testStandardId">
- <el-select
- v-model="form.testStandardId"
- placeholder="璇烽�夋嫨鎸囨爣"
- clearable
- @change="handleTestStandardChange"
- style="width: 100%"
- :disabled="isViewMode"
- >
- <el-option
- v-for="item in testStandardOptions"
- :key="item.id"
- :label="item.standardName || item.standardNo"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="鍗曚綅锛�" prop="unit">
- <el-input v-model="form.unit" disabled/>
+ <el-form-item label="妫�楠屼緷鎹細" prop="acceptanceBasis">
+ <el-input v-model="form.acceptanceBasis" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
</el-form-item>
</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" :disabled="isViewMode || supplierQuantityDisabled"/>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="鍚堟牸鏁伴噺锛�" prop="qualifiedQuantity">
- <el-input-number :step="0.01" :min="0" :max="form.quantity || 0" style="width: 100%"
- v-model="form.qualifiedQuantity" placeholder="璇疯緭鍏�" :precision="2"
- @change="onQualifiedChange" :disabled="isViewMode"/>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="涓嶅悎鏍兼暟閲忥細" prop="unqualifiedQuantity">
- <el-input-number :step="0.01" :min="0" :max="form.quantity || 0" style="width: 100%"
- v-model="form.unqualifiedQuantity" placeholder="璇疯緭鍏�" :precision="2"
- @change="onUnqualifiedChange" :disabled="isViewMode"/>
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="妫�娴嬪崟浣嶏細" prop="checkCompany">
- <el-input v-model="form.checkCompany" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="妫�娴嬬粨鏋滐細" prop="checkResult">
- <el-select v-model="form.checkResult" :disabled="isViewMode">
- <el-option label="鍚堟牸" value="鍚堟牸"/>
- <el-option label="涓嶅悎鏍�" value="涓嶅悎鏍�"/>
- <el-option label="閮ㄥ垎鍚堟牸" value="閮ㄥ垎鍚堟牸"/>
- </el-select>
+ <el-input v-model="form.quantity" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="妫�楠屽憳锛�" prop="checkName">
- <el-select v-model="form.checkName" placeholder="璇烽�夋嫨" clearable style="width: 100%" :disabled="isViewMode">
- <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
- </el-select>
+ <el-form-item label="鎶芥鏁伴噺锛�" prop="samplingCount">
+ <el-input v-model="form.samplingCount" placeholder="0.00" clearable :disabled="isViewMode"/>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="妫�娴嬫棩鏈燂細" prop="checkTime">
+ <el-form-item label="妫�楠屾棩鏈燂細" prop="checkTime">
<el-date-picker
v-model="form.checkTime"
type="date"
@@ -141,21 +62,22 @@
</el-form-item>
</el-col>
</el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="寮傚父澶囨敞锛�" prop="abnormalRemark">
+ <el-input v-model="form.abnormalRemark" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍒ゅ畾锛�" prop="verdict">
+ <el-select v-model="form.verdict" placeholder="璇烽�夋嫨" clearable :disabled="isViewMode" style="width: 100%">
+ <el-option label="鍚堟牸" value="鍚堟牸" />
+ <el-option label="涓嶅悎鏍�" value="涓嶅悎鏍�" />
+ </el-select>
+ </el-form-item>
+ </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"
- height="400"
- >
- <template #slot="{ row }">
- <el-input v-model="row.testValue" clearable :disabled="isViewMode"/>
- </template>
- </PIMTable>
<template #footer>
<div class="dialog-footer">
<template v-if="!isViewMode">
@@ -171,214 +93,72 @@
<script setup>
import {ref, reactive, toRefs, computed, getCurrentInstance, nextTick} from "vue";
-import {getOptions} from "@/api/procurementManagement/procurementLedger.js";
-import {modelList, productTreeList} from "@/api/basicData/product.js";
+import {productTreeList} from "@/api/basicData/product.js";
import {qualityInspectAdd, qualityInspectUpdate} from "@/api/qualityManagement/rawMaterialInspection.js";
-import {qualityInspectParamDel, qualityInspectParamInfo} from "@/api/qualityManagement/qualityInspectParam.js";
-import {qualityInspectDetailByProductId, getQualityTestStandardParamByTestStandardId} from "@/api/qualityManagement/metricMaintenance.js";
-import {userListNoPage} from "@/api/system/user.js";
-
-const {proxy} = getCurrentInstance()
+const { proxy } = getCurrentInstance()
const emit = defineEmits(['close'])
const dialogFormVisible = ref(false);
-const operationType = ref('')
+const operationType = ref("");
const data = reactive({
form: {
+ id: "",
checkTime: "",
- supplier: "",
- checkName: "",
- productName: "",
productId: "",
- productModelId: "",
- model: "",
- testStandardId: "",
- unit: "",
- quantity: "",
- checkCompany: "",
- checkResult: "",
+ productName: "",
+ projectName: "",
+ acceptanceBasis: "",
+ quantity: undefined,
+ samplingCount: undefined,
+ abnormalRemark: "",
+ verdict: "",
},
rules: {
- checkTime: [{required: true, message: "璇疯緭鍏�", trigger: "blur"},],
- supplier: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
- checkName: [{required: false, message: "璇疯緭鍏�", trigger: "blur"}],
- productId: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
- productModelId: [{required: true, message: "璇烽�夋嫨浜у搧鍨嬪彿", trigger: "change"}],
- testStandardId: [{required: false, message: "璇烽�夋嫨鎸囨爣", trigger: "change"}],
- unit: [{required: false, message: "璇疯緭鍏�", trigger: "blur"}],
- quantity: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
- qualifiedQuantity: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
- unqualifiedQuantity: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
- checkCompany: [{required: false, message: "璇疯緭鍏�", trigger: "blur"}],
- checkResult: [{required: true, message: "璇烽�夋嫨妫�娴嬬粨鏋�", trigger: "change"}],
+ productId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
},
});
-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 { form, rules } = toRefs(data);
+// 宸叉彁浜ょ殑璁板綍鐐圭紪杈戞椂鎸夊彧璇诲鐞�
+const readOnlyEdit = ref(false);
+// 鏄惁涓哄彧璇绘ā寮忥紙鏌ョ湅 鎴� 宸叉彁浜よ褰曠偣缂栬緫锛�
+const isViewMode = computed(() => operationType.value === 'view' || readOnlyEdit.value);
const productOptions = ref([]);
const currentProductId = ref(0);
-const testStandardOptions = ref([]); // 鎸囨爣閫夋嫨涓嬫媺妗嗘暟鎹�
-const modelOptions = ref([]);
-const userList = ref([]); // 妫�楠屽憳涓嬫媺鍒楄〃
-
-// 鏄惁涓烘煡鐪嬫ā寮�
-const isViewMode = computed(() => operationType.value === 'view');
-
-// 缂栬緫鏃讹細productMainId 鎴� purchaseLedgerId 浠讳竴鏈夊�煎垯渚涘簲鍟嗐�佹暟閲忕疆鐏�
-const supplierQuantityDisabled = computed(() => {
- const v = form.value || {};
- return !!(v.productMainId != null || v.purchaseLedgerId != null);
-});
// 鎵撳紑寮规
const openDialog = async (type, row) => {
+ readOnlyEdit.value = type === 'edit' && row?.inspectState == 1;
operationType.value = type;
- getOptions().then((res) => {
- supplierList.value = res.data;
- });
-
- try {
- const userRes = await userListNoPage();
- userList.value = userRes.data || [];
- } catch (e) {
- console.error("鍔犺浇妫�楠屽憳鍒楄〃澶辫触", e);
- userList.value = [];
- }
- // 鍏堥噸缃〃鍗曟暟鎹紙淇濇寔瀛楁瀹屾暣锛岄伩鍏嶅脊绐楅娆℃覆鏌撴椂瑙﹀彂蹇呭~绾㈡鈥滈棯涓�涓嬧�濓級
- form.value = {
- checkTime: "",
- supplier: "",
- checkName: "",
- productName: "",
- productId: "",
- productModelId: "",
- model: "",
- testStandardId: "",
- unit: "",
- quantity: "",
- checkCompany: "",
- checkResult: "",
- }
- testStandardOptions.value = [];
- tableData.value = [];
- // 鍏堢‘淇濅骇鍝佹爲宸插姞杞斤紝鍚﹀垯缂栬緫鏃朵骇鍝�/瑙勬牸鍨嬪彿鏃犳硶鍙嶆樉
- await getProductOptions();
+ // 鍏堥噸缃〃鍗曪紝閬垮厤寮傛鍔犺浇澶辫触鏃舵畫鐣欎笂涓�娆′細璇濈殑鏁版嵁锛堝惈id锛�
+ form.value = { ...data.form };
if (operationType.value === 'edit' || operationType.value === 'view') {
- // 鍏堜繚瀛� testStandardId锛岄伩鍏嶈娓呯┖
- const savedTestStandardId = row.testStandardId;
- form.value = {...row}
- currentProductId.value = row.productId || 0
- // 鍏抽敭锛氱紪杈戞椂鍔犺浇瑙勬牸鍨嬪彿涓嬫媺閫夐」锛屾墠鑳藉弽鏄� productModelId
+ form.value = { ...form.value, ...row };
+ }
+ dialogFormVisible.value = true;
+ await nextTick();
+ proxy.$refs.formRef?.clearValidate();
+
+ await getProductOptions();
+
+ if (operationType.value === 'edit' || operationType.value === 'view') {
+ currentProductId.value = row.productId || 0;
if (currentProductId.value) {
- try {
- const res = await modelList({ id: currentProductId.value });
- modelOptions.value = res || [];
- // 鍚屾鍥炲~ model / unit锛堟湁浜涙帴鍙h繑鍥炵殑 row 閲屽彲鑳芥病甯﹀叏锛�
- if (form.value.productModelId) {
- handleChangeModel(form.value.productModelId);
- }
- } catch (e) {
- console.error("鍔犺浇瑙勬牸鍨嬪彿澶辫触", e);
- modelOptions.value = [];
- }
- }
- // 缂栬緫妯″紡涓嬶紝鍏堝姞杞芥寚鏍囬�夐」锛岀劧鍚庡姞杞藉弬鏁板垪琛�
- if (currentProductId.value) {
- // 鍏堝姞杞芥寚鏍囬�夐」
- let params = {
- productId: currentProductId.value,
- inspectType: 0
- }
- qualityInspectDetailByProductId(params).then(res => {
- testStandardOptions.value = res.data || [];
- // 浣跨敤 nextTick 鍜� setTimeout 纭繚閫夐」宸茬粡娓叉煋鍒� DOM
- nextTick(() => {
- setTimeout(() => {
- // 濡傛灉缂栬緫鏁版嵁涓湁 testStandardId锛屽垯璁剧疆骞跺姞杞藉搴旂殑鍙傛暟
- if (savedTestStandardId) {
- // 纭繚绫诲瀷鍖归厤锛坕tem.id 鍙兘鏄暟瀛楁垨瀛楃涓诧級
- const matchedOption = testStandardOptions.value.find(item =>
- item.id == savedTestStandardId || String(item.id) === String(savedTestStandardId)
- );
- if (matchedOption) {
- // 纭繚浣跨敤鍖归厤椤圭殑 id锛堜繚鎸佺被鍨嬩竴鑷达級
- form.value.testStandardId = matchedOption.id;
- // 缂栬緫淇濈暀鍘熸楠屽�硷紝鐩存帴鎷夊彇鍘熷弬鏁版暟鎹�
- getQualityInspectParamList(row.id);
- } else {
- // 濡傛灉鎵句笉鍒板尮閰嶉」锛屽皾璇曠洿鎺ヤ娇鐢ㄥ師鍊�
- console.warn('鏈壘鍒板尮閰嶇殑鎸囨爣閫夐」锛宼estStandardId:', savedTestStandardId, '鍙敤閫夐」:', testStandardOptions.value);
- form.value.testStandardId = savedTestStandardId;
- getQualityInspectParamList(row.id);
- }
- } else {
- // 鍚﹀垯浣跨敤鏃х殑閫昏緫
- getQualityInspectParamList(row.id);
- }
- }, 100);
- });
- });
- } else {
- getQualityInspectParamList(row.id);
+ form.value.productName = findNodeById(productOptions.value, currentProductId.value);
}
}
- // 鏈�鍚庡啀鎵撳紑寮圭獥锛屽苟娓呯悊鏍¢獙鎬侊紝閬垮厤蹇呭~鎻愮ず闂儊
- dialogFormVisible.value = true;
nextTick(() => {
- proxy.$refs?.formRef?.clearValidate?.();
+ proxy.$refs.formRef?.clearValidate();
});
-}
+};
const getProductOptions = () => {
return productTreeList().then((res) => {
productOptions.value = convertIdToValue(res);
- return productOptions.value;
});
};
const getModels = (value) => {
- form.value.productModelId = undefined;
- form.value.unit = undefined;
- modelOptions.value = [];
currentProductId.value = value
form.value.productName = findNodeById(productOptions.value, value);
- modelList({ id: value }).then((res) => {
- modelOptions.value = res;
- })
- if (currentProductId.value) {
- getList();
- }
};
-
-const handleChangeModel = (value) => {
- form.value.model = modelOptions.value.find(item => item.id == value)?.model || '';
- form.value.unit = modelOptions.value.find(item => item.id == value)?.unit || '';
-}
const findNodeById = (nodes, productId) => {
for (let i = 0; i < nodes.length; i++) {
@@ -394,10 +174,9 @@
}
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
@@ -409,114 +188,33 @@
return newItem;
});
}
-
// 鎻愪氦浜у搧琛ㄥ崟
const submitForm = () => {
proxy.$refs.formRef.validate(valid => {
if (valid) {
- form.value.inspectType = 0
- if (operationType.value === "add") {
- tableData.value.forEach((item) => {
- delete item.id
- })
- }
- const data = {...form.value, qualityInspectParams: tableData.value}
+ const data = { ...form.value, inspectType: 0 };
if (operationType.value === "add") {
+ delete data.id;
qualityInspectAdd(data).then(res => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeDia();
- })
+ });
} else {
qualityInspectUpdate(data).then(res => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeDia();
- })
+ });
}
}
- })
+ });
}
-
-const getList = () => {
- if (!currentProductId.value) {
- testStandardOptions.value = [];
- tableData.value = [];
- return;
- }
- let params = {
- productId: currentProductId.value,
- inspectType: 0
- }
- qualityInspectDetailByProductId(params).then(res => {
- // 淇濆瓨涓嬫媺妗嗛�夐」鏁版嵁
- testStandardOptions.value = res.data || [];
- // 娓呯┖琛ㄦ牸鏁版嵁锛岀瓑寰呯敤鎴烽�夋嫨鎸囨爣
- tableData.value = [];
- // 娓呯┖鎸囨爣閫夋嫨
- form.value.testStandardId = '';
- })
-}
-
-// 鎸囨爣閫夋嫨鍙樺寲澶勭悊
-const handleTestStandardChange = (testStandardId) => {
- if (!testStandardId) {
- tableData.value = [];
- return;
- }
- tableLoading.value = true;
- getQualityTestStandardParamByTestStandardId(testStandardId).then(res => {
- tableData.value = res.data || [];
- tableData.value = tableData.value.map(item => ({
- ...item,
- id: null
- }));
- }).catch(error => {
- console.error('鑾峰彇鏍囧噯鍙傛暟澶辫触:', error);
- tableData.value = [];
- }).finally(() => {
- tableLoading.value = false;
- })
-}
-
-const getQualityInspectParamList = (id) => {
- qualityInspectParamInfo(id).then(res => {
- tableData.value = res.data;
- })
-}
-// 鑷姩璁$畻鍚堟牸鏁伴噺鍙樺寲鏃剁殑涓嶅悎鏍兼暟閲�
-const onQualifiedChange = (value) => {
- if (form.value.quantity !== undefined && form.value.quantity !== null) {
- const maxUnqualified = form.value.quantity - value;
- if (maxUnqualified >= 0) {
- form.value.unqualifiedQuantity = maxUnqualified;
- } else {
- form.value.qualifiedQuantity = form.value.quantity;
- form.value.unqualifiedQuantity = 0;
- }
- }
-};
-
-// 鑷姩璁$畻涓嶅悎鏍兼暟閲忓彉鍖栨椂鐨勫悎鏍兼暟閲�
-const onUnqualifiedChange = (value) => {
- if (form.value.quantity !== undefined && form.value.quantity !== null) {
- const maxQualified = form.value.quantity - value;
- if (maxQualified >= 0) {
- form.value.qualifiedQuantity = maxQualified;
- } else {
- form.value.unqualifiedQuantity = form.value.quantity;
- form.value.qualifiedQuantity = 0;
- }
- }
-};
-
// 鍏抽棴寮规
const closeDia = () => {
proxy.resetForm("formRef");
- tableData.value = [];
- testStandardOptions.value = [];
- form.value.testStandardId = '';
+ readOnlyEdit.value = false;
dialogFormVisible.value = false;
- emit('close')
-};
+ emit('close');
+}
defineExpose({
openDialog,
});
diff --git a/src/views/qualityManagement/rawMaterialInspection/index.vue b/src/views/qualityManagement/rawMaterialInspection/index.vue
index ae221cd..80c788b 100644
--- a/src/views/qualityManagement/rawMaterialInspection/index.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/index.vue
@@ -1,37 +1,45 @@
<template>
<div class="app-container">
<div class="search_form mb20">
- <div>
- <span class="search_title">渚涘簲鍟嗭細</span>
- <el-input v-model="searchForm.supplier"
- style="width: 240px"
- placeholder="璇疯緭鍏ヤ緵搴斿晢鎼滅储"
- @change="handleQuery"
- 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-input v-model="searchForm.purchaseContractNo"-->
-<!-- style="width: 240px"-->
-<!-- placeholder="璇疯緭鍏ラ噰璐鍗曞彿鎼滅储"-->
-<!-- @change="handleQuery"-->
-<!-- clearable-->
-<!-- :prefix-icon="Search" />-->
- <el-button type="primary"
- @click="handleQuery"
- style="margin-left: 10px">鎼滅储
- </el-button>
- </div>
- <div>
+ <el-form ref="searchFormRef"
+ :model="searchForm"
+ class="demo-form-inline">
+ <el-row :gutter="32">
+ <el-col :span="6">
+ <el-form-item label="鐗╂枡鍚嶇О"
+ prop="productName">
+ <el-input v-model="searchForm.productName"
+ style="width: 300px"
+ placeholder="璇疯緭鍏ョ墿鏂欏悕绉版悳绱�"
+ clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="妫�楠屾棩鏈�"
+ prop="entryDate">
+ <el-date-picker v-model="searchForm.entryDate"
+ style="width: 360px"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ type="daterange"
+ start-placeholder="璧锋鏃ユ湡"
+ end-placeholder="璧锋鏃ユ湡"
+ range-separator="-"
+ clearable
+ @change="changeDaterange" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <el-form-item>
+ <el-button type="primary"
+ @click="getList">
+ 鎼滅储
+ </el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div class="actions">
<el-button type="primary"
@click="openForm('add')">鏂板</el-button>
<el-button @click="handleOut">瀵煎嚭</el-button>
@@ -51,46 +59,14 @@
@pagination="pagination"
:total="page.total"></PIMTable>
</div>
- <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="30%"
- @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 {
onMounted,
ref,
@@ -99,120 +75,76 @@
getCurrentInstance,
nextTick,
} 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 {
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";
- import useUserStore from "@/store/modules/user";
const data = reactive({
searchForm: {
- supplier: "",
- entryDate: undefined, // 褰曞叆鏃ユ湡
- purchaseContractNo: "",
+ productName: "",
+ entryDate: undefined, // 妫�楠屾棩鏈�
entryDateStart: undefined,
entryDateEnd: undefined,
},
- rules: {
- checkName: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
- },
});
- const { searchForm, rules } = toRefs(data);
+ const { searchForm } = toRefs(data);
const tableColumn = ref([
{
- label: "妫�娴嬫棩鏈�",
+ label: "妫�楠屾棩鏈�",
prop: "checkTime",
width: 120,
},
- // {
- // label: "閲囪喘璁㈠崟鍙�",
- // prop: "purchaseContractNo",
- // width: 120,
- // },
{
- label: "渚涘簲鍟�",
- prop: "supplier",
- width: 230,
+ label: "椤圭洰",
+ prop: "projectName",
+ minWidth: 160,
},
{
- label: "妫�楠屽憳",
- prop: "checkName",
- },
- {
- label: "浜у搧鍚嶇О",
+ label: "鐗╂枡鍚嶇О",
prop: "productName",
+ minWidth: 200,
},
{
- label: "瑙勬牸鍨嬪彿",
- prop: "model",
+ label: "妫�楠屼緷鎹�",
+ prop: "acceptanceBasis",
+ minWidth: 160,
},
{
- label: "鍗曚綅",
- prop: "unit",
- },
- {
- label: "鎬绘暟閲�",
+ label: "鏁伴噺",
prop: "quantity",
width: 100,
},
{
- label: "鍚堟牸鏁伴噺",
- prop: "qualifiedQuantity",
+ label: "鎶芥鏁伴噺",
+ prop: "samplingCount",
width: 100,
},
{
- label: "涓嶅悎鏍兼暟閲�",
- prop: "unqualifiedQuantity",
- width: 100,
- },
- {
- label: "鍚堟牸鐜�",
- prop: "passRate",
+ label: "鍒ゅ畾",
+ prop: "verdict",
width: 100,
dataType: "tag",
formatType: params => {
- if (!params) return "";
- const rate = parseFloat(params);
- if (rate < 90) {
- return "danger";
- } else if (rate === 100) {
+ if (params == "鍚堟牸") {
return "success";
- } else {
- return "warning";
- }
- },
- },
- {
- label: "妫�娴嬪崟浣�",
- prop: "checkCompany",
- width: 120,
- },
- {
- label: "妫�娴嬬粨鏋�",
- prop: "checkResult",
- dataType: "tag",
- formatType: params => {
- if (params === "涓嶅悎鏍�") {
+ } else if (params == "涓嶅悎鏍�") {
return "danger";
- } else if (params === "鍚堟牸") {
- return "success";
} else {
- return "danger";
+ return "info";
}
},
},
{
label: "鎻愪氦鐘舵��",
prop: "inspectState",
+ width: 100,
formatData: params => {
if (params) {
return "宸叉彁浜�";
@@ -226,22 +158,13 @@
label: "鎿嶄綔",
align: "center",
fixed: "right",
- width: 280,
+ width: 260,
operation: [
{
name: "缂栬緫",
type: "text",
clickFun: row => {
openForm("edit", row);
- },
- disabled: row => {
- // 宸叉彁浜ゅ垯绂佺敤
- if (row.inspectState == 1) return true;
- // 濡傛灉妫�楠屽憳鏈夊�硷紝鍙湁褰撳墠鐧诲綍鐢ㄦ埛鑳界紪杈�
- if (row.checkName) {
- return row.checkName !== userStore.nickName;
- }
- return false;
},
},
{
@@ -264,59 +187,29 @@
clickFun: row => {
submit(row.id);
},
- disabled: row => {
- // 宸叉彁浜ゅ垯绂佺敤
- if (row.inspectState == 1) return true;
- // 濡傛灉妫�楠屽憳鏈夊�硷紝鍙湁褰撳墠鐧诲綍鐢ㄦ埛鑳芥彁浜�
- if (row.checkName) {
- return row.checkName !== userStore.nickName;
- }
- return false;
- },
},
- {
- name: "鍒嗛厤妫�楠屽憳",
- type: "text",
- clickFun: row => {
- if (!row.checkName) {
- open(row);
- } else {
- proxy.$modal.msgError("妫�楠屽憳宸插瓨鍦�");
- }
- },
- disabled: row => {
- return row.inspectState == 1 || row.checkName;
- },
- },
- {
- name: "涓嬭浇",
- type: "text",
- clickFun: row => {
- downLoadFile(row);
- },
- },
+ // {
+ // name: "涓嬭浇",
+ // type: "text",
+ // clickFun: row => {
+ // downLoadFile(row);
+ // },
+ // },
],
},
]);
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 userStore = useUserStore();
+
const changeDaterange = value => {
searchForm.value.entryDateStart = undefined;
searchForm.value.entryDateEnd = undefined;
@@ -344,18 +237,7 @@
qualityInspectListPage({ ...params, inspectType: 0 })
.then(res => {
tableLoading.value = false;
- tableData.value = res.data.records.map(item => {
- const quantity = parseFloat(item.quantity);
- const qualifiedQuantity = parseFloat(item.qualifiedQuantity);
- let passRate = null;
- if (!isNaN(quantity) && !isNaN(qualifiedQuantity) && quantity > 0) {
- passRate = ((qualifiedQuantity / quantity) * 100).toFixed(2) + "%";
- }
- return {
- ...item,
- passRate: passRate,
- };
- });
+ tableData.value = res.data.records;
page.total = res.data.total;
})
.catch(err => {
@@ -423,40 +305,13 @@
});
};
- // 鎻愪环
+ // 鎻愪氦
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 => {
@@ -476,10 +331,15 @@
window.URL.revokeObjectURL(downloadUrl);
});
};
-
onMounted(() => {
getList();
});
</script>
-<style scoped></style>
+<style scoped lang="scss">
+ .actions {
+ display: flex;
+ justify-content: flex-end;
+ margin-bottom: 10px;
+ }
+</style>
--
Gitblit v1.9.3