import { observable, action } from 'mobx'; import * as mobx from 'mobx' import * as Api from '../apis/report'; import { WeaForm } from 'comsMobx'; import { WeaTableNew } from 'comsMobx' import { message, } from 'antd'; import { i18n } from '../public/i18n'; import * as Util from '../util/index'; import { WeaLocaleProvider, WeaLoadingGlobal } from 'ecCom'; import AuthorityStore from './domain/authority.js'; const getLabel = WeaLocaleProvider.getLabel; const { TableStore } = WeaTableNew; export class HrmPerStatusReport { @observable condition1 = []; @observable params = {}; @observable countDatas = []; @observable option1 = {}; @observable option2 = {}; @observable tabKey = '1'; @observable interval = '10'; @observable title = ''; @observable isIntervalShow = false; @observable pathname = 'basicConditionAnalysis'; @observable deadline = '暂无'; @observable linkName = '更多'; chartTitle1 = i18n.label.ranking; chartTitle2 = i18n.label.ranking; @observable isEchartsShow = true; @observable isLeftEchartsShow = true; @observable isRightEchartsShow = true; @observable visible = false; @observable cmd = ''; @observable tableStore = new TableStore(); @observable strokeColor = '#FF7F50'; @observable searchCondition = ''; @observable href = ''; @observable ids = []; @observable yAxisData = []; @observable linkList = ''; @observable paramsStr = ''; @observable winWidth = ''; @observable isApiOneFinished = false; @observable isApiTwoFinished = false; @observable authorityStore = new AuthorityStore(Api); getRight = ()=>{ return this.authorityStore.fetchAuthority() } @action getSearchCondition() { let params = { cmd: 'baseStatus' } Api.getSearchCondition(params).then((data) => { this.condition1 = data.items; this.setApiOneFinishedStatus(true); }); } setParams(params) { this.params = params; if (params.dateselect == '6' && (!params.fromdate || !params.enddate)) { return false; } if (params.company == '1' && !params.subcompanyid) { return false; } if (params.company == '2' && !params.departmentid) { return false; } if (params.local == '1' && !params.location) { return false; } this.getData(); } getData(tag) { let cmd; if (!tag) { cmd = this.getWholeCmd(this.pathname, this.tabKey); } else { if (tag == 'left') cmd = 'JobGroupRpDetail'; if (tag == 'right') cmd = 'JobActivityRpDetail'; if (tag == 'departmentStatistics') cmd = 'DepartmentRpAll'; if (tag == 'postStatistics') cmd = 'JobRpAll'; if (tag == 'search') cmd = this.cmd; this.setVisible(true); } let p = { cmd: cmd, ...this.params }; if (this.searchCondition) { p.keyword = this.searchCondition; this.objToStr({ ...this.params, keyword: this.searchCondition }); } if (this.pathname == 'basicConditionAnalysis' && (this.tabKey == '1' || this.tabKey == '3' || this.tabKey == '7') && !this.nonZeroVerification()) { p.agearea = this.interval; } this.setCmd(cmd); this.setHref('/api/hrm/resourceState/downloadExcel?cmd=' + this.getHref() + this.paramsStr); this.setStrokeColor(this.getColor()); this.objToStr(this.params); Api.getSearchResult(p).then((data) => { if (!data) { message.warning(i18n.message.dataNone()); return false; } const { status } = data; if (status == "-1") { const ats = this.authorityStore; ats.hasRight = false; ats.loading = false; } this.setApiTwoFinishedStatus(true); if (data.sessionkey) { this.tableStore.getDatas(data.sessionkey, 1); return false; } if (data.countDatas) { this.setCountDatas(data.countDatas); } if (data.linkList) { this.linkList = data.linkList; } if (this.pathname == 'departmentStatistics' && data.option && data.option.yAxis) { data.option.yAxis.triggerEvent = true; this.setIds(this.getIds(data.option.yAxis.data)); this.setyAxisData(this.getNewYAxisData(data.option.yAxis.data)); data.option.yAxis.data = this.yAxisData; } if (data.option && data.option.series && data.option.series[0].data && data.option.series[0].data.length > 0) { if (data.option.xAxis && data.option.yAxis && data.option.series[0].type == 'bar') { data.option.series[0].barWidth = this.setBarWidth(data.option.series[0].data); data.option.series[0].itemStyle = this.getItemStyle(); data.option.tooltip = {}; data.option.xAxis.splitLine = { show: false }; data.option.yAxis.axisLabel = this.getAxisLabel(); data.option.yAxis.axisPointer = this.getAxisPointer(); } if (data.option.series[0].type == 'pie') { let datas = data.option.series[0].data; for (let i = 0; i < datas.length; i++) { data.option.series[0].data[i].label = this.getLabel(); } data.option.tooltip = this.getToolTipForPieChart(); data.option.series[0].selectedOffset = 0; data.option.legend.selectedMode = false; } this.setOption(data.option, '1'); this.setEchartsShowStatus(true); } else { this.setEchartsShowStatus(false); } if (data.optionX && data.optionX.series && data.optionX.xAxis && data.optionX.yAxis && data.optionX.series[0].data && data.optionX.series[0].data.length > 0) { data.optionX.series[0].barWidth = this.setBarWidth(data.optionX.series[0].data); data.optionX.series[0].itemStyle = this.getItemStyle(); data.optionX.tooltip = {}; data.optionX.xAxis.splitLine = { show: false }; data.optionX.yAxis.axisLabel = this.getAxisLabel(); data.optionX.yAxis.axisPointer = this.getAxisPointer(); this.setLeftEchartsShowStatus(true); this.setOption(data.optionX, '1'); } else { this.setLeftEchartsShowStatus(false); } if (data.optionY && data.optionY.series && data.optionY.xAxis && data.optionY.yAxis && data.optionY.series[0].data && data.optionY.series[0].data.length > 0) { data.optionY.series[0].barWidth = this.setBarWidth(data.optionY.series[0].data); data.optionY.series[0].itemStyle = this.getItemStyle(); data.optionY.tooltip = {}; data.optionY.xAxis.splitLine = { show: false }; data.optionY.yAxis.axisLabel = this.getAxisLabel(); data.optionY.yAxis.axisPointer = this.getAxisPointer(); this.setRightEchartsShowStatus(true); this.setOption(data.optionY, '2'); } else { this.setRightEchartsShowStatus(false); } if (data.title && data.title.foottitle) { this.setDeadLine(data.title.foottitle); } if (data.title && data.title.btn) { this.setLinkName(data.title.btn); } if (data.title && data.title.title) { this.setChartTitle(data.title.title, '1'); } if (data.title && data.title.leftTitle) { this.setChartTitle(data.title.leftTitle, '1'); } if (data.title && data.title.rightTitle) { this.setChartTitle(data.title.rightTitle, '2'); } }); } setBarWidth(datas) { let len = datas.length; switch (len) { case 1: return '30%'; case 2: return '40%'; case 3: return '50%'; case 4: return '60%'; default: return '80%'; } } nonZeroVerification() { if (this.tabKey == '1' && this.interval < 0) { message.warning(getLabel('386441', "年龄区间不能小于0!")); return false; } if (this.tabKey == '3' && this.interval < 0) { message.warning(getLabel('386442', "工龄区间不能小于0!")); return false; } if (this.tabKey == '7' && this.interval < 0) { message.warning(getLabel('386443', "职级区间不能小于0!")); return false; } } getBasicCmd(key) { switch (key) { case '1': return 'AgeRp'; case '2': return 'SexRp'; case '3': return 'SeniorityRp'; case '4': return 'EduRp'; case '5': return 'WedlockRp'; case '6': return 'JobCallRp'; case '7': return 'JobLevelRp'; case '10': return 'UserKindRp'; case '11': return 'StatusRp'; case '12': return 'SecLevelRp'; } } getWholeCmd(pathname, key) { switch (pathname) { case 'basicConditionAnalysis': return this.getBasicCmd(key); case 'departmentStatistics': return 'DepartmentRp'; case 'postStatistics': return 'JobRp'; case 'jobStatusStatistics': return 'JobActivityAndGroupRp'; } } getChartTitle() { switch (this.cmd) { case 'DepartmentRpAll': return getLabel('386444', "人数最多的部门排名"); case 'JobRpAll': return getLabel('386445', "人数最多的岗位排名"); case 'JobGroupRpDetail': return getLabel('386446', "人数最多的职务类别排名"); case 'JobActivityRpDetail': return getLabel('386447', "人数最多的职务排名"); } } getTabName() { switch (this.tabKey) { case '1': return getLabel('386388', "年龄状况"); case '2': return getLabel('386389', "性别状况"); case '3': return getLabel('548320', "司龄状况"); case '4': return getLabel('386391', "学历状况"); case '5': return getLabel('469', "婚姻状况"); case '6': return getLabel('386392', "职称统计"); case '7': return getLabel('386393', "职级统计"); case '10': return getLabel('804', "用工性质"); case '11': return getLabel('386394', "状态统计"); case '12': return getLabel('683', "安全级别"); } } setKey(key) { this.tabKey = key; if (key == '1' || key == '3' || key == '7') { this.setIntervalShow(true); } else { this.setIntervalShow(false); } if (key == '1') this.setGap('10'); if (key == '3') this.setGap('2'); if (key == '7') this.setGap('5'); } getLabel() { return ({ normal: { formatter: [ '{b} | {c} | {d}%', ].join('\n'), } }) } getItemStyle() { return ({ normal: { color: '#6FBCEA' } }) } getAxisPointer() { return ({ formatter: function(params) { return params.value; } }) } getAxisLabel() { var that = this; return ({ formatter: function(value) { let len = that.getByteLen(value); if (len > 12) { return that.getCutStr(value, 12) + '...'; } else { return value; } } }) } getToolTipForPieChart() { return ({ trigger: 'item', formatter: "{b} : {c} ({d}%)" }) } getByteLen(val) { var len = 0; for (var i = 0; i < val.length; i++) { var a = val.charAt(i); if (a.match(/[^\x00-\xff]/ig) != null) { len += 2; } else { len += 1; } } return len; } getCutStr(value, len) { let arr = value.split(''); let cutArr = []; let count = 0; for (let i = 0; i < arr.length; i++) { if (this.checkIsChinese(arr[i]) && count < len) { cutArr.push(arr[i]); count += 2; } if (!this.checkIsChinese(arr[i]) && count < len) { cutArr.push(arr[i]); count += 1; } } return cutArr.join(''); } checkIsChinese(val) {   let reg = new RegExp("[\\u4E00-\\u9FFF]+", "g");   if (reg.test(val)) return true } pathToTitle() { switch (this.pathname) { case 'basicConditionAnalysis': this.setTitle(getLabel('382087', "基本状况分析")); break; case 'departmentStatistics': this.setTitle(getLabel('382094', "部门人数统计")); break; case 'postStatistics': this.setTitle(getLabel('382095', "岗位人数统计")); break; case 'jobStatusStatistics': this.setTitle(getLabel('382096', "职务状况统计")); break; default: this.setTitle(getLabel('386448', "数据统计与分析")); } } getColor() { switch (this.cmd) { case 'DepartmentRpAll': return '#7DC756'; case 'JobRpAll': return '#AC7CFF'; default: return '#FF7F50'; } } getHref() { switch (this.cmd) { case 'DepartmentRpAll': return 'DepartmentRp'; case 'JobRpAll': return 'JobRp'; case 'JobGroupRpDetail': return 'JobGroupRp'; case 'JobActivityRpDetail': return 'JobActivityRp'; } } isEmptyObject(obj) { for (let key in obj) { return false; } return true; } objToStr(obj) { let str = ''; if (!this.isEmptyObject(obj)) { for (let key in obj) { str = str + '&' + key + '=' + obj[key]; } } this.setParamsStr(str); } getIds(datas) { let arr = []; if (!(datas instanceof Array)) { return false; } for (let i = 0; i < datas.length; i++) { let id = datas[i].substring(datas[i].indexOf('{') + 1, datas[i].indexOf('}')).split(':')[1]; arr.push(id); } return arr; } getNewYAxisData(datas) { let arr = []; if (!(datas instanceof Array)) { return false; } for (let i = 0; i < datas.length; i++) { let data = datas[i].split('{')[0].replace(/\s+/g, ""); arr.push(data); } return arr; } getCurWindowWidth() { let that = this; window.onresize = function() { if (window.innerWidth) { that.setWinWidth(window.innerWidth); } else if ((document.body) && (document.body.clientWidth)) { that.setWinWidth(document.body.clientWidth); } } } /**************** #QC3421143# 基本状况分析明细数据**************************/ @observable dialogVisible = false; @observable tableStore = new TableStore(); @observable name = ''; @observable dataKey = ''; setDialogVisible(bool) { bool && this.getDetailTable(); this.dialogVisible = bool; } @action getDetailTable = () => { this.tableStore = new TableStore(); let cmd = this.getWholeCmd(this.pathname, this.tabKey); let p = { cmd: cmd, name: this.name, ...this.params }; if (this.searchCondition) { p.keyword = this.searchCondition; this.objToStr({ ...this.params, keyword: this.searchCondition }); } if (this.pathname == 'basicConditionAnalysis' && (this.tabKey == '1' || this.tabKey == '3' || this.tabKey == '7') && !this.nonZeroVerification()) { p.agearea = this.interval; } this.objToStr(this.params); Api.getDetailTable(p).then((res) => { this.dataKey = res.datas.datas; this.tableStore.getDatas(res.datas.datas,1) }); } @action exportExcel = () => { if (!this.dataKey) { return false; } const child = ( ); WeaLoadingGlobal.start({ indicator: child, tip: '正在导出请稍候...' }); const title = this.getTabName(); const params = { dataKey:this.dataKey, filename:`${title}(${this.name})` } Api.exportDetailExcel(params).then(data => { if (data.url) { WeaLoadingGlobal.end(); WeaLoadingGlobal.destroy(); window.location.href = Util.addContentPath(data.url); } }) } /**************** #QC3421143# 基本状况分析明细数据**************************/ setIntervalShow(bool) { this.isIntervalShow = bool; } setCountDatas(countDatas) { this.countDatas = countDatas; } setOption(option, arg) { if (arg == '1') this.option1 = option; if (arg == '2') this.option2 = option; } setGap(interval) { this.interval = interval; } setTitle(title) { this.title = title; } setDeadLine(deadline) { this.deadline = deadline; } setLinkName(linkName) { this.linkName = linkName; } setChartTitle(chartTitle, arg) { if (arg == '1') this.chartTitle1 = chartTitle; if (arg == '2') this.chartTitle2 = chartTitle; } setEchartsShowStatus(bool) { this.isEchartsShow = bool; } setLeftEchartsShowStatus(bool) { this.isLeftEchartsShow = bool; } setRightEchartsShowStatus(bool) { this.isRightEchartsShow = bool; } setPathName(pathname) { this.pathname = pathname; } setVisible(bool) { this.visible = bool; if (!bool) { this.searchConditionReset(); } } setCmd(cmd) { this.cmd = cmd; } setStrokeColor(color) { this.strokeColor = color; } setSearchCondition(condition) { this.searchCondition = condition; } searchConditionReset() { this.searchCondition = ''; } setHref(href) { this.href = href; } setIds(ids) { this.ids = ids; } setyAxisData(yAxisData) { this.yAxisData = yAxisData; } setParamsStr(str) { this.paramsStr = str; } setApiOneFinishedStatus(bool) { this.isApiOneFinished = bool; } setApiTwoFinishedStatus(bool) { this.isApiTwoFinished = bool; } setWinWidth(winWidth) { this.winWidth = winWidth; } optionReset() { this.option1 = {}; } conditionReset() { this.condition1 = []; } paramReset() { this.params = {}; } apiFinishedStatusReset() { this.isApiOneFinished = false; this.isApiTwoFinished = false; } tabKeyReset() { this.tabKey = '1'; } }