diff --git a/src/stores/AuthStore.js b/src/stores/AuthStore.js index d2a9244..7b44fcb 100644 --- a/src/stores/AuthStore.js +++ b/src/stores/AuthStore.js @@ -9,11 +9,11 @@ class AuthStore { constructor(rootStore) { this.rootStore = rootStore; makeAutoObservable(this); - this.get_auth(); + this.get_auth(); //放到钉钉环境才能开启 } - auth = ['admin']; - user = {name:'ycc',userid:'12345678'}; + auth = ['admin']; //开发时候用,正式环境留空 + user = {name:'ycc',userid:'12345678'};//开发时候用,正式环境留空 has_permission(requireds) { if (Object.keys(requireds).length == 0) { diff --git a/src/stores/FinancialStore.js b/src/stores/FinancialStore.js index 4ac9734..245ff2d 100644 --- a/src/stores/FinancialStore.js +++ b/src/stores/FinancialStore.js @@ -1,6 +1,7 @@ import {makeAutoObservable, runInAction} from "mobx"; import * as dd from 'dingtalk-jsapi'; import * as config from "../config"; +import * as comm from '../utils/commons' //财务管理 @@ -38,16 +39,42 @@ class FinancialStore { }); } + set_bill_filtered(values) { + if (Array.isArray(values)) { + this.credit_card_data.filteredValue = values; + } else if (comm.empty(values)) { + this.credit_card_data.filteredValue = []; + } else { + this.credit_card_data.filteredValue = [values]; + } + } + + set_active_tab(value) { + this.credit_card_data.active_tab = value; + } + + set_table_handleChange = (pagination, filters, sorter) => { + let filters_arr = Object.values(filters); + if (!comm.empty(filters_arr)) { + this.set_bill_filtered(filters_arr[0]); + } + }; + credit_card_data = { data: [], data_by_type: [], - loading:false, + active_tab: 'summarized_data', + loading: false, bu_select_mode: false, business_units: ['ALL'], group_select_mode: false, groups: ['ALL'], + filteredValue: [],//默认的筛选值 bu_handleChange: this.bu_handleChange.bind(this), group_handleChange: this.group_handleChange.bind(this), + set_bill_filtered: this.set_bill_filtered.bind(this), + set_active_tab: this.set_active_tab.bind(this), + set_table_handleChange: this.set_table_handleChange.bind(this), }; bu_handleChange(value) { diff --git a/src/utils/commons.js b/src/utils/commons.js index 4966697..7449ae4 100644 --- a/src/utils/commons.js +++ b/src/utils/commons.js @@ -197,15 +197,21 @@ export function clickUrl(url) { httpLink.click(); } -export function show_vs_tag(vs, data1, data2) { +export function show_vs_tag(vs,vs_diff, data1, data2) { let tag = '-'; if (parseInt(vs) < 0) { - tag = } color="gold">{vs} + tag = } color="gold">{vs} {vs_diff} } else if (parseInt(vs) > 0) { - tag = } color="lime">{vs} + tag = } color="lime">{vs} {vs_diff} } // else { // return {tag} // } return
{data1} vs {data2}
{tag}
+} + +//数组去掉重复 +export function unique(arr){ + let x = new Set(arr); + return [...x]; } \ No newline at end of file diff --git a/src/views/Credit_card_bill.js b/src/views/Credit_card_bill.js index 1663b78..9206bcd 100644 --- a/src/views/Credit_card_bill.js +++ b/src/views/Credit_card_bill.js @@ -22,39 +22,115 @@ import * as config from "../config"; const Credit_card_bill = () => { - const {financial_store} = useContext(stores_Context); + const {financial_store, date_picker_store} = useContext(stores_Context); const {bill_type_data, credit_card_data} = financial_store; const format_data = ((data) => { let result = {dataSource: [], columns: []} if (!comm.empty(data)) { - result.columns = [ - { - title: '项目', - children: [{ - title: '', - dataIndex: 'cb_billtype', - }], - }, - { - title: '美金', - children: [{title: data.BillTypeDataTotal1.cb_usd, dataIndex: 'cb_usd'}], - sorter: (a, b) => parseFloat(b.cb_usd.replace(/,/g, '')) - parseFloat(a.cb_usd.replace(/,/g, '')), - }, - { - title: '人民币', - children: [{title: data.BillTypeDataTotal1.cb_rmb, dataIndex: 'cb_rmb'}], - sorter: (a, b) => parseFloat(b.cb_rmb.replace(/,/g, '')) - parseFloat(a.cb_rmb.replace(/,/g, '')), - }, - ] - result.dataSource = data.BillTypeData1; + if (date_picker_store.start_date_cp && date_picker_store.end_date_cp) { //有比较的数据 + let total_data1 = data.BillTypeDataTotal1; + let total_data2 = data.BillTypeDataTotal2; + result.columns = [ + { + title: '项目类型', + children: [{ + title: '', + dataIndex: 'cb_billtype', + render: (text, record) => { + credit_card_data.set_bill_filtered(text);//切换到明细页 + credit_card_data.set_active_tab('detail_data'); + }}>{text} + }], + sorter: (a, b) => a.cb_billtype.localeCompare(b.cb_billtype), + }, + { + title: '美金', + children: [{ + title: comm.show_vs_tag(total_data1.usd_vs, total_data1.usd_diff, total_data1.cb_usd, total_data2.cb_usd), + dataIndex: 'cb_usd' + }], + }, + { + title: '人民币', + children: [{ + title: comm.show_vs_tag(total_data1.rmb_vs, total_data1.rmb_diff, total_data1.cb_rmb, total_data2.cb_rmb), + dataIndex: 'cb_rmb' + }], + }, + ]; + for (let item of data.BillTypeData1) { + for (let item2 of data.BillTypeData2) { + if (item.cb_billtype == item2.cb_billtype) { + result.dataSource.push({ + key: item.key, + cb_billtype: item.cb_billtype, + groups: item.groups, + cb_usd: comm.show_vs_tag(item.usd_vs, item.usd_diff, item.cb_usd, item2.cb_usd), + cb_rmb: comm.show_vs_tag(item.rmb_vs, item.rmb_diff, item.cb_rmb, item2.cb_rmb), + }) + } + } + } + } else { + result.columns = [ + { + title: '项目类型', + children: [{ + title: '', + dataIndex: 'cb_billtype', + render: (text, record) => { + credit_card_data.set_bill_filtered(text);//切换到明细页 + credit_card_data.set_active_tab('detail_data'); + }}>{text} + }], + sorter: (a, b) => a.cb_billtype.localeCompare(b.cb_billtype), + }, + { + title: '美金', + children: [{title: data.BillTypeDataTotal1.cb_usd, dataIndex: 'cb_usd'}], + sorter: (a, b) => parseFloat(b.cb_usd.replace(/,/g, '')) - parseFloat(a.cb_usd.replace(/,/g, '')), + }, + { + title: '人民币', + children: [{title: data.BillTypeDataTotal1.cb_rmb, dataIndex: 'cb_rmb'}], + sorter: (a, b) => parseFloat(b.cb_rmb.replace(/,/g, '')) - parseFloat(a.cb_rmb.replace(/,/g, '')), + }, + ] + result.dataSource = data.BillTypeData1; + } } return result; }) + const filters_array = (data_array) => { + return comm.unique(data_array).map(item => { + return {text: item, value: item} + }); + } + const format_data_detail = ((data) => { let result = {dataSource: [], columns: []} if (!comm.empty(data)) { + let show_vs = false; + let usd_totle1, usd_totle2, usd_diff, usd_vs, rmb_totle1, rmb_totle2, rmb_diff, rmb_vs = 0; + usd_totle1 = Math.round(data.billdate1.reduce((a, b) => a + b.cb_usd, 0)); + rmb_totle1 = Math.round(data.billdate1.reduce((a, b) => a + b.cb_rmb, 0)); + if (date_picker_store.start_date_cp && date_picker_store.end_date_cp) { //有比较的数据 + show_vs = true; + //计算汇总的变化 + usd_totle2 = Math.round(data.billdate2.reduce((a, b) => a + b.cb_usd, 0)); + usd_diff = usd_totle1 - usd_totle2; + usd_vs = comm.formatPercent(usd_diff / usd_totle1); + rmb_totle2 = Math.round(data.billdate2.reduce((a, b) => a + b.cb_rmb, 0)); + rmb_diff = rmb_totle1 - rmb_totle2; + rmb_vs = comm.formatPercent(rmb_diff / rmb_totle1); + } + if (show_vs) { //有比较的数据 + result.dataSource.push(...data.billdate1, ...data.billdate2); + } else { + result.dataSource.push(...data.billdate1); + } result.columns = [ { title: '项目', @@ -62,15 +138,35 @@ const Credit_card_bill = () => { title: '', dataIndex: 'cb_bill', }], + sorter: (a, b) => a.cb_bill.localeCompare(b.cb_bill), + }, + { + title: '项目类型', + children: [{ + title: '', + dataIndex: 'cb_billtype', + }], + sorter: (a, b) => a.cb_billtype.localeCompare(b.cb_billtype), + filters: filters_array(result.dataSource.map((item) => { + return item.cb_billtype + })), + filteredValue: credit_card_data.filteredValue || null, + onFilter: (value, record) => record.cb_billtype.indexOf(value) === 0, }, { title: '美金', - children: [{title: Math.round(data.billdate1.reduce((a, b) => a + b.cb_usd, 0)), dataIndex: 'cb_usd'}], + children: [{ + title: show_vs ? comm.show_vs_tag(usd_vs, usd_diff, usd_totle1, usd_totle2) : usd_totle1, + dataIndex: 'cb_usd' + }], sorter: (a, b) => b.cb_usd - a.cb_usd, }, { title: '人民币', - children: [{title: Math.round(data.billdate1.reduce((a, b) => a + b.cb_rmb, 0)), dataIndex: 'cb_rmb'}], + children: [{ + title: show_vs ? comm.show_vs_tag(rmb_vs, rmb_diff, rmb_totle1, rmb_totle2) : rmb_totle1, + dataIndex: 'cb_rmb' + }], sorter: (a, b) => b.cb_rmb - a.cb_rmb, }, @@ -85,15 +181,17 @@ const Credit_card_bill = () => { { title: '事业部', children: [{title: '', dataIndex: 'cb_business_unit'}], - sorter: (a, b) => b.cb_business_unit - a.cb_business_unit, + sorter: (a, b) => a.cb_business_unit.localeCompare(b.cb_business_unit), }, { title: '小组', children: [{title: '', dataIndex: 'cb_group'}], + sorter: (a, b) => a.cb_group.localeCompare(b.cb_group), }, ] - result.dataSource = data.billdate1; + } + return result; }) @@ -155,6 +253,7 @@ const Credit_card_bill = () => { onClick={() => { financial_store.get_credit_card_bills(); financial_store.get_credit_card_bills_by_type(); + financial_store.set_bill_filtered(false); }}>统计 @@ -164,7 +263,7 @@ const Credit_card_bill = () => { - + 项目汇总} key="summarized_data"> {
{