shouKuang.jsx 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811
  1. import React from "react";
  2. import $ from "jquery/src/ajax";
  3. import moment from "moment";
  4. import "./public.less";
  5. import {
  6. Button,
  7. Form,
  8. Input,
  9. Spin,
  10. Table,
  11. Select,
  12. message,
  13. DatePicker,
  14. Modal,
  15. Tabs
  16. } from "antd";
  17. import OrderDesc from "../orderDetail/orderDesc";
  18. import Receivable from "./receivable";
  19. import Assign from "@/manageCenter/publicComponent/assign";
  20. import {
  21. getLiquidationStatus,
  22. getProcessStatus,
  23. getApproval,
  24. getInvoiceStatus
  25. } from "@/tools";
  26. import { ChooseList } from "../../order/orderNew/chooseList"
  27. const FormItem = Form.Item;
  28. const { TabPane } = Tabs;
  29. const ShouKuang = React.createClass({
  30. departmentList() {
  31. this.setState({
  32. loading: true
  33. });
  34. $.ajax({
  35. method: "get",
  36. dataType: "json",
  37. crossDomain: false,
  38. url: globalConfig.context + "/api/admin/organization/selectSuperId",
  39. data: {},
  40. success: function(data) {
  41. let thedata = data.data;
  42. let theArr = [];
  43. if (!thedata) {
  44. if (data.error && data.error.length) {
  45. message.warning(data.error[0].message);
  46. }
  47. } else {
  48. thedata.map(function(item, index) {
  49. theArr.push({
  50. key: index,
  51. name: item.name,
  52. id: item.id
  53. });
  54. });
  55. }
  56. this.setState({
  57. departmentArr: theArr
  58. });
  59. }.bind(this)
  60. }).always(
  61. function() {
  62. this.setState({
  63. loading: false
  64. });
  65. }.bind(this)
  66. );
  67. },
  68. loadData(pageNo) {
  69. this.state.data = [];
  70. this.setState({
  71. selectedRowKeys: [],
  72. selectedRowKey: [],
  73. page: pageNo,
  74. loading: true
  75. });
  76. $.ajax({
  77. method: "get",
  78. dataType: "json",
  79. crossDomain: false,
  80. url: globalConfig.context + "/api/admin/financial/financeList",
  81. data: {
  82. pageNo: pageNo || 1,
  83. pageSize: this.state.pagination.pageSize,
  84. buyerName: this.state.nameSearch, //客户名称
  85. orderNo: this.state.orderNoSearch,
  86. startTime: this.state.releaseDate[0],
  87. endTime: this.state.releaseDate[1],
  88. departmentId: this.state.departmenttList,
  89. processStatus: this.state.processStatusSearch,
  90. contractNo: this.state.contractNoSearch
  91. },
  92. success: function(data) {
  93. let theArr = [];
  94. if (!data.data || !data.data.list) {
  95. if (data.error && data.error.length) {
  96. message.warning(data.error[0].message);
  97. }
  98. } else {
  99. for (let i = 0; i < data.data.list.length; i++) {
  100. let thisdata = data.data.list[i];
  101. theArr.push({
  102. key: thisdata.orderNo,
  103. orderNo: thisdata.orderNo,
  104. orderType: thisdata.orderType,
  105. orderStatus: thisdata.orderStatus,
  106. sellerName: thisdata.sellerName,
  107. processStatus: thisdata.processStatus,
  108. liquidationStatus: thisdata.liquidationStatus,
  109. approval: thisdata.approval,
  110. buyerName: thisdata.buyerName,
  111. actuallyTotalAmount: thisdata.actuallyTotalAmount,
  112. signTime: thisdata.signTime,
  113. companyId: thisdata.companyId,
  114. companyName: thisdata.companyName,
  115. buyerId: thisdata.buyerId,
  116. buyerName: thisdata.buyerName,
  117. contractNo: thisdata.contractNo,
  118. createTime: thisdata.createTime,
  119. departmentName: thisdata.departmentName
  120. });
  121. }
  122. }
  123. this.state.pagination.current = data.data.pageNo;
  124. this.state.pagination.total = data.data.totalCount;
  125. if (data.data && data.data.list && !data.data.list.length) {
  126. this.state.pagination.current = 0;
  127. this.state.pagination.total = 0;
  128. }
  129. this.setState({
  130. totalPage: data.data.totalPage,
  131. dataSource: theArr,
  132. pagination: this.state.pagination
  133. });
  134. }.bind(this)
  135. }).always(
  136. function() {
  137. this.setState({
  138. loading: false
  139. });
  140. }.bind(this)
  141. );
  142. },
  143. getInitialState() {
  144. return {
  145. searchMore: true,
  146. assignVisibleX: false,
  147. assignVisibleY: false,
  148. releaseDate: [],
  149. assignDataX: [],
  150. assignDataY: [],
  151. totalPage: 0,
  152. processStatusSearch: "3",
  153. boHuivisible: false,
  154. selectedRowKeys: [],
  155. selectedRows: [],
  156. loading: false,
  157. pagination: {
  158. defaultCurrent: 1,
  159. defaultPageSize: 10,
  160. showQuickJumper: true,
  161. pageSize: 10,
  162. onChange: function(page) {
  163. this.loadData(page);
  164. }.bind(this),
  165. showTotal: function(total) {
  166. return "共" + total + "条数据";
  167. }
  168. },
  169. // 子组件改变的表格title数组
  170. changeList: undefined,
  171. columns: [
  172. {
  173. title: "订单编号",
  174. dataIndex: "orderNo",
  175. key: "orderNo"
  176. // fixed: "left"
  177. },
  178. {
  179. title: "签单日期",
  180. dataIndex: "signTime",
  181. key: "signTime"
  182. },
  183. {
  184. title: "下单日期",
  185. dataIndex: "createTime",
  186. key: "createTime"
  187. },
  188. {
  189. title: "已收款(万元)",
  190. dataIndex: "actuallyTotalAmount",
  191. key: "actuallyTotalAmount"
  192. },
  193. {
  194. title: "客户名称",
  195. dataIndex: "buyerName",
  196. key: "buyerName"
  197. },
  198. {
  199. title: "流程状态",
  200. dataIndex: "processStatus",
  201. key: "processStatus",
  202. render: text => {
  203. return getProcessStatus(text);
  204. }
  205. },
  206. {
  207. title: "订单部门",
  208. dataIndex: "departmentName",
  209. key: "departmentName"
  210. },
  211. {
  212. title: "特批状态",
  213. dataIndex: "approval",
  214. key: "approval",
  215. render: text => {
  216. return getApproval(text);
  217. }
  218. },
  219. {
  220. title: "合同编号",
  221. dataIndex: "contractNo",
  222. key: "contractNo"
  223. },
  224. // {
  225. // title: '订单状态',
  226. // dataIndex: 'orderStatus',
  227. // key: 'orderStatus',
  228. // render: text => { return getNewOrderStatus(text)}
  229. // },
  230. {
  231. title: "订单负责人",
  232. dataIndex: "sellerName",
  233. key: "sellerName"
  234. },
  235. {
  236. title: "结算状态",
  237. dataIndex: "liquidationStatus",
  238. key: "liquidationStatus",
  239. render: text => {
  240. return getLiquidationStatus(text);
  241. }
  242. },
  243. {
  244. title: "操作",
  245. dataIndex: "caozuo",
  246. key: "caouzo",
  247. render: (text, recard) => {
  248. return (
  249. <div>
  250. {recard.liquidationStatus < 2 &&
  251. (recard.approval === 1 || recard.approval === 2) ? (
  252. <Button
  253. style={{ background: "rgb(192,192,192)" }}
  254. onClick={e => {
  255. e.stopPropagation(), this.evaluateX(recard);
  256. }}
  257. >
  258. 收款
  259. </Button>
  260. ) : (
  261. <Button
  262. type="primary"
  263. onClick={e => {
  264. e.stopPropagation(), this.evaluateX(recard);
  265. }}
  266. >
  267. 收款
  268. </Button>
  269. )}
  270. {recard.approval === 2 && recard.processStatus < 4 ? (
  271. <Button
  272. type="primary"
  273. onClick={e => {
  274. e.stopPropagation(), this.evaluateZ(recard);
  275. }}
  276. style={{ marginLeft: "5px" }}
  277. >
  278. 通过
  279. </Button>
  280. ) : (
  281. ""
  282. )}
  283. {!(
  284. recard.actuallyTotalAmount &&
  285. Number(recard.actuallyTotalAmount) > 0
  286. ) && (
  287. <Button
  288. type="danger"
  289. style={{ marginLeft: "5px" }}
  290. onClick={e => {
  291. e.stopPropagation(), this.reject(recard);
  292. }}
  293. >
  294. 驳回
  295. </Button>
  296. )}
  297. {
  298. <Button
  299. type="primary"
  300. style={{ marginLeft: "5px" }}
  301. onClick={e => {
  302. e.stopPropagation(), this.evaluateY(recard, "财务专员");
  303. }}
  304. >
  305. 转交
  306. </Button>
  307. }
  308. </div>
  309. );
  310. }
  311. }
  312. ],
  313. dataSource: [],
  314. searchTime: [],
  315. columnsDate: [
  316. {
  317. title: "编号",
  318. dataIndex: "id",
  319. key: "id"
  320. },
  321. {
  322. title: "订单编号",
  323. dataIndex: "orderno",
  324. key: "orderno"
  325. },
  326. {
  327. title: "开票金额(万元)",
  328. dataIndex: "amount",
  329. key: "amount"
  330. },
  331. {
  332. title: "申请时间",
  333. dataIndex: "createTime",
  334. key: "createTime"
  335. },
  336. {
  337. title: "开票状态",
  338. dataIndex: "status",
  339. key: "status",
  340. render: text => {
  341. return getInvoiceStatus(text);
  342. }
  343. }
  344. ]
  345. };
  346. },
  347. // 特批通过
  348. evaluateZ(record) {
  349. $.ajax({
  350. method: "POST",
  351. dataType: "json",
  352. crossDomain: false,
  353. url: globalConfig.context + "/api/admin/financial/financeApproval",
  354. data: {
  355. orderNo: record.orderNo
  356. }
  357. }).done(
  358. function(data) {
  359. if (!data.error.length) {
  360. message.success("通过成功!");
  361. this.setState({
  362. loading: false
  363. });
  364. this.loadData();
  365. } else {
  366. message.warning(data.error[0].message);
  367. }
  368. }.bind(this)
  369. );
  370. },
  371. /* 收款 */
  372. evaluateX(recard) {
  373. this.state.assignDataX = recard;
  374. this.setState({
  375. assignVisibleX: true
  376. });
  377. },
  378. /* 转交 */
  379. evaluateY(recard, nub) {
  380. this.state.assignDataY = recard;
  381. this.setState({
  382. nub,
  383. assignVisibleY: true
  384. });
  385. },
  386. /* 驳回 */
  387. reject(recard) {
  388. this.setState({
  389. bohuiData: recard,
  390. boHuiVisible: true,
  391. content: ""
  392. });
  393. },
  394. boHuiOk() {
  395. this.setState({
  396. boHuiVisible: false
  397. });
  398. if (
  399. this.state.pagination.current == this.state.totalPage &&
  400. this.state.pagination.total % 10 == 1
  401. ) {
  402. this.loadData(this.state.page - 1);
  403. } else {
  404. this.loadData(this.state.page);
  405. }
  406. },
  407. boHuiCancel() {
  408. this.setState({
  409. boHuiVisible: false
  410. });
  411. },
  412. componentWillMount() {
  413. this.loadData();
  414. this.departmentList();
  415. },
  416. tableRowClick(record) {
  417. this.state.RowData = record;
  418. this.setState({
  419. showDesc: true
  420. });
  421. },
  422. closeDesc(e, s) {
  423. this.state.showDesc = e;
  424. if (s) {
  425. this.loadData(this.state.page);
  426. }
  427. },
  428. closeAssignX(e, s) {
  429. this.state.assignDataX = {};
  430. this.state.assignVisibleX = e;
  431. if (s) {
  432. this.loadData(this.state.page);
  433. }
  434. },
  435. closeAssignY(e, s) {
  436. this.state.assignDataY = {};
  437. this.state.assignVisibleY = e;
  438. if (s) {
  439. this.loadData(this.state.page);
  440. }
  441. },
  442. search() {
  443. this.loadData();
  444. },
  445. reset() {
  446. this.state.nameSearch = "";
  447. this.state.releaseDate = [];
  448. this.state.orderNoSearch = "";
  449. this.state.departmenttList = undefined;
  450. this.state.processStatus = [];
  451. this.state.contractNoSearch = "";
  452. this.loadData();
  453. },
  454. //驳回
  455. boHuiSubmit(e) {
  456. e.preventDefault();
  457. if (!this.state.content) {
  458. message.warning("请填写驳回原因");
  459. return false;
  460. }
  461. this.setState({
  462. loading: true
  463. });
  464. $.ajax({
  465. method: "POST",
  466. dataType: "json",
  467. crossDomain: false,
  468. url: globalConfig.context + "/api/admin/financial/reject",
  469. data: {
  470. orderNo: this.state.bohuiData.orderNo,
  471. reason: this.state.content
  472. }
  473. }).done(
  474. function(data) {
  475. if (!data.error.length) {
  476. message.success("驳回成功!");
  477. this.setState({
  478. loading: false
  479. });
  480. this.boHuiOk();
  481. } else {
  482. message.warning(data.error[0].message);
  483. }
  484. }.bind(this)
  485. );
  486. },
  487. searchSwitch() {
  488. this.setState({
  489. searchMore: !this.state.searchMore
  490. });
  491. },
  492. changeList(arr) {
  493. const newArr = [];
  494. this.state.columns.forEach(item => {
  495. arr.forEach(val => {
  496. if (val === item.title) {
  497. newArr.push(item);
  498. }
  499. });
  500. });
  501. this.setState({
  502. changeList: newArr
  503. });
  504. },
  505. callback(key) {
  506. console.log(key);
  507. },
  508. onSelectChange(selectedRowKeys) {
  509. console.log("selectedRowKeys changed: ", selectedRowKeys);
  510. this.setState({ selectedRowKeys });
  511. },
  512. inRecordCanl() {
  513. this.setState({
  514. bvisible: false
  515. });
  516. },
  517. inRecordData() {
  518. this.setState({
  519. loading: true
  520. });
  521. $.ajax({
  522. method: "get",
  523. dataType: "json",
  524. crossDomain: false,
  525. url:
  526. globalConfig.context +
  527. "/api/admin/orderInvoice/salesmanOrderInvoiceList",
  528. data: {
  529. orderNo: this.state.selectedRowKeys[0]
  530. },
  531. success: function(data) {
  532. let theArr = [];
  533. let sum = 0;
  534. if (!data.data) {
  535. if (data.error && data.error.length) {
  536. message.warning(data.error[0].message);
  537. }
  538. } else {
  539. for (let i = 0; i < data.data.list.length; i++) {
  540. let thisdata = data.data.list[i];
  541. sum += parseFloat(thisdata.amount);
  542. theArr.push({
  543. id: thisdata.id,
  544. orderno: thisdata.orderno, //订单编号
  545. amount: thisdata.amount, //签单金额
  546. createTime: thisdata.createTime, //流程状态
  547. status: thisdata.status, //结算状态
  548. rejectReason: thisdata.rejectReason
  549. });
  550. }
  551. }
  552. this.setState({
  553. recordData: theArr,
  554. sum: sum.toFixed(4)
  555. });
  556. }.bind(this)
  557. }).done(
  558. function() {
  559. this.setState({
  560. loading: false
  561. });
  562. }.bind(this)
  563. );
  564. },
  565. render() {
  566. const formItemLayout = {
  567. labelCol: { span: 8 },
  568. wrapperCol: { span: 14 }
  569. };
  570. const { RangePicker } = DatePicker;
  571. var departmentArr = this.state.departmentArr || [];
  572. const { loading, selectedRowKeys, visible } = this.state;
  573. const rowSelection = {
  574. selectedRowKeys,
  575. onChange: this.onSelectChange,
  576. hideDefaultSelections: true
  577. };
  578. return (
  579. <div className="user-content">
  580. <div className="content-title">
  581. <span>收款结算</span>
  582. </div>
  583. <Tabs defaultActiveKey="1" onChange={this.callback}>
  584. <TabPane tab="更改表格显示数据" key="1">
  585. <div style={{ marginLeft: 10 }}>
  586. <ChooseList
  587. columns={this.state.columns}
  588. changeFn={this.changeList}
  589. changeList={this.state.changeList}
  590. top={55}
  591. />
  592. </div>
  593. </TabPane>
  594. <TabPane tab="搜索" key="2">
  595. <div className="user-search" style={{ marginLeft: 10 }}>
  596. <Input
  597. placeholder="订单编号"
  598. value={this.state.orderNoSearch}
  599. onChange={e => {
  600. this.setState({ orderNoSearch: e.target.value });
  601. }}
  602. />
  603. <Input
  604. placeholder="客户名称"
  605. value={this.state.nameSearch}
  606. onChange={e => {
  607. this.setState({ nameSearch: e.target.value });
  608. }}
  609. />
  610. <Select
  611. placeholder="订单部门"
  612. style={{ width: 150, marginRight: 10 }}
  613. value={this.state.departmenttList}
  614. onChange={e => {
  615. this.setState({ departmenttList: e });
  616. }}
  617. >
  618. {departmentArr.map(function(item) {
  619. return (
  620. <Select.Option key={item.id}>{item.name}</Select.Option>
  621. );
  622. })}
  623. </Select>
  624. <Input
  625. placeholder="合同编号"
  626. value={this.state.contractNoSearch}
  627. onChange={e => {
  628. this.setState({
  629. contractNoSearch: e.target.value
  630. });
  631. }}
  632. />
  633. <Select
  634. placeholder="流程状态"
  635. onChange={e => {
  636. this.setState({ processStatusSearch: e });
  637. }}
  638. style={{ width: 160, marginRight: 5 }}
  639. value={this.state.processStatusSearch}
  640. >
  641. <Option value="3">未分配</Option>
  642. <Option value="4">已分配</Option>
  643. </Select>
  644. <span style={{ marginRight: 10 }}>下单日期:</span>
  645. <RangePicker
  646. value={[
  647. this.state.releaseDate[0]
  648. ? moment(this.state.releaseDate[0])
  649. : null,
  650. this.state.releaseDate[1]
  651. ? moment(this.state.releaseDate[1])
  652. : null
  653. ]}
  654. onChange={(data, dataString) => {
  655. this.setState({ releaseDate: dataString });
  656. }}
  657. />
  658. <Button
  659. type="primary"
  660. onClick={this.search}
  661. style={{ marginLeft: 10 }}
  662. >
  663. 搜索
  664. </Button>
  665. <Button onClick={this.reset}>重置</Button>
  666. </div>
  667. </TabPane>
  668. <TabPane tab="打印" key="3">
  669. Content of Tab Pane 3
  670. </TabPane>
  671. <TabPane tab="导出Excel" key="4">
  672. Content of Tab Pane 3
  673. </TabPane>
  674. <TabPane tab="查看" key="5">
  675. <Button type="primary" disabled={ this.state.selectedRowKeys.length != 1 } style={{ margin: "0px 0px 10px 10px" }} onClick = {() => {
  676. this.inRecordData()
  677. this.setState({
  678. bvisible: true
  679. });
  680. }}>
  681. 查看开票详情
  682. </Button>
  683. </TabPane>
  684. </Tabs>
  685. <div className="patent-table">
  686. <Spin spinning={this.state.loading}>
  687. <Table
  688. bordered
  689. columns={
  690. this.state.changeList == undefined
  691. ? this.state.columns
  692. : this.state.changeList
  693. }
  694. dataSource={this.state.dataSource}
  695. rowSelection={rowSelection}
  696. scroll={{ x: true, y: 0 }}
  697. pagination={this.state.pagination}
  698. onRowClick={this.tableRowClick.bind(this)}
  699. />
  700. </Spin>
  701. </div>
  702. <Assign
  703. title="任务"
  704. selApi={"/api/admin/newOrder/updateFinance"}
  705. data={this.state.assignDataY}
  706. showDesc={this.state.assignVisibleY}
  707. closeDesc={this.closeAssignY.bind(this)}
  708. // fenpaiData={8}
  709. specially={0}
  710. roleName={this.state.nub}
  711. requestMethod={"get"}
  712. />
  713. <OrderDesc
  714. data={this.state.RowData}
  715. showDesc={this.state.showDesc}
  716. closeDesc={this.closeDesc.bind(this)}
  717. />
  718. <Receivable
  719. title="收款记录"
  720. api="/api/admin/financial/addReceiptsFlow"
  721. data={this.state.assignDataX}
  722. showDesc={this.state.assignVisibleX}
  723. closeDesc={this.closeAssignX.bind(this)}
  724. />
  725. <Modal
  726. visible={this.state.boHuiVisible}
  727. width="400px"
  728. title="驳回备注"
  729. footer=""
  730. onOk={this.boHuiOk}
  731. onCancel={this.boHuiCancel}
  732. >
  733. <Form layout="horizontal" onSubmit={this.boHuiSubmit}>
  734. <Spin spinning={this.state.loading}>
  735. <FormItem
  736. labelCol={{ span: 5 }}
  737. wrapperCol={{ span: 16 }}
  738. label={
  739. <span>
  740. <strong style={{ color: "#f00" }}>*</strong>驳回原因
  741. </span>
  742. }
  743. >
  744. <Input
  745. type="textarea"
  746. rows={4}
  747. placeholder="请输入驳回原因"
  748. value={this.state.content}
  749. onChange={e => {
  750. this.setState({ content: e.target.value });
  751. }}
  752. />
  753. </FormItem>
  754. <FormItem wrapperCol={{ span: 12, offset: 5 }}>
  755. <Button
  756. type="primary"
  757. htmlType="submit"
  758. style={{ marginRight: 20 }}
  759. >
  760. 驳回
  761. </Button>
  762. <Button
  763. type="default"
  764. onClick={() => {
  765. this.boHuiCancel();
  766. }}
  767. >
  768. 取消
  769. </Button>
  770. </FormItem>
  771. </Spin>
  772. </Form>
  773. </Modal>
  774. <Modal
  775. visible={this.state.bvisible}
  776. footer=""
  777. title="开票历史记录"
  778. className="admin-desc-content"
  779. width="900px"
  780. onCancel={this.inRecordCanl}
  781. >
  782. <Spin spinning={this.state.loading}>
  783. <div className="patent-table">
  784. <Table
  785. columns={this.state.columnsDate}
  786. dataSource={this.state.recordData}
  787. pagination={false}
  788. />
  789. <div className="clearfix" style={{ marginTop: "20px" }}>
  790. <FormItem
  791. className="half-item"
  792. {...formItemLayout}
  793. label={<span style={{ fontSize: "14px" }}>开票总计</span>}
  794. >
  795. <span>{this.state.sum + "(万元)"}</span>
  796. </FormItem>
  797. </div>
  798. </div>
  799. </Spin>
  800. </Modal>
  801. </div>
  802. );
  803. }
  804. });
  805. export default ShouKuang;