ttk-app-core
Version:
enterprise develop framework
189 lines (181 loc) • 6.55 kB
JavaScript
import { Map, fromJS } from 'immutable';
import { reducer as MetaReducer } from 'edf-meta-engine';
import config from './config';
import { getInitState } from './data';
import { consts } from 'edf-consts';
class reducer {
constructor(option) {
this.metaReducer = option.metaReducer;
this.config = config.current;
}
init = (state, option) => {
const initState = getInitState();
return this.metaReducer.init(state, initState);
};
load = (state, option) => {
if (option.response) {
let obj = Object.keys(option.response);
if (obj.includes('propertyId')) {
option.queryData.dataList.filter((data) => {
if (data.id == option.response.propertyId) {
option.response.property = data;
}
});
if (option.queryData && option.queryData.detailList) {
let a = option.queryData.detailList.filter((data) => {
return option.response.propertyId == data.propertyId;
});
state = this.metaReducer.sf(state, 'data.other.propertyDetailFilter', fromJS(a));
}
}
if (obj.includes('propertyDetail')) {
option.queryData.detailList.filter((data) => {
if (data.id == option.response.propertyDetail) {
option.response.propertyDetail = data;
}
});
state = this.metaReducer.sf(state, 'data.isProperty', fromJS(true));
}
if (obj.includes('unitId')) {
option.response.unit = {
id: option.response.unitId,
name: option.response.unitName
};
}
if (obj.includes('rate')) {
option.response.rate = {
id: option.response.rate,
name: option.response.rateName
};
}
if (obj.includes('revenueType')) {
option.response.revenueType = {
id: option.response.revenueType
// name: option.response.revenueType
};
}
if (Object.keys(option.response).length == 0) {
option.response.isEnable = true;
state = this.metaReducer.sf(state, 'data.form', fromJS(option.response));
} else {
state = this.metaReducer.sf(state, 'data.form', fromJS(option.response));
}
}
if (option.code) {
state = this.metaReducer.sf(state, 'data.form.code', fromJS(option.code));
}
if (option.queryData) {
if (option.queryData.dataList) {
state = this.metaReducer.sf(state, 'data.other.property', fromJS(option.queryData.dataList));
}
if (option.queryData.detailList) {
state = this.metaReducer.sf(state, 'data.other.propertyDetail', fromJS(option.queryData.detailList));
}
if (option.queryData.rateList) {
state = this.metaReducer.sf(state, 'data.other.rate', fromJS(option.queryData.rateList));
}
if (option.queryData.unitList) {
state = this.metaReducer.sf(state, 'data.other.unit', fromJS(option.queryData.unitList));
}
if (option.queryData.revenueType) {
state = this.metaReducer.sf(state, 'data.other.revenueType', fromJS(option.queryData.revenueType));
}
}
if (option.taxCode) {
state = this.metaReducer.sf(state, 'data.taxCode', fromJS(option.taxCode));
}
return state;
};
unit = (state, list, select) => {
state = this.metaReducer.sf(state, 'data.other.unit', fromJS(list));
state = this.metaReducer.sf(state, 'data.form.unit', fromJS(select));
return state;
};
revenueType = (state, list, select) => {
state = this.metaReducer.sf(state, 'data.other.revenueType', fromJS(list));
state = this.metaReducer.sf(state, 'data.form.revenueType', fromJS(select));
return state;
};
propertyChange = (state, v, a, revenueTypeChange) => {
let rateList = this.metaReducer.gf(state, 'data.other.rate'),
propertyDetail = this.metaReducer.gf(state, 'data.other.propertyDetail')
.toJS(),
revenueType = this.metaReducer.gf(state, 'data.other.revenueType')
.toJS(),
name,
propertyArr = [];
if (v.vatTaxpayer) {
propertyDetail.forEach((data) => {
if (propertyArr.filter((propertyArrData) => {
return propertyArrData == data.propertyId;
}).length == 0) {
propertyArr.push(data.propertyId);
}
});
if (propertyArr.filter((data) => {
return data == v.id;
}).length > 0) {
let dataArr = a;
state = this.metaReducer.sf(state, 'data.other.propertyDetailFilter', fromJS(a));
state = this.metaReducer.sf(state, 'data.isProperty', fromJS(true));
} else {
state = this.metaReducer.sf(state, 'data.isProperty', fromJS(false));
}
}
name = `${v.rate}%`;
if (rateList) {
rateList.toJS()
.map(item => {
if (item.name == name) {
state = this.metaReducer.sf(state, 'data.form.rate', fromJS(item));
}
});
}
if (v.vatTaxpayer) {
state = this.metaReducer.sf(state, 'data.form.property', fromJS(v));
state = this.metaReducer.sf(state, 'data.form.propertyDetail', '');
} else {
state = this.metaReducer.sf(state, 'data.form.propertyDetail', fromJS(v));
}
if (revenueTypeChange) {
let revenueTypeData = revenueType.filter(function (data) {
return data.id == v.revenueType;
})[0];
state = this.metaReducer.sf(state, 'data.form.revenueType', fromJS(revenueTypeData));
}
state = this.metaReducer.sf(state, 'data.form.taxClassificationId', '');
state = this.metaReducer.sf(state, 'data.form.taxClassificationName', '');
return state;
};
taxCodeLoad = (state, taxCode, value) => {
if (taxCode.data && value) {
state = this.metaReducer.sf(state, 'data.taxCode.data', fromJS(taxCode.data));
} else {
if (taxCode.data) {
if (taxCode.data.length > 500) {
state = this.metaReducer.sf(state, 'data.taxCode.data', fromJS(taxCode.data.splice(0, 500)));
} else {
state = this.metaReducer.sf(state, 'data.taxCode.data', fromJS(taxCode.data));
}
}
}
state = this.metaReducer.sf(state, 'data.taxCode.fetching', fromJS(taxCode.fetching));
return state;
};
taxCodeChange = (state, code) => {
if (code) {
let str = code.split(',');
state = this.metaReducer.sf(state, 'data.form.taxClassificationId', fromJS(str[1]));
state = this.metaReducer.sf(state, 'data.form.taxClassificationName', fromJS(str[0]));
} else {
state = this.metaReducer.sf(state, 'data.form.taxClassificationId', fromJS(''));
state = this.metaReducer.sf(state, 'data.form.taxClassificationName', fromJS(''));
}
return state;
};
}
export default function creator(option) {
const metaReducer = new MetaReducer(option),
o = new reducer({ ...option, metaReducer });
return { ...metaReducer, ...o };
}