annualReport.jsx 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685
  1. import React from 'react';
  2. import { Icon, Form, Button, Input, Spin, Table, message, Select, Modal, InputNumber } from 'antd';
  3. import './annualReport.less';
  4. import { annualReportStateList } from '../../../../dataDic.js';
  5. import { beforeUploadFile, getAnnualReportState } from '../../../../tools.js';
  6. import moment from 'moment';
  7. import ajax from 'jquery/src/ajax/xhr.js';
  8. import $ from 'jquery/src/ajax';
  9. const AnnualReportDescFrom = Form.create()(React.createClass({
  10. getInitialState() {
  11. return {
  12. loading: false,
  13. yearOption: [],
  14. };
  15. },
  16. componentWillMount() {
  17. let d = new Date();
  18. let _me = this;
  19. d = d.getFullYear();
  20. for (let i = d; i > d - 20; i--) {
  21. _me.state.yearOption.push(
  22. <Select.Option value={i.toString()} key={i}>{i}</Select.Option>
  23. )
  24. };
  25. },
  26. handleSubmit(e) {
  27. e.preventDefault();
  28. if (!this.state.year && !this.props.data.year) {
  29. message.warning("请选择一个年份!")
  30. return;
  31. };
  32. this.props.form.validateFields((err, values) => {
  33. if (!err) {
  34. this.props.spinState(true);
  35. $.ajax({
  36. method: "POST",
  37. dataType: "json",
  38. crossDomain: false,
  39. url: globalConfig.context + "/techservice/cognizance/disposeAnnualReport",
  40. data: {
  41. id: this.props.data.id,
  42. uid: this.props.uid,
  43. year: this.state.year || this.props.data.year,
  44. totalTax: values.totalTax,
  45. incomeTaxRelief: values.incomeTaxRelief,
  46. totalExportVolume: values.totalExportVolume,
  47. basicResearchCost: values.basicResearchCost,
  48. state: 0,
  49. }
  50. }).done(function (data) {
  51. if (!data.error.length) {
  52. message.success('保存成功!');
  53. this.props.closeModal();
  54. this.props.spinState(false);
  55. this.props.form.resetFields();
  56. } else {
  57. message.warning(data.error[0].message);
  58. this.props.spinState(false);
  59. }
  60. }.bind(this));
  61. }
  62. });
  63. },
  64. render() {
  65. const FormItem = Form.Item;
  66. const { getFieldDecorator } = this.props.form;
  67. //const theData = this.props.detailData;
  68. const theData = {
  69. id: "thisdata.id",
  70. uid: "thisdata.uid",
  71. unitName: "thisdata.unitName",
  72. orgCode: "thisdata.orgCode",
  73. locationProvince: "thisdata.locationProvince",
  74. locationCity: "thisdata.locationCity",
  75. locationArea: "thisdata.locationArea",
  76. certificateNumber: "thisdata.certificateNumber",
  77. issuingDate: "thisdata.issuingDate",
  78. issuingDateFormattedDate: "thisdata.issuingDateFormattedDate",
  79. listed: "thisdata.listed",
  80. listedDate: "thisdata.listedDate",
  81. listedDateFormattedDate: "thisdata.listedDateFormattedDate",
  82. listedType: "thisdata.listedType",
  83. stockCode: "thisdata.stockCode",
  84. contacts: "thisdata.contacts",
  85. inventionPatent: "thisdata.inventionPatent",
  86. defensePatent: "thisdata.defensePatent",
  87. nationalCrop: "thisdata.nationalCrop",
  88. newPlantCariety: "thisdata.newPlantCariety",
  89. nationalDrug: "thisdata.nationalDrug",
  90. chineseMedicine: "thisdata.chineseMedicine",
  91. utilityPatent: "thisdata.utilityPatent",
  92. circuitDesign: "thisdata.circuitDesign",
  93. exteriorPatent: "thisdata.exteriorPatent",
  94. softwareWorks: "thisdata.softwareWorks",
  95. firmTotal: "thisdata.firmTotal",
  96. techTotal: "thisdata.techTotal",
  97. newEmployment: "thisdata.newEmployment",
  98. graduateNumber: "thisdata.graduateNumber",
  99. totalRevenue: 123,
  100. salesRevenue: 223,
  101. netAsset: 333,
  102. lastYearRevenue: 224,
  103. grossProfit: 334,
  104. researchCost: 134,
  105. territory: 67,
  106. basicResearchCost: 234,
  107. totalTax: 234,
  108. incomeTaxRelief: 21,
  109. totalExportVolume: 56
  110. }
  111. const formItemLayout = {
  112. labelCol: { span: 0 },
  113. wrapperCol: { span: 20 },
  114. };
  115. const _me = this;
  116. return (
  117. <Form onSubmit={this.handleSubmit} className="annualReport-form">
  118. <div className="activityCost-title"><span>年份: </span>
  119. {
  120. this.props.data.year ? <span>{this.props.data.year}</span> :
  121. <Select placeholder="请选择年份" style={{ width: 200 }}
  122. onSelect={(e, n) => { this.state.year = e }}>
  123. {this.state.yearOption}
  124. </Select>
  125. }
  126. </div>
  127. <div className="clearfix" style={{ padding: '0 10px' }}>
  128. <div className="half-item" style={{ marginRight: "50%" }}>
  129. <p className="item-title">企业名称: </p>
  130. <p>{theData.unitName}</p>
  131. </div>
  132. <div className="half-item">
  133. <p className="item-title">组织机构代码或统一社会信用代码: </p>
  134. <p>{theData.orgCode}</p>
  135. </div>
  136. <div className="half-item">
  137. <p className="item-title">所属地区: </p>
  138. <p>{theData.location || " "}</p>
  139. </div>
  140. <div className="half-item">
  141. <p className="item-title">高新技术企业认定证书编号: </p>
  142. <p>{theData.certificateNumber}</p>
  143. </div>
  144. <div className="half-item">
  145. <p className="item-title">高新技术企业认定时间: </p>
  146. <p>{theData.issuingDateFormattedDate}</p>
  147. </div>
  148. <div className="half-item">
  149. <p className="item-title">企业是否上市: </p>
  150. <p>{theData.listed == 0 ? "否" : "是"}</p>
  151. </div>
  152. <div className="half-item">
  153. <p className="item-title">上市时间: </p>
  154. <p>{theData.listedDateFormattedDate}</p>
  155. </div>
  156. <div className="half-item">
  157. <p className="item-title">上市类型: </p>
  158. <p>
  159. {(() => {
  160. switch (theData.listedType) {
  161. case 0:
  162. return "股票型上市公司";
  163. case 1:
  164. return "债券型上市公司";
  165. default:
  166. return "";
  167. }
  168. })()}
  169. </p>
  170. </div>
  171. <div className="half-item">
  172. <p className="item-title">股票代码: </p>
  173. <p>{theData.stockCode}</p>
  174. </div>
  175. <div className="half-item">
  176. <p className="item-title">企业联系人: </p>
  177. <p>{theData.contacts}</p>
  178. </div>
  179. </div>
  180. <div className="activityCost-title"><span>本年度获得的知识产权数: </span></div>
  181. <div className="clearfix annualReport-box">
  182. <div className="four-item">
  183. <p className="item-title">发明专利数: </p>
  184. <p>{theData.inventionPatent}</p>
  185. </div>
  186. <div className="four-item">
  187. <p className="item-title">国防专利数: </p>
  188. <p>{theData.defensePatent}</p>
  189. </div>
  190. <div className="four-item">
  191. <p className="item-title">国家级农作物品种数: </p>
  192. <p>{theData.nationalCrop}</p>
  193. </div>
  194. <div className="four-item">
  195. <p className="item-title">植物新品种数: </p>
  196. <p>{theData.newPlantCariety}</p>
  197. </div>
  198. <div className="four-item">
  199. <p className="item-title">国家新药数: </p>
  200. <p>{theData.nationalDrug}</p>
  201. </div>
  202. <div className="four-item">
  203. <p className="item-title">国家一级中药保护品种数: </p>
  204. <p>{theData.chineseMedicine}</p>
  205. </div>
  206. <div className="four-item">
  207. <p className="item-title">实用新型专利数: </p>
  208. <p>{theData.utilityPatent}</p>
  209. </div>
  210. <div className="four-item">
  211. <p className="item-title">集成电路布图设计专有权数: </p>
  212. <p>{theData.circuitDesign}</p>
  213. </div>
  214. <div className="four-item">
  215. <p className="item-title">外观设计专利数: </p>
  216. <p>{theData.exteriorPatent}</p>
  217. </div>
  218. <div className="four-item">
  219. <p className="item-title">软件著作权数: </p>
  220. <p>{theData.softwareWorks}</p>
  221. </div>
  222. </div>
  223. <div className="activityCost-title"><span>本年度人员情况(人): </span></div>
  224. <div className="clearfix annualReport-box">
  225. <div className="four-item">
  226. <p className="item-title">职工总人数: </p>
  227. <p>{theData.firmTotal}</p>
  228. </div>
  229. <div className="four-item">
  230. <p className="item-title">科技人员数: </p>
  231. <p>{theData.techTotal}</p>
  232. </div>
  233. <div className="four-item">
  234. <p className="item-title">新增就业人数: </p>
  235. <p>{theData.newEmployment}</p>
  236. </div>
  237. <div className="four-item">
  238. <p className="item-title">高校应届毕业生人数: </p>
  239. <p>{theData.graduateNumber}</p>
  240. </div>
  241. </div>
  242. <div className="activityCost-title"><span>企业本年度财务状况(万元): </span></div>
  243. <div className="clearfix annualReport-box">
  244. <div className="four-item">
  245. <p className="item-title">企业总收入: </p>
  246. <p>{theData.totalRevenue}</p>
  247. </div>
  248. <div className="four-item">
  249. <p className="item-title">销售收入: </p>
  250. <p>{theData.salesRevenue}</p>
  251. </div>
  252. <div className="four-item">
  253. <p className="item-title">所有者权益(净资产)合计: </p>
  254. <p>{theData.netAsset}</p>
  255. </div>
  256. <div className="four-item">
  257. <p className="item-title">高新技术产品(服务)收入:
  258. </p>
  259. <p>
  260. <span>{theData.lastYearRevenue} </span>
  261. {(() => {
  262. let s = (theData.lastYearRevenue / theData.totalRevenue * 100).toFixed(2);
  263. if (s < 50) {
  264. return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
  265. } else {
  266. return <span> 占比总收入的{s}%</span>
  267. };
  268. })()}
  269. </p>
  270. </div>
  271. <div className="four-item">
  272. <p className="item-title">利润总额: </p>
  273. <p>{theData.grossProfit}</p>
  274. </div>
  275. <div className="four-item">
  276. <p className="item-title">研发费用总额:
  277. </p>
  278. <p>
  279. <span>{theData.researchCost} </span>
  280. {(() => {
  281. let s = (theData.researchCost / theData.salesRevenue * 100).toFixed(2);
  282. if (theData.salesRevenue < 5000) {
  283. if (s < 5) {
  284. return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
  285. } else {
  286. return <span> 占比总收入的{s}%</span>
  287. };
  288. } else if (5000 < theData.salesRevenue < 20000) {
  289. if (s < 4) {
  290. return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
  291. } else {
  292. return <span> 占比总收入的{s}%</span>
  293. };
  294. } else if (theData.salesRevenue >= 20000) {
  295. if (s < 3) {
  296. return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
  297. } else {
  298. return <span> 占比总收入的{s}%</span>
  299. };
  300. }
  301. })()}
  302. </p>
  303. </div>
  304. <div className="four-item" style={{ marginRight: '25%' }}>
  305. <p className="item-title">在中国境内研发费用: </p>
  306. <p>{theData.territory}</p>
  307. </div>
  308. <div className="four-item">
  309. <p className="item-title">纳税总额: </p>
  310. <FormItem
  311. {...formItemLayout}
  312. >
  313. {getFieldDecorator('totalTax', {
  314. rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
  315. initialValue: theData.totalTax
  316. })(
  317. <InputNumber />
  318. )}
  319. </FormItem>
  320. </div>
  321. <div className="four-item">
  322. <p className="item-title">高企所得税减免额: </p>
  323. <FormItem
  324. {...formItemLayout}
  325. >
  326. {getFieldDecorator('incomeTaxRelief', {
  327. rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
  328. initialValue: theData.incomeTaxRelief
  329. })(
  330. <InputNumber />
  331. )}
  332. </FormItem>
  333. </div>
  334. <div className="four-item">
  335. <p className="item-title">出口创汇总额(人民币): </p>
  336. <FormItem
  337. {...formItemLayout}
  338. >
  339. {getFieldDecorator('totalExportVolume', {
  340. rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
  341. initialValue: theData.totalExportVolume
  342. })(
  343. <InputNumber />
  344. )}
  345. </FormItem>
  346. </div>
  347. <div className="four-item">
  348. <p className="item-title">基础研究投入费用: </p>
  349. <FormItem
  350. {...formItemLayout}
  351. >
  352. {getFieldDecorator('basicResearchCost', {
  353. rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
  354. initialValue: theData.basicResearchCost
  355. })(
  356. <InputNumber />
  357. )}
  358. </FormItem>
  359. </div>
  360. </div>
  361. <FormItem style={{ marginTop: '20px' }}>
  362. <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
  363. <Button type="ghost" style={{ marginLeft: '20px' }} onClick={this.props.closeModal}>取消</Button>
  364. </FormItem>
  365. </Form >
  366. );
  367. },
  368. }));
  369. const AnnualReportDesc = React.createClass({
  370. loadData(v) {
  371. this.setState({
  372. loading: true
  373. });
  374. $.ajax({
  375. method: "post",
  376. dataType: "json",
  377. crossDomain: false,
  378. url: globalConfig.context + "/api/admin/annualReportDetail",
  379. data: {
  380. year: this.props.data ? this.props.data.year : (new Date().getFullYear() - 1),
  381. uid: this.props.uid
  382. }
  383. }).done((data) => {
  384. if (data.error.length || !data.data || !data.data.list) {
  385. message.warning(data.error[0].message);
  386. return;
  387. };
  388. this.state.detailData = {
  389. id: thisdata.id,
  390. uid: thisdata.uid,
  391. unitName: thisdata.unitName,
  392. orgCode: thisdata.orgCode,
  393. locationProvince: thisdata.locationProvince,
  394. locationCity: thisdata.locationCity,
  395. locationArea: thisdata.locationArea,
  396. location: thisdata.locationProvince + " / " + thisdata.locationCity + " / " + thisdata.locationArea,
  397. certificateNumber: thisdata.certificateNumber,
  398. issuingDate: thisdata.issuingDate,
  399. issuingDateFormattedDate: thisdata.issuingDateFormattedDate,
  400. listed: thisdata.listed,
  401. listedDate: thisdata.listedDate,
  402. listedDateFormattedDate: thisdata.listedDateFormattedDate,
  403. listedType: thisdata.listedType,
  404. stockCode: thisdata.stockCode,
  405. contacts: thisdata.contacts,
  406. inventionPatent: thisdata.inventionPatent,
  407. defensePatent: thisdata.defensePatent,
  408. nationalCrop: thisdata.nationalCrop,
  409. newPlantCariety: thisdata.newPlantCariety,
  410. nationalDrug: thisdata.nationalDrug,
  411. chineseMedicine: thisdata.chineseMedicine,
  412. utilityPatent: thisdata.utilityPatent,
  413. circuitDesign: thisdata.circuitDesign,
  414. exteriorPatent: thisdata.exteriorPatent,
  415. softwareWorks: thisdata.softwareWorks,
  416. firmTotal: thisdata.firmTotal,
  417. techTotal: thisdata.techTotal,
  418. newEmployment: thisdata.newEmployment,
  419. graduateNumber: thisdata.graduateNumber,
  420. totalRevenue: thisdata.totalRevenue,
  421. salesRevenue: thisdata.salesRevenue,
  422. netAsset: thisdata.netAsset,
  423. lastYearRevenue: thisdata.lastYearRevenue,
  424. grossProfit: thisdata.grossProfit,
  425. researchCost: thisdata.researchCost,
  426. territory: thisdata.territory,
  427. basicResearchCost: thisdata.basicResearchCost,
  428. totalTax: thisdata.totalTax,
  429. incomeTaxRelief: thisdata.incomeTaxRelief,
  430. totalExportVolume: thisdata.totalExportVolume
  431. };
  432. }).always(function () {
  433. this.setState({
  434. loading: false,
  435. visible: v
  436. });
  437. }.bind(this));
  438. },
  439. getInitialState() {
  440. return {
  441. visible: false,
  442. loading: false
  443. };
  444. },
  445. componentWillReceiveProps(nextProps) {
  446. if (nextProps.showDesc) {
  447. this.loadData(nextProps.showDesc);
  448. };
  449. },
  450. showModal() {
  451. this.setState({
  452. visible: true,
  453. });
  454. },
  455. handleOk() {
  456. this.setState({
  457. visible: false,
  458. });
  459. this.props.closeDesc(false);
  460. },
  461. handleCancel(e) {
  462. this.setState({
  463. visible: false,
  464. });
  465. this.props.closeDesc(false);
  466. },
  467. spinChange(e) {
  468. this.setState({
  469. loading: e
  470. });
  471. },
  472. render() {
  473. return (
  474. <div className="patent-addNew">
  475. <Spin spinning={this.state.loading} className='spin-box'>
  476. <Modal title="财务报表信息" visible={this.state.visible}
  477. onOk={this.handleOk} onCancel={this.handleCancel}
  478. width='1000px'
  479. footer=''
  480. >
  481. <AnnualReportDescFrom
  482. uid={this.props.uid}
  483. data={this.props.data}
  484. detailData={this.state.detailData}
  485. spinState={this.spinChange} closeModal={this.handleCancel} />
  486. </Modal>
  487. </Spin>
  488. </div>
  489. );
  490. },
  491. });
  492. const AnnualReport = React.createClass({
  493. loadData(pageNo) {
  494. this.state.data = [];
  495. this.setState({
  496. loading: true
  497. });
  498. $.ajax({
  499. method: "post",
  500. dataType: "json",
  501. crossDomain: false,
  502. url: globalConfig.context + "/api/admin/annualReport",
  503. data: {
  504. pageNo: pageNo || 1,
  505. pageSize: this.state.pagination.pageSize,
  506. uid: this.props.data.uid
  507. }
  508. }).done((data) => {
  509. if (!data.data || !data.data.list) {
  510. if (data.error.length) {
  511. message.warning(data.error[0].message);
  512. };
  513. return;
  514. };
  515. for (let i = 0; i < data.data.list.length; i++) {
  516. let thisdata = data.data.list[i];
  517. this.state.data.push({
  518. key: i,
  519. id: thisdata.id,
  520. uid: thisdata.uid,
  521. createTime: thisdata.createTime,
  522. lastUpdateTime: thisdata.lastUpdateTime,
  523. totalTax: thisdata.totalTax,
  524. incomeTaxRelief: thisdata.incomeTaxRelief,
  525. totalExportVolume: thisdata.totalExportVolume,
  526. year: thisdata.year,
  527. state: thisdata.state,
  528. createTimeFormattedDate: thisdata.createTimeFormattedDate,
  529. lastUpdateTimeFormattedDate: thisdata.lastUpdateTimeFormattedDate
  530. });
  531. };
  532. this.state.pagination.current = data.data.pageNo;
  533. this.state.pagination.total = data.data.totalCount;
  534. this.setState({
  535. dataSource: this.state.data,
  536. pagination: this.state.pagination
  537. });
  538. }).always(function () {
  539. this.setState({
  540. loading: false
  541. });
  542. }.bind(this));
  543. },
  544. getInitialState() {
  545. return {
  546. selectedRowKeys: [],
  547. selectedRows: [],
  548. loading: false,
  549. pagination: {
  550. defaultCurrent: 1,
  551. defaultPageSize: 10,
  552. showQuickJumper: true,
  553. pageSize: 10,
  554. onChange: function (page) {
  555. this.loadData(page);
  556. }.bind(this),
  557. showTotal: function (total) {
  558. return '共' + total + '条数据';
  559. }
  560. },
  561. columns: [
  562. {
  563. title: '年份',
  564. dataIndex: 'year',
  565. key: 'year'
  566. }, {
  567. title: '创建时间',
  568. dataIndex: 'createTimeFormattedDate',
  569. key: 'createTimeFormattedDate'
  570. }, {
  571. title: '最近更新时间',
  572. dataIndex: 'lastUpdateTimeFormattedDate',
  573. key: 'lastUpdateTimeFormattedDate'
  574. }, {
  575. title: '年报状态',
  576. dataIndex: 'state',
  577. key: 'state',
  578. render: (text) => {
  579. return getAnnualReportState(text)
  580. }
  581. }
  582. ],
  583. dataSource: []
  584. };
  585. },
  586. componentWillMount() {
  587. this.loadData();
  588. },
  589. tableRowClick(record, index) {
  590. this.state.RowData = record;
  591. this.setState({
  592. showDesc: true
  593. });
  594. },
  595. delectRow() {
  596. let deletedIds = [];
  597. for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
  598. let rowItem = this.state.selectedRows[idx];
  599. if (rowItem.id) {
  600. deletedIds.push(rowItem.id)
  601. }
  602. }
  603. this.setState({
  604. selectedRowKeys: [],
  605. loading: deletedIds.length > 0
  606. });
  607. $.ajax({
  608. method: "POST",
  609. dataType: "json",
  610. crossDomain: false,
  611. url: globalConfig.context + "/techservice/cognizance/deleteAnnualReport",
  612. data: {
  613. ids: deletedIds
  614. }
  615. }).done(function (data) {
  616. if (!data.error.length) {
  617. message.success('保存成功!');
  618. this.setState({
  619. loading: false,
  620. });
  621. } else {
  622. message.warning(data.error[0].message);
  623. };
  624. this.loadData();
  625. }.bind(this));
  626. },
  627. closeDesc(e) {
  628. this.state.showDesc = e;
  629. this.loadData();
  630. },
  631. search() {
  632. this.loadData();
  633. },
  634. reset() {
  635. this.loadData();
  636. },
  637. render() {
  638. const rowSelection = {
  639. selectedRowKeys: this.state.selectedRowKeys,
  640. onChange: (selectedRowKeys, selectedRows) => {
  641. this.setState({
  642. selectedRows: selectedRows,
  643. selectedRowKeys: selectedRowKeys
  644. });
  645. }
  646. };
  647. const hasSelected = this.state.selectedRowKeys.length > 0;
  648. return (
  649. <div className="user-content" >
  650. <div className="content-title">
  651. <span>企业年报</span>
  652. </div>
  653. <div className="user-search">
  654. <p>
  655. <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
  656. onClick={this.tableRowClick}>添加<Icon type="plus" /></Button>
  657. <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
  658. disabled={!hasSelected}
  659. onClick={this.delectRow}>删除<Icon type="minus" /></Button>
  660. </p>
  661. </div>
  662. <div className="patent-table">
  663. <Spin spinning={this.state.loading}>
  664. <Table columns={this.state.columns}
  665. dataSource={this.state.dataSource}
  666. pagination={this.state.pagination}
  667. rowSelection={rowSelection}
  668. onRowClick={this.tableRowClick} />
  669. </Spin>
  670. </div>
  671. <AnnualReportDesc
  672. uid={this.props.data.uid}
  673. data={this.state.RowData}
  674. showDesc={this.state.showDesc} closeDesc={this.closeDesc} />
  675. </div >
  676. );
  677. }
  678. });
  679. export default AnnualReport;