projecDataStatistics.jsx 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612
  1. import React from 'react';
  2. import {
  3. DatePicker,
  4. Tooltip,
  5. Button,
  6. AutoComplete,
  7. Input,
  8. Select,
  9. Spin,
  10. Table,
  11. message,
  12. Form,
  13. Tabs,
  14. Switch
  15. } from 'antd';
  16. import $ from 'jquery/src/ajax';
  17. import moment from 'moment';
  18. import { ShowModal, getApprovedState, getWhether, getLiquidationStatus } from "@/tools.js";
  19. import { projectStatusList, salesList } from "@/dataDic";
  20. import { citySelect } from "../../../NewDicProvinceList";
  21. import ShowModalDiv from "@/showModal.jsx";
  22. import { ChooseList } from "../../order/orderNew/chooseList";
  23. import StaffSearch from '../../../../component/common/staffSearch';
  24. import Cascaders from "../../../common/cascaders";
  25. import './index.less';
  26. const TabPane = Tabs.TabPane;
  27. const { RangePicker, MonthPicker } = DatePicker;
  28. const ProjecDataStatistics = Form.create()(React.createClass({
  29. getInitialState() {
  30. return {
  31. searchValues: {},
  32. loading: false,
  33. exportPendingLoading: false,
  34. changeList: undefined,
  35. dataSource: [],
  36. pagination: {
  37. defaultCurrent: 1,
  38. defaultPageSize: 10,
  39. showQuickJumper: true,
  40. pageSize: 10,
  41. onChange: function (page) {
  42. this.loadData(page);
  43. }.bind(this),
  44. showTotal: function (total) {
  45. return '共' + total + '条数据';
  46. }
  47. },
  48. columns: [
  49. {
  50. title: "销售类型",
  51. dataIndex: "salesType",
  52. key: "salesType",
  53. render: (text, record) => {
  54. const obj = {
  55. children: <Tooltip title={salesList[text] + ((text == 3 || text == 4 || text == 5) ? (!record.other ? "" : "," + record.other) : "")}>
  56. <span>
  57. {salesList[text]}
  58. </span>
  59. </Tooltip>,
  60. props: {
  61. rowSpan: record.rowSpan || 0
  62. }
  63. }
  64. return obj
  65. },
  66. },
  67. {
  68. title: "订单类型",
  69. dataIndex: "serviceType",
  70. key: "serviceType",
  71. render: (text, record) => {
  72. const obj = {
  73. children: <div style={{ maxWidth: 200 }}>{text}</div>,
  74. props: {
  75. rowSpan: record.rowSpan || 0
  76. }
  77. }
  78. return obj
  79. }
  80. },
  81. {
  82. title: "结算状态",
  83. dataIndex: "liquidationStatus",
  84. key: "liquidationStatus",
  85. render: (text, record) => {
  86. const obj = {
  87. children: getLiquidationStatus(text),
  88. props: {
  89. rowSpan: record.rowSpan || 0
  90. }
  91. }
  92. return obj
  93. }
  94. },
  95. {
  96. title: "催款节点",
  97. dataIndex: "dunNodeContent",
  98. key: "dunNodeContent",
  99. render: (text, record) => {
  100. const obj = {
  101. children: <div style={{ maxWidth: 200 }}>{text}</div>,
  102. props: {
  103. rowSpan: record.rowSpan || 0
  104. }
  105. }
  106. return obj
  107. }
  108. },
  109. {
  110. title: '是否会员',
  111. dataIndex: 'projectType',
  112. key: 'projectType',
  113. render: (text, record) => {
  114. const obj = {
  115. children: getWhether(text),
  116. props: {
  117. rowSpan: record.rowSpan || 0
  118. }
  119. }
  120. return obj
  121. }
  122. },
  123. {
  124. title: '是否大客户',
  125. dataIndex: 'bigCustomer',
  126. key: 'bigCustomer',
  127. render: (text, record) => {
  128. const obj = {
  129. children: getWhether(text),
  130. props: {
  131. rowSpan: record.rowSpan || 0
  132. }
  133. }
  134. return obj
  135. }
  136. },
  137. {
  138. title: "是否特批",
  139. dataIndex: "approval",
  140. key: "approval",
  141. render: (text, record) => {
  142. const obj = {
  143. children: getApprovedState(text),
  144. props: {
  145. rowSpan: record.rowSpan || 0
  146. }
  147. }
  148. return obj
  149. }
  150. },
  151. {
  152. title: '签单时间',
  153. dataIndex: 'signTime',
  154. key: 'signTime',
  155. render: (text, record) => {
  156. const obj = {
  157. children: text,
  158. props: {
  159. rowSpan: record.rowSpan || 0
  160. }
  161. }
  162. return obj
  163. }
  164. },
  165. {
  166. title: "派单时间",
  167. dataIndex: "createTime",
  168. key: "createTime",
  169. render: (text, record) => {
  170. const obj = {
  171. children: text,
  172. props: {
  173. rowSpan: record.rowSpan || 0
  174. }
  175. }
  176. return obj
  177. }
  178. },
  179. {
  180. title: '公司名称',
  181. dataIndex: 'buyerName',
  182. key: 'buyerName',
  183. render: (text, record) => {
  184. const obj = {
  185. children: <Tooltip title={text}>
  186. <div style={{ maxWidth: 200 }}>{text}</div>
  187. </Tooltip>,
  188. props: {
  189. rowSpan: record.rowSpan || 0
  190. }
  191. }
  192. return obj
  193. }
  194. },
  195. {
  196. title: "合同编号",
  197. dataIndex: "contractNo",
  198. key: "contractNo",
  199. render: (text, record) => {
  200. const obj = {
  201. children: text,
  202. props: {
  203. rowSpan: record.rowSpan || 0
  204. }
  205. }
  206. return obj
  207. }
  208. },
  209. {
  210. title: '合同类型',
  211. dataIndex: 'htlx',
  212. key: 'htlx',
  213. render: (text, record) => {
  214. const obj = {
  215. children: text,
  216. props: {
  217. rowSpan: record.rowSpan || 0
  218. }
  219. }
  220. return obj
  221. }
  222. },
  223. {
  224. title: '省份',
  225. dataIndex: 'province',
  226. key: 'province',
  227. render: (text, record) => {
  228. const obj = {
  229. children: text,
  230. props: {
  231. rowSpan: record.rowSpan || 0
  232. }
  233. }
  234. return obj
  235. }
  236. },
  237. {
  238. title: "派单公司",
  239. dataIndex: "depName",
  240. key: "depName",
  241. render: (text, record) => {
  242. const obj = {
  243. children: text,
  244. props: {
  245. rowSpan: record.rowSpan || 0
  246. }
  247. }
  248. return obj
  249. }
  250. },
  251. {
  252. title: '签单金额',
  253. dataIndex: 'totalAmount',
  254. key: 'totalAmount',
  255. render: (text, record) => {
  256. const obj = {
  257. children: text,
  258. props: {
  259. rowSpan: record.rowSpan || 0
  260. }
  261. }
  262. return obj
  263. }
  264. },
  265. {
  266. title: '合同收款比例',
  267. dataIndex: 'contractAmountProportion',
  268. key: 'contractAmountProportion',
  269. render: (text, record) => {
  270. const obj = {
  271. children: text,
  272. props: {
  273. rowSpan: record.rowSpan || 0
  274. }
  275. }
  276. return obj
  277. }
  278. },
  279. {
  280. title: '应收款',
  281. dataIndex: 'orderReceivables',
  282. key: 'orderReceivables',
  283. render: (text, record) => {
  284. const obj = {
  285. children: text,
  286. props: {
  287. rowSpan: record.rowSpan || 0
  288. }
  289. }
  290. return obj
  291. }
  292. },
  293. {
  294. title: '已收款',
  295. dataIndex: 'settlementAmount',
  296. key: 'settlementAmount',
  297. render: (text, record) => {
  298. const obj = {
  299. children: text,
  300. props: {
  301. rowSpan: record.rowSpan || 0
  302. }
  303. }
  304. return obj
  305. }
  306. },
  307. {
  308. title: "欠款",
  309. dataIndex: "arrearsAmount",
  310. key: "arrearsAmount",
  311. render: (text, record) => {
  312. const obj = {
  313. children: text,
  314. props: {
  315. rowSpan: record.rowSpan || 0
  316. }
  317. }
  318. return obj
  319. }
  320. },
  321. {
  322. title: "已报销",
  323. dataIndex: "expenseAmount",
  324. key: "expenseAmount",
  325. render: (text, record) => {
  326. const obj = {
  327. children: text,
  328. props: {
  329. rowSpan: record.rowSpan || 0
  330. }
  331. }
  332. return obj
  333. }
  334. },
  335. {
  336. title: "应公出/已公出/超出",
  337. dataIndex: "shouldPublic",
  338. key: "shouldPublic",
  339. render: (text, record) => {
  340. const obj = {
  341. children: <span>
  342. {text + " / " + record.alreadyPublic + " / " + record.exceedPublic}
  343. </span>,
  344. props: {
  345. rowSpan: record.rowSpan || 0
  346. }
  347. }
  348. return obj
  349. }
  350. },
  351. {
  352. title: "总成本/实付",
  353. dataIndex: "costAmount",
  354. key: "costAmount",
  355. render: (text, record) => {
  356. const obj = {
  357. children: <span>
  358. {text + " / " + record.paymentAmount}
  359. </span>,
  360. props: {
  361. rowSpan: record.rowSpan || 0
  362. }
  363. }
  364. return obj
  365. }
  366. },
  367. {
  368. title: "已开票金额",
  369. dataIndex: "invicueAmount",
  370. key: "invicueAmount",
  371. render: (text, record) => {
  372. const obj = {
  373. children: text,
  374. props: {
  375. rowSpan: record.rowSpan || 0
  376. }
  377. }
  378. return obj
  379. }
  380. },
  381. {
  382. title: "退款金额",
  383. dataIndex: "refundAmount",
  384. key: "refundAmount",
  385. render: (text, record) => {
  386. const obj = {
  387. children: text,
  388. props: {
  389. rowSpan: record.rowSpan || 0
  390. }
  391. }
  392. return obj
  393. }
  394. },
  395. {
  396. title: "财务负责人",
  397. dataIndex: "financeName",
  398. key: "financeName",
  399. render: (text, record) => {
  400. const obj = {
  401. children: text,
  402. props: {
  403. rowSpan: record.rowSpan || 0
  404. }
  405. }
  406. return obj
  407. }
  408. },
  409. {
  410. title: "营销负责人",
  411. dataIndex: "salesmanName",
  412. key: "salesmanName",
  413. render: (text, record) => {
  414. const obj = {
  415. children: text,
  416. props: {
  417. rowSpan: record.rowSpan || 0
  418. }
  419. }
  420. return obj
  421. }
  422. },
  423. {
  424. title: "项目名称",
  425. dataIndex: "commodityName",
  426. key: "commodityName",
  427. },
  428. {
  429. title: "项目转入时间",
  430. dataIndex: "taskDistributionTime",
  431. key: "taskDistributionTime",
  432. },
  433. {
  434. title: "是否重报",
  435. dataIndex: "restatementType",
  436. key: "restatementType",
  437. },
  438. {
  439. title: "是否科技项目",
  440. dataIndex: "sortType",
  441. key: "sortType",
  442. },
  443. {
  444. title: "项目数",
  445. dataIndex: "commodityQuantity",
  446. key: "commodityQuantity",
  447. },
  448. {
  449. title: "项目成本",
  450. dataIndex: "projectCostAmount",
  451. key: "projectCostAmount",
  452. },
  453. {
  454. title: "项目状态",
  455. dataIndex: "projectStatus",
  456. key: "projectStatus",
  457. },
  458. {
  459. title: "项目启动时间",
  460. dataIndex: "taskStartTime",
  461. key: "taskStartTime",
  462. },
  463. {
  464. title: "项目完成时间",
  465. dataIndex: "taskEndTime",
  466. key: "taskEndTime",
  467. },
  468. // {
  469. // title: "技术组",
  470. // dataIndex: "expenseAmount",
  471. // key: "expenseAmount",
  472. // },
  473. {
  474. title: "项目负责人",
  475. dataIndex: "receiverName",
  476. key: "receiverName",
  477. },
  478. {
  479. title: "满意度",
  480. dataIndex: "satisfactionDegree",
  481. key: "satisfactionDegree",
  482. render: text => {
  483. return (
  484. <span>{["非常满意", "满意", "一般", "不满意"][text]}</span>
  485. )
  486. }
  487. },
  488. {
  489. title: "项目备注",
  490. dataIndex: "taskComment",
  491. key: "taskComment",
  492. render: text => {
  493. return (
  494. <div style={{ maxWidth: 220 }}>{text}</div>
  495. )
  496. }
  497. },
  498. {
  499. title: "核算比例",
  500. dataIndex: "hsbl",
  501. key: "hsbl",
  502. render: (text, record) => {
  503. const obj = {
  504. children: text,
  505. props: {
  506. rowSpan: record.rowSpan || 0
  507. }
  508. }
  509. return obj
  510. }
  511. },
  512. {
  513. title: "订单情况",
  514. dataIndex: "orderStatus",
  515. key: "orderStatus",
  516. render: (text, record) => {
  517. const obj = {
  518. children: text,
  519. props: {
  520. rowSpan: record.rowSpan || 0
  521. }
  522. }
  523. return obj
  524. }
  525. },
  526. {
  527. title: "变更情况",
  528. dataIndex: "changeType",
  529. key: "changeType",
  530. render: (text, record) => {
  531. const obj = {
  532. children: text,
  533. props: {
  534. rowSpan: record.rowSpan || 0
  535. }
  536. }
  537. return obj
  538. }
  539. },
  540. {
  541. title: "退单退款",
  542. dataIndex: "refundType",
  543. key: "refundType",
  544. render: (text, record) => {
  545. const obj = {
  546. children: text,
  547. props: {
  548. rowSpan: record.rowSpan || 0
  549. }
  550. }
  551. return obj
  552. }
  553. },
  554. ],
  555. dataSource: [],
  556. departmentArr: [],
  557. searchMore: false,
  558. };
  559. },
  560. componentWillMount() {
  561. this.departmentList();
  562. this.selectSuperId();
  563. this.loadData();
  564. },
  565. loadData(pageNo) {
  566. const { searchValues, pagination } = this.state;
  567. this.setState({
  568. loading: true,
  569. });
  570. let datas = Object.assign(searchValues, {
  571. pageNo: pageNo || 1,
  572. pageSize: pagination.pageSize,
  573. });
  574. $.ajax({
  575. method: "get",
  576. dataType: "json",
  577. crossDomain: false,
  578. url: globalConfig.context + "/api/admin/statistis/orderProject",
  579. data: datas,
  580. success: function (data) {
  581. ShowModal(this);
  582. this.setState({
  583. loading: false,
  584. });
  585. if (data.error && data.error.length === 0) {
  586. if (data.data.list) {
  587. pagination.current = data.data.pageNo;
  588. pagination.total = data.data.totalCount;
  589. if (data.data && data.data.list && !data.data.list.length) {
  590. pagination.current = 0;
  591. pagination.total = 0;
  592. }
  593. let dList = this.handleData(data.data.list, "contractNo")
  594. this.setState({
  595. dataSource: dList,
  596. pagination: this.state.pagination,
  597. pageNo: data.data.pageNo,
  598. });
  599. } else {
  600. this.setState({
  601. dataSource: data.data,
  602. pagination: false,
  603. });
  604. }
  605. } else {
  606. message.warning(data.error[0].message);
  607. }
  608. }.bind(this),
  609. }).always(
  610. function () {
  611. this.setState({
  612. loading: false,
  613. });
  614. }.bind(this)
  615. );
  616. },
  617. // 部门
  618. departmentList() {
  619. this.setState({
  620. loading: true,
  621. });
  622. $.ajax({
  623. method: "get",
  624. dataType: "json",
  625. crossDomain: false,
  626. url: globalConfig.context + "/api/admin/organization/selectSuperId",
  627. data: {},
  628. success: function (data) {
  629. let thedata = data.data;
  630. let theArr = [];
  631. if (!thedata) {
  632. if (data.error && data.error.length) {
  633. message.warning(data.error[0].message);
  634. }
  635. thedata = {};
  636. } else {
  637. thedata.map(function (item, index) {
  638. theArr.push({
  639. key: index,
  640. name: item.name,
  641. id: item.id,
  642. });
  643. });
  644. }
  645. this.setState({
  646. departmentArr: theArr,
  647. });
  648. }.bind(this),
  649. }).always(
  650. function () {
  651. this.setState({
  652. loading: false,
  653. });
  654. }.bind(this)
  655. );
  656. },
  657. // 项目类别
  658. selectSuperId() {
  659. $.ajax({
  660. method: "get",
  661. dataType: "json",
  662. crossDomain: false,
  663. url: globalConfig.context + "/api/admin/ProjectSize/getAllCname",
  664. data: {
  665. flag: 0
  666. },
  667. success: function (data) {
  668. let theArr = [];
  669. let thedata = data.data;
  670. if (!thedata) {
  671. if (data.error && data.error.length) {
  672. message.warning(data.error[0].message);
  673. }
  674. }
  675. for (let i = 0; i < data.data.length; i++) {
  676. let theData = data.data[i];
  677. theArr.push(
  678. <Select.Option value={theData.id} key={theData.cname}>
  679. {theData.cname}
  680. </Select.Option>
  681. );
  682. }
  683. this.setState({
  684. contactsOption: theArr,
  685. contactsOptionData: data.data,
  686. });
  687. }.bind(this)
  688. }).always(
  689. );
  690. },
  691. changeList(arr) {
  692. const newArr = [];
  693. let list = this.state.columns
  694. list.forEach((item) => {
  695. arr.forEach((val) => {
  696. if (val === item.title) {
  697. newArr.push(item);
  698. }
  699. });
  700. });
  701. this.setState({
  702. changeList: newArr,
  703. });
  704. },
  705. exportAll() {
  706. message.config({
  707. duration: 20,
  708. });
  709. let loading = message.loading("下载中...");
  710. this.setState({
  711. exportPendingLoading: true,
  712. });
  713. let data = JSON.parse(JSON.stringify(this.state.searchValues));
  714. $.ajax({
  715. method: "get",
  716. dataType: "json",
  717. crossDomain: false,
  718. url: "/api/admin/statistis/orderProject/export",
  719. data,
  720. success: function (data) {
  721. if (data.error.length === 0) {
  722. this.download(data.data);
  723. } else {
  724. message.warning(data.error[0].message);
  725. }
  726. }.bind(this),
  727. }).always(
  728. function () {
  729. loading();
  730. this.setState({
  731. exportPendingLoading: false,
  732. });
  733. }.bind(this)
  734. );
  735. },
  736. download(fileName) {
  737. window.location.href =
  738. globalConfig.context + "/open/download?fileName=" + fileName;
  739. },
  740. handleData(array, key) {
  741. if (array.length === 0) return
  742. let arr = [...array]
  743. let startItem = arr[0]
  744. startItem.rowSpan = 1
  745. arr.forEach((item, index) => {
  746. let nextItem = arr[index + 1] || {}
  747. if (item[key] === nextItem[key]) {
  748. startItem.rowSpan++
  749. } else {
  750. startItem = nextItem
  751. startItem.rowSpan = 1
  752. }
  753. })
  754. return arr
  755. },
  756. search() {
  757. this.loadData();
  758. },
  759. reset() {
  760. this.setState({
  761. financeName: "",
  762. salesmanName: "",
  763. techName: "",
  764. searchValues: JSON.parse(JSON.stringify({})),
  765. }, () => {
  766. // this.Cascaders1.empty();
  767. // this.Cascaders2.empty();
  768. this.StaffSearch1.httpChange("");
  769. this.StaffSearch2.httpChange("");
  770. this.StaffSearch3.httpChange("");
  771. this.loadData();
  772. })
  773. },
  774. render() {
  775. const { searchValues } = this.state
  776. let departmentArr = this.state.departmentArr || [];
  777. const getRowClassName = (record, index) => {
  778. // 根据某些条件返回不同的类名
  779. if (index % 10 + 1 === 1) {
  780. return 'even-row1';
  781. } else if (index % 10 + 1 === 2) {
  782. return 'even-row2';
  783. } else if (index % 10 + 1 === 3) {
  784. return 'even-row3';
  785. } else if (index % 10 + 1 === 4) {
  786. return 'even-row4';
  787. } else if (index % 10 + 1 === 5) {
  788. return 'even-row5';
  789. } else if (index % 10 + 1 === 6) {
  790. return 'even-row6';
  791. } else if (index % 10 + 1 === 7) {
  792. return 'even-row7';
  793. } else if (index % 10 + 1 === 8) {
  794. return 'even-row8';
  795. } else if (index % 10 + 1 === 9) {
  796. return 'even-row9';
  797. } else if (index % 10 + 1 === 10) {
  798. return 'even-row10';
  799. }
  800. };
  801. return (
  802. <div className="user-content">
  803. <ShowModalDiv ShowModal={this.state.showModal} onClose={() => { this.setState({ showModal: false }) }} />
  804. <div className="content-title" style={{ marginBottom: 10 }}>
  805. <span style={{ fontWeight: 900, fontSize: 16 }}>项目数据统计</span>
  806. </div>
  807. <div className="user-search">
  808. <Tabs
  809. defaultActiveKey="1"
  810. className="test">
  811. <TabPane tab="搜索" key="1">
  812. <div
  813. className="user-search"
  814. style={{
  815. marginTop: "10px",
  816. marginLeft: "10px",
  817. marginRight: "10px",
  818. }}
  819. >
  820. <Input
  821. placeholder="订单编号"
  822. style={{
  823. width: 220,
  824. marginRight: "10px",
  825. }}
  826. value={searchValues["orderNo"]
  827. ? searchValues["orderNo"]
  828. : ""}
  829. onChange={(e) => {
  830. searchValues["orderNo"] = e.target.value;
  831. this.setState({
  832. searchValues: searchValues,
  833. });
  834. }}
  835. />
  836. <Input
  837. placeholder="合同编号"
  838. style={{
  839. width: 220,
  840. marginRight: "10px",
  841. }}
  842. value={searchValues["contractNo"]
  843. ? searchValues["contractNo"]
  844. : ""}
  845. onChange={(e) => {
  846. searchValues["contractNo"] = e.target.value;
  847. this.setState({
  848. searchValues: searchValues,
  849. });
  850. }}
  851. />
  852. <Input
  853. placeholder="企业名称"
  854. style={{
  855. width: 220,
  856. marginRight: "10px",
  857. }}
  858. value={searchValues["userName"]
  859. ? searchValues["userName"]
  860. : ""}
  861. onChange={(e) => {
  862. searchValues["userName"] = e.target.value;
  863. this.setState({
  864. searchValues: searchValues,
  865. });
  866. }}
  867. />
  868. <Select
  869. placeholder="项目分类"
  870. style={{ width: 220 }}
  871. value={searchValues["businessCategory"]
  872. ? searchValues["businessCategory"]
  873. : undefined}
  874. onChange={(e) => {
  875. searchValues["businessCategory"] = e;
  876. this.setState({
  877. searchValues: searchValues,
  878. });
  879. }}
  880. >
  881. {this.state.contactsOption}
  882. </Select>
  883. <Input
  884. placeholder="项目名称"
  885. value={searchValues["projectName"]
  886. ? searchValues["projectName"]
  887. : ""}
  888. style={{ width: 220, marginRight: 10 }}
  889. onChange={e => {
  890. searchValues["projectName"] = e.target.value
  891. this.setState({
  892. searchValues: searchValues,
  893. });
  894. }}
  895. />
  896. <span style={{ display: !this.state.searchMore && "none" }}>
  897. <span
  898. style={{
  899. display: "inline-block",
  900. }}
  901. >
  902. <span style={{ marginBottom: "10px" }}>订单部门:</span>
  903. <Select
  904. placeholder="选择订单部门"
  905. style={{ width: 170, }}
  906. value={searchValues["depId"]
  907. ? searchValues["depId"]
  908. : undefined}
  909. onChange={(e) => {
  910. searchValues["depId"] = e
  911. this.setState({
  912. searchValues: searchValues,
  913. });
  914. }}
  915. >
  916. {departmentArr.map(function (item) {
  917. return (
  918. <Select.Option key={item.id}>{item.name}</Select.Option>
  919. );
  920. })}
  921. </Select>
  922. {/* <Cascaders
  923. ref={ref => this.Cascaders1 = ref}
  924. placeholder="请选择订单部门"
  925. height={28}
  926. width={170}
  927. onSel={(e) => {
  928. searchValues["deps"] = JSON.stringify(e)
  929. this.setState({
  930. searchValues: searchValues,
  931. });
  932. }}
  933. /> */}
  934. </span>
  935. <span
  936. style={{
  937. display: "inline-block",
  938. }}
  939. >
  940. <span style={{ marginBottom: "10px" }}>负责部门:</span>
  941. <Select
  942. placeholder="选择负责部门"
  943. style={{ width: 170, }}
  944. value={searchValues["liabilitiesDepId"]
  945. ? searchValues["liabilitiesDepId"]
  946. : undefined}
  947. onChange={(e) => {
  948. searchValues["liabilitiesDepId"] = e
  949. this.setState({
  950. searchValues: searchValues,
  951. });
  952. }}
  953. >
  954. {departmentArr.map(function (item) {
  955. return (
  956. <Select.Option key={item.id}>{item.name}</Select.Option>
  957. );
  958. })}
  959. </Select>
  960. {/* <Cascaders
  961. ref={ref => this.Cascaders2 = ref}
  962. placeholder="请选择负责部门"
  963. height={28}
  964. width={170}
  965. onSel={(e) => {
  966. searchValues["thchDeps"] = JSON.stringify(e)
  967. this.setState({
  968. searchValues: searchValues,
  969. });
  970. }}
  971. /> */}
  972. </span>
  973. <span style={{ display: "inline-block" }}>
  974. <span style={{ marginRight: "10px", marginBottom: "10px" }}>
  975. 申报批次:
  976. </span>
  977. <Select
  978. value={searchValues["declarationBatch"]
  979. ? searchValues["declarationBatch"]
  980. : undefined}
  981. placeholder="请选择批次"
  982. style={{
  983. width: 150,
  984. marginRight: "10px",
  985. }}
  986. onChange={(e) => {
  987. searchValues["declarationBatch"] = e
  988. this.setState({
  989. searchValues: searchValues,
  990. });
  991. }}
  992. >
  993. <Option value={1}>第一批</Option>
  994. <Option value={2}>第二批</Option>
  995. <Option value={3}>第三批</Option>
  996. <Option value={4}>第四批</Option>
  997. </Select>
  998. </span>
  999. <span style={{ display: "inline-block" }}>
  1000. <span style={{ marginRight: "10px" }}>
  1001. 项目金额:
  1002. </span>
  1003. <Select
  1004. value={searchValues["projectAmountType"]
  1005. ? searchValues["projectAmountType"]
  1006. : undefined}
  1007. placeholder="请选择项目金额"
  1008. style={{
  1009. width: 150,
  1010. marginRight: "10px",
  1011. }}
  1012. onChange={(e) => {
  1013. searchValues["projectAmountType"] = e
  1014. this.setState({
  1015. searchValues: searchValues,
  1016. });
  1017. }}
  1018. >
  1019. <Option value={1}>1万以下</Option>
  1020. <Option value={2}>1~5万</Option>
  1021. <Option value={3}>5~10万</Option>
  1022. <Option value={4}>10~20万</Option>
  1023. <Option value={5}>20万以上</Option>
  1024. </Select>
  1025. </span>
  1026. <span style={{ display: "inline-block" }}>
  1027. <span style={{ marginRight: "10px" }}>
  1028. 项目状态:
  1029. </span>
  1030. <Select
  1031. value={(searchValues["projectStatus"] || searchValues["projectStatus"] == 0)
  1032. ? searchValues["projectStatus"]
  1033. : undefined}
  1034. placeholder="请选择项目状态"
  1035. style={{
  1036. width: 150,
  1037. marginRight: "10px",
  1038. }}
  1039. onChange={(e) => {
  1040. searchValues["projectStatus"] = e
  1041. this.setState({
  1042. searchValues: searchValues,
  1043. });
  1044. }}
  1045. >
  1046. {
  1047. projectStatusList.map((item) =>
  1048. <Option value={item.value} key={item.value}>{item.label}</Option>
  1049. )
  1050. }
  1051. </Select>
  1052. </span>
  1053. <span style={{ display: "inline-block" }}>
  1054. <span style={{ marginRight: "10px" }}>
  1055. 满&nbsp;&nbsp;意&nbsp;&nbsp;度:
  1056. </span>
  1057. <Select
  1058. value={searchValues["satisfactionDegree"]
  1059. ? searchValues["satisfactionDegree"]
  1060. : undefined}
  1061. placeholder="请选择满意度"
  1062. style={{
  1063. width: 150,
  1064. marginRight: "10px",
  1065. }}
  1066. onChange={(e) => {
  1067. searchValues["satisfactionDegree"] = e
  1068. this.setState({
  1069. searchValues: searchValues,
  1070. });
  1071. }}
  1072. >
  1073. <Option value="0">非常满意</Option>
  1074. <Option value="1">满意</Option>
  1075. <Option value="2">一般</Option>
  1076. <Option value="3">不满意</Option>
  1077. </Select>
  1078. </span>
  1079. <span style={{ display: "inline-block" }}>
  1080. <span style={{ marginRight: "10px" }}>
  1081. 派单时间:
  1082. </span>
  1083. <RangePicker
  1084. allowClear={false}
  1085. style={{ marginRight: "10px", width: 250 }}
  1086. value={[
  1087. searchValues["startDate"]
  1088. ? moment(searchValues["startDate"])
  1089. : null,
  1090. searchValues["endDate"]
  1091. ? moment(searchValues["endDate"])
  1092. : null,
  1093. ]}
  1094. onChange={(data, dataString) => {
  1095. searchValues["startDate"] = String(
  1096. dataString[0]
  1097. );
  1098. searchValues["endDate"] = String(
  1099. dataString[1]
  1100. );
  1101. this.setState({
  1102. searchValues: searchValues,
  1103. });
  1104. }}
  1105. />
  1106. </span>
  1107. <span style={{ display: "inline-block" }}>
  1108. <span style={{ marginRight: "10px" }}>
  1109. 项目转入时间:
  1110. </span>
  1111. <RangePicker
  1112. allowClear={false}
  1113. style={{ marginRight: "10px", width: 250 }}
  1114. value={[
  1115. searchValues["projectStartDate"]
  1116. ? moment(searchValues["projectStartDate"])
  1117. : null,
  1118. searchValues["projectEndDate"]
  1119. ? moment(searchValues["projectEndDate"])
  1120. : null,
  1121. ]}
  1122. onChange={(data, dataString) => {
  1123. searchValues["projectStartDate"] = String(
  1124. dataString[0]
  1125. );
  1126. searchValues["projectEndDate"] = String(
  1127. dataString[1]
  1128. );
  1129. this.setState({
  1130. searchValues: searchValues,
  1131. });
  1132. }}
  1133. />
  1134. </span>
  1135. <span style={{ display: "inline-block" }}>
  1136. <span style={{ marginRight: "10px" }}>
  1137. 销售类型:
  1138. </span>
  1139. <Select
  1140. value={searchValues["salesType"]
  1141. ? searchValues["salesType"]
  1142. : undefined}
  1143. placeholder="请选择销售类型"
  1144. style={{
  1145. width: 150,
  1146. marginRight: "10px",
  1147. }}
  1148. onChange={(e) => {
  1149. searchValues["salesType"] = e
  1150. this.setState({
  1151. searchValues: searchValues,
  1152. });
  1153. }}
  1154. >
  1155. <Option value="0">电话新开发</Option>
  1156. <Option value="1">电话自带资源</Option>
  1157. <Option value="2">网络</Option>
  1158. <Option value="3">渠道</Option>
  1159. <Option value="4">转介绍</Option>
  1160. <Option value="5">其他</Option>
  1161. <Option value="6">高新复购</Option>
  1162. <Option value="7">其他复购</Option>
  1163. <Option value="8">私有/渠道</Option>
  1164. </Select>
  1165. </span>
  1166. <span style={{ display: "inline-block" }}>
  1167. <span style={{ marginRight: "10px" }}>
  1168. 订单类型:
  1169. </span>
  1170. <Input
  1171. placeholder="请输入订单类型"
  1172. style={{
  1173. width: 150,
  1174. marginRight: "10px",
  1175. }}
  1176. value={searchValues["serviceType"]
  1177. ? searchValues["serviceType"]
  1178. : ""}
  1179. onChange={(e) => {
  1180. searchValues["serviceType"] = e.target.value;
  1181. this.setState({
  1182. searchValues: searchValues,
  1183. });
  1184. }}
  1185. />
  1186. </span>
  1187. <span style={{ display: "inline-block" }}>
  1188. <span style={{ marginRight: "10px" }}>
  1189. 结算状态:
  1190. </span>
  1191. <Select
  1192. value={searchValues["liquidationStatus"]
  1193. ? searchValues["liquidationStatus"]
  1194. : undefined}
  1195. placeholder="请选择结算状态"
  1196. style={{
  1197. width: 150,
  1198. marginRight: "10px",
  1199. }}
  1200. onChange={(e) => {
  1201. searchValues["liquidationStatus"] = e
  1202. this.setState({
  1203. searchValues: searchValues,
  1204. });
  1205. }}
  1206. >
  1207. <Option value="0">首付待付请</Option>
  1208. <Option value="1">尾款待付清</Option>
  1209. <Option value="2">已付清</Option>
  1210. <Option value="3">部分退款</Option>
  1211. <Option value="4">全部退款</Option>
  1212. </Select>
  1213. </span>
  1214. <span style={{ display: "inline-block" }}>
  1215. <span style={{ marginRight: "10px" }}>
  1216. 催款节点:
  1217. </span>
  1218. <Select
  1219. placeholder={"催款节点"}
  1220. style={{ width: 150 }}
  1221. value={searchValues["dunType"]
  1222. ? searchValues["dunType"]
  1223. : undefined}
  1224. onChange={(e) => {
  1225. searchValues["dunType"] = e
  1226. this.setState({
  1227. searchValues: searchValues,
  1228. });
  1229. }}
  1230. >
  1231. <Option value="0">未启动</Option>
  1232. <Option value="1">已启动</Option>
  1233. </Select>
  1234. </span>
  1235. <span style={{ display: "inline-block" }}>
  1236. <span style={{ marginRight: "10px" }}>
  1237. 签单时间:
  1238. </span>
  1239. <RangePicker
  1240. allowClear={false}
  1241. style={{ marginRight: "10px", width: 250 }}
  1242. value={[
  1243. searchValues["signStartDate"]
  1244. ? moment(searchValues["signStartDate"])
  1245. : null,
  1246. searchValues["signEndDate"]
  1247. ? moment(searchValues["signEndDate"])
  1248. : null,
  1249. ]}
  1250. onChange={(data, dataString) => {
  1251. searchValues["signStartDate"] = String(
  1252. dataString[0]
  1253. );
  1254. searchValues["signEndDate"] = String(
  1255. dataString[1]
  1256. );
  1257. this.setState({
  1258. searchValues: searchValues,
  1259. });
  1260. }}
  1261. />
  1262. </span>
  1263. <span style={{ display: "inline-block" }}>
  1264. <span style={{ marginRight: "10px" }}>
  1265. 项目完成时间:
  1266. </span>
  1267. <RangePicker
  1268. allowClear={false}
  1269. style={{ marginRight: "10px", width: 250 }}
  1270. value={[
  1271. searchValues["projectCompleteStartTime"]
  1272. ? moment(searchValues["projectCompleteStartTime"])
  1273. : null,
  1274. searchValues["projectCompleteEndTime"]
  1275. ? moment(searchValues["projectCompleteEndTime"])
  1276. : null,
  1277. ]}
  1278. onChange={(data, dataString) => {
  1279. searchValues["projectCompleteStartTime"] = String(
  1280. dataString[0]
  1281. );
  1282. searchValues["projectCompleteEndTime"] = String(
  1283. dataString[1]
  1284. );
  1285. this.setState({
  1286. searchValues: searchValues,
  1287. });
  1288. }}
  1289. />
  1290. </span>
  1291. <span style={{ display: "inline-block" }}>
  1292. <span style={{ marginRight: "10px" }}>
  1293. 是否特批:
  1294. </span>
  1295. <Select
  1296. placeholder={"是否特批"}
  1297. style={{ width: 150 }}
  1298. value={searchValues["approval"]
  1299. ? searchValues["approval"]
  1300. : undefined}
  1301. onChange={(e) => {
  1302. searchValues["approval"] = e
  1303. this.setState({
  1304. searchValues: searchValues,
  1305. });
  1306. }}
  1307. >
  1308. <Option value="0">否</Option>
  1309. <Option value="1">是</Option>
  1310. </Select>
  1311. </span>
  1312. <span style={{ display: "inline-block" }}>
  1313. <span style={{ marginRight: "10px" }}>
  1314. 是否会员:
  1315. </span>
  1316. <Select
  1317. placeholder={"是否会员"}
  1318. style={{ width: 150 }}
  1319. value={searchValues["projectType"]
  1320. ? searchValues["projectType"]
  1321. : undefined}
  1322. onChange={(e) => {
  1323. searchValues["projectType"] = e
  1324. this.setState({
  1325. searchValues: searchValues,
  1326. });
  1327. }}
  1328. >
  1329. <Option value="0">否</Option>
  1330. <Option value="1">是</Option>
  1331. </Select>
  1332. </span>
  1333. <span style={{ display: "inline-block" }}>
  1334. <span style={{ marginRight: "10px" }}>
  1335. 是否重报:
  1336. </span>
  1337. <Select
  1338. placeholder={"是否重报"}
  1339. style={{ width: 150 }}
  1340. value={searchValues["restatement"]
  1341. ? searchValues["restatement"]
  1342. : undefined}
  1343. onChange={(e) => {
  1344. searchValues["restatement"] = e
  1345. this.setState({
  1346. searchValues: searchValues,
  1347. });
  1348. }}
  1349. >
  1350. <Option value="0">否</Option>
  1351. <Option value="1">是</Option>
  1352. </Select>
  1353. </span>
  1354. <span style={{ display: "inline-block" }}>
  1355. <span style={{ marginRight: "10px" }}>
  1356. 是否变更:
  1357. </span>
  1358. <Select
  1359. placeholder={"是否变更"}
  1360. style={{ width: 150 }}
  1361. value={searchValues["changeType"]
  1362. ? searchValues["changeType"]
  1363. : undefined}
  1364. onChange={(e) => {
  1365. searchValues["changeType"] = e
  1366. this.setState({
  1367. searchValues: searchValues,
  1368. });
  1369. }}
  1370. >
  1371. <Option value="0">否</Option>
  1372. <Option value="1">是</Option>
  1373. </Select>
  1374. </span>
  1375. <span style={{ display: "inline-block" }}>
  1376. <span style={{ marginRight: "10px" }}>
  1377. 是否退单:
  1378. </span>
  1379. <Select
  1380. placeholder={"是否退单"}
  1381. style={{ width: 150 }}
  1382. value={searchValues["refundType"]
  1383. ? searchValues["refundType"]
  1384. : undefined}
  1385. onChange={(e) => {
  1386. searchValues["refundType"] = e
  1387. this.setState({
  1388. searchValues: searchValues,
  1389. });
  1390. }}
  1391. >
  1392. <Option value="0">否</Option>
  1393. <Option value="1">是</Option>
  1394. </Select>
  1395. </span>
  1396. <span style={{ display: "inline-block" }}>
  1397. <span style={{ marginRight: "10px" }}>
  1398. 是否大客户:
  1399. </span>
  1400. <Select
  1401. placeholder={"是否大客户"}
  1402. style={{ width: 150 }}
  1403. value={searchValues["bigCustomer"]
  1404. ? searchValues["bigCustomer"]
  1405. : undefined}
  1406. onChange={(e) => {
  1407. searchValues["bigCustomer"] = e
  1408. this.setState({
  1409. searchValues: searchValues,
  1410. });
  1411. }}
  1412. >
  1413. <Option value="0">否</Option>
  1414. <Option value="1">是</Option>
  1415. </Select>
  1416. </span>
  1417. <span style={{ display: "inline-block" }}>
  1418. <span style={{ marginRight: "10px" }}>
  1419. 是否科技项目:
  1420. </span>
  1421. <Select
  1422. placeholder={"是否科技项目"}
  1423. style={{ width: 150 }}
  1424. value={searchValues["orderType"]
  1425. ? searchValues["orderType"]
  1426. : undefined}
  1427. onChange={(e) => {
  1428. searchValues["orderType"] = e
  1429. this.setState({
  1430. searchValues: searchValues,
  1431. });
  1432. }}
  1433. >
  1434. <Option value="0">否</Option>
  1435. <Option value="1">是</Option>
  1436. </Select>
  1437. </span>
  1438. <span style={{ display: "inline-block" }}>
  1439. <span style={{ marginRight: "10px" }}>
  1440. 省份选择:
  1441. </span>
  1442. <Select
  1443. placeholder="请选择省份"
  1444. style={{
  1445. width: 150,
  1446. }}
  1447. value={searchValues["province"]
  1448. ? searchValues["province"]
  1449. : undefined}
  1450. onChange={(e) => {
  1451. searchValues["province"] = e
  1452. this.setState({
  1453. searchValues: searchValues,
  1454. });
  1455. }}
  1456. >
  1457. {citySelect().map(function (item) {
  1458. return (
  1459. <Select.Option key={item.value} value={item.value}>
  1460. {item.label}
  1461. </Select.Option>
  1462. );
  1463. })}
  1464. </Select>
  1465. </span>
  1466. <span style={{ display: "inline-block" }}>
  1467. <span style={{ marginRight: "10px" }}>
  1468. 财务负责人:
  1469. </span>
  1470. <StaffSearch
  1471. ref={ref => this.StaffSearch1 = ref}
  1472. valueName={this.state.financeName}
  1473. placeholder="财务负责人"
  1474. width="150px"
  1475. onBlurText={e => {
  1476. this.setState({
  1477. financeName: e.title
  1478. })
  1479. }}
  1480. onBlurChange={(obj) => {
  1481. searchValues["financeId"] = obj.value
  1482. this.setState({
  1483. searchValues: searchValues,
  1484. });
  1485. }}
  1486. />
  1487. </span>
  1488. <span style={{ display: "inline-block" }}>
  1489. <span style={{ marginRight: "10px" }}>
  1490. 营销负责人:
  1491. </span>
  1492. <StaffSearch
  1493. ref={ref => this.StaffSearch2 = ref}
  1494. valueName={this.state.salesmanName}
  1495. placeholder="营销负责人"
  1496. width="150px"
  1497. onBlurText={e => {
  1498. this.setState({
  1499. salesmanName: e.title
  1500. })
  1501. }}
  1502. onBlurChange={(obj) => {
  1503. searchValues["salesmanId"] = obj.value
  1504. this.setState({
  1505. searchValues: searchValues,
  1506. });
  1507. }}
  1508. />
  1509. </span>
  1510. <span style={{ display: "inline-block" }}>
  1511. <span style={{ marginRight: "10px" }}>
  1512. 技术负责人:
  1513. </span>
  1514. <StaffSearch
  1515. ref={ref => this.StaffSearch3 = ref}
  1516. valueName={this.state.techName}
  1517. placeholder="技术负责人"
  1518. width="150px"
  1519. onBlurText={e => {
  1520. this.setState({
  1521. techName: e.title
  1522. })
  1523. }}
  1524. onBlurChange={(obj) => {
  1525. searchValues["techId"] = obj.value
  1526. this.setState({
  1527. searchValues: searchValues,
  1528. });
  1529. }}
  1530. />
  1531. </span>
  1532. </span>
  1533. <Button type="primary" onClick={this.search} style={{ marginRight: 10 }}>
  1534. 搜索
  1535. </Button>
  1536. <Button onClick={this.reset}>重置</Button>
  1537. <span style={{ marginLeft: '10px', marginRight: '20px' }}>
  1538. 更多搜索
  1539. <Switch
  1540. checked={this.state.searchMore}
  1541. onChange={() => {
  1542. this.setState({
  1543. searchMore: !this.state.searchMore
  1544. })
  1545. }}
  1546. />
  1547. </span>
  1548. </div>
  1549. </TabPane>
  1550. <TabPane tab="更改表格显示数据" key="2">
  1551. <div style={{ marginLeft: 10 }}>
  1552. <ChooseList
  1553. columns={this.state.columns}
  1554. changeFn={this.changeList}
  1555. changeList={this.state.changeList}
  1556. top={55}
  1557. margin={11}
  1558. />
  1559. </div>
  1560. </TabPane>
  1561. {adminData.isSuperAdmin ?
  1562. <TabPane tab="导出EXCEL" key="3">
  1563. <Button
  1564. type="primary"
  1565. loading={this.state.exportPendingLoading}
  1566. onClick={this.exportAll}
  1567. style={{ margin: 10 }}
  1568. >
  1569. 导出excel
  1570. </Button>
  1571. </TabPane>
  1572. : ""}
  1573. </Tabs>
  1574. </div>
  1575. <div className="patent-table">
  1576. <Spin spinning={this.state.loading}>
  1577. <Table
  1578. columns={this.state.changeList
  1579. ? this.state.changeList
  1580. : this.state.columns}
  1581. dataSource={this.state.dataSource}
  1582. pagination={this.state.pagination}
  1583. bordered
  1584. // rowClassName={getRowClassName}
  1585. scroll={{ x: 4000 }}
  1586. />
  1587. </Spin>
  1588. </div>
  1589. </div >
  1590. );
  1591. }
  1592. }));
  1593. export default ProjecDataStatistics;