diff --git a/pc4mobx/hrmSalary/apis/standingBook.js b/pc4mobx/hrmSalary/apis/standingBook.js new file mode 100644 index 00000000..7e9bd0f7 --- /dev/null +++ b/pc4mobx/hrmSalary/apis/standingBook.js @@ -0,0 +1,160 @@ +import { WeaTools } from "ecCom"; + +//社会福利台账-获取正常缴纳列表 +export const getCommonList = (params) => { + // return WeaTools.callApi('/api/bs/hrmsalary/siaccount/batch/list', 'POST', params); + return fetch("/api/bs/hrmsalary/siaccount/batch/list", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; + +//社会福利台账-获取tab列表 +export const getTabList = (params) => { + return WeaTools.callApi("/api/bs/hrmsalary/siaccount/tabList", "get", params); +}; + +//社会福利台账-获取正常缴纳列表 +export const getNormalList = (params) => { + // return WeaTools.callApi('/api/bs/hrmsalary/siaccount/detail/common/list', 'get', params); + return fetch("/api/bs/hrmsalary/siaccount/detail/common/list", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; +//社会福利台账-获取补缴列表 +export const getSupplementaryList = (params) => { + return fetch("/api/bs/hrmsalary/siaccount/detail/supplementary/list", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; + +//社会福利台账-获取总览列表 +export const getOverViewList = (params) => { + return fetch("/api/bs/hrmsalary/siaccount/overView", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; + +//社会福利台账-获取异常列表 +export const getChangeList = (params) => { + return fetch("/api/bs/hrmsalary/siaccount/changeList", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; +//社会福利台账-保存并进入核算 +export const save = (params) => { + return fetch("/api/bs/hrmsalary/siaccount/save", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; +//社会福利台账-归档 +export const siaccountFile = (params) => { + return fetch("/api/bs/hrmsalary/siaccount/file", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; +//社会福利台账-核算异常列表 +export const inspectList = (params) => { + return fetch("/api/bs/hrmsalary/siaccount/inspectList", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; +//社会福利台账-删除正常缴纳人员 +export const siaccountCommonDelete = (params) => { + return fetch("/api/bs/hrmsalary/siaccount/common/delete", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; +//社会福利台账-添加正常缴纳人员 +export const siaccountCommonSave = (params) => { + return fetch("/api/bs/hrmsalary/siaccount/common/save", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; +//社会福利台账-添加补缴人员 +export const siaccountSupplementarySave = (params) => { + return fetch("/api/bs/hrmsalary/siaccount/supplementary/save", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; +//社会福利台账-删除月份表单 +export const siaccountDelete = (params) => { + return fetch("/api/bs/hrmsalary/siaccount/delete", { + method: "post", + mode: "cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(params), + }).then((res) => res.json()); +}; +//社会福利台账-正常缴纳添加缴纳人员表单 +export const siaccountCommonForm = (params) => { + return WeaTools.callApi( + "/api/bs/hrmsalary/siaccount/commonForm", + "get", + params + ); +}; +//社会福利台账-补缴添加缴纳人员表单 +export const querySupplementaryForm = (params) => { + return WeaTools.callApi( + "/api/bs/hrmsalary/siaccount/querySupplementaryForm", + "get", + params + ); +}; diff --git a/pc4mobx/hrmSalary/index.js b/pc4mobx/hrmSalary/index.js index 091a8b90..58b6124a 100644 --- a/pc4mobx/hrmSalary/index.js +++ b/pc4mobx/hrmSalary/index.js @@ -1,48 +1,47 @@ -import React from 'react'; -import Route from 'react-router/lib/Route'; -import { WeaLocaleProvider } from 'ecCom' -import MySalary from './pages/mySalary'; -import Programme from './pages/socialSecurityBenefits/programme'; -import Archives from './pages/socialSecurityBenefits/archives'; -import StandingBook from './pages/socialSecurityBenefits/standingBook'; -import SalaryItem from './pages/salaryItem'; -import SalaryFile from './pages/salaryFile'; -import CumDeduct from './pages/dataAcquisition/cumDeduct'; -import OtherDeduct from './pages/dataAcquisition/otherDeduct'; -import CumSituation from './pages/dataAcquisition/cumSituation'; -import Attendance from './pages/dataAcquisition/attendance'; -import Ledger from './pages/ledger'; -import Calculate from './pages/calculate'; -import Payroll from './pages/payroll'; -import PayrollGrant from './pages/payroll/payrollGrant'; -import PayrollDetail from './pages/payroll/payrollDetail' -import Declare from './pages/declare'; -import TaxRate from './pages/taxRate'; -import TaxAgent from './pages/taxAgent'; -import CalculateDetail from './pages/calculateDetail' -import PlaceOnFileDetail from './pages/calculateDetail/placeOnFileDetail'; -import CompareDetail from './pages/calculateDetail/compareDetail' -import GenerateDeclarationDetail from './pages/declare/generateDeclarationDetail' -import BaseForm from './components'; -import TemplatePreview from './pages/payroll/templatePreview' - - -import stores from './stores'; -import './style/index'; +import React from "react"; +import Route from "react-router/lib/Route"; +import { WeaLocaleProvider } from "ecCom"; +import MySalary from "./pages/mySalary"; +import Programme from "./pages/socialSecurityBenefits/programme"; +import Archives from "./pages/socialSecurityBenefits/archives"; +import StandingBook from "./pages/socialSecurityBenefits/standingBook"; +import StandingBookDetail from "./pages/socialSecurityBenefits/standingBookDetail"; +import SalaryItem from "./pages/salaryItem"; +import SalaryFile from "./pages/salaryFile"; +import CumDeduct from "./pages/dataAcquisition/cumDeduct"; +import OtherDeduct from "./pages/dataAcquisition/otherDeduct"; +import CumSituation from "./pages/dataAcquisition/cumSituation"; +import Attendance from "./pages/dataAcquisition/attendance"; +import Ledger from "./pages/ledger"; +import Calculate from "./pages/calculate"; +import Payroll from "./pages/payroll"; +import PayrollGrant from "./pages/payroll/payrollGrant"; +import PayrollDetail from "./pages/payroll/payrollDetail"; +import Declare from "./pages/declare"; +import TaxRate from "./pages/taxRate"; +import TaxAgent from "./pages/taxAgent"; +import CalculateDetail from "./pages/calculateDetail"; +import PlaceOnFileDetail from "./pages/calculateDetail/placeOnFileDetail"; +import CompareDetail from "./pages/calculateDetail/compareDetail"; +import GenerateDeclarationDetail from "./pages/declare/generateDeclarationDetail"; +import BaseForm from "./components"; +import TemplatePreview from "./pages/payroll/templatePreview"; +import stores from "./stores"; +import "./style/index"; // 读取系统多语言配置 -let getLocaleLabel = WeaLocaleProvider.getLocaleLabel.bind(this, 'hrmSalary'); +let getLocaleLabel = WeaLocaleProvider.getLocaleLabel.bind(this, "hrmSalary"); // 不需要读取系统多语言 getLocaleLabel = function (nextState, replace, callback) { - callback(); + callback(); }; -const Home = props => props.children; +const Home = (props) => props.children; -const SocialSecurityBenefits = props => props.children; -const DataAcquisition = props => props.children; +const SocialSecurityBenefits = (props) => props.children; +const DataAcquisition = (props) => props.children; // mySalaryBenefits 我的薪资福利 // socialSecurityBenefits 社保福利 @@ -58,48 +57,77 @@ const DataAcquisition = props => props.children; // attendance 考勤引用 // ledger 薪资账套 // calculate 薪资核算 - // calculateDetail 核算详情 - // placeOnFileDetail 核算归档详情 - // compareDetail 线下线上对比 +// calculateDetail 核算详情 +// placeOnFileDetail 核算归档详情 +// compareDetail 线下线上对比 // payroll 工资单发放 // declare 个税申请表 // generateDeclarationDetail 个税单详情 // taxRate 个税税率表 // taxAgent 个税扣缴义务人 - - const Routes = ( - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + ); diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/components/abnormalDrawer.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/components/abnormalDrawer.js new file mode 100644 index 00000000..c5dd5109 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/components/abnormalDrawer.js @@ -0,0 +1,72 @@ +/* + * Author: 黎永顺 + * Description: 异常列表 + * Date: 2022-04-21 16:51:27 + * LastEditTime: 2022-04-21 20:08:59 + */ +import React, { Component } from "react"; +import { Button, Table, Dropdown, Menu, Tooltip, Icon } from "antd"; +import { WeaSlideModal, WeaTable } from "ecCom"; +import "./index.less"; + +export default class AbnormalDrawer extends Component { + constructor(props) { + super(props); + this.state = { + selectedRowKeys: [], + }; + } + onSelectChange = (selectedRowKeys) => { + this.setState({ selectedRowKeys }); + }; + + render() { + const { selectedRowKeys } = this.state; + const { loading } = this.props; + const rowSelection = { + selectedRowKeys, + onChange: this.onSelectChange, + }; + return ( + +
+ + + + + + + 忽略全部 + 取消全部忽略 + + }> + + +
+ {/* table */} + + + } + /> + ); + } +} diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/components/accountDialog.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/components/accountDialog.js new file mode 100644 index 00000000..bd43372c --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/components/accountDialog.js @@ -0,0 +1,71 @@ +/* + * Author: 黎永顺 + * Description: 核算弹框 + * Date: 2022-04-21 15:16:18 + * LastEditTime: 2022-04-21 16:54:59 + */ +import React, { Component } from "react"; +import { Button, Form, Input } from "antd"; +import { WeaDatePicker, WeaDialog } from "ecCom"; + +const createForm = Form.create; +const FormItem = Form.Item; + +class Accountdialog extends Component { + constructor(props) { + super(props); + this.state = {}; + } + + handleSubmit = (e) => { + const { onOk } = this.props; + e.preventDefault(); + this.props.form.validateFields((errors, values) => { + if (!!errors) { + return; + } + onOk(values); + }); + }; + render() { + const { getFieldProps } = this.props.form; + const formItemLayout = { + labelCol: { span: 7 }, + wrapperCol: { span: 12 }, + }; + return ( + + 保存并进入核算 + , + ]}> +
+ + + + + + +
+
+ ); + } +} + +export default createForm()(Accountdialog); diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/components/index.less b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/components/index.less new file mode 100644 index 00000000..ae46399b --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/components/index.less @@ -0,0 +1,23 @@ +.abnormalWapper { + padding: 10px 12px; + + .top { + display: flex; + align-items: center; + justify-content: flex-end; + + i:first-child { + margin-right: 12px; + color: #666; + } + + i { + font-size: 16px; + cursor: pointer; + } + + button { + margin-right: 12px; + } + } +} \ No newline at end of file diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/index.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/index.js index 303be099..f5c89509 100644 --- a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/index.js +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/index.js @@ -1,92 +1,387 @@ -import React from 'react'; -import { inject, observer } from 'mobx-react'; -import { toJS } from 'mobx'; +import React from "react"; +import { inject, observer } from "mobx-react"; +import { toJS } from "mobx"; -import { Button, Table, DatePicker } from 'antd'; +import { Button, Table, Dropdown, Menu, Modal, message } from "antd"; -import { WeaTop, WeaTab, WeaRightMenu, WeaRangePicker, WeaTable } from 'ecCom'; +import { WeaTop, WeaTab, WeaRightMenu, WeaDatePicker, WeaTable } from "ecCom"; -import { renderNoright, getSearchs } from '../../../util'; // 渲染form数据的方法:因为多个页面都会使用,所以抽的公共方法在util中 -import CustomTab from '../../../components/customTab'; -import ContentWrapper from '../../../components/contentWrapper'; +import { renderNoright, getSearchs } from "../../../util"; // 渲染form数据的方法:因为多个页面都会使用,所以抽的公共方法在util中 +import CustomTab from "../../../components/customTab"; +import ContentWrapper from "../../../components/contentWrapper"; +import Accountdialog from "./components/accountDialog"; +import AbnormalDrawer from "./components/abnormalDrawer"; +import moment from "moment"; +import _ from "lodash"; -import { columns, dataSource } from './columns'; +// import { columns, dataSource } from './columns'; +import "./index.less"; -const { MonthPicker } = DatePicker; - -@inject('baseTableStore') +@inject("standingBookStore") @observer export default class StandingBook extends React.Component { constructor(props) { super(props); this.state = { value: "", - selectedKey: "0" - } + selectedKey: "0", + tableParams: { + startTime: moment(new Date()).format("YYYY-MM"), + endTime: moment(new Date()).format("YYYY-MM"), + }, + dialogProps: { + title: "", + visible: false, + }, + drawerProps: { + title: "", + visible: false, + }, + tableData: { + list: [], + columns: [], + total: 0, + }, + }; } - render() { - const { baseTableStore } = this.props; - const { loading, hasRight, form, condition, tableStore, showSearchAd, getTableDatas, doSearch, setShowSearchAd } = baseTableStore; - if (!hasRight && !loading) { // 无权限处理 + componentDidMount() { + this.getCommonList({ ...this.state.tableParams }); + } + + getCommonList = (payload = {}) => { + const { getCommonList } = this.props.standingBookStore; + getCommonList({ ...payload }).then(({ list, columns, total }) => { + columns = _.map(columns, (it) => { + if (it.dataIndex === "billMonth") { + it = { + ...it, + render: (text, r) => { + const { billMonth } = r; + return ( + this.handleGoDetail(billMonth)}> + {text} + + ); + }, + }; + } + return { ...it }; + }); + this.setState({ + tableData: { + list, + columns: [ + ...columns, + { + title: "操作", + dataIndex: "action", + key: "action", + render: (text, r) => { + const { billStatus, billMonth } = r; + return ( + + {billStatus === "未归档" && ( + this.handleGoDetail(billMonth)}> + {" "} + 核算{" "} + + )} + {billStatus === "未归档" && ( + + this.handleOperate({ key, billMonth }) + }> + 归档 + 异常详情 + 删除 + 操作日志 + + }> + + + )} + {billStatus === "已归档" && ( + + this.handleOperate({ key, billMonth }) + }> + 查看 + 操作日志 + + }> + + + )} + + ); + }, + }, + ], + total, + }, + }); + }); + }; + + inspectList = (payload) => { + const { inspectList } = this.props.standingBookStore; + inspectList({ ...payload }).then((res) => { + console.log("liyongshun", res); + }); + }; + + handleGoDetail = (billMonth) => { + window.open( + `/spa/hrmSalary/static/index.html#/main/hrmSalary/socialSecurityBenefits/standingBookDetail?billMonth=${billMonth}` + ); + }; + handleOperate = (payload) => { + const { siaccountFile, siaccountDelete, deleteLoading } = + this.props.standingBookStore; + const { key, billMonth } = payload; + switch (key) { + case "archive": + Modal.confirm({ + title: "确认信息", + content: "确认要归档吗?", + onOk: () => { + siaccountFile({ billMonth }).then((res) => { + console.log("res", res); + }); + }, + onCancel: () => {}, + }); + break; + case "detail": + this.inspectList({ billMonth }); + this.setState({ + drawerProps: { + ...this.state.drawerProps, + title: "核算异常", + visible: true, + }, + }); + break; + case "delete": + Modal.confirm({ + title: "确认信息", + content: "确认删除本条数据吗?", + confirmLoading: deleteLoading, + onOk: () => { + siaccountDelete({ billMonth }).then(() => { + message.success("删除成功"); + this.getCommonList({ ...this.state.tableParams }); + }); + }, + onCancel: () => {}, + }); + case "view": + this.handleGoDetail(billMonth); + break; + default: + break; + } + }; + handleOk = (formVal) => { + const { save } = this.props.standingBookStore; + const { billMonth, ...extra } = formVal; + const payload = { + billMonth: moment(billMonth).format("YYYY-MM"), + ...extra, + }; + save(payload).then(() => { + message.success("核算成功"); + this.handleClose(); + this.getCommonList({ ...this.state.tableParams }); + this.handleGoDetail(moment(billMonth).format("YYYY-MM")); + }); + }; + + handleClose = () => { + this.setState({ + dialogProps: { + ...this.state.dialogProps, + title: "", + visible: false, + }, + }); + }; + + handleChangeMonth = (type, val) => { + this.setState({ + tableParams: { + ...this.state.tableParams, + [type]: val, + }, + }); + this.getCommonList({ + ...this.state.tableParams, + [type]: val, + }); + }; + + render() { + const { standingBookStore } = this.props; + const { + inspectLoading, + loading, + hasRight, + form, + condition, + tableStore, + showSearchAd, + getTableDatas, + doSearch, + setShowSearchAd, + } = standingBookStore; + const { list, columns, total } = this.state.tableData; + const { startTime, endTime } = this.state.tableParams; + const { dialogProps, drawerProps } = this.state; + const abnormalColumns = _.map( + _.filter(tableStore.columns, (it) => it.hide && it.hide === "false"), + (item) => ({ ...item, width: item.oldWidth }) + ); + if (!hasRight && !loading) { + // 无权限处理 return renderNoright(); } - const rightMenu = [// 右键菜单 + const rightBtns = [ + // 右键菜单 + , + + 操作日志 + 自定义列 + 帮助 + + }> + + , + ]; + const rightMenu = [ + // 右键菜单 { - key: 'BTN_COLUMN', - icon: , - content: '显示列定制', - onClick: this.showColumn + key: "BTN_COLUMN", + icon: , + content: "显示列定制", + onClick: this.showColumn, }, ]; - const collectParams = { // 收藏功能配置 - favname: '社保福利台账', + const collectParams = { + // 收藏功能配置 + favname: "社保福利台账", favouritetype: 1, objid: 0, - link: 'wui/index.html#/ns_demo03/index', + link: "wui/index.html#/ns_demo03/index", importantlevel: 1, }; - const adBtn = [ // 高级搜索内部按钮 - , - , - , + const adBtn = [ + // 高级搜索内部按钮 + , + , + , ]; - const topTab = [ - ]; + const topTab = []; const renderSearchOperationItem = () => { - return
- - } + return
; + }; return ( -
+
} // 左侧图标 - iconBgcolor='#F14A2D' // 左侧图标背景色 - showDropIcon={true} // 是否显示下拉按钮 - dropMenuDatas={rightMenu} // 下拉菜单(和页面的右键菜单相同) - dropMenuProps={{ collectParams }} // 收藏功能: 配置之后显示 收藏、帮助、显示页面地址 这3个功能 + title="社保福利台账" // 文字 + icon={} // 左侧图标 + iconBgcolor="#F14A2D" // 左侧图标背景色 + buttons={rightBtns} + // showDropIcon={true} // 是否显示下拉按钮 + // dropMenuDatas={rightMenu} // 下拉菜单(和页面的右键菜单相同) + // dropMenuProps={{ collectParams }} // 收藏功能: 配置之后显示 收藏、帮助、显示页面地址 这3个功能 > - { - this.setState({selectedKey: v}) - }} +
+
账单月份:
+ this.handleChangeMonth("startTime", val)} + /> + + this.handleChangeMonth("endTime", val)} + /> +
+ it.dataIndex !== "id")} + dataSource={list} + loading={loading} + pagination={{ total }} /> - + {dialogProps.visible && ( + this.handleClose()} + onOk={this.handleOk} + loading={loading} + /> + )} + {drawerProps.visible && ( + { + this.setState({ + drawerProps: { + ...this.state.drawerProps, + title: "", + visible: false, + }, + }); + }} + columns={abnormalColumns} + // onOk={this.handleOk} + loading={inspectLoading} + /> + )}
- ) + ); } } diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/index.less b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/index.less new file mode 100644 index 00000000..0223e817 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBook/index.less @@ -0,0 +1,29 @@ +.standingbookWrapper { + .wea-new-top-content { + padding: 0 16px; + .wea-new-table { + .ant-table-row:hover { + .more { + display: inline-block; + } + } + .linkTo { + text-decoration: none; + color: #4d7ad8; + } + .more { + margin-left: 8px; + cursor: pointer; + display: none; + } + } + } + .billDateWrapper { + display: flex; + align-items: center; + height: 46px; + .to { + padding: 0 8px; + } + } +} diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/abnormalList.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/abnormalList.js new file mode 100644 index 00000000..b1caa8e8 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/abnormalList.js @@ -0,0 +1,86 @@ +/* + * Author: 黎永顺 + * Description: 异常列表 + * Date: 2022-04-20 21:00:54 + * LastEditTime: 2022-04-21 17:43:31 + */ +import React, { Component } from "react"; +import { Icon, Tooltip, Button } from "antd"; +import { inject, observer } from "mobx-react"; +import { WeaInputSearch, WeaTable } from "ecCom"; +import "./index.less"; + +@inject("standingBookStore") +@observer +export default class AbnormalListIndex extends Component { + constructor(props) { + super(props); + this.state = { + selectedRowKeys: [], + tableData: { + list: [], + columns: [], + total: 0, + }, + }; + } + + componentDidMount() { + const { billMonth } = this.props; + this.getChangeList({ billMonth }); + } + + getChangeList = (payload = {}) => { + const { getChangeList, tableStore } = this.props.standingBookStore; + getChangeList({ ...payload }).then(({ list, total }) => { + this.setState({ + tableData: { + list, + total, + }, + }); + }); + }; + render() { + const { remarks, billMonth, selectedKey } = this.props; + const { selectedRowKeys } = this.state; + const { loading, tableStore } = this.props.standingBookStore; + const columns = _.map( + _.filter(tableStore.columns, (it) => it.hide && it.hide === "false"), + (item) => ({ ...item, width: item.oldWidth }) + ); + let { list, total } = this.state.tableData; + return ( +
+
+
+ + 账单月份 + + + + + {billMonth} +
+
+
+ + +
+ {/* table */} +
+ +
+
+ ); + } +} diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/accountDialog.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/accountDialog.js new file mode 100644 index 00000000..ba33e0ad --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/accountDialog.js @@ -0,0 +1,71 @@ +/* + * Author: 黎永顺 + * Description: 添加弹框 + * Date: 2022-04-21 19:59:45 + * LastEditTime: 2022-04-21 20:14:23 + */ +import React, { Component } from "react"; +import { Button, Form, Input } from "antd"; +import { WeaDatePicker, WeaDialog } from "ecCom"; + +const createForm = Form.create; +const FormItem = Form.Item; + +class Accountdialog extends Component { + constructor(props) { + super(props); + this.state = {}; + } + + handleSubmit = (e) => { + const { onOk } = this.props; + e.preventDefault(); + this.props.form.validateFields((errors, values) => { + if (!!errors) { + return; + } + onOk(values); + }); + }; + render() { + const { getFieldProps } = this.props.form; + const formItemLayout = { + labelCol: { span: 7 }, + wrapperCol: { span: 12 }, + }; + return ( + + 保存并进入核算 + , + ]}> +
+ + + + + + +
+
+ ); + } +} + +export default createForm()(Accountdialog); diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/index.less b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/index.less new file mode 100644 index 00000000..d289737e --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/index.less @@ -0,0 +1,33 @@ +.normalWapper { + .topContent { + padding: 8px 20px; + display: flex; + align-items: center; + + .month { + margin-right: 26px; + + span:first-child { + margin-right: 8px; + } + + i { + color: #666; + margin-left: 8px; + } + } + } + + .tabOption { + display: flex; + align-items: center; + padding: 8px 20px; + justify-content: flex-end; + + i, + button { + cursor: pointer; + margin-right: 10px; + } + } +} \ No newline at end of file diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/normal.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/normal.js new file mode 100644 index 00000000..553f32c9 --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/normal.js @@ -0,0 +1,335 @@ +/* + * Author: 黎永顺 + * Description: 正常缴纳月份 + * Date: 2022-04-20 08:56:08 + * LastEditTime: 2022-04-22 14:05:50 + */ +import React, { Component } from "react"; +import { Icon, Tooltip, Button, message, Modal } from "antd"; +import { inject, observer } from "mobx-react"; +import { toJS } from "mobx"; +import { WeaInputSearch, WeaTable, WeaPopoverHrm, WeaDialog } from "ecCom"; +import { getSearchs } from "../../../../util"; +import _ from "lodash"; +import "./index.less"; + +@inject("standingBookStore") +@observer +export default class NormalIndex extends Component { + constructor(props) { + super(props); + this.state = { + date: "", + selectedRowKeys: [], + addProps: { + title: "", + visible: false, + }, + tableData: { + list: [], + columns: [], + total: 0, + }, + }; + } + + componentDidMount() { + const { billMonth, selectedKey } = this.props; + selectedKey === "1" + ? this.getNormalList({ billMonth }) + : this.getSupplementaryList({ billMonth }); + } + + componentWillReceiveProps(nextProps) { + if (nextProps.selectedKey != this.props.selectedKey) { + const { billMonth } = nextProps; + nextProps.selectedKey === "1" + ? this.getNormalList({ billMonth }) + : this.getSupplementaryList({ billMonth }); + } + } + + handleSave = () => { + const { siaccountCommonSave, siaccountSupplementarySave, form } = + this.props.standingBookStore; + const { billMonth, selectedKey } = this.props; + if (selectedKey === "1") { + const { includes } = form.getFormParams(); + const payload = { + billMonth, + includes: includes.split(","), + }; + siaccountCommonSave(payload).then(() => { + message.success("添加成功"); + this.getNormalList({ billMonth }); + this.setState({ + addProps: { + ...this.state.addProps, + title: "", + visible: false, + }, + }); + }); + } else { + form.validateForm().then((f) => { + if (f.isValid) { + const { + includes, + billMonth: billMonthList, + excludes, + projects, + } = form.getFormParams(); + const payload = { + billMonth, + billMonthList: billMonthList.split(","), + includes: includes.split(","), + excludes: excludes.split(","), + projects: projects.split(","), + }; + siaccountSupplementarySave(payload).then(() => { + message.success("添加成功"); + this.getSupplementaryList({ billMonth }); + this.setState({ + addProps: { + ...this.state.addProps, + title: "", + visible: false, + }, + }); + }); + } else { + f.showErrors(); + this.setState({ date: new Date() }); // 改变一个state的变量,强制页面刷新 + } + }); + } + }; + + getNormalList = (payload = {}) => { + const { getNormalList } = this.props.standingBookStore; + getNormalList({ ...payload }).then(({ list, columns = [], total }) => { + columns = _.map( + _.filter(columns, (it) => it.dataIndex !== "id"), + (it) => { + if (it.dataIndex === "employeeId") { + it = { + ...it, + width: 150, + fixed: "left", + render: (text, r) => { + const { userName, employeeId } = r; + return ( + + window.pointerXY(e)} + title={userName}> + {userName} + + + ); + }, + }; + } + return { + ...it, + title: , + width: 150, + }; + } + ); + this.setState({ + tableData: { + list, + columns, + total, + }, + }); + }); + }; + getSupplementaryList = (payload = {}) => { + const { getSupplementaryList } = this.props.standingBookStore; + getSupplementaryList({ ...payload }).then( + ({ list, columns = [], total }) => { + columns = _.map( + _.filter(columns, (it) => it.dataIndex !== "id"), + (it) => { + if (it.dataIndex === "employeeId") { + it = { + ...it, + width: 150, + fixed: "left", + render: (text, r) => { + const { userName, employeeId } = r; + return ( + + window.pointerXY(e)} + title={userName}> + {userName} + + + ); + }, + }; + } + return { + ...it, + title: ( + + ), + width: 150, + }; + } + ); + this.setState({ + tableData: { + list, + columns, + total, + }, + }); + } + ); + }; + onSelectChange = (selectedRowKeys) => { + this.setState({ selectedRowKeys }); + }; + handleBatchDelete = () => { + const { siaccountCommonDelete } = this.props.standingBookStore; + const { list } = this.state.tableData; + const { selectedRowKeys } = this.state; + const { billMonth, selectedKey } = this.props; + if (_.isEmpty(selectedRowKeys)) { + message.warning("未勾选数据!"); + } else { + const includes = _.map( + _.filter(list, (it) => selectedRowKeys.includes(it.id)), + (item) => item.employeeId + ); + Modal.confirm({ + title: "确认信息", + content: "确认删除勾选的数据吗?", + onOk: () => { + siaccountCommonDelete({ billMonth, includes }).then(() => { + message.success("删除成功"); + this.setState({ selectedRowKeys: [] }); + selectedKey === "1" + ? this.getNormalList({ billMonth }) + : this.getSupplementaryList({ billMonth }); + }); + }, + onCancel: () => {}, + }); + } + }; + handleAdd = () => { + const { siaccountCommonForm, querySupplementaryForm } = + this.props.standingBookStore; + const { billMonth, selectedKey } = this.props; + if (selectedKey === "1") { + siaccountCommonForm(); + } else { + querySupplementaryForm(); + } + this.setState({ + addProps: { + ...this.state.addProps, + title: "添加缴纳人员", + visible: true, + }, + }); + }; + render() { + const { remarks, billMonth, selectedKey } = this.props; + const { selectedRowKeys, addProps, date } = this.state; + const { loading, form, condition, saveLoading } = + this.props.standingBookStore; + let { list, columns, total } = this.state.tableData; + const rowSelection = { + selectedRowKeys, + onChange: this.onSelectChange, + }; + return ( +
+ {selectedKey === "1" && ( +
+
+ + 账单月份 + + + + + {billMonth} +
+
+ 备注: + {remarks} +
+
+ )} +
+ + + + + + + {addProps.visible && ( + + this.setState({ + addProps: { + ...addProps, + title: "", + visible: false, + }, + }) + } + buttons={[ + , + , + ]}> + {getSearchs(form, toJS(condition), 1)} + + )} + {selectedKey === "3" && ( + + + + )} + + + + {selectedKey === "1" && } + +
+ {/* table */} +
+ +
+
+ ); + } +} diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/overView.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/overView.js new file mode 100644 index 00000000..043384ea --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/components/overView.js @@ -0,0 +1,99 @@ +/* + * Author: 黎永顺 + * Description: 总览 + * Date: 2022-04-20 20:49:23 + * LastEditTime: 2022-04-20 21:36:46 + */ +/* + * Author: 黎永顺 + * Description: 总览月份 + * Date: 2022-04-20 08:56:08 + * LastEditTime: 2022-04-20 20:45:54 + */ +import React, { Component } from 'react'; +import { Icon, Tooltip, Button } from 'antd'; +import { inject, observer } from 'mobx-react'; +import { WeaInputSearch, WeaTable } from 'ecCom'; +import './index.less'; + + +@inject('standingBookStore') +@observer +export default class OverViewIndex extends Component { + constructor(props) { + super(props); + this.state = { + selectedRowKeys: [], + tableData: { + list: [], columns: [], total: 0 + } + } + } + + componentDidMount() { + const { billMonth } = this.props; + this.getOverViewList({ billMonth }) + } + + getOverViewList = (payload = {}) => { + const { getOverViewList } = this.props.standingBookStore; + getOverViewList({ ...payload }).then(({ list, columns = [], total }) => { + columns = _.map(_.filter(columns, it => it.dataIndex !== 'id'), it => { + // if (it.dataIndex === "employeeId") { + // it = { + // ...it, + // width: 150, + // fixed: 'left' + // } + // } + return { + ...it, + title: , + } + }) + this.setState({ + tableData: { + list, + columns, + total + } + }) + }) + } + render() { + const { remarks, billMonth, selectedKey } = this.props; + const { selectedRowKeys } = this.state; + const { loading } = this.props.standingBookStore; + let { list, columns, total } = this.state.tableData; + return ( +
+
+
+ + 账单月份 + + + + + {billMonth} +
+
+
+ +
+ {/* table */} +
+ +
+
+ ) + } +} + diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/constant.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/constant.js new file mode 100644 index 00000000..98b0539a --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/constant.js @@ -0,0 +1,32 @@ +export const unArchiveTabs = [ + { + title: "正常缴纳", + viewcondition: "NORMAL", + }, + { + title: "异动清单", + viewcondition: "LIST", + }, + { + title: "补缴", + viewcondition: "PAY", + }, + { + title: "总览", + viewcondition: "OVERVIEW", + }, +]; +export const archiveTabs = [ + { + title: "正常缴纳", + viewcondition: "NORMAL", + }, + { + title: "补缴", + viewcondition: "PAY", + }, + { + title: "总览", + viewcondition: "OVERVIEW", + }, +]; diff --git a/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/index.js b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/index.js new file mode 100644 index 00000000..c585bd6d --- /dev/null +++ b/pc4mobx/hrmSalary/pages/socialSecurityBenefits/standingBookDetail/index.js @@ -0,0 +1,75 @@ +/* + * Author: 黎永顺 + * Description: 台账详情 + * Date: 2022-04-19 16:57:29 + * LastEditTime: 2022-04-20 21:01:57 + */ +import React, { Component } from 'react'; +import { inject, observer } from 'mobx-react'; +import { WeaTab } from 'ecCom'; +import NormalIndex from './components/normal'; +import OverViewIndex from './components/overView'; +import AbnormalListIndex from './components/abnormalList'; +import _ from 'lodash'; + +@inject('standingBookStore') +@observer +class StandingBookDetail extends Component { + constructor(props) { + super(props); + this.state = { + selectedKey: '', + tabList: [], + remarks: '', + billMonth: '' + } + } + + componentDidMount() { + this.getTabList(); + } + + getTabList = (payload = {}) => { + const { getTabList } = this.props.standingBookStore; + const billMonth = this.props.location.query.billMonth; + getTabList({ billMonth }).then(({ data }) => { + const { tabList, remarks, billMonth } = data; + this.setState({ + selectedKey: tabList[0].id, + tabList: _.map(tabList, it => ({ title: it.content, viewcondition: it.id })), + remarks, billMonth + }); + }) + } + + render() { + const { selectedKey, tabList, remarks, billMonth } = this.state; + return ( +
+ { + this.setState({ selectedKey }) + }} + /> + { + (selectedKey === '1' || selectedKey === '3') && + + } + { + selectedKey === '2' && + + } + { + selectedKey === '4' && + + } +
+ ); + } +} + +export default StandingBookDetail; + diff --git a/pc4mobx/hrmSalary/stores/StandingBook.js b/pc4mobx/hrmSalary/stores/StandingBook.js new file mode 100644 index 00000000..65f99ed1 --- /dev/null +++ b/pc4mobx/hrmSalary/stores/StandingBook.js @@ -0,0 +1,349 @@ +import { observable, action, toJS } from "mobx"; +import { message } from "antd"; +import { WeaForm, WeaTableNew } from "comsMobx"; +import _ from "lodash"; + +import * as API from "../apis/standingBook"; // 引入API接口文件 + +const { TableStore } = WeaTableNew; + +export class StandingBookStore { + @observable tableStore = new TableStore(); // new table + @observable form = new WeaForm(); // nrew 一个form + @observable condition = []; // 存储后台得到的form数据 + @observable hasRight = true; // 判断用户是有权限查看当前页面: 没有权限渲染无权限页面,有权限渲染数据 + @observable showSearchAd = false; // 高级搜索面板显示 + @observable loading = false; // 数据加载状态 + @observable inspectLoading = false; // 核算异常列表加载loading + @observable saveLoading = false; // 添加正常缴纳人员loading + @observable deleteLoading = false; // 删除月份表单loading + + // 初始化操作 + @action + doInit = () => { + // this.getCondition(); + // this.getTableDatas(); + }; + + // 社会福利台账-获取正常缴纳列表 + @action + getCommonList = (params) => { + this.loading = true; + return new Promise((resolve, reject) => { + API.getCommonList(params).then( + action(({ data, status }) => { + this.loading = false; + if (status) { + // 接口请求成功/失败处理 + const { + pageInfo: { list, columns, total }, + } = data; + resolve({ list, columns, total }); + } else { + message.error("接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-获取正常缴纳列表 + @action + getNormalList = (params) => { + this.loading = true; + return new Promise((resolve, reject) => { + API.getNormalList(params).then( + action(({ data, status }) => { + this.loading = false; + if (status) { + // 接口请求成功/失败处理 + const { + pageInfo: { list, columns, total }, + } = data; + resolve({ list, columns, total }); + } else { + message.error("接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-获取补缴列表 + @action + getSupplementaryList = (params) => { + this.loading = true; + return new Promise((resolve, reject) => { + API.getSupplementaryList(params).then( + action(({ data, status }) => { + this.loading = false; + if (status) { + // 接口请求成功/失败处理 + const { + pageInfo: { list, columns, total }, + } = data; + resolve({ list, columns, total }); + } else { + message.error("接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-获取总览列表 + @action + getOverViewList = (params) => { + this.loading = true; + return new Promise((resolve, reject) => { + API.getOverViewList(params).then( + action(({ data, status }) => { + this.loading = false; + if (status) { + // 接口请求成功/失败处理 + const { list, columns, total } = data; + resolve({ list, columns, total }); + } else { + message.error("接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-获取异动列表 + @action + getChangeList = (params) => { + this.loading = true; + return new Promise((resolve, reject) => { + API.getChangeList(params).then( + action(({ data, status }) => { + this.loading = false; + if (status) { + // 接口请求成功/失败处理 + const { + dataKey: { datas }, + pageInfo: { list, total }, + } = data; + this.tableStore.getDatas(datas); + resolve({ list, total }); + } else { + message.error("接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-获取正tab列表 + @action + getTabList = (params) => { + this.loading = true; + return new Promise((resolve, reject) => { + API.getTabList(params).then( + action(({ data, status }) => { + this.loading = false; + if (status) { + // 接口请求成功/失败处理 + resolve({ data }); + } else { + message.error("接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-保存并进入核算 + @action + save = (params) => { + this.loading = true; + return new Promise((resolve, reject) => { + API.save(params).then( + action(({ data, status, errormsg }) => { + this.loading = false; + if (status) { + // 接口请求成功/失败处理 + resolve({ data }); + } else { + message.error(errormsg || "接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-归档 + @action + siaccountFile = (params) => { + this.loading = true; + return new Promise((resolve, reject) => { + API.siaccountFile(params).then( + action(({ data, status, errormsg }) => { + this.loading = false; + if (status) { + // 接口请求成功/失败处理 + resolve({ data }); + } else { + message.error(errormsg || "接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-删除正常缴纳人员 + @action + siaccountCommonDelete = (params) => { + return new Promise((resolve, reject) => { + API.siaccountCommonDelete(params).then( + action(({ data, status, errormsg }) => { + if (status) { + // 接口请求成功/失败处理 + resolve({ data }); + } else { + message.error(errormsg || "接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-核算异常列表 + @action + inspectList = (params) => { + this.inspectLoading = true; + return new Promise((resolve, reject) => { + API.inspectList(params).then( + action(({ data, status, errormsg }) => { + this.inspectLoading = false; + if (status) { + // 接口请求成功/失败处理 + const { + dataKey: { datas }, + pageInfo: { list, total }, + } = data; + this.tableStore.getDatas(datas); + resolve({ list, total }); + } else { + message.error(errormsg || "接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-添加正常缴纳人员 + @action + siaccountCommonSave = (params) => { + this.saveLoading = true; + return new Promise((resolve, reject) => { + API.siaccountCommonSave(params).then( + action(({ data, status, errormsg }) => { + this.saveLoading = false; + if (status) { + resolve({ data }); + } else { + message.error(errormsg || "接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-添加补缴人员 + @action + siaccountSupplementarySave = (params) => { + this.saveLoading = true; + return new Promise((resolve, reject) => { + API.siaccountSupplementarySave(params).then( + action(({ data, status, errormsg }) => { + this.saveLoading = false; + if (status) { + resolve({ data }); + } else { + message.error(errormsg || "接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 社会福利台账-删除月份表单 + @action + siaccountDelete = (params) => { + this.deleteLoading = true; + return new Promise((resolve, reject) => { + API.siaccountDelete(params).then( + action(({ data, status, errormsg }) => { + this.deleteLoading = false; + if (status) { + resolve({ data }); + } else { + message.error(errormsg || "接口调用失败!"); + reject(); + } + }) + ); + }); + }; + // 获得高级搜索表单数据 + @action + siaccountCommonForm = () => { + API.siaccountCommonForm().then( + action((res) => { + if (res.status) { + // 接口请求成功/失败处理 + this.condition = res.data.condition; + this.form.initFormFields(res.data.condition); // 渲染高级搜索form表单 + } else { + message.error(res.msg || "接口调用失败!"); + } + }) + ); + }; + // 补缴添加缴纳人员表单 + @action + querySupplementaryForm = () => { + API.querySupplementaryForm().then( + action((res) => { + if (res.status) { + // 接口请求成功/失败处理 + this.condition = res.data.condition; + this.form.initFormFields(res.data.condition); // 渲染高级搜索form表单 + } else { + message.error(res.msg || "接口调用失败!"); + } + }) + ); + }; + + // 渲染table数据 + @action + getTableDatas = (params) => { + this.loading = true; + const formParams = this.form.getFormParams() || {}; + params = params || formParams; + API.getTableDatas(params).then( + action((res) => { + if (res.api_status) { + // 接口请求成功/失败处理 + this.tableStore.getDatas(res.datas); // table 请求数据 + this.hasRight = res.hasRight; + } else { + message.error(res.msg || "接口调用失败!"); + } + this.loading = false; + }) + ); + }; + + @action + setShowSearchAd = (bool) => (this.showSearchAd = bool); + + // 高级搜索 - 搜索 + @action doSearch = () => { + this.getTableDatas(); + this.showSearchAd = false; + }; +} diff --git a/pc4mobx/hrmSalary/stores/index.js b/pc4mobx/hrmSalary/stores/index.js index 4eb20a5d..74ad8911 100644 --- a/pc4mobx/hrmSalary/stores/index.js +++ b/pc4mobx/hrmSalary/stores/index.js @@ -1,21 +1,21 @@ - -import { BaseTableStore } from './baseTable'; -import { MySalaryStore } from'./mySalary'; -import { TaxAgentStore } from './taxAgent'; -import { BaseFormStore } from './baseForm'; -import { taxRateStore } from './taxRate'; -import { CumDeductStore } from "./cumDeduct" -import { OtherDeductStore } from "./otherDeduct" -import { CumSituationStore } from './cumSituation' -import { ProgrammeStore } from './programme' -import { AttendanceStore } from './attendanceStore'; -import { SalaryItemStore } from './salaryItem' -import { LedgerStore } from './ledger' -import { ArchivesStore } from './archives' -import { salaryFileStore } from './salaryFile'; -import { payrollStore } from './payroll'; -import { calculateStore } from './calculate'; -import { DeclareStore } from './declare'; +import { BaseTableStore } from "./baseTable"; +import { MySalaryStore } from "./mySalary"; +import { TaxAgentStore } from "./taxAgent"; +import { BaseFormStore } from "./baseForm"; +import { taxRateStore } from "./taxRate"; +import { CumDeductStore } from "./cumDeduct"; +import { OtherDeductStore } from "./otherDeduct"; +import { CumSituationStore } from "./cumSituation"; +import { ProgrammeStore } from "./programme"; +import { AttendanceStore } from "./attendanceStore"; +import { SalaryItemStore } from "./salaryItem"; +import { LedgerStore } from "./ledger"; +import { ArchivesStore } from "./archives"; +import { salaryFileStore } from "./salaryFile"; +import { payrollStore } from "./payroll"; +import { calculateStore } from "./calculate"; +import { DeclareStore } from "./declare"; +import { StandingBookStore } from "./StandingBook"; module.exports = { baseFormStore: new BaseFormStore(), @@ -34,6 +34,6 @@ module.exports = { salaryFileStore: new salaryFileStore(), payrollStore: new payrollStore(), calculateStore: new calculateStore(), - declareStore: new DeclareStore() + declareStore: new DeclareStore(), + standingBookStore: new StandingBookStore(), }; -