followUpDetails.jsx 40 KB

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