From 18a6993750e192fb8af04ce407a72ba20d6024c5 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期六, 23 五月 2026 11:50:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_天津_阳光印刷' into dev_天津_阳光印刷
---
src/views/qualityManagement/processInspection/components/formDia.vue | 23
src/views/productionManagement/productionOrder/BindRouteDialog.vue | 7
multiple/config.json | 2
src/views/productionManagement/workOrder/index.vue | 77 +-
src/views/equipmentManagement/repair/Modal/RepairModal.vue | 10
src/views/qualityManagement/finalInspection/components/formDia.vue | 23
src/views/productionManagement/productionCosting/index.vue | 15
src/views/equipmentManagement/repair/index.vue | 5
src/views/salesManagement/receiptPaymentLedger/index.vue | 14
src/views/qualityManagement/rawMaterialInspection/index.vue | 123 ++++
src/views/qualityManagement/finalInspection/index.vue | 228 ++++++--
src/views/equipmentManagement/inspectionManagement/index.vue | 27
src/views/qualityManagement/processInspection/index.vue | 228 ++++++--
src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue | 8
src/views/productionManagement/productionReporting/index.vue | 79 +-
src/views/qualityManagement/rawMaterialInspection/components/formDia.vue | 23
vite.config.js | 4
src/views/equipmentManagement/inspectionManagement/components/uploadFiles.vue | 620 +++++++++++++++++++++++
18 files changed, 1,301 insertions(+), 215 deletions(-)
diff --git a/multiple/config.json b/multiple/config.json
index 04c80e8..5044486 100644
--- a/multiple/config.json
+++ b/multiple/config.json
@@ -20,7 +20,7 @@
"YGYS": {
"env": {
"VITE_APP_TITLE": "闃冲厜鍗板埛淇℃伅绠$悊",
- "VITE_BASE_API": "http://1.15.17.182:9022",
+ "VITE_BASE_API": "http://1.15.17.182:9023",
"VITE_JAVA_API": "http://1.15.17.182:9022"
},
"screen": "screen/login-background.png",
diff --git a/src/views/equipmentManagement/inspectionManagement/components/uploadFiles.vue b/src/views/equipmentManagement/inspectionManagement/components/uploadFiles.vue
new file mode 100644
index 0000000..f183507
--- /dev/null
+++ b/src/views/equipmentManagement/inspectionManagement/components/uploadFiles.vue
@@ -0,0 +1,620 @@
+<template>
+ <div>
+ <el-dialog
+ v-model="showUploadDialog"
+ title="涓婁紶宸℃璁板綍"
+ width="560px"
+ :before-close="closeUploadDialog"
+ >
+ <el-tabs v-model="currentUploadType">
+ <el-tab-pane label="鐢熶骇鍓�" name="before" />
+ <el-tab-pane label="鐢熶骇涓�" name="after" />
+ <el-tab-pane label="鐢熶骇鍚�" name="issue" />
+ </el-tabs>
+
+ <div class="exception-section">
+ <div class="section-title">鏄惁瀛樺湪寮傚父锛�</div>
+ <el-radio-group v-model="hasException">
+ <el-radio :value="false">姝e父</el-radio>
+ <el-radio :value="true">瀛樺湪寮傚父</el-radio>
+ </el-radio-group>
+ </div>
+
+ <div class="upload-buttons">
+ <el-upload
+ ref="uploadRef"
+ v-model:file-list="uploadFileList"
+ :action="uploadUrl"
+ :headers="uploadHeaders"
+ :show-file-list="false"
+ :accept="uploadAccept"
+ :multiple="false"
+ :before-upload="handleBeforeUpload"
+ :on-success="handleUploadSuccess"
+ :on-error="handleUploadError"
+ :on-progress="handleUploadProgress"
+ :disabled="uploading || getCurrentFiles().length >= uploadConfig.limit"
+ >
+ <el-button
+ type="primary"
+ :loading="uploading"
+ :disabled="getCurrentFiles().length >= uploadConfig.limit"
+ >
+ 閫夋嫨鍥剧墖/瑙嗛
+ </el-button>
+ </el-upload>
+ </div>
+
+ <el-progress
+ v-if="uploading"
+ :percentage="uploadProgress"
+ style="margin: 12px 0"
+ />
+
+ <div v-if="getCurrentFiles().length" class="file-list">
+ <div
+ v-for="(file, index) in getCurrentFiles()"
+ :key="file.uid || file.id || index"
+ class="file-item"
+ >
+ <div class="file-preview-container">
+ <img
+ v-if="isImageFile(file)"
+ :src="file.url || file.downloadUrl"
+ class="file-preview"
+ @click="previewAttachment(file)"
+ />
+ <div
+ v-else
+ class="video-preview"
+ @click="previewAttachment(file)"
+ >
+ 瑙嗛
+ </div>
+
+ <button class="delete-btn" @click="removeFile(index)">x</button>
+ </div>
+
+ <div class="file-name">
+ {{ file.bucketFilename || file.name || "闄勪欢" }}
+ </div>
+ <div class="file-size">
+ {{ formatFileSize(file.size || file.byteSize) }}
+ </div>
+ </div>
+ </div>
+
+ <el-empty
+ v-else
+ :description="`璇烽�夋嫨瑕佷笂浼犵殑${getUploadTypeText()}鍥剧墖鎴栬棰慲"
+ />
+
+ <div class="upload-summary">
+ 鐢熶骇鍓嶏細{{ beforeModelValue.length }} 涓� |
+ 鐢熶骇涓細{{ afterModelValue.length }} 涓� |
+ 鐢熶骇鍚庯細{{ issueModelValue.length }} 涓�
+ </div>
+
+ <template #footer>
+ <el-button type="primary" @click="submitUpload">鎻愪氦</el-button>
+ <el-button @click="closeUploadDialog">鍙栨秷</el-button>
+ </template>
+ </el-dialog>
+
+ <el-dialog
+ v-model="showVideoDialog"
+ :title="currentVideoFile?.originalFilename || '瑙嗛棰勮'"
+ width="720px"
+ >
+ <video
+ v-if="currentVideoFile"
+ :src="currentVideoFile.url || currentVideoFile.downloadUrl"
+ class="video-player"
+ controls
+ autoplay
+ />
+ </el-dialog>
+ </div>
+</template>
+
+<script setup>
+import { computed, ref } from "vue";
+import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
+import { getToken } from "@/utils/auth";
+import { uploadInspectionTask } from "@/api/inspectionManagement/index.js";
+
+const emit = defineEmits(["closeDia", "success"]);
+
+const showUploadDialog = ref(false);
+const uploading = ref(false);
+const uploadProgress = ref(0);
+const uploadRef = ref(null);
+const uploadFileList = ref([]);
+
+const beforeModelValue = ref([]);
+const afterModelValue = ref([]);
+const issueModelValue = ref([]);
+const currentUploadType = ref("before");
+const hasException = ref(null);
+const currentTask = ref(null);
+
+const showVideoDialog = ref(false);
+const currentVideoFile = ref(null);
+
+const uploadConfig = {
+ action: "/file/upload",
+ limit: 10,
+ fileSize: 50,
+ fileType: ["jpg", "jpeg", "png", "gif", "webp", "mp4", "mov", "avi", "wmv"],
+};
+
+const uploadUrl = computed(() => {
+ const type = getTabType();
+ return `${import.meta.env.VITE_APP_BASE_API}${uploadConfig.action}?type=${type}`;
+});
+const uploadHeaders = {
+ Authorization: `Bearer ${getToken()}`,
+};
+const uploadAccept = computed(() =>
+ uploadConfig.fileType.map(item => `.${item}`).join(",")
+);
+const filePreviewBase = __BASE_API__;
+
+const cloneData = value => JSON.parse(JSON.stringify(value || {}));
+
+const normalizeFileUrl = rawUrl => {
+ if (!rawUrl || typeof rawUrl !== "string") return "";
+
+ let fileUrl = rawUrl.trim();
+ if (!fileUrl) return "";
+ if (/^https?:\/\//i.test(fileUrl)) return fileUrl;
+
+ if (fileUrl.indexOf("\\") > -1) {
+ const uploadsIndex = fileUrl.toLowerCase().indexOf("uploads");
+ if (uploadsIndex > -1) {
+ const relativePath = fileUrl.substring(uploadsIndex).replace(/\\/g, "/");
+ fileUrl = `/${relativePath}`;
+ } else {
+ const parts = fileUrl.split("\\");
+ const fileName = parts[parts.length - 1];
+ fileUrl = `/uploads/${fileName}`;
+ }
+ }
+
+ if (!fileUrl.startsWith("http")) {
+ if (!fileUrl.startsWith("/")) {
+ fileUrl = `/${fileUrl}`;
+ }
+ fileUrl = `${filePreviewBase}${fileUrl}`;
+ }
+
+ return fileUrl;
+};
+
+const mapExistingFile = (file, type) => ({
+ ...file,
+ id: file?.id,
+ tempId: file?.tempId ?? file?.tempFileId ?? file?.id,
+ tempFileId: file?.tempFileId ?? file?.id,
+ url: normalizeFileUrl(file?.url || file?.downloadUrl || file?.fileUrl || ""),
+ downloadUrl: normalizeFileUrl(
+ file?.downloadUrl || file?.url || file?.fileUrl || ""
+ ),
+ bucketFilename:
+ file?.bucketFilename || file?.originalFilename || file?.fileName || file?.name,
+ originalFilename:
+ file?.originalFilename || file?.bucketFilename || file?.fileName || file?.name,
+ size: file?.size || file?.byteSize,
+ byteSize: file?.byteSize || file?.size,
+ contentType: file?.contentType || "",
+ type,
+ uid: file?.uid || `${type}-${file?.id || file?.url || Math.random()}`,
+});
+
+const resetDialogState = () => {
+ beforeModelValue.value = [];
+ afterModelValue.value = [];
+ issueModelValue.value = [];
+ currentUploadType.value = "before";
+ hasException.value = null;
+ currentTask.value = null;
+ uploadProgress.value = 0;
+ uploading.value = false;
+ uploadFileList.value = [];
+ uploadRef.value?.clearFiles?.();
+};
+
+const openDialog = task => {
+ const rawTask = cloneData(task?.__raw || task);
+ currentTask.value = {
+ ...rawTask,
+ taskId: rawTask.taskId || rawTask.id,
+ storageBlobDTO: [],
+ };
+
+ beforeModelValue.value = Array.isArray(rawTask.commonFileListBefore)
+ ? rawTask.commonFileListBefore.map(file => mapExistingFile(file, 10))
+ : [];
+ afterModelValue.value = Array.isArray(rawTask.commonFileListAfter)
+ ? rawTask.commonFileListAfter.map(file => mapExistingFile(file, 11))
+ : [];
+ issueModelValue.value = Array.isArray(rawTask.commonFileList)
+ ? rawTask.commonFileList.map(file => mapExistingFile(file, 12))
+ : [];
+
+ currentUploadType.value = "before";
+ hasException.value =
+ typeof rawTask.hasException === "boolean" ? rawTask.hasException : null;
+ uploadFileList.value = [];
+ showUploadDialog.value = true;
+};
+
+const closeUploadDialog = () => {
+ showUploadDialog.value = false;
+ resetDialogState();
+ emit("closeDia");
+};
+
+const getCurrentFiles = () => {
+ if (currentUploadType.value === "before") return beforeModelValue.value;
+ if (currentUploadType.value === "after") return afterModelValue.value;
+ return issueModelValue.value;
+};
+
+const getUploadTypeText = () => {
+ if (currentUploadType.value === "before") return "鐢熶骇鍓�";
+ if (currentUploadType.value === "after") return "鐢熶骇涓�";
+ return "鐢熶骇鍚�";
+};
+
+const getTabType = () => {
+ if (currentUploadType.value === "before") return 10;
+ if (currentUploadType.value === "after") return 11;
+ return 12;
+};
+
+const handleBeforeUpload = file => {
+ if (getCurrentFiles().length >= uploadConfig.limit) {
+ ElMessage.warning(`鏈�澶氬彧鑳介�夋嫨${uploadConfig.limit}涓枃浠禶);
+ return false;
+ }
+
+ const ext = file.name.split(".").pop()?.toLowerCase();
+ if (!uploadConfig.fileType.includes(ext)) {
+ ElMessage.warning(`鏂囦欢鏍煎紡涓嶆敮鎸侊紝璇蜂笂浼� ${uploadConfig.fileType.join("/")} 鏍煎紡`);
+ return false;
+ }
+
+ const maxSize = uploadConfig.fileSize * 1024 * 1024;
+ if (file.size > maxSize) {
+ ElMessage.warning(`鏂囦欢澶у皬涓嶈兘瓒呰繃 ${uploadConfig.fileSize}MB`);
+ return false;
+ }
+
+ uploading.value = true;
+ uploadProgress.value = 0;
+ return true;
+};
+
+const handleUploadProgress = event => {
+ if (event?.percent) {
+ uploadProgress.value = Math.round(event.percent);
+ }
+};
+
+const handleUploadSuccess = (response, file) => {
+ uploading.value = false;
+ uploadProgress.value = 0;
+ uploadFileList.value = [];
+ uploadRef.value?.clearFiles?.();
+
+ const uploadedFile = response?.data;
+ if (response?.code !== 200 || !uploadedFile) {
+ ElMessage.error(response?.msg || "涓婁紶鍝嶅簲鏁版嵁鏍煎紡閿欒");
+ return;
+ }
+
+ const type = getTabType();
+ const objectUrl = file?.raw ? URL.createObjectURL(file.raw) : "";
+ const fileData = {
+ id: uploadedFile.id,
+ tempId: uploadedFile.tempId ?? uploadedFile.tempFileId ?? uploadedFile.id,
+ tempFileId: uploadedFile.tempFileId ?? uploadedFile.id,
+ url: normalizeFileUrl(uploadedFile.url || uploadedFile.downloadUrl || objectUrl),
+ downloadUrl: normalizeFileUrl(
+ uploadedFile.downloadUrl || uploadedFile.url || objectUrl
+ ),
+ bucketFilename:
+ uploadedFile.bucketFilename || uploadedFile.originalFilename || file.name,
+ originalFilename:
+ uploadedFile.originalFilename || uploadedFile.bucketFilename || file.name,
+ size: uploadedFile.size || uploadedFile.byteSize || file.size,
+ byteSize: uploadedFile.byteSize || uploadedFile.size || file.size,
+ createTime: uploadedFile.createTime || Date.now(),
+ contentType: uploadedFile.contentType || file.raw?.type || "",
+ type,
+ uid: `${Date.now()}-${Math.random()}`,
+ };
+
+ if (currentUploadType.value === "before") {
+ beforeModelValue.value.push(fileData);
+ } else if (currentUploadType.value === "after") {
+ afterModelValue.value.push(fileData);
+ } else {
+ issueModelValue.value.push(fileData);
+ }
+
+ ElMessage.success("涓婁紶鎴愬姛");
+};
+
+const handleUploadError = error => {
+ uploading.value = false;
+ uploadProgress.value = 0;
+ uploadFileList.value = [];
+ uploadRef.value?.clearFiles?.();
+ ElMessage.error(error?.message || "涓婁紶澶辫触");
+};
+
+const removeFile = async index => {
+ try {
+ await ElMessageBox.confirm("纭畾瑕佸垹闄よ繖涓枃浠跺悧锛�", "纭鍒犻櫎", {
+ type: "warning",
+ });
+
+ if (currentUploadType.value === "before") {
+ beforeModelValue.value.splice(index, 1);
+ } else if (currentUploadType.value === "after") {
+ afterModelValue.value.splice(index, 1);
+ } else {
+ issueModelValue.value.splice(index, 1);
+ }
+
+ ElMessage.success("鍒犻櫎鎴愬姛");
+ } catch {}
+};
+
+const buildSubmitFiles = () => {
+ const list = [
+ ...beforeModelValue.value,
+ ...afterModelValue.value,
+ ...issueModelValue.value,
+ ];
+
+ return list.map(item => ({
+ ...item,
+ url: item?.downloadUrl || item?.url || "",
+ }));
+};
+
+const buildSubmitFileItem = item => {
+ if (!item) return null;
+
+ return {
+ id: item.id,
+ tempId: item.tempId,
+ tempFileId: item.tempFileId,
+ type: item.type,
+ url: item?.downloadUrl || item?.url || "",
+ downloadUrl: item?.downloadUrl || item?.url || "",
+ bucketFilename: item.bucketFilename,
+ originalFilename: item.originalFilename,
+ size: item.size,
+ byteSize: item.byteSize,
+ contentType: item.contentType,
+ };
+};
+
+const buildGroupedFiles = list => {
+ return (list || []).map(buildSubmitFileItem).filter(Boolean);
+};
+
+const buildSubmitPayload = () => {
+ const {
+ createTime,
+ updateTime,
+ storageBlobDTO,
+ commonFileListBefore,
+ commonFileListAfter,
+ commonFileList,
+ __raw,
+ ...rest
+ } = currentTask.value || {};
+
+ const files = buildSubmitFiles();
+ const tempFileIds = files
+ .map(item => item?.tempId ?? item?.tempFileId ?? item?.id)
+ .filter(Boolean);
+
+ return {
+ ...rest,
+ hasException: hasException.value,
+ tempFileIds,
+ commonFileListBefore: buildGroupedFiles(beforeModelValue.value),
+ commonFileListAfter: buildGroupedFiles(afterModelValue.value),
+ commonFileList: buildGroupedFiles(issueModelValue.value),
+ };
+};
+
+const submitUpload = async () => {
+ if (hasException.value === null) {
+ ElMessage.warning("璇烽�夋嫨鏄惁瀛樺湪寮傚父");
+ return;
+ }
+
+ const files = buildSubmitFiles();
+ if (!files.length) {
+ ElMessage.warning("璇峰厛涓婁紶鏂囦欢");
+ return;
+ }
+
+ const loadingInstance = ElLoading.service({
+ text: "鎻愪氦涓�...",
+ background: "rgba(0, 0, 0, 0.3)",
+ });
+
+ try {
+ const payload = buildSubmitPayload();
+
+ const result = await uploadInspectionTask(payload);
+ if (result?.code === 200 || result?.success) {
+ ElMessage.success("鎻愪氦鎴愬姛");
+ showUploadDialog.value = false;
+ resetDialogState();
+ emit("success");
+ emit("closeDia");
+ } else {
+ ElMessage.error(result?.msg || result?.message || "鎻愪氦澶辫触");
+ }
+ } catch (error) {
+ ElMessage.error(error?.message || "鎻愪氦澶辫触");
+ } finally {
+ loadingInstance.close();
+ }
+};
+
+const goToRepair = () => {
+ const taskInfo = {
+ taskId: currentTask.value?.taskId || currentTask.value?.id,
+ taskName: currentTask.value?.taskName,
+ inspectionLocation: currentTask.value?.inspectionLocation,
+ inspector: currentTask.value?.inspector,
+ uploadedFiles: {
+ before: beforeModelValue.value,
+ after: afterModelValue.value,
+ issue: issueModelValue.value,
+ },
+ };
+
+ sessionStorage.setItem("repairTaskInfo", JSON.stringify(taskInfo));
+ window.location.href = "/equipmentManagement/repair";
+};
+
+const previewAttachment = file => {
+ if (isImageFile(file)) {
+ window.open(file.url || file.downloadUrl, "_blank");
+ } else {
+ currentVideoFile.value = file;
+ showVideoDialog.value = true;
+ }
+};
+
+const isImageFile = file => {
+ if (file?.contentType?.startsWith("image/")) return true;
+ const name =
+ file?.bucketFilename || file?.originalFilename || file?.name || "";
+ const ext = name.split(".").pop()?.toLowerCase();
+ return ["jpg", "jpeg", "png", "gif", "webp"].includes(ext);
+};
+
+const formatFileSize = size => {
+ if (!size) return "";
+ if (size < 1024) return `${size}B`;
+ if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)}KB`;
+ return `${(size / 1024 / 1024).toFixed(1)}MB`;
+};
+
+defineExpose({
+ openDialog,
+});
+</script>
+
+<style scoped>
+.exception-section {
+ margin-bottom: 16px;
+ padding: 12px;
+ background: #f8f9fa;
+ border-radius: 8px;
+}
+
+.section-title {
+ font-weight: 600;
+ margin-bottom: 8px;
+}
+
+.upload-buttons {
+ margin-bottom: 12px;
+}
+
+.file-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 12px;
+}
+
+.file-item {
+ width: 120px;
+ padding: 8px;
+ border: 1px solid #e5e5e5;
+ border-radius: 10px;
+ background: #fff;
+ text-align: center;
+}
+
+.file-preview-container {
+ position: relative;
+}
+
+.file-preview {
+ width: 90px;
+ height: 90px;
+ object-fit: cover;
+ border-radius: 8px;
+ border: 1px solid #eee;
+ cursor: pointer;
+}
+
+.video-preview {
+ width: 90px;
+ height: 90px;
+ margin: 0 auto;
+ border-radius: 8px;
+ background: #eef3f8;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: #409eff;
+ cursor: pointer;
+}
+
+.delete-btn {
+ position: absolute;
+ top: -6px;
+ right: 6px;
+ width: 22px;
+ height: 22px;
+ border: none;
+ border-radius: 50%;
+ color: #fff;
+ background: #f56c6c;
+ cursor: pointer;
+}
+
+.file-name {
+ margin-top: 6px;
+ font-size: 12px;
+ color: #333;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.file-size {
+ font-size: 11px;
+ color: #999;
+}
+
+.upload-summary {
+ margin-top: 16px;
+ padding: 10px;
+ background: #f8f9fa;
+ border-left: 3px solid #409eff;
+ font-size: 13px;
+ color: #666;
+}
+
+.video-player {
+ width: 100%;
+ max-height: 70vh;
+ background: #000;
+}
+</style>
diff --git a/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue b/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue
index 9485d4e..982e771 100644
--- a/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue
+++ b/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue
@@ -30,9 +30,9 @@
</div>
</div>
- <!-- 鐢熶骇鍚� -->
+ <!-- 鐢熶骇涓� -->
<div class="form-container">
- <div class="title">鐢熶骇鍚�</div>
+ <div class="title">鐢熶骇涓�</div>
<!-- 鍥剧墖鍒楄〃 -->
<div style="display: flex; flex-wrap: wrap;">
@@ -57,9 +57,9 @@
</div>
</div>
- <!-- 鐢熶骇闂 -->
+ <!-- 鐢熶骇鍚� -->
<div class="form-container">
- <div class="title">鐢熶骇闂</div>
+ <div class="title">鐢熶骇鍚�</div>
<!-- 鍥剧墖鍒楄〃 -->
<div style="display: flex; flex-wrap: wrap;">
diff --git a/src/views/equipmentManagement/inspectionManagement/index.vue b/src/views/equipmentManagement/inspectionManagement/index.vue
index 35f82d5..d80d29a 100644
--- a/src/views/equipmentManagement/inspectionManagement/index.vue
+++ b/src/views/equipmentManagement/inspectionManagement/index.vue
@@ -76,6 +76,8 @@
<form-dia ref="formDia"
@closeDia="handleQuery"></form-dia>
<view-files ref="viewFiles"></view-files>
+ <upload-files ref="uploadFiles"
+ @closeDia="handleQuery"></upload-files>
</div>
</template>
@@ -87,6 +89,7 @@
// 缁勪欢寮曞叆
import PIMTable from "@/components/PIMTable/PIMTable.vue";
import FormDia from "@/views/equipmentManagement/inspectionManagement/components/formDia.vue";
+ import UploadFiles from "@/views/equipmentManagement/inspectionManagement/components/uploadFiles.vue";
import ViewFiles from "@/views/equipmentManagement/inspectionManagement/components/viewFiles.vue";
// 鎺ュ彛寮曞叆
@@ -100,6 +103,7 @@
const { proxy } = getCurrentInstance();
const formDia = ref();
const viewFiles = ref();
+ const uploadFiles = ref();
// 鏌ヨ鍙傛暟
const queryParams = reactive({
@@ -184,8 +188,9 @@
const operationConfig = {
label: "鎿嶄綔",
- width: 130,
+ width: operations.length > 1 ? 180 : 130,
fixed: "right",
+ align: 'center',
dataType: "action",
operation: operations
.map(op => {
@@ -194,6 +199,12 @@
return {
name: "缂栬緫",
clickFun: handleAdd,
+ color: "#409EFF",
+ };
+ case "upload":
+ return {
+ name: "涓婁紶",
+ clickFun: openUploadFiles,
color: "#409EFF",
};
case "viewFile":
@@ -226,12 +237,12 @@
];
operationsArr.value = ["edit"];
} else if (value === "task") {
- const operationColumn = getOperationColumn(["viewFile"]);
+ const operationColumn = getOperationColumn(["upload", "viewFile"]);
tableColumns.value = [
...columns.value,
...(operationColumn ? [operationColumn] : []),
];
- operationsArr.value = ["viewFile"];
+ operationsArr.value = ["upload", "viewFile"];
}
pageNum.value = 1;
pageSize.value = 10;
@@ -273,6 +284,7 @@
// 澶勭悊 inspector 瀛楁锛屽皢瀛楃涓茶浆鎹负鏁扮粍锛堥�傜敤浜庢墍鏈夋儏鍐碉級
tableData.value = rawData.map(item => {
const processedItem = { ...item };
+ processedItem.__raw = { ...item };
// 澶勭悊 inspector 瀛楁
if (processedItem.inspector) {
@@ -322,6 +334,13 @@
const viewFile = row => {
nextTick(() => {
viewFiles.value?.openDialog(row);
+ });
+ };
+
+ // 涓婁紶闄勪欢
+ const openUploadFiles = row => {
+ nextTick(() => {
+ uploadFiles.value?.openDialog(row);
});
};
@@ -390,4 +409,4 @@
color: #909399;
font-size: 14px;
}
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/equipmentManagement/repair/Modal/RepairModal.vue b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
index 1aa82ec..106880a 100644
--- a/src/views/equipmentManagement/repair/Modal/RepairModal.vue
+++ b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
@@ -31,6 +31,14 @@
</el-form-item>
</el-col>
<el-col :span="12">
+ <el-form-item label="鎶ヤ慨椤圭洰">
+ <el-input
+ v-model="form.repairProject"
+ placeholder="璇疯緭鍏ユ姤淇」鐩�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
<el-form-item label="鎶ヤ慨鏃ユ湡">
<el-date-picker
v-model="form.repairTime"
@@ -111,6 +119,7 @@
deviceLedgerId: undefined, // 璁惧Id
deviceName: undefined, // 璁惧鍚嶇О
deviceModel: undefined, // 瑙勬牸鍨嬪彿
+ repairProject: undefined, // 鎶ヤ慨椤圭洰
repairTime: dayjs().format("YYYY-MM-DD"), // 鎶ヤ慨鏃ユ湡锛岄粯璁ゅ綋澶�
repairName: userStore.nickName, // 鎶ヤ慨浜�
remark: undefined, // 鏁呴殰鐜拌薄
@@ -126,6 +135,7 @@
form.deviceLedgerId = data.deviceLedgerId;
form.deviceName = data.deviceName;
form.deviceModel = data.deviceModel;
+ form.repairProject = data.repairProject;
form.repairTime = data.repairTime;
form.repairName = data.repairName;
form.remark = data.remark;
diff --git a/src/views/equipmentManagement/repair/index.vue b/src/views/equipmentManagement/repair/index.vue
index 1e7af53..df5a39e 100644
--- a/src/views/equipmentManagement/repair/index.vue
+++ b/src/views/equipmentManagement/repair/index.vue
@@ -188,6 +188,11 @@
prop: "deviceModel",
},
{
+ label: "鎶ヤ慨椤圭洰",
+ align: "center",
+ prop: "repairProject",
+ },
+ {
label: "鎶ヤ慨鏃ユ湡",
align: "center",
prop: "repairTime",
diff --git a/src/views/productionManagement/productionCosting/index.vue b/src/views/productionManagement/productionCosting/index.vue
index 5e90a0c..c437e78 100644
--- a/src/views/productionManagement/productionCosting/index.vue
+++ b/src/views/productionManagement/productionCosting/index.vue
@@ -149,6 +149,21 @@
minWidth: 100,
},
{
+ label: "鎶ュ簾鏁伴噺",
+ prop: "scrapQty",
+ minWidth: 100,
+ },
+ {
+ label: "琛ヤ骇鏁伴噺",
+ prop: "replenishQty",
+ minWidth: 100,
+ },
+ {
+ label: "鍔犳斁鏁�",
+ prop: "addQty",
+ minWidth: 100,
+ },
+ {
label: "鏈哄彴",
prop: "deviceName",
minWidth: 100,
diff --git a/src/views/productionManagement/productionOrder/BindRouteDialog.vue b/src/views/productionManagement/productionOrder/BindRouteDialog.vue
index 35ea376..f651360 100644
--- a/src/views/productionManagement/productionOrder/BindRouteDialog.vue
+++ b/src/views/productionManagement/productionOrder/BindRouteDialog.vue
@@ -62,7 +62,7 @@
<el-table-column label="鏉愭枡鍚嶇О">
<template #default="{ row, $index }">
<el-tree-select
- v-if="props.type === 'add'"
+ v-if="!isDetail && !row.productById"
v-model="row.productById"
placeholder="璇烽�夋嫨"
clearable
@@ -70,7 +70,6 @@
@change="(val) => getModels(val, row, $index)"
:data="productOptions"
:render-after-expand="false"
- :disabled="isDetail"
style="width: 100%"
/>
<span v-else>{{ row.name }}</span>
@@ -82,13 +81,13 @@
</template>
<template #default="{ row }">
<el-select
- v-if="props.type === 'add'"
+ v-if="!isDetail && !row.productModelId"
v-model="row.productModelId"
placeholder="璇烽�夋嫨瑙勬牸"
filterable
clearable
@change="(val) => handleMaterialModelChange(val, row)"
- :disabled="isDetail"
+ style="width: 100%"
>
<el-option
v-for="item in row.modelOptions"
diff --git a/src/views/productionManagement/productionReporting/index.vue b/src/views/productionManagement/productionReporting/index.vue
index bd93574..6585237 100644
--- a/src/views/productionManagement/productionReporting/index.vue
+++ b/src/views/productionManagement/productionReporting/index.vue
@@ -19,12 +19,12 @@
style="width: 200px;"
@change="handleQuery" />
</el-form-item>
- <el-form-item label="瀹℃牳鐘舵��:">
- <el-select v-model="searchForm.auditStatus" placeholder="璇烽�夋嫨" style="width: 200px;" @change="handleQuery">
- <el-option v-for="item in auditStatusOptions" :key="item.value" :label="item.label" :value="item.value">
- </el-option>
- </el-select>
- </el-form-item>
+<!-- <el-form-item label="瀹℃牳鐘舵��:">-->
+<!-- <el-select v-model="searchForm.auditStatus" placeholder="璇烽�夋嫨" style="width: 200px;" @change="handleQuery">-->
+<!-- <el-option v-for="item in auditStatusOptions" :key="item.value" :label="item.label" :value="item.value">-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary"
@click="handleQuery">鎼滅储</el-button>
@@ -250,30 +250,30 @@
prop: "deviceName",
width: 120,
},
- {
- label: "瀹℃牳浜�",
- prop: "auditUserName",
- width: 120,
- },
- {
- label: "瀹℃牳鐘舵��",
- prop: "auditStatus",
- width: 120,
- dataType: "tag",
- formatData: val => {
- const statusMap = { 0: "鏈鏍�", 1: "閫氳繃", 2: "涓嶉�氳繃" };
- return statusMap[val] ?? "鏈煡";
- },
- formatType: val => {
- const typeMap = { 0: "info", 1: "success", 2: "danger" };
- return typeMap[val] ?? "";
- },
- },
- {
- label: "鏈�缁堝鏍镐汉",
- prop: "sureAuditUserName",
- width: 120,
- },
+ // {
+ // label: "瀹℃牳浜�",
+ // prop: "auditUserName",
+ // width: 120,
+ // },
+ // {
+ // label: "瀹℃牳鐘舵��",
+ // prop: "auditStatus",
+ // width: 120,
+ // dataType: "tag",
+ // formatData: val => {
+ // const statusMap = { 0: "鏈鏍�", 1: "閫氳繃", 2: "涓嶉�氳繃" };
+ // return statusMap[val] ?? "鏈煡";
+ // },
+ // formatType: val => {
+ // const typeMap = { 0: "info", 1: "success", 2: "danger" };
+ // return typeMap[val] ?? "";
+ // },
+ // },
+ // {
+ // label: "鏈�缁堝鏍镐汉",
+ // prop: "sureAuditUserName",
+ // width: 120,
+ // },
{
label: "浜у搧鍚嶇О",
prop: "productName",
@@ -292,6 +292,11 @@
{
label: "鎶ュ簾鏁伴噺",
prop: "scrapQty",
+ width: 120,
+ },
+ {
+ label: "鍔犳斁鏁�",
+ prop: "addQty",
width: 120,
},
{
@@ -330,13 +335,13 @@
deleteReport(row);
},
},
- {
- name:"瀹℃牳",
- clickFun: row => {
- handleAudit(row);
- },
- disabled: row => !(Number(row?.auditStatus) === 0 && (Number(row?.auditUserId) === -1 || Number(row?.auditUserId) === Number(userStore.id)))
- },
+ // {
+ // name:"瀹℃牳",
+ // clickFun: row => {
+ // handleAudit(row);
+ // },
+ // disabled: row => !(Number(row?.auditStatus) === 0 && (Number(row?.auditUserId) === -1 || Number(row?.auditUserId) === Number(userStore.id)))
+ // },
],
},
]);
diff --git a/src/views/productionManagement/workOrder/index.vue b/src/views/productionManagement/workOrder/index.vue
index c8a13a9..2456dfb 100644
--- a/src/views/productionManagement/workOrder/index.vue
+++ b/src/views/productionManagement/workOrder/index.vue
@@ -192,6 +192,7 @@
step="1"
placeholder="璇疯緭鍏ユ湰娆$敓浜ф暟閲�"
style="width: 100%"
+ :class="{ 'over-limit': reportForm.quantity > reportForm.planQuantity }"
@input="handleQuantityInput"
/>
</el-form-item>
@@ -218,6 +219,18 @@
step="1"
placeholder="璇疯緭鍏ユ姤搴熸暟閲�"
@input="handleScrapQtyInput"
+ />
+ </el-form-item>
+ </el-col>
+
+ <el-col :span="12">
+ <el-form-item label="鍔犳斁鏁�" prop="addQty">
+ <el-input
+ v-model.number="reportForm.addQty"
+ type="number"
+ min="0"
+ step="1"
+ placeholder="璇疯緭鍏ュ姞鏀炬暟"
/>
</el-form-item>
</el-col>
@@ -263,24 +276,24 @@
<!-- </el-form-item>-->
<!-- </el-col>-->
- <el-col :span="12">
- <el-form-item label="瀹℃牳浜�" prop="auditUserId">
- <el-select
- v-model="reportForm.auditUserId"
- placeholder="璇烽�夋嫨瀹℃牳浜�"
- clearable
- filterable
- @change="handleReviewerIdChange"
- >
- <el-option
- v-for="user in userOptions"
- :key="user.userId"
- :label="user.nickName"
- :value="user.userId"
- />
- </el-select>
- </el-form-item>
- </el-col>
+<!-- <el-col :span="12">-->
+<!-- <el-form-item label="瀹℃牳浜�" prop="auditUserId">-->
+<!-- <el-select-->
+<!-- v-model="reportForm.auditUserId"-->
+<!-- placeholder="璇烽�夋嫨瀹℃牳浜�"-->
+<!-- clearable-->
+<!-- filterable-->
+<!-- @change="handleReviewerIdChange"-->
+<!-- >-->
+<!-- <el-option-->
+<!-- v-for="user in userOptions"-->
+<!-- :key="user.userId"-->
+<!-- :label="user.nickName"-->
+<!-- :value="user.userId"-->
+<!-- />-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
+<!-- </el-col>-->
</el-row>
</el-form>
@@ -1121,6 +1134,7 @@
planQuantity: 0,
quantity: null,
scrapQty: null,
+ addQty: 0,
startTime: "",
endTime: "",
userName: "",
@@ -1228,7 +1242,7 @@
scrapQty: [{validator: validateScrapQty, trigger: "blur"}],
startTime: [{required: true, message: "璇烽�夋嫨寮�濮嬫椂闂�", trigger: "change"}],
endTime: [{required: true, message: "璇烽�夋嫨缁撴潫鏃堕棿", trigger: "change"}],
- auditUserId: [{required: true, message: "璇烽�夋嫨瀹℃牳浜�", trigger: "change"}],
+ // auditUserId: [{required: true, message: "璇烽�夋嫨瀹℃牳浜�", trigger: "change"}],
teamList: [{required: true, message: "璇烽�夋嫨鐝粍", trigger: "change"}],
deviceId: [{required: true, message: "璇烽�夋嫨璁惧", trigger: "change"}],
};
@@ -1241,12 +1255,6 @@
}
const num = Number(value);
if (isNaN(num)) {
- return;
- }
- // 濡傛灉瓒呰繃寰呯敓浜ф暟閲�
- if (num > reportForm.planQuantity) {
- proxy.$modal.msgWarning("鏈鐢熶骇鏁伴噺涓嶈兘澶т簬寰呯敓浜ф暟閲�");
- reportForm.quantity = reportForm.planQuantity;
return;
}
// 濡傛灉灏忎簬1锛屾竻闄�
@@ -1456,6 +1464,7 @@
reportForm.replenishQty = 0;
reportForm.teamList = [];
reportForm.scrapQty = 0;
+ reportForm.addQty = 0;
reportForm.userIds = row.userIds || [];
const ids = (row.userIds || "")
@@ -1464,7 +1473,7 @@
.filter(Boolean);
reportForm.userIdsList = userTeamOptions.value
- .filter(item => ids.includes(String(item.userId)))
+ // .filter(item => ids.includes(String(item.userId)))
.map(item => ({
userId: item.userId,
nickName: item.nickName
@@ -1535,12 +1544,12 @@
return;
}
- if (quantity > reportForm.planQuantity) {
- ElMessageBox.alert("鏈鐢熶骇鏁伴噺涓嶈兘瓒呰繃寰呯敓浜ф暟閲�", "鎻愮ず", {
- confirmButtonText: "纭畾",
- });
- return;
- }
+ // if (quantity > reportForm.planQuantity) {
+ // ElMessageBox.alert("鏈鐢熶骇鏁伴噺涓嶈兘瓒呰繃寰呯敓浜ф暟閲�", "鎻愮ず", {
+ // confirmButtonText: "纭畾",
+ // });
+ // return;
+ // }
const submitData = {
...reportForm,
@@ -1805,4 +1814,8 @@
white-space: normal !important;
word-break: break-all;
}
+
+.over-limit .el-input__inner {
+ color: #f56c6c !important;
+}
</style>
diff --git a/src/views/qualityManagement/finalInspection/components/formDia.vue b/src/views/qualityManagement/finalInspection/components/formDia.vue
index 5f4c975..2866cca 100644
--- a/src/views/qualityManagement/finalInspection/components/formDia.vue
+++ b/src/views/qualityManagement/finalInspection/components/formDia.vue
@@ -80,7 +80,7 @@
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="妫�楠屽憳锛�" prop="checkName">
- <el-select v-model="form.checkName" placeholder="璇烽�夋嫨" clearable>
+ <el-select v-model="form.checkName" placeholder="璇烽�夋嫨" clearable filterable>
<el-option v-for="item in userList" :key="item.nickName" :label="item.nickName"
:value="item.nickName"/>
</el-select>
@@ -203,13 +203,13 @@
const modelOptions = ref([]);
// 鎵撳紑寮规
-const openDialog = async (type, row) => {
+const openDialog = async (type, row, defaultCheckResult = "", defaultCheckName = "") => {
operationType.value = type;
dialogFormVisible.value = true;
// 鍏堟竻绌鸿〃鍗曢獙璇佺姸鎬侊紝閬垮厤闂儊
await nextTick();
proxy.$refs.formRef?.clearValidate();
-
+
// 骞惰鍔犺浇鍩虹鏁版嵁
const [userListsRes] = await Promise.all([
userListNoPage(),
@@ -218,17 +218,28 @@
supplierList.value = res.data;
})
]);
- userList.value = userListsRes.data;
-
+ // 绛涢�� roleIds 鍖呭惈 106 鐨勭敤鎴�
+ userList.value = (userListsRes.data || []).filter(user => {
+ const roleIds = user.roleIds || [];
+ return roleIds.includes(106) || roleIds.includes('106');
+ });
+
form.value = {}
testStandardOptions.value = [];
tableData.value = [];
-
+
if (operationType.value === 'edit') {
// 鍏堜繚瀛� testStandardId锛岄伩鍏嶈娓呯┖
const savedTestStandardId = row.testStandardId;
// 鍏堣缃〃鍗曟暟鎹紝浣嗘殏鏃舵竻绌� testStandardId锛岀瓑閫夐」鍔犺浇瀹屾垚鍚庡啀璁剧疆
form.value = {...row, testStandardId: ''}
+ // 濡傛灉浼犲叆浜嗛粯璁ゆ娴嬬粨鏋滐紝瑕嗙洊row涓殑鍊�
+ if (defaultCheckResult) {
+ form.value.checkResult = defaultCheckResult;
+ }
+ // 濡傛灉浼犲叆浜嗛粯璁ゆ楠屽憳锛岃鐩杛ow涓殑鍊硷紙浼樺厛浣跨敤浼犲叆鐨勬楠屽憳锛�
+ console.log('formDia checkName debug:', { defaultCheckName, rowCheckName: row.checkName });
+ form.value.checkName = defaultCheckName || row.checkName || "";
currentProductId.value = row.productId || 0
// 娓呯┖楠岃瘉鐘舵�侊紝閬垮厤鏁版嵁鍔犺浇杩囩▼涓殑鏍¢獙闂儊
nextTick(() => {
diff --git a/src/views/qualityManagement/finalInspection/index.vue b/src/views/qualityManagement/finalInspection/index.vue
index db44222..456ae7f 100644
--- a/src/views/qualityManagement/finalInspection/index.vue
+++ b/src/views/qualityManagement/finalInspection/index.vue
@@ -40,23 +40,56 @@
<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%"
+ <!-- 妫�楠岀粨鏋滈�夋嫨瀵硅瘽妗� -->
+ <el-dialog v-model="quickCheckVisible" title="妫�楠岀粨鏋�" width="30%" @close="closeQuickCheck">
+ <el-form :model="quickCheckForm" label-width="140px" label-position="top" ref="quickCheckRef">
+ <el-form-item label="妫�娴嬬粨鏋滐細" required>
+ <el-radio-group v-model="quickCheckForm.checkResult">
+ <el-radio value="鍚堟牸">鍚堟牸</el-radio>
+ <el-radio value="涓嶅悎鏍�">涓嶅悎鏍�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="妫�楠屽憳锛�">
+ <el-select v-model="quickCheckForm.checkName" placeholder="璇烽�夋嫨" clearable style="width: 100%">
+ <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="妫�娴嬫棩鏈燂細">
+ <el-date-picker
+ v-model="quickCheckForm.checkTime"
+ type="date"
+ placeholder="璇烽�夋嫨鏃ユ湡"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ clearable
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button type="primary" @click="handleQuickCheckConfirm">纭</el-button>
+ <el-button @click="closeQuickCheck">鍙栨秷</el-button>
+ </div>
+ </template>
+ </el-dialog>
+ <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>
+ <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>
@@ -159,10 +192,10 @@
width: 280,
operation: [
{
- name: "缂栬緫",
+ name: "妫�楠�",
type: "text",
clickFun: (row) => {
- openForm("edit", row);
+ openQuickCheck(row);
},
disabled: (row) => {
// 宸叉彁浜ゅ垯绂佺敤
@@ -181,43 +214,43 @@
openFilesFormDia(row);
},
},
- {
- 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("妫�楠屽憳宸插瓨鍦�");
+ {
+ 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;
}
},
- disabled: (row) => {
- return row.inspectState == 1 || row.checkName;
- }
- },
- {
- name: "涓嬭浇",
- type: "text",
- clickFun: (row) => {
- downLoadFile(row);
+ {
+ 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);
+ },
+ },
],
},
]);
@@ -240,6 +273,13 @@
checkName: ""
});
const dialogFormVisible = ref(false);
+const quickCheckVisible = ref(false);
+const quickCheckForm = ref({
+ checkResult: "鍚堟牸",
+ checkName: "",
+ checkTime: ""
+});
+const quickCheckRef = ref(null);
const changeDaterange = (value) => {
searchForm.value.entryDateStart = undefined;
@@ -367,7 +407,11 @@
const open = async (row) => {
let userLists = await userListNoPage();
- userList.value = userLists.data;
+ // 绛涢�� roleIds 鍖呭惈 106 鐨勭敤鎴�
+ userList.value = (userLists.data || []).filter(user => {
+ const roleIds = user.roleIds || [];
+ return roleIds.includes(106) || roleIds.includes('106');
+ });
currentRow.value = row
dialogFormVisible.value = true
}
@@ -378,17 +422,91 @@
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 openQuickCheck = async (row) => {
+ currentRow.value = row;
+ // 鍔犺浇鐢ㄦ埛鍒楄〃锛岀瓫閫� roleIds 鍖呭惈 106 鐨勭敤鎴�
+ try {
+ const userLists = await userListNoPage();
+ userList.value = (userLists.data || []).filter(user => {
+ const roleIds = user.roleIds || [];
+ return roleIds.includes(106) || roleIds.includes('106');
+ });
+ } catch (e) {
+ console.error("鍔犺浇妫�楠屽憳鍒楄〃澶辫触", e);
+ userList.value = [];
+ }
+ // 璁剧疆榛樿鍊硷紙妫�楠屽憳榛樿涓哄綋鍓嶇櫥褰曠敤鎴凤級
+ quickCheckForm.value = {
+ checkResult: "鍚堟牸",
+ checkName: userStore.nickName || "",
+ checkTime: dayjs().format("YYYY-MM-DD")
+ };
+ quickCheckVisible.value = true;
+};
+
+// 鍏抽棴妫�楠岀粨鏋滈�夋嫨瀵硅瘽妗�
+const closeQuickCheck = () => {
+ quickCheckVisible.value = false;
+ quickCheckForm.value = {
+ checkResult: "鍚堟牸",
+ checkName: "",
+ checkTime: ""
+ };
+};
+
+// 纭妫�楠岀粨鏋�
+const handleQuickCheckConfirm = () => {
+ if (!quickCheckForm.value.checkResult) {
+ proxy.$modal.msgWarning("璇烽�夋嫨妫�娴嬬粨鏋�");
+ return;
+ }
+ if (!quickCheckForm.value.checkName) {
+ proxy.$modal.msgWarning("璇烽�夋嫨妫�楠屽憳");
+ return;
+ }
+ if (!quickCheckForm.value.checkTime) {
+ proxy.$modal.msgWarning("璇烽�夋嫨妫�娴嬫棩鏈�");
+ return;
+ }
+
+ if (quickCheckForm.value.checkResult === "鍚堟牸") {
+ // 鍚堟牸锛氱洿鎺ユ彁浜�
+ const data = {
+ id: currentRow.value.id,
+ checkResult: "鍚堟牸",
+ checkName: quickCheckForm.value.checkName,
+ checkTime: quickCheckForm.value.checkTime,
+ inspectType: 2
+ };
+ qualityInspectUpdate(data).then(res => {
+ proxy.$modal.msgSuccess("妫�楠屾垚鍔�");
+ closeQuickCheck();
+ getList();
+ });
+ } else {
+ // 涓嶅悎鏍硷細鎵撳紑璇︾粏濉啓椤甸潰锛屼紶閫掓楠屽憳淇℃伅
+ // 鍏堜繚瀛樻楠屽憳鍊硷紝閬垮厤 closeQuickCheck 閲嶇疆鍚庝涪澶�
+ const checkNameToPass = quickCheckForm.value.checkName;
+ closeQuickCheck();
+ nextTick(() => {
+ formDia.value?.openDialog("edit", currentRow.value, "涓嶅悎鏍�", checkNameToPass);
+ });
+ }
+};
+
onMounted(() => {
getList();
});
diff --git a/src/views/qualityManagement/processInspection/components/formDia.vue b/src/views/qualityManagement/processInspection/components/formDia.vue
index c1185d2..fb2f830 100644
--- a/src/views/qualityManagement/processInspection/components/formDia.vue
+++ b/src/views/qualityManagement/processInspection/components/formDia.vue
@@ -89,7 +89,7 @@
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="妫�楠屽憳锛�" prop="checkName">
- <el-select v-model="form.checkName" placeholder="璇烽�夋嫨" clearable>
+ <el-select v-model="form.checkName" placeholder="璇烽�夋嫨" clearable filterable>
<el-option v-for="item in userList" :key="item.nickName" :label="item.nickName"
:value="item.nickName"/>
</el-select>
@@ -216,7 +216,7 @@
const modelOptions = ref([]);
// 鎵撳紑寮规
-const openDialog = async (type, row) => {
+const openDialog = async (type, row, defaultCheckResult = "", defaultCheckName = "") => {
operationType.value = type;
getOptions().then((res) => {
supplierList.value = res.data;
@@ -230,12 +230,16 @@
processList.value = [];
}
let userLists = await userListNoPage();
- userList.value = userLists.data;
- // 鍏堥噸缃〃鍗曟暟鎹紙淇濇寔瀛楁瀹屾暣锛岄伩鍏嶅脊绐楅娆℃覆鏌撴椂瑙﹀彂蹇呭~绾㈡鈥滈棯涓�涓嬧�濓級
+ // 绛涢�� roleIds 鍖呭惈 106 鐨勭敤鎴�
+ userList.value = (userLists.data || []).filter(user => {
+ const roleIds = user.roleIds || [];
+ return roleIds.includes(106) || roleIds.includes('106');
+ });
+ // 鍏堥噸缃〃鍗曟暟鎹紙淇濇寔瀛楁瀹屾暣锛岄伩鍏嶅脊绐楅娆℃覆鏌撴椂瑙﹀彂蹇呭~绾㈡"闂竴涓�"锛�
form.value = {
checkTime: "",
process: "",
- checkName: "",
+ checkName: defaultCheckName || "",
productName: "",
productId: "",
productModelId: "",
@@ -244,7 +248,7 @@
unit: "",
quantity: "",
checkCompany: "",
- checkResult: "",
+ checkResult: defaultCheckResult || "",
}
testStandardOptions.value = [];
tableData.value = [];
@@ -255,6 +259,13 @@
const savedTestStandardId = row.testStandardId;
// 鍏堣缃〃鍗曟暟鎹紝浣嗘殏鏃舵竻绌� testStandardId锛岀瓑閫夐」鍔犺浇瀹屾垚鍚庡啀璁剧疆
form.value = {...row, testStandardId: ''}
+ // 濡傛灉浼犲叆浜嗛粯璁ゆ娴嬬粨鏋滐紝瑕嗙洊row涓殑鍊�
+ if (defaultCheckResult) {
+ form.value.checkResult = defaultCheckResult;
+ }
+ // 濡傛灉浼犲叆浜嗛粯璁ゆ楠屽憳锛岃鐩杛ow涓殑鍊硷紙浼樺厛浣跨敤浼犲叆鐨勬楠屽憳锛�
+ console.log('formDia checkName debug:', { defaultCheckName, rowCheckName: row.checkName });
+ form.value.checkName = defaultCheckName || row.checkName || "";
currentProductId.value = row.productId || 0
// 鍏抽敭锛氱紪杈戞椂鍔犺浇瑙勬牸鍨嬪彿涓嬫媺閫夐」锛屾墠鑳藉弽鏄� productModelId
if (currentProductId.value) {
diff --git a/src/views/qualityManagement/processInspection/index.vue b/src/views/qualityManagement/processInspection/index.vue
index cbeab71..cf1e77c 100644
--- a/src/views/qualityManagement/processInspection/index.vue
+++ b/src/views/qualityManagement/processInspection/index.vue
@@ -40,23 +40,56 @@
<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%"
+ <!-- 妫�楠岀粨鏋滈�夋嫨瀵硅瘽妗� -->
+ <el-dialog v-model="quickCheckVisible" title="妫�楠岀粨鏋�" width="30%" @close="closeQuickCheck">
+ <el-form :model="quickCheckForm" label-width="140px" label-position="top" ref="quickCheckRef">
+ <el-form-item label="妫�娴嬬粨鏋滐細" required>
+ <el-radio-group v-model="quickCheckForm.checkResult">
+ <el-radio value="鍚堟牸">鍚堟牸</el-radio>
+ <el-radio value="涓嶅悎鏍�">涓嶅悎鏍�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="妫�楠屽憳锛�">
+ <el-select v-model="quickCheckForm.checkName" placeholder="璇烽�夋嫨" clearable style="width: 100%">
+ <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="妫�娴嬫棩鏈燂細">
+ <el-date-picker
+ v-model="quickCheckForm.checkTime"
+ type="date"
+ placeholder="璇烽�夋嫨鏃ユ湡"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ clearable
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button type="primary" @click="handleQuickCheckConfirm">纭</el-button>
+ <el-button @click="closeQuickCheck">鍙栨秷</el-button>
+ </div>
+ </template>
+ </el-dialog>
+ <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>
+ <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>
@@ -164,10 +197,10 @@
width: 280,
operation: [
{
- name: "缂栬緫",
+ name: "妫�楠�",
type: "text",
clickFun: (row) => {
- openForm("edit", row);
+ openQuickCheck(row);
},
disabled: (row) => {
// 宸叉彁浜ゅ垯绂佺敤
@@ -186,43 +219,43 @@
openFilesFormDia(row);
},
},
- {
- 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("妫�楠屽憳宸插瓨鍦�");
+ {
+ 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;
}
},
- disabled: (row) => {
- return row.inspectState == 1 || row.checkName;
- }
- },
- {
- name: "涓嬭浇",
- type: "text",
- clickFun: (row) => {
- downLoadFile(row);
+ {
+ 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);
+ },
+ },
],
},
]);
@@ -235,6 +268,13 @@
const form = ref({
checkName: ""
});
+const quickCheckVisible = ref(false);
+const quickCheckForm = ref({
+ checkResult: "鍚堟牸",
+ checkName: "",
+ checkTime: ""
+});
+const quickCheckRef = ref(null);
const page = reactive({
current: 1,
size: 100,
@@ -310,7 +350,11 @@
}
const open = async (row) => {
let userLists = await userListNoPage();
- userList.value = userLists.data;
+ // 绛涢�� roleIds 鍖呭惈 106 鐨勭敤鎴�
+ userList.value = (userLists.data || []).filter(user => {
+ const roleIds = user.roleIds || [];
+ return roleIds.includes(106) || roleIds.includes('106');
+ });
currentRow.value = row
dialogFormVisible.value = true
}
@@ -363,13 +407,13 @@
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)
})
@@ -388,6 +432,80 @@
proxy.$modal.msg("宸插彇娑�");
});
};
+
+// 鎵撳紑妫�楠岀粨鏋滈�夋嫨瀵硅瘽妗�
+const openQuickCheck = async (row) => {
+ currentRow.value = row;
+ // 鍔犺浇鐢ㄦ埛鍒楄〃锛岀瓫閫� roleIds 鍖呭惈 106 鐨勭敤鎴�
+ try {
+ const userLists = await userListNoPage();
+ userList.value = (userLists.data || []).filter(user => {
+ const roleIds = user.roleIds || [];
+ return roleIds.includes(106) || roleIds.includes('106');
+ });
+ } catch (e) {
+ console.error("鍔犺浇妫�楠屽憳鍒楄〃澶辫触", e);
+ userList.value = [];
+ }
+ // 璁剧疆榛樿鍊硷紙妫�楠屽憳榛樿涓哄綋鍓嶇櫥褰曠敤鎴凤級
+ quickCheckForm.value = {
+ checkResult: "鍚堟牸",
+ checkName: userStore.nickName || "",
+ checkTime: dayjs().format("YYYY-MM-DD")
+ };
+ quickCheckVisible.value = true;
+};
+
+// 鍏抽棴妫�楠岀粨鏋滈�夋嫨瀵硅瘽妗�
+const closeQuickCheck = () => {
+ quickCheckVisible.value = false;
+ quickCheckForm.value = {
+ checkResult: "鍚堟牸",
+ checkName: "",
+ checkTime: ""
+ };
+};
+
+// 纭妫�楠岀粨鏋�
+const handleQuickCheckConfirm = () => {
+ if (!quickCheckForm.value.checkResult) {
+ proxy.$modal.msgWarning("璇烽�夋嫨妫�娴嬬粨鏋�");
+ return;
+ }
+ if (!quickCheckForm.value.checkName) {
+ proxy.$modal.msgWarning("璇烽�夋嫨妫�楠屽憳");
+ return;
+ }
+ if (!quickCheckForm.value.checkTime) {
+ proxy.$modal.msgWarning("璇烽�夋嫨妫�娴嬫棩鏈�");
+ return;
+ }
+
+ if (quickCheckForm.value.checkResult === "鍚堟牸") {
+ // 鍚堟牸锛氱洿鎺ユ彁浜�
+ const data = {
+ id: currentRow.value.id,
+ checkResult: "鍚堟牸",
+ checkName: quickCheckForm.value.checkName,
+ checkTime: quickCheckForm.value.checkTime,
+ inspectType: 1
+ };
+ qualityInspectUpdate(data).then(res => {
+ proxy.$modal.msgSuccess("妫�楠屾垚鍔�");
+ closeQuickCheck();
+ getList();
+ });
+ } else {
+ // 涓嶅悎鏍硷細鎵撳紑璇︾粏濉啓椤甸潰锛屼紶閫掓楠屽憳淇℃伅
+ // 鍏堜繚瀛樻楠屽憳鍊硷紝閬垮厤 closeQuickCheck 閲嶇疆鍚庝涪澶�
+ const checkNameToPass = quickCheckForm.value.checkName;
+ closeQuickCheck();
+ nextTick(() => {
+ formDia.value?.openDialog("edit", currentRow.value, "涓嶅悎鏍�", checkNameToPass);
+ });
+ }
+};
+
onMounted(() => {
getList();
});
diff --git a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
index 7e373bf..bec44df 100644
--- a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
@@ -100,7 +100,7 @@
<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%">
+ <el-select v-model="form.checkName" placeholder="璇烽�夋嫨" clearable style="width: 100%" filterable>
<el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
</el-select>
</el-form-item>
@@ -228,7 +228,7 @@
});
// 鎵撳紑寮规
-const openDialog = async (type, row) => {
+const openDialog = async (type, row, defaultCheckResult = "", defaultCheckName = "") => {
operationType.value = type;
getOptions().then((res) => {
supplierList.value = res.data;
@@ -236,16 +236,20 @@
try {
const userRes = await userListNoPage();
- userList.value = userRes.data || [];
+ // 绛涢�� roleIds 鍖呭惈 106 鐨勭敤鎴�
+ userList.value = (userRes.data || []).filter(user => {
+ const roleIds = user.roleIds || [];
+ return roleIds.includes(106) || roleIds.includes('106');
+ });
} catch (e) {
console.error("鍔犺浇妫�楠屽憳鍒楄〃澶辫触", e);
userList.value = [];
}
- // 鍏堥噸缃〃鍗曟暟鎹紙淇濇寔瀛楁瀹屾暣锛岄伩鍏嶅脊绐楅娆℃覆鏌撴椂瑙﹀彂蹇呭~绾㈡鈥滈棯涓�涓嬧�濓級
+ // 鍏堥噸缃〃鍗曟暟鎹紙淇濇寔瀛楁瀹屾暣锛岄伩鍏嶅脊绐楅娆℃覆鏌撴椂瑙﹀彂蹇呭~绾㈡"闂竴涓�"锛�
form.value = {
checkTime: "",
supplier: "",
- checkName: "",
+ checkName: defaultCheckName || "",
productName: "",
productId: "",
productModelId: "",
@@ -254,7 +258,7 @@
unit: "",
quantity: "",
checkCompany: "",
- checkResult: "",
+ checkResult: defaultCheckResult || "",
}
testStandardOptions.value = [];
tableData.value = [];
@@ -264,6 +268,13 @@
// 鍏堜繚瀛� testStandardId锛岄伩鍏嶈娓呯┖
const savedTestStandardId = row.testStandardId;
form.value = {...row}
+ // 濡傛灉浼犲叆浜嗛粯璁ゆ娴嬬粨鏋滐紝瑕嗙洊row涓殑鍊�
+ if (defaultCheckResult) {
+ form.value.checkResult = defaultCheckResult;
+ }
+ // 濡傛灉浼犲叆浜嗛粯璁ゆ楠屽憳锛岃鐩杛ow涓殑鍊硷紙浼樺厛浣跨敤浼犲叆鐨勬楠屽憳锛�
+ console.log('formDia checkName debug:', { defaultCheckName, rowCheckName: row.checkName });
+ form.value.checkName = defaultCheckName || row.checkName || "";
currentProductId.value = row.productId || 0
// 鍏抽敭锛氱紪杈戞椂鍔犺浇瑙勬牸鍨嬪彿涓嬫媺閫夐」锛屾墠鑳藉弽鏄� productModelId
if (currentProductId.value) {
diff --git a/src/views/qualityManagement/rawMaterialInspection/index.vue b/src/views/qualityManagement/rawMaterialInspection/index.vue
index 26504b0..67bf6ef 100644
--- a/src/views/qualityManagement/rawMaterialInspection/index.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/index.vue
@@ -41,6 +41,39 @@
<InspectionFormDia ref="inspectionFormDia" @close="handleQuery"></InspectionFormDia>
<FormDia ref="formDia" @close="handleQuery"></FormDia>
<files-dia ref="filesDia" @close="handleQuery"></files-dia>
+ <!-- 妫�楠岀粨鏋滈�夋嫨瀵硅瘽妗� -->
+ <el-dialog v-model="quickCheckVisible" title="妫�楠岀粨鏋�" width="30%" @close="closeQuickCheck">
+ <el-form :model="quickCheckForm" label-width="140px" label-position="top" ref="quickCheckRef">
+ <el-form-item label="妫�娴嬬粨鏋滐細" required>
+ <el-radio-group v-model="quickCheckForm.checkResult">
+ <el-radio value="鍚堟牸">鍚堟牸</el-radio>
+ <el-radio value="涓嶅悎鏍�">涓嶅悎鏍�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="妫�楠屽憳锛�">
+ <el-select v-model="quickCheckForm.checkName" placeholder="璇烽�夋嫨" clearable style="width: 100%">
+ <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="妫�娴嬫棩鏈燂細">
+ <el-date-picker
+ v-model="quickCheckForm.checkTime"
+ type="date"
+ placeholder="璇烽�夋嫨鏃ユ湡"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ clearable
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button type="primary" @click="handleQuickCheckConfirm">纭</el-button>
+ <el-button @click="closeQuickCheck">鍙栨秷</el-button>
+ </div>
+ </template>
+ </el-dialog>
<el-dialog v-model="dialogFormVisible" title="缂栬緫妫�楠屽憳" width="30%"
@close="closeDia">
<el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
@@ -166,10 +199,10 @@
width: 280,
operation: [
{
- name: "缂栬緫",
+ name: "妫�楠�",
type: "text",
clickFun: (row) => {
- openForm("edit", row);
+ openQuickCheck(row);
},
disabled: (row) => {
// 宸叉彁浜ゅ垯绂佺敤
@@ -236,6 +269,13 @@
const form = ref({
checkName: ""
});
+const quickCheckVisible = ref(false);
+const quickCheckForm = ref({
+ checkResult: "鍚堟牸",
+ checkName: "",
+ checkTime: ""
+});
+const quickCheckRef = ref(null);
const page = reactive({
current: 1,
size: 100,
@@ -367,7 +407,11 @@
const open = async (row) => {
let userLists = await userListNoPage();
- userList.value = userLists.data;
+ // 绛涢�� roleIds 鍖呭惈 106 鐨勭敤鎴�
+ userList.value = (userLists.data || []).filter(user => {
+ const roleIds = user.roleIds || [];
+ return roleIds.includes(106) || roleIds.includes('106');
+ });
currentRow.value = row
dialogFormVisible.value = true
}
@@ -390,6 +434,79 @@
})
};
+// 鎵撳紑妫�楠岀粨鏋滈�夋嫨瀵硅瘽妗�
+const openQuickCheck = async (row) => {
+ currentRow.value = row;
+ // 鍔犺浇鐢ㄦ埛鍒楄〃锛岀瓫閫� roleIds 鍖呭惈 106 鐨勭敤鎴�
+ try {
+ const userLists = await userListNoPage();
+ userList.value = (userLists.data || []).filter(user => {
+ const roleIds = user.roleIds || [];
+ return roleIds.includes(106) || roleIds.includes('106');
+ });
+ } catch (e) {
+ console.error("鍔犺浇妫�楠屽憳鍒楄〃澶辫触", e);
+ userList.value = [];
+ }
+ // 璁剧疆榛樿鍊硷紙妫�楠屽憳榛樿涓哄綋鍓嶇櫥褰曠敤鎴凤級
+ quickCheckForm.value = {
+ checkResult: "鍚堟牸",
+ checkName: userStore.nickName || "",
+ checkTime: dayjs().format("YYYY-MM-DD")
+ };
+ quickCheckVisible.value = true;
+};
+
+// 鍏抽棴妫�楠岀粨鏋滈�夋嫨瀵硅瘽妗�
+const closeQuickCheck = () => {
+ quickCheckVisible.value = false;
+ quickCheckForm.value = {
+ checkResult: "鍚堟牸",
+ checkName: "",
+ checkTime: ""
+ };
+};
+
+// 纭妫�楠岀粨鏋�
+const handleQuickCheckConfirm = () => {
+ if (!quickCheckForm.value.checkResult) {
+ proxy.$modal.msgWarning("璇烽�夋嫨妫�娴嬬粨鏋�");
+ return;
+ }
+ if (!quickCheckForm.value.checkName) {
+ proxy.$modal.msgWarning("璇烽�夋嫨妫�楠屽憳");
+ return;
+ }
+ if (!quickCheckForm.value.checkTime) {
+ proxy.$modal.msgWarning("璇烽�夋嫨妫�娴嬫棩鏈�");
+ return;
+ }
+
+ if (quickCheckForm.value.checkResult === "鍚堟牸") {
+ // 鍚堟牸锛氱洿鎺ユ彁浜�
+ const data = {
+ id: currentRow.value.id,
+ checkResult: "鍚堟牸",
+ checkName: quickCheckForm.value.checkName,
+ checkTime: quickCheckForm.value.checkTime,
+ inspectType: 0
+ };
+ qualityInspectUpdate(data).then(res => {
+ proxy.$modal.msgSuccess("妫�楠屾垚鍔�");
+ closeQuickCheck();
+ getList();
+ });
+ } else {
+ // 涓嶅悎鏍硷細鎵撳紑璇︾粏濉啓椤甸潰锛屼紶閫掓楠屽憳淇℃伅
+ // 鍏堜繚瀛樻楠屽憳鍊硷紝閬垮厤 closeQuickCheck 閲嶇疆鍚庝涪澶�
+ const checkNameToPass = quickCheckForm.value.checkName;
+ closeQuickCheck();
+ nextTick(() => {
+ formDia.value?.openDialog("edit", currentRow.value, "涓嶅悎鏍�", checkNameToPass);
+ });
+ }
+};
+
onMounted(() => {
getList();
});
diff --git a/src/views/salesManagement/receiptPaymentLedger/index.vue b/src/views/salesManagement/receiptPaymentLedger/index.vue
index 5345cad..bc78e1b 100644
--- a/src/views/salesManagement/receiptPaymentLedger/index.vue
+++ b/src/views/salesManagement/receiptPaymentLedger/index.vue
@@ -46,6 +46,13 @@
:formatter="formattedNumber"
/>
<el-table-column
+ label="鍥炴閲戦(鍏�)"
+ prop="receiptPaymentAmount"
+ show-overflow-tooltip
+ :formatter="formattedNumber"
+ width="200"
+ />
+ <el-table-column
label="搴旀敹閲戦(鍏�)"
prop="unReceiptPaymentAmount"
show-overflow-tooltip
@@ -101,6 +108,13 @@
width="200"
/>
<el-table-column
+ label="鍥炴閲戦(鍏�)"
+ prop="receiptPaymentAmount"
+ show-overflow-tooltip
+ :formatter="formattedNumber"
+ width="200"
+ />
+ <el-table-column
label="搴旀敹閲戦(鍏�)"
prop="unReceiptPaymentAmount"
show-overflow-tooltip
diff --git a/vite.config.js b/vite.config.js
index af1ed35..4e392ae 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -8,11 +8,11 @@
const { VITE_APP_ENV } = env;
const baseUrl =
env.VITE_APP_ENV === "development"
- ? "http://1.15.17.182:9023"
+ ? "http://1.15.17.182:9038"
: env.VITE_BASE_API;
const javaUrl =
env.VITE_APP_ENV === "development"
- ? "http://1.15.17.182:9023"
+ ? "http://1.15.17.182:9039"
: env.VITE_JAVA_API;
return {
define:{
--
Gitblit v1.9.3