import * as Api from '../apis/useDemand'; //TODO import { observable, action, } from 'mobx'; import { WeaForm, WeaTableNew, WeaSwitch, } from 'comsMobx'; import { WeaLocaleProvider, WeaFormItem, WeaMoreButton, } from 'ecCom'; import { message, Button, Row, Col, Modal, } from 'antd'; import {addContentPath} from '../util/index.js' const { TableStore } = WeaTableNew; const getLabel = WeaLocaleProvider.getLabel; const confirm = Modal.confirm; export class HrmUsedemand { //*************************index******************************** @observable main = { authorized: false, loading: true, } @action getAuth = () => { Api.getAuth().then(cb => { const { status, hasRight } = cb; if (status == '1') { hasRight && this.grantAuth(); this.getTableInfo(); this.stoploading(); } else { message.error(); } }).catch(error => { message.error(); }); } @action grantAuth = () => { this.main.authorized = true; } @action stoploading = () => { this.main.loading = false; } refresh = () => { this.getRadioGroupDatas(); } onresize = () => { const { key } = this.tabs; [0, 1, 2].map(val => { this.barCharts[`echart${val}`] && this.barCharts[`echart${val}`].chart && this.barCharts[`echart${val}`].chart.resize(); }) this.tabs[`echart${key}`] && this.tabs[`echart${key}`].chart && this.tabs[`echart${key}`].chart.resize(); } //*************************Top******************************* @observable top = { title: getLabel('6131', "用工需求"), //todo menu: [], } @action getMenus = () => { Api.getButtonsMenu().then(cb => { const { api_status, btnMenu } = cb; if (api_status) { this.top.menu = btnMenu; } else { message.error(); } }).catch(error => { message.error(); }); } get menus() { const top = this.top.menu.filter(item => item.isTop == '1'), right = this.top.menu; let buttons = [], dropMenuDatas = []; const { tableStore } = this.table; top.map((item, i) => { buttons.push(); //TODO }); right.map((item, index) => { let obj = { key: item.menuFun, icon: , content: item.menuName, disabled: tableStore.loading, onClick: () => this[item.menuFun](item.menuFun) } if (item.menuFun == 'log' || item.menuFun == 'collection') { obj.disabled = true; } dropMenuDatas.push(obj); }) return { buttons, dropMenuDatas }; } @action handleTopBtnsClick = (item) => { this[item.menuFun] && this[item.menuFun](item.menuFun) } exportExcel = () => { const params = { ...this.radioGroup.params }; Api.getDetailSearchList(params).then(datas => { const { sessionkey } = datas; Api.exportExcel(sessionkey).then(data => { if (data.url) { window.location.href = addContentPath(data.url); } }) }) // this.table.tableStore.exportAll(); } //*************************RadioGroup******************************* @observable radioGroup = { config: [], loading: false, } @action getRadioGroupDatas = () => { this.radioGroup.loading = true; this.radioGroup.config = []; Api.getRadioGroupDatas().then(cb => { const { api_status, conditions } = cb; if (api_status) { this.radioGroup.config = conditions[0].items; this.radioGroup.loading = false; } else { message.error(); } }).catch(error => { message.error(); }); } @action resetRadioGroup = () => { this.radioGroup.config = []; this.radioGroup.loading = false; } @action radioGroupCallBack = (params) => { const { demandRegDateSelect, demandRegYear, company, subcompanyid, departmentid, jobtitle, jobtitleId, } = params; this.radioGroup.params = params; ['getBarChartsDatas', 'getSummaryDatas', 'getTabsDatas'].map(f => { const b1 = demandRegDateSelect == '6' && !demandRegYear, b2 = (company == '1' && !subcompanyid) || (company == '2' && !departmentid), b3 = jobtitle == '1' && !jobtitleId; if ([b1, b2, b3].some(b => b)) { return } this[f](); }) } //*************************Top******************************* @observable summary = { countDatas: [], loading: false, } @action getSummaryDatas = () => { this.summary.loading = true; const { params = {} } = this.radioGroup; Api.getSummaryDatas(params).then(cb => { const { api_status, countDatas } = cb; if (api_status) { this.summary.countDatas = countDatas; this.summary.loading = false; } else { message.error(); } }).catch(error => { message.error(); }); } @action resetSummaryDatas = () => { this.summary.config = []; this.summary.loading = false; } //*************************BarCharts******************************* @observable barCharts = { charts: [], loading: false, } @action getBarChartsDatas = () => { this.barCharts.loading = true; const { params = {} } = this.radioGroup; Api.getBarChartsDatas(params).then(cb => { const { api_status, charts } = cb; if (api_status) { this.adjustCharts(charts); this.barCharts.charts = charts; this.barCharts.loading = false; } else { message.error(); } }).catch(error => { message.error(); }); } @action adjustCharts = (charts) => { [0, 1].map(v => { const yAxis = charts[v].option.yAxis, series = charts[v].option.series, { data } = series[0]; series[0].barWidth = `${data.length*9}%`; yAxis.data = this.getYAxisData({ datas: yAxis.data, index: v }); charts[v].option.yAxis.axisLabel = this.getAxisLabel(); }) } getYAxisData = (params) => { const { datas, index } = params; let nd = [], tIds = []; datas.map(data => { data.split(' ').map((d, i) => { if (i == 0) { nd.push(d); } else { tIds.push(d.split(':')[1].split('}')[0]); } }); }); this.barCharts[(index == '0') ? 'lIds' : 'rIds'] = tIds; return nd; } getAxisLabel = () => { var _this = this; return ({ formatter: function(value) { let len = _this.getValueLength(value); if (len > 12) { return `${_this.sliceValue(value, 12)}...`; } else { return value; } } }) } sliceValue(value, len) { let temp = []; let count = 0; value.split('').map(val => { if (count < len) { temp.push(val); count += this.checkIsChinese(val) ? 2 : 1; } }); return temp.join(''); } getValueLength = (values) => { //TODO let len = 0; values.split('').map((v, i) => { const a = v.charAt(i); if (a.match(/[^\x00-\xff]/ig) != null) { len += 2; } else { len += 1; } }); return len; } checkIsChinese(val) {   let reg = new RegExp("[\\u4E00-\\u9FFF]+", "g");   if (reg.test(val)) return true } @action resetBarCharts = () => { this.barCharts.charts = []; this.barCharts.loading = false; } @action setRef = (params) => { const { ref, alias, type } = params; if (type == 'barCharts') { this.barCharts[alias] = ref; } else { this.tabs[alias] = ref; } } //*************************Tabs******************************* @observable tabs = { charts: [], key: '0', loading: false, } @action getTabsDatas = () => { this.tabs.loading = true; const { params = {} } = this.radioGroup; Api.getTabsDatas(params).then(cb => { const { api_status, charts, } = cb; if (api_status) { this.adjustChart(charts); this.tabs.charts = charts; this.tabs.loading = false; } else { message.error(); } }).catch(error => { message.error(); }); } adjustChart = (charts) => { charts.map(chart => { const datas = chart.option.series[0].data; datas.map(d => { d.label = this.formatLabel(datas.length); }) }); } formatLabel(length) { if (length < 10) { return ({ normal: { formatter: [ '{title|{b}}{abg|}', '{c} | {rate|{d}%}', ].join('\n'), rich: { title: { color: '#666', align: 'center', }, abg: { width: '100%', align: 'right', height: 25, }, rate: { fontFamily: 'Times New Roman', } } } }) } else { return ({ normal: { formatter: [ '{b} | {c} | {d}%', ].join('\n'), } }) } } @action resetTabs = () => { this.tabs.charts = []; this.tabs.key = '0'; this.tabs.loading = false; } @action tabsCallback = (key) => { this.tabs.key = key; this.getTabsDatas(); } //*************************MainDialog******************************* @observable mainDialog = { visible: false, title: '', } get buttons() { const { tableStore } = this.table; const buttons = [ (), () ] return buttons; } get style() { const { type } = this.mainDialog; return { width: ['more0', 'more1'].includes(type) ? 800 : 1050, height: 700 } } get dropMenuDatas() { const { tableStore } = this.table; const datas = [{ key: '0', disabled: tableStore.loading, icon: , content: getLabel('28343', "导出Excel"), onClick: () => tableStore.exportAll(), }, { key: '1', disabled: tableStore.loading, icon: , content: getLabel('32535', '显示列定制'), onClick: () => { tableStore.setColSetVisible(true); tableStore.tableColSet(true) }, }]; return datas; } @action openDialog = (params) => { const { type, field, index } = params; this.mainDialog.type = type; this.mainDialog.visible = true; this.tab.field = field; //TODO 拼接field this.barCharts.index = index; let title; if (type == 'more0') { title = getLabel('391170', "需求最多部门排名") } else if (type == 'more1') { title = getLabel('391171', "需求最多岗位排名") } else { title = getLabel('15729', "具体信息") } this.mainDialog.title = title; } @action closeDialog = () => { this.mainDialog.visible = false; } //*************************Tab******************************* @observable tab = { isPanelShow: false, conditionCount: 10, //TODO form: new WeaForm(), conditions: [], searchBaseValue: '', } get buttonsAd() { const { form } = this.tab; let buttonsAd = []; [0, 1, 2].map((v, i) => { const func = (v == 0) ? 'handleSearch' : 'changePanelStatus'; const name = (v == 0) ? getLabel(82529, '搜索') : (v == 1) ? getLabel(27088, '重置') : getLabel(32694, '取消'); buttonsAd.push(); }); return buttonsAd; } get searchsAd() { const { form, conditions, field, } = this.tab, { isFormInit } = form; let arr = []; isFormInit && conditions.map(c => { c.items.map((field, index) => { arr.push(
{}
) }) }) if (isFormInit && field) { const { index } = this.barCharts; form.updateFields({ [index == '0' ? 'departmentid' : 'jobtitleId']: field }) } return ( e.keyCode == 13 && e.target.tagName === "INPUT") && this.handleSearch()} >{arr} } @action changePanelStatus = (bool) => { this.tab.isPanelShow = bool; } @action handleSearch = () => { const { isPanelShow } = this.tab; isPanelShow && this.changePanelStatus(false); this.getTableInfo(); } @action getSearchCondition = () => { Api.getSearchCondition().then(rs => { const { api_status, conditions } = rs; if (api_status) { this.tab.conditions = conditions; this.tab.form.initFormFields(conditions); } else { message.error(); } }).catch(error => { message.error(); }); } @action resetTab = () => { this.tab.isPanelShow = false; this.tab.conditions = []; this.tab.form = new WeaForm(); } @action setSearchBaseValue = (value) => { this.tab.searchBaseValue = value; } //*************************table******************************* @observable table = { tableStore: new TableStore(), } @action getTableInfo = () => { const { form, searchBaseValue, field, } = this.tab, { type } = this.mainDialog, { params } = this.radioGroup, { index } = this.barCharts; let func; let cParams; if (type == 'more0') { func = 'getMoreDeptList'; cParams = { departmentName: searchBaseValue, ...params, }; } else if (type == 'more1') { func = 'getMoreJobtitleList'; cParams = { jobtitleName: searchBaseValue, ...params, }; } else { func = 'getDetailSearchList'; cParams = form.isFormInit ? form.getFormParams() : { [index == '0' ? 'departmentid' : 'jobtitleId']: field && field.value, ...params, }; Object.assign(cParams, { jobtitleName: searchBaseValue, }); } Api[func](cParams).then(cb => { const { api_status, sessionkey, } = cb; if (api_status) { this.table.tableStore.getDatas(sessionkey, 1); } else { message.error(); } }).catch(error => { message.error(); }); } isEmptyObject = (obj) => { if (Object.keys(obj) == 0) return true } @action resetTable = () => { this.table.tableStore = new TableStore(); } }