zouyu
2026-04-20 df3902e7eae5dd38a2d47aa63e5f27131f701db9
src/views/performance/attendance/index.vue
@@ -30,12 +30,12 @@
        </div>
      </div>
      <div class="search_thing">
        <el-button size="mini" type="primary" @click="refreshTable()"
          >查 询</el-button
        <el-button icon="el-icon-search" size="mini" type="primary" @click="refreshTable()">查 询</el-button
        >
        <el-button size="mini" @click="resetQuery">重置</el-button>
        <el-button size="mini" type="primary" @click="openAddAttendanceDialog()">手动新增</el-button>
        <el-button size="mini" type="success" @click="openSyncAttendanceDialog()">同步考勤记录</el-button>
        <el-button icon="el-icon-refresh-left" size="mini" @click="resetQuery">重置</el-button>
        <el-button icon="el-icon-plus" size="mini" type="primary" @click="openAddAttendanceDialog()">手动新增</el-button>
        <el-button icon="el-icon-refresh" size="mini" type="success" @click="openSyncAttendanceDialog()">同步考勤记录</el-button>
        <el-button plain icon="el-icon-download" size="mini" type="primary" @click="openAttendanceRecordDialog()">导出</el-button>
      </div>
    </div>
    <div class="container">
@@ -211,6 +211,45 @@
    <el-button type="primary" @click="confirmSyncAttendance">确 定</el-button>
  </span>
    </el-dialog>
    <el-dialog
      title="导出考勤记录"
      :visible.sync="attendanceRecordVisible"
      width="40%">
      <el-row>
        <el-col :span="4">
          <label>统计维度:</label>
        </el-col>
        <el-col :span="20">
            <el-radio-group v-model="reportType" size="mini" disabled>
              <el-radio label="YEAR">年度</el-radio>
              <el-radio label="MONTH">月度</el-radio>
            </el-radio-group>
        </el-col>
      </el-row>
      <el-row style="margin-top:20px">
        <el-col :span="4">
          <label>统计日期:</label>
        </el-col>
        <el-col :span="20">
          <el-date-picker
            size="small"
            v-model="reportDateRange"
            style="width:100%"
            @change="changeReportDateRange"
            type="datetimerange"
            value-format="yyyy-MM-dd HH:mm:ss"
            :default-time="['00:00:00','23:59:59']"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期">
          </el-date-picker>
        </el-col>
      </el-row>
      <span slot="footer" class="dialog-footer">
        <el-button @click="attendanceRecordVisible = false">取 消</el-button>
        <el-button :loading="exportLoading" type="primary" @click="exportStaffAttendanceRecords()">确 定</el-button>
      </span>
    </el-dialog>
  </div>
</template>
@@ -222,10 +261,12 @@
  checkDutyDate,
  saveOrUpdateStaffAttendanceTrackingRecord,
  removeStaffAttendanceTrackingRecord,
  syncAttendanceRecord
  syncAttendanceRecord,
  exportStaffAttendanceRecords
} from '@/api/performance/attendance'
import {getDicts} from "@/api/system/dict/data";
import {getTimeRange} from "@/utils/date";
import {getTimeRange,isOverOneMonth} from "@/utils/date";
import {transformExcel} from '@/utils/file'
export default {
  name: "Attendance",
  components: {
@@ -233,8 +274,12 @@
  },
  data() {
    return {
      reportDateRange:[],
      reportType:"MONTH",
      attendanceRecordVisible:false,
      syncDateRange:[],
      syncAttendanceVisible: false,
      exportLoading: false,
      attendanceForm:{
        workDataId: null,
        offWorkDataId: null,
@@ -313,6 +358,41 @@
    window.removeEventListener("resize",this.resizeHandler)
  },
  methods: {
    changeReportDateRange(val){
      //判断时间区间是否超过一个月
      if(val && val.length===2){
        const flag = isOverOneMonth(val[0],val[1]);
        this.reportType = flag?'YEAR':'MONTH'
      }
    },
    openAttendanceRecordDialog (){
      this.reportDateRange = getTimeRange()
      this.$nextTick(()=>{
        this.attendanceRecordVisible = true
      })
    },
    //导出考勤记录
    exportStaffAttendanceRecords(){
      this.exportLoading = true
      let params = {
        attendanceReportType:this.reportType,
      }
      if (this.reportDateRange && this.reportDateRange.length === 2) {
        params.startDate = this.reportDateRange[0];
        params.endDate = this.reportDateRange[1];
      } else {
        params.startDate = "";
        params.endDate = "";
      }
      exportStaffAttendanceRecords({...params}).then(res=>{
        transformExcel(res, "中天耐丝质量考勤汇总.xlsx")
        this.$message.success("导出成功")
      }).catch(error=>{
        console.error(error)
      }).finally(()=>{
        this.exportLoading = false
      })
    },
    getShiftByDic(e) {
      let obj = this.dailyTypeList.find((m) => m.dictValue == e);
      if (obj) {