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();
}
}