|
|
|
@ -1,22 +1,23 @@
|
|
|
|
<template>
|
|
|
|
<template>
|
|
|
|
<div class="app-container">
|
|
|
|
<div class="app-container">
|
|
|
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
|
|
|
|
|
|
|
<el-form-item label="租户id" prop="tenantId">
|
|
|
|
<div class="company" v-if="!$store.state.user.tenantId">
|
|
|
|
<el-input
|
|
|
|
|
|
|
|
v-model="queryParams.tenantId"
|
|
|
|
|
|
|
|
placeholder="请输入租户id"
|
|
|
|
|
|
|
|
clearable
|
|
|
|
|
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="员工id" prop="employeeId">
|
|
|
|
|
|
|
|
<el-input
|
|
|
|
<el-input
|
|
|
|
v-model="queryParams.employeeId"
|
|
|
|
style="width: 200px"
|
|
|
|
placeholder="请输入员工id"
|
|
|
|
placeholder="公司名称"
|
|
|
|
clearable
|
|
|
|
size="small"
|
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
|
prefix-icon="el-icon-search"
|
|
|
|
/>
|
|
|
|
v-model="gsInfo.tenantName"
|
|
|
|
</el-form-item>
|
|
|
|
@keyup.enter.native="getGsInfoList">
|
|
|
|
|
|
|
|
</el-input>
|
|
|
|
|
|
|
|
<div class="cp-content" style="width: 200px">
|
|
|
|
|
|
|
|
<div :class="gsInfo.active_id===item.id?'cp-item active':'cp-item'" @click="changCompany(item.id)" v-for="item in gsInfo.list">{{ item.name }}</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div :class="$store.state.user.tenantId?'content-all':'content'">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
|
|
|
|
<el-form-item label="员工姓名" prop="empName">
|
|
|
|
<el-form-item label="员工姓名" prop="empName">
|
|
|
|
<el-input
|
|
|
|
<el-input
|
|
|
|
v-model="queryParams.empName"
|
|
|
|
v-model="queryParams.empName"
|
|
|
|
@ -33,46 +34,6 @@
|
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="部门id" prop="deptId">
|
|
|
|
|
|
|
|
<el-input
|
|
|
|
|
|
|
|
v-model="queryParams.deptId"
|
|
|
|
|
|
|
|
placeholder="请输入部门id"
|
|
|
|
|
|
|
|
clearable
|
|
|
|
|
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="上午开始时间" prop="amStartTime">
|
|
|
|
|
|
|
|
<el-date-picker clearable
|
|
|
|
|
|
|
|
v-model="queryParams.amStartTime"
|
|
|
|
|
|
|
|
type="date"
|
|
|
|
|
|
|
|
value-format="yyyy-MM-dd"
|
|
|
|
|
|
|
|
placeholder="请选择上午开始时间">
|
|
|
|
|
|
|
|
</el-date-picker>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="上午结束时间" prop="amEndTime">
|
|
|
|
|
|
|
|
<el-date-picker clearable
|
|
|
|
|
|
|
|
v-model="queryParams.amEndTime"
|
|
|
|
|
|
|
|
type="date"
|
|
|
|
|
|
|
|
value-format="yyyy-MM-dd"
|
|
|
|
|
|
|
|
placeholder="请选择上午结束时间">
|
|
|
|
|
|
|
|
</el-date-picker>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="下午开始时间" prop="pmStartTime">
|
|
|
|
|
|
|
|
<el-date-picker clearable
|
|
|
|
|
|
|
|
v-model="queryParams.pmStartTime"
|
|
|
|
|
|
|
|
type="date"
|
|
|
|
|
|
|
|
value-format="yyyy-MM-dd"
|
|
|
|
|
|
|
|
placeholder="请选择下午开始时间">
|
|
|
|
|
|
|
|
</el-date-picker>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="下午结束时间" prop="pmEndTime">
|
|
|
|
|
|
|
|
<el-date-picker clearable
|
|
|
|
|
|
|
|
v-model="queryParams.pmEndTime"
|
|
|
|
|
|
|
|
type="date"
|
|
|
|
|
|
|
|
value-format="yyyy-MM-dd"
|
|
|
|
|
|
|
|
placeholder="请选择下午结束时间">
|
|
|
|
|
|
|
|
</el-date-picker>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="考勤日期" prop="kaoqinDate">
|
|
|
|
<el-form-item label="考勤日期" prop="kaoqinDate">
|
|
|
|
<el-date-picker clearable
|
|
|
|
<el-date-picker clearable
|
|
|
|
v-model="queryParams.kaoqinDate"
|
|
|
|
v-model="queryParams.kaoqinDate"
|
|
|
|
@ -81,21 +42,14 @@
|
|
|
|
placeholder="请选择考勤日期">
|
|
|
|
placeholder="请选择考勤日期">
|
|
|
|
</el-date-picker>
|
|
|
|
</el-date-picker>
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="考勤年份月份 (yyyy-MM)" prop="kaoqinYearMonth">
|
|
|
|
<el-form-item label="考勤年份月份" prop="kaoqinYearMonth">
|
|
|
|
<el-input
|
|
|
|
<el-date-picker
|
|
|
|
v-model="queryParams.kaoqinYearMonth"
|
|
|
|
v-model="queryParams.kaoqinYearMonth"
|
|
|
|
placeholder="请输入考勤年份月份 (yyyy-MM)"
|
|
|
|
type="month"
|
|
|
|
clearable
|
|
|
|
size="mini"
|
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
|
placeholder="请输入考勤年份月份"
|
|
|
|
/>
|
|
|
|
value-format="yyyy-MM">
|
|
|
|
</el-form-item>
|
|
|
|
</el-date-picker>
|
|
|
|
<el-form-item label="考勤机 (0:综合办 1:网机 2:围栏 3:手动添加)" prop="kaoqinjiNum">
|
|
|
|
|
|
|
|
<el-input
|
|
|
|
|
|
|
|
v-model="queryParams.kaoqinjiNum"
|
|
|
|
|
|
|
|
placeholder="请输入考勤机 (0:综合办 1:网机 2:围栏 3:手动添加)"
|
|
|
|
|
|
|
|
clearable
|
|
|
|
|
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item>
|
|
|
|
<el-form-item>
|
|
|
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
|
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
|
|
@ -136,6 +90,16 @@
|
|
|
|
v-hasPermi="['pay:attendance:remove']"
|
|
|
|
v-hasPermi="['pay:attendance:remove']"
|
|
|
|
>删除</el-button>
|
|
|
|
>删除</el-button>
|
|
|
|
</el-col>
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
<!-- <el-col :span="1.5">
|
|
|
|
|
|
|
|
<el-button
|
|
|
|
|
|
|
|
type="info"
|
|
|
|
|
|
|
|
plain
|
|
|
|
|
|
|
|
icon="el-icon-upload2"
|
|
|
|
|
|
|
|
size="mini"
|
|
|
|
|
|
|
|
@click="handleImport"
|
|
|
|
|
|
|
|
v-hasPermi="['secure:attendance:import']"
|
|
|
|
|
|
|
|
>导入</el-button>
|
|
|
|
|
|
|
|
</el-col>-->
|
|
|
|
<el-col :span="1.5">
|
|
|
|
<el-col :span="1.5">
|
|
|
|
<el-button
|
|
|
|
<el-button
|
|
|
|
type="warning"
|
|
|
|
type="warning"
|
|
|
|
@ -151,30 +115,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
<el-table v-loading="loading" :data="attendanceList" @selection-change="handleSelectionChange">
|
|
|
|
<el-table v-loading="loading" :data="attendanceList" @selection-change="handleSelectionChange">
|
|
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
|
|
<el-table-column label="主键" align="center" prop="id" v-if="true"/>
|
|
|
|
|
|
|
|
<el-table-column label="租户id" align="center" prop="tenantId" />
|
|
|
|
|
|
|
|
<el-table-column label="员工id" align="center" prop="employeeId" />
|
|
|
|
|
|
|
|
<el-table-column label="员工姓名" align="center" prop="empName" />
|
|
|
|
<el-table-column label="员工姓名" align="center" prop="empName" />
|
|
|
|
<el-table-column label="部门名称" align="center" prop="deptName" />
|
|
|
|
<el-table-column label="部门名称" align="center" prop="deptName" />
|
|
|
|
<el-table-column label="部门id" align="center" prop="deptId" />
|
|
|
|
|
|
|
|
<el-table-column label="上午开始时间" align="center" prop="amStartTime" width="180">
|
|
|
|
<el-table-column label="上午开始时间" align="center" prop="amStartTime" width="180">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<span>{{ parseTime(scope.row.amStartTime, '{y}-{m}-{d}') }}</span>
|
|
|
|
<span>{{ parseTime(scope.row.amStartTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="上午结束时间" align="center" prop="amEndTime" width="180">
|
|
|
|
<el-table-column label="上午结束时间" align="center" prop="amEndTime" width="180">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<span>{{ parseTime(scope.row.amEndTime, '{y}-{m}-{d}') }}</span>
|
|
|
|
<span>{{ parseTime(scope.row.amEndTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="下午开始时间" align="center" prop="pmStartTime" width="180">
|
|
|
|
<el-table-column label="下午开始时间" align="center" prop="pmStartTime" width="180">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<span>{{ parseTime(scope.row.pmStartTime, '{y}-{m}-{d}') }}</span>
|
|
|
|
<span>{{ parseTime(scope.row.pmStartTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="下午结束时间" align="center" prop="pmEndTime" width="180">
|
|
|
|
<el-table-column label="下午结束时间" align="center" prop="pmEndTime" width="180">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<span>{{ parseTime(scope.row.pmEndTime, '{y}-{m}-{d}') }}</span>
|
|
|
|
<span>{{ parseTime(scope.row.pmEndTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="考勤日期" align="center" prop="kaoqinDate" width="180">
|
|
|
|
<el-table-column label="考勤日期" align="center" prop="kaoqinDate" width="180">
|
|
|
|
@ -182,9 +142,8 @@
|
|
|
|
<span>{{ parseTime(scope.row.kaoqinDate, '{y}-{m}-{d}') }}</span>
|
|
|
|
<span>{{ parseTime(scope.row.kaoqinDate, '{y}-{m}-{d}') }}</span>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="考勤年份月份 (yyyy-MM)" align="center" prop="kaoqinYearMonth" />
|
|
|
|
<el-table-column label="考勤年份月份" align="center" prop="kaoqinYearMonth" />
|
|
|
|
<el-table-column label="考勤机 (0:综合办 1:网机 2:围栏 3:手动添加)" align="center" prop="kaoqinjiNum" />
|
|
|
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
|
|
|
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
|
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<el-button
|
|
|
|
<el-button
|
|
|
|
size="mini"
|
|
|
|
size="mini"
|
|
|
|
@ -212,86 +171,158 @@
|
|
|
|
@pagination="getList"
|
|
|
|
@pagination="getList"
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 添加或修改考勤对话框 -->
|
|
|
|
<!-- 添加或修改考勤对话框 -->
|
|
|
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
|
|
|
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body :close-on-click-modal="false">
|
|
|
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
|
|
|
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
|
|
|
|
<el-form-item label="租户id" prop="tenantId">
|
|
|
|
<el-row>
|
|
|
|
<el-input v-model="form.tenantId" placeholder="请输入租户id" />
|
|
|
|
<el-col :span="12">
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="员工id" prop="employeeId">
|
|
|
|
|
|
|
|
<el-input v-model="form.employeeId" placeholder="请输入员工id" />
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="员工姓名" prop="empName">
|
|
|
|
<el-form-item label="员工姓名" prop="empName">
|
|
|
|
<el-input v-model="form.empName" placeholder="请输入员工姓名" />
|
|
|
|
<el-select v-model="form.empName" filterable clearable placeholder="请选择" @change="changeEmployee">
|
|
|
|
</el-form-item>
|
|
|
|
<el-option
|
|
|
|
<el-form-item label="部门名称" prop="deptName">
|
|
|
|
v-for="item in employeeList"
|
|
|
|
<el-input v-model="form.deptName" placeholder="请输入部门名称" />
|
|
|
|
:key="item.id"
|
|
|
|
</el-form-item>
|
|
|
|
:label="item.name"
|
|
|
|
<el-form-item label="部门id" prop="deptId">
|
|
|
|
:value="item.id">
|
|
|
|
<el-input v-model="form.deptId" placeholder="请输入部门id" />
|
|
|
|
</el-option>
|
|
|
|
</el-form-item>
|
|
|
|
</el-select>
|
|
|
|
<el-form-item label="上午开始时间" prop="amStartTime">
|
|
|
|
|
|
|
|
<el-date-picker clearable
|
|
|
|
|
|
|
|
v-model="form.amStartTime"
|
|
|
|
|
|
|
|
type="datetime"
|
|
|
|
|
|
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
|
|
|
|
|
placeholder="请选择上午开始时间">
|
|
|
|
|
|
|
|
</el-date-picker>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="上午结束时间" prop="amEndTime">
|
|
|
|
|
|
|
|
<el-date-picker clearable
|
|
|
|
|
|
|
|
v-model="form.amEndTime"
|
|
|
|
|
|
|
|
type="datetime"
|
|
|
|
|
|
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
|
|
|
|
|
placeholder="请选择上午结束时间">
|
|
|
|
|
|
|
|
</el-date-picker>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="下午开始时间" prop="pmStartTime">
|
|
|
|
</el-col>
|
|
|
|
<el-date-picker clearable
|
|
|
|
<el-col :span="12">
|
|
|
|
v-model="form.pmStartTime"
|
|
|
|
<el-form-item label="部门名称" prop="deptId">
|
|
|
|
type="datetime"
|
|
|
|
<treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" @select="changeDept"/>
|
|
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
|
|
|
|
|
placeholder="请选择下午开始时间">
|
|
|
|
|
|
|
|
</el-date-picker>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="下午结束时间" prop="pmEndTime">
|
|
|
|
</el-col>
|
|
|
|
<el-date-picker clearable
|
|
|
|
<el-col :span="12">
|
|
|
|
v-model="form.pmEndTime"
|
|
|
|
<el-form-item label="考勤年份月份" prop="kaoqinYearMonth">
|
|
|
|
type="datetime"
|
|
|
|
<el-date-picker
|
|
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
|
v-model="form.kaoqinYearMonth"
|
|
|
|
placeholder="请选择下午结束时间">
|
|
|
|
type="month"
|
|
|
|
|
|
|
|
size="mini"
|
|
|
|
|
|
|
|
placeholder="请输入考勤年份月份"
|
|
|
|
|
|
|
|
value-format="yyyy-MM">
|
|
|
|
</el-date-picker>
|
|
|
|
</el-date-picker>
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
<el-col :span="12">
|
|
|
|
<el-form-item label="考勤日期" prop="kaoqinDate">
|
|
|
|
<el-form-item label="考勤日期" prop="kaoqinDate">
|
|
|
|
<el-date-picker clearable
|
|
|
|
<el-date-picker clearable
|
|
|
|
v-model="form.kaoqinDate"
|
|
|
|
v-model="form.kaoqinDate"
|
|
|
|
type="datetime"
|
|
|
|
type="date"
|
|
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
|
value-format="yyyy-MM-dd"
|
|
|
|
placeholder="请选择考勤日期">
|
|
|
|
placeholder="请选择考勤日期">
|
|
|
|
</el-date-picker>
|
|
|
|
</el-date-picker>
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="考勤年份月份 (yyyy-MM)" prop="kaoqinYearMonth">
|
|
|
|
</el-col>
|
|
|
|
<el-input v-model="form.kaoqinYearMonth" placeholder="请输入考勤年份月份 (yyyy-MM)" />
|
|
|
|
<el-col :span="12" v-if="showClass==true">
|
|
|
|
|
|
|
|
<el-form-item label="考勤机" prop="kaoqinjiNum">
|
|
|
|
|
|
|
|
<el-input hidden v-model="form.kaoqinjiNum" placeholder="请输入考勤机 (0:综合办 1:网机 2:围栏)" />
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
|
|
|
<el-form-item label="上午开始时间" prop="amBeginTime">
|
|
|
|
|
|
|
|
<el-time-picker v-model="form.amBeginTime" value-format="HH:mm" format="HH:mm" placeholder="上午开始时间"></el-time-picker>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
|
|
|
<el-form-item label="上午结束时间" prop="amFnishTime">
|
|
|
|
|
|
|
|
<el-time-picker v-model="form.amFnishTime" value-format="HH:mm" format="HH:mm" placeholder="上午结束时间"></el-time-picker>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
|
|
|
<el-form-item label="下午开始时间" prop="pmBeginTime">
|
|
|
|
|
|
|
|
<el-time-picker v-model="form.pmBeginTime" value-format="HH:mm" format="HH:mm" placeholder="下午开始时间"></el-time-picker>
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="考勤机 (0:综合办 1:网机 2:围栏 3:手动添加)" prop="kaoqinjiNum">
|
|
|
|
</el-col>
|
|
|
|
<el-input v-model="form.kaoqinjiNum" placeholder="请输入考勤机 (0:综合办 1:网机 2:围栏 3:手动添加)" />
|
|
|
|
<el-col :span="12">
|
|
|
|
|
|
|
|
<el-form-item label="下午结束时间" prop="pmFnishTime">
|
|
|
|
|
|
|
|
<el-time-picker v-model="form.pmFnishTime" value-format="HH:mm" format="HH:mm" placeholder="下午结束时间"></el-time-picker>
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
</el-row>
|
|
|
|
</el-form>
|
|
|
|
</el-form>
|
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
|
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
|
|
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
|
|
<el-button @click="cancel">取 消</el-button>
|
|
|
|
<el-button @click="cancel">取 消</el-button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</el-dialog>
|
|
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 考勤导入对话框 -->
|
|
|
|
|
|
|
|
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body :close-on-click-modal="false">
|
|
|
|
|
|
|
|
<el-upload
|
|
|
|
|
|
|
|
ref="upload"
|
|
|
|
|
|
|
|
:limit="1"
|
|
|
|
|
|
|
|
accept=".xlsx, .xls"
|
|
|
|
|
|
|
|
:headers="upload.headers"
|
|
|
|
|
|
|
|
:action="upload.url + '?updateSupport=' + upload.updateSupport + '&date=' + upload.date + '&kaoqinType=' + upload.kaoqinType"
|
|
|
|
|
|
|
|
:disabled="upload.isUploading"
|
|
|
|
|
|
|
|
:on-progress="handleFileUploadProgress"
|
|
|
|
|
|
|
|
:on-success="handleFileSuccess"
|
|
|
|
|
|
|
|
:auto-upload="false"
|
|
|
|
|
|
|
|
drag
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<i class="el-icon-upload"></i>
|
|
|
|
|
|
|
|
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
|
|
|
|
|
|
|
<div class="el-upload__tip text-center" slot="tip">
|
|
|
|
|
|
|
|
<div class="el-upload__tip" slot="tip">
|
|
|
|
|
|
|
|
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的考勤数据
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<span>仅允许导入xls、xlsx格式文件。</span>
|
|
|
|
|
|
|
|
<div class="el-upload__date">
|
|
|
|
|
|
|
|
<span>请选择考勤月份:</span>
|
|
|
|
|
|
|
|
<el-date-picker
|
|
|
|
|
|
|
|
v-model="upload.date"
|
|
|
|
|
|
|
|
type="month"
|
|
|
|
|
|
|
|
size="mini"
|
|
|
|
|
|
|
|
placeholder="选择月"
|
|
|
|
|
|
|
|
value-format="yyyy-MM"
|
|
|
|
|
|
|
|
style="width:40%;">
|
|
|
|
|
|
|
|
</el-date-picker>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="el-upload__date">
|
|
|
|
|
|
|
|
<span>请选择考勤设备:</span>
|
|
|
|
|
|
|
|
<el-select v-model="upload.kaoqinType" placeholder="请选择" clearable size="mini" style="width: 40%">
|
|
|
|
|
|
|
|
<el-option
|
|
|
|
|
|
|
|
v-for="item in upload.options"
|
|
|
|
|
|
|
|
:key="item.kaoqinType"
|
|
|
|
|
|
|
|
:label="item.facilities"
|
|
|
|
|
|
|
|
:value="item.kaoqinType">
|
|
|
|
|
|
|
|
</el-option>
|
|
|
|
|
|
|
|
</el-select>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link> -->
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</el-upload>
|
|
|
|
|
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
|
|
|
|
|
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
|
|
|
|
|
|
|
<el-button @click="upload.open = false">取 消</el-button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
<script>
|
|
|
|
import { listAttendance, getAttendance, delAttendance, addAttendance, updateAttendance } from "@/api/pay/attendance";
|
|
|
|
import { listAttendance, getAttendance, delAttendance, addAttendance, updateAttendance } from "@/api/pay/attendance";
|
|
|
|
|
|
|
|
import { listEmployeeInfo } from "@/api/pay/employeeInfo";
|
|
|
|
|
|
|
|
import { deptTreeSelect } from "@/api/system/user";
|
|
|
|
|
|
|
|
import { listTenant } from "@/api/pay/tenant";
|
|
|
|
|
|
|
|
import { getToken } from "@/utils/auth";
|
|
|
|
|
|
|
|
import Treeselect from "@riophae/vue-treeselect";
|
|
|
|
|
|
|
|
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
|
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
export default {
|
|
|
|
name: "Attendance",
|
|
|
|
name: "Attendance",
|
|
|
|
|
|
|
|
components: { Treeselect },
|
|
|
|
data() {
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
|
|
|
|
// 公司信息
|
|
|
|
|
|
|
|
gsInfo:{
|
|
|
|
|
|
|
|
tenantName:'',
|
|
|
|
|
|
|
|
active_id:this.$store.state.user.tenantId,
|
|
|
|
|
|
|
|
list:[]
|
|
|
|
|
|
|
|
},
|
|
|
|
// 按钮loading
|
|
|
|
// 按钮loading
|
|
|
|
buttonLoading: false,
|
|
|
|
buttonLoading: false,
|
|
|
|
// 遮罩层
|
|
|
|
// 遮罩层
|
|
|
|
@ -312,6 +343,10 @@ export default {
|
|
|
|
title: "",
|
|
|
|
title: "",
|
|
|
|
// 是否显示弹出层
|
|
|
|
// 是否显示弹出层
|
|
|
|
open: false,
|
|
|
|
open: false,
|
|
|
|
|
|
|
|
// 部门树选项
|
|
|
|
|
|
|
|
deptOptions: undefined,
|
|
|
|
|
|
|
|
// 员工列表
|
|
|
|
|
|
|
|
employeeList: [],
|
|
|
|
// 查询参数
|
|
|
|
// 查询参数
|
|
|
|
queryParams: {
|
|
|
|
queryParams: {
|
|
|
|
pageNum: 1,
|
|
|
|
pageNum: 1,
|
|
|
|
@ -333,52 +368,77 @@ export default {
|
|
|
|
form: {},
|
|
|
|
form: {},
|
|
|
|
// 表单校验
|
|
|
|
// 表单校验
|
|
|
|
rules: {
|
|
|
|
rules: {
|
|
|
|
id: [
|
|
|
|
|
|
|
|
{ required: true, message: "主键不能为空", trigger: "blur" }
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
tenantId: [
|
|
|
|
|
|
|
|
{ required: true, message: "租户id不能为空", trigger: "blur" }
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
employeeId: [
|
|
|
|
|
|
|
|
{ required: true, message: "员工id不能为空", trigger: "blur" }
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
empName: [
|
|
|
|
empName: [
|
|
|
|
{ required: true, message: "员工姓名不能为空", trigger: "blur" }
|
|
|
|
{ required: true, message: "员工姓名不能为空", trigger: "blur" }
|
|
|
|
],
|
|
|
|
],
|
|
|
|
deptName: [
|
|
|
|
|
|
|
|
{ required: true, message: "部门名称不能为空", trigger: "blur" }
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
deptId: [
|
|
|
|
deptId: [
|
|
|
|
{ required: true, message: "部门id不能为空", trigger: "blur" }
|
|
|
|
{ required: true, message: "部门名称不能为空", trigger: "blur" }
|
|
|
|
],
|
|
|
|
|
|
|
|
amStartTime: [
|
|
|
|
|
|
|
|
{ required: true, message: "上午开始时间不能为空", trigger: "blur" }
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
amEndTime: [
|
|
|
|
|
|
|
|
{ required: true, message: "上午结束时间不能为空", trigger: "blur" }
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
pmStartTime: [
|
|
|
|
|
|
|
|
{ required: true, message: "下午开始时间不能为空", trigger: "blur" }
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
pmEndTime: [
|
|
|
|
|
|
|
|
{ required: true, message: "下午结束时间不能为空", trigger: "blur" }
|
|
|
|
|
|
|
|
],
|
|
|
|
],
|
|
|
|
kaoqinDate: [
|
|
|
|
kaoqinDate: [
|
|
|
|
{ required: true, message: "考勤日期不能为空", trigger: "blur" }
|
|
|
|
{ required: true, message: "考勤日期不能为空", trigger: "blur" }
|
|
|
|
],
|
|
|
|
],
|
|
|
|
kaoqinYearMonth: [
|
|
|
|
kaoqinYearMonth: [
|
|
|
|
{ required: true, message: "考勤年份月份 (yyyy-MM)不能为空", trigger: "blur" }
|
|
|
|
{ required: true, message: "考勤年份月份 (yyyy-MM)不能为空", trigger: "blur" }
|
|
|
|
],
|
|
|
|
|
|
|
|
kaoqinjiNum: [
|
|
|
|
|
|
|
|
{ required: true, message: "考勤机 (0:综合办 1:网机 2:围栏 3:手动添加)不能为空", trigger: "blur" }
|
|
|
|
|
|
|
|
]
|
|
|
|
]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
// 考勤导入参数
|
|
|
|
|
|
|
|
upload: {
|
|
|
|
|
|
|
|
// 是否显示弹出层(考勤导入)
|
|
|
|
|
|
|
|
open: false,
|
|
|
|
|
|
|
|
// 弹出层标题(考勤导入)
|
|
|
|
|
|
|
|
title: "",
|
|
|
|
|
|
|
|
// 是否禁用上传
|
|
|
|
|
|
|
|
isUploading: false,
|
|
|
|
|
|
|
|
// 是否更新已经存在的考勤数据
|
|
|
|
|
|
|
|
updateSupport: 0,
|
|
|
|
|
|
|
|
// 设置上传的请求头部
|
|
|
|
|
|
|
|
headers: { Authorization: "Bearer " + getToken() },
|
|
|
|
|
|
|
|
// 上传的地址
|
|
|
|
|
|
|
|
url: process.env.VUE_APP_BASE_API + "/secure/attendance/importData",
|
|
|
|
|
|
|
|
date: "",
|
|
|
|
|
|
|
|
options: [{
|
|
|
|
|
|
|
|
kaoqinType: '0',
|
|
|
|
|
|
|
|
facilities: '综合办'
|
|
|
|
|
|
|
|
},{
|
|
|
|
|
|
|
|
kaoqinType: '1',
|
|
|
|
|
|
|
|
facilities: '网机'
|
|
|
|
|
|
|
|
},{
|
|
|
|
|
|
|
|
kaoqinType: '2',
|
|
|
|
|
|
|
|
facilities: '围栏'
|
|
|
|
|
|
|
|
}],
|
|
|
|
|
|
|
|
kaoqinType: ''
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
showClass: false
|
|
|
|
};
|
|
|
|
};
|
|
|
|
},
|
|
|
|
},
|
|
|
|
created() {
|
|
|
|
created() {
|
|
|
|
|
|
|
|
|
|
|
|
this.getList();
|
|
|
|
this.getList();
|
|
|
|
|
|
|
|
this.getNamelist()
|
|
|
|
|
|
|
|
this.getDeptTree();
|
|
|
|
},
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
methods: {
|
|
|
|
|
|
|
|
// 获取左侧公司列表
|
|
|
|
|
|
|
|
getGsInfoList(){
|
|
|
|
|
|
|
|
listTenant({ name: this.gsInfo.tenantName }).then(response => {
|
|
|
|
|
|
|
|
if(response.rows.length>0){
|
|
|
|
|
|
|
|
this.gsInfo.list = response.rows;
|
|
|
|
|
|
|
|
this.gsInfo.active_id = this.gsInfo.list[0].id
|
|
|
|
|
|
|
|
this.getList()
|
|
|
|
|
|
|
|
this.getDeptTree();
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
this.$alert(`没有查到相关公司,暂无数据!`, `提示`, {
|
|
|
|
|
|
|
|
type: 'warning'
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
// 选择公司
|
|
|
|
|
|
|
|
changCompany(id){
|
|
|
|
|
|
|
|
this.gsInfo.active_id = id
|
|
|
|
|
|
|
|
this.getList()
|
|
|
|
|
|
|
|
this.getDeptTree();
|
|
|
|
|
|
|
|
},
|
|
|
|
/** 查询考勤列表 */
|
|
|
|
/** 查询考勤列表 */
|
|
|
|
getList() {
|
|
|
|
getList() {
|
|
|
|
this.loading = true;
|
|
|
|
this.loading = true;
|
|
|
|
@ -388,6 +448,19 @@ export default {
|
|
|
|
this.loading = false;
|
|
|
|
this.loading = false;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
/** 查询员工 */
|
|
|
|
|
|
|
|
getNamelist() {
|
|
|
|
|
|
|
|
listEmployeeInfo({ pageNum: 1, pageSize: 10000000,}).then(response => {
|
|
|
|
|
|
|
|
this.employeeList = response.rows;
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
/** 查询部门下拉树结构 */
|
|
|
|
|
|
|
|
getDeptTree() {
|
|
|
|
|
|
|
|
deptTreeSelect().then(response => {
|
|
|
|
|
|
|
|
// deptTreeSelect().then(response => {
|
|
|
|
|
|
|
|
this.deptOptions = response.data;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
},
|
|
|
|
// 取消按钮
|
|
|
|
// 取消按钮
|
|
|
|
cancel() {
|
|
|
|
cancel() {
|
|
|
|
this.open = false;
|
|
|
|
this.open = false;
|
|
|
|
@ -491,7 +564,113 @@ export default {
|
|
|
|
this.download('pay/attendance/export', {
|
|
|
|
this.download('pay/attendance/export', {
|
|
|
|
...this.queryParams
|
|
|
|
...this.queryParams
|
|
|
|
}, `attendance_${new Date().getTime()}.xlsx`)
|
|
|
|
}, `attendance_${new Date().getTime()}.xlsx`)
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
// 选择员工
|
|
|
|
|
|
|
|
changeEmployee(val){
|
|
|
|
|
|
|
|
this.form.employeeId = val;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
// 选择部门
|
|
|
|
|
|
|
|
changeDept(val){
|
|
|
|
|
|
|
|
this.form.deptId=val.id
|
|
|
|
|
|
|
|
this.form.deptName=val.label
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
/** 导入按钮操作 */
|
|
|
|
|
|
|
|
handleImport() {
|
|
|
|
|
|
|
|
this.upload.title = "考勤导入";
|
|
|
|
|
|
|
|
this.upload.open = true;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
/** 下载模板操作 */
|
|
|
|
|
|
|
|
/* importTemplate() {
|
|
|
|
|
|
|
|
this.download('system/user/importTemplate', {
|
|
|
|
|
|
|
|
}, `attendance_template_${new Date().getTime()}.xlsx`)
|
|
|
|
|
|
|
|
}, */
|
|
|
|
|
|
|
|
// 文件上传中处理
|
|
|
|
|
|
|
|
handleFileUploadProgress(event, file, fileList) {
|
|
|
|
|
|
|
|
this.upload.isUploading = true;
|
|
|
|
|
|
|
|
this.$loading({
|
|
|
|
|
|
|
|
lock: true,
|
|
|
|
|
|
|
|
text: 'Loading',
|
|
|
|
|
|
|
|
spinner: 'el-icon-loading',
|
|
|
|
|
|
|
|
background: 'rgba(0, 0, 0, 0.7)'
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
// 文件上传成功处理
|
|
|
|
|
|
|
|
handleFileSuccess(response, file, fileList) {
|
|
|
|
|
|
|
|
this.upload.open = false;
|
|
|
|
|
|
|
|
this.upload.isUploading = false;
|
|
|
|
|
|
|
|
this.$refs.upload.clearFiles();
|
|
|
|
|
|
|
|
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
|
|
|
|
|
|
|
|
this.getList();
|
|
|
|
|
|
|
|
this.$loading().close();
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
// 提交上传文件
|
|
|
|
|
|
|
|
submitFileForm() {
|
|
|
|
|
|
|
|
if (this.isEmpty(this.upload.date)) {
|
|
|
|
|
|
|
|
this.$alert('请选择考勤月份', '信息', {
|
|
|
|
|
|
|
|
confirmButtonText: '确定',
|
|
|
|
|
|
|
|
customClass:'message_box_alert'
|
|
|
|
|
|
|
|
}).catch((err) => {
|
|
|
|
|
|
|
|
console.log(err)
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
} else if (this.isEmpty(this.upload.kaoqinType)) {
|
|
|
|
|
|
|
|
this.$alert('请选择考勤设备', '信息', {
|
|
|
|
|
|
|
|
confirmButtonText: '确定',
|
|
|
|
|
|
|
|
customClass:'message_box_alert'
|
|
|
|
|
|
|
|
}).catch((err) => {
|
|
|
|
|
|
|
|
console.log(err)
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
this.$refs.upload.submit();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
//判断字符是否为空的方法
|
|
|
|
|
|
|
|
isEmpty(obj) {
|
|
|
|
|
|
|
|
if (typeof obj == "undefined" || obj == null || obj == "" || obj.length ==0) {
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
</script>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
|
|
|
|
.app-container {
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
.company {
|
|
|
|
|
|
|
|
border-radius: 5px;
|
|
|
|
|
|
|
|
width: 230px;
|
|
|
|
|
|
|
|
height: calc(100vh - 115px);
|
|
|
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
|
|
|
.cp-content {
|
|
|
|
|
|
|
|
margin-top: 20px;
|
|
|
|
|
|
|
|
.cp-item {
|
|
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
|
|
padding: 6px 10px 6px 5px;
|
|
|
|
|
|
|
|
color: #424242;
|
|
|
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
|
|
&:hover {
|
|
|
|
|
|
|
|
background: #f6f6f6;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
.active{
|
|
|
|
|
|
|
|
background: #edf6ff;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
.content{
|
|
|
|
|
|
|
|
padding-left: 15px;
|
|
|
|
|
|
|
|
width: calc(100% - 250px);
|
|
|
|
|
|
|
|
.el-button--medium {
|
|
|
|
|
|
|
|
padding: 2px 0px;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
.content-all{
|
|
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
|
|
.el-button--medium {
|
|
|
|
|
|
|
|
padding: 2px 0px;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
</style>
|
|
|
|
|