UNPKG

ttk-app-core

Version:
189 lines (165 loc) 7.82 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 extend from './extend' import { consts, common } from 'edf-constant' import {FormDecorator} from 'edf-component' 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.metaReducer.sf(state, 'data.other.dataOpen', true) 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)) } //state = this.metaReducer.sf(state,'data.other.isRender',true) return state } load = (state, voucher) => { if (voucher) { // state = this.metaReducer.sf(state, 'data.form.attachmentFiles', fromJS(voucher.attachments)) if (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 && 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)) if(voucher.status && voucher.status == 1000020001) { state = this.metaReducer.sf(state,'data.form.attachmentStatus', 0) } if(voucher.status && voucher.status == 1000020002) { state = this.metaReducer.sf(state,'data.form.attachmentStatus', 1) } if(voucher.attachments){ voucher.attachments.map(item=>{ if(item) { item.accessUrl = item.file.accessUrl item.type = item.file.type } }) state = this.metaReducer.sf(state, 'data.form.attachmentFiles', fromJS(voucher.attachments)) } state = this.metaReducer.sf(state, 'data.form.signAndRetreat', true) if(voucher.discarded !== undefined){ state = this.metaReducer.sf(state, 'data.form.discarded', fromJS(voucher.discarded)) // state = this.metaReducer.sf(state, 'data.form.discarded', true) } state = this.metaReducer.sf(state, 'data.other.auditVisible', false) if (voucher.id) { state = this.metaReducer.sf(state, 'data.other.auditVisible', true) } if(voucher.signAndRetreat == 4000100001) { state = this.metaReducer.sf(state, 'data.form.signAndRetreat', false) }else { state = this.metaReducer.sf(state, 'data.form.signAndRetreat', true) } } const saleTypeId = voucher && voucher.saleTypeId state = this.metaReducer.sf(state, 'data.other.isDisableBank', saleTypeId == '4000050002' ? 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, signAndRetreat: response.signAndRetreats, isSignAndRetreat: response.isSignAndRetreat, beginDate: response.beginDate, columnSetting: response.setting, //设置 inventoryTypes: response.inventoryTypes, //货物类型 taxRateTypes: response.taxRateTypes, //计税方式 revenueType: response.businessTypes, taxRateType: response.taxRateTypes,//计税方式 不进行过滤的 } } //如果行数太少,则用空行补足 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) => { state = this.metaReducer.sf(state, 'data.other.auditVisible', false) return state } delRowBefore = (state, gridName, rowIndex) => { state = this.metaReducer.sf(state, 'data.other.auditVisible', false) 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) =>{ // console.log(details, defaultLength) state = this.metaReducer.sf(state, 'data.form.details', fromJS(details)) state = this.metaReducer.sf(state, 'data.other.defaultLength', defaultLength) 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 } }