From 41363e65800ce89dbc25797ef7873d80300983f7 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期一, 16 三月 2026 13:36:47 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_银川_中盛建材' into dev_银川_中盛建材
---
src/views/productionManagement/productionProcess/index.vue | 25
src/views/productionManagement/processRoute/index.vue | 923 ++++++++++++++++++------
src/views/qualityManagement/rawMaterialInspection/components/formDia.vue | 233 +++++-
src/views/qualityManagement/rawMaterialInspection/index.vue | 1004 +++++++++++++++++---------
src/views/productionManagement/productStructure/index.vue | 2
5 files changed, 1,547 insertions(+), 640 deletions(-)
diff --git a/src/views/productionManagement/processRoute/index.vue b/src/views/productionManagement/processRoute/index.vue
index afdd542..228ccb2 100644
--- a/src/views/productionManagement/processRoute/index.vue
+++ b/src/views/productionManagement/processRoute/index.vue
@@ -17,12 +17,12 @@
<div class="route-info">
<span class="route-name"><el-icon style="margin-right: 8px;line-height: 30px;">
<ScaleToOriginal />
- </el-icon>{{ route.routeName }}<el-tag style="margin-left: 8px"
- :type="route.status == 1 ? 'warning' : 'success'">{{ route.status == 1 ? '鑽夌' : '鎵瑰噯' }}</el-tag></span>
- <span class="route-code">{{ route.routeCode }}</span>
+ </el-icon>{{route.routeCode }}<el-tag style="margin-left: 8px"
+ :type="!route.status ? 'warning' : 'success'">{{ !route.status ? '鑽夌' : '鎵瑰噯' }}</el-tag></span>
+ <!-- <span class="route-code">{{ route.routeCode }}</span> -->
</div>
<div class="route-actions">
- <el-button v-if="route.status === '1'"
+ <el-button v-if="!route.status"
link
type="success"
@click="handleApproveRoute(route)">
@@ -31,7 +31,7 @@
</el-icon>
鎵瑰噯
</el-button>
- <el-button v-if="route.status === '2'"
+ <el-button v-if="route.status"
link
type="warning"
@click="handleRevokeApproveRoute(route)">
@@ -72,14 +72,14 @@
<Document />
</el-icon>
<span class="meta-label">BOM:</span>
- <span class="meta-value">{{ route.bomId || '-' }}</span>
+ <span class="meta-value">{{ route.bomNo || '-' }}</span>
</span>
<span class="meta-item">
<el-icon>
<Document />
</el-icon>
<span class="meta-label">璺嚎鎻忚堪:</span>
- <span class="meta-value">{{ route.routeDesc || '鏆傛棤鎻忚堪' }}</span>
+ <span class="meta-value">{{ route.description || '鏆傛棤鎻忚堪' }}</span>
</span>
</div>
<div class="expand-btn-wrapper">
@@ -121,9 +121,9 @@
</div>
</div>
<div class="process-node-body">
- <div class="process-code">{{ process.processCode }}</div>
- <div class="process-name">{{ process.processName }}</div>
- <div class="process-desc">{{ process.processDesc || '鏆傛棤鎻忚堪' }}</div>
+ <div class="process-code">{{ process.no }}</div>
+ <div class="process-name">{{ process.name }}</div>
+ <div class="process-desc">{{ process.remark || '鏆傛棤鎻忚堪' }}</div>
</div>
<div class="process-node-footer">
<!-- <el-tag size="small"
@@ -201,9 +201,6 @@
<span>鏂板宸ュ簭</span>
</div>
</div>
- <el-empty v-if="!route.processList || route.processList.length === 0"
- description="鏆傛棤宸ュ簭"
- :image-size="80" />
</div>
</div>
</div>
@@ -240,16 +237,12 @@
<el-form-item label="璺嚎缂栫爜"
prop="routeCode">
<el-input v-model="routeForm.routeCode"
- placeholder="璇疯緭鍏ヨ矾绾跨紪鐮�" />
- </el-form-item>
- <el-form-item label="璺嚎鍚嶇О"
- prop="routeName">
- <el-input v-model="routeForm.routeName"
- placeholder="璇疯緭鍏ヨ矾绾垮悕绉�" />
+ disabled
+ placeholder="鑷姩鐢熸垚" />
</el-form-item>
<el-form-item label="璺嚎鎻忚堪"
- prop="routeDesc">
- <el-input v-model="routeForm.routeDesc"
+ prop="description">
+ <el-input v-model="routeForm.description"
type="textarea"
:rows="3"
placeholder="璇疯緭鍏ヨ矾绾挎弿杩�" />
@@ -283,18 +276,18 @@
ref="processFormRef"
label-width="120px">
<el-form-item label="宸ュ簭缂栫爜"
- prop="processCode">
- <el-input v-model="processForm.processCode"
+ prop="no">
+ <el-input v-model="processForm.no"
placeholder="璇疯緭鍏ュ伐搴忕紪鐮�" />
</el-form-item>
<el-form-item label="宸ュ簭鍚嶇О"
- prop="processName">
- <el-input v-model="processForm.processName"
+ prop="name">
+ <el-input v-model="processForm.name"
placeholder="璇疯緭鍏ュ伐搴忓悕绉�" />
</el-form-item>
<el-form-item label="宸ュ簭鎻忚堪"
- prop="processDesc">
- <el-input v-model="processForm.processDesc"
+ prop="remark">
+ <el-input v-model="processForm.remark"
type="textarea"
:rows="3"
placeholder="璇疯緭鍏ュ伐搴忔弿杩�" />
@@ -302,8 +295,8 @@
<el-form-item label="鐘舵��"
prop="status">
<el-radio-group v-model="processForm.status">
- <el-radio label="1">鍚敤</el-radio>
- <el-radio label="0">鍋滅敤</el-radio>
+ <el-radio :label="true">鍚敤</el-radio>
+ <el-radio :label="false">鍋滅敤</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
@@ -341,20 +334,20 @@
border
highlight-current-row
@current-change="handleProcessSelect">
- <el-table-column prop="processCode"
+ <el-table-column prop="no"
label="宸ュ簭缂栧彿"
width="100" />
- <el-table-column prop="processName"
+ <el-table-column prop="name"
label="宸ュ簭鍚嶇О" />
- <el-table-column prop="processDesc"
+ <el-table-column prop="remark"
label="宸ュ簭鎻忚堪" />
<el-table-column prop="status"
label="鐘舵��"
width="80">
<template #default="scope">
<el-tag size="small"
- :type="scope.row.status === '1' ? 'success' : 'info'">
- {{ scope.row.status === '1' ? '鍚敤' : '鍋滅敤' }}
+ :type="scope.row.status ? 'success' : 'info'">
+ {{ scope.row.status ? '鍚敤' : '鍋滅敤' }}
</el-tag>
</template>
</el-table-column>
@@ -368,23 +361,29 @@
label-width="100px"
class="process-detail-form">
<el-form-item label="宸ュ簭缂栧彿">
- <span class="detail-text">{{ selectedProcessItem.processCode }}</span>
+ <span class="detail-text">{{ selectedProcessItem.no }}</span>
</el-form-item>
<el-form-item label="宸ュ簭鍚嶇О">
- <span class="detail-text">{{ selectedProcessItem.processName }}</span>
+ <span class="detail-text">{{ selectedProcessItem.name }}</span>
</el-form-item>
<el-form-item label="宸ュ簭鎻忚堪">
- <span class="detail-text">{{ selectedProcessItem.processDesc || '-' }}</span>
+ <span class="detail-text">{{ selectedProcessItem.remark || '-' }}</span>
</el-form-item>
<el-form-item label="鐘舵��">
<el-tag size="small"
- :type="selectedProcessItem.status === '1' ? 'success' : 'info'">
- {{ selectedProcessItem.status === '1' ? '鍚敤' : '鍋滅敤' }}
+ :type="selectedProcessItem.status ? 'success' : 'info'">
+ {{ selectedProcessItem.status ? '鍚敤' : '鍋滅敤' }}
</el-tag>
</el-form-item>
- <el-form-item label="鍙傛暟鏁伴噺">
- <span class="detail-text">{{ selectedProcessItem.paramCount || 0 }}涓�</span>
+ <el-form-item label="鏄惁璐ㄦ">
+ <el-tag size="small"
+ :type="selectedProcessItem.isQuality ? 'success' : 'info'">
+ {{ selectedProcessItem.isQuality ? '璐ㄦ' : '闈炶川妫�' }}
+ </el-tag>
</el-form-item>
+ <!-- <el-form-item label="鍙傛暟鏁伴噺">
+ <span class="detail-text">{{ selectedProcessItem.paramCount || 0 }}涓�</span>
+ </el-form-item> -->
</el-form>
<el-empty v-else
description="璇蜂粠宸︿晶閫夋嫨宸ュ簭" />
@@ -489,6 +488,186 @@
</span>
</template>
</el-dialog>
+ <!-- 閫夋嫨鍙傛暟瀵硅瘽妗� -->
+ <el-dialog v-model="selectParamDialogVisible"
+ title="閫夋嫨鍙傛暟"
+ width="1000px">
+ <div class="param-select-container">
+ <!-- 宸︿晶鍙傛暟鍒楄〃 -->
+ <div class="param-list-area">
+ <div class="area-title">鍙�夊弬鏁�</div>
+ <div class="search-box">
+ <el-input v-model="paramSearchKeyword"
+ placeholder="璇疯緭鍏ュ弬鏁板悕绉版悳绱�"
+ clearable
+ size="small"
+ @input="handleParamSearch">
+ <template #prefix>
+ <el-icon>
+ <Search />
+ </el-icon>
+ </template>
+ </el-input>
+ </div>
+ <el-table :data="filteredParamList"
+ height="300"
+ border
+ highlight-current-row
+ @current-change="handleParamSelect">
+ <el-table-column prop="paramName"
+ label="鍙傛暟鍚嶇О" />
+ <el-table-column prop="paramType"
+ label="鍙傛暟绫诲瀷">
+ <template #default="scope">
+ <el-tag size="small"
+ :type="getParamTypeTag(scope.row.paramType)">
+ {{ getParamTypeText(scope.row.paramType) }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ </el-table>
+ <!-- 鍒嗛〉鎺т欢 -->
+ <div class="pagination-container"
+ style="margin-top: 10px;">
+ <el-pagination v-model:current-page="paramPage.current"
+ v-model:page-size="paramPage.size"
+ :page-sizes="[10, 20, 50, 100]"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="paramPage.total"
+ @size-change="handleParamSizeChange"
+ @current-change="handleParamCurrentChange"
+ size="small" />
+ </div>
+ </div>
+ <!-- 鍙充晶鍙傛暟璇︽儏 -->
+ <div class="param-detail-area">
+ <div class="area-title">鍙傛暟璇︽儏</div>
+ <el-form v-if="selectedParam"
+ :model="selectedParam"
+ label-width="100px"
+ class="param-detail-form">
+ <el-form-item label="鍙傛暟鍚嶇О">
+ <span class="detail-text">{{ selectedParam.paramName }}</span>
+ </el-form-item>
+ <el-form-item label="鍙傛暟妯″紡">
+ <el-tag size="small"
+ :type="selectedParam.valueMode == '1' ? 'success' : 'warning'">
+ {{ selectedParam.valueMode == '1' ? '鍗曞��' : '鍖洪棿' }}
+ </el-tag>
+ </el-form-item>
+ <el-form-item label="鍙傛暟绫诲瀷">
+ <el-tag size="small"
+ :type="getParamTypeTag(selectedParam.paramType)">
+ {{ getParamTypeText(selectedParam.paramType) }}
+ </el-tag>
+ </el-form-item>
+ <el-form-item label="鍙傛暟鏍煎紡">
+ <span class="detail-text">{{ selectedParam.paramFormat || '-' }}</span>
+ </el-form-item>
+ <el-form-item label="鍗曚綅">
+ <span class="detail-text">{{ selectedParam.unit || '-' }}</span>
+ </el-form-item>
+ <el-form-item label="鏍囧噯鍊�"
+ v-if="selectedParam.valueMode == '1'">
+ <el-input v-model="selectedParam.standardValue"
+ type="number"
+ placeholder="璇疯緭鍏ラ粯璁ゅ��" />
+ </el-form-item>
+ <el-form-item label="鏈�灏忓��"
+ v-if="selectedParam.valueMode == '2'">
+ <el-input v-model="selectedParam.minValue"
+ type="number"
+ placeholder="璇疯緭鍏ユ渶灏忓��" />
+ </el-form-item>
+ <el-form-item label="鏈�澶у��"
+ v-if="selectedParam.valueMode == '2'">
+ <el-input v-model="selectedParam.maxValue"
+ type="number"
+ placeholder="璇疯緭鍏ユ渶澶у��" />
+ </el-form-item>
+ <el-form-item label="鎺掑簭">
+ <el-input v-model="selectedParam.sort"
+ type="number"
+ placeholder="璇疯緭鍏ユ帓搴�" />
+ </el-form-item>
+ <el-form-item label="鏄惁蹇呭~">
+ <el-switch v-model="selectedParam.isRequired"
+ :active-value="1"
+ :inactive-value="0" />
+ </el-form-item>
+ </el-form>
+ <el-empty v-else
+ description="璇蜂粠宸︿晶閫夋嫨鍙傛暟" />
+ </div>
+ </div>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="selectParamDialogVisible = false">鍙栨秷</el-button>
+ <el-button type="primary"
+ :disabled="!selectedParam"
+ @click="handleParamSelectSubmit">纭畾</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <!-- 缂栬緫鍙傛暟瀵硅瘽妗� -->
+ <el-dialog v-model="editParamDialogVisible"
+ title="缂栬緫鍙傛暟"
+ width="600px">
+ <el-form :model="editParamForm"
+ :rules="editParamRules"
+ ref="editParamFormRef"
+ label-width="120px">
+ <el-form-item label="鍙傛暟鍚嶇О">
+ <span class="detail-text">{{ editParamForm.paramName }}</span>
+ </el-form-item>
+ <el-form-item label="鍙傛暟妯″紡">
+ <el-tag size="small"
+ :type="editParamForm.valueMode == '1' ? 'success' : 'warning'">
+ {{ editParamForm.valueMode == '1' ? '鍗曞��' : '鍖洪棿' }}
+ </el-tag>
+ </el-form-item>
+ <el-form-item label="鏍囧噯鍊�"
+ v-if="editParamForm.valueMode == '1'"
+ prop="standardValue">
+ <el-input v-model="editParamForm.standardValue"
+ type="number"
+ placeholder="璇疯緭鍏ユ爣鍑嗗��" />
+ </el-form-item>
+ <el-form-item label="鏈�灏忓��"
+ v-if="editParamForm.valueMode == '2'"
+ prop="minValue">
+ <el-input v-model="editParamForm.minValue"
+ type="number"
+ placeholder="璇疯緭鍏ユ渶灏忓��" />
+ </el-form-item>
+ <el-form-item label="鏈�澶у��"
+ v-if="editParamForm.valueMode == '2'"
+ prop="maxValue">
+ <el-input v-model="editParamForm.maxValue"
+ type="number"
+ placeholder="璇疯緭鍏ユ渶澶у��" />
+ </el-form-item>
+ <el-form-item label="鎺掑簭"
+ prop="sort">
+ <el-input v-model="editParamForm.sort"
+ type="number"
+ placeholder="璇疯緭鍏ユ帓搴�" />
+ </el-form-item>
+ <el-form-item label="鏄惁蹇呭~"
+ prop="isRequired">
+ <el-switch v-model="editParamForm.isRequired"
+ :active-value="1"
+ :inactive-value="0" />
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="editParamDialogVisible = false">鍙栨秷</el-button>
+ <el-button type="primary"
+ @click="handleEditParamSubmit">纭畾</el-button>
+ </span>
+ </template>
+ </el-dialog>
</div>
</template>
@@ -510,6 +689,9 @@
} from "@element-plus/icons-vue";
import { listType } from "@/api/system/dict/type";
import { getByModel } from "@/api/productionManagement/productBom.js";
+ import { add, update, del } from "@/api/productionManagement/processRoute.js";
+ import { list as getProcessListApi } from "@/api/productionManagement/productionProcess.js";
+ import { getBaseParamList } from "@/api/basicData/parameterMaintenance.js";
import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
// 宸ヨ壓璺嚎鍒楄〃
@@ -534,17 +716,14 @@
productModelName: "",
bomId: null,
routeCode: "",
- routeName: "",
- routeDesc: "",
- status: "1",
+ description: "",
+ status: true,
});
const routeRules = {
productModelId: [
{ required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" },
],
bomId: [{ required: true, message: "璇烽�夋嫨BOM", trigger: "change" }],
- routeCode: [{ required: true, message: "璇疯緭鍏ヨ矾绾跨紪鐮�", trigger: "blur" }],
- routeName: [{ required: true, message: "璇疯緭鍏ヨ矾绾垮悕绉�", trigger: "blur" }],
};
// 宸ュ簭瀵硅瘽妗�
@@ -554,14 +733,14 @@
const currentRouteId = ref(null);
const processForm = reactive({
id: null,
- processCode: "",
- processName: "",
- processDesc: "",
- status: "1",
+ no: "",
+ name: "",
+ remark: "",
+ status: true,
});
const processRules = {
- processCode: [{ required: true, message: "璇疯緭鍏ュ伐搴忕紪鐮�", trigger: "blur" }],
- processName: [{ required: true, message: "璇疯緭鍏ュ伐搴忓悕绉�", trigger: "blur" }],
+ no: [{ required: true, message: "璇疯緭鍏ュ伐搴忕紪鐮�", trigger: "blur" }],
+ name: [{ required: true, message: "璇疯緭鍏ュ伐搴忓悕绉�", trigger: "blur" }],
};
// 閫夋嫨宸ュ簭瀵硅瘽妗�
@@ -599,121 +778,126 @@
],
};
+ // 閫夋嫨鍙傛暟瀵硅瘽妗�
+ const selectParamDialogVisible = ref(false);
+ const availableParamList = ref([]);
+ const filteredParamList = ref([]);
+ const selectedParam = ref(null);
+ const paramSearchKeyword = ref("");
+
+ // 鍙�夊弬鏁板垎椤�
+ const paramPage = reactive({
+ current: 1,
+ size: 10,
+ total: 0,
+ });
+
+ // 缂栬緫鍙傛暟瀵硅瘽妗�
+ const editParamDialogVisible = ref(false);
+ const editParamFormRef = ref(null);
+ const editParamForm = reactive({
+ id: null,
+ processId: null,
+ paramId: null,
+ paramName: "",
+ valueMode: "1",
+ standardValue: null,
+ minValue: null,
+ maxValue: null,
+ sort: 1,
+ isRequired: 0,
+ });
+ const editParamRules = reactive({
+ standardValue: [
+ {
+ required: true,
+ message: "璇疯緭鍏ユ爣鍑嗗��",
+ trigger: "blur",
+ validator: (rule, value, callback) => {
+ if (value === null || value === undefined || value === "") {
+ callback(new Error("璇疯緭鍏ユ爣鍑嗗��"));
+ } else {
+ callback();
+ }
+ },
+ },
+ ],
+ minValue: [
+ {
+ required: true,
+ message: "璇疯緭鍏ユ渶灏忓��",
+ trigger: "blur",
+ validator: (rule, value, callback) => {
+ if (value === null || value === undefined || value === "") {
+ callback(new Error("璇疯緭鍏ユ渶灏忓��"));
+ } else {
+ callback();
+ }
+ },
+ },
+ ],
+ maxValue: [
+ {
+ required: true,
+ message: "璇疯緭鍏ユ渶澶у��",
+ trigger: "blur",
+ validator: (rule, value, callback) => {
+ if (value === null || value === undefined || value === "") {
+ callback(new Error("璇疯緭鍏ユ渶澶у��"));
+ } else {
+ callback();
+ }
+ },
+ },
+ ],
+ sort: [
+ {
+ required: true,
+ message: "璇疯緭鍏ユ帓搴�",
+ trigger: "blur",
+ validator: (rule, value, callback) => {
+ if (value === null || value === undefined || value === "") {
+ callback(new Error("璇疯緭鍏ユ帓搴�"));
+ } else if (isNaN(value) || value < 1) {
+ callback(new Error("鎺掑簭蹇呴』鏄ぇ浜�0鐨勬暣鏁�"));
+ } else {
+ callback();
+ }
+ },
+ },
+ ],
+ });
+
// 鎷栨嫿鐩稿叧
const draggedItem = ref(null);
const draggedRouteId = ref(null);
// 鑾峰彇宸ヨ壓璺嚎鍒楄〃
const getRouteList = () => {
- routeList.value = [
- {
- id: 1,
- productModelId: 1,
- productName: "鏍囧噯鐮屽潡",
- productModelName: "3.5鍨�",
- bomId: 1,
- routeCode: "ROUTE001",
- routeName: "鏍囧噯鐮屽潡鐢熶骇绾�",
- routeDesc: "鏍囧噯鐮屽潡鐢熶骇娴佺▼",
- status: "1",
- expanded: false,
- processList: [
- {
- id: 1,
- processCode: "PROC001",
- processName: "鍘熸枡閰嶆瘮",
- processDesc: "鍘熸潗鏂欓厤姣斿伐搴�",
- status: "1",
+ // 瀵煎叆 listPage 鏂规硶
+ import("@/api/productionManagement/processRoute.js").then(({ listPage }) => {
+ listPage({ pageNum: 1, pageSize: 100 })
+ .then(res => {
+ // 澶勭悊杩斿洖鐨勬暟鎹紝鏄犲皠鍒伴〉闈㈤渶瑕佺殑鏍煎紡
+ routeList.value = (res.data?.records || []).map(item => ({
+ id: item.id,
+ productModelId: item.productModelId,
+ productName: item.productName,
+ productModelName: item.model || item.productModelName,
+ bomId: item.bomId,
+ bomNo: item.bomNo,
+ routeCode: item.processRouteCode || item.routeCode,
+ description: item.description || item.description,
+ status: item.status,
expanded: false,
- paramList: [
- {
- id: 1,
- parameterCode: "P001",
- parameterName: "姘存偿姣斾緥",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "30",
- unit: "%",
- },
- {
- id: 2,
- parameterCode: "P002",
- parameterName: "鐮傛瘮渚�",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "60",
- unit: "%",
- },
- ],
- },
- {
- id: 2,
- processCode: "PROC002",
- processName: "鎼呮媽娣峰悎",
- processDesc: "鎼呮媽娣峰悎宸ュ簭",
- status: "1",
- expanded: false,
- paramList: [
- {
- id: 3,
- parameterCode: "P003",
- parameterName: "鎼呮媽鏃堕棿",
- parameterType2: "1",
- parameterType: "鏁板�兼牸寮�",
- parameterFormat: "",
- standardValue: "5",
- unit: "鍒嗛挓",
- },
- ],
- },
- {
- id: 3,
- processCode: "PROC003",
- processName: "娴囩瓚鎴愬瀷",
- processDesc: "娴囩瓚鎴愬瀷宸ュ簭",
- status: "1",
- expanded: false,
- paramList: [],
- },
- ],
- },
- {
- id: 2,
- productModelId: 2,
- productName: "鏉挎潗",
- productModelName: "5.0鍨�",
- bomId: 2,
- routeCode: "ROUTE002",
- routeName: "鏉挎潗鐢熶骇绾�",
- routeDesc: "鏉挎潗鐢熶骇娴佺▼",
- status: "1",
- expanded: false,
- processList: [
- {
- id: 4,
- processCode: "PROC004",
- processName: "鍒囧壊鍔犲伐",
- processDesc: "鍒囧壊鍔犲伐宸ュ簭",
- status: "1",
- expanded: false,
- paramList: [
- {
- id: 4,
- parameterCode: "P004",
- parameterName: "鍒囧壊灏哄",
- parameterType2: "1",
- parameterType: "鏂囨湰鏍煎紡",
- parameterFormat: "",
- standardValue: "600x200x100",
- unit: "mm",
- },
- ],
- },
- ],
- },
- ];
+ processList: item.processList || [],
+ }));
+ })
+ .catch(err => {
+ console.error("鑾峰彇宸ヨ壓璺嚎鍒楄〃澶辫触锛�", err);
+ routeList.value = [];
+ });
+ });
};
// 灞曞紑/鏀惰捣宸ヨ壓璺嚎
@@ -735,9 +919,8 @@
routeForm.productModelName = "";
routeForm.bomId = null;
routeForm.routeCode = "";
- routeForm.routeName = "";
- routeForm.routeDesc = "";
- routeForm.status = "1";
+ routeForm.description = "";
+ routeForm.status = false;
bomOptions.value = [];
routeDialogVisible.value = true;
};
@@ -750,8 +933,7 @@
routeForm.productModelName = route.productModelName;
routeForm.bomId = route.bomId;
routeForm.routeCode = route.routeCode;
- routeForm.routeName = route.routeName;
- routeForm.routeDesc = route.routeDesc;
+ routeForm.description = route.description;
routeForm.status = route.status;
routeDialogVisible.value = true;
};
@@ -762,17 +944,52 @@
cancelButtonText: "鍙栨秷",
type: "warning",
}).then(() => {
- ElMessage.success("鍒犻櫎鎴愬姛");
- getRouteList();
+ del(route.id)
+ .then(res => {
+ ElMessage.success("鍒犻櫎鎴愬姛");
+ getRouteList();
+ })
+ .catch(err => {
+ ElMessage.error("鍒犻櫎澶辫触");
+ });
});
};
const handleRouteSubmit = () => {
routeFormRef.value.validate(valid => {
if (valid) {
- ElMessage.success(isRouteEdit.value ? "缂栬緫鎴愬姛" : "鏂板鎴愬姛");
- routeDialogVisible.value = false;
- getRouteList();
+ // 鏋勫缓鎻愪氦鏁版嵁
+ const submitData = {
+ ...routeForm,
+ // 娉ㄦ剰锛欰PI 鏈熸湜鐨勫瓧娈靛悕鍙兘涓庤〃鍗曞瓧娈靛悕涓嶅悓
+ productId: routeForm.productModelId,
+ productModelId: routeForm.productModelId,
+ description: routeForm.description,
+ };
+
+ if (isRouteEdit.value) {
+ // 缂栬緫鎿嶄綔
+ update(submitData)
+ .then(res => {
+ ElMessage.success("缂栬緫鎴愬姛");
+ routeDialogVisible.value = false;
+ getRouteList();
+ })
+ .catch(err => {
+ ElMessage.error("缂栬緫澶辫触");
+ });
+ } else {
+ // 鏂板鎿嶄綔
+ add(submitData)
+ .then(res => {
+ ElMessage.success("鏂板鎴愬姛");
+ routeDialogVisible.value = false;
+ getRouteList();
+ })
+ .catch(err => {
+ ElMessage.error("鏂板澶辫触");
+ });
+ }
}
});
};
@@ -819,8 +1036,15 @@
cancelButtonText: "鍙栨秷",
type: "info",
}).then(() => {
- route.status = "2";
- ElMessage.success("鎵瑰噯鎴愬姛");
+ // 璋冪敤淇敼鎺ュ彛锛屽彧淇敼status瀛楁涓烘壒鍑嗙姸鎬�
+ update({ id: route.id, status: true })
+ .then(res => {
+ ElMessage.success("鎵瑰噯鎴愬姛");
+ getRouteList();
+ })
+ .catch(err => {
+ ElMessage.error("鎵瑰噯澶辫触");
+ });
});
};
@@ -830,8 +1054,15 @@
cancelButtonText: "鍙栨秷",
type: "warning",
}).then(() => {
- route.status = "1";
- ElMessage.success("鎾ら攢鎵瑰噯鎴愬姛");
+ // 璋冪敤淇敼鎺ュ彛锛屽彧淇敼status瀛楁涓鸿崏绋跨姸鎬�
+ update({ id: route.id, status: false })
+ .then(res => {
+ ElMessage.success("鎾ら攢鎵瑰噯鎴愬姛");
+ getRouteList();
+ })
+ .catch(err => {
+ ElMessage.error("鎾ら攢鎵瑰噯澶辫触");
+ });
});
};
@@ -839,62 +1070,35 @@
const handleSelectProcess = (route, index) => {
currentRouteId.value = route.id;
currentRouteIndex.value = index;
- // 鑾峰彇鍙�夊伐搴忓垪琛紙鍋囨暟鎹級
- availableProcessList.value = [
- {
- id: 1,
- processCode: "PROC001",
- processName: "鍘熸枡閰嶆瘮",
- processDesc: "鍘熸潗鏂欓厤姣斿伐搴�",
- status: "1",
- paramCount: 3,
- },
- {
- id: 2,
- processCode: "PROC002",
- processName: "鎼呮媽娣峰悎",
- processDesc: "鎼呮媽娣峰悎宸ュ簭",
- status: "1",
- paramCount: 2,
- },
- {
- id: 3,
- processCode: "PROC003",
- processName: "娴囩瓚鎴愬瀷",
- processDesc: "娴囩瓚鎴愬瀷宸ュ簭",
- status: "1",
- paramCount: 4,
- },
- {
- id: 4,
- processCode: "PROC004",
- processName: "钂稿帇鍏绘姢",
- processDesc: "钂稿帇鍏绘姢宸ュ簭",
- status: "0",
- paramCount: 2,
- },
- {
- id: 5,
- processCode: "PROC005",
- processName: "鍒囧壊鍔犲伐",
- processDesc: "鍒囧壊鍔犲伐宸ュ簭",
- status: "1",
- paramCount: 3,
- },
- ];
- filteredProcessList.value = availableProcessList.value;
- processSearchKeyword.value = "";
- selectedProcessItem.value = null;
- selectProcessDialogVisible.value = true;
+ // 鑾峰彇鍙�夊伐搴忓垪琛�
+ getProcessListApi()
+ .then(res => {
+ // 澶勭悊杩斿洖鐨勬暟鎹紝鏄犲皠鍒伴〉闈㈤渶瑕佺殑鏍煎紡
+ availableProcessList.value = (res.data || []).map(item => ({
+ id: item.id,
+ no: item.no || item.no,
+ name: item.name || item.name,
+ remark: item.remark || item.remark,
+ status: item.status,
+ isQuality: item.isQuality,
+ }));
+ filteredProcessList.value = availableProcessList.value;
+ processSearchKeyword.value = "";
+ selectedProcessItem.value = null;
+ selectProcessDialogVisible.value = true;
+ })
+ .catch(() => {
+ ElMessage.error("鑾峰彇宸ュ簭鍒楄〃澶辫触");
+ });
};
const handleEditProcess = (routeId, process) => {
currentRouteId.value = routeId;
isProcessEdit.value = true;
processForm.id = process.id;
- processForm.processCode = process.processCode;
- processForm.processName = process.processName;
- processForm.processDesc = process.processDesc;
+ processForm.no = process.no;
+ processForm.name = process.name;
+ processForm.remark = process.remark;
processForm.status = process.status;
processDialogVisible.value = true;
};
@@ -927,7 +1131,7 @@
filteredProcessList.value = availableProcessList.value;
} else {
filteredProcessList.value = availableProcessList.value.filter(item =>
- item.processName.toLowerCase().includes(keyword)
+ item.name.toLowerCase().includes(keyword)
);
}
};
@@ -955,9 +1159,9 @@
// 娣诲姞宸ュ簭鍒板伐鑹鸿矾绾�
const newProcess = {
id: Date.now(),
- processCode: selectedProcessItem.value.processCode,
- processName: selectedProcessItem.value.processName,
- processDesc: selectedProcessItem.value.processDesc,
+ no: selectedProcessItem.value.no,
+ name: selectedProcessItem.value.name,
+ remark: selectedProcessItem.value.remark,
status: selectedProcessItem.value.status,
paramList: [],
expanded: false,
@@ -972,31 +1176,39 @@
const handleAddParam = (routeId, process) => {
currentRouteId.value = routeId;
currentProcessId.value = process.id;
- isParamEdit.value = false;
- paramForm.id = null;
- paramForm.parameterCode = "";
- paramForm.parameterName = "";
- paramForm.parameterType2 = "1";
- paramForm.parameterType = "";
- paramForm.parameterFormat = "";
- paramForm.standardValue = "";
- paramForm.unit = "";
- paramDialogVisible.value = true;
+ selectedParam.value = null;
+ paramSearchKeyword.value = "";
+ paramPage.current = 1;
+ // 鑾峰彇鍙�夊弬鏁板垪琛�
+ getBaseParamList({
+ paramName: paramSearchKeyword.value,
+ current: paramPage.current,
+ size: paramPage.size,
+ }).then(res => {
+ if (res.code === 200) {
+ filteredParamList.value = res.data?.records || [];
+ paramPage.total = res.data?.total || 0;
+ } else {
+ ElMessage.error(res.msg || "鏌ヨ澶辫触");
+ }
+ });
+ selectParamDialogVisible.value = true;
};
const handleEditParam = (routeId, process, param) => {
currentRouteId.value = routeId;
currentProcessId.value = process.id;
- isParamEdit.value = true;
- paramForm.id = param.id;
- paramForm.parameterCode = param.parameterCode;
- paramForm.parameterName = param.parameterName;
- paramForm.parameterType2 = param.parameterType2 || "1";
- paramForm.parameterType = param.parameterType;
- paramForm.parameterFormat = param.parameterFormat;
- paramForm.standardValue = param.standardValue;
- paramForm.unit = param.unit;
- paramDialogVisible.value = true;
+ editParamForm.id = param.id;
+ editParamForm.processId = process.id;
+ editParamForm.paramId = param.paramId;
+ editParamForm.paramName = param.parameterName || param.paramName;
+ editParamForm.valueMode = param.parameterType2 || param.valueMode || "1";
+ editParamForm.standardValue = param.standardValue;
+ editParamForm.minValue = param.minValue;
+ editParamForm.maxValue = param.maxValue;
+ editParamForm.sort = param.sort || 1;
+ editParamForm.isRequired = param.isRequired || 0;
+ editParamDialogVisible.value = true;
};
const handleDeleteParam = (routeId, process, param) => {
@@ -1032,12 +1244,161 @@
const getParamTypeTag = type => {
const typeMap = {
+ 1: "primary",
+ 2: "info",
+ 3: "warning",
+ 4: "success",
鏁板�兼牸寮�: "primary",
鏂囨湰鏍煎紡: "info",
涓嬫媺閫夐」: "warning",
鏃堕棿鏍煎紡: "success",
};
return typeMap[type] || "default";
+ };
+
+ const getParamTypeText = type => {
+ const typeMap = {
+ 1: "鏁板�兼牸寮�",
+ 2: "鏂囨湰鏍煎紡",
+ 3: "涓嬫媺閫夐」",
+ 4: "鏃堕棿鏍煎紡",
+ 鏁板�兼牸寮�: "鏁板�兼牸寮�",
+ 鏂囨湰鏍煎紡: "鏂囨湰鏍煎紡",
+ 涓嬫媺閫夐」: "涓嬫媺閫夐」",
+ 鏃堕棿鏍煎紡: "鏃堕棿鏍煎紡",
+ };
+ return typeMap[type] || "鏈煡鍙傛暟绫诲瀷";
+ };
+
+ // 閫夋嫨鍙傛暟鐩稿叧鏂规硶
+ const handleParamSearch = () => {
+ // 閲嶇疆鍒嗛〉
+ paramPage.current = 1;
+ // 閲嶆柊鍔犺浇鏁版嵁
+ getBaseParamList({
+ paramName: paramSearchKeyword.value,
+ current: paramPage.current,
+ size: paramPage.size,
+ }).then(res => {
+ if (res.code === 200) {
+ filteredParamList.value = res.data?.records || [];
+ paramPage.total = res.data?.total || 0;
+ } else {
+ ElMessage.error(res.msg || "鏌ヨ澶辫触");
+ }
+ });
+ };
+
+ const handleParamSelect = row => {
+ selectedParam.value = row;
+ };
+
+ // 澶勭悊鍒嗛〉澶у皬鍙樺寲
+ const handleParamSizeChange = size => {
+ paramPage.size = size;
+ getBaseParamList({
+ paramName: paramSearchKeyword.value,
+ current: paramPage.current,
+ size: paramPage.size,
+ }).then(res => {
+ if (res.code === 200) {
+ filteredParamList.value = res.data?.records || [];
+ paramPage.total = res.data?.total || 0;
+ } else {
+ ElMessage.error(res.msg || "鏌ヨ澶辫触");
+ }
+ });
+ };
+
+ // 澶勭悊褰撳墠椤电爜鍙樺寲
+ const handleParamCurrentChange = current => {
+ paramPage.current = current;
+ getBaseParamList({
+ paramName: paramSearchKeyword.value,
+ current: paramPage.current,
+ size: paramPage.size,
+ }).then(res => {
+ if (res.code === 200) {
+ filteredParamList.value = res.data?.records || [];
+ paramPage.total = res.data?.total || 0;
+ } else {
+ ElMessage.error(res.msg || "鏌ヨ澶辫触");
+ }
+ });
+ };
+
+ const handleParamSelectSubmit = () => {
+ if (!selectedParam.value) {
+ ElMessage.warning("璇峰厛閫夋嫨涓�涓弬鏁�");
+ return;
+ }
+
+ // 鎵惧埌瀵瑰簲鐨勫伐鑹鸿矾绾垮拰宸ュ簭
+ const route = routeList.value.find(r => r.id === currentRouteId.value);
+ const process = route?.processList.find(p => p.id === currentProcessId.value);
+
+ if (route && process) {
+ // 妫�鏌ュ弬鏁版槸鍚﹀凡瀛樺湪
+ const exists = process.paramList?.some(
+ p =>
+ p.paramId === selectedParam.value.id ||
+ p.parameterCode === selectedParam.value.paramCode
+ );
+ if (exists) {
+ ElMessage.warning("璇ュ弬鏁板凡瀛樺湪浜庡伐搴忎腑");
+ return;
+ }
+
+ // 娣诲姞宸ュ簭鍒板伐鑹鸿矾绾�
+ const newParam = {
+ id: Date.now(),
+ paramId: selectedParam.value.id,
+ parameterCode: selectedParam.value.paramCode,
+ parameterName: selectedParam.value.paramName,
+ parameterType2: selectedParam.value.valueMode || "1",
+ parameterType: selectedParam.value.paramType,
+ parameterFormat: selectedParam.value.paramFormat,
+ standardValue: selectedParam.value.standardValue,
+ minValue: selectedParam.value.minValue,
+ maxValue: selectedParam.value.maxValue,
+ unit: selectedParam.value.unit,
+ sort: selectedParam.value.sort || 1,
+ isRequired: selectedParam.value.isRequired || 0,
+ };
+
+ if (!process.paramList) {
+ process.paramList = [];
+ }
+
+ process.paramList.push(newParam);
+ ElMessage.success("娣诲姞鍙傛暟鎴愬姛");
+ selectParamDialogVisible.value = false;
+ }
+ };
+
+ const handleEditParamSubmit = () => {
+ editParamFormRef.value.validate(valid => {
+ if (valid) {
+ // 鎵惧埌瀵瑰簲鐨勫伐鑹鸿矾绾裤�佸伐搴忓拰鍙傛暟
+ const route = routeList.value.find(r => r.id === currentRouteId.value);
+ const process = route?.processList.find(
+ p => p.id === currentProcessId.value
+ );
+ const param = process?.paramList.find(p => p.id === editParamForm.id);
+
+ if (param) {
+ // 鏇存柊鍙傛暟淇℃伅
+ param.standardValue = editParamForm.standardValue;
+ param.minValue = editParamForm.minValue;
+ param.maxValue = editParamForm.maxValue;
+ param.sort = editParamForm.sort;
+ param.isRequired = editParamForm.isRequired;
+
+ ElMessage.success("缂栬緫鎴愬姛");
+ editParamDialogVisible.value = false;
+ }
+ }
+ });
};
// 鎷栨嫿鎺掑簭
@@ -1570,4 +1931,70 @@
}
}
}
+
+ // 閫夋嫨鍙傛暟瀵硅瘽妗嗘牱寮�
+ .param-select-container {
+ display: flex;
+ gap: 20px;
+ height: 450px;
+
+ .param-list-area {
+ // flex: 1;
+ width: 380px;
+ display: flex;
+ flex-direction: column;
+
+ .area-title {
+ font-size: 14px;
+ font-weight: 600;
+ color: #303133;
+ margin-bottom: 12px;
+ padding-bottom: 8px;
+ border-bottom: 1px solid #ebeef5;
+ }
+
+ .search-box {
+ margin-bottom: 12px;
+
+ .el-input {
+ width: 100%;
+ }
+ }
+ }
+
+ .param-detail-area {
+ // width: 380px;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ background: #f5f7fa;
+ border-radius: 8px;
+ padding: 16px;
+
+ .area-title {
+ font-size: 14px;
+ font-weight: 600;
+ color: #303133;
+ margin-bottom: 16px;
+ padding-bottom: 8px;
+ border-bottom: 1px solid #ebeef5;
+ }
+
+ .param-detail-form {
+ .el-form-item {
+ margin-bottom: 12px;
+
+ .el-form-item__label {
+ color: #606266;
+ font-weight: 500;
+ }
+ }
+
+ .detail-text {
+ color: #303133;
+ font-weight: 500;
+ }
+ }
+ }
+ }
</style>
diff --git a/src/views/productionManagement/productStructure/index.vue b/src/views/productionManagement/productStructure/index.vue
index 96c0b8d..abf4fd2 100644
--- a/src/views/productionManagement/productStructure/index.vue
+++ b/src/views/productionManagement/productStructure/index.vue
@@ -50,7 +50,7 @@
prop="productModelId">
<el-button type="primary"
@click="showProductSelectDialog = true">
- {{ form.productName || '閫夋嫨浜у搧' }}
+ {{ form.productName || '閫夋嫨浜у搧' }}-{{ form.productModelName }}
</el-button>
</el-form-item>
<el-form-item label="鐗堟湰鍙�"
diff --git a/src/views/productionManagement/productionProcess/index.vue b/src/views/productionManagement/productionProcess/index.vue
index af6bbfa..9994b94 100644
--- a/src/views/productionManagement/productionProcess/index.vue
+++ b/src/views/productionManagement/productionProcess/index.vue
@@ -70,7 +70,7 @@
<el-button type="primary"
size="small"
:disabled="!selectedProcess"
- @click="handleSelectParam">
+ @click="openParamDialog">
<el-icon>
<Plus />
</el-icon>閫夋嫨鍙傛暟
@@ -681,6 +681,29 @@
}
});
};
+ const openParamDialog = () => {
+ paramSearchKeyword.value = "";
+ if (!selectedProcess.value) {
+ ElMessage.warning("璇峰厛閫夋嫨涓�涓伐搴�");
+ return;
+ }
+ // 鑾峰彇鍙�夊弬鏁板垪琛�
+ getBaseParamList({
+ paramName: paramSearchKeyword.value,
+ current: paramPage.current,
+ size: paramPage.size,
+ }).then(res => {
+ if (res.code === 200) {
+ filteredParamList.value = res.data?.records || [];
+ paramPage.total = res.data?.total || 0;
+ } else {
+ ElMessage.error(res.msg || "鏌ヨ澶辫触");
+ }
+ });
+ console.log(filteredParamList.value, "鍙�夊弬鏁板垪琛�");
+ selectedParam.value = null;
+ paramDialogVisible.value = true;
+ };
// 鍙傛暟鎿嶄綔
const handleSelectParam = () => {
diff --git a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
index 145d3af..e00040b 100644
--- a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
@@ -5,35 +5,30 @@
width="70%"
@close="closeDia">
<el-form :model="form"
- label-width="140px"
- label-position="top"
+ label-width="100px"
+ label-position="left"
:rules="rules"
- ref="formRef">
- <el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="渚涘簲鍟嗭細" prop="supplier">
- <el-input v-model="form.supplier" placeholder="璇疯緭鍏�" clearable/>
+ ref="formRef"
+ class="inspection-form">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="渚涘簲鍟嗭細"
+ prop="supplier">
+ <el-input v-model="form.supplier"
+ placeholder="璇疯緭鍏�"
+ clearable />
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="浜у搧锛�"
prop="productId">
<el-button type="primary"
@click="openProductSelectDialog"
- :disabled="operationType === 'edit'">閫夋嫨浜у搧</el-button>
- <div class="selected-product mt-2"
- v-if="form.productName">
- <el-tag closable
- @close="clearProductSelection"
- class="mr-2">
- {{ form.productName }} - {{ form.model }}
- </el-tag>
- </div>
- <div v-else
- class="text-gray-400">璇烽�夋嫨浜у搧</div>
+ :disabled="operationType === 'edit'"
+ class="product-select-btn">{{form.productName || "閫夋嫨浜у搧"}}{{form.model?(" - "+form.model):""}}</el-button>
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="璇曟牱缂栧彿锛�"
prop="sampleCode">
<el-input v-model="form.sampleCode"
@@ -41,7 +36,7 @@
clearable />
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="杞︾墝鍙凤細"
prop="licensePlateNumber">
<el-input v-model="form.licensePlateNumber"
@@ -49,10 +44,11 @@
clearable />
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="妫�娴嬫�ц川锛�"
prop="inspectNature">
- <el-select v-model="form.inspectNature">
+ <el-select v-model="form.inspectNature"
+ style="width: 100%">
<el-option label="鏃ュ父妫�娴�"
value="鏃ュ父妫�娴�" />
<el-option label="鍏ュ満楠屾敹"
@@ -60,10 +56,11 @@
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="璇曟牱鐘舵�侊細"
prop="sampleState">
- <el-select v-model="form.sampleState">
+ <el-select v-model="form.sampleState"
+ style="width: 100%">
<el-option label="鍥轰綋"
value="鍥轰綋" />
<el-option label="棰楃矑"
@@ -79,16 +76,14 @@
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="鍗曚綅锛�"
prop="unit">
<el-input v-model="form.unit"
disabled />
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="鎸囨爣閫夋嫨锛�"
prop="testStandardId">
<el-select v-model="form.testStandardId"
@@ -103,9 +98,7 @@
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="妫�娴嬪崟浣嶏細"
prop="checkCompany">
<el-input v-model="form.checkCompany"
@@ -113,10 +106,11 @@
clearable />
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="妫�娴嬬粨鏋滐細"
prop="checkResult">
- <el-select v-model="form.checkResult">
+ <el-select v-model="form.checkResult"
+ style="width: 100%">
<el-option label="鍚堟牸"
value="鍚堟牸" />
<el-option label="涓嶅悎鏍�"
@@ -124,9 +118,7 @@
</el-select>
</el-form-item>
</el-col>
- </el-row>
- <el-row :gutter="30">
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="妫�楠屽憳锛�"
prop="checkName">
<el-select v-model="form.checkName"
@@ -140,7 +132,7 @@
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="妫�娴嬫棩鏈燂細"
prop="checkTime">
<el-date-picker v-model="form.checkTime"
@@ -152,7 +144,7 @@
style="width: 100%" />
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="鍙栨牱鏃ユ湡锛�"
prop="sampleTime">
<el-date-picker v-model="form.sampleTime"
@@ -269,7 +261,9 @@
{ required: false, message: "璇烽�夋嫨璇曟牱鐘舵��", trigger: "change" },
],
sampleCode: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
- licensePlateNumber: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
+ licensePlateNumber: [
+ { required: false, message: "璇疯緭鍏�", trigger: "blur" },
+ ],
sampleTime: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
},
});
@@ -595,4 +589,163 @@
</script>
<style scoped>
+ .inspection-form {
+ background-color: #f9f9f9;
+ border-radius: 8px;
+ padding: 20px;
+ margin-bottom: 20px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ }
+
+ .product-select-btn {
+ width: 100%;
+ text-align: left;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ transition: all 0.3s ease;
+ }
+
+ .product-select-btn:hover {
+ box-shadow: 0 2px 8px rgba(0, 122, 255, 0.3);
+ }
+
+ /* 澧炲姞琛ㄥ崟椤归棿璺� */
+ .el-form-item {
+ margin-bottom: 15px;
+ }
+
+ /* 杈撳叆妗嗗拰閫夋嫨鍣ㄧ殑鎮仠鏁堟灉 */
+ :deep(.el-input__wrapper) {
+ transition: all 0.3s ease;
+ }
+
+ :deep(.el-input__wrapper:hover) {
+ box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+ }
+
+ :deep(.el-select) {
+ transition: all 0.3s ease;
+ }
+
+ :deep(.el-select:hover .el-input__wrapper) {
+ box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+ }
+
+ /* 鏃ユ湡閫夋嫨鍣ㄧ殑鎮仠鏁堟灉 */
+ :deep(.el-date-picker) {
+ transition: all 0.3s ease;
+ }
+
+ :deep(.el-date-picker:hover .el-input__wrapper) {
+ box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+ }
+
+ /* 浼樺寲琛ㄦ牸鏍峰紡 */
+ :deep(.el-table) {
+ border-radius: 8px;
+ overflow: hidden;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ transition: all 0.3s ease;
+ }
+
+ :deep(.el-table:hover) {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+ }
+
+ :deep(.el-table th) {
+ background-color: #f5f7fa;
+ font-weight: 600;
+ }
+
+ :deep(.el-table tr:hover) {
+ background-color: #f0f9ff;
+ }
+
+ /* 琛ㄦ牸杈撳叆妗嗘牱寮� */
+ :deep(.el-table .el-input__wrapper) {
+ box-shadow: none !important;
+ }
+
+ :deep(.el-table .el-input__wrapper:hover) {
+ box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+ }
+
+ /* 浼樺寲瀵硅瘽妗嗗簳閮ㄦ寜閽� */
+ .dialog-footer {
+ display: flex;
+ justify-content: flex-end;
+ gap: 10px;
+ margin-top: 20px;
+ }
+
+ .dialog-footer .el-button {
+ transition: all 0.3s ease;
+ padding: 8px 20px;
+ border-radius: 4px;
+ }
+
+ .dialog-footer .el-button:hover {
+ transform: translateY(-1px);
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+ }
+
+ .dialog-footer .el-button--primary:hover {
+ box-shadow: 0 2px 8px rgba(0, 122, 255, 0.4);
+ }
+
+ /* 琛ㄥ崟楠岃瘉鐘舵�佹牱寮� */
+ :deep(.el-form-item__error) {
+ font-size: 12px;
+ color: #f56c6c;
+ margin-top: 4px;
+ }
+
+ :deep(.el-form-item.is-error .el-input__wrapper) {
+ box-shadow: 0 0 0 2px rgba(245, 108, 108, 0.2) !important;
+ }
+
+ :deep(.el-form-item.is-success .el-input__wrapper) {
+ box-shadow: 0 0 0 2px rgba(103, 194, 58, 0.2) !important;
+ }
+
+ /* 鍝嶅簲寮忚璁� */
+ @media screen and (max-width: 1200px) {
+ .el-col {
+ :deep(.el-col) {
+ &[class*="el-col-8"] {
+ flex: 0 0 50%;
+ max-width: 50%;
+ }
+ }
+ }
+ }
+
+ @media screen and (max-width: 768px) {
+ .el-col {
+ :deep(.el-col) {
+ &[class*="el-col-8"] {
+ flex: 0 0 100%;
+ max-width: 100%;
+ }
+ }
+ }
+
+ .inspection-form {
+ padding: 15px;
+ }
+
+ .el-form {
+ label-width: 80px !important;
+ }
+
+ .dialog-footer {
+ flex-direction: column;
+ align-items: stretch;
+ }
+
+ .dialog-footer .el-button {
+ width: 100%;
+ }
+ }
</style>
diff --git a/src/views/qualityManagement/rawMaterialInspection/index.vue b/src/views/qualityManagement/rawMaterialInspection/index.vue
index b45f050..03f9df4 100644
--- a/src/views/qualityManagement/rawMaterialInspection/index.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/index.vue
@@ -3,327 +3,365 @@
<div class="search_form">
<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"/>
- <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
- >鎼滅储
- </el-button
- >
+ <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" />
+ <el-button type="primary"
+ @click="handleQuery"
+ style="margin-left: 10px">鎼滅储
+ </el-button>
</div>
<div>
- <el-button type="primary" @click="openForm('add')">鏂板</el-button>
+ <el-button type="primary"
+ @click="openForm('add')">鏂板</el-button>
<el-button @click="handleOut">瀵煎嚭</el-button>
- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
+ <el-button type="danger"
+ plain
+ @click="handleDelete">鍒犻櫎</el-button>
</div>
</div>
<div class="table_list">
- <PIMTable
- rowKey="id"
- :column="tableColumn"
- :tableData="tableData"
- :page="page"
- :isSelection="true"
- @selection-change="handleSelectionChange"
- :tableLoading="tableLoading"
- @pagination="pagination"
- :total="page.total"
- ></PIMTable>
+ <PIMTable rowKey="id"
+ :column="tableColumn"
+ :tableData="tableData"
+ :page="page"
+ :isSelection="true"
+ @selection-change="handleSelectionChange"
+ :tableLoading="tableLoading"
+ @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%"
+ <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-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 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, reactive, toRefs, 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";
+ import { Search } from "@element-plus/icons-vue";
+ import {
+ onMounted,
+ ref,
+ reactive,
+ toRefs,
+ 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, // 褰曞叆鏃ユ湡
- entryDateStart: undefined,
- entryDateEnd: undefined,
- },
- rules: {
- checkName: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
- },
-});
-const {searchForm, rules} = toRefs(data);
-const tableColumn = ref([
- {
- label: "妫�娴嬫棩鏈�",
- prop: "checkTime",
- width: 120
- },
- {
- label: "渚涘簲鍟�",
- prop: "supplier",
- width: 130
- },
- {
- label: "妫�楠屽憳",
- prop: "checkName",
- },
- {
- label: "浜у搧鍚嶇О",
- prop: "productName",
- },
- {
- label: "瑙勬牸鍨嬪彿",
- prop: "model",
- },
- {
- label: "鍗曚綅",
- prop: "unit",
- width: 80
- },
- {
- label: "鏁伴噺",
- prop: "quantity",
- width: 120
- },
- {
- label: "璇曟牱缂栧彿",
- prop: "sampleCode",
- },
- {
- label: "璇曟牱鐘舵��",
- prop: "sampleState",
- },
- {
- label: "妫�娴嬫�ц川",
- prop: "inspectNature",
- },
- {
- label: "鍙栨牱鏃ユ湡",
- prop: "sampleTime",
- },
- {
- label: "妫�娴嬪崟浣�",
- prop: "checkCompany",
- },
- {
- label: "妫�娴嬬粨鏋�",
- prop: "checkResult",
- dataType: "tag",
- formatType: (params) => {
- if (params === '涓嶅悎鏍�') {
- return "danger";
- } else if (params === '鍚堟牸') {
- return "success";
- } else {
- return null;
- }
+ const data = reactive({
+ searchForm: {
+ supplier: "",
+ entryDate: undefined, // 褰曞叆鏃ユ湡
+ entryDateStart: undefined,
+ entryDateEnd: undefined,
},
- },
- {
- label: "鎻愪氦鐘舵��",
- prop: "inspectState",
- formatData: (params) => {
- if (params) {
- return "宸叉彁浜�";
- } else {
- return "鏈彁浜�";
- }
+ rules: {
+ checkName: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
},
- },
- {
- dataType: "action",
- label: "鎿嶄綔",
- align: "center",
- fixed: "right",
- width: 280,
- 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;
- }
+ });
+ const { searchForm, rules } = toRefs(data);
+ const tableColumn = ref([
+ {
+ label: "妫�娴嬫棩鏈�",
+ prop: "checkTime",
+ width: 120,
+ },
+ {
+ label: "渚涘簲鍟�",
+ prop: "supplier",
+ width: 130,
+ },
+ {
+ label: "妫�楠屽憳",
+ prop: "checkName",
+ },
+ {
+ label: "浜у搧鍚嶇О",
+ prop: "productName",
+ dataType: "tag",
+ },
+ {
+ label: "瑙勬牸鍨嬪彿",
+ prop: "model",
+ },
+ {
+ label: "鍗曚綅",
+ prop: "unit",
+ width: 80,
+ },
+ {
+ label: "鏁伴噺",
+ prop: "quantity",
+ width: 120,
+ },
+ {
+ label: "璇曟牱缂栧彿",
+ prop: "sampleCode",
+ },
+ {
+ label: "璇曟牱鐘舵��",
+ prop: "sampleState",
+ },
+ {
+ label: "妫�娴嬫�ц川",
+ prop: "inspectNature",
+ },
+ {
+ label: "鍙栨牱鏃ユ湡",
+ prop: "sampleTime",
+ },
+ {
+ label: "妫�娴嬪崟浣�",
+ prop: "checkCompany",
+ },
+ {
+ label: "妫�娴嬬粨鏋�",
+ prop: "checkResult",
+ dataType: "tag",
+ formatType: params => {
+ if (params === "涓嶅悎鏍�") {
+ return "danger";
+ } else if (params === "鍚堟牸") {
+ return "success";
+ } else {
+ return null;
+ }
},
- {
- name: "闄勪欢",
- type: "text",
- clickFun: (row) => {
- openFilesFormDia(row);
- },
+ },
+ {
+ label: "鎻愪氦鐘舵��",
+ prop: "inspectState",
+ dataType: "tag",
+ formatType: params => {
+ if (params) {
+ return "success";
+ } else {
+ return "info";
+ }
},
- {
- name: "鎻愪氦",
- type: "text",
- clickFun: (row) => {
- submit(row.id);
- },
- disabled: (row) => {
- // 宸叉彁浜ゅ垯绂佺敤
- if (row.inspectState == 1) return true;
- // 濡傛灉妫�楠屽憳鏈夊�硷紝鍙湁褰撳墠鐧诲綍鐢ㄦ埛鑳芥彁浜�
- if (row.checkName) {
- return row.checkName !== userStore.nickName;
- }
- return false;
- }
+ formatData: params => {
+ if (params) {
+ return "宸叉彁浜�";
+ } else {
+ return "鏈彁浜�";
+ }
},
- {
- name: "鍒嗛厤妫�楠屽憳",
- type: "text",
- clickFun: (row) => {
- if (!row.checkName) {
- open(row)
- } else {
- proxy.$modal.msgError("妫�楠屽憳宸插瓨鍦�");
- }
+ },
+ {
+ dataType: "action",
+ label: "鎿嶄綔",
+ align: "center",
+ fixed: "right",
+ width: 280,
+ 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;
+ },
},
- disabled: (row) => {
- return row.inspectState == 1 || row.checkName;
- }
- },
- {
- name: "涓嬭浇",
- type: "text",
- clickFun: (row) => {
- downLoadFile(row);
+ {
+ name: "闄勪欢",
+ type: "text",
+ clickFun: row => {
+ openFilesFormDia(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;
- if (value) {
- searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
- searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
- }
- getList();
-};
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
- page.current = 1;
- getList();
-};
-const pagination = (obj) => {
- page.current = obj.page;
- page.size = obj.limit;
- getList();
-};
-const getList = () => {
- tableLoading.value = true;
- const params = {...searchForm.value, ...page};
- params.entryDate = undefined
- qualityInspectListPage({...params, inspectType: 0}).then(res => {
- tableLoading.value = false;
- tableData.value = res.data.records
- page.total = res.data.total;
- }).catch(err => {
- tableLoading.value = false;
- })
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
- selectedRows.value = selection;
-};
+ {
+ name: "鎻愪氦",
+ type: "text",
+ 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);
+ },
+ },
+ ],
+ },
+ ]);
+ 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;
+ if (value) {
+ searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
+ searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
+ }
+ getList();
+ };
+ // 鏌ヨ鍒楄〃
+ /** 鎼滅储鎸夐挳鎿嶄綔 */
+ const handleQuery = () => {
+ page.current = 1;
+ getList();
+ };
+ const pagination = obj => {
+ page.current = obj.page;
+ page.size = obj.limit;
+ getList();
+ };
+ const getList = () => {
+ tableLoading.value = true;
+ const params = { ...searchForm.value, ...page };
+ params.entryDate = undefined;
+ qualityInspectListPage({ ...params, inspectType: 0 })
+ .then(res => {
+ tableLoading.value = false;
+ tableData.value = res.data.records;
+ page.total = res.data.total;
+ })
+ .catch(err => {
+ tableLoading.value = false;
+ });
+ };
+ // 琛ㄦ牸閫夋嫨鏁版嵁
+ const handleSelectionChange = selection => {
+ selectedRows.value = selection;
+ };
-// 鎵撳紑寮规
-const openForm = (type, row) => {
- nextTick(() => {
- formDia.value?.openDialog(type, row)
- })
-};
-// 鎵撳紑闄勪欢寮规
-const openFilesFormDia = (type, row) => {
- nextTick(() => {
- filesDia.value?.openDialog(type, row)
- })
-};
+ // 鎵撳紑寮规
+ const openForm = (type, row) => {
+ nextTick(() => {
+ formDia.value?.openDialog(type, row);
+ });
+ };
+ // 鎵撳紑闄勪欢寮规
+ const openFilesFormDia = (type, row) => {
+ nextTick(() => {
+ filesDia.value?.openDialog(type, row);
+ });
+ };
-// 鍒犻櫎
-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",
- })
+ // 鍒犻櫎
+ 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(() => {
- qualityInspectDel(ids).then((res) => {
+ qualityInspectDel(ids).then(res => {
proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
getList();
});
@@ -331,79 +369,345 @@
.catch(() => {
proxy.$modal.msg("宸插彇娑�");
});
-};
-// 瀵煎嚭
-const handleOut = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
+ };
+ // 瀵煎嚭
+ const handleOut = () => {
+ ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
.then(() => {
- proxy.download("/quality/qualityInspect/export", {inspectType: 0}, "鍘熸潗鏂欐楠�.xlsx");
+ proxy.download(
+ "/quality/qualityInspect/export",
+ { inspectType: 0 },
+ "鍘熸潗鏂欐楠�.xlsx"
+ );
})
.catch(() => {
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 => {
+ // 鎻愪环
+ const submit = async id => {
+ const res = await submitQualityInspect({ id: id });
+ if (res.code === 200) {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- closeDia();
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 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 submitForm = () => {
+ if (currentRow.value) {
+ const data = {
+ ...form.value,
+ id: currentRow.value.id,
+ };
+ qualityInspectUpdate(data).then(res => {
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ closeDia();
+ getList();
+ });
+ }
+ };
- const link = document.createElement('a')
- link.href = downloadUrl
- link.download = '鍘熸潗鏂欐楠屾姤鍛�.docx'
- document.body.appendChild(link)
- link.click()
+ const open = async row => {
+ let userLists = await userListNoPage();
+ userList.value = userLists.data;
+ currentRow.value = row;
+ dialogFormVisible.value = true;
+ };
- document.body.removeChild(link)
- window.URL.revokeObjectURL(downloadUrl)
- })
-};
+ 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);
-onMounted(() => {
- getList();
-});
+ 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>
+ .app-container {
+ padding: 20px;
+ background-color: #f5f7fa;
+ min-height: 100vh;
+ }
+
+ .search_form {
+ background-color: #fff;
+ border-radius: 8px;
+ padding: 20px;
+ margin-bottom: 20px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 15px;
+ }
+
+ .search_form > div {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ flex-wrap: wrap;
+ }
+
+ .search_title {
+ font-size: 14px;
+ color: #303133;
+ font-weight: 500;
+ }
+
+ .table_list {
+ background-color: #fff;
+ border-radius: 8px;
+ padding: 20px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
+ }
+
+ /* 琛ㄦ牸鏍峰紡浼樺寲 */
+ :deep(.el-table) {
+ border-radius: 8px;
+ overflow: hidden;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
+ transition: all 0.3s ease;
+ }
+
+ :deep(.el-table:hover) {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
+ }
+
+ :deep(.el-table th) {
+ background-color: #f5f7fa;
+ font-weight: 600;
+ color: #303133;
+ border-bottom: 2px solid #e4e7ed;
+ }
+
+ :deep(.el-table td) {
+ border-bottom: 1px solid #ebeef5;
+ }
+
+ :deep(.el-table tr:hover) {
+ background-color: #f0f9ff;
+ }
+
+ :deep(.el-table .el-table__row) {
+ transition: background-color 0.3s ease;
+ }
+
+ /* 鎸夐挳鏍峰紡浼樺寲 */
+ .el-button {
+ transition: all 0.3s ease;
+ border-radius: 4px;
+ font-weight: 500;
+ }
+
+ .el-button:hover {
+ transform: translateY(-1px);
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+ }
+
+ .el-button--primary:hover {
+ box-shadow: 0 2px 8px rgba(0, 122, 255, 0.4);
+ }
+
+ .el-button--danger:hover {
+ box-shadow: 0 2px 8px rgba(245, 108, 108, 0.4);
+ }
+
+ /* 杈撳叆妗嗘牱寮忎紭鍖� */
+ :deep(.el-input__wrapper) {
+ transition: all 0.3s ease;
+ border-radius: 4px;
+ }
+
+ :deep(.el-input__wrapper:hover) {
+ box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+ }
+
+ :deep(.el-input__wrapper.is-focus) {
+ box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.4) !important;
+ }
+
+ /* 鏃ユ湡閫夋嫨鍣ㄦ牱寮忎紭鍖� */
+ :deep(.el-date-editor) {
+ transition: all 0.3s ease;
+ }
+
+ :deep(.el-date-editor:hover .el-input__wrapper) {
+ box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+ }
+
+ /* 瀵硅瘽妗嗘牱寮忎紭鍖� */
+ :deep(.el-dialog) {
+ border-radius: 8px;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+ }
+
+ :deep(.el-dialog__header) {
+ background-color: #f5f7fa;
+ border-bottom: 1px solid #e4e7ed;
+ padding: 15px 20px;
+ margin: 0;
+ }
+
+ :deep(.el-dialog__title) {
+ font-size: 16px;
+ font-weight: 600;
+ color: #303133;
+ }
+
+ :deep(.el-dialog__body) {
+ padding: 20px;
+ }
+
+ :deep(.el-dialog__footer) {
+ padding: 15px 20px;
+ border-top: 1px solid #e4e7ed;
+ }
+
+ .dialog-footer {
+ display: flex;
+ justify-content: flex-end;
+ gap: 10px;
+ }
+
+ /* 琛ㄥ崟鏍峰紡浼樺寲 */
+ :deep(.el-form-item__label) {
+ font-weight: 500;
+ color: #606266;
+ }
+
+ :deep(.el-select) {
+ width: 100%;
+ }
+
+ /* 鍒嗛〉鏍峰紡浼樺寲 */
+ :deep(.el-pagination) {
+ margin-top: 20px;
+ display: flex;
+ justify-content: flex-end;
+ }
+
+ :deep(.el-pagination button) {
+ border-radius: 4px;
+ transition: all 0.3s ease;
+ }
+
+ :deep(.el-pagination button:hover) {
+ transform: translateY(-1px);
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ }
+
+ /* 鏍囩鏍峰紡浼樺寲 */
+ :deep(.el-tag) {
+ border-radius: 4px;
+ font-weight: 500;
+ }
+
+ :deep(.el-tag--success) {
+ background-color: #f0f9ff;
+ border-color: #b3d8ff;
+ color: #409eff;
+ }
+
+ :deep(.el-tag--danger) {
+ background-color: #fef0f0;
+ border-color: #fbc4c4;
+ color: #f56c6c;
+ }
+
+ /* 鎿嶄綔鎸夐挳鏍峰紡 */
+ :deep(.el-button--text) {
+ padding: 0 8px;
+ font-weight: 500;
+ transition: all 0.3s ease;
+ }
+
+ :deep(.el-button--text:hover) {
+ transform: translateY(-1px);
+ }
+
+ /* 鍝嶅簲寮忚璁� */
+ @media screen and (max-width: 1200px) {
+ .search_form {
+ flex-direction: column;
+ align-items: stretch;
+ }
+
+ .search_form > div {
+ width: 100%;
+ justify-content: space-between;
+ }
+
+ .search_form > div:first-child {
+ flex-wrap: wrap;
+ }
+
+ .search_title {
+ width: 100%;
+ margin-bottom: 8px;
+ }
+ }
+
+ @media screen and (max-width: 768px) {
+ .app-container {
+ padding: 10px;
+ }
+
+ .search_form {
+ padding: 15px;
+ }
+
+ .table_list {
+ padding: 15px;
+ }
+
+ .search_form > div {
+ flex-direction: column;
+ align-items: stretch;
+ }
+
+ .search_form > div .el-input,
+ .search_form > div .el-date-picker {
+ width: 100% !important;
+ }
+
+ .search_form > div .el-button {
+ width: 100%;
+ margin-top: 10px;
+ }
+
+ :deep(.el-dialog) {
+ width: 90% !important;
+ }
+
+ :deep(.el-table) {
+ font-size: 12px;
+ }
+ }
+</style>
--
Gitblit v1.9.3