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

main
黄伟杰 6 days ago
parent a25021ba87
commit dca44f726f

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

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

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

Loading…
Cancel
Save