fix(attendance,report): 修复并优化代码细节

1.  新增考勤打卡状态"未打卡"的中文翻译映射
2.  格式化页面组件代码行内样式,统一代码风格
3.  简化报表导出逻辑,统一使用actionIds参数进行导出
This commit is contained in:
2026-05-16 10:48:55 +08:00
parent 98a3fa8c78
commit dc9c4547fd
2 changed files with 26 additions and 30 deletions

View File

@@ -679,6 +679,7 @@ export default {
case 'absent_half': return '半天旷工'
case 'absent_full': return '全天旷工'
case 'abnormal': return '迟到/早退'
case 'missed': return '未打卡'
default: return '无'
}
},

View File

@@ -5,27 +5,21 @@
<!-- 根据 reportType 显示不同的日期选择器 -->
<template v-if="['out', 'loss'].includes(reportType)">
<el-form-item label="时间范围" prop="timeRange">
<time-range-picker
v-model="queryParams"
start-key="startTime"
end-key="endTime"
:default-start-time="defaultStartTime"
:default-end-time="defaultEndTime"
@quick-select="handleQuery"
/>
<time-range-picker v-model="queryParams" start-key="startTime" end-key="endTime"
:default-start-time="defaultStartTime" :default-end-time="defaultEndTime" @quick-select="handleQuery" />
</el-form-item>
</template>
<el-form-item v-else-if="reportType === 'day'" label="日期" prop="date">
<el-date-picker style="width: 200px;" v-model="dayDate" type="date"
value-format="yyyy-MM-dd" placeholder="选择日期" @change="handleDateChange"></el-date-picker>
<el-date-picker style="width: 200px;" v-model="dayDate" type="date" value-format="yyyy-MM-dd"
placeholder="选择日期" @change="handleDateChange"></el-date-picker>
</el-form-item>
<el-form-item v-else-if="reportType === 'month'" label="日期" prop="date">
<el-date-picker style="width: 200px;" v-model="monthDate" type="month"
value-format="yyyy-MM" placeholder="选择月份" @change="handleDateChange"></el-date-picker>
<el-date-picker style="width: 200px;" v-model="monthDate" type="month" value-format="yyyy-MM"
placeholder="选择月份" @change="handleDateChange"></el-date-picker>
</el-form-item>
<el-form-item v-else-if="reportType === 'year'" label="日期" prop="date">
<el-date-picker style="width: 200px;" v-model="yearDate" type="year"
value-format="yyyy" placeholder="选择年份" @change="handleDateChange"></el-date-picker>
<el-date-picker style="width: 200px;" v-model="yearDate" type="year" value-format="yyyy" placeholder="选择年份"
@change="handleDateChange"></el-date-picker>
</el-form-item>
<template v-else-if="reportType === 'team'">
<el-form-item label="开始日期">
@@ -74,22 +68,27 @@
placeholder="请选择材质" clearable @keyup.enter.native="handleQuery" multiple />
</el-form-item>
<el-form-item label="厂家" prop="itemManufacturer">
<dict-select style="width: 200px;" v-model="queryParams.itemManufacturer" dict-type="coil_manufacturer"
<dict-select style="width: 200px;" v-model="queryParams.itemManufacturer" dict-type="coil_manufacturer"
placeholder="请选择厂家" clearable @keyup.enter.native="handleQuery" multiple />
</el-form-item>
<!-- 逻辑库位仅在 team, day, month, year, all 类型时显示 -->
<el-form-item v-if="['team', 'day', 'month', 'year', 'all'].includes(reportType)" label="逻辑库位" prop="warehouseIds">
<el-form-item v-if="['team', 'day', 'month', 'year', 'all'].includes(reportType)" label="逻辑库位"
prop="warehouseIds">
<el-select v-model="warehouseIds" collapse-tags multiple placeholder="请选择逻辑库位" style="width: 200px;">
<el-option v-for="item in warehouseOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">查询</el-button>
<el-button v-if="['out', 'team', 'day', 'month', 'year', 'all'].includes(reportType)" type="primary" @click="exportData">导出产出钢卷</el-button>
<el-button v-if="['loss', 'team', 'day', 'month', 'year', 'all'].includes(reportType)" type="primary" @click="exportLossData">导出消耗钢卷</el-button>
<el-button v-if="['out', 'team', 'day', 'month', 'year', 'all'].includes(reportType)" type="primary"
@click="exportData">导出产出钢卷</el-button>
<el-button v-if="['loss', 'team', 'day', 'month', 'year', 'all'].includes(reportType)" type="primary"
@click="exportLossData">导出消耗钢卷</el-button>
<el-button type="primary" @click="settingVisible = true">列设置</el-button>
<el-button v-if="['out', 'team', 'day', 'month', 'year', 'all'].includes(reportType)" type="primary" @click="saveOutputReport">保存产出报表</el-button>
<el-button v-if="['loss', 'team', 'day', 'month', 'year', 'all'].includes(reportType)" type="primary" @click="saveLossReport">保存消耗报表</el-button>
<el-button v-if="['out', 'team', 'day', 'month', 'year', 'all'].includes(reportType)" type="primary"
@click="saveOutputReport">保存产出报表</el-button>
<el-button v-if="['loss', 'team', 'day', 'month', 'year', 'all'].includes(reportType)" type="primary"
@click="saveLossReport">保存消耗报表</el-button>
</el-form-item>
</el-form>
</el-row>
@@ -465,12 +464,13 @@ export default {
},
async getList() {
this.loading = true;
// 所有报表类型都使用原始的 listPendingAction 方式获取数据
const res = await listPendingAction({ ...this.queryParams, actionType: this.actionType, actionStatus: 2 });
// 获取两层数据
const lossIds = res.rows.filter(item => item.coilId).map(item => item.coilId);
const lossActionIds = res.rows.filter(item => item.actionId).map(item => item.actionId);
this.actionIds = lossActionIds.join(',')
// 使用new Set去重
const outIds = [...new Set(res.rows.filter(item => item.processedCoilIds).map(item => item.processedCoilIds))];
@@ -558,15 +558,10 @@ export default {
if (['day', 'month', 'year'].includes(this.reportType)) {
fileName = `materialCoil_${this.queryParams.date || ''}_${new Date().getTime()}.xlsx`;
}
if (this.reportType === 'loss' || this.reportType === 'team') {
this.download('wms/materialCoil/export', {
actionIds: this.actionIds
}, fileName)
} else {
this.download('wms/materialCoil/export', {
coilIds: this.lossList.map(item => item.coilId).join(',')
}, fileName)
}
this.download('wms/materialCoil/export', {
actionIds: this.actionIds
}, fileName)
},
// 保存产出报表
saveOutputReport() {