accountReview.jsx 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876
  1. import React from "react";
  2. import $ from "jquery/src/ajax";
  3. import moment from "moment";
  4. import {
  5. Button,
  6. Form,
  7. Input,
  8. Spin,
  9. Table,
  10. Select,
  11. message,
  12. Tabs,
  13. AutoComplete,
  14. DatePicker,
  15. Modal,
  16. Radio,
  17. } from "antd";
  18. import { ChooseList } from "../../order/orderNew/chooseList";
  19. import { ShowModal, getVehicleName, getTypeName, commonAdd, dealBigMoney } from "../../../tools"
  20. import ShowModalDiv from "@/showModal.jsx";
  21. import AccountDetails from "./accountDetails";
  22. import { accountType, accountStatus } from "@/dataDic";
  23. const FormItem = Form.Item;
  24. const { RangePicker } = DatePicker;
  25. const { TabPane } = Tabs;
  26. const RadioGroup = Radio.Group;
  27. const AccountReview = React.createClass({
  28. getInitialState() {
  29. return {
  30. info: {},
  31. showDetails: false,
  32. data: {},
  33. logvisible: false,
  34. logdataSour: [],
  35. visible: "",
  36. reason: "",
  37. checkData: {},
  38. aname: "",
  39. searchValues: {
  40. examineStatus: this.props.isOperate ? "1" : undefined
  41. }, // 列表筛选条件
  42. loading: false, //加载动画
  43. changeList: undefined, // 更改后的表格显示数据
  44. dataSource: [], // 列表数据
  45. departmentArr: [],
  46. pagination: {
  47. defaultCurrent: 1,
  48. defaultPageSize: 10,
  49. showQuickJumper: true,
  50. pageSize: 10,
  51. onChange: function (page) {
  52. this.loadData(page);
  53. }.bind(this),
  54. showTotal: function (total) {
  55. return "共" + total + "条数据";
  56. },
  57. },
  58. columns: [
  59. {
  60. title: "类型",
  61. dataIndex: "type",
  62. key: "type",
  63. width: 140,
  64. render: (text, record) => {
  65. return (
  66. <span>
  67. {text == 0 ? record.typeOther : accountType.find(item => item.value === text).label}
  68. </span>
  69. );
  70. },
  71. },
  72. {
  73. title: "报销金额(元)",
  74. dataIndex: "amount",
  75. key: "amount",
  76. },
  77. {
  78. title: "实报金额(元)",
  79. dataIndex: "realAmount",
  80. key: "realAmount",
  81. },
  82. {
  83. title: "报销编号",
  84. dataIndex: "checkNo",
  85. key: "checkNo",
  86. },
  87. // {
  88. // title: "报销至订单",
  89. // dataIndex: "buyerName",
  90. // key: "buyerName",
  91. // render: (text, record) => {
  92. // return (
  93. // record.targetType == 0
  94. // ? <div>固定费用</div>
  95. // : <div>
  96. // <div>{text || ""}</div>
  97. // <div>{record.contractNo || ""}</div>
  98. // </div>
  99. // );
  100. // },
  101. // },
  102. // {
  103. // title: "报销至部门",
  104. // dataIndex: "applyDepName",
  105. // key: "applyDepName",
  106. // render: (text, record) => {
  107. // return (
  108. // <span>{record.targetType == 0 && text}</span>
  109. // );
  110. // },
  111. // },
  112. {
  113. title: "报销人",
  114. dataIndex: "aname",
  115. key: "aname",
  116. },
  117. {
  118. title: "财务负责人",
  119. dataIndex: "financeName",
  120. key: "financeName",
  121. },
  122. {
  123. title: "状态",
  124. dataIndex: "status",
  125. key: "status",
  126. render: (text, record) => {
  127. return (
  128. <span style={{ color: accountStatus[text].color }}>
  129. {accountStatus[text].label}
  130. </span>
  131. );
  132. },
  133. },
  134. {
  135. title: "报销公司/支付公司",
  136. dataIndex: "payDepName",
  137. key: "payDepName",
  138. render: (text, record) => {
  139. return (
  140. <div>
  141. <div>{record.applyDepName || ""}</div>
  142. <div>{text || ""}</div>
  143. </div>
  144. );
  145. },
  146. },
  147. {
  148. title: "报销时间",
  149. dataIndex: "createTimeStr",
  150. key: "createTimeStr",
  151. },
  152. {
  153. title: "操作",
  154. dataIndex: "operate",
  155. key: "operate",
  156. render: (text, record) => {
  157. return (
  158. <div>
  159. <div>
  160. {this.props.isOperate &&
  161. <Button type="primary"
  162. style={{ margin: 4 }}
  163. onClick={() => { this.download(record.attachmentUrl) }}
  164. >下载</Button>}
  165. {this.props.isOperate && record.examine == 1 &&
  166. <Button type="primary"
  167. style={{ margin: 4 }}
  168. onClick={(e) => {
  169. e.stopPropagation();
  170. this.getConfig(record.id)
  171. this.setState({
  172. visible: "adopt",
  173. checkData: record,
  174. })
  175. }}
  176. >同意</Button>}
  177. {this.props.isOperate && record.examine == 1 &&
  178. <Button type="danger"
  179. style={{ margin: 4 }}
  180. onClick={(e) => {
  181. e.stopPropagation();
  182. this.setState({
  183. visible: "reject",
  184. checkData: record,
  185. })
  186. }}
  187. >驳回</Button>}
  188. {record.status != 0 && <Button
  189. style={{ margin: 4 }}
  190. onClick={() => {
  191. this.setState({
  192. logvisible: true
  193. })
  194. this.getLogData(record.id)
  195. }}>日志</Button>}
  196. </div>
  197. </div>
  198. )
  199. }
  200. },
  201. ],
  202. logcolumns: [
  203. {
  204. title: "审核人",
  205. dataIndex: "auditorName",
  206. key: "auditorName"
  207. },
  208. {
  209. title: "操作",
  210. dataIndex: "status",
  211. key: "status",
  212. width: 120,
  213. render: (text, record) => {
  214. return (
  215. <span style={{ color: ["#1D4FEA", "#34DE38", "#108EE9", "red", "#808080", "#1D4FEA"][text] }}>
  216. {["【发起】", "【通过】", "【完成】", "【驳回】", "【撤销】", "【修改】"][text]}
  217. {this.state.processStatus == record.processStatus && !record.id &&
  218. <span style={{ color: "#FFA500" }}>&nbsp;审核中...</span>}
  219. </span>
  220. );
  221. },
  222. },
  223. {
  224. title: "操作时间",
  225. dataIndex: "createTimeStr",
  226. key: "createTimeStr",
  227. width: 88,
  228. },
  229. {
  230. title: "备注",
  231. dataIndex: "remarks",
  232. key: "remarks",
  233. render: (text, record) => {
  234. return (
  235. <div style={{ minWidth: 250 }}>{text}</div>
  236. )
  237. }
  238. }
  239. ],
  240. };
  241. },
  242. componentWillMount() {
  243. this.departmentList();
  244. this.loadData();
  245. },
  246. getConfig(id) {
  247. $.ajax({
  248. method: "get",
  249. dataType: "json",
  250. crossDomain: false,
  251. url: globalConfig.context + "/api/admin/expenseAccount/getDepDetails",
  252. data: { id },
  253. success: function (data) {
  254. if (data.error.length === 0) {
  255. this.setState({
  256. info: data.data
  257. });
  258. } else {
  259. message.warning(data.error[0].message);
  260. }
  261. }.bind(this)
  262. }).always(
  263. function () {
  264. }.bind(this)
  265. );
  266. },
  267. // 列表接口
  268. loadData(pageNo) {
  269. const { searchValues, pagination } = this.state;
  270. this.setState({
  271. loading: true,
  272. });
  273. let datas = Object.assign(searchValues, {
  274. pageNo: pageNo || 1,
  275. pageSize: pagination.pageSize,
  276. expenseMain: 1,
  277. processStatus: this.props.isOperate ? 1 : 2,
  278. });
  279. $.ajax({
  280. method: "get",
  281. dataType: "json",
  282. crossDomain: false,
  283. url: globalConfig.context + "/api/admin/expenseAccount/pageList",
  284. data: datas,
  285. success: function (data) {
  286. ShowModal(this);
  287. this.setState({
  288. loading: false,
  289. });
  290. if (data.error && data.error.length === 0) {
  291. if (data.data.list) {
  292. pagination.current = data.data.pageNo;
  293. pagination.total = data.data.totalCount;
  294. if (data.data && data.data.list && !data.data.list.length) {
  295. pagination.current = 0;
  296. pagination.total = 0;
  297. }
  298. this.setState({
  299. dataSource: data.data.list,
  300. pagination: this.state.pagination,
  301. pageNo: data.data.pageNo,
  302. totalAmount: data.data.totalAmount,
  303. });
  304. } else {
  305. this.setState({
  306. dataSource: data.data,
  307. pagination: false,
  308. });
  309. }
  310. } else {
  311. message.warning(data.error[0].message);
  312. }
  313. }.bind(this),
  314. }).always(
  315. function () {
  316. this.setState({
  317. loading: false,
  318. });
  319. }.bind(this)
  320. );
  321. },
  322. // 日志
  323. getLogData(eaid) {
  324. $.ajax({
  325. method: "get",
  326. dataType: "json",
  327. crossDomain: false,
  328. url: globalConfig.context + "/api/admin/expenseAccount/log/list",
  329. data: { eaid },
  330. success: function (data) {
  331. if (data.error.length === 0) {
  332. this.setState({
  333. logdataSour: data.data || []
  334. });
  335. this.isHere(data.data || [])
  336. } else {
  337. message.warning(data.error[0].message);
  338. }
  339. }.bind(this)
  340. }).always(
  341. function () {
  342. }.bind(this)
  343. );
  344. },
  345. //
  346. isHere(list = []) {
  347. for (var i = 0; i < list.length; i++) {
  348. if (!list[i].id) {
  349. this.setState({
  350. processStatus: list[i].processStatus
  351. })
  352. return
  353. }
  354. }
  355. },
  356. download(urls) {
  357. if (!urls) {
  358. message.error("暂无可下载的附件!");
  359. } else {
  360. let list = urls.split(',') || []
  361. list.forEach(e => {
  362. var aLink = document.createElement('a');
  363. aLink.download = e;
  364. aLink.href = globalConfig.context + `/open/download?fileName=${e}&delete=false`;
  365. document.body.appendChild(aLink);
  366. aLink.click();
  367. document.body.removeChild(aLink);
  368. });
  369. }
  370. },
  371. departmentList() {
  372. $.ajax({
  373. method: "get",
  374. dataType: "json",
  375. crossDomain: false,
  376. url: globalConfig.context + "/api/admin/organization/selectSuperId",
  377. data: {},
  378. success: function (data) {
  379. let thedata = data.data;
  380. let theArr = [];
  381. if (!thedata) {
  382. if (data.error && data.error.length) {
  383. message.warning(data.error[0].message);
  384. }
  385. } else {
  386. thedata.map(function (item, index) {
  387. theArr.push({
  388. key: index,
  389. name: item.name,
  390. id: item.id
  391. });
  392. });
  393. }
  394. this.setState({
  395. departmentArr: theArr
  396. });
  397. }.bind(this)
  398. }).always(
  399. function () {
  400. }.bind(this)
  401. );
  402. },
  403. // 审核
  404. toExamine(num) {
  405. const { checkData, reason } = this.state
  406. if (!reason) {
  407. message.warning("请填写审核说明~");
  408. return;
  409. }
  410. if (num == 1 && this.state.info.ceoExamine == 1) {
  411. if (!this.state.approval && this.state.approval != 0) {
  412. message.warning("是否需要董事长审核");
  413. return;
  414. }
  415. }
  416. this.setState({
  417. loading: true,
  418. });
  419. $.ajax({
  420. method: "POST",
  421. dataType: "json",
  422. crossDomain: false,
  423. url: globalConfig.context + "/api/admin/expenseAccount/examine",
  424. data: {
  425. id: checkData.id,
  426. reason,
  427. status: num,//1同意 3驳回
  428. approval: this.state.approval,
  429. },
  430. }).done(
  431. function (data) {
  432. if (!data.error.length) {
  433. message.success("审核成功!");
  434. this.setState({
  435. visible: "",
  436. reason: "",
  437. showDetails: false,
  438. checkData: {},
  439. });
  440. this.loadData(this.state.pageNo)
  441. } else {
  442. message.warning(data.error[0].message);
  443. }
  444. }.bind(this)
  445. );
  446. },
  447. tableRowClick(e) {
  448. this.setState({
  449. showDetails: true,
  450. id: e.id,
  451. })
  452. // this.getDetails(e.id)
  453. },
  454. // 查询负责人
  455. followUp(e) {
  456. this.setState({
  457. aname: e
  458. });
  459. $.ajax({
  460. method: "get",
  461. dataType: "json",
  462. crossDomain: false,
  463. url: globalConfig.context + "/api/admin/customer/listAdminByName",
  464. data: {
  465. adminName: e,
  466. },
  467. success: function (data) {
  468. let thedata = data.data || [];
  469. if (!thedata) {
  470. if (data.error && data.error.length) {
  471. message.warning(data.error[0].message);
  472. }
  473. thedata = {};
  474. }
  475. this.setState({
  476. fjlist: thedata,
  477. });
  478. }.bind(this),
  479. }).always(
  480. function () {
  481. this.setState({
  482. loading: false,
  483. });
  484. }.bind(this)
  485. );
  486. },
  487. // 选中负责人
  488. selectF(value) {
  489. const { searchValues, fjlist } = this.state;
  490. const newdataSources = JSON.stringify(fjlist) == "{}" ? [] : fjlist;
  491. this.setState({
  492. searchValues: Object.assign(searchValues, {
  493. aid: newdataSources.find((item) => item.name == value).id,
  494. }),
  495. });
  496. },
  497. // 搜索
  498. search() {
  499. this.loadData();
  500. },
  501. // 重置
  502. reset() {
  503. this.setState({
  504. aname: "",
  505. searchValues: JSON.parse(JSON.stringify({ examineStatus: this.props.isOperate ? "1" : undefined })),
  506. }, () => {
  507. this.loadData();
  508. })
  509. },
  510. changeList(arr) {
  511. const newArr = [];
  512. this.state.columns.forEach((item) => {
  513. arr.forEach((val) => {
  514. if (val === item.title) {
  515. newArr.push(item);
  516. }
  517. });
  518. });
  519. this.setState({
  520. changeList: newArr,
  521. });
  522. },
  523. render() {
  524. const { TextArea } = Input
  525. const { searchValues, visible, } = this.state
  526. const formItemLayout = {
  527. labelCol: { span: 5 },
  528. wrapperCol: { span: 18 },
  529. };
  530. const dataSources = this.state.fjlist || [];
  531. const options = dataSources.map((group) => (
  532. <Select.Option key={group.id} value={group.name}>
  533. {group.name}
  534. </Select.Option>
  535. ));
  536. return (
  537. <div className="user-content">
  538. <ShowModalDiv ShowModal={this.state.showModal} />
  539. <div className="content-title" style={{ marginBottom: 10 }}>
  540. <span style={{ fontWeight: 900, fontSize: 16 }}>{this.props.isOperate ? "报销审核" : "报销列表"}</span>
  541. </div>
  542. <Tabs defaultActiveKey="2" className="test">
  543. <TabPane tab="搜索" key="2">
  544. <div className="user-search" style={{ marginLeft: 10 }}>
  545. <Input
  546. placeholder="合同编号"
  547. value={searchValues["contractNo"]
  548. ? searchValues["contractNo"]
  549. : ""}
  550. onChange={(e) => {
  551. searchValues["contractNo"] = e.target.value;
  552. this.setState({
  553. searchValues: searchValues,
  554. });
  555. }}
  556. />
  557. <Input
  558. placeholder="客户名称"
  559. value={searchValues["username"]
  560. ? searchValues["username"]
  561. : ""}
  562. onChange={(e) => {
  563. searchValues["username"] = e.target.value;
  564. this.setState({
  565. searchValues: searchValues,
  566. });
  567. }}
  568. />
  569. <Select
  570. style={{ width: 140 }}
  571. placeholder="报销类型"
  572. value={searchValues["type"]
  573. ? searchValues["type"]
  574. : undefined}
  575. onChange={(e) => {
  576. searchValues["type"] = e;
  577. this.setState({
  578. searchValues: searchValues,
  579. });
  580. }}
  581. >
  582. <Option value="1">差旅费</Option>
  583. <Option value="2">非业务报销</Option>
  584. <Option value="3">第三方付款</Option>
  585. <Option value="4">申请借支</Option>
  586. <Option value="5">申请抵扣</Option>
  587. <Option value="0">其他</Option>
  588. </Select>
  589. <AutoComplete
  590. className="certain-category-search"
  591. dropdownClassName="certain-category-search-dropdown"
  592. dropdownMatchSelectWidth={false}
  593. style={{ width: 140 }}
  594. dataSource={options}
  595. placeholder="报销人"
  596. value={this.state.aname}
  597. onChange={this.followUp.bind(this)}
  598. filterOption={true}
  599. onSelect={this.selectF.bind(this)}
  600. >
  601. <Input />
  602. </AutoComplete>
  603. <Select
  604. placeholder="所属部门"
  605. style={{ width: 200, marginRight: 10 }}
  606. value={searchValues["depId"]
  607. ? searchValues["depId"]
  608. : undefined}
  609. onChange={e => {
  610. searchValues["depId"] = e;
  611. this.setState({
  612. searchValues: searchValues,
  613. });
  614. }}
  615. >
  616. {this.state.departmentArr.map(function (item) {
  617. return <Select.Option key={item.id}>{item.name}</Select.Option>;
  618. })}
  619. </Select>
  620. <Select
  621. placeholder="申请部门"
  622. style={{ width: 200, marginRight: 10 }}
  623. value={searchValues["applyDep"]
  624. ? searchValues["applyDep"]
  625. : undefined}
  626. onChange={e => {
  627. searchValues["applyDep"] = e;
  628. this.setState({
  629. searchValues: searchValues,
  630. });
  631. }}
  632. >
  633. {this.state.departmentArr.map(function (item) {
  634. return <Select.Option key={item.id}>{item.name}</Select.Option>;
  635. })}
  636. </Select>
  637. <Select
  638. placeholder="支付部门"
  639. style={{ width: 200, marginRight: 10 }}
  640. value={searchValues["payDep"]
  641. ? searchValues["payDep"]
  642. : undefined}
  643. onChange={e => {
  644. searchValues["payDep"] = e;
  645. this.setState({
  646. searchValues: searchValues,
  647. });
  648. }}
  649. >
  650. {this.state.departmentArr.map(function (item) {
  651. return <Select.Option key={item.id}>{item.name}</Select.Option>;
  652. })}
  653. </Select>
  654. <Select
  655. style={{ width: 140 }}
  656. placeholder="审核状态"
  657. value={searchValues["examineStatus"]
  658. ? searchValues["examineStatus"]
  659. : undefined}
  660. onChange={(e) => {
  661. searchValues["examineStatus"] = e;
  662. this.setState({
  663. searchValues: searchValues,
  664. });
  665. }}
  666. >
  667. <Option value="0">全部</Option>
  668. <Option value="1">待审核</Option>
  669. <Option value="2">已审核</Option>
  670. </Select>
  671. <Input
  672. placeholder="报销编号"
  673. value={searchValues["checkNo"]
  674. ? searchValues["checkNo"]
  675. : ""}
  676. onChange={(e) => {
  677. searchValues["checkNo"] = e.target.value;
  678. this.setState({
  679. searchValues: searchValues,
  680. });
  681. }}
  682. />
  683. <div style={{ marginTop: 10 }}>
  684. <span>报销时间:</span>
  685. <RangePicker
  686. style={{ width: 300 }}
  687. value={[
  688. searchValues.startTime ? moment(searchValues.startTime) : null,
  689. searchValues.endTime ? moment(searchValues.endTime) : null,
  690. ]}
  691. onChange={(data, dataString) => {
  692. this.setState({
  693. searchValues: Object.assign(searchValues, {
  694. startTime: dataString[0],
  695. endTime: dataString[1],
  696. }),
  697. });
  698. }}
  699. />
  700. <Button
  701. type="primary"
  702. onClick={this.search}
  703. style={{ margin: "0 10px" }}
  704. >
  705. 搜索
  706. </Button>
  707. <Button onClick={this.reset}>重置</Button>
  708. </div>
  709. </div>
  710. </TabPane>
  711. <TabPane tab="更改表格显示数据" key="1">
  712. <div style={{ marginLeft: 10 }}>
  713. <ChooseList
  714. columns={this.state.columns}
  715. changeFn={this.changeList}
  716. changeList={this.state.changeList}
  717. top={55}
  718. margin={11}
  719. />
  720. </div>
  721. </TabPane>
  722. </Tabs>
  723. <div className="patent-table">
  724. <Spin spinning={this.state.loading}>
  725. <Table
  726. bordered
  727. columns={
  728. this.state.changeList == undefined
  729. ? this.state.columns
  730. : this.state.changeList
  731. }
  732. dataSource={this.state.dataSource}
  733. pagination={this.state.pagination}
  734. onRowDoubleClick={this.tableRowClick.bind(this)}
  735. size="small"
  736. />
  737. </Spin>
  738. <p
  739. style={{ display: "inline-block", fontSize: "14px", color: "red" }}
  740. >
  741. {
  742. <span style={{ marginRight: 10 }}>
  743. {`金额总计(元):${this.state.totalAmount}`}
  744. </span>
  745. }
  746. </p>
  747. </div>
  748. {
  749. //审核弹窗
  750. this.state.visible != "" &&
  751. <Modal
  752. width="400px"
  753. maskClosable={false}
  754. title="审核"
  755. confirmLoading={this.state.loading}
  756. visible={this.state.visible != ""}
  757. onOk={() => { this.toExamine(visible == "adopt" ? 1 : visible == "reject" && 3) }}
  758. okText={this.state.visible == "adopt" ? "通过" : this.state.visible == "reject" && "驳回"}
  759. onCancel={() => {
  760. this.setState({
  761. visible: '',
  762. reason: "",
  763. checkData: {},
  764. })
  765. }}
  766. >
  767. <div style={{ width: "90%", margin: "0 auto" }}>
  768. <TextArea
  769. rows={4}
  770. value={this.state.reason}
  771. onChange={(e) => {
  772. this.setState({
  773. reason: e.target.value,
  774. })
  775. }}
  776. placeholder="请填写审核内容"
  777. />
  778. {
  779. this.state.visible == "adopt" && this.state.info.ceoExamine == 1 &&
  780. <div style={{ marginTop: 10 }}>
  781. <RadioGroup
  782. value={this.state.approval}
  783. onChange={(e) => {
  784. this.setState({
  785. approval: e.target.value
  786. })
  787. }} >
  788. <Radio value={0}>不需要董事长审核</Radio>
  789. <Radio value={1}>需要董事长审核</Radio>
  790. </RadioGroup>
  791. </div>
  792. }
  793. </div>
  794. </Modal>
  795. }
  796. {
  797. this.state.showDetails &&
  798. <AccountDetails
  799. showDetails={this.state.showDetails}
  800. id={this.state.id}
  801. isOperate={this.props.isOperate}
  802. onCancel={() => {
  803. this.setState({
  804. showDetails: false
  805. }, () => {
  806. this.loadData(this.state.pageNo)
  807. })
  808. }}
  809. />
  810. }
  811. {
  812. // 审核日志
  813. this.state.logvisible &&
  814. <Modal
  815. visible={this.state.logvisible}
  816. className="admin-desc-content"
  817. width="800px"
  818. maskClosable={false}
  819. title="审核日志"
  820. footer={null}
  821. onCancel={() => {
  822. this.setState({
  823. logvisible: false,
  824. })
  825. }}
  826. >
  827. <div className="patent-table">
  828. <Spin spinning={this.state.loading}>
  829. <Table
  830. columns={this.state.logcolumns}
  831. dataSource={this.state.logdataSour}
  832. pagination={false}
  833. bordered
  834. size="small"
  835. />
  836. </Spin>
  837. </div>
  838. </Modal>
  839. }
  840. </div>
  841. );
  842. },
  843. });
  844. export default AccountReview;