weaver_trunk_cli/pc4mobx/hrm/stores/outsideV2.js

387 lines
12 KiB
JavaScript

import { observable, action, computed } from 'mobx';
import {WeaLocaleProvider} from 'ecCom';
import {WeaTableNew} from 'comsMobx';
import {Button, message} from 'antd';
import HrmBaseStore from './baseStore';
import * as api from '../apis/outside';
import moment from 'moment';
import {i18n} from '../public/i18n';
import {addContentPath} from '../util/index'
const {TableStore} = WeaTableNew;
const {getLabel} = WeaLocaleProvider;
class OutsideV2 extends HrmBaseStore{
@action init = async () => {
this.clearData();
this.getTab();
this.getData();
}
@action clearData = () => {
this.selectedDate = new moment().format('YYYY-MM-DD');
this.selectedIds = '';
this.isMult = false;
this.checkedDatas = false;
this.selectedTabKey = '0';
this.selectedDateTabKey = '0';
this.hasRight = true;
}
@computed get topProps(){
const d = ecCom.WeaTools.getIconBGC('hrm');
return {
title: getLabel('518268', "外勤签到"),
icon: <i className={d.icon}/>,
iconBgcolor: d.iconBgcolor,
showDropIcon: true,
...this.topBtnAndMenus
}
}
@computed get topBtnAndMenus(){
const buttons = [], dropMenuDatas = [];
this.selectedTabKey == '2' && [{isTop: '1', menuIcon: 'icon-coms-export', menuName: getLabel(28343, '导出Excel'), onClickHandle: this.exportData}].map((btn, index) => {
const {isTop, menuIcon, menuName, onClickHandle, disabled} = btn;
if(isTop == '1'){
buttons.push(
(
<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@bv327s@${index}`} type='primary' onClick={onClickHandle} disabled={disabled||false}>{menuName}</Button>
)
)
}
dropMenuDatas.push({
key: index.toString(),
content: menuName,
icon: <i className={menuIcon}/>,
onClick: onClickHandle,
disabled: disabled || false
});
})
return {buttons, dropMenuDatas};
}
//#region orgtreee props
@observable _isMult = false;
@computed get isMult(){return this._isMult}
set isMult(v){
this._isMult = v;
!v && (this.checkedDatas = []);
}
@observable checkedDatas = [];
@observable _browserReplaceDatas = [];
@computed get browserReplaceDatas(){return this._browserReplaceDatas}
set browserReplaceDatas(v){this._browserReplaceDatas = v}
@computed get rootid(){
if(this.browserReplaceDatas.length > 0)
return {
rootid: this.browserReplaceDatas[0].id
}
return {};
}
renderNodeId = item => item.id;
treeNodeClickHandle = e => {
if(this.isMult)
return;
this.selectedIds = e.node.props.id;
this.hrmName = e.node.props.name;
this.getData();
}
onTreeNodeCheckHandle = (ids, datas) => {
if(!this.isMult)
return;
if(ids){
this.selectedIds = ids.join(',');
}
this.getData();
}
@computed get orgTreeProps(){
return {
dataUrl: '/api/hrm/base/getHrmResourceTree',
ref: 'orgTree',
rootKey: 'rootManager',
renderNodeId: this.renderNodeId,
isMult: this.isMult,
checkStrictly: false,
checkedDatas: this.checkedDatas,
treeNodeClick: this.treeNodeClickHandle,
onCheck: this.onTreeNodeCheckHandle,
params: this.rootid
}
}
//#endregion
//#region tab
@observable selectedTabKey = '';
@observable tabData = [];
@computed get tabProps(){
return {
datas: this.tabData,
keyParam: 'viewcondition',
selectedKey: this.selectedTabKey,
onChange: this.onTabChangeHandle
}
}
@action getTab = () => {
this.tabData = [
{
viewcondition: '0',
title: getLabel('387101', '时间视图'),
}, {
viewcondition: '1',
title: getLabel('387102', '地图视图'),
}, {
viewcondition: '2',
title: getLabel('387103', '明细'),
},
];
}
@action onTabChangeHandle = async key => {
this.selectedTabKey = key;
if(key == 2){
this.hasRight = true;
this.selectedIds = '';
this.draw = null;
this.conditionParams = {};
this.getCondition();
}else
this.getData();
}
//#endregion
//#region searchbar
@observable _selectedDateTabKey = '0';
@computed get selectedDateTabKey(){return this._selectedDateTabKey}
set selectedDateTabKey(v){this._selectedDateTabKey = v}
get dateTabDatas(){
return [{
title: getLabel(518269, '今天'),
key: '0',
}, {
title: getLabel('82640', "昨天"),
key: '1',
}, {
title: getLabel(383428, '本月'),
key: '2',
}];
}
@observable _selectedDate = new moment().format('YYYY-MM-DD');
@computed get selectedDate(){return this._selectedDate}
set selectedDate(v){this._selectedDate = v}
@action onDatePickerChangeHandle = (v1, v2) => {
this.selectedDate = v2;
this.getData();
}
@computed get datePickerProps(){
return {
arrow: true,
type: (this.selectedDateTabKey == 2 ? 'month' : 'day'),
date: this.selectedDate,
onChange: this.onDatePickerChangeHandle
}
}
//#region
//#region 时间视图、地图视图获取数据
selectedIds = '';
hrmName = '';
@observable hasRight = false;
@observable timeData = [];
@observable table = new TableStore();
@observable _showSignInfo = false;
@computed get showSignInfo(){return this._showSignInfo}
set showSignInfo(v){
this._showSignInfo = v;
this.getData(true);
}
@action getData = async (refresh = false) => {
this.showWeaLoadingGlobal();
const params = {
cmd: (this.selectedTabKey == '0' ? 'timeData' : (this.selectedTabKey == '1' ? 'mapData' : 'detialData')),
}
if(this.selectedTabKey != 2){
Object.assign(params, {
loaddata: '1',
signtype: (this.showSignInfo ? 1 : 0),
fromDate: this.selectedDate,
toDate: this.selectedDate
});
this.selectedIds && Object.assign(params, {resourceId: this.selectedIds});
}else{
Object.assign(params, this.conditionParams);
}
// const data = await api.getHrmMobileSignInInfo(params)
ecCom.WeaTools.callApi('/api/hrm/kq/mobilesignin/getHrmMobileSignInInfo', 'POST', params).then((data)=>{
if(data.status=='1'){
this.hasRight = (data.status );
if(this.selectedTabKey == '2'){
this.table = new TableStore();
this.table.getDatas(data.sessionkey, 1);
}else{
this.timeData = data.result || [];
this.selectedTabKey == '1' && refresh && this.draw && this.draw();
}
this.hideWeaLoadingGlobal();
}else{
message.error(data.api_errormsg)
this.hideWeaLoadingGlobal();
}
})
}
//#endregion
//#region 明细条件
@observable config = [];
conditionParams = {};
@action onChangeHandle = params => {
console.debug(params);
const {typeselect, fromDate, toDate} = params;
if(typeselect == '6' && fromDate.length == 0 && toDate.length == 0) return;
this.conditionParams = params;
this.getData();
}
@computed get radioGroupProps(){
return {
config: this.config,
onChange: this.onChangeHandle
}
}
@action getCondition = async () => {
const data = await api.getSearchCondition();
if(data.api_status){
const {condition} = data;
const configfirstrow = {
label: i18n.label.date(),
options: [{
key: '0',
showname: i18n.label.all(),
}, {
key: '1',
showname: i18n.label.today(),
selected: true,
}, {
key: '2',
showname: i18n.label.tswk(),
}, {
key: '3',
showname: i18n.label.tsmth(),
}, {
key: '4',
showname: i18n.label.tssn(),
}, {
key: '5',
showname: i18n.label.tsyr(),
}, {
key: '7',
showname: i18n.label.preMonth(),
}, {
key: '8',
showname: i18n.label.preYear(),
}, {
key: '6',
showname: i18n.label.dateRange(),
}],
domkey: ['typeselect'],
selectLinkageDatas: {
6: {
conditionType: 'RANGEPICKER',
domkey: ['fromDate', 'toDate'],
},
},
labelcol: 4,
fieldcol: 20,
};
condition[0].items.unshift(configfirstrow);
this.config = condition[0].items;
}else{
message.error(data.message);
}
}
//#endregion
@action handleViewClick = async id => {
const data = await api.getShowSignImg({id});
const {
signImgIds
} = data;
if (signImgIds) {
const imgPool = signImgIds.split(',').map(id => `/weaver/weaver.file.FileDownload?fileid=${id}`);
this.doCarousel(imgPool, 0);
}
}
doCarousel = (imgPool, index) => {
if (window.IMCarousel) {
window.IMCarousel.showImgScanner4Pool(true, imgPool, index, null, window.top);
} else {
loadjs([
addContentPath('/social/js/drageasy/drageasy.js'),
addContentPath('/social/js/bootstrap/js/bootstrap.js?v=20171218'),
addContentPath('/social/im/js/IMUtil_wev8.js'),
addContentPath('/social/js/imcarousel/imcarousel.js')
], () => {
window.IMCarousel.showImgScanner4Pool(true, imgPool, index, null, window.top);
});
}
}
@action exportData = () =>{
ecCom.WeaTools.callApi('/api/hrm/kq/mobilesignin/exportSignExcel', 'GET').then((data)=>{
if(data.status){
this.table.exportAll();
}
}).catch(e=>{
message.error('您没有权限导出')
})
}
@observable _locationInfoDialogVisible = false;
@computed get locationInfoDialogVisible(){return this._locationInfoDialogVisible}
set locationInfoDialogVisible(v){this._locationInfoDialogVisible = v}
@action onLocationInfoDialogCancelHandle = () => this.locationInfoDialogVisible = false;
@observable selectedSignInfo;
@action showLocationInfo = signInfo => {
this.selectedSignInfo = signInfo;
this.locationInfoDialogVisible = true;
}
@computed get locationInfoDialogProps(){
return {
visible: this.locationInfoDialogVisible,
onCancel: this.onLocationInfoDialogCancelHandle,
closable: true,
style: {width: 700, height: 500},
title: getLabel('386506',"位置详情"),
icon: 'icon-coms-hrm',
iconBgcolor: '#008572',
parentClassName: 'outside_location_info'
}
}
}
export const outsideV2 = new OutsideV2();