style:生产报表-生成日报弹框优化

main
黄伟杰 5 days ago
parent a25021ba87
commit dca44f726f

@ -5763,6 +5763,7 @@ export default {
createTime: 'Generated at',
preview: 'Preview',
download: 'Download',
selectReportDateForReport: 'Select a report date',
selectDeviceForReport: 'Select at least one device',
selectWorkTeamForReport: 'Select a work team',
generateSuccess: 'Daily report generated',

@ -6034,6 +6034,7 @@ export default {
createTime: '生成时间',
preview: '预览',
download: '下载',
selectReportDateForReport: '请选择日报日期',
selectDeviceForReport: '请至少勾选一台设备',
selectWorkTeamForReport: '请选择班次',
generateSuccess: '日报生成成功',

@ -129,19 +129,25 @@
</el-row>
<Dialog :title="t('ProductionReport.Index.generateDailyReport')" v-model="generateDialogVisible">
<el-form label-width="120px" v-loading="generateLoading">
<el-form-item :label="t('ProductionReport.Index.reportDate')">
<el-form
ref="generateFormRef"
:model="generateForm"
:rules="generateFormRules"
label-width="120px"
v-loading="generateLoading"
>
<el-form-item :label="t('ProductionReport.Index.reportDate')" prop="reportDate">
<el-date-picker
v-model="reportDate"
v-model="generateForm.reportDate"
type="date"
value-format="YYYY-MM-DD"
:clearable="false"
class="!w-full"
/>
</el-form-item>
<el-form-item :label="t('ProductionReport.Index.workTeam')">
<el-form-item :label="t('ProductionReport.Index.workTeam')" prop="workTeamId">
<el-select
v-model="selectedWorkTeamId"
v-model="generateForm.workTeamId"
class="!w-full"
:loading="workTeamLoading"
:placeholder="t('ProductionReport.Index.workTeamPlaceholder')"
@ -154,9 +160,9 @@
/>
</el-select>
</el-form-item>
<el-form-item :label="t('ProductionReport.Index.devices')">
<el-form-item :label="t('ProductionReport.Index.devices')" prop="deviceIds">
<el-tree-select
v-model="selectedDeviceIds"
v-model="generateForm.deviceIds"
v-loading="treeLoading"
:data="treeData"
:props="treeProps"
@ -209,13 +215,22 @@ const treeData = ref<ProductionTreeNode[]>([])
const treeProps = { value: 'id', children: 'children', label: 'label', disabled: 'disabled' }
const defaultExpandedKeys = ref<string[]>([])
const selectedDevice = ref<ProductionTreeNode>()
const selectedDeviceIds = ref<string[]>([])
const generateDialogVisible = ref(false)
const generateFormRef = ref()
const generateForm = reactive({
reportDate: '',
workTeamId: undefined as string | undefined,
deviceIds: [] as string[]
})
const generateFormRules = reactive({
reportDate: [{ required: true, message: t('ProductionReport.Index.selectReportDateForReport'), trigger: 'change' }],
workTeamId: [{ required: true, message: t('ProductionReport.Index.selectWorkTeamForReport'), trigger: 'change' }],
deviceIds: [{ required: true, type: 'array', min: 1, message: t('ProductionReport.Index.selectDeviceForReport'), trigger: 'change' }]
})
const reportDate = ref(dayjs().format('YYYY-MM-DD'))
const workTeamLoading = ref(false)
const workTeamList = ref<WorkTeamVO[]>([])
const selectedWorkTeamId = ref<string>()
const generateLoading = ref(false)
const reportListLoading = ref(false)
const reportFileList = ref<ProductionDailyReportFileVO[]>([])
@ -271,6 +286,11 @@ const loadTree = async () => {
}
const handleOpenGenerateDialog = async () => {
generateForm.reportDate = dayjs().format('YYYY-MM-DD')
generateForm.workTeamId = undefined
generateForm.deviceIds = []
selectedDevice.value = undefined
generateFormRef.value?.clearValidate?.()
generateDialogVisible.value = true
if (!treeData.value.length) await loadTree()
}
@ -291,9 +311,6 @@ const loadWorkTeams = async () => {
try {
const data = await WorkTeamApi.getWorkTeamList()
workTeamList.value = Array.isArray(data) ? data : data.list || []
if (!selectedWorkTeamId.value && workTeamList.value.length) {
selectedWorkTeamId.value = String(workTeamList.value[0].id)
}
} catch {
message.error(t('ProductionReport.Index.loadWorkTeamsFailed'))
} finally {
@ -332,22 +349,16 @@ const handleCalendarDayClick = (day: string) => {
}
const handleGenerateReport = async () => {
const deviceIds = selectedDeviceIds.value.filter((id): id is string => Boolean(id))
if (!deviceIds.length) {
message.warning(t('ProductionReport.Index.selectDeviceForReport'))
return
}
if (!selectedWorkTeamId.value) {
message.warning(t('ProductionReport.Index.selectWorkTeamForReport'))
return
}
const valid = await generateFormRef.value?.validate?.().catch(() => false)
if (!valid) return
const deviceIds = generateForm.deviceIds.filter((id): id is string => Boolean(id))
generateLoading.value = true
try {
await DeviceApi.generateProductionDailyReport({
deviceIds,
reportDate: reportDate.value,
workTeamId: selectedWorkTeamId.value
reportDate: generateForm.reportDate,
workTeamId: generateForm.workTeamId!
})
message.success(t('ProductionReport.Index.generateSuccess'))
generateDialogVisible.value = false

Loading…
Cancel
Save