From a74fb3a81cce704299f765078ababc7a743bab9d Mon Sep 17 00:00:00 2001
From: ZN <zhang_12370@163.com>
Date: 星期四, 19 三月 2026 16:45:34 +0800
Subject: [PATCH] feat(productionReporting): 添加工单报工审核功能
---
src/views/productionManagement/productionReporting/index.vue | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 168 insertions(+), 4 deletions(-)
diff --git a/src/views/productionManagement/productionReporting/index.vue b/src/views/productionManagement/productionReporting/index.vue
index 0b42dae..f06131a 100644
--- a/src/views/productionManagement/productionReporting/index.vue
+++ b/src/views/productionManagement/productionReporting/index.vue
@@ -19,6 +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>
<el-button type="primary"
@click="handleQuery">鎼滅储</el-button>
@@ -119,6 +125,41 @@
</template>
</PIMTable>
</div>
+ <el-dialog
+ v-model="auditDialogVisible"
+ title="瀹℃牳鎰忚"
+ width="1200px"
+ :close-on-click-modal="false"
+ >
+ <!-- 瀹℃牳琛ㄥ崟 -->
+ <div style=" padding: 15px; border-radius: 4px;">
+ <el-form ref="auditFormRef" :model="form" :rules="auditFormRules" label-width="100px">
+ <el-form-item label="瀹℃牳缁撴灉" prop="auditResult">
+ <el-radio-group v-model="form.auditResult" @change="handleAuditResultChange" size="large">
+ <el-radio label=1 >閫氳繃</el-radio>
+ <el-radio label=2 >涓嶉�氳繃</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="澶囨敞鎰忚" prop="remarks">
+ <el-input
+ v-model="form.remarks"
+ type="textarea"
+ :rows="4"
+ placeholder="璇疯緭鍏ュ娉ㄦ垨鎰忚锛堜笉閫氳繃鏃朵负蹇呭~锛�"
+ maxlength="500"
+ show-word-limit
+ />
+ </el-form-item>
+ </el-form>
+ </div>
+
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="primary" @click="submitAudit">鎻愪氦瀹℃牳</el-button>
+ <el-button :disabled="auditLoading" @click="auditDialogVisible = false">鍙栨秷</el-button>
+ </span>
+ </template>
+ </el-dialog>
<form-dia ref="formDia"
@close="handleQuery"></form-dia>
<input-modal v-if="isShowInput"
@@ -128,15 +169,15 @@
</template>
<script setup>
- import { onMounted, ref } from "vue";
+ import { onMounted, ref, reactive, toRefs, nextTick, getCurrentInstance } from "vue";
import FormDia from "@/views/productionManagement/productionReporting/components/formDia.vue";
- import { ElMessageBox } from "element-plus";
+ import { ElMessageBox, ElMessage } from "element-plus";
import {
productionReportUpdate,
workListPageById,
productionReportDelete,
} from "@/api/productionManagement/productionReporting.js";
- import { productionProductMainListPage } from "@/api/productionManagement/productionProductMain.js";
+ import { productionProductMainListPage, productAudit } from "@/api/productionManagement/productionProductMain.js";
import { userListNoPageByTenantId } from "@/api/system/user.js";
import InputModal from "@/views/productionManagement/productionReporting/Input.vue";
@@ -145,12 +186,22 @@
nickName: "",
workOrderNo: "",
workOrderStatus: "",
+ auditStatus: "", // 瀹℃牳鐘舵��
},
});
const { searchForm } = toRefs(data);
const expandedRowKeys = ref([]);
+ const auditDialogVisible = ref(false);
+ const auditRowData = ref(null);
+ const auditTableData = ref([]);
+ const auditLoading = ref(false);
const expandData = ref([]);
const userList = ref([]);
+ const auditStatusOptions = ref([
+ { label: "鏈鏍�", value: 0 },
+ { label: "閫氳繃", value: 1 },
+ { label: "涓嶉�氳繃", value: 2 },
+ ]);
const tableColumn = ref([
{
label: "鎶ュ伐鍗曞彿",
@@ -202,7 +253,25 @@
prop: "unit",
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: "createTime",
@@ -213,6 +282,7 @@
label: "鎿嶄綔",
align: "center",
fixed: "right",
+ width: 200,
operation: [
{
name: "鏌ョ湅鎶曞叆",
@@ -220,6 +290,15 @@
clickFun: row => {
showInput(row);
},
+ },
+ {
+ name:"瀹℃牳",
+ // 榛勮壊
+ color: "#E6A23C",
+ clickFun: row => {
+ handleAudit(row);
+ },
+ showHide: row => Number(row?.auditStatus) === 0, // 浠呭綋鏈鏍告椂鏄剧ず瀹℃牳鎸夐挳
},
{
name: "鍒犻櫎",
@@ -242,6 +321,26 @@
});
const formDia = ref();
const { proxy } = getCurrentInstance();
+ const auditFormRef = ref(null);
+ const auditFormRules = ref({
+ auditResult: [{ required: true, message: "璇烽�夋嫨瀹℃牳缁撴灉", trigger: "change" }],
+ remarks: [
+ {
+ validator: (rule, value, callback) => {
+ if (form.value.auditResult === "2" && (!value || value.trim() === "")) {
+ callback(new Error("涓嶉�氳繃鏃跺繀椤诲~鍐欏娉ㄦ垨鎰忚"));
+ } else {
+ callback();
+ }
+ },
+ trigger: ["change", "blur"],
+ },
+ ],
+ });
+ const form = ref({
+ auditResult: 1,
+ remarks: "",
+ });
// 鏌ヨ鍒楄〃
/** 鎼滅储鎸夐挳鎿嶄綔 */
@@ -398,6 +497,71 @@
isShowingId.value = row.id;
};
+ // 瀹℃牳
+ const handleAudit = (row) => {
+ if (Number(row?.auditStatus) === 1) {
+ ElMessage.warning("璇ュ伐鍗曞凡瀹℃牳");
+ return;
+ }
+ // 閲嶇疆琛ㄥ崟锛岄粯璁ら�夋嫨閫氳繃
+ form.value = {
+ auditResult: "1",
+ remarks: "",
+ };
+ auditRowData.value = row;
+ const workOrderNo = row?.workOrderNo;
+ const related = workOrderNo
+ ? tableData.value.filter(r => r?.workOrderNo === workOrderNo)
+ : [];
+ auditTableData.value = related.length > 0 ? related : [row];
+ auditDialogVisible.value = true;
+ nextTick(() => {
+ auditFormRef.value?.clearValidate();
+ });
+ };
+
+ // 瀹℃牳缁撴灉鍙樻洿
+ const handleAuditResultChange = () => {
+ if (form.value.auditResult === "1") {
+ // 鍒囨崲涓洪�氳繃鏃舵竻闄ゅ娉ㄦ牎楠�
+ auditFormRef.value?.clearValidate("remarks");
+ } else {
+ // 鍒囨崲涓轰笉閫氳繃鏃堕噸鏂拌Е鍙戝娉ㄦ牎楠�
+ auditFormRef.value?.validateField("remarks");
+ }
+ };
+
+ // 鎻愪氦瀹℃牳
+ const submitAudit = (auditResult) => {
+ auditFormRef.value?.validate().then(() => {
+ auditLoading.value = true;
+ const auditData = {
+ id: auditRowData.value.id,
+ auditStatus: Number(form.value.auditResult),
+ auditOpinion: form.value.remarks,
+ };
+ // 璋冪敤鎶ュ伐瀹℃壒API
+ productAudit(auditData)
+ .then(res => {
+ if (res.code === 200) {
+ proxy.$modal.msgSuccess(auditResult === 1 ? "瀹℃牳閫氳繃" : "瀹℃牳涓嶉�氳繃");
+ auditDialogVisible.value = false;
+ getList();
+ } else {
+ proxy.$modal.msgError(res.msg || "瀹℃牳澶辫触");
+ }
+ })
+ .catch(err => {
+ proxy.$modal.msgError("瀹℃牳澶辫触");
+ })
+ .finally(() => {
+ auditLoading.value = false;
+ });
+ }).catch(() => {
+ // 楠岃瘉澶辫触
+ });
+ };
+
// 瀵煎嚭
const handleOut = () => {
ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
--
Gitblit v1.9.3