content.jsx 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  1. import React from 'react';
  2. import { Spin, Button, Tabs, Table, message, Modal, Tooltip } from 'antd';
  3. import ajax from 'jquery/src/ajax/xhr.js'
  4. import $ from 'jquery/src/ajax';
  5. import '../content.less';
  6. import './content.less';
  7. import LeftTab from './leftTab.jsx';
  8. import FollowDetail from "../customer/NEW/intentionCustomer/followDetail";
  9. const TabPane = Tabs.TabPane;
  10. const MessageModal = React.createClass({
  11. getInitialState() {
  12. return {
  13. unreadData: [],
  14. unreadDataType: '0',
  15. dataSourceType: '1',
  16. unreadDataIndex: 0,
  17. newVisible: false,
  18. loading: false,
  19. categoryArr: [],
  20. pagination: {
  21. defaultCurrent: 1,
  22. defaultPageSize: 10,
  23. showQuickJumper: true,
  24. pageSize: 10,
  25. onChange: function (page) {
  26. this.loadReaded(page);
  27. }.bind(this),
  28. showTotal: function (total) {
  29. return '共' + total + '条数据';
  30. }
  31. },
  32. UnreadPagination: {
  33. defaultCurrent: 1,
  34. defaultPageSize: 10,
  35. showQuickJumper: true,
  36. pageSize: 9999999,
  37. onChange: function (page) {
  38. this.loadUnread(page);
  39. }.bind(this),
  40. showTotal: function (total) {
  41. return '共' + total + '条数据';
  42. }
  43. },
  44. columns: [
  45. {
  46. title: '类型',
  47. dataIndex: 'noticeTypeName',
  48. key: 'noticeTypeName',
  49. width: 120,
  50. render: (text, record) => {
  51. return <span style={{ color: record.noticeType == 59 && "red" }}>{text}</span>;
  52. },
  53. }, {
  54. title: '时间',
  55. dataIndex: 'createTimeFormattedDate',
  56. key: 'createTimeFormattedDate',
  57. width: 120
  58. }, {
  59. title: '内容',
  60. dataIndex: 'content',
  61. key: 'content',
  62. width: 1189,
  63. render: (text, record) => {
  64. return (
  65. <Tooltip placement="topLeft" title={text}>
  66. <div style={{
  67. color: record.noticeType == 59 && "red",
  68. width: 1189,
  69. textOverflow: "ellipsis",
  70. whiteSpace: "nowrap",
  71. overflow: 'hidden',
  72. }}>
  73. {text}
  74. </div>
  75. </Tooltip>
  76. )
  77. }
  78. },
  79. {
  80. title: "操作",
  81. dataIndex: "abc",
  82. key: "abc",
  83. width: 150,
  84. render: (text, record) => {
  85. let contractNo = '';
  86. if ((record.noticeType === 14 || record.noticeType === 40) && record.content.indexOf('合同编号-') !== -1) {
  87. let arr = record.content.split('合同编号-');
  88. contractNo = arr[1].match(/(\S*), 订单编号/)[1];
  89. }
  90. return (
  91. record.noticeType === 48 || record.noticeType === 49 ?
  92. <Button type="primary" onClick={() => {
  93. this.category();
  94. record.id = record.uid;
  95. this.setState({
  96. followData: record,
  97. visitModul: true,
  98. });
  99. }}>立即跟进</Button> :
  100. record.noticeType === 14 || record.noticeType === 40 ?
  101. <Button disabled={!contractNo} type="primary" onClick={(e) => {
  102. e.stopPropagation();
  103. let input = document.getElementById("copyText1");
  104. input.value = contractNo;
  105. input.select();
  106. document.execCommand("copy");
  107. message.success('复制成功')
  108. }}>
  109. 复制合同号
  110. </Button> : null
  111. )
  112. }
  113. }
  114. // {
  115. // title: '公司',
  116. // dataIndex: 'unitName',
  117. // key: 'unitName',
  118. // }, {
  119. // title: '业务员',
  120. // dataIndex: 'principle',
  121. // key: 'principle',
  122. // }
  123. ],
  124. columns1: [
  125. {
  126. title: '类型',
  127. dataIndex: 'noticeTypeName',
  128. key: 'noticeTypeName',
  129. width: 120,
  130. render: (text, record) => {
  131. return (
  132. <div style={{ color: record.noticeType == 59 && "red" }}>{text}</div>
  133. )
  134. }
  135. }, {
  136. title: '时间',
  137. dataIndex: 'createTimeFormattedDate',
  138. key: 'createTimeFormattedDate',
  139. width: 120
  140. }, {
  141. title: '内容',
  142. dataIndex: 'content',
  143. key: 'content',
  144. width: 610,
  145. render: (text, record) => {
  146. return (
  147. <Tooltip placement="topLeft" title={text}>
  148. <div
  149. style={{
  150. color: record.noticeType == 59 && "red",
  151. width: 610,
  152. textOverflow: "ellipsis",
  153. whiteSpace: "nowrap",
  154. overflow: 'hidden',
  155. }}>
  156. {text}
  157. </div>
  158. </Tooltip>
  159. )
  160. }
  161. },
  162. {
  163. title: "操作",
  164. dataIndex: "abc",
  165. key: "abc",
  166. width: 150,
  167. render: (text, record) => {
  168. let contractNo = '';
  169. if ((record.noticeType === 14 || record.noticeType === 40) && record.content.indexOf('合同编号-') !== -1) {
  170. let arr = record.content.split('合同编号-');
  171. contractNo = arr[1].match(/(\S*), 订单编号/)[1];
  172. }
  173. return (
  174. record.noticeType === 48 || record.noticeType === 49 ?
  175. <Button type="primary" onClick={() => {
  176. this.category();
  177. record.id = record.uid;
  178. this.setState({
  179. followData: record,
  180. visitModul: true,
  181. });
  182. }}>立即跟进</Button> :
  183. record.noticeType === 14 || record.noticeType === 40 ?
  184. <Button disabled={!contractNo} type="primary" onClick={(e) => {
  185. e.stopPropagation();
  186. let input = document.getElementById("copyText1");
  187. input.value = contractNo;
  188. input.select();
  189. document.execCommand("copy");
  190. message.success('复制成功')
  191. }}>
  192. 复制合同号
  193. </Button> : null
  194. )
  195. }
  196. }
  197. // {
  198. // title: '公司',
  199. // dataIndex: 'unitName',
  200. // key: 'unitName',
  201. // }, {
  202. // title: '业务员',
  203. // dataIndex: 'principle',
  204. // key: 'principle',
  205. // }
  206. ],
  207. data: []
  208. };
  209. },
  210. closeDesc() {
  211. this.setState({
  212. categoryArr: [],
  213. followData: '',
  214. visitModul: false
  215. }, () => {
  216. this.loadReaded(this.state.pagination.current);
  217. })
  218. },
  219. category() {
  220. $.ajax({
  221. method: "get",
  222. dataType: "json",
  223. crossDomain: false,
  224. url: globalConfig.context + "/api/admin/Varieties/getSuperList",
  225. data: {},
  226. success: function (data) {
  227. let thedata = data.data;
  228. let theArr = [];
  229. if (!thedata) {
  230. if (data.error && data.error.length) {
  231. message.warning(data.error[0].message);
  232. }
  233. thedata = {};
  234. } else {
  235. thedata.map(function (item, index) {
  236. theArr.push({
  237. value: item.id,
  238. key: item.cname,
  239. });
  240. });
  241. }
  242. this.setState({
  243. categoryArr: theArr,
  244. });
  245. }.bind(this),
  246. });
  247. },
  248. //主菜单请求
  249. mainMenu() {
  250. this.setState({
  251. loading: true
  252. });
  253. $.ajax({
  254. method: "get",
  255. dataType: "json",
  256. crossDomain: false,
  257. url: globalConfig.context + "/api/admin/selectNavList",
  258. data: {
  259. },
  260. success: function (data) {
  261. if (!data.data) {
  262. if (data.error && data.error.length) {
  263. message.warning(data.error[0].message);
  264. return;
  265. };
  266. };
  267. this.setState({
  268. menu: data.data
  269. });
  270. }.bind(this),
  271. }).always(function (data) {
  272. this.setState({
  273. loading: false
  274. })
  275. }.bind(this))
  276. },
  277. finId(text) {
  278. var data = this.state.menu || [];
  279. var rid = '';
  280. switch (text) {
  281. case 1:
  282. data.map(function (nub, index) {
  283. if (nub.url.indexOf('demand') != -1) {
  284. rid = nub.id;
  285. }
  286. });
  287. break;
  288. case 2:
  289. data.map(function (nub, index) {
  290. if (nub.url.indexOf('demand') != -1) {
  291. rid = nub.id;
  292. }
  293. });
  294. break;
  295. case 3:
  296. data.map(function (nub, index) {
  297. if (nub.url.indexOf('achievement') != -1) {
  298. rid = nub.id;
  299. }
  300. });
  301. break;
  302. case 4:
  303. data.map(function (nub, index) {
  304. if (nub.url.indexOf('achievement') != -1) {
  305. rid = nub.id;
  306. }
  307. });
  308. break;
  309. case 5:
  310. data.map(function (nub, index) {
  311. if (nub.url.indexOf('order') != -1) {
  312. rid = nub.id;
  313. }
  314. });
  315. break;
  316. case 6:
  317. data.map(function (nub, index) {
  318. if (nub.url.indexOf('order') != -1) {
  319. rid = nub.id;
  320. }
  321. });
  322. break;
  323. case 7:
  324. data.map(function (nub, index) {
  325. if (nub.url.indexOf('servicesManage') != -1) {
  326. rid = nub.id;
  327. }
  328. });
  329. break;
  330. default:
  331. rid = '';
  332. }
  333. return rid;
  334. },
  335. //跳转详情
  336. setStore(record) {
  337. localStorage.setItem('newData', {});
  338. let ids = record.noticeType;
  339. let rid = this.finId(ids) || "";
  340. var urls = '',
  341. dataJson = {};
  342. switch (ids) {
  343. case 1:
  344. urls = "/admin/demand.html?rid=" + rid + "#techDemandAudit";
  345. dataJson = {
  346. "id": record.uid,
  347. //"id":"3f93588b-332e-4353-bbfd-f1451b4b390c",
  348. "dataCategory": "0"
  349. };
  350. break;
  351. case 2:
  352. urls = "/admin/demand.html?rid=" + rid + "#techDemandPublish";
  353. dataJson = {
  354. "id": record.uid,
  355. //"id":"40f77e32-29fa-4a85-a6f0-7c4986bdc5e3",
  356. "dataCategory": '1'
  357. };
  358. break;
  359. case 3:
  360. urls = "/admin/achievement.html?rid=" + rid + "#techAchievementAudit";
  361. dataJson = {
  362. "id": record.uid,
  363. //"id":"f09d5c08-4a8b-48a6-9753-86006f1a53cb",
  364. "ownerType": '1'
  365. };
  366. break;
  367. case 4:
  368. urls = "/admin/achievement.html?rid=" + rid + "#techAchievementPublish";
  369. dataJson = {
  370. "id": record.uid,
  371. //"id":"953c9ef7-6cf6-4ab7-af89-c01521998fed",
  372. "ownerType": '1'
  373. };
  374. break;
  375. case 5:
  376. urls = "/admin/order.html?rid=" + rid + "#myService";
  377. dataJson = {
  378. "orderNo": record.orderNo
  379. //"orderNo":"175557414077480960"
  380. };
  381. break;
  382. case 6:
  383. urls = "/admin/order.html?rid=" + rid + "#mySettlement";
  384. dataJson = {
  385. "orderNo": record.orderNo
  386. //"orderNo":"180714111314051072"
  387. };
  388. break;
  389. case 7:
  390. urls = "/admin/servicesManage/projectOrder.html?rid=" + rid + "#projectManage";
  391. dataJson = {
  392. //"id":record.id,
  393. "id": "69e2d8ca984240a4b9c90daac69fe5e3",
  394. "buyerType": "1"
  395. };
  396. break;
  397. default:
  398. urls: '#';
  399. dataJson = {};
  400. };
  401. console.log(rid);
  402. if (rid) {
  403. var data = dataJson;
  404. var newData = JSON.stringify(data);
  405. localStorage.setItem('newData', newData);
  406. window.location.href = globalConfig.context + urls;
  407. }
  408. },
  409. loadReaded(pageNo) {
  410. this.state.data = [];
  411. this.setState({
  412. loading: true
  413. });
  414. $.ajax({
  415. method: "get",
  416. dataType: "json",
  417. crossDomain: false,
  418. url: globalConfig.context + "/api/admin/notice/readed",
  419. data: {
  420. pageNo: pageNo || 1,
  421. pageSize: this.state.pagination.pageSize,
  422. type: this.state.unreadDataType,
  423. }
  424. }).done((data) => {
  425. if (!data.data) {
  426. if (data.error && data.error.length) {
  427. message.warning(data.error[0].message);
  428. return;
  429. };
  430. };
  431. this.state.data = [];
  432. for (let i = 0; i < data.data.list.length; i++) {
  433. let thisdata = data.data.list[i];
  434. this.state.data.push({
  435. key: i + 1,
  436. id: thisdata.id,
  437. rid: thisdata.rid,
  438. uid: thisdata.uid,
  439. aid: thisdata.aid,
  440. noticeType: thisdata.noticeType,
  441. year: thisdata.year,
  442. noticeTypeName: thisdata.noticeTypeName,
  443. content: thisdata.content,
  444. createTime: thisdata.createTime,
  445. createTimeFormattedDate: thisdata.createTimeFormattedDate,
  446. principle: thisdata.principle,
  447. unitName: thisdata.unitName
  448. });
  449. };
  450. this.state.pagination.current = data.data.pageNo;
  451. this.state.pagination.total = data.data.totalCount;
  452. this.setState({
  453. dataSource: this.state.data,
  454. pagination: this.state.pagination,
  455. });
  456. }).always(function () {
  457. this.setState({
  458. loading: false
  459. });
  460. }.bind(this));
  461. },
  462. loadUnread(pageNo) {
  463. this.state.data = [];
  464. this.setState({
  465. loading: true
  466. });
  467. $.ajax({
  468. method: "get",
  469. dataType: "json",
  470. crossDomain: false,
  471. url: globalConfig.context + "/api/admin/notice/unread",
  472. data: {
  473. }
  474. }).done((data) => {
  475. if (data.error && data.error.length) {
  476. message.warning(data.error[0].message);
  477. return;
  478. } else {
  479. let arr = data.data.filter(v => v.list.length > 0)
  480. if (arr.length) {
  481. this.setState({
  482. newVisible: true
  483. });
  484. }
  485. let index = data.data.findIndex(v => v.list.length > 0);
  486. if (index >= 0) {
  487. data.data[index].isRead = true;
  488. this.setState({
  489. unreadDataType: data.data[index]['id'] + '',
  490. unreadDataIndex: index,
  491. });
  492. } else {
  493. this.setState({
  494. unreadDataType: data.data[0]['id'] + '',
  495. unreadDataIndex: '0',
  496. });
  497. }
  498. this.setState({
  499. unreadData: data.data,
  500. });
  501. }
  502. }).always(function () {
  503. this.setState({
  504. loading: false,
  505. });
  506. }.bind(this));
  507. },
  508. componentWillMount() {
  509. // this.loadReaded();
  510. this.loadUnread();
  511. this.mainMenu();
  512. },
  513. handleOk() {
  514. let arr = this.state.unreadData.filter(v => v.list.length > 0 && !v.isRead);
  515. if (arr.length > 0) {
  516. message.warning('还存在未读消息,请查看后再关闭当前页面!');
  517. return;
  518. } else {
  519. this.loadUnread();
  520. this.setState({
  521. newVisible: false
  522. });
  523. }
  524. },
  525. render() {
  526. return (
  527. <div className="set-content">
  528. <textarea id="copyText" style={{ opacity: 0 }} />
  529. <div className="set-title" style={{ marginBottom: 10 }}>
  530. <span style={{ fontWeight: 900, fontSize: 16 }}>信息中心</span>
  531. </div>
  532. <Spin spinning={this.state.loading} className="spin-box">
  533. <Tabs defaultActiveKey={this.state.unreadDataType} activeKey={this.state.unreadDataType} onChange={v => {
  534. let index = this.state.unreadData.findIndex(d => d.id == v);
  535. this.state.unreadData[index].isRead = true;
  536. this.setState({
  537. unreadDataIndex: index,
  538. unreadData: this.state.unreadData,
  539. unreadDataType: v
  540. }, () => {
  541. if (this.state.dataSourceType === '2') {
  542. this.loadReaded()
  543. }
  544. })
  545. }}>
  546. {
  547. this.state.unreadData.map((v) => (
  548. <Tabs.TabPane
  549. key={v.id + ''}
  550. tab={
  551. <div
  552. style={{ color: v.id == 7 && "red" }}
  553. >
  554. {v.list.length === 0 || v.isRead ? null :
  555. <div
  556. style={{
  557. width: '8px',
  558. height: "8px",
  559. borderRadius: '8px',
  560. background: '#f00',
  561. position: 'absolute',
  562. right: '5px',
  563. top: '2px',
  564. }} />
  565. }
  566. {v.name}
  567. </div>
  568. } />
  569. ))
  570. }
  571. </Tabs>
  572. <Tabs defaultActiveKey="1" type="card" tabPosition='left' value={this.state.dataSourceType} onChange={(v) => {
  573. this.setState({
  574. dataSourceType: v
  575. })
  576. if (v === '2') {
  577. this.loadReaded()
  578. }
  579. }}>
  580. <Tabs.TabPane tab={'未读'} key="1">
  581. <Table
  582. bordered
  583. columns={this.state.columns}
  584. dataSource={this.state.unreadData[this.state.unreadDataIndex] ? this.state.unreadData[this.state.unreadDataIndex].list : []}
  585. pagination={false}
  586. />
  587. </Tabs.TabPane>
  588. <Tabs.TabPane tab="已读" key="2">
  589. <Table
  590. bordered
  591. columns={this.state.columns}
  592. dataSource={this.state.dataSource}
  593. pagination={this.state.pagination}
  594. />
  595. </Tabs.TabPane>
  596. </Tabs>
  597. </Spin>
  598. <Modal
  599. maskClosable={false}
  600. style={{ position: "relative" }}
  601. title="消息提醒"
  602. visible={this.state.newVisible}
  603. width={1400}
  604. closable={false}
  605. footer={null}
  606. >
  607. <Spin spinning={this.state.loading} className="spin-box">
  608. <Tabs
  609. defaultActiveKey={this.state.unreadDataType}
  610. activeKey={this.state.unreadDataType}
  611. onChange={v => {
  612. let index = this.state.unreadData.findIndex(d => d.id == v);
  613. this.state.unreadData[index].isRead = true;
  614. this.setState({
  615. unreadDataIndex: index,
  616. unreadData: this.state.unreadData,
  617. unreadDataType: v
  618. })
  619. }}>
  620. {
  621. this.state.unreadData.map((v) => (
  622. <Tabs.TabPane
  623. key={v.id + ''}
  624. tab={<div style={{ color: v.id == 7 && "red" }}>
  625. {v.list.length === 0 || v.isRead ? null : <div style={{ width: '8px', height: "8px", borderRadius: '8px', background: '#f00', position: 'absolute', right: '5px', top: '2px' }} />}
  626. {v.name}
  627. </div>
  628. } />
  629. ))
  630. }
  631. </Tabs>
  632. <Table
  633. columns={this.state.columns1}
  634. dataSource={this.state.unreadData[this.state.unreadDataIndex] ? this.state.unreadData[this.state.unreadDataIndex].list : []}
  635. pagination={false}
  636. scroll={{ y: 600, x: 1000 }}
  637. />
  638. </Spin>
  639. <Button
  640. onClick={this.handleOk}
  641. type={"primary"}
  642. style={{
  643. position: "relative",
  644. left: "50%",
  645. transform: "translateX(-50%)",
  646. bottom: -10
  647. }}
  648. >
  649. 我已阅读以上信息
  650. </Button>
  651. </Modal>
  652. <FollowDetail
  653. categoryArr={this.state.categoryArr}
  654. followData={this.state.followData}
  655. visitModul={this.state.visitModul}
  656. closeDesc={this.closeDesc}
  657. />
  658. <textarea id='copyText1' style={{ opacity: 0 }} />
  659. </div>
  660. );
  661. }
  662. });
  663. const Content = React.createClass({
  664. getInitialState() {
  665. return {
  666. loading: false,
  667. component: '<div></div>'
  668. };
  669. },
  670. getKey(key) {
  671. switch (key) {
  672. case 'normal':
  673. require.ensure([], () => {
  674. this.setState({
  675. component: <MessageModal />,
  676. });
  677. });
  678. break;
  679. case "contacts":
  680. let Module = require('./contacts/index').default;
  681. require.ensure([], () => {
  682. this.setState({
  683. component: <Module />,
  684. });
  685. });
  686. break;
  687. default:
  688. require.ensure([], () => {
  689. let Module = require('../module').default;
  690. this.setState({
  691. component: <Module />
  692. });
  693. });
  694. }
  695. window.location.hash = key;
  696. },
  697. componentWillMount() {
  698. if (window.location.hash) {
  699. this.getKey((window.location.hash).slice(1));
  700. } else {
  701. this.getKey('normal');
  702. };
  703. },
  704. render() {
  705. return (
  706. <div className="manage-content">
  707. <LeftTab handlekey={this.getKey} />
  708. <div className="content-right">
  709. <Spin spinning={this.state.loading} className='spin-box'>
  710. <div className="index-content">
  711. {this.state.component}
  712. </div>
  713. </Spin>
  714. </div>
  715. </div>
  716. )
  717. }
  718. });
  719. export default Content;
  720. // <div className="index-content">
  721. // <div className="index-userdata clearfix">
  722. // <p className="acc-title">{this.state.number}</p>
  723. // <div className="userdata-img">
  724. // <img src={globalConfig.staticHost + "/upload" + this.state.personPortraitUrl} alt="" />
  725. // </div>
  726. // <div className="userdata-content">
  727. // {(() => {
  728. // switch (userData.lvl || this.state.userlvl) {
  729. // case '0':
  730. // return <p className="userdata-lvl">等级:<span>LV1</span> 普通用户</p>;
  731. // case '1':
  732. // return <p className="userdata-lvl">等级:<span>LV2</span> 已认证用户</p>;
  733. // };
  734. // })()}
  735. // <p>完善资料 {this.state.per}% ,<a href="./set.html">继续完善</a>,有助于提高您的资信</p>
  736. // <p className="userdata-relate" style={{ 'display': 'none' }}>
  737. // <Button className="relateqq"><img src={qq} alt="" /> QQ账号登录</Button>
  738. // <Button className="relateweibo"><img src={weibo} alt="" />微博账号登录</Button>
  739. // <Button className="relateweixin"><img src={weixin} alt="" />微信账号登录</Button>
  740. // </p>
  741. // <div className="userdata-follow">已有<a href="">{this.state.follow}</a>人关注你</div>
  742. // </div>
  743. // </div>
  744. // <div className="index-record">
  745. // <p className="acc-title">我的轨迹</p>
  746. // <ul className="record-list clearfix">
  747. // <li>技术成果:<a href="">{this.state.chengguo}</a>项</li>
  748. // <li>技术开发:<a href="">{this.state.kaifa}</a>项</li>
  749. // <li>科技服务:<a href="">{this.state.fuwu}</a>项</li>
  750. // <li>发布需求:<a href="">{this.state.xuqiu}</a>项</li>
  751. // </ul>
  752. // </div>
  753. // <div className="index-activity">
  754. // <Tabs defaultActiveKey="1" onChange={this.tabChange}>
  755. // <TabPane tab="活动" key="1">
  756. // <p className="acc-title">即将举办的活动</p>
  757. // <ul className="activity-list">
  758. // {
  759. // this.state.activityArr.map(function (item, i) {
  760. // return <li key={i}>
  761. // <span className="list-type">[{item.type}]</span>
  762. // <span className="list-title">{item.title}</span>
  763. // <a href={item.link}>报名</a>
  764. // <span className="list-time">{item.time}</span>
  765. // </li>;
  766. // })
  767. // }
  768. // </ul>
  769. // </TabPane>
  770. // <TabPane tab="其他" key="2">Content of Tab Pane 2</TabPane>
  771. // </Tabs>
  772. // </div>
  773. // </div>