UNPKG

ttk-app-core

Version:
164 lines (141 loc) 6.4 kB
import { Map, List, fromJS } from 'immutable' import { reducer as MetaReducer } from 'edf-meta-engine' import config from './config' import { getInitState, blankDetail } from './data' import moment from 'moment' import utils from 'edf-utils' import extend from './extend' import { consts, common } from 'edf-constant' import {FormDecorator} from 'edf-component' import index from './index' class reducer { constructor(option) { this.metaReducer = option.metaReducer this.config = config.current this.voucherReducer = option.voucherReducer } init = (state, option) => { return this.metaReducer.init(state, getInitState()) } initLoad = (state, response) => { if (!response) { return this.metaReducer.sf(state, 'data', fromJS(getInitState().data)) } let parsed = this.parseResponse(response) state = this.metaReducer.sf(state, 'data.other.isChanged', false) state = this.load(state, parsed.form) if (parsed.other) { let other = this.metaReducer.gf(state, 'data.other').toJS() Object.assign(other, parsed.other) state = this.metaReducer.sf(state, 'data.other', fromJS(other)) } return state } load = (state, voucher) => { if (voucher) { // state = this.metaReducer.sf(state, 'data.form', fromJS(voucher)) // state = this.metaReducer.sf(state, 'data.form.attachmentFiles', fromJS(voucher.attachments)) if (voucher.settles && voucher.settles.length == 0) { const settles = [{ bankAccountId: '', amount: '', bankAccountName: '' }] voucher.settles = settles state = this.metaReducer.sf(state, 'data.form.settles', fromJS(settles)) } let pageStatus = this.getPageStatus(voucher) state = this.metaReducer.sf(state, 'data.other.pageStatus', pageStatus) //如果行数太少,则用空行补足 if (voucher.details) { const details = this.metaReducer.gf(state, 'data.form.details').toJS() while (voucher.details.length < details.length) { voucher.details.push(blankDetail) } // while (voucher.details.length < getInitState().data.form.details.length) { // voucher.details.push(blankDetail) // } } state = this.metaReducer.sf(state, 'data.other.prevDisalbed', false) state = this.metaReducer.sf(state, 'data.other.nextDisalbed', false) state = this.metaReducer.sf(state, 'data.form', fromJS(voucher)) state = this.metaReducer.sf(state, 'data.form.attachmentFiles', fromJS(voucher.attachments)) if (voucher.id) { state = this.metaReducer.sf(state, 'data.other.auditVisible', true) } } const purchaseTypeId = voucher && voucher.purchaseTypeId state = this.metaReducer.sf(state, 'data.other.isDisableBank', purchaseTypeId == '4000020002' ? true : false) return state } getPageStatus = (voucher) => { let status = voucher.status, settleStatus = voucher.settleStatus if (status == consts.consts.VOUCHERSTATUS_Approved || status == consts.consts.SETTLESTATUS_settled) { return common.commonConst.PAGE_STATUS.READ_ONLY; } if (voucher.id) { return common.commonConst.PAGE_STATUS.EDIT } else { return common.commonConst.PAGE_STATUS.ADD } } parseResponse = (response) => { let data = { form: response.voucher, other: { status: common.commonConst.PAGE_STATUS.ADD, invoiceType: response.invoiceTypes, //票据 taxRate: response.taxRates, //税率 isSignAndRetreat: response.isSignAndRetreat,//即征即退是否显示 beginDate: response.beginDate, // 记账日期控制 vatTaxpayer: response.vatTaxpayer, // 纳税人身份 voucherSource: response.voucherSource,//单据来源 signAndRetreat: response.signAndRetreats,//即征即退 columnSetting: response.setting, //设置 } } //如果行数太少,则用空行补足 if (data.form && data.form.details) { while (data.form.details.length < getInitState().data.form.details.length) { data.form.details.push(blankDetail) } } return data } addRowBefore = (state, gridName, rowIndex) => { return state } delRowBefore = (state, gridName, rowIndex) => { return state } //附件上传状态 attachmentLoading = (state, attachmentLoading) => { // return this.metaReducer.sf(state, 'data.form.attachmentLoading', attachmentLoading) return this.voucherReducer.attachmentLoading(state, attachmentLoading) } //附件显示状态 attachmentVisible = (state, attachmentVisible) => { return this.metaReducer.sf(state, 'data.form.attachmentVisible', attachmentVisible) } upload = (state, file, ts, attachedNum) => { return this.voucherReducer.upload(state, file, ts, attachedNum) } //默认显示行数 setrowsCount = (state, details, defaultLength) =>{ state = this.metaReducer.sf(state, 'data.form.details', fromJS(details)) state = this.metaReducer.sf(state, 'data.other.defaultLength', defaultLength) return state } updateState = (state, name, value) => { state = this.metaReducer.sf(state, name , value) return state } } export default function creator(option) { const metaReducer = new MetaReducer(option), extendReducer = extend.reducerCreator({ ...option, metaReducer }), voucherReducer = FormDecorator.reducerCreator({ ...option, metaReducer }), o = new reducer({ ...option, metaReducer, extendReducer, voucherReducer }) return { ...metaReducer, ...extendReducer.gridReducer, ...o } }