|
|
|
|
@ -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
|
|
|
|
|
|