123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 |
- <template>
- <a-card :bordered="false">
- <!-- 查询区域 -->
- <div class="table-page-search-wrapper">
- <a-form layout="inline" @keyup.enter.native="searchQuery">
- <a-row :gutter="24">
- <a-col :md="6" :sm="8">
- <a-form-item label="工号">
- <a-input placeholder="请输入工号" v-model="queryParam.workNo"></a-input>
- </a-form-item>
- </a-col>
- <a-col :md="6" :sm="8">
- <a-form-item label="人员">
- <a-input placeholder="请输入人员" v-model="queryParam.realname"></a-input>
- </a-form-item>
- </a-col>
- <a-col :md="6" :sm="8">
- <a-form-item label="部门">
- <a-input placeholder="请输入部门" v-model="queryParam.departNames"></a-input>
- </a-form-item>
- </a-col>
-
- <!-- <a-col :md="6" :sm="8">
- <a-form-item label="班次">
- <a-input placeholder="请输入班次" v-model="queryParam.name"></a-input>
- </a-form-item>
- </a-col> -->
-
- <a-col :md="5" :sm="8">
- <a-form-item label="班次" style="width: 300px">
- <!-- <j-search-select-tag
- placeholder="请做出你的选择"
- v-model="asyncSelectValue"
- dict="geke_shift,name,name"
- :async="true">
- </j-search-select-tag> -->
-
- <a-select v-model="queryParam.name" placeholder="请选择班次">
- <a-select-option value="">请选择</a-select-option>
- <a-select-option value="休息">休息</a-select-option>
- <a-select-option value="固定上下班">固定上下班</a-select-option>
- <a-select-option value="自由上下班">自由上下班</a-select-option>
- <a-select-option v-for="(item,index) in shiftlist" :value="item.name">{{item.name}} ({{item.startDate}}-{{item.endDate}})
- </a-select-option>
- </a-select>
-
- </a-form-item>
- </a-col>
-
- <a-col :md="6" :sm="10">
- <a-form-item label="日期">
- <a-range-picker
- style="width: 210px"
- format="YYYY-MM-DD"
- :placeholder="['开始时间', '结束时间']"
- @change="onDateChange"
- @ok="onDateOk"
- />
- </a-form-item>
- </a-col>
- <a-col :md="6" :sm="8">
- <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
- <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
- <!-- <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> -->
- </span>
- </a-col>
- </a-row>
- <a-row :gutter="24">
- <a-col :md="6" :sm="8">
- <a-form-item label="生成月报日期">
- <a-month-picker format="YYYY-MM" placeholder="请输入生成月报日期" v-model="queryParam.nowDate" />
- <!-- <a-input placeholder="请输入生成月报日期" v-model="queryParam.nowDate"></a-input> -->
- </a-form-item>
- </a-col>
- <a-col :md="6" :sm="8">
- <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
- <a-button type="primary" @click="monthReport" icon="reload" style="margin-left: 8px">生成当月考勤月报</a-button>
- </span>
- </a-col>
-
- </a-row>
- </a-form>
- </div>
- <!-- table区域-begin -->
- <div>
- <a-table class="j-table-force-nowrap" ref="table" size="middle" bordered rowKey="pkId" :columns="columns"
- :dataSource="dataSource" :pagination="ipagination" :loading="loading" :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
- @change="handleTableChange" :scroll="{ x: 3000 }">
- <span slot="latetimeState" slot-scope="text, record, index">
- <!-- <a-tag color="pink" v-if="record.latetimeX > 0 || record.latetimeS > 0 ">异常</a-tag>
- <a-tag color="#87d068" v-if="record.latetimeX <= 0 && record.latetimeS <= 0 ">正常</a-tag> -->
-
- <a-tag color="pink" v-if="record.latetimeS < 0 || record.latetimeX > 0
- || record.shiftRealTimeS == '' || record.shiftRealTimeS == null || (record.ifwork !=0 && record.attendanceCount < 2)
- || (record.name != null && record.name != '' && (record.gotoTime == null || record.gotoTime == ''))
- && (record.setInfo == '' || record.setInfo == null)">
- 异常
- </a-tag>
- <a-tag color="#87d068" v-else>正常</a-tag>
- </span>
- <span slot="realShiftTime" slot-scope="text, record, index">
- <!-- ruleType 上班类型 1.固定时间上下班,2.按班次上下班,3.自由上下班 -->
- <span v-if="record.ruleType == '2' ">
- {{record.name}} {{record.shiftRealTimeS}}-{{record.shiftRealTimeX}}
- </span>
- <span v-else>{{record.name}}</span>
- </span>
- <span slot="action" slot-scope="text, record">
- <a @click="jiaozhun(record)">校准</a>
-
- </span>
- </a-table>
- </div>
- <!-- table区域-end -->
- <!-- 表单区域 -->
- <!-- <ViewClockIn-modal ref="modalForm" @ok="modalFormOk"></ViewClockIn-modal> -->
- </a-card>
- </template>
- <script>
- import {
- httpAction,
- getFileAccessHttpUrl,
- getAction,
- deleteAction
- } from '@/api/manage'
- import {
- JeecgListMixin
- } from '@/mixins/JeecgListMixin'
- import JSearchSelectTag from '@/components/dict/JSearchSelectTag'
- import JDictSelectTag from '@/components/dict/JDictSelectTag'
- import {
- monthReport,jiaozhun
- } from '@/api/api'
- import moment from 'moment';
- import 'moment/locale/zh-cn';
- export default {
- name: 'ViewClockInList',
- mixins: [JeecgListMixin],
- components: {
- JDictSelectTag
- },
- data() {
- return {
- moment,
- shiftlist: null,
- description: '考勤日报',
- // 表头
- columns: [
- /* {
- title: '行号',
- dataIndex: '',
- key: 'rowIndex',
- width: 60,
- align: 'center',
- customRender: function(t, r, index) {
- return parseInt(index) + 1
- }
- }, */
- {
- title: '日期',
- align: 'center',
- dataIndex: 'viewDate', fixed: 'left', width: 100
- },
- {
- title: '人员',
- align: 'center',
- dataIndex: 'realname', fixed: 'left', width: 100
- },{
- title: '部门',
- align: 'center',
- dataIndex: 'departNames', fixed: 'left', width: 200
- },
- // {
- // title: '工号',
- // align: 'center',
- // dataIndex: 'workNo'
- // },
- {
- title: '班次',
- align: 'center',
- fixed: 'left', width: 160,
- scopedSlots: {
- customRender: 'realShiftTime'
- }
- },
- // {
- // title: '上班时间',
- // align: 'center',
- // dataIndex: 'shiftTimeS'
- // },
- {
- title: '最早打卡时间',
- align: 'center',
- dataIndex: 'gotoTime'
- },
- // {
- // title: '下班时间',
- // align: 'center',
- // dataIndex: 'shiftTimeX'
- // },
- {
- title: '最晚打卡时间',
- align: 'center',
- dataIndex: 'closingTime'
- }, {
- title: '打卡次数',
- align: 'center',
- dataIndex: 'attendanceCount', width: 100
- }, {
- title: '考勤状态',
- align: 'center', width: 100,
- scopedSlots: {
- customRender: 'latetimeState'
- }
- },
- /* {
- title: '迟到分钟',
- align: 'center',
- dataIndex: 'latetimeS',
- customRender: function(t, r, index) {
- if (t > 0) {
- return t;
- } else {
- return 0;
- }
- }
- },
- {
- title: '早退分钟',
- align: 'center',
- dataIndex: 'latetimeX',
- customRender: function(t, r, index) {
- if (t > 0) {
- return t;
- } else {
- return 0;
- }
- }
- },
- {
- title: '上班打卡',
- align: 'center',
- dataIndex: 'gotoState'
- },
- {
- title: '下班打卡',
- align: 'center',
- dataIndex: 'closingState'
- },*/
- {
- title: '加班开始时间',
- align: 'center',
- dataIndex: 'durationBeginDate'
- },
- {
- title: '加班结束时间',
- align: 'center',
- dataIndex: 'durationEndDate'
- },
- {
- title: '加班事由',
- align: 'center',
- dataIndex: 'demo'
- },
- {
- title: '加班时长',
- align: 'center',width: 100,
- dataIndex: 'duration'
- },
- {
- title: '请假开始时间',
- align: 'center',
- dataIndex: 'holidayStartDate'
- },
- {
- title: '请假结束时间',
- align: 'center',
- dataIndex: 'holidayEndDate'
- },
- {
- title: '请假类型',
- align: 'center',width: 100,
- dataIndex: 'holidayType'
- }
- // ,
- // {
- // title: '操作',
- // dataIndex: 'action',
- // align: 'center',
- // scopedSlots: { customRender: 'action' },
- // }
- ],
- url: {
- list: '/viewClockIn/viewClockIn/list',
- shift: "/shift/shift/lists"
- },
- }
- },
- computed: {
- importExcelUrl: function() {
- return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
- }
- },
- created() { //实例被创建时候执行
- this.queryShift();
- },
- methods: {
- onDateChange: function (value, dateString) {
- console.log(dateString[0],dateString[1]);
- this.queryParam.beginViewDate=dateString[0];
- this.queryParam.endViewDate=dateString[1];
- },
- onDateOk(value) {
- // console.log(value);
- },
- onChange(date, dateString) {
- // console.log(date, dateString);
- // this.value = "2021-01-01"
- },
- queryShift() {
- httpAction(this.url.shift, "", "get").then((res) => {
- if (res.success) {
- this.shiftlist = res.result;
- console.log(res.result);
- }
- }).finally(() => {
-
- })
- },
- jiaozhun(record) {
- // alert(record.viewDate);
- // alert(record.username);
- let that = this;
- this.$confirm({
- title: '校准后原打卡时间将失效',
- content: '上班打卡时间:'+record.shiftTimeS+'; 下班打卡时间:'+record.shiftTimeX,
- onOk: function () {
- jiaozhun({shiftTimeS:record.shiftTimeS,shiftTimeX:record.shiftTimeX,viewDate:record.viewDate,username:record.username}).then((res) => {
- if (res == 'true') {
- that.$message.success("已成功校准");
- that.loadData();
- } else {
- that.$message.warning(res);
- }
- });
- },
- onCancel() {},
- });
-
-
- },
- monthReport() {
- let ids = "";
- var conText = ";"
- let sqp1 = this.getQueryParams();
- if(sqp1['nowDate'] == 'undefined' || sqp1['nowDate'] == null || sqp1['nowDate'] == ''){
- this.$message.warning('请选择生成月报日期!');
- return false;
- }
- let nowDate = moment(sqp1['nowDate']).format('YYYY-MM');
- let that = this;
-
- for (var a = 0; a < this.selectedRowKeys.length; a++) {
- ids += this.selectedRowKeys[a] + ",";
- }
- if(ids == ""){
- conText = "是否生成所有员工" + nowDate + "月报?";
- }else{
- conText = "是否生成所选员工" + nowDate + "月报? 所选数量:" + this.selectedRowKeys.length;
- }
- // console.log(ids);
- that.$confirm({
- title: "确认操作",
- content: conText,
- onOk: function () {
- monthReport({nowDate:nowDate,userIds:ids}).then((res) => {
- if (res.success) {
- that.$message.success("已成功生成"+nowDate+"考勤月报");
- // that.$message.success("已成功生成"+nowDate+"考勤月报");
- that.loadData();
- } else {
- that.$message.warning(res.message);
- }
- });
- }
- });
-
-
-
-
- }
- }
- }
- </script>
- <style scoped>
- @import '~@assets/less/common.less'
- </style>
|