import { observable, action, reaction, } from "mobx"; import HrmBaseStore from "./baseStore"; import { message, Button, Menu, Dropdown, Modal } from 'antd'; import { WeaSelect, WeaBrowser, WeaLocaleProvider, WeaTools, WeaDatePicker } from 'ecCom'; import { WeaTableNew } from "comsMobx"; import * as api from "../apis/monthCalendar"; import find from 'lodash/find'; import findIndex from 'lodash/findIndex'; import filter from 'lodash/filter'; import flattenDeep from 'lodash/flattenDeep'; import remove from 'lodash/remove'; import {i18n} from '../public/i18n'; import moment from 'moment'; import {addContentPath} from '../util/index.js' const { TableStore } = WeaTableNew; const getLabel = WeaLocaleProvider.getLabel; export class HrmAttendanceMonthCalendarReport extends HrmBaseStore { /********************* unobservable list *********************/ shortWeekdays = this.getLocale().lang.format.veryShortWeekdays; conditionData; radioGroupVal = {} selectedSerial = ''; detailTableInfo; selectRefs = []; detailParams = {}; displayColumns = ['lastname', 'subcompany', 'department', 'jobtitle', 'workcode', 'kqCalendar']; /********************* unobservable list *********************/ /********************* dialog info setting *********************/ /********************* dialog info setting *********************/ /********************* observable list *********************/ @observable rightMenus = []; @observable spinning = false; @observable spinTip = ''; @observable pageIndex = 1; @observable pageSize = 10; @observable total = 0; @observable radioGroupConfig = []; @observable queryDate; @observable table = { columns: [], datas: [] } @observable showHasNotAccount = false; @observable replaceDatas = []; @observable holidays = []; @observable dialogParams = { moduleName: 'hrm', visible: false, style: { width: 1000, height: 600 }, onCancel: () => { this.dialogParams.visible = false; this.detailParams = {}; } }; @observable detailTable = new TableStore(); @observable tabConfig = { tabs: [], keyParam: "viewCondition", activeTabKey: "1", tabChangeHandle: key => this.setActiveTab(key, this.tabConfig.resourceId) }; /********************* observable list *********************/ /********************* computed list *********************/ /********************* computed list *********************/ /********************* action list *********************/ @action clearData = () => { this.radioGroupConfig = []; this.queryDate = moment().add('M', -1).format('YYYY-MM'); this.pageIndex = 1; this.pageSize = 10; this.total = 0; this.radioGroupVal = {}; this.showHasNotAccount = false; this.replaceDatas.length = 0; this.clearSerial(); }; @action clearSerial = () => { this.selectedSerial = ''; } @action getQueryParams = (pageIndex, pageSize) => { this.pageIndex = pageIndex || 1; const params = { pageIndex: this.pageIndex, ...this.radioGroupVal, isNoAccount: this.showHasNotAccount ? '1' : '0', attendanceSerial: this.selectedSerial || '', month: this.queryDate } pageSize && Object.assign(params, {pageSize}); return params; } @action init = () => { this.clearData() this.containerInitFinished.authorized = true; this.containerInitFinished.init = true; api.init().then(rs => { rs.map((data, index) => { if (data.status === "1" || data.status == null) { switch (index) { case 0: const {conditions, memo} = data; this.conditionData = data; this.memo = memo; this.generateRadioGroupConfig(conditions); break; case 1: this.rightMenus = data.btnMenu; break; } } }); }, error => {}) } @action generateRadioGroupConfig = (data) => { let config = []; config = config.concat(data); config[0].com =
this.radioGroupConfig = config; } @action onQueryDateChangeHandle = v => { this.queryDate = v; this.getKQReport(this.getQueryParams(1)); } @action getTopProps = () => { let buttons = [ , ]; let menus = []; menus.push({ key: '0', content: buttons[0].props.title, icon: , onClick: () => this.showAll() }); this.toJS(this.rightMenus).map((menu, index) => { index > 0 && menus.push({ key: index.toString(), content: menu.menuName, icon: , onClick: () => { switch(menu.type){ case "BTN_Export_Excel": this.exportExcel(); break; case "BTN_KQ_REPORT_FORMAT": this.formatData(menu.menuName); break; } } }); }); menus.push({ key: menus.length.toString(), content: getLabel(354, '刷新'), icon: , onClick: () => this.getKQReport(this.getQueryParams()) }); return { buttons, menus: [ ...menus, ...this.getBasicMenus("HRM_ENGINE_HRM_ANNUAL_MANAGER_SET") ] }; }; redirectToChecking = resourceId => { window.location.href = addContentPath(`/wui/index.html#/main/attendance/checking/${resourceId}?fromcard=true`); } getStyle = d => { if(d == null) return {}; const {status, flowStatus} = d; let style = {}; if(flowStatus != null && flowStatus != ''){ style.background = (flowStatus == '0' ? this.memo[1].color : this.memo[2].color); style.color = '#2195FB'; }else if(status != null && status != ''){ switch(d.status){ case '-1': break; case '0': style = {color: '#48C651'}; break; case '5': style = {color: '#2195FB'}; break; default: style = {color: '#2195FB', background: this.memo[0].color}; break; } } return style; // switch(d.status){ // case '': // return {} // case '-1': // return {}; // case '0': // return {color: '#48C651'}; // default: // return {color: '#2195FB'}; // } } @action convertColumns = (columns) => { columns.map((c, i) => { delete c.width; c.render = (text, record, index) => { if (c.dataIndex == 'lastname') { return this.redirectToChecking(record.resourceId)} title={text}>
{text}
; } else{ let d = record[c.dataIndex]; if(d){ return (
{ d.length > 0 &&
{(d[0].statusName || '').substring(0, 2)}
} { d.length > 1 ?
{(d[1].statusName || '').substring(0, 2)}
:
{''}
}
) }else{ d = ['', '']; return
{d[0] || ''}
{d[1] || ''}
} } } }); return columns; } @action getKQReport = params => { if (this.spinning) return; this.spinning = true; api.getKQReport({ data: JSON.stringify(params) }).then(data => { if (data.status === '1' || data.status == null) { this.holidays = data.holidays; this.table.columns = this.convertColumns(data.columns); this.table.datas = data.datas; this.pageIndex = data.pageindex; this.pageSize = data.pagesize || 10; this.total = data.count; } else { message.error(data.message); } this.spinning = false; }, error => this.spinning = false); } @action onRadioGroupChange = params => { this.radioGroupVal = params; switch (params.viewScope) { case '1': if (params.subCompanyId == null || params.subCompanyId == '') { return; } break; case '2': if (params.departmentId == null || params.departmentId == '') { return; } break; case '3': if (params.resourceId == null || params.resourceId == '') { return; } break; } this.getKQReport(this.getQueryParams(1)); } @action showAll = () => { this.showHasNotAccount = !this.showHasNotAccount; this.getKQReport(this.getQueryParams()); } @action exportExcel = () => { if(this.spinning) return; this.spinning = true; this.spinTip = getLabel('500702','导出数据中,请稍候'); const params = { ...this.getQueryParams(), showColumns: this.displayColumns }; api.exportExcel({data:JSON.stringify(params)}).then(data => { this.spinning = false; this.spinTip = ''; if(data.status === '1' && data.url != null && data.url.trim().length > 0){ WeaTools.downloadFile(addContentPath(data.url), "GET"); Modal.confirm({ title: getLabel(558,'提示') , content: getLabel('导出成功'), }); }else if(data.status === '-1'){ Modal.confirm({ title: getLabel(558,'提示') , content: data.message, }); } }, error => { this.spinning = false; this.spinTip = ''; }) } @action setActiveTab = (key, resourceId) => { // const tabIndex = this.getTabIndex(this.toJS(this.tabConfig.tabs), key); // if (tabIndex < 0) return; this.tabConfig.activeTabKey = key || this.tabConfig.tabs[0].viewCondition; this.detailParams.tabKey = this.tabConfig.activeTabKey; this.callDetail(resourceId); }; @action showDetail = (resourceId, dataIndex, columnType, source, isCalendar) => { this.detailTableInfo = {}; let params = { ...this.radioGroupVal, isNoAccount: this.showHasNotAccount ? '1' : '0', attendanceSerial: this.selectedSerial || '' }; if(resourceId != null) params.resourceId = resourceId; if (isCalendar) { params = { type: source.type, date: dataIndex }; } else { params = { ...params, type: dataIndex }; } this.detailParams = params; api.getTabs({ type: params.type }).then(data => { if (data.status === '1') { const { tabs: tabArr } = data; let tabs = [], activeIndex = '1'; if (tabArr != null && tabArr.length > 0) { tabArr.map((tab, index) => { let tabInfo = { color: "#000000", groupId: `g${index}`, title: tab.title, viewCondition: tab.key }; tabs.push(tabInfo); if (tab.selected) activeIndex = tab.key; }); } this.tabConfig.tabs = tabs; this.tabConfig.resourceId = resourceId; this.setActiveTab(activeIndex, resourceId); } else { } }, error => {}) } disposer = reaction(() => this.dialogParams.visible, visible => { if (!visible) this.iskqCalendarDialog = false; }) @observable iskqCalendarDialog = false; @observable detail = { userInfo: {}, signInfo: '', columns: [], datas: [], } @action showSignDetail = (params) => { this.iskqCalendarDialog = true; api.getKQReportSignDetial(params).then(data => { if (data.status === '1') { const { userInfo, signInfo, table, dialogTitle } = data; Object.assign(this.detail.userInfo, userInfo); this.detail.signInfo = signInfo.signInfo; ['columns', 'datas'].map(v => { this.detail[v] = table[v]; }); this.dialogParams.title = dialogTitle; this.dialogParams.visible = true; } else { message.error(data.message); } }, error => {}) } @action callDetail = (resourceId) => { let params = {...this.detailParams}; if(resourceId != null) params.resourceId = resourceId; api.getKQReportDetial(params).then(data => { if (data.status === '1') { const { dialogTitle, sessionkey } = data; this.dialogParams.title = dialogTitle; this.detailTable = new TableStore(); this.detailTable.getDatas(sessionkey); this.dialogParams.visible = true; } else { message.error(data.message); } }, error => {}) } @action formatData = content => { this.confirmInfo({ content, onOk: () => { api.formatData({ data: JSON.stringify(this.getQueryParams()) }).then(data => { message.success(i18n.message.opSuccess()); this.getKQReport(this.getQueryParams()); }, error => {}) } }); } /********************* action list *********************/ } export const hrmAttendanceMonthCalendarReport = new HrmAttendanceMonthCalendarReport();