followUpDetails.jsx 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876
  1. import React, { Component } from "react";
  2. import { Button, Col, Form, message, Modal, Spin, Table, Tabs, Tag } from "antd";
  3. import {
  4. getApprovedState,
  5. getCuikuan,
  6. getjiedian,
  7. getLiquidationStatus,
  8. getProcessStatus,
  9. splitUrl
  10. } from "../../../tools";
  11. import ImgList from "../../../common/imgList";
  12. import $ from "jquery/src/ajax";
  13. import OrderRiZi from "@/orderRiZi.jsx";
  14. import ProjectDetailsReadOnly from "../../../common/projectDetailsReadOnly";
  15. import CustomerServiceRecord from './customerServiceRecord';
  16. import OrderItemStatus from "../../../common/orderItemStatus";
  17. import EnterpriseNameChange from "../../../common/enterpriseNameChange";
  18. import OrderCoor from "../../order/orderNew/changeComponent/orderCoor";
  19. import ContentUrl from "../../order/orderNew/contentUrl";
  20. const FormItem = Form.Item;
  21. const { TabPane } = Tabs;
  22. const formItemLayout = {
  23. labelCol: { span: 8 },
  24. wrapperCol: { span: 14 },
  25. };
  26. class FollowUpDetails extends Component {
  27. constructor(props) {
  28. super(props);
  29. this.state = {
  30. loading: false,
  31. columnsX: [
  32. {
  33. title: "业务项目名称",
  34. dataIndex: "commodityName",
  35. key: "commodityName",
  36. render: (text, record) => {
  37. return <span>{text}<span style={{ color: "red" }}>{record.patentTypeName}</span>{"-" + record.id}</span>
  38. }
  39. },
  40. {
  41. title: "项目类别",
  42. dataIndex: "cname",
  43. key: "cname",
  44. },
  45. {
  46. title: "项目数量",
  47. dataIndex: "commodityQuantity",
  48. key: "commodityQuantity",
  49. render: (text, record) => {
  50. if (record.splitStatus == 1) {
  51. return (
  52. <span>
  53. {text}{" "}
  54. <Tag
  55. color="#108ee9"
  56. onClick={(e) => {
  57. e.stopPropagation();
  58. this.showRes(record);
  59. }}
  60. >
  61. 已拆
  62. </Tag>
  63. </span>
  64. );
  65. } else {
  66. return text;
  67. }
  68. },
  69. },
  70. {
  71. title: "金额(万元)",
  72. dataIndex: "commodityPrice",
  73. key: "commodityPrice",
  74. },
  75. {
  76. title: "负责人",
  77. dataIndex: "contacts",
  78. key: "contacts",
  79. },
  80. {
  81. title: "负责人电话",
  82. dataIndex: "contactsMobile",
  83. key: "contactsMobile",
  84. },
  85. {
  86. title: "主要项目",
  87. dataIndex: "main",
  88. key: "main",
  89. render: (text) => {
  90. return text ? "是" : "否";
  91. },
  92. },
  93. {
  94. title: "项目说明",
  95. dataIndex: "taskComment",
  96. key: "taskComment",
  97. render: (text) => {
  98. return text && text.length > 8 ? text.substr(0, 8) + "…" : text;
  99. },
  100. },
  101. ],
  102. dataSourceX: [],
  103. contactList: [],
  104. ContactsListsNew: [
  105. {
  106. title: "项目名称",
  107. dataIndex: "commodityName",
  108. key: "commodityName",
  109. render: (text, record) => {
  110. return <span>{text + "-" + record.tid}</span>;
  111. },
  112. },
  113. {
  114. title: "项目分类",
  115. dataIndex: "projectType",
  116. key: "projectType",
  117. render: (text) => {
  118. let arr = this.state.dataSourceX || [];
  119. let str = "";
  120. for (let i = 0; i < arr.length; i++) {
  121. if (this.state.dataSourceX[i].sort == text) {
  122. str = this.state.dataSourceX[i].cname;
  123. return <span>{str}</span>;
  124. }
  125. }
  126. },
  127. },
  128. {
  129. title: "催款科目",
  130. dataIndex: "dunTypeName",
  131. key: "dunTypeName",
  132. render: (text, record) => {
  133. if (record.customizeName) {
  134. return text + record.customizeName;
  135. }
  136. return <span>{text}</span>;
  137. },
  138. },
  139. {
  140. title: "时间(天)",
  141. dataIndex: "waitDay",
  142. key: "waitDay",
  143. render: (text, record) => {
  144. if (record.dunTypeName) {
  145. if (record.customizeTimes) {
  146. return record.customizeTimes;
  147. }
  148. return <span>{text}</span>;
  149. }
  150. },
  151. },
  152. {
  153. title: "金额(万元)",
  154. dataIndex: "money",
  155. key: "money",
  156. render: (text, record) => {
  157. if (record.dunTypeName) {
  158. if (record.appropriationRatio) {
  159. let percent = Number(record.appropriationRatio * 100);
  160. percent += "%";
  161. return <span>{percent}(拨款比例)</span>;
  162. } else {
  163. return <span>{text}</span>;
  164. }
  165. }
  166. },
  167. },
  168. {
  169. title: "服务年限",
  170. dataIndex: "startDate",
  171. key: "startDate",
  172. render: (text, record) => {
  173. if (record.dunTypeName) {
  174. return <span>{text}</span>;
  175. }
  176. },
  177. },
  178. {
  179. title: "催款状态",
  180. dataIndex: "status",
  181. key: "status",
  182. render: (text) => {
  183. return <span>{text == 1 ? "已启动" : "未启动"}</span>;
  184. },
  185. },
  186. ],
  187. ContactsLists: [
  188. {
  189. title: "催款科目",
  190. dataIndex: "dunSubject",
  191. key: "dunSubject",
  192. render: (text) => {
  193. return getjiedian(text);
  194. },
  195. },
  196. {
  197. title: "金额(万元)",
  198. dataIndex: "money",
  199. key: "money",
  200. },
  201. {
  202. title: "催款状态",
  203. dataIndex: "dunStatus",
  204. key: "dunStatus",
  205. render: (text) => {
  206. return getCuikuan(text);
  207. },
  208. },
  209. ],
  210. tabsKey: '1',
  211. dataSourcerizhi: [],
  212. }
  213. this.jiedian = this.jiedian.bind(this);
  214. this.jiedianNew = this.jiedianNew.bind(this);
  215. this.xiangqing = this.xiangqing.bind(this);
  216. this.rizhi = this.rizhi.bind(this);
  217. this.closeOrderLog = this.closeOrderLog.bind(this);
  218. this.tableRowClickX = this.tableRowClickX.bind(this);
  219. this.nextCancel = this.nextCancel.bind(this);
  220. this.rizhi = this.rizhi.bind(this);
  221. this.getOrderLog = this.getOrderLog.bind(this);
  222. this.xiangmu = this.xiangmu.bind(this);
  223. }
  224. componentDidMount() {
  225. this.xiangqing();
  226. this.jiedian();
  227. this.jiedianNew();
  228. this.xiangmu();
  229. }
  230. getOrderLog() {
  231. this.setState({
  232. rizhivisible: true,
  233. });
  234. this.rizhi();
  235. }
  236. closeOrderLog() {
  237. this.setState({
  238. rizhivisible: false,
  239. dataSourcerizhi: [],
  240. });
  241. }
  242. tableRowClickX(record) {
  243. this.setState({
  244. addnextVisible: true,
  245. dataInfor: record,
  246. });
  247. }
  248. nextCancel() {
  249. this.setState({
  250. addnextVisible: false,
  251. dataInfor: {}
  252. });
  253. }
  254. rizhi() {
  255. this.setState({
  256. selectOrderLogLoading: true,
  257. });
  258. $.ajax({
  259. method: "get",
  260. dataType: "json",
  261. crossDomain: false,
  262. url: "/api/admin/newOrder/selectOrderLog",
  263. data: {
  264. orderNo: this.props.orderNo,
  265. },
  266. success: function (data) {
  267. let theArr = [];
  268. let thisData = data.data;
  269. if (!thisData.length) {
  270. if (data.error && data.error.length) {
  271. message.warning(data.error[0].message);
  272. }
  273. } else {
  274. for (let i = 0; i < data.data.length; i++) {
  275. let thisdata = data.data[i];
  276. theArr.push({
  277. processName: thisdata.processName,
  278. adminName: thisdata.adminName,
  279. createDate: thisdata.createDate,
  280. remarks: thisdata.remarks,
  281. });
  282. }
  283. }
  284. this.setState({
  285. dataSourcerizhi: theArr,
  286. });
  287. }.bind(this),
  288. }).always(
  289. function () {
  290. this.setState({
  291. selectOrderLogLoading: false,
  292. });
  293. }.bind(this)
  294. );
  295. }
  296. jiedian() {
  297. $.ajax({
  298. method: "get",
  299. dataType: "json",
  300. crossDomain: false,
  301. url: globalConfig.context + "/api/admin/newOrder/selectOrderDun",
  302. data: {
  303. orderNo: this.props.orderNo,
  304. },
  305. success: function (data) {
  306. let theArr = [];
  307. let thisData = [];
  308. if (data.error.length || data.data.list == "") {
  309. if (data.error && data.error.length) {
  310. message.warning(data.error[0].message);
  311. }
  312. } else {
  313. for (let i = 0; i < data.data.length; i++) {
  314. thisData = data.data[i];
  315. theArr.push({
  316. key: i,
  317. dunSubject: thisData.dunSubject
  318. ? thisData.dunSubject.toString()
  319. : "", //催款科目
  320. id: thisData.id, //节点Id
  321. money: thisData.money, //催款金额
  322. dunStatus: thisData.dunStatus, //催款状态
  323. });
  324. }
  325. this.setState({
  326. contactList: theArr,
  327. });
  328. }
  329. }.bind(this),
  330. }).always(
  331. function () {
  332. }.bind(this)
  333. );
  334. }
  335. //查看催款节点
  336. jiedianNew() {
  337. this.setState({
  338. newOrderDunLoading: true,
  339. });
  340. $.ajax({
  341. method: "get",
  342. dataType: "json",
  343. crossDomain: false,
  344. url:
  345. globalConfig.context + "/api/admin/newOrderDun/selectListNewOrderDun",
  346. data: {
  347. orderNo: this.props.orderNo,
  348. },
  349. success: function (data) {
  350. if (data.error && data.error.length) {
  351. message.warning(data.error[0].message);
  352. } else {
  353. let theArr = [];
  354. let thisData = [];
  355. let arr = data.data || [];
  356. let totalCui = 0;
  357. for (let i = 0; i < arr.length; i++) {
  358. thisData = arr[i];
  359. totalCui += +thisData.money;
  360. theArr.push({
  361. key: i,
  362. dunSubject: thisData.dunSubject
  363. ? thisData.dunSubject.toString()
  364. : "", //催款科目
  365. id: thisData.id, //节点Id
  366. money: thisData.money, //催款金额
  367. commodityName: thisData.commodityName,
  368. projectType: thisData.projectType,
  369. dunTypeName: thisData.dunTypeName,
  370. status: thisData.status,
  371. waitDay: thisData.waitDay,
  372. effectiveCount: thisData.effectiveCount,
  373. startDate: thisData.startDate,
  374. dunType: thisData.dunType,
  375. appropriationRatio: thisData.appropriationRatio,
  376. customizeName: thisData.customizeName,
  377. customizeTimes: thisData.customizeTimes,
  378. tid: thisData.tid,
  379. });
  380. }
  381. if (!totalCui) {
  382. totalCui = 0;
  383. }
  384. totalCui = (Math.round(totalCui * 1000000) / 1000000).toFixed(6);
  385. this.setState({
  386. contactListNew: theArr,
  387. totalCui,
  388. });
  389. }
  390. }.bind(this),
  391. }).always(
  392. function () {
  393. this.setState({
  394. newOrderDunLoading: false,
  395. });
  396. }.bind(this)
  397. );
  398. }
  399. xiangqing() {
  400. this.setState({
  401. loading: true,
  402. });
  403. $.ajax({
  404. method: "get",
  405. dataType: "json",
  406. crossDomain: false,
  407. url: globalConfig.context + "/api/admin/newOrder/getOrderNewDetail",
  408. data: {
  409. orderNo: this.props.orderNo,
  410. },
  411. success: function (data) {
  412. if (data.error.length || data.data.list == "") {
  413. if (data.error && data.error.length) {
  414. message.warning(data.error[0].message);
  415. }
  416. } else {
  417. let thisdata = data.data;
  418. this.setState({
  419. orderUid: thisdata.uid,
  420. orderNo: thisdata.orderNo, //订单编号
  421. contractNo: thisdata.contractNo, //合同编号
  422. userName: thisdata.userName, //客户名称
  423. signDate: thisdata.signDate, //签单时间
  424. processStatus: thisdata.processStatus, //流程状态
  425. liquidationStatus: thisdata.liquidationStatus, //结算状态
  426. contacts: thisdata.contacts, //企业联系人
  427. contactMobile: thisdata.contactMobile, //联系人电话
  428. legalPerson: thisdata.legalPerson, //法人
  429. legalPersonTel: thisdata.legalPersonTel, //法人电话
  430. firstAmount: thisdata.firstAmount, //签单金额
  431. totalAmount: thisdata.totalAmount, //首付金额
  432. approval: thisdata.approval, //特批状态
  433. settlementAmount: thisdata.settlementAmount, //已收款项
  434. orderRemarks: thisdata.orderRemarks, //订单留言
  435. orgCodeUrl: thisdata.contractPictureUrl
  436. ? splitUrl(
  437. thisdata.contractPictureUrl,
  438. ",",
  439. globalConfig.avatarHost + "/upload"
  440. )
  441. : [], //图片地址
  442. replenishUrl: thisdata.agreementUrl
  443. ? splitUrl(
  444. thisdata.agreementUrl,
  445. ",",
  446. globalConfig.avatarHost + "/upload"
  447. )
  448. : [], //图片地址
  449. contentUrl: thisdata.serviceContent
  450. ? splitUrl(
  451. thisdata.serviceContent,
  452. ",",
  453. globalConfig.avatarHost + "/upload"
  454. )
  455. : [], //图片地址
  456. salesmanName: thisdata.salesmanName, //营销员名称
  457. salesmanMobile: thisdata.salesmanMobile, //营销员电话
  458. oldSalesmanName: thisdata.oldSalesmanName, //营销员名称
  459. oldSalesmanMobile: thisdata.oldSalesmanMobile, //营销员电话
  460. financeName: thisdata.financeName, //财务名称
  461. financeMobile: thisdata.financeMobile, //财务电话
  462. nowFinance: thisdata.nowFinance, //财务名称
  463. nowFinanceMobile: thisdata.nowFinanceMobile, //财务电话
  464. depName: thisdata.depName,
  465. outsource: thisdata.outsource == 0 ? "否" : "是",
  466. deleteSign: thisdata.deleteSign,
  467. });
  468. }
  469. }.bind(this),
  470. }).always(
  471. function () {
  472. this.setState({
  473. loading: false,
  474. });
  475. }.bind(this)
  476. );
  477. }
  478. xiangmu() {
  479. this.setState({
  480. orderTaskLoading: true
  481. })
  482. $.ajax({
  483. method: "get",
  484. dataType: "json",
  485. crossDomain: false,
  486. url: globalConfig.context + "/api/admin/newOrder/getOrderTask",
  487. data: {
  488. orderNo: this.props.orderNo,
  489. },
  490. success: function (data) {
  491. let theArr = [];
  492. if (data.error.length || data.data.list == "") {
  493. if (data.error && data.error.length) {
  494. message.warning(data.error[0].message);
  495. }
  496. } else {
  497. for (let i = 0; i < data.data.length; i++) {
  498. let thisdata = data.data[i];
  499. thisdata.key = i;
  500. theArr.push(thisdata);
  501. }
  502. this.setState({
  503. dataSourceX: theArr,
  504. });
  505. }
  506. }.bind(this),
  507. }).always(
  508. function () {
  509. this.setState({
  510. orderTaskLoading: false,
  511. });
  512. }.bind(this)
  513. );
  514. }
  515. render() {
  516. return (
  517. <Modal
  518. className="customeDetails"
  519. footer=""
  520. title={null}
  521. width="1200px"
  522. maskClosable={false}
  523. visible={this.props.visible}
  524. onOk={this.props.onCancel}
  525. onCancel={this.props.onCancel}
  526. >
  527. <div>
  528. <Tabs
  529. defaultActiveKey="1"
  530. className="test"
  531. activeKey={this.state.tabsKey}
  532. onChange={(e) => { this.setState({ tabsKey: e }) }}
  533. tabBarExtraContent={
  534. <div style={{ fontWeight: 'bold', paddingRight: '15px' }}>
  535. <OrderItemStatus deleteSign={this.state.deleteSign} />
  536. </div>
  537. }
  538. >
  539. <TabPane tab="订单详情" key="1">
  540. <Form
  541. layout="horizontal"
  542. id="demand-form"
  543. style={{ paddingBottom: "40px" }}
  544. >
  545. <Spin spinning={this.state.loading}>
  546. <div className="clearfix">
  547. <FormItem
  548. className="half-item"
  549. {...formItemLayout}
  550. label="订单编号"
  551. >
  552. <span>{this.state.orderNo}</span>
  553. </FormItem>
  554. <FormItem
  555. className="half-item"
  556. {...formItemLayout}
  557. label="合同编号"
  558. >
  559. <span>{this.state.contractNo}</span>
  560. </FormItem>
  561. <FormItem
  562. className="half-item"
  563. {...formItemLayout}
  564. label="客户名称"
  565. >
  566. <span>{this.state.userName}</span>
  567. <EnterpriseNameChange
  568. type='journal'
  569. style={{ marginLeft: 10 }}
  570. enterpriseId={this.state.orderUid} />
  571. </FormItem>
  572. <FormItem
  573. className="half-item"
  574. {...formItemLayout}
  575. label="下单时间"
  576. >
  577. <span>{this.state.signDate}</span>
  578. </FormItem>
  579. <FormItem
  580. className="half-item"
  581. {...formItemLayout}
  582. label="流程状态"
  583. >
  584. <span>{getProcessStatus(this.state.processStatus)}</span>
  585. </FormItem>
  586. <FormItem
  587. className="half-item"
  588. {...formItemLayout}
  589. label="结算状态"
  590. >
  591. <span>
  592. {getLiquidationStatus(this.state.liquidationStatus)}
  593. </span>
  594. </FormItem>
  595. <FormItem
  596. className="half-item"
  597. {...formItemLayout}
  598. label="企业联系人"
  599. >
  600. <span>{this.state.contacts}</span>
  601. </FormItem>
  602. <FormItem
  603. className="half-item"
  604. {...formItemLayout}
  605. label="联系人电话"
  606. >
  607. <span>{this.state.contactMobile}</span>
  608. </FormItem>
  609. <FormItem
  610. className="half-item"
  611. {...formItemLayout}
  612. label="企业法人"
  613. >
  614. <span>{this.state.legalPerson}</span>
  615. </FormItem>
  616. <FormItem
  617. className="half-item"
  618. {...formItemLayout}
  619. label="法人电话"
  620. >
  621. <span>{this.state.legalPersonTel}</span>
  622. </FormItem>
  623. <FormItem
  624. className="half-item"
  625. {...formItemLayout}
  626. label="签单金额(万元)"
  627. >
  628. <span>{this.state.totalAmount}</span>
  629. </FormItem>
  630. <FormItem
  631. className="half-item"
  632. {...formItemLayout}
  633. label="首付金额(万元)"
  634. >
  635. <span>{this.state.firstAmount}</span>
  636. </FormItem>
  637. <FormItem
  638. className="half-item"
  639. {...formItemLayout}
  640. label="特批立项"
  641. >
  642. <span>{getApprovedState(this.state.approval)}</span>
  643. </FormItem>
  644. <FormItem
  645. className="half-item"
  646. {...formItemLayout}
  647. label="已收款项(万元)"
  648. >
  649. <span>{this.state.settlementAmount}</span>
  650. </FormItem>
  651. <FormItem
  652. className="half-item"
  653. {...formItemLayout}
  654. label="订单部门"
  655. >
  656. <span>{this.state.depName}</span>
  657. </FormItem>
  658. <FormItem
  659. className="half-item"
  660. {...formItemLayout}
  661. label="是否外包"
  662. >
  663. {this.state.outsource}
  664. </FormItem>
  665. <div className="clearfix">
  666. <FormItem
  667. labelCol={{ span: 4 }}
  668. wrapperCol={{ span: 16 }}
  669. label="订单留言"
  670. >
  671. <span>{this.state.orderRemarks}</span>
  672. </FormItem>
  673. </div>
  674. <div className="clearfix">
  675. <FormItem
  676. labelCol={{ span: 4 }}
  677. wrapperCol={{ span: 18 }}
  678. label={"合同扫描件"}
  679. >
  680. <div style={{ paddingTop: '10px', paddingBottom: '10px' }}>
  681. {this.props.visible && this.state.orgCodeUrl ? <ImgList fileList={this.state.orgCodeUrl} ItemWidth={'96px'} /> : <div />}
  682. </div>
  683. <Button
  684. style={{
  685. float: "right",
  686. marginRight: "140px",
  687. marginTop: "20px",
  688. }}
  689. onClick={this.getOrderLog}
  690. >
  691. 查看订单 日志
  692. </Button>
  693. </FormItem>
  694. <FormItem
  695. labelCol={{ span: 4 }}
  696. wrapperCol={{ span: 18 }}
  697. label="补充协议"
  698. >
  699. <div style={{ paddingTop: '10px', paddingBottom: '10px' }}>
  700. {this.props.visible && this.state.replenishUrl ? <ImgList domId={'inquiry1'} fileList={this.state.replenishUrl} ItemWidth={'96px'} /> : <div />}
  701. </div>
  702. </FormItem>
  703. </div>
  704. <ContentUrl
  705. processStatus={1}
  706. domId={"followContent"}
  707. contentUrl={this.state.contentUrl}
  708. imgId={"followContentImg"}
  709. />
  710. <div className="clearfix">
  711. <FormItem
  712. className="half-item"
  713. {...formItemLayout}
  714. label="订单负责人"
  715. >
  716. <span>{this.state.salesmanName}</span>
  717. </FormItem>
  718. <FormItem
  719. className="half-item"
  720. {...formItemLayout}
  721. label="订单负责人电话"
  722. >
  723. <span>{this.state.salesmanMobile}</span>
  724. </FormItem>
  725. </div>
  726. <div className="clearfix">
  727. <FormItem
  728. className="half-item"
  729. {...formItemLayout}
  730. label="当前财务负责人"
  731. >
  732. <span>{this.state.nowFinance}</span>
  733. </FormItem>
  734. <FormItem
  735. className="half-item"
  736. {...formItemLayout}
  737. label="当前财务负责人电话"
  738. >
  739. <span>{this.state.nowFinanceMobile}</span>
  740. </FormItem>
  741. </div>
  742. <div className="clearfix">
  743. <FormItem
  744. className="half-item"
  745. {...formItemLayout}
  746. style={{ opacity: ".5" }}
  747. label="原订单负责人"
  748. >
  749. <span>{this.state.oldSalesmanName}</span>
  750. </FormItem>
  751. <FormItem
  752. className="half-item"
  753. {...formItemLayout}
  754. style={{ opacity: ".5" }}
  755. label="原订单负责人电话"
  756. >
  757. <span>{this.state.oldSalesmanMobile}</span>
  758. </FormItem>
  759. </div>
  760. <div className="clearfix">
  761. <FormItem
  762. className="half-item"
  763. style={{ opacity: ".5" }}
  764. {...formItemLayout}
  765. label="实际财务操作人"
  766. >
  767. <span>{this.state.financeName}</span>
  768. </FormItem>
  769. <FormItem
  770. className="half-item"
  771. {...formItemLayout}
  772. style={{ opacity: ".5" }}
  773. label="实际财务操作人电话"
  774. >
  775. <span>{this.state.financeMobile}</span>
  776. </FormItem>
  777. </div>
  778. {/* 协作人员 */}
  779. <OrderCoor orderNo={this.props.orderNo} />
  780. <div>
  781. <span style={{ marginLeft: "50px", fontSize: "20px" }}>
  782. 项目业务
  783. </span>
  784. </div>
  785. <div className="patent-table">
  786. <Spin spinning={this.state.orderTaskLoading}>
  787. <Table
  788. columns={this.state.columnsX}
  789. dataSource={this.state.dataSourceX}
  790. pagination={false}
  791. onRowClick={this.tableRowClickX}
  792. bordered
  793. size="small"
  794. />
  795. </Spin>
  796. </div>
  797. <div>
  798. <span style={{ marginLeft: "50px", fontSize: "20px" }}>
  799. 催款节点
  800. </span>
  801. <span
  802. style={{
  803. display: this.state.contactList.length ? "none" : "inline-block",
  804. marginLeft: 10,
  805. color: "red",
  806. }}
  807. >
  808. 金额总计(万元): {this.state.totalCui}
  809. </span>
  810. </div>
  811. <div className="clearfix">
  812. <Spin spinning={this.state.newOrderDunLoading}>
  813. <Form layout="horizontal" id="demand-form">
  814. <Table
  815. pagination={false}
  816. bordered
  817. size="small"
  818. columns={
  819. this.state.ContactsListsNew
  820. }
  821. dataSource={
  822. this.state.contactListNew
  823. }
  824. />
  825. <Col
  826. span={24}
  827. offset={9}
  828. style={{ marginTop: "15px" }}
  829. />
  830. </Form>
  831. </Spin>
  832. </div>
  833. </div>
  834. </Spin>
  835. </Form>
  836. </TabPane>
  837. <TabPane tab="客服跟进详情" key="2">
  838. {this.state.tabsKey === '2' ? <CustomerServiceRecord
  839. orderNo={this.props.orderNo}
  840. uid={this.props.uid}
  841. /> : ''}
  842. </TabPane>
  843. </Tabs>
  844. <OrderRiZi
  845. dataSourcerizhi={this.state.dataSourcerizhi}
  846. closeOrderLog={this.closeOrderLog}
  847. visible={this.state.rizhivisible}
  848. loading={this.state.selectOrderLogLoading}
  849. />
  850. {this.state.addnextVisible && <ProjectDetailsReadOnly
  851. infor={this.state.dataInfor}
  852. visible={this.state.addnextVisible}
  853. onCancel={this.nextCancel}
  854. />}
  855. </div>
  856. </Modal>
  857. )
  858. }
  859. }
  860. export default FollowUpDetails;