You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

196 lines
5.1 KiB
Vue

<template>
<div class="mes-report-container">
<el-card class="report-card">
<template #header>
<div class="card-header">
<span>报工</span>
</div>
</template>
<el-form
ref="reportForm"
:model="formData"
:rules="rules"
label-width="120px"
label-position="left"
>
<el-form-item label="工单号" prop="planCode">
WO20250917001
</el-form-item>
<el-form-item label="产品名称" prop="materialName">
淮阴零排放破碎机控制柜
</el-form-item>
<el-form-item label="产品规格" prop="materialSpec">
淮阴零排放项目尺寸H500*W400*D250mm材质304不锈钢本色
</el-form-item>
<el-form-item label="计划数量" prop="planAmount">
100
</el-form-item>
<el-form-item label="已完成数量" prop="completeAmount1">
75
</el-form-item>
<el-form-item label="单位" prop="unit">
</el-form-item>
<el-form-item label="工序名称" prop="processName">
装配
</el-form-item>
<el-form-item label="计划开始时间" prop="planBeginTime">
2025-09-17 09:00:00
</el-form-item>
<el-form-item label="计划结束时间" prop="planEndTime">
2025-12-17 18:00:00
</el-form-item>
<el-divider>报工信息</el-divider>
<el-form-item label="报工数量" prop="completeAmount">
<el-input-number
v-model="formData.completeAmount"
:min="1"
:max="100000"
controls-position="right"
/>
</el-form-item>
<el-form-item label="工时(分钟)" prop="productionTime">
<el-input-number
v-model="formData.productionTime"
:min="1"
:max="1000"
controls-position="right"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm"></el-button>
<el-button @click="resetForm"></el-button>
</el-form-item>
</el-form>
</el-card>
<!-- 报工结果展示 -->
<el-card v-if="resultData" class="result-card">
<template #header>
<div class="card-header">
<span>报工结果</span>
</div>
</template>
<pre>{{ JSON.stringify(resultData, null, 2) }}</pre>
</el-card>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { ElMessage } from 'element-plus';
import { filterEmptyValues, copyNonEmptyValues } from '@/api/objectUtil';
import { useSharedDataStore } from '@/api/monitorData'
const sharedStore = useSharedDataStore()
interface FormData {
completeAmount: number;
productionTime: number;
remark: string;
}
const props = defineProps<FormData>()
const formData = reactive<FormData>({
completeAmount: undefined,
productionTime:undefined,
remark: '',
});
// 初始化赋值
// Object.keys(formData).forEach(key => {
// if (props[key] !== undefined) {
// formData[key] = props[key]
// }
// })
// 监听数据变化
watch(
() => sharedStore.dynamicValue,
(newValue, oldValue) => {
if (newValue!=null && newValue.message!=null && newValue !== oldValue) {
ElMessage.info('收到新数据更新')
// 这里可以执行数据更新后的业务逻辑
// handleDataUpdate(newValue)
copyNonEmptyValues(newValue.message,formData);
//如果字段有onchange方法则需要判断执行
}
},
{ deep: true } // 深度监听对象变化
)
// 响应props变化
// watch(
// () => ({ ...props }),
// (newProps) => {
// Object.keys(formData).forEach(key => {
// if (newProps[key] !== undefined) {
// formData[key] = newProps[key]
// }
// })
// },
// { immediate: true, deep: true }
// )
const processOptions = [
{ label: '工序A', value: 'processA' },
{ label: '工序B', value: 'processB' },
{ label: '工序C', value: 'processC' },
];
const rules = {
completeAmount: [{ required: true, message: '请输入报工数量', trigger: 'blur' }],
productionTime: [{ required: true, message: '请输入工时', trigger: 'blur' }],
};
const resultData = ref(null);
const reportForm = ref(null);
const submitForm = () => {
reportForm.value.validate((valid) => {
if (valid) {
// 模拟提交
resultData.value = {
status: 'success',
message: '报工成功',
data: formData.value,
};
ElMessage.success('报工提交成功!');
} else {
ElMessage.error('请填写完整表单!');
}
});
};
const resetForm = () => {
reportForm.value.resetFields();
resultData.value = null;
};
</script>
<style scoped>
.mes-report-container {
padding: 20px;
}
.report-card,
.result-card {
margin-bottom: 20px;
}
.card-header {
font-size: 18px;
font-weight: bold;
}
</style>