From 648f83f5d4480ae9c2794d5f4e114085943bdf6e Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期五, 20 三月 2026 13:54:10 +0800
Subject: [PATCH] 造粒报工
---
src/views/productionManagement/workOrder/components/ProductionRecordForm.vue | 6
src/views/productionManagement/productionReporting/components/Detail.vue | 25 +
src/views/productionManagement/workOrder/index.vue | 6
src/views/productionManagement/workOrder/components/GranulationForm.vue | 757 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 787 insertions(+), 7 deletions(-)
diff --git a/src/views/productionManagement/productionReporting/components/Detail.vue b/src/views/productionManagement/productionReporting/components/Detail.vue
index 8820727..6439989 100644
--- a/src/views/productionManagement/productionReporting/components/Detail.vue
+++ b/src/views/productionManagement/productionReporting/components/Detail.vue
@@ -1,5 +1,5 @@
<script setup lang="ts">
-import {computed, onMounted} from "vue";
+import {computed, onMounted, ref} from "vue";
defineOptions({
name: "ReportingDetail"
@@ -23,10 +23,19 @@
set: (value: boolean) => emits("update:isShow", value),
});
-const otherData = ref([])
+const otherData = ref({})
+const otherDataEntries = computed(() => {
+ return Object.entries(otherData.value || {})
+ .filter(([key]) => key !== "rows")
+ .map(([key, value]) => ({key, value}));
+});
const init = () => {
if (props.row.otherData !== null && props.row.otherData !== '') {
- otherData.value = JSON.parse(props.row.otherData);
+ try {
+ otherData.value = JSON.parse(props.row.otherData);
+ } catch {
+ otherData.value = {};
+ }
}
};
@@ -52,7 +61,15 @@
<el-descriptions-item label="鍗曚綅">{{ row.scrapQty || '-' }}</el-descriptions-item>
<el-descriptions-item label="鍒涘缓鏃堕棿">{{ row.createTime || '-' }}</el-descriptions-item>
<el-descriptions-item
- v-for="item in otherData"
+ v-for="item in otherDataEntries"
+ :key="item.key"
+ :label="item.key"
+ >
+ {{ item.value || '-' }}
+ </el-descriptions-item>
+ <el-descriptions-item
+ v-for="item in (otherData.rows || [])"
+ :key="item.parameterItem"
:label="`${item.parameterItem}`"
>
{{ item.value || '-' }}
diff --git a/src/views/productionManagement/workOrder/components/GranulationForm.vue b/src/views/productionManagement/workOrder/components/GranulationForm.vue
new file mode 100644
index 0000000..ce7a8b8
--- /dev/null
+++ b/src/views/productionManagement/workOrder/components/GranulationForm.vue
@@ -0,0 +1,757 @@
+<script setup lang="ts">
+import {computed, onMounted, reactive, ref} from "vue";
+import {userListNoPageByTenantId} from "@/api/system/user.js";
+import {ElMessage} from "element-plus";
+import {addProductMain} from "@/api/productionManagement/workOrder.js";
+
+defineOptions({
+ name: "GranulationForm"
+});
+
+const props = defineProps({
+ isShow: {
+ type: Boolean,
+ required: true
+ },
+ isEdit: {
+ type: Boolean,
+ default: false
+ },
+ row: {
+ type: Object,
+ default: () => ({}),
+ }
+});
+
+const emits = defineEmits(["update:isShow", "refreshData"]);
+
+const visible = computed({
+ get: () => props.isShow,
+ set: (value: boolean) => emits("update:isShow", value),
+});
+
+const formData = reactive({
+ productProcessRouteItemId: undefined,
+ workOrderId: undefined,
+ planQuantity: undefined,
+ reportWork: undefined,
+ productMainId: undefined,
+ quantity: undefined, // 浜у嚭鏁伴噺
+ userId: undefined, // 浣滀笟鍛�
+ userName: undefined, // 浣滀笟鍛�
+ otherData: {
+ whiteMaterialNumber: undefined, // 鐧芥枡鏂欏彿
+ ingredientDateTime: undefined, // 閰嶆枡鏃ユ湡鏃堕棿
+ weight: undefined, // 閲嶉噺
+ stirredMillIncludesMixing: {
+ oneBucketStartTime: undefined, // 1妗跺紑濮嬫椂闂�
+ oneBucketEndTime: undefined, // 1妗剁粨鏉熸椂闂�
+ twoBucketStartTime: undefined, // 2妗跺紑濮嬫椂闂�
+ twoBucketEndTime: undefined, // 2妗剁粨鏉熸椂闂�
+ fiveBucketStartTime: undefined, // 5妗跺紑濮嬫椂闂�
+ fiveBucketEndTime: undefined, // 5妗剁粨鏉熸椂闂�
+ powderWeight: undefined, // 绮夋枡閲嶉噺
+ waterWeight: undefined, // 姘撮噸閲�
+ stirStartTime: undefined, // 鎼呮媽寮�濮嬫椂闂�
+ stirEndTime: undefined, // 鎼呮媽缁撴潫鏃堕棿
+ stirDispersantWeight: undefined, // 鎼呮媽鍒嗘暎鍓傞噸閲�
+ userId: undefined,
+ userName: undefined,
+ confirmId: undefined,
+ confirmName: undefined,
+ },
+ granulation: {
+ output: undefined, // 浜у嚭鎬讳骇閲�
+ qualifiedMaterialWeight: undefined, // 鍚堟牸鏂欓噸閲�
+ wallMaterial: undefined, // 澹佹枡
+ wasteMaterials: undefined, // 灏炬枡
+ },
+ burningMaterial: {
+ startTime: undefined, // 寮�濮嬫椂闂�
+ endTime: undefined, // 缁撴潫鏃堕棿
+ furnaceNumber: undefined, // 鐐夊彿
+ highestTemperatureZone: undefined, // 鏈�楂樻俯鍖�
+ calcinationRate: undefined, // 鐓呯儳閫熷害
+ calcinationWeight: undefined, // 鐓呯儳閲嶉噺
+ userId: undefined,
+ userName: undefined,
+ confirmId: undefined,
+ confirmName: undefined,
+ },
+ powder: {
+ excess: undefined, // 绮夌鏂欐斁鏂欐病瓒呰繃鏂欐枟闄愪綅绾�
+ },
+ burntBlockBatchNumber: undefined, // 鐑у潡鏂欐壒娆″彿
+ burntBlockBatchNumberDate: undefined, // 鐑у潡鏂欐棩鏈�
+ stirredMill: {
+ threeBucketStartTime: undefined, // 3妗跺紑濮嬫椂闂�
+ threeBucketEndTime: undefined, // 3妗剁粨鏉熸椂闂�
+ threeBucketMixingPowderWeight: undefined, // 3妗跺姞绮夋枡閲嶉噺
+ fourBucketStartTime: undefined, // 4妗跺紑濮嬫椂闂�
+ fourBucketEndTime: undefined, // 4妗剁粨鏉熸椂闂�
+ fourBucketMixingPowderWeight: undefined, // 4妗跺姞绮夋枡閲嶉噺
+ sixBucketStartTime: undefined, // 6妗跺紑濮嬫椂闂�
+ sixBucketEndTime: undefined, // 6妗剁粨鏉熸椂闂�
+ sixBucketMixingPowderWeight: undefined, // 6妗跺姞绮夋枡閲嶉噺
+ userId: undefined,
+ userName: undefined,
+ confirmId: undefined,
+ confirmName: undefined,
+ },
+ stir: {
+ startTime: undefined,
+ endTime: undefined,
+ weightRatio: undefined, // 閲嶉噺姣旓紙姘�/鏂欙級
+ pva: undefined, // PVAn绮樺悎鍓傞噸閲�
+ dispersantWeight: undefined, // 鍒嗘暎鍓傞噸閲�
+ releaseAgentWeight: undefined, // 鑴辨ā鍓傞噸閲�
+ },
+ granulationB: {
+ startTime: undefined,
+ endTime: undefined,
+ atomizerRotationalSpeed: undefined, // 闆惧寲鍣ㄨ浆閫�
+ importSpeed: undefined, // 杩涘彛閫熷害
+ outSpeed: undefined, // 鍑哄彛閫熷害
+ qualifiedWeight: undefined, // 鍚堟牸閲嶉噺
+ wallMaterial: undefined, // 澹佹枡
+ wasteMaterials: undefined, // 灏炬枡
+ userId: undefined,
+ userName: undefined,
+ confirmId: undefined,
+ confirmName: undefined,
+ },
+ remark: undefined, // 澶囨敞
+ }
+})
+
+const userOptions = ref([]);
+const getUserList = () => {
+ userListNoPageByTenantId()
+ .then(res => {
+ if (res.code === 200) {
+ userOptions.value = res.data || [];
+ }
+ })
+ .catch(err => {
+ console.error("鑾峰彇鐢ㄦ埛鍒楄〃澶辫触", err);
+ });
+};
+// 鐢ㄦ埛閫夋嫨鍙樺寲鏃舵洿鏂� userName
+const handleUserChange = (userId: any, reportType: string) => {
+ if (userId) {
+ const selectedUser = userOptions.value.find(user => user.userId === userId);
+
+ switch (reportType) {
+ case 'stirredMillIncludesMixingUserId':
+ formData.otherData.stirredMillIncludesMixing.userName = selectedUser.userName;
+ break;
+ case 'stirredMillIncludesMixingConfirmId':
+ formData.otherData.stirredMillIncludesMixing.confirmName = selectedUser.userName;
+ break;
+ case 'burningMaterialUserId':
+ formData.otherData.burningMaterial.userName = selectedUser.userName;
+ break;
+ case 'burningMaterialConfirmId':
+ formData.otherData.stirredMillIncludesMixing.confirmName = selectedUser.userName;
+ break;
+ case 'stirredMillUserId':
+ formData.otherData.stirredMill.userName = selectedUser.userName;
+ break;
+ case 'stirredMillConfirmId':
+ formData.otherData.stirredMill.confirmName = selectedUser.userName;
+ break;
+ }
+ } else {
+ switch (reportType) {
+ case 'stirredMillIncludesMixingUserId':
+ formData.otherData.stirredMillIncludesMixing.userName = "";
+ break;
+ case 'stirredMillIncludesMixingConfirmId':
+ formData.otherData.stirredMillIncludesMixing.confirmName = "";
+ break;
+ case 'burningMaterialUserId':
+ formData.otherData.burningMaterial.userName = "";
+ break;
+ case 'burningMaterialConfirmId':
+ formData.otherData.stirredMillIncludesMixing.confirmName = "";
+ break;
+ case 'stirredMillUserId':
+ formData.otherData.stirredMill.userName = "";
+ break;
+ case 'stirredMillConfirmId':
+ formData.otherData.stirredMill.confirmName = "";
+ break;
+ }
+ }
+};
+// todo 淇敼浣滀笟鍛橈紝鍦ㄦ墍鏈変綔涓氬憳涓幏鍙栧~鍏ョ殑鍊硷紝濡傛灉娌℃湁鍒欐彁绀轰笉鎻愪氦
+const handleReport = () => {
+ if (!formData.otherData.userId && !formData.otherData.surfaceCopperPasteUserId && !formData.otherData.underlyingCopperPasteUserId) {
+ ElMessage.error('璇烽�夋嫨浣滀笟鍛�')
+ return;
+ }
+ if (!formData.quantity || formData.quantity <= 0) {
+ ElMessage.error('璇疯緭鍏ョ敓浜ф暟閲�')
+ return;
+ }
+ formData.userId = formData.otherData.surfaceCopperPasteUserId || formData.otherData.underlyingCopperPasteUserId;
+
+ const otherData = JSON.stringify(formData.otherData);
+ const submitData = {
+ ...formData,
+ otherData: otherData
+ };
+
+ addProductMain(submitData).then(res => {
+ if (res.code === 200) {
+ ElMessage({
+ message: '鎶ュ伐鎴愬姛',
+ type: 'success',
+ })
+ emits("refreshData")
+ visible.value = false;
+ } else {
+ ElMessage.error('鎶ュ伐澶辫触')
+ }
+ });
+};
+
+const initData = () => {
+ if (!props.isEdit) {
+ formData.otherData = JSON.parse(props.row.otherData || '{}');
+ formData.quantity = props.row.quantity;
+ } else {
+ const row = props.row;
+ formData.planQuantity = row.planQuantity
+ formData.productProcessRouteItemId = row.productProcessRouteItemId
+ formData.workOrderId = row.id
+ formData.reportWork = row.reportWork
+ formData.productMainId = row.productMainId
+ }
+}
+
+const displayValue = (value: any) => {
+ return value === undefined || value === null || value === "" ? "-" : value;
+};
+
+onMounted(() => {
+ getUserList();
+ initData()
+})
+</script>
+
+<template>
+ <el-dialog v-model="visible"
+ :title="isEdit? '閫犵矑鎶ュ伐' : '璇︽儏'"
+ width="90%">
+ <el-form :model="formData">
+ <table class="report-table">
+ <tbody>
+ <tr>
+ <td class="label" colspan="2">鐧芥枡鏂欏彿锛�</td>
+ <td colspan="3">
+ <el-input v-if="props.isEdit" v-model="formData.otherData.whiteMaterialNumber" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.whiteMaterialNumber) }}</span>
+ </td>
+ <td class="label" colspan="2">閰嶆枡鏃ユ湡锛�</td>
+ <td colspan="5">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.ingredientDateTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.ingredientDateTime) }}</span>
+ </td>
+ <td class="label" colspan="2">閲嶉噺锛�</td>
+ <td colspan="2">
+ <el-input v-if="props.isEdit" v-model="formData.otherData.weight" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.weight) }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2" rowspan="5">鎼呮媽纾紙鍚悈鎷岋級锛�</td>
+ <td class="label" colspan="7">鎼呮媽纾�</td>
+ <td class="label" colspan="5" rowspan="2">鎼呮媽妗舵悈鎷�</td>
+ <td class="label" colspan="2" rowspan="3">
+ <span>浣滀笟鍛�:</span>
+ <el-select v-model="formData.otherData.stirredMillIncludesMixing.userId"
+ v-if="props.isEdit"
+ style="width: 100%"
+ placeholder="璇烽�夋嫨浣滀笟鍛�"
+ clearable
+ filterable
+ @change="handleUserChange($event, 'stirredMillIncludesMixingUserId')">
+ <el-option v-for="user in userOptions"
+ :key="user.userId"
+ :label="user.userName"
+ :value="user.userId"/>
+ </el-select>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.userName || formData.otherData.stirredMillIncludesMixing.userId) }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2"></td>
+ <td class="label" colspan="1">1鍙锋《锛�</td>
+ <td class="label" colspan="2">2鍙锋《锛�</td>
+ <td class="label" colspan="2">5鍙锋《锛�</td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2">寮�濮嬫椂闂达細</td>
+ <td colspan="1">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMillIncludesMixing.oneBucketStartTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.oneBucketStartTime) }}</span>
+ </td>
+ <td colspan="2">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMillIncludesMixing.twoBucketStartTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.twoBucketStartTime) }}</span>
+ </td>
+ <td colspan="2">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMillIncludesMixing.fiveBucketStartTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.fiveBucketStartTime) }}</span>
+ </td>
+ <td class="label" colspan="5">
+ <span>寮�濮嬫椂闂达細</span>
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMillIncludesMixing.stirStartTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.stirStartTime) }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2">缁撴潫鏃堕棿锛�</td>
+ <td colspan="1">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMillIncludesMixing.oneBucketEndTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.oneBucketEndTime) }}</span>
+ </td>
+ <td colspan="2">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMillIncludesMixing.twoBucketEndTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.twoBucketEndTime) }}</span>
+ </td>
+ <td colspan="2">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMillIncludesMixing.fiveBucketEndTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.fiveBucketEndTime) }}</span>
+ </td>
+ <td colspan="5">
+ <span>缁撴潫鏃堕棿锛�</span>
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMillIncludesMixing.stirEndTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.stirEndTime) }}</span>
+ </td>
+ <td class="label" colspan="2" rowspan="3">
+ <span>纭浜�:</span>
+ <el-select v-model="formData.otherData.stirredMillIncludesMixing.confirmId"
+ v-if="props.isEdit"
+ style="width: 100%"
+ placeholder="璇烽�夋嫨纭浜�"
+ clearable
+ filterable
+ @change="handleUserChange($event, 'stirredMillIncludesMixingConfirmId')">
+ <el-option v-for="user in userOptions"
+ :key="user.userId"
+ :label="user.userName"
+ :value="user.userId"/>
+ </el-select>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.confirmName || formData.otherData.stirredMillIncludesMixing.confirmId) }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2">绮夋枡閲嶉噺锛�</td>
+ <td colspan="1">
+ <el-input v-if="props.isEdit" v-model="formData.otherData.stirredMillIncludesMixing.powderWeight" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.powderWeight) }}</span>
+ <span>KG</span>
+ </td>
+ <td class="label" colspan="2">姘撮噸閲忥細</td>
+ <td colspan="2">
+ <el-input v-if="props.isEdit" v-model="formData.otherData.stirredMillIncludesMixing.waterWeight" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.waterWeight) }}</span>
+ <span>KG</span>
+ </td>
+ <td class="label" colspan="2">鍒嗘暎鍓傞噸閲忥細</td>
+ <td colspan="3">
+ <el-input v-if="props.isEdit" v-model="formData.otherData.stirredMillIncludesMixing.stirDispersantWeight" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMillIncludesMixing.stirDispersantWeight) }}</span>
+ <span>g</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2">閫犵矑锛�</td>
+ <td class="label" colspan="2">浜у嚭鎬婚噸閲忥細</td>
+ <td colspan="1">
+ <el-input v-if="props.isEdit" v-model="formData.otherData.granulation.output" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.granulation.output) }}</span>
+ <span>KG</span>
+ </td>
+ <td class="label" colspan="2">鍚堟牸鏂欓噸閲忥細</td>
+ <td colspan="2">
+ <el-input v-if="props.isEdit" v-model="formData.otherData.granulation.qualifiedMaterialWeight" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.granulation.qualifiedMaterialWeight) }}</span>
+ <span>KG</span>
+ </td>
+ <td class="label" colspan="2">
+ 澹佹枡锛�
+ <el-input v-if="props.isEdit" v-model="formData.otherData.granulation.wallMaterial" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.granulation.wallMaterial) }}</span>
+ </td>
+ <td colspan="3">
+ 灏炬枡锛�
+ <el-input v-if="props.isEdit" v-model="formData.otherData.granulation.wasteMaterials" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.granulation.wasteMaterials) }}</span>
+ <span>KG</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2" rowspan="3">鐑ф枡锛�</td>
+ <td class="label" colspan="7">
+ <span>寮�濮嬫椂闂达細</span>
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.burningMaterial.startTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.burningMaterial.startTime) }}</span>
+ </td>
+ <td class="label" colspan="5">
+ <span>缁撴潫鏃堕棿锛�</span>
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.burningMaterial.endTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.burningMaterial.endTime) }}</span>
+ </td>
+ <td class="label" colspan="2" rowspan="2">
+ <span>浣滀笟鍛�:</span>
+ <el-select v-model="formData.otherData.burningMaterial.userId"
+ v-if="props.isEdit"
+ style="width: 100%"
+ placeholder="璇烽�夋嫨浣滀笟鍛�"
+ clearable
+ filterable
+ @change="handleUserChange($event, 'burningMaterialUserId')">
+ <el-option v-for="user in userOptions"
+ :key="user.userId"
+ :label="user.userName"
+ :value="user.userId"/>
+ </el-select>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.burningMaterial.userName || formData.otherData.burningMaterial.userId) }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="7">
+ <span>鐐夊彿锛�</span>
+ <el-input v-if="props.isEdit" v-model="formData.otherData.burningMaterial.furnaceNumber" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.burningMaterial.furnaceNumber) }}</span>
+ </td>
+ <td class="label" colspan="5">
+ <span>鏈�楂樻俯搴﹀尯锛�</span>
+ <el-input v-if="props.isEdit" v-model="formData.otherData.burningMaterial.highestTemperatureZone" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.burningMaterial.highestTemperatureZone) }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="7">
+ <span>鐓呯儳閫熷害锛�</span>
+ <el-input v-if="props.isEdit" v-model="formData.otherData.burningMaterial.calcinationRate" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.burningMaterial.calcinationRate) }}</span>
+ <span>min/鏉�</span>
+ </td>
+ <td class="label" colspan="5">
+ <span>鐓呯儳鍚庨噸閲忥細</span>
+ <el-input v-if="props.isEdit" v-model="formData.otherData.burningMaterial.calcinationWeight" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.burningMaterial.calcinationWeight) }}</span>
+ <span>KG</span>
+ </td>
+ <td class="label" colspan="2" rowspan="3">
+ <span>纭浜�:</span>
+ <el-select v-model="formData.otherData.burningMaterial.confirmId"
+ v-if="props.isEdit"
+ style="width: 100%"
+ placeholder="璇烽�夋嫨纭浜�"
+ clearable
+ filterable
+ @change="handleUserChange($event, 'burningMaterialConfirmId')">
+ <el-option v-for="user in userOptions"
+ :key="user.userId"
+ :label="user.userName"
+ :value="user.userId"/>
+ </el-select>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.burningMaterial.confirmName || formData.otherData.burningMaterial.confirmId) }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2">绮夋枡</td>
+ <td class="label" colspan="12">
+ <span>绮夌鏂欐斁鏂欐病瓒呰繃鏂欐枟闄愪綅绾匡細</span>
+ <el-checkbox-group v-if="props.isEdit" v-model="formData.otherData.powder.excess">
+ <el-checkbox label="鏄�" value="鏄�" />
+ <el-checkbox label="鍚�" value="鍚�" />
+ </el-checkbox-group>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.powder.excess) }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="9">
+ <span>鐑у潡鏂欐壒鍙�:</span>
+ <el-input v-if="props.isEdit" v-model="formData.otherData.burntBlockBatchNumber" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.burntBlockBatchNumber) }}</span>
+ </td>
+ <td class="label" colspan="2">鏃ユ湡锛�</td>
+ <td class="label" colspan="3">
+ <el-input v-if="props.isEdit" v-model="formData.otherData.burntBlockBatchNumberDate" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.burntBlockBatchNumberDate) }}</span>
+ </td>
+ <td class="label" colspan="2" rowspan="4">
+ <span>浣滀笟鍛�:</span>
+ <el-select v-model="formData.otherData.stirredMill.userId"
+ v-if="props.isEdit"
+ style="width: 100%"
+ placeholder="璇烽�夋嫨浣滀笟鍛�"
+ clearable
+ filterable
+ @change="handleUserChange($event, 'stirredMillUserId')">
+ <el-option v-for="user in userOptions"
+ :key="user.userId"
+ :label="user.userName"
+ :value="user.userId"/>
+ </el-select>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMill.userName || formData.otherData.stirredMill.userId) }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2" rowspan="4">鎼呮媽纾�</td>
+ <td class="label" colspan="2"></td>
+ <td class="label" colspan="3">3鍙锋《</td>
+ <td class="label" colspan="4">4鍙锋《</td>
+ <td class="label" colspan="3">6鍙锋《</td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2">鎼呮媽绮夋枡閲嶉噺锛�</td>
+ <td class="label" colspan="3">
+ <el-input v-if="props.isEdit" v-model="formData.otherData.stirredMill.threeBucketMixingPowderWeight" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMill.threeBucketMixingPowderWeight) }}</span>
+ </td>
+ <td class="label" colspan="4">
+ <el-input v-if="props.isEdit" v-model="formData.otherData.stirredMill.fourBucketMixingPowderWeight" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMill.fourBucketMixingPowderWeight) }}</span>
+ </td>
+ <td class="label" colspan="3">
+ <el-input v-if="props.isEdit" v-model="formData.otherData.stirredMill.sixBucketMixingPowderWeight" placeholder="璇疯緭鍏�"/>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMill.sixBucketMixingPowderWeight) }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2">寮�濮嬫椂闂达細</td>
+ <td class="label" colspan="3">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMill.threeBucketStartTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMill.threeBucketStartTime) }}</span>
+ </td>
+ <td class="label" colspan="4">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMill.fourBucketStartTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMill.fourBucketStartTime) }}</span>
+ </td>
+ <td class="label" colspan="3">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMill.sixBucketStartTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMill.sixBucketStartTime) }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="label" colspan="2">缁撴潫鏃堕棿锛�</td>
+ <td class="label" colspan="3">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMill.threeBucketEndTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMill.threeBucketEndTime) }}</span>
+ </td>
+ <td class="label" colspan="4">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMill.fourBucketEndTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMill.fourBucketEndTime) }}</span>
+ </td>
+ <td class="label" colspan="3">
+ <el-date-picker
+ v-if="props.isEdit"
+ v-model="formData.otherData.stirredMill.sixBucketEndTime"
+ type="datetime"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ />
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMill.sixBucketEndTime) }}</span>
+ </td>
+ <td class="label" colspan="2" rowspan="3">
+ <span>纭浜�:</span>
+ <el-select v-model="formData.otherData.stirredMill.confirmId"
+ v-if="props.isEdit"
+ style="width: 100%"
+ placeholder="璇烽�夋嫨纭浜�"
+ clearable
+ filterable
+ @change="handleUserChange($event, 'stirredMillConfirmId')">
+ <el-option v-for="user in userOptions"
+ :key="user.userId"
+ :label="user.userName"
+ :value="user.userId"/>
+ </el-select>
+ <span v-else class="view-value">{{ displayValue(formData.otherData.stirredMill.confirmName || formData.otherData.stirredMill.confirmId) }}</span>
+ </td>
+ </tr>
+ <!-- todo鎼呮媽琛屽紑濮嬶紝纭浜鸿鐣欑┖锛屽凡鍦ㄤ笂闈㈣〃鏍奸鐣� -->
+ </tbody>
+ </table>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button v-if="props.isEdit" type="primary"
+ @click="handleReport">纭畾</el-button>
+ <el-button @click="visible = false">{{ props.isEdit ? "鍙栨秷" : "鍏抽棴" }}</el-button>
+ </span>
+ </template>
+ </el-dialog>
+</template>
+
+<style scoped>
+.report-table {
+ width: 100%;
+ border-collapse: collapse;
+ table-layout: fixed;
+ font-size: 13px;
+}
+
+.report-table td {
+ border: 1px solid #dcdfe6;
+ padding: 6px;
+ vertical-align: middle;
+}
+
+.report-table .label {
+ width: 90px;
+ background: #f5f7fa;
+ text-align: center;
+ font-weight: 500;
+}
+
+.report-table .tip {
+ text-align: center;
+ font-weight: 500;
+ line-height: 1.4;
+ background: #fafafa;
+}
+
+.view-value {
+ display: inline-block;
+ min-height: 32px;
+ line-height: 32px;
+}
+</style>
diff --git a/src/views/productionManagement/workOrder/components/ProductionRecordForm.vue b/src/views/productionManagement/workOrder/components/ProductionRecordForm.vue
index 9b2938e..fb309a1 100644
--- a/src/views/productionManagement/workOrder/components/ProductionRecordForm.vue
+++ b/src/views/productionManagement/workOrder/components/ProductionRecordForm.vue
@@ -12,6 +12,10 @@
default() {
return [];
}
+ },
+ labelWidth: {
+ type: Number,
+ default: 120
}
});
@@ -79,7 +83,7 @@
</script>
<template>
- <el-form ref="formRef" :model="formData" :rules="rules" label-width="120px">
+ <el-form ref="formRef" :model="formData" :rules="rules" :label-width="`${labelWidth}px`">
<el-form-item
v-for="(item, index) in formData.list"
:key="item.id"
diff --git a/src/views/productionManagement/workOrder/index.vue b/src/views/productionManagement/workOrder/index.vue
index 9a5aadd..901a7dc 100644
--- a/src/views/productionManagement/workOrder/index.vue
+++ b/src/views/productionManagement/workOrder/index.vue
@@ -406,7 +406,9 @@
productProcessRouteItemId: "",
userId: "",
productMainId: null,
- otherData: {}
+ otherData: {
+ rows: [],
+ }
});
const productionRecordFormRef = ref();
@@ -695,7 +697,7 @@
const handleReport = async () => {
const data = await productionRecordFormRef.value.submitData()
- reportForm.otherData = JSON.stringify(data || {});
+ reportForm.otherData.rows = JSON.stringify(data || {});
reportFormRef.value?.validate((valid) => {
if (!valid) {
return false;
--
Gitblit v1.9.3