559 lines
13 KiB
JavaScript
559 lines
13 KiB
JavaScript
import {
|
|
observable,
|
|
action,
|
|
computed,
|
|
} from 'mobx';
|
|
import {
|
|
WeaTools
|
|
} from 'ecCom';
|
|
import moment from 'moment';
|
|
import * as API from '../apis/checking';
|
|
import * as Util from '../util/index';
|
|
import isEmpty from 'lodash/isEmpty';
|
|
import {
|
|
WeaTableNew
|
|
} from 'comsMobx'
|
|
const {
|
|
TableStore
|
|
} = WeaTableNew;
|
|
import {
|
|
onNewRequest
|
|
} from '../util/pulic-func';
|
|
import {
|
|
WeaLocaleProvider
|
|
} from 'ecCom';
|
|
import {message} from 'antd';
|
|
const getLabel = WeaLocaleProvider.getLabel;
|
|
|
|
export class HrmChecking {
|
|
tabDatas = [{
|
|
title: '考勤统计',
|
|
key: "1"
|
|
}, {
|
|
title: '考勤日历',
|
|
key: "2"
|
|
}];
|
|
leftTitle = '人员组织';
|
|
dateTabDatas = [{
|
|
title: '年',
|
|
key: "1"
|
|
}, {
|
|
title: '月',
|
|
key: "2"
|
|
}];
|
|
constructor(props) {
|
|
this.statusList = [{
|
|
name: '全部',
|
|
type: 'ALL',
|
|
}, {
|
|
name: '正常',
|
|
type: 'NORMAL',
|
|
}, {
|
|
name: '迟到',
|
|
type: 'BELATE',
|
|
}, {
|
|
name: '早退',
|
|
type: 'LEAVEEARLY',
|
|
}, {
|
|
name: '旷工',
|
|
type: 'ABSENT',
|
|
}, {
|
|
name: '漏签',
|
|
type: 'NOSIGN',
|
|
}, {
|
|
name: '请假',
|
|
type: 'LEAVE',
|
|
}, {
|
|
name: '出差',
|
|
type: 'EVECTION',
|
|
}, {
|
|
name: '公出',
|
|
type: 'OUTDAYS',
|
|
}, {
|
|
name: '加班',
|
|
type: 'OVERTIME',
|
|
}];
|
|
this.statusList.reverse();
|
|
// this.statusList.forEach((item)=> {
|
|
// const ic = Util.getIconColor(item.type);
|
|
// item.icon = ic.icon;
|
|
// item.color = ic.color;
|
|
// item.name = ic.name;
|
|
// if(ic.title){
|
|
// item.title = ic.title;
|
|
// }
|
|
// });
|
|
}
|
|
@observable stsType = '';
|
|
|
|
@observable hrmId = undefined;
|
|
@observable newWorklist = [];
|
|
@observable visible = false;
|
|
@observable newVisible = false;
|
|
@observable table = new TableStore();
|
|
@observable yearData = {};
|
|
@observable calendarData = {};
|
|
@observable sData = {};
|
|
@observable hrmName = WeaTools.ls.getJSONObj('theme-account') && WeaTools.ls.getJSONObj('theme-account').username || undefined;
|
|
@observable statusActiveType = 'ALL';
|
|
@observable calendarCheckedDay = undefined;
|
|
@observable loading = false;
|
|
@observable tabkey = '1';
|
|
@observable dateTabkey = '2';
|
|
@observable userRoot = undefined;
|
|
@observable pDate = new moment().format('YYYY-MM');
|
|
@observable pDate1 = new moment();
|
|
@observable hasRight = true;
|
|
@observable chartOptions = {
|
|
tooltip: {
|
|
trigger: 'item',
|
|
formatter: "{a} <br/>{b}: {c} ({d}%)",
|
|
position: 'right',
|
|
},
|
|
series: [{
|
|
type: 'pie',
|
|
name: getLabel('16732', "出勤统计"),
|
|
radius: ['60%', '80%'],
|
|
avoidLabelOverlap: false,
|
|
label: {
|
|
normal: {
|
|
show: true,
|
|
position: 'center',
|
|
formatter: [
|
|
`{a|${this.count}}`,
|
|
`{b|${this.countTxt}}`
|
|
].join('\n'),
|
|
|
|
rich: {
|
|
a: {
|
|
color: '#484A4D',
|
|
fontSize: 24,
|
|
lineHeight: 24
|
|
},
|
|
b: {
|
|
color: '#666',
|
|
fontSize: 11,
|
|
},
|
|
},
|
|
}
|
|
},
|
|
color: ['#FC4B6C', '#1E88E5'],
|
|
data: []
|
|
}]
|
|
};
|
|
@observable groupitem2 = [];
|
|
@observable groupitem3 = [];
|
|
@observable groupitem4 = [];
|
|
@observable groupitem5 = [];
|
|
@observable wfinfo = [];
|
|
|
|
@computed get groupwfinfo() {
|
|
//缓存newWorklist、wfinfo
|
|
const newWorklist = this.newWorklist,
|
|
wfinfo = this.wfinfo,
|
|
arr = [];
|
|
|
|
if (newWorklist && wfinfo) {
|
|
newWorklist.forEach(data => {
|
|
const { wfid } = data;
|
|
|
|
wfinfo.forEach(info => {
|
|
const { wfbeans } = info;
|
|
const target = wfbeans.find(data => data.id == wfid);
|
|
if (target) {
|
|
const { typeId } = target;
|
|
const exist = arr.find(data => data.typeId == typeId);
|
|
if (exist) {
|
|
exist.wfs.push(data);
|
|
}else{
|
|
arr.push({
|
|
typeId,
|
|
wfs:[data],
|
|
...info
|
|
})
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
return arr;
|
|
|
|
}
|
|
|
|
@action getStatusList = () => {
|
|
let arr = [];
|
|
this.statusList.forEach((item) => {
|
|
const ic = Util.getIconColor(item.type);
|
|
arr.push({ ...ic,
|
|
type: item.type
|
|
});
|
|
// item.icon = ic.icon;
|
|
// item.color = ic.color;
|
|
// item.name = ic.name;
|
|
// if(ic.title){
|
|
// item.title = ic.title;
|
|
// }
|
|
});
|
|
return arr;
|
|
}
|
|
|
|
@observable overTimeTabDatas = [];
|
|
@observable overTimeTabkey = '1';
|
|
|
|
@action
|
|
handlerNewWorkflow(item) {
|
|
onNewRequest(item);
|
|
this.newVisible = false;
|
|
}
|
|
|
|
@action
|
|
updateVisible(v) {
|
|
this.visible = v;
|
|
}
|
|
|
|
@action
|
|
updateNewVisible(v) {
|
|
this.newVisible = v;
|
|
}
|
|
|
|
@action
|
|
updateStsType(v) {
|
|
this.stsType = v;
|
|
}
|
|
|
|
@action
|
|
handlerStatusClick(type) {
|
|
this.statusActiveType = type;
|
|
}
|
|
|
|
@action
|
|
updateCalendarCheckedDay(v) {
|
|
this.calendarCheckedDay = v;
|
|
this.getHrmKQSignInfo();
|
|
}
|
|
|
|
@action
|
|
changeTabHandler(key) {
|
|
this.tabkey = key;
|
|
this.calendarCheckedDay = undefined;
|
|
this.statusActiveType = 'ALL';
|
|
}
|
|
@action
|
|
changeDateTabHandler(key) {
|
|
if (this.pDate) {
|
|
if (key == '1') {
|
|
this.pDate = new moment().format('YYYY');
|
|
} else {
|
|
this.pDate = new moment().format('YYYY-MM');
|
|
}
|
|
}
|
|
this.pDate1 = new moment();
|
|
this.dateTabkey = key;
|
|
this.calendarCheckedDay = undefined;
|
|
this.statusActiveType = 'ALL';
|
|
}
|
|
|
|
@action
|
|
updateDateTabkey(key) {
|
|
this.dateTabkey = key;
|
|
}
|
|
|
|
@action
|
|
changeDateHandler(v) {
|
|
this.pDate = v;
|
|
if (v.length == 4)
|
|
this.pDate1 = new moment().year(v);
|
|
this.statusActiveType = 'ALL';
|
|
this.calendarCheckedDay = undefined;
|
|
}
|
|
@action
|
|
init() {
|
|
this.tabkey = '1';
|
|
this.dateTabkey = '2';
|
|
this.pDate = new moment().format('YYYY-MM');
|
|
this.hrmId = undefined;
|
|
this.hrmName = WeaTools.ls.getJSONObj('theme-account') && WeaTools.ls.getJSONObj('theme-account').username || undefined;
|
|
this.userRoot = undefined;
|
|
}
|
|
|
|
@action
|
|
updateUserRoot(data) {
|
|
this.userRoot = data;
|
|
}
|
|
|
|
@action
|
|
updateHrmId(v) {
|
|
this.hrmId = v;
|
|
}
|
|
|
|
@action
|
|
updateHrmName(v) {
|
|
this.hrmName = v || WeaTools.ls.getJSONObj('theme-account') && WeaTools.ls.getJSONObj('theme-account').username || undefined;
|
|
}
|
|
|
|
@action
|
|
getTableData() {
|
|
let params = {};
|
|
if (this.hrmId) params.resourceId = this.hrmId;
|
|
if (this.pDate) params.typevalue = this.pDate;
|
|
params.type = this.dateTabkey;
|
|
params.kqtype = this.stsType;
|
|
this.table = new TableStore();
|
|
|
|
if (this.stsType === 'OVERTIME') {
|
|
API.getKQReportDetail({
|
|
typeselect: 6,
|
|
...this.getDateScope(this.pDate),
|
|
viewScope: 3,
|
|
resourceId: this.hrmId,
|
|
source:"isMyKq",
|
|
isNoAccount: 0,
|
|
attendanceSerial: '',
|
|
type: 'overtimeTotal',
|
|
tabKey: this.overTimeTabkey,
|
|
reportType: 'month'
|
|
}).then(datas => {
|
|
const {
|
|
sessionkey,
|
|
status
|
|
} = datas;
|
|
|
|
if (status === '1') {
|
|
this.table.getDatas(sessionkey, 1);
|
|
} else {
|
|
message.warning(datas.message);
|
|
}
|
|
})
|
|
} else {
|
|
API.getTableData(params).then((datas) => {
|
|
this.table.getDatas(datas.sessionkey, 1);
|
|
})
|
|
}
|
|
}
|
|
|
|
getDateScope = (date) => {
|
|
if (date) {
|
|
return{
|
|
fromDate:`${date}-01`,
|
|
toDate:`${date}-31`
|
|
}
|
|
}else{
|
|
return {}
|
|
}
|
|
|
|
}
|
|
|
|
@action
|
|
getData(cb) {
|
|
let params = {};
|
|
if (this.hrmId) params.resourceId = this.hrmId;
|
|
if (this.pDate) params.typevalue = this.pDate;
|
|
params.loaddata = "1";
|
|
params.type = this.dateTabkey;
|
|
this.loading = true;
|
|
if (this.tabkey == '1') {
|
|
API.getKQReport(params).then((datas) => {
|
|
if (datas.status == '1') {
|
|
this.hasRight = true;
|
|
if (datas.groupitem1) {
|
|
this.chartOptions.series[0].name = getLabel('16732', "出勤统计");
|
|
this.chartOptions.series[0].label.normal.formatter = [
|
|
`{a|${parseFloat(datas.groupitem1.value)}}`,
|
|
`{b|${datas.groupitem1.name}}`
|
|
].join('\n')
|
|
datas.groupitem1.items.forEach((i) => {
|
|
i.value = parseFloat(i.value);
|
|
})
|
|
this.chartOptions.series[0].data = datas.groupitem1.items;
|
|
const {
|
|
items
|
|
} = datas.groupitem1;
|
|
let total = 0;
|
|
items.forEach(item => {
|
|
const {
|
|
value
|
|
} = item;
|
|
total += parseFloat(value);
|
|
});
|
|
if (total === 0) {
|
|
this.chartOptions.series[0].color = ['#c5c5c5','#c5c5c5'];
|
|
} else {
|
|
this.chartOptions.series[0].color = ['#FC4B6C', '#1E88E5'];
|
|
}
|
|
}
|
|
this.groupitem2 = (datas.groupitem2 && datas.groupitem2.items) || [];
|
|
this.groupitem2.forEach((item) => {
|
|
const ic = Util.getIcon(item.type);
|
|
item.icon = ic.icon;
|
|
item.color = ic.color;
|
|
})
|
|
this.groupitem3 = (datas.groupitem3 && datas.groupitem3.items) || [];
|
|
this.groupitem4 = (datas.groupitem4 && datas.groupitem4.items) || [];
|
|
this.groupitem5 = (datas.groupitem5 && datas.groupitem5.items) || [];
|
|
cb && cb();
|
|
} else {
|
|
message.error(datas.errormsg)
|
|
this.hasRight = false;
|
|
}
|
|
this.loading = false;
|
|
})
|
|
} else {
|
|
API.getKQCarendarReport(params).then((datas) => {
|
|
if (datas.status == '1') {
|
|
if (this.dateTabkey == '1') {
|
|
this.yearData = datas.result;
|
|
} else {
|
|
this.calendarData = datas.result;
|
|
}
|
|
this.hasRight = true;
|
|
} else {
|
|
message.error(datas.errormsg)
|
|
this.hasRight = false;
|
|
}
|
|
this.loading = false;
|
|
})
|
|
}
|
|
}
|
|
|
|
@action getHrmKQSignInfo = () => {
|
|
let params = {};
|
|
let day;
|
|
|
|
if (this.calendarCheckedDay.toString().length < 2) {
|
|
day = `0${this.calendarCheckedDay}`
|
|
} else {
|
|
day = this.calendarCheckedDay;
|
|
}
|
|
if (this.hrmId) params.resourceId = this.hrmId;
|
|
if (this.pDate) params.date = `${this.pDate}-${day}`;
|
|
API.getHrmKQSignInfo(params).then((datas) => {
|
|
const {
|
|
data
|
|
} = datas;
|
|
|
|
this.sData = data;
|
|
})
|
|
}
|
|
|
|
@action
|
|
getHrmNewWorkflwList(params = {}) {
|
|
API.getHrmNewWorkflwList(params).then((datas) => {
|
|
this.newWorklist = datas.result;
|
|
})
|
|
}
|
|
|
|
@action
|
|
getwfinfo = () => {
|
|
const params = {
|
|
needall: 1,
|
|
menuIds: "1,12",
|
|
tabkey: 1
|
|
};
|
|
API.getwfinfo(params).then(res => {
|
|
const { datas } = res;
|
|
|
|
this.wfinfo = datas;
|
|
})
|
|
}
|
|
|
|
@computed get hasLeaveInfo() {
|
|
return this.groupitem5.length > 0
|
|
}
|
|
|
|
dialogHeight = 790;
|
|
|
|
kqDetailDialogHeight = 500;
|
|
|
|
setDialogHeight = (h) => {
|
|
this.kqDetailDialogHeight = h;
|
|
}
|
|
|
|
ABSENCEDIALOG = {
|
|
icon: 'icon-coms-hrm',
|
|
iconBgcolor: '#217346',
|
|
onCancel: () => {
|
|
this.absenceDialog.visible = false
|
|
},
|
|
onChangeHeight: (h) => {
|
|
this.dialogHeight = h;
|
|
},
|
|
moreBtn: {
|
|
datas: []
|
|
},
|
|
style: {
|
|
width: 800,
|
|
height: 790
|
|
},
|
|
title: getLabel(507088, '未出勤明细')
|
|
}
|
|
|
|
@observable absenceDialog = {
|
|
visible: false,
|
|
loading: false,
|
|
}
|
|
|
|
@observable absenceDetail = {
|
|
absenceDay: 0,
|
|
types: [],
|
|
details: [],
|
|
};
|
|
|
|
@action openAbsenceDialog = () => {
|
|
this.absenceDialog.visible = true;
|
|
this.getHrmKQReportDetialInfo();
|
|
}
|
|
|
|
@action getHrmKQReportDetialInfo = () => {
|
|
const params = {
|
|
type: this.dateTabkey,
|
|
kqtype: 'leaveDays'
|
|
};
|
|
|
|
this.absenceDialog.loading = true;
|
|
if (this.hrmId) {
|
|
Object.assign(params, {
|
|
resourceId: this.hrmId
|
|
});
|
|
}
|
|
if (this.pDate) {
|
|
Object.assign(params, {
|
|
typevalue: this.pDate
|
|
});
|
|
}
|
|
|
|
API.getHrmKQReportDetialInfo(params).then(datas => {
|
|
['absenceDay', 'types', 'details'].forEach((v, index) => {
|
|
this.absenceDetail[v] = datas[v];
|
|
this.absenceDialog.loading = false;
|
|
});
|
|
})
|
|
}
|
|
|
|
getOverTimeTabDatas =() => {
|
|
return new Promise( (resolve,reject)=>{
|
|
API.getTab({
|
|
type: 'overtimeTotal'
|
|
}).then(datas=>{
|
|
const {status,tabs} = datas;
|
|
if (status === '1') {
|
|
this.overTimeTabDatas = tabs;
|
|
this.overTimeTabkey = tabs[0].key;
|
|
|
|
resolve();
|
|
}else{
|
|
message.warning(datas.message);
|
|
reject();
|
|
}
|
|
})
|
|
} )
|
|
}
|
|
|
|
handleOverTimeTabClick = (key) => {
|
|
this.overTimeTabkey = key;
|
|
|
|
this.getTableData();
|
|
}
|
|
|
|
|
|
} |