import { observable, action, computed, reaction, } from 'mobx'; import { WeaTableNew, } from 'comsMobx'; import { WeaTools, WeaMoreButton, WeaPopoverHrm, WeaLocaleProvider, } from 'ecCom'; import { message, Modal } from 'antd'; import { fetch, getTopButtons, getDropMenuDatas, getMenusCreationConfig, componentReset, exportExcel, } from '../util/save-time-util.js'; import { jumpToHrmSubCompany, jumpToHrmDept, jumpToHrmPost, } from '../util/pure-util.js'; import CheckboxGroup from '../components/vacationBalanceReportCopy/CheckboxGroup'; import * as asyncFetch from '../apis/vacationBalanceReport'; import{addContentPath}from '../util/index.js'; const getLabel = WeaLocaleProvider.getLabel; const { TableStore } = WeaTableNew; class HrmVacationBalanceReportCopy { @observable _showVacRadioGroup = true; @computed get showVacRadioGroup(){return this._showVacRadioGroup} set showVacRadioGroup(v){ this._showVacRadioGroup = v; setTimeout(() => { this.reCalculateTableHeight = new Date().getTime(); }, 0) } domRef = {}; @observable _reCalculateTableHeight = new Date().getTime(); @computed get reCalculateTableHeight(){return this._reCalculateTableHeight} set reCalculateTableHeight(v){this._reCalculateTableHeight = v} @computed get tableHeihgt(){ this.reCalculateTableHeight; const topHeight = this.domRef.top && this.domRef.top.refs.content ? this.domRef.top.refs.content.clientHeight : 0; const tabHeight = this.domRef.tab ? $(this.domRef.tab)[0].clientHeight : 0; const h = topHeight - tabHeight; return h <= 0 ? 0 : h; } @action setDomRef = (dom, type) => { dom && Object.assign(this.domRef, {[type]: dom}) && setTimeout(() => this.reCalculateTableHeight = new Date().getTime(), 500); } //************权限************* @observable pageAccessPermission = { hasRight: false, loading: true, } @action getPermissionInfo = () => { fetch({ asyncFetch, name: 'getHasRight', logic: (cb) => { const { hasRight } = cb; if (hasRight) { this.pageAccessPermission.hasRight = true; } this.pageAccessPermission.loading = false; } }); } //*************头部************** topComponentStaticProps = { icon: , iconBgcolor: '#217346', showDropIcon: true, }; @observable isNoAccountShow = false; @observable top = { btnMenu: [], } excel = () => { if (this.table.datas.length === 0) { message.warning(getLabel('503890', '暂无数据导出')); return } // const downloadUrl = addContentPath('/api/kq/balanceofleaverp/exportExcel'); const params = { ...this.tableAsyncFetchParams, displayColumn: this.checkedItems.toString(), reportType:'kqReport' }; // exportExcel(params, downloadUrl); asyncFetch.exportExcel({ ...params }).then(data => { if (data.api_status ==true ){ if (this.table.datas.length === 0) { message.warning(getLabel('503890', '暂无数据导出')); return } const downloadUrl = addContentPath('/api/kq/balanceofleaverp/exportExcel'); const params = { ...this.tableAsyncFetchParams, displayColumn: this.checkedItems.toString() }; exportExcel(params, downloadUrl); Modal.confirm({ title: getLabel(558,'提示') , content: getLabel('导出成功'), }); }else if(data.api_status ==false){ Modal.confirm({ title: getLabel(558,'提示') , content: data.api_errormsg, }); } }, error => { }) } log = () => { window.setLogViewProps({logSmallType:3074}); } @action clickIcon = (next) => { this.isNoAccountShow = !this.isNoAccountShow; next && next(); } @action getRightMenu = () => { fetch({ asyncFetch, name: 'getRightMenu', logic: (cb) => { const { btnMenu, } = cb; this.top.btnMenu = btnMenu; } }); } @computed get menusCreationConfig() { const { btnMenu } = this.top; return getMenusCreationConfig(btnMenu); } get topButtons() { const { topMenu } = this.menusCreationConfig; return getTopButtons.call(this, { datas: topMenu, disabled: this.getMenusState(), }) } get dropMenuDatas() { const { rightMenu } = this.menusCreationConfig; return getDropMenuDatas.call(this, { datas: rightMenu, disabled: this.getMenusState(), }); } getMenusState = () => { const { loading } = this.table; return [loading]; } //***************单选组合(RadioGroup)***************** @observable checkedItems = []; @observable checkboxConfig = []; @observable radioGroup = { config: [], activeParams: '', height: 189, } @action getRadioGroupConfig = (next) => { fetch({ asyncFetch, name: 'getSearchCondition', logic: (cb) => { const { condition, value, option, } = cb; this.checkboxConfig = option; this.checkedItems = value.split(','); if (this.isAllVacationChecked) { this.checkedItems.push('all') } this.processCondition(condition); this.radioGroup.config = condition[0].items; next && next(); } }); } processCondition = (condition) => { const com = ; const item = { com, label: getLabel('390081', "展示列"), labelcol: 4, fieldcol: 20, } condition[0].items.unshift(item); } //收集选中假期的key值 @action collectCheckedItem = (val, key) => { const keys = this.checkedItems; const add = (key) => { keys.push(key); }; const del = (key) => { const targetIndex = keys.findIndex(_key => _key === key); if (targetIndex > -1) keys.splice(targetIndex, 1); }; (val === '1') ? add(key): del(key); this.checkedItems = keys; this.handleCkClick(val, key); } //checkbox框的回调函数 handleCkClick = (val, key) => { if (key === 'all') { if (val === '1') { this.allVacationKeys.map(key => { if (!this.checkedItems.includes(key)) this.checkedItems.push(key); }); } else { this.allVacationKeys.map(key => { const targetIndex = this.checkedItems.findIndex(item => item === key); if (targetIndex > -1) this.checkedItems.splice(targetIndex, 1); }); } } if (key !== 'all' && !['subcom', 'dept', 'jobtitle','workcode'].includes(key)) { if (val === '0') { const targetIndex = this.checkedItems.findIndex(item => item === 'all'); if (targetIndex > -1) this.checkedItems.splice(targetIndex, 1); } else { if (this.isAllVacationChecked) this.checkedItems.push('all'); } } } //判断所有的假期是否都选中 @computed get isAllVacationChecked() { for (let i = 0; i < this.allVacationKeys.length; i++) { const key = this.allVacationKeys[i]; if (!this.checkedItems.includes(key)) { return false; } } return true; } //收集所有假期的key值 @computed get allVacationKeys() { const items = this.checkboxConfig.length > 0 ? this.checkboxConfig[1] : this.checkboxConfig; const collector = []; items.map(item => { const key = item.key; if (key === 'all') return collector.push(key); }); return collector; } setRef = (ref, type) => { this[type] = ref; } @action exportActiveParams = (params) => { this.isNoAccountShow = ((['4', '5', '6', '7', '9'].indexOf(params.status || '')) > -1); this.radioGroup.activeParams = params; this.chainCall(); } @computed get isEmpty() { const { activeParams } = this.radioGroup, { dateScope, selectedYear, dataScope, subcomId, deptId, resourceId, } = activeParams; //指定日期范围未填写 if (dateScope === '6' && !selectedYear) { return true; } //分部未填写 if (dataScope === '1' && !subcomId) { return true; } //部门未填写 if (dataScope === '2' && !deptId) { return true; } //人员未填写 if (dataScope === '3' && !resourceId) { return true; } return false } @computed get rgCallbackParamsCollector() { const { activeParams, } = this.radioGroup; const callback = { ...activeParams, }; return callback; } @computed get columns() { const afterColumns = this.table.columns.filter(column => column.key === 'lastName' || this.checkedItems.includes(column.key)); afterColumns.map(column => { const dataIndex = column.dataIndex; column.render = (text, record, index) => { const { id, deptId, jobtitleId, subcomId, lastName, workcode, } = record; switch (dataIndex) { case 'lastName': return (
window.pointerXY(e)} title={lastName} >
); break; case 'workcode': return (
window.pointerXY(e)} title={workcode} > {workcode}
); break; case 'subcom': return jumpToHrmSubCompany(subcomId)} target='_blank'>{text} break; case 'dept': return jumpToHrmDept(deptId)} target='_blank'>{text}; break; case 'jobtitle': return jumpToHrmPost(jobtitleId)} target='_blank'>{text}; break; default: if (text === '-1') { return '/' } else { return this.handleHrefClick({id,lastName,key:dataIndex})}>{text} } } } }); return afterColumns; } handleHrefClick = (params) => { const { id, lastName, key } = params; this.dialogTitle = `${lastName} ${getLabel('505716',"的")}${getLabel('505717',"假期使用记录")}` this.resourceId = id; this.dialogTab.selectedKey = key; this.openDialog(); } @action setRgHeight = (height) => { this.radioGroup.height = height !== null ? height : 180; } //***************列表***************** @observable resourceId = ''; @observable table = { columns: [], datas: [], pageSize: 10, total: 0, loading: false, current: 1, } showTotal = (total) => { return `${getLabel('18609',"共")} ${total} ${getLabel('18256',"条")}`; } @observable winHeight = (window.innerHeight || document.documentElement.clientHeight); @action calculateHeight = () => { this.winHeight = (window.innerHeight || document.documentElement.clientHeight); } @computed get paginationCallbackParamsCollector() { const { current, pageSize } = this.table; const callback = { pageSize, currentPage: current, }; return callback; } @computed get tableAsyncFetchParams() { const params = { ...this.paginationAsyncFetchParams, ...this.paginationCallbackParamsCollector, }; return params; } @observable loading = false; @action getSearchList = () => { if (this.isEmpty) return; this.loading = true; fetch({ asyncFetch, name: 'getSearchList', fetchParams: this.tableAsyncFetchParams, logic: (cb) => { const { columns, datas } = cb; const _columns = [...columns]; _columns.forEach(c => { c.width = 100 }) this.table.columns = _columns; this.table.datas = datas; this.loading = false; } }); } @computed get paginationAsyncFetchParams() { const params = { ...this.rgCallbackParamsCollector, isNoAccount: this.isNoAccountShow, } return params; } @action getPageInfo = (next) => { if (this.isEmpty) return; fetch({ asyncFetch, name: 'getPageInfo', fetchParams: this.paginationAsyncFetchParams, logic: (cb) => { ['pageSize', 'total'].map(v => { this.table[v] = cb[v]; }); this.table.current = 1; next && next(); } }); } @action setCurrentPage = (current, property, next) => { this[property].current = current; next && next(); } @action setSizePerPage = (pageSize, property, next,current) => { this[property].pageSize = pageSize; this[property].current = current; next && next(); } @computed get tableScrollHeight() { return this.winHeight - 340 } //***************弹框***************** dialogProps = { icon: 'icon-coms-hrm', iconBgcolor: '#217346', hasScroll: true, style: { width: 700, height: 650, }, onCancel: () => this.closeDialog(), buttons: [], }; @observable dialog = { visible: false, loading: true, bottomTips: '', } @action openDialog = () => { this.dialog.visible = true; } @action closeDialog = () => { this.dialog.visible = false; } dialogSelectDisposer = reaction(() => this.dialog.visible, visible => { if (visible) { this.getChangeType(); this.dialogChainCall(); } else { this.dialogSelect.value = 'All' } }) //***************弹框内的页签***************** dialogTabStaticProps = { keyParam: 'key', onChange: key => this.setDialogTabKey(key, this.dialogPartChainCall), } @observable dialogTab = { datas: [], selectedKey: '', } @action setDialogTabKey = (key, next) => { this.dialogTab.selectedKey = key; next && next(); } @computed get dialogTabAsyncFetchParams() { const params = { resourceId: this.resourceId, } return params; } @action getDialogTab = (next) => { fetch({ asyncFetch, name: 'getTab', fetchParams: this.dialogTabAsyncFetchParams, logic: (cb) => { const { tab } = cb; this.dialogTab.datas = tab; next && next(); } }); } @computed get vacationName() { const { datas, selectedKey } = this.dialogTab; const targetData = datas.find(data => data.key === selectedKey); if (targetData) return targetData.title } //***************弹框内的下拉框***************** @observable dialogSelect = { options: [], value: 'All', }; @action getChangeType = () => { fetch({ asyncFetch, name: 'getChangeType', logic: (cb) => { const { condition } = cb; this.dialogSelect.options = condition[0].items[0].options; } }); } @action handleSelectChange = (value, next) => { this.dialogSelect.value = value; next && next(); } //***************弹框内的分页***************** @observable dialogPagination = { current: 1, pageSize: 10, total: 0 }; @computed get dialogPaginationAsyncFetchParams() { const params = { ruleId: this.dialogTab.selectedKey, changeType: this.dialogSelect.value, resourceId: this.resourceId, }; return params; } @action getDetailPageInfo = (next) => { this.dialog.loading = true; fetch({ asyncFetch, name: 'getDetailPageInfo', fetchParams: this.dialogPaginationAsyncFetchParams, logic: (cb) => { ['total', 'pageSize'].map(v => { this.dialogPagination[v] = cb[v]; }); if (cb.total === 0) { this.dialog.loading = false } this.dialogPagination.current = 1; next && next(); } }); } //***************弹框内的时间线***************** @observable dialogTimeline = { dataDetail: [], topTips: '', balanceEnable: 1, } @computed get timelineAsyncFetchParams() { const { current, pageSize } = this.dialogPagination; const params = { ...this.dialogPaginationAsyncFetchParams, pageSize, currentPage: current, } return params; } @action getUsageRecordDetail = () => { fetch({ asyncFetch, name: 'getUsageRecordDetail', fetchParams: this.timelineAsyncFetchParams, logic: (cb) => { ['dataDetail', 'topTips', 'balanceEnable'].map(v => { this.dialogTimeline[v] = cb[v]; }); this.dialog.bottomTips = cb.bottomTips; this.dialog.loading = false; } }); } //***************其他***************** cwm = () => { this.resetDatas(); } cwr = () => { this.resetDatas(); this.getRadioGroupConfig(this.chainCall); } resetDatas = () => { this.isNoAccountShow = false; this.radioGroup.config = []; ['columns', 'datas'].map(v => { this.table[v] = []; }); } chainCall = () => this.getPageInfo(() => this.getSearchList()); dialogPartChainCall = () => this.getDetailPageInfo(() => this.getUsageRecordDetail()) dialogChainCall = () => this.getDialogTab(this.dialogPartChainCall); } const hrmVacationBalanceReportCopy = new HrmVacationBalanceReportCopy; export { hrmVacationBalanceReportCopy }