ttk-app-core
Version:
enterprise develop framework
1,366 lines (1,270 loc) • 39.5 kB
JavaScript
import React from 'react';
import { action as MetaAction, AppLoader } from 'edf-meta-engine';
import { TableOperate2, Select, Button, Modal, Icon, PrintOption, FormDecorator, Popover } from 'edf-component';
import utils from 'edf-utils';
import { fromJS } from 'immutable';
import moment from 'moment';
import config from './config';
const Option = Select.Option;
import { consts } from 'edf-consts';
import table from '../../../component/components/table/table';
class action {
constructor(option) {
this.metaAction = option.metaAction;
this.config = config.current;
this.webapi = this.config.webapi;
this.voucherAction = option.voucherAction;
}
onInit = ({ component, injections }) => {
this.component = component;
this.injections = injections;
let addEventListener = this.component.props.addEventListener;
if (addEventListener) {
addEventListener('onTabFocus', :: this.refresh);
}
injections.reduce('init');
this.changeSipmleDate = false;
this.load();
this.initDate()
};
initDate = () => {
const { periodDate } = this.metaAction.context.get('currentOrg')
console.log(periodDate)
this.metaAction.sfs({
'data.searchValue.beginDate': moment(periodDate).startOf('month'),
'data.searchValue.endDate': moment(periodDate).endOf('month'),
})
}
componentDidMount = () => {
this.onResize();
const win = window;
if (win.addEventListener) {
win.addEventListener('resize', this.onResize, false);
} else if (win.attachEvent) {
win.attachEvent('onresize', this.onResize);
} else {
win.onresize = this.onResize;
}
};
componentWillUnmount = () => {
if (this.dateDom) {
this.dateDom.removeEventListener('click', this.rangePickerClick);
}
if (this.props && this.props.isFix === true) return;
const win = window;
if (win.removeEventListener) {
win.removeEventListener('resize', this.onResize, false);
} else if (win.detachEvent) {
win.detachEvent('onresize', this.onResize);
} else {
win.onresize = undefined;
}
};
onResize = (type) => {
let keyRandom = Math.floor(Math.random() * 10000);
this.keyRandom = keyRandom;
const tableOption = this.metaAction.gf('data.tableOption')
.toJS();
setTimeout(() => {
if (this.keyRandom == keyRandom) {
let dom = document.getElementsByClassName('ttk-scm-app-proceeds-list-Body')[0];
if (!dom) {
if (type) {
return;
}
setTimeout(() => {
this.onResize();
}, 20);
} else {
let tableOption = this.metaAction.gf('data.tableOption')
.toJS();
const width = dom.offsetWidth;
const height = dom.offsetHeight;
this.injections.reduce('setTableOption', {
...tableOption,
y: height - 39,
containerWidth: width - 20
});
}
}
}, 100);
};
load = (params) => {
this.sortParmas(null, null, null, 'init');
};
refresh = async() => {
await this.initOption()
let search = this.metaAction.gf('data.searchValue').toJS(),
page = this.metaAction.gf('data.pagination').toJS()
search.beginDate = this.metaAction.momentToString(search.beginDate, 'YYYY-MM-DD');
search.endDate = this.metaAction.momentToString(search.endDate, 'YYYY-MM-DD');
this.requestData({ ...search, page })
}
initOption = async() => {
const params = await this.sortParmas(null, null, null, 'get')
console.log(params)
const [response, account] = await Promise.all([this.webapi.proceeds.init(params), this.webapi.proceeds.bankAccount()])
const { businessTypes } = response
let obj = {}
if (businessTypes) {
let arr = []
businessTypes.forEach(function (data) {
let result = {value: data.id, label: data.name}, resultArr = []
if(data.children){
data.children.forEach(function (dataChildren) {
resultArr.push({value: dataChildren.id, label: dataChildren.name})
})
}
result.children = resultArr
arr.push(result)
})
const paramsBusinessTypes = params.businessTypes,
paramsBusinessTypeId = params.businessTypeId
const haveBusinessTypes = arr.find(item => item.value == paramsBusinessTypes)
if( !haveBusinessTypes ) {
obj['data.searchValue.businessTypes'] = null
obj['data.searchValue.businessTypeId'] = null
obj['data.searchValue.entity.businessTypeId'] = null
}else{
const option = haveBusinessTypes.children
const haveBusinessTypeId = option.find(item => item.value == paramsBusinessTypeId)
if( !haveBusinessTypeId ) {
obj['data.searchValue.businessTypeId'] = null
obj['data.searchValue.entity.businessTypeId'] = null
}
obj['data.other.businessTypesChildren'] = fromJS(option)
}
obj['data.other.businessTypes'] = fromJS(arr)
}
if( account && account.list ) {
if( params.bankAccountId ) {
const accountArr = []
const flag = account.list.find(item => item.bankAccountTypeId == params.bankAccountId)
if( !flag ) {
obj['data.searchValue.bankAccountId'] = null
obj['data.searchValue.entity.bankAccountId'] = null
}
account.list.forEach(function (data) {
accountArr.push({label: data.name, value: data.id})
})
obj['data.other.account'] = fromJS(accountArr)
}
}
this.metaAction.sfs(obj)
}
sortParmas = async (search, page, order, type, noInitDate) => {
// 处理搜索参数
if (!search) {
search = this.metaAction.gf('data.searchValue')
.toJS();
search.beginDate = this.metaAction.momentToString(search.beginDate, 'YYYY-MM-DD');
search.endDate = this.metaAction.momentToString(search.endDate, 'YYYY-MM-DD');
}
if (!page) {
page = this.metaAction.gf('data.pagination')
.toJS();
}
if(type != 'get'){
//this.metaAction.sf('data.loading', true)
let response = await this.webapi.proceeds.bankAccount(),
account = [];
response.list && response.list.forEach(function (data) {
account.push({ label: data.name, value: data.id });
});
this.metaAction.sf('data.other.account', account);
}
if (type == 'get') {
return { ...search, page, ...order };
} else if (type == 'init') {
const { periodDate } = this.metaAction.context.get('currentOrg')
this.metaAction.sfs({
'data.searchValue.datePreset': 'thisMonth',
'data.searchValue.beginDate': moment(periodDate).startOf('month'),
'data.searchValue.endDate': moment(periodDate).endOf('month')
});
search.beginDate = this.metaAction.momentToString(moment(periodDate).startOf('month'), 'YYYY-MM-DD');
search.endDate = this.metaAction.momentToString(moment(periodDate).endOf('month'), 'YYYY-MM-DD');
this.initData({ ...search, page, ...order }, noInitDate);
} else {
this.requestData({ ...search, page, ...order });
}
};
initData = async (params, noInitDate) => {
let loading = this.metaAction.gf('data.loading');
if (!loading) {
this.injections.reduce('tableLoading', true);
}
const response = await this.webapi.proceeds.init(params);
this.injections.reduce('tableLoading', false);
this.injections.reduce('load', { response, noInitDate });
const searchValue = this.metaAction.gf('data.searchValue').toJS()
this.metaAction.sfs({
'data.tableKey': Math.random(),
'data.other.oldSeachValue': fromJS(searchValue)
})
setTimeout(() => {
this.getTableScroll();
}, 100);
};
requestData = async (params) => {
let loading = this.metaAction.gf('data.loading');
if (!loading) {
this.injections.reduce('tableLoading', true);
}
const response = await this.webapi.proceeds.init(params);
this.injections.reduce('tableLoading', false);
this.injections.reduce('load', { response });
setTimeout(() => {
this.getTableScroll();
}, 100);
};
getTableScroll = () => {
try {
let tableOption = this.metaAction.gf('data.tableOption')
.toJS();
let dom = document.getElementsByClassName('ttk-scm-app-proceeds-list-Body')[0];
let tableDom;
if (!dom) {
return;
}
if (tableOption.y) {
tableDom = dom.getElementsByClassName('ant-table-fixed')[1];
} else {
tableDom = dom.getElementsByClassName('ant-table-fixed')[0];
}
if (tableDom && dom) {
let num = dom.offsetHeight - tableDom.offsetHeight;
// console.log( num )
if ((num - 30) > 0 && tableOption.y) {
delete tableOption.y;
this.injections.reduce('update', {
path: 'data.tableOption',
value: tableOption
});
} else if (num < 0 && !tableOption.y) {
const width = dom.offsetWidth;
const height = dom.offsetHeight;
this.injections.reduce('setTableOption', {
...tableOption,
y: height - 39,
containerWidth: width - 20
});
}
}
} catch (err) {
console.log(err);
}
};
resizeEnd = async (params) => {
const code = this.metaAction.gf('data').toJS().other.code
params.code = code
let res = await this.webapi.proceeds.batchUpdate(params)
this.injections.reduce('resizeEnd', res[0])
}
needAlignType = (data) => {
let className
if(data.idAlignType==1000050001){
className = 'left'
}else if(data.idAlignType==1000050002){
className = 'center'
}else if(data.idAlignType==1000050003){
className = 'right'
}
return className
};
renderColumns = () => {
const tableSetting = this.metaAction.gf('data.other.columnDetails')
.toJS();
const tableOption = this.metaAction.gf('data.tableOption')
.toJS();
const arr = [];
tableSetting.forEach(data => {
let item;
if (!data.isVisible) {
return;
}
if (data.fieldName == 'code' || data.fieldName == 'docCode') {
let obj = {
title: data.caption,
key: data.fieldName,
className: `table_td_align_${this.needAlignType(data)}`,
dataIndex: data.fieldName,
width: data.width,
render: (text, record, index) => this.rowSpan2(text, record, index, data.fieldName)
}
arr.push(obj);
} else if (data.isHeader == true && data.fieldName != 'remark') {
arr.push({
title: data.caption,
key: data.fieldName,
className: `table_td_align_${this.needAlignType(data)}`,
dataIndex: data.fieldName,
width: data.width,
render: (text, record, index) => this.rowSpan(text, record, index, data.fieldName)
});
} else if (data.fieldName == 'amount' || data.fieldName == 'receivePayAmount' || data.fieldName == 'fees') {
arr.push({
title: data.caption,
key: data.fieldName,
className: `table_td_align_${this.needAlignType(data)}`,
dataIndex: data.fieldName,
width: data.width,
render: (text, record, index) => this.amountTdRender(text, record, index, data.fieldName)
});
} else {
arr.push({
title: data.caption,
key: data.fieldName,
className: `table_td_align_${this.needAlignType(data)}`,
dataIndex: data.fieldName,
width: data.width,
render: (text, record, index) => this.normalTdRender(text, record, index, data.fieldName)
});
}
});
arr.push({
title: (
<Icon
name="columnset"
fontFamily='edficon'
className='ttk-scm-app-proceeds-list-columnset'
type="youcezhankailanmushezhi"
onClick={() => this.showTableSetting({ value: true })}
/>
),
key: 'voucherState',
dataIndex: 'voucherState',
fixed: 'right',
className: 'table_fixed_width',
width: 102,
render: (text, record, index) => this.operateCol(text, record, index)
});
return arr;
};
transformThoundsNumber = (text, key) => {
const arr = ['amountCr', 'amountDr', 'origAmount', 'price', 'amountSum', 'receivePayAmount'];
if (arr.includes(key)) {
if (!text || parseFloat(text) == 0 || isNaN(parseInt(text))) {
return '';
}
if (key == 'price') {
return utils.number.format(text, 6);
} else {
return utils.number.format(text, 2);
}
} else {
return text;
}
};
rowSpan = (text, row, index, key) => {
// console.log('参数1',text)
// console.log('参数2',row)
// console.log('参数3',index)
// console.log('参数4',key)
const obj = {
children: <span className="ttk-scm-app-proceeds-list-td-con"><span
title={this.transformThoundsNumber(text, key)}>{this.transformThoundsNumber(text, key)}</span></span>,
props: {
rowSpan: this.calcRowSpan(row.code, 'code', index)
}
};
return obj;
};
rowSpan2 = (text, row, index, fieldName) => {
const num = this.calcRowSpan(row.code, 'code', index);
const obj = {
children: (
<span className="ttk-scm-app-proceeds-list-td-con">
<a href="javascript:;"
onClick={() => {
fieldName == 'code' ? this.openMoreContent(row.id, false) : this.openDocCode(row)
}}
className="table-needDel"
title={fieldName == 'code' ? text : (text ? '记-'+text : '')}
data-rol={num}>
{fieldName == 'code' ? text : (text ? '记-'+text : '')}
</a>
</span>
),
props: {
rowSpan: num
}
};
return obj;
};
openDocCode = (option) => {
this.component.props.setPortalContent &&
this.component.props.setPortalContent('填制凭证', 'app-proof-of-charge', { accessType: 1, initData: { id: option.docId } })
}
amountTdRender = (text, record, index, key) => {
return <span className="ttk-scm-app-payment-list-td-con"
title={utils.number.addThousPos(text)}>{utils.number.addThousPos(text)}</span>
}
normalTdRender = (text, record, index, key) => {
return <span className="ttk-scm-app-proceeds-list-td-con"
title={this.transformThoundsNumber(text, key)}>{this.transformThoundsNumber(text, key)}</span>;
};
normalTdRender2 = (text) => {
return <span title={text} className="ttk-scm-app-proceeds-list-td-con" title={text}>{text}</span>;
};
getNormalSearchValue = () => {
const data = this.metaAction.gf('data.searchValue')
.toJS();
let date = [data.beginDate, data.endDate];
return { date, simpleCondition: data.simpleCondition };
};
combineColumnProp = (data) => {
if (!data) return [];
let newDataArray = [];
data.forEach((ele, index) => {
newDataArray.push({
'isVisible': ele.isVisible,
'id': ele.id,
'ts': ele.ts
});
});
return newDataArray;
};
//更新栏目
showTableSetting = async ({ value, data }) => {
this.injections.reduce('update', {
path: 'data.showTableSetting',
value: false
});
const preData = this.metaAction.gf('data.other.columnDetails');
if (value === false) {
this.injections.reduce('update', {
path: 'data.other.columnDetails',
value: data
});
const columnSolution = await this.webapi.proceeds.findByParam({ code: 'receiveList' });
if (columnSolution) {
let columnSolutionId = columnSolution.id;
const ts = this.metaAction.gf('data.other.ts');
const columnDetail = await this.webapi.proceeds.updateWithDetail({
'id': columnSolutionId,
'columnDetails': this.combineColumnProp(data),
ts: ts
});
if (columnDetail) {
this.injections.reduce('settingOptionsUpdate', {
visible: value,
data: columnDetail.columnDetails
});
} else {
this.metaAction.sf('data.other.columnDetails', preData);
}
} else {
this.metaAction.sf('data.other.columnDetails', preData);
}
}
else {
this.injections.reduce('tableSettingVisible', { value, data: data });
}
};
// 关闭栏目设置
closeTableSetting = () => {
this.injections.reduce('tableSettingVisible', { value: false });
};
// 高级搜索确定是简单搜索条件清除
searchValueChange = (value) => {
this.injections.reduce('update', { path: 'data.other.oldSeachValue', value: value })
let prevValue = this.metaAction.gf('data.searchValue').toJS();
this.injections.reduce('searchUpdate', { ...prevValue, ...value });
const pages = this.metaAction.gf('data.pagination').toJS();
if(value.beginDate) value.beginDate = this.metaAction.momentToString(value.beginDate, 'YYYY-MM-DD')
if(value.endDate) value.endDate = this.metaAction.momentToString(value.endDate, 'YYYY-MM-DD')
this.sortParmas({ ...prevValue, ...value }, { ...pages, 'currentPage': 1 });
//this.clearClick(value, 'search');
this.changeSipmleDate = true;
};
// 高级搜索清空
clearClick = (value, key) => {
let oldSeachValue = this.metaAction.gf('data.searchValue').toJS()
this.injections.reduce('update', { path: 'data.other.oldSeachValue', value: oldSeachValue })
const { periodDate } = this.metaAction.context.get('currentOrg')
if (value && key == 'search') {
value.bankAccountId = '';
value.businessTypeId = '';
value.businessTypes = '';
this.metaAction.sf(
'data.searchValue', fromJS(value)
);
} else {
value.entity.bankAccountId = '';
value.entity.businessTypeId = '';
value.datePreset = 'today';
value.beginDate = moment(periodDate).startOf('month');
value.endDate = moment(periodDate).endOf('month');
value.bankAccountId = ''
value.businessTypes = ''
value.businessTypeId = ''
this.metaAction.sf(
'data.searchValue', fromJS(value)
);
}
};
// 高级搜索取消
searchCancelChange = () => {
let oldSeachValueJS = this.metaAction.gf('data.other.oldSeachValue')
if( oldSeachValueJS && oldSeachValueJS.toJS ) {
oldSeachValue= oldSeachValueJS.toJS()
}else {
oldSeachValue = this.metaAction.gf('data.searchValue').toJS()
}
this.injections.reduce('update', { path: 'data.searchValue', value: oldSeachValue })
}
//日期选择联动
dateSelect = (key) => {
let beginDate,
endDate;
switch (key) {
case 'today':
beginDate = moment();
endDate = moment();
break;
case 'yesterday':
beginDate = moment()
.subtract(1, 'days');
endDate = moment()
.subtract(1, 'days');
break;
case 'thisWeek':
beginDate = moment()
.startOf('week');
endDate = moment()
.endOf('week');
break;
case 'thisMonth':
beginDate = moment()
.startOf('month');
endDate = moment()
.endOf('month');
break;
case 'thisYear':
beginDate = moment()
.startOf('year');
endDate = moment()
.endOf('year');
break;
}
this.metaAction.sfs({
'data.searchValue.datePreset': key,
'data.searchValue.beginDate': beginDate,
'data.searchValue.endDate': endDate
});
this.sortParmas();
};
dateSelectMoreSearch = (key) => {
let beginDate,
endDate;
switch (key) {
case 'today':
beginDate = moment();
endDate = moment();
break;
case 'yesterday':
beginDate = moment()
.subtract(1, 'days');
endDate = moment()
.subtract(1, 'days');
break;
case 'thisWeek':
beginDate = moment()
.startOf('week');
endDate = moment()
.endOf('week');
break;
case 'thisMonth':
beginDate = moment()
.startOf('month');
endDate = moment()
.endOf('month');
break;
case 'thisYear':
beginDate = moment()
.startOf('year');
endDate = moment()
.endOf('year');
break;
}
this.metaAction.sfs({
'data.searchValue.datePreset': key,
'data.searchValue.beginDate': beginDate,
'data.searchValue.endDate': endDate
});
};
dataChange = () => {
// this.metaAction.sfs({
// 'data.searchValue.datePreset': 'custom'
// })
this.injections.reduce('update', {
path: 'data.searchValue.datePreset',
value: 'custom'
})
}
// 账号选择
accountMoreSearch = (key) => {
this.metaAction.sfs({
'data.searchValue.entity.bankAccountId': key,
'data.searchValue.bankAccountId': key
});
};
businessSelectMoreSearch = (key) => {
let other = this.metaAction.gf('data.other')
.toJS();
let businessChildren = other.businessTypes.filter(function (data) {
return data.value == key;
})[0];
this.metaAction.sfs({
'data.searchValue.businessTypeId': '',
'data.searchValue.businessTypes': key,
'data.other.businessTypesChildren': businessChildren && businessChildren.children
});
};
businessChildMoreSearch = (key) => {
this.metaAction.sfs({
'data.searchValue.businessTypeId': key,
'data.searchValue.entity.businessTypeId': key
});
};
//分页发生变化
pageChanged = (current, pageSize) => {
let page = this.metaAction.gf('data.pagination')
.toJS();
let searchValue = this.metaAction.gf('data.searchValue')
.toJS();
const len = this.metaAction.gf('data.list')
.toJS().length;
if (pageSize) {
page = {
...page,
'currentPage': len == 0 ? 1 : current,
'pageSize': pageSize
};
} else {
page = {
...page,
'currentPage': len == 0 ? 1 : current
};
}
this.injections.reduce('update', {
path: 'data.tableCheckbox',
value: {
checkboxValue: [],
selectedOption: []
}
});
this.sortParmas(searchValue, page);
};
// 全选
checkboxChange = (arr, itemArr) => {
let newArr = [],
newItemArr = [];
arr.forEach(item => {
if (item) {
newArr.push(item);
}
});
itemArr.forEach(item => {
if (item) {
newItemArr.push(item);
}
});
this.injections.reduce('update', {
path: 'data.tableCheckbox',
value: {
checkboxValue: newArr,
selectedOption: newItemArr
}
});
this.selectedOption = newItemArr;
};
moreActionOpeate = (e) => {
this[e.key] && this[e.key]();
};
getNewData = () => {
const checkboxValue = this.metaAction.gf('data.tableCheckbox.checkboxValue')
.toJS();
const list = this.metaAction.gf('data.list')
.toJS();
let arr = [];
list.map(item => {
if (checkboxValue.includes(item.code)) {
arr.push(item);
}
});
return arr;
};
//去重
delRepeat = (data, code) => {
const arr = new Map();
data.map(item => {
if (!arr.has(item[code])) {
arr.set(item[code], item);
}
});
const sum = [];
for (let value of arr.values()) {
sum.push(value);
}
return sum;
};
// 生成凭证
auditClick = async (id, ts) => {
const res = await this.webapi.proceeds.audit({ id, ts });
if (res) {
this.metaAction.toast('success', `生成凭证成功`);
}
// 重新请求列表数据
this.sortParmas();
};
allAuditClick = async () => {
const selectedOption = this.getNewData();
if (selectedOption.length == 0) {
this.metaAction.toast('error', '请选择您要生成凭证的数据');
return;
}
let flag = false;
let data = selectedOption.map(item => {
if (item.status != consts.VOUCHERSTATUS_Approved) {
flag = true;
}
return {
id: item.id,
ts: item.ts
};
});
if (!flag) {
return this.metaAction.toast('warn', '当前没有可生成凭证数据');
}
this.metaAction.sf('data.loading', true)
let isAuditEdit = this.metaAction.gf('data.other.isAuditEdit')
if(!isAuditEdit) return
this.injections.reduce('update', {path: 'data.other.isAuditEdit', value: false})
let loading = this.metaAction.gf('data.loading')
if (!loading) {
this.injections.reduce('tableLoading', true);
}
const res = await this.webapi.proceeds.allAudit(this.delRepeat(data, 'id'));
this.injections.reduce('tableLoading', false);
this.injections.reduce('update', {path: 'data.other.isAuditEdit', value: true})
if (res) {
if(res.fail && res.fail.length){
this.showError('生成凭证结果', res.success, res.fail);
}else{
this.metaAction.toast('success', '生成凭证成功')
}
} else {
this.metaAction.toast('error', `${res.msg}`)
}
this.injections.reduce('update', {
path: 'data.tableCheckbox',
value: {
checkboxValue: [],
selectedOption: []
}
});
// 重新请求列表数据
this.sortParmas();
};
//删除凭证
unauditClick = async (id, ts) => {
const res = await this.webapi.proceeds.unaudit({ id, ts });
if (res) {
this.metaAction.toast('success', `删除凭证成功`);
}
// 重新请求列表数据
this.sortParmas();
};
allVersaAuditClick = async () => {
const selectedOption = this.getNewData();
if (selectedOption.length == 0) {
this.metaAction.toast('error', '请选择您要删除凭证的数据');
return;
}
let flag = false;
let data = selectedOption.map(item => {
if (item.status == consts.VOUCHERSTATUS_Approved) {
flag = true;
}
return {
id: item.id,
ts: item.ts
};
});
if (!flag) {
return this.metaAction.toast('warn', '当前没有删除凭证的数据');
}
let isAuditEdit = this.metaAction.gf('data.other.isAuditEdit')
if(!isAuditEdit) return
this.injections.reduce('update', {path: 'data.other.isAuditEdit', value: false})
let loading = this.metaAction.gf('data.loading')
if (!loading) {
this.injections.reduce('tableLoading', true);
}
const res = await this.webapi.proceeds.allUnaudit(this.delRepeat(data, 'id'));
this.injections.reduce('tableLoading', false);
this.injections.reduce('update', {path: 'data.other.isAuditEdit', value: true})
if (res) {
if(res.fail && res.fail.length){
this.showError('删除凭证结果', res.success, res.fail);
}else{
this.metaAction.toast('success', '删除凭证成功')
}
} else {
this.metaAction.toast('error', `${res.msg}`)
}
this.injections.reduce('update', {
path: 'data.tableCheckbox',
value: {
checkboxValue: [],
selectedOption: []
}
});
// 重新请求列表数据
this.sortParmas();
};
showError = (title, successArr, failArr) => {
const ret = this.metaAction.modal('show', {
title,
width: 585,
// footer: null,
bodyStyle: { padding: '2px 0 10px 11px' },
children: this.metaAction.loadApp('ttk-scm-app-error-list', {
store: this.component.props.store,
successArr,
failArr
}),
})
}
// 删除
delModal = async (id, ts) => {
const _this = this;
const ret = await this.metaAction.modal('confirm', {
title: '删除',
content: '你确定要删除吗?',
onOk() {
return _this.delId(id, ts);
}
});
if (ret) {
console.log(ret);
}
};
delId = async (id, ts) => {
const res = await this.webapi.proceeds.delete({ id, ts });
if (res) {
this.metaAction.toast('success', '删除成功');
}
let { checkboxValue, selectedOption } = this.metaAction.gf('data.tableCheckbox')
.toJS();
checkboxValue = checkboxValue.filter(item => item != id);
selectedOption = selectedOption.filter(item => item.id != id);
this.injections.reduce('update', {
path: 'data.tableCheckbox',
value: {
checkboxValue: checkboxValue,
selectedOption: selectedOption
}
});
this.sortParmas();
};
//批量删除
allDel = async () => {
const selectedOption = this.getNewData();
if (selectedOption.length == 0) {
this.metaAction.toast('error', '请选择您要删除的数据');
return;
}
const ret = await this.metaAction.modal('confirm', {
title: '删除',
content: '您确认要删除吗?'
})
if(!ret) return
let data = selectedOption.map(item => {
return {
id: item.id,
ts: item.ts
};
});
const res = await this.webapi.proceeds.allDelete(this.delRepeat(data, 'id'));
if (res) {
this.metaAction.toast('success', `本次删除${this.delRepeat(data, 'id').length}条数据,删除成功${res.success && res.success.length}条数据`);
}
this.injections.reduce('update', {
path: 'data.tableCheckbox',
value: {
checkboxValue: [],
selectedOption: []
}
});
// 重新请求列表数据
this.sortParmas();
};
//科目设置
subjectManage = async () => {
if (!this.config.apps['edfx-business-subject-manage']) {
throw '依赖app-asset-management-list app,请使用mk clone app-asset-management-list命令添加'
}
this.component.props.setPortalContent &&
this.component.props.setPortalContent('科目设置', 'edfx-business-subject-manage', {accessType: 'receipt'})
}
// 凭证习惯
voucherHabit = async() => {
const ret = await this.metaAction.modal('show', {
title: '凭证习惯设置',
width: 480,
okText: '确定',
bodyStyle: {padding: '10px 24px'},
children: this.metaAction.loadApp('ttk-scm-voucherHabit-card', {
store: this.component.props.store,
type: 'receive',
}),
})
if(ret) this.metaAction.toast('success', '设置成功')
}
newAddProofClick = () => {
this.component.props.setPortalContent &&
this.component.props.setPortalContent(
'收款单',
'ttk-scm-app-proceeds-card',
{}
);
};
openMoreContent = (id) => {
this.component.props.setPortalContent &&
this.component.props.setPortalContent(
'收款单',
'ttk-scm-app-proceeds-card',
{ id: id }
);
};
operateCol = (text, record, index) => {
const { status, code, id } = record;
const num = this.calcRowSpan(code, 'code', index), _this = this;
const obj = {
children: (
<div>
{record.seq == '合计' ? null : <div style={{textAlign: 'center'}}>
<Icon type="shengchengpingzheng"
fontFamily='edficon'
className={status != consts.VOUCHERSTATUS_Approved ? "lanmuicon_pz" : "lanmuicon_scpz"}
title={status != consts.VOUCHERSTATUS_Approved ? "生成凭证" : "删除凭证"}
style={{fontSize: 23, cursor: 'pointer'}}
onClick={function(){status != consts.VOUCHERSTATUS_Approved ? _this.auditClick(id, record.ts) : ''}} />
<Icon type="bianji"
fontFamily='edficon'
title="编辑"
style={{fontSize: 23, cursor: 'pointer'}}
onClick={function(){_this.openMoreContent(id, true)}} />
<Icon type="shanchu"
fontFamily='edficon'
title='删除'
disabled={status == consts.VOUCHERSTATUS_Approved}
style={{fontSize: 23, cursor: 'pointer'}}
onClick={function(){status == consts.VOUCHERSTATUS_Approved ? null : _this.delModal(id, record.ts)}} />
</div>}
</div>
),
props: {
rowSpan: num
}
};
return obj;
};
rangePickerClick = () => {
this.injections.reduce('update', {
path: 'data.showPicker',
value: true
});
};
//获取时间选项
getNormalDateValue = () => {
const data = this.metaAction.gf('data.searchValue')
.toJS();
const arr = [];
arr.push(data.beginDate);
arr.push(data.endDate);
return arr;
};
normalSearchDateChange = (value) => {
console.log('简单时间搜索');
this.metaAction.sfs({
'data.searchValue.datePreset': 'custom',
'data.searchValue.beginDate': value && value[0],
'data.searchValue.endDate': value && value[1]
});
this.sortParmas();
this.changeSipmleDate = true;
};
// normalSearchDateOnChange = () => {
// console.log('简单时间搜索')
// }
normalSearchChange = (path, value, initSearchValue, type) => {
let params = this.metaAction.gf('data.searchValue')
.toJS();
if (initSearchValue) {
params = { ...params, ...initSearchValue };
}
if (path == 'date') {
params.beginDate = value[0];
params.endDate = value[1];
} else {
params[path] = value;
}
this.injections.reduce('searchUpdate', params);
const pages = this.metaAction.gf('data.pagination')
.toJS();
this.sortParmas(params, { ...pages, 'currentPage': 1 });
// console.log('简单搜索')
this.changeSipmleDate = true;
};
export = async () => {
const params = await this.sortParmas(null, null, null, 'get');
const list = this.metaAction.gf('data.list')
.toJS();
if (list.length == 0) {
this.metaAction.toast('warn', '当前没有可导出数据');
return;
}
// params.docIdsStr = this.getPrintDocId();
await this.webapi.proceeds.export(params);
this.metaAction.toast('success', '导出成功');
};
print = async () => {
_hmt && _hmt.push(['_trackEvent', '财务', '凭证管理', '打印']);
let ret,
form;
let _this = this;
const list = this.metaAction.gf('data.list')
.toJS();
if (list.length == 0) {
this.metaAction.toast('warn', '当前没有可打印数据');
return;
}
const {
height,
maxLineNum,
printAuxAccCalc,
type,
width
} = await this.webapi.proceeds.getPrintConfig();
this.metaAction.modal('show', {
title: '打印',
width: 400,
footer: null,
iconType: null,
okText: '打印',
className: 'mk-ttk-scm-app-proceeds-list-modal-container',
children: <PrintOption
height={height}
maxLineNum={maxLineNum}
printAuxAccCalc={printAuxAccCalc}
type={type}
width={width}
callBack={_this.submitPrintOption}
/>
});
};
getPrintDocId = () => {
const selectedOption = this.metaAction.gf('data.tableCheckbox.selectedOption')
.toJS();
if (selectedOption.length == 0) {
return '';
}
let arr = selectedOption.map(item => {
return item.docId;
});
return arr.join(',');
};
submitPrintOption = async (form, target) => {
let params = this.sortParmas(null, null, null, 'get');
delete params.page;
let option = {
'type': parseInt(form.state.value),
'printAuxAccCalc': form.state.printAccountChecked,
'docIdsStr': this.getPrintDocId()
};
if (form.state.value == '0') {
Object.assign(option, { 'maxLineNum': form.state.pageSize }, params);
} else if (form.state.value == '2') {
Object.assign(option, { 'height': form.state.height, 'width': form.state.width }, params);
} else {
Object.assign(option, params);
}
let res = await this.webapi.proceeds.print(option);
};
calcRowSpan(text, columnKey, currentRowIndex) {
const list = this.metaAction.gf('data.list');
if (!list) return;
const rowCount = list.size;
if (rowCount == 0 || rowCount == 1) return 1;
if (currentRowIndex > 0
&& currentRowIndex <= rowCount
&& text == list.getIn([currentRowIndex - 1, columnKey])) {
return 0;
}
let rowSpan = 1;
for (let i = currentRowIndex + 1; i < rowCount; i++) {
if (text == list.getIn([i, columnKey])) {
rowSpan++;
} else {
break;
}
}
return rowSpan;
}
checkSearchValue = (value, form) => {
let flagCode = this.checkSearchValueCode(value, form);
return flagCode;
};
checkSearchValueCode = (value, form) => {
console.log('数据', value);
const { endCode, startCode } = value;
if (!endCode && !startCode) {
form.setFields({
startCode: {
value: '',
errors: null
},
endCode: {
value: '',
errors: null
}
});
return true;
}
if ((!endCode && startCode)) {
let startCodeNum = parseInt(value.startCode ? value.startCode : 0);
if (isNaN(startCodeNum) || startCodeNum > 9999) {
form.setFields({
startCode: {
errors: [new Error('请输入正确的凭证号')]
}
});
return false;
}
form.setFields({
startCode: {
value: this.padStart(startCodeNum),
errors: null
},
endCode: {
value: 9999,
errors: null
}
});
value.startCode = this.padStart(startCodeNum);
value.endCode = 9999;
return true;
} else {
let startCodeNum = parseInt(value.startCode ? value.startCode : 0);
let endCodeNum = parseInt(value.endCode);
let flag = true;
if (isNaN(startCodeNum) || startCodeNum > 9999) {
flag = false;
form.setFields({
startCode: {
errors: [new Error('请输入正确的凭证号')]
}
});
}
if (isNaN(endCodeNum) || endCodeNum > 9999) {
flag = false;
form.setFields({
endCode: {
errors: [new Error('请输入正确的凭证号')]
}
});
}
if (flag) {
form.setFields({
startCode: {
value: endCodeNum > startCodeNum ? this.padStart(startCodeNum) : this.padStart(endCodeNum),
errors: null
},
endCode: {
value: endCodeNum > startCodeNum ? this.padStart(endCodeNum) : this.padStart(startCodeNum),
errors: null
}
});
value.startCode = endCodeNum > startCodeNum ? this.padStart(startCodeNum) : this.padStart(endCodeNum);
value.endCode = endCodeNum > startCodeNum ? this.padStart(endCodeNum) : this.padStart(startCodeNum);
}
return flag;
}
return true;
};
padStart = (num) => {
return num.toString()
.padStart(4, '0');
};
/**
* current 每个月份
* pointTime 指定比较的时间
* type 'pre' 前 'next' 后
* return 返回 true 代表禁用
*/
disabledDate = (current, pointTime, type) => {
const enableddate = this.metaAction.gf('data.other.enableddate');
// const enableddateNum = this.transformDateToNum(enableddate)
this.dataChange();
if (type == 'pre') {
let currentMonth = this.transformDateToNum(current);
let enableddateMonth = this.transformDateToNum(enableddate);
return currentMonth < enableddateMonth;
} else {
let currentMonth = this.transformDateToNum(current);
let pointTimeMonth = this.transformDateToNum(pointTime);
let enableddateMonth = this.transformDateToNum(enableddate);
return currentMonth < pointTimeMonth || currentMonth < enableddateMonth;
}
};
transformDateToNum = (date) => {
try {
if (!date) {
return 0;
}
let time = date;
if (typeof date == 'string') {
time = utils.date.transformMomentDate(date);
}
return parseInt(`${time.year()}${time.month() < 10 ? `0${time.month()}` : `${time.month()}`}`);
} catch (err) {
console.log(err);
return 0;
}
};
disabledRangePicker = (current) => {
const { enabledMonth, enabledYear } = this.metaAction.context.get('currentOrg');
return true;
};
filterOptionSummary = (input, option) => {
if (option && option.props && option.props.label) {
return option.props.label.toLowerCase()
.indexOf(input.toLowerCase()) >= 0;
}
return true;
};
renderRowClassName = (record, index) => {
if (record.seq=='合计') {
return 'tr_heji'
}
}
resetClick =async () => {
const code = this.metaAction.gf('data').toJS().other.code
//重置栏目
await this.webapi.proceeds.reInitByUser({ code: code })
const columnSolution = await this.webapi.proceeds.findByParam({code: 'receiveList'})
this.injections.reduce('settingOptionsUpdate', {visible: false, data: columnSolution.columnDetails})
}
}
export default function creator(option) {
const metaAction = new MetaAction(option),
voucherAction = FormDecorator.actionCreator({ ...option, metaAction }),
o = new action({ ...option, metaAction, voucherAction }),
ret = { ...metaAction, ...voucherAction, ...o };
metaAction.config({ metaHandlers: ret });
return ret;
}