clue.jsx 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937
  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. DatePicker,
  14. AutoComplete,
  15. Modal,
  16. Upload,
  17. Icon,
  18. Tooltip,
  19. Tag,
  20. } from "antd";
  21. import { ChooseList } from "../../../order/orderNew/chooseList";
  22. import { ShowModal, } from "@/tools.js"
  23. import { accountType, accountStatus } from "@/dataDic";
  24. import ZhuanjiaoDetail from "@/zhuanjiaoDetail.jsx";
  25. import IntentionDetail from "./intentionDetail/intentionDetail";
  26. import ShowModalDiv from "@/showModal.jsx";
  27. import FollowDetail from "./followDetail"
  28. import Outbound from '../components/outbound';
  29. import './clue.less';
  30. const FormItem = Form.Item;
  31. const { RangePicker } = DatePicker;
  32. const { TabPane } = Tabs;
  33. const LimitedProject = React.createClass({
  34. getInitialState() {
  35. return {
  36. searchValues: {
  37. clueProcess: this.props.intentionState == 1 ? "0" : ""
  38. }, // 列表筛选条件
  39. loading: false, //加载动画
  40. changeList: undefined, // 更改后的表格显示数据
  41. dataSource: [], // 列表数据
  42. fjlist: [],
  43. pagination: {
  44. defaultCurrent: 1,
  45. defaultPageSize: 10,
  46. showQuickJumper: true,
  47. pageSize: 10,
  48. onChange: function (page) {
  49. this.loadData(page);
  50. }.bind(this),
  51. showTotal: function (total) {
  52. return "共" + total + "条数据";
  53. },
  54. },
  55. columns: [
  56. {
  57. title: "客户名称",
  58. dataIndex: "nickname",
  59. key: "nickname",
  60. width: 300,
  61. },
  62. {
  63. title: "联系人",
  64. dataIndex: "contacts",
  65. key: "contacts",
  66. },
  67. {
  68. title: "联系电话",
  69. dataIndex: "contactMobile",
  70. key: "contactMobile",
  71. },
  72. {
  73. title: "所属人",
  74. dataIndex: "adminName",
  75. key: "adminName",
  76. isSelect: "jl",
  77. },
  78. {
  79. title: "转交人",
  80. dataIndex: "clueAname",
  81. key: "clueAname",
  82. isSelect: "yxy",
  83. },
  84. {
  85. title: "状态",
  86. dataIndex: "clueProcess",
  87. key: "clueProcess",
  88. render: (text, record) => {
  89. return (
  90. <div style={{ color: ["green", "", "red", "", ""][text] }}>
  91. {["待分配", "已分配", "已回退", "已释放", "已领取"][text]}
  92. </div>
  93. );
  94. },
  95. },
  96. {
  97. title: "线索释放天数",
  98. dataIndex: "days",
  99. key: "days",
  100. },
  101. {
  102. title: "转入时间",
  103. dataIndex: "clueTransferTime",
  104. key: "clueTransferTime",
  105. render: (text, record) => {
  106. return (
  107. <div>
  108. {text}
  109. </div>
  110. );
  111. },
  112. },
  113. {
  114. title: "操作",
  115. dataIndex: "op",
  116. key: "op",
  117. render: (text, record) => {
  118. return (
  119. <div>
  120. <Outbound
  121. type="private"
  122. noTransfer={true}
  123. uid={record.id}
  124. isOwn={1}
  125. />
  126. {
  127. ((record.clueProcess == 1 && this.props.intentionState == 2) ||
  128. ((record.clueProcess == 0 || record.clueProcess == 2) && this.props.intentionState == 1)
  129. ) &&
  130. <Button
  131. style={{ marginLeft: 10 }}
  132. type="primary"
  133. onClick={(e) => {
  134. let _this = this;
  135. Modal.confirm({
  136. title: "提示",
  137. content: (
  138. <span style={{ color: "red" }}>
  139. 确定将此客户领取至私有库吗?
  140. <div style={{ marginTop: "5px", color: "#000" }}>
  141. {record.nickname}
  142. </div>
  143. </span>
  144. ),
  145. onOk() {
  146. _this.changeAssigner(3, record.id)
  147. },
  148. onCancel() { },
  149. });
  150. }}
  151. >
  152. 领取
  153. </Button>
  154. }
  155. {this.props.intentionState == 2 &&
  156. <Button
  157. style={{ marginLeft: 10 }}
  158. type="primary"
  159. onClick={(e) => {
  160. let _this = this;
  161. Modal.confirm({
  162. title: "提示",
  163. content: (
  164. <span style={{ color: "red" }}>
  165. 确定将此客户退回吗?
  166. <div style={{ marginTop: "5px", color: "#000" }}>
  167. {record.nickname}
  168. </div>
  169. </span>
  170. ),
  171. onOk() {
  172. _this.changeAssigner(1, record.id)
  173. },
  174. onCancel() { },
  175. });
  176. }}
  177. >
  178. 回退
  179. </Button>}
  180. <Button
  181. style={{ marginLeft: 10 }}
  182. type="primary"
  183. onClick={(e) => {
  184. e.stopPropagation();
  185. this.zhuanjiaoDetail(record);
  186. }}
  187. >
  188. 记录
  189. </Button>
  190. </div>
  191. );
  192. },
  193. },
  194. ],
  195. customerArr: [],
  196. selectedRowKeys: [],
  197. selectedRows: [],
  198. zhuanjiaoVisible: false,
  199. categoryArr: [],
  200. upLoad: {
  201. customRequest: (options) => {
  202. this.setState({
  203. upLoadFileLoading: true,
  204. })
  205. let params = new FormData();
  206. params.append("file", options.file);
  207. $.ajax({
  208. method: "post",
  209. url: globalConfig.context + "/api/admin/userClue/import",
  210. async: true,
  211. cache: false,
  212. contentType: false,
  213. processData: false,
  214. data: params
  215. }).done(
  216. function (data) {
  217. this.setState({
  218. upLoadFileLoading: false,
  219. })
  220. if (data.error.length === 0) {
  221. if (data.data.errorCount == 0) {
  222. message.success("上传成功!");
  223. } else {
  224. Modal.info({
  225. title: "提示",
  226. width: 500,
  227. content: (
  228. <span>
  229. {data.data.errorCount}个客户信息导入失败!
  230. <div style={{ color: "red" }} dangerouslySetInnerHTML={{ __html: data.data.msg }} />
  231. </span>
  232. ),
  233. onOk() { },
  234. });
  235. }
  236. this.loadData();
  237. } else {
  238. message.warning(data.error[0].message);
  239. this.loadData();
  240. }
  241. }.bind(this)
  242. ).always(
  243. function () {
  244. this.loadData();
  245. this.setState({
  246. upLoadFileLoading: false,
  247. });
  248. }.bind(this)
  249. );
  250. },
  251. name: "file",
  252. action: globalConfig.context + "/api/admin/userClue/import",
  253. showUploadList: false,
  254. },
  255. status: this.props.intentionState,
  256. };
  257. },
  258. componentWillMount() {
  259. this.defaultcolumns()
  260. },
  261. defaultcolumns() {
  262. const newArr = [];
  263. this.state.columns.forEach((item) => {
  264. if (this.props.intentionState == 1) {
  265. if (item.isSelect == "yxy") {
  266. return
  267. } else {
  268. newArr.push(item);
  269. }
  270. } else if (this.props.intentionState == 2) {
  271. if (item.isSelect == "jl") {
  272. return
  273. } else {
  274. newArr.push(item);
  275. }
  276. }
  277. });
  278. this.setState({
  279. changeList: newArr,
  280. }, () => {
  281. this.loadData();
  282. });
  283. },
  284. componentWillReceiveProps(prevProps) {
  285. if (prevProps.intentionState !== this.state.status) {
  286. this.setState({
  287. status: prevProps.intentionState
  288. }, () => {
  289. this.defaultcolumns()
  290. })
  291. }
  292. },
  293. // 列表接口
  294. loadData(pageNo) {
  295. const { searchValues, pagination } = this.state;
  296. this.setState({
  297. loading: true,
  298. });
  299. let datas = Object.assign(searchValues, {
  300. pageNo: pageNo || 1,
  301. pageSize: pagination.pageSize,
  302. shiroType: this.props.intentionState,
  303. });
  304. $.ajax({
  305. method: "get",
  306. dataType: "json",
  307. crossDomain: false,
  308. url: globalConfig.context + "/api/admin/userClue/list",
  309. data: datas,
  310. success: function (data) {
  311. ShowModal(this);
  312. this.setState({
  313. loading: false,
  314. });
  315. let theArr = [];
  316. if (data.error && data.error.length === 0) {
  317. if (data.data) {
  318. pagination.current = data.data.pageNo;
  319. pagination.total = data.data.totalCount;
  320. if (data.data && data.data.list && !data.data.list.length) {
  321. pagination.current = 0
  322. pagination.total = 0
  323. };
  324. this.setState({
  325. dataSource: data.data.list,
  326. pagination: this.state.pagination,
  327. pageNo: data.data.pageNo,
  328. });
  329. }
  330. } else {
  331. message.warning(data.error[0].message);
  332. }
  333. }.bind(this),
  334. }).always(
  335. function () {
  336. this.setState({
  337. loading: false,
  338. });
  339. }.bind(this)
  340. );
  341. },
  342. // 搜索
  343. search() {
  344. this.loadData();
  345. },
  346. // 重置
  347. reset() {
  348. this.setState({
  349. searchValues: {
  350. clueProcess: this.props.intentionState == 1 ? "0" : ""
  351. },
  352. }, () => {
  353. this.defaultcolumns();
  354. })
  355. },
  356. changeList(arr) {
  357. const newArr = [];
  358. this.state.columns.forEach((item) => {
  359. arr.forEach((val) => {
  360. if (val === item.title) {
  361. newArr.push(item);
  362. }
  363. });
  364. });
  365. this.setState({
  366. changeList: newArr,
  367. });
  368. },
  369. supervisor(e) {
  370. $.ajax({
  371. method: "get",
  372. dataType: "json",
  373. crossDomain: false,
  374. url: globalConfig.context + "/api/admin/customer/listAdminByName",
  375. data: {
  376. adminName: e,
  377. },
  378. success: function (data) {
  379. let thedata = data.data;
  380. if (!thedata) {
  381. if (data.error && data.error.length) {
  382. message.warning(data.error[0].message);
  383. }
  384. thedata = {};
  385. }
  386. this.setState({
  387. customerArr: thedata,
  388. });
  389. }.bind(this),
  390. }).always(
  391. function () {
  392. this.setState({
  393. loading: false,
  394. });
  395. }.bind(this)
  396. );
  397. },
  398. selectAuto(value, options) {
  399. this.setState({
  400. auto: value,
  401. });
  402. },
  403. blurChange(e) {
  404. let theType = "";
  405. let contactLists = this.state.customerArr || [];
  406. if (e) {
  407. contactLists.map(function (item) {
  408. if (item.name == e.toString()) {
  409. theType = item.id;
  410. }
  411. });
  412. }
  413. this.setState({
  414. theTypes: theType,
  415. });
  416. },
  417. httpChange(e) {
  418. if (e.length >= 1) {
  419. this.supervisor(e);
  420. }
  421. this.setState({
  422. auto: e,
  423. });
  424. },
  425. showConfirm() {
  426. let _this = this;
  427. Modal.confirm({
  428. title: "提示",
  429. content: (
  430. <span style={{ color: "red" }}>
  431. 确定要转交以下客户吗?
  432. {this.state.selectedRows.map((value, index) => (
  433. <div key={index} style={{ marginTop: "5px", color: "#000" }}>
  434. {value.nickname}
  435. </div>
  436. ))}
  437. </span>
  438. ),
  439. onOk() {
  440. _this.changeAssigner(0)
  441. },
  442. onCancel() { },
  443. });
  444. },
  445. showConfirms() {
  446. let _this = this;
  447. Modal.confirm({
  448. title: "您确定将以下客户移至公共库吗?",
  449. content: (
  450. <span style={{ color: "red" }}>
  451. 移除后,以下客户将被别人领取!
  452. {this.state.selectedRows.map((value, index) => (
  453. <div key={index} style={{ marginTop: "5px", color: "#000" }}>
  454. {value.nickname}
  455. </div>
  456. ))}
  457. </span>
  458. ),
  459. onOk() {
  460. _this.changeAssigner(2);
  461. },
  462. onCancel() { },
  463. });
  464. },
  465. // 批量转交,移至公共库
  466. changeAssigner(type, uid) {
  467. const _this = this;
  468. if (type == 0 && !this.state.theTypes) {
  469. message.warning("请输入转交人姓名");
  470. return
  471. }
  472. let changeIds = "";
  473. if (type == 0 || type == 2) {
  474. for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
  475. let rowItem = this.state.selectedRows[idx];
  476. if (rowItem.id) {
  477. changeIds =
  478. this.state.selectedRows.length - 1 === idx
  479. ? changeIds + rowItem.id
  480. : changeIds + rowItem.id + ",";
  481. }
  482. }
  483. } else if (type == 1 || type == 3) {
  484. changeIds = uid
  485. }
  486. let loading = message.loading("加载中...");
  487. $.ajax({
  488. method: "post",
  489. dataType: "json",
  490. crossDomain: false,
  491. url: globalConfig.context + "/api/admin/userClue/transfer",
  492. data: {
  493. uid: changeIds,
  494. type,
  495. transferId: type == 0 ? this.state.theTypes : undefined,
  496. },
  497. }).done(
  498. function (data) {
  499. loading();
  500. this.setState({
  501. selList: [],
  502. })
  503. if (!data.error.length) {
  504. this.setState({
  505. auto: "",
  506. loading: false,
  507. selectedRowKeys: [],
  508. });
  509. if (data.data == 1) {
  510. message.success(["转交成功!", "退回成功!", "成功移至公共库!", "领取成功!"][type]);
  511. _this.loadData();
  512. } else {
  513. data.data.forEach(function (e) { message.warning(e) })
  514. }
  515. } else {
  516. message.warning(data.error[0].message);
  517. }
  518. }.bind(this)
  519. );
  520. },
  521. zhuanjiaoDetail(record) {
  522. this.setState({
  523. zhuanjiaoVisible: true,
  524. zhuanjiaoId: record.id,
  525. });
  526. },
  527. zhuanjiaoDetailCancel() {
  528. this.setState({
  529. zhuanjiaoVisible: false,
  530. });
  531. },
  532. tableRowClick(record, index) {
  533. this.state.visitModul = false;
  534. this.setState({
  535. modalVisible: true,
  536. basicState: true,
  537. contactState: true,
  538. modalName: record.name,
  539. RowData: record,
  540. });
  541. },
  542. closeDesc(e, s) {
  543. this.state.basicState = e;
  544. this.state.visitModul = e;
  545. this.state.modalVisible = e;
  546. this.state.visitModuls = e;
  547. this.state.showDesc = e;
  548. this.setState({
  549. tabsKey: "",
  550. });
  551. if (s) {
  552. this.loadData(this.state.ispage);
  553. }
  554. },
  555. //查看跟进记录列表
  556. loadVisit(pageNo) {
  557. this.setState({
  558. loading: true
  559. });
  560. $.ajax({
  561. method: "get",
  562. dataType: "json",
  563. crossDomain: false,
  564. url: globalConfig.context + '/api/admin/customer/listFollowHistory',
  565. data: {
  566. pageNo: pageNo || 1,
  567. pageSize: this.state.paginations.pageSize,
  568. uid: this.state.RowData.id, //名称1
  569. },
  570. success: function (data) {
  571. let theArr = [];
  572. if (data.error.length || data.data.list == "") {
  573. if (data.error && data.error.length) {
  574. message.warning(data.error[0].message);
  575. };
  576. } else {
  577. for (let i = 0; i < data.data.list.length; i++) {
  578. let thisdata = data.data.list[i];
  579. theArr.push(thisdata);
  580. };
  581. this.state.paginations.current = data.data.pageNo;
  582. this.state.paginations.total = data.data.totalCount;
  583. this.setState({
  584. ispage: data.data.pageNo
  585. })
  586. };
  587. if (data.data.list && !data.data.list.length) {
  588. this.state.paginations.current = 0;
  589. this.state.paginations.total = 0;
  590. };
  591. this.setState({
  592. visitArrList: theArr,
  593. paginations: this.state.paginations
  594. });
  595. }.bind(this),
  596. }).always(function () {
  597. this.setState({
  598. loading: false
  599. });
  600. }.bind(this));
  601. },
  602. // 模版下载
  603. exportExec() {
  604. message.config({
  605. duration: 20,
  606. });
  607. let loading = message.loading("下载中...");
  608. this.setState({
  609. exportPendingLoading: true,
  610. });
  611. $.ajax({
  612. method: "get",
  613. dataType: "json",
  614. crossDomain: false,
  615. url: globalConfig.context + "/api/admin/userClue/exportTemplate",
  616. success: function (data) {
  617. if (data.error.length === 0) {
  618. this.download(data.data);
  619. } else {
  620. message.warning(data.error[0].message);
  621. }
  622. }.bind(this),
  623. }).always(
  624. function () {
  625. loading();
  626. this.setState({
  627. exportPendingLoading: false,
  628. });
  629. }.bind(this)
  630. );
  631. },
  632. download(fileName) {
  633. window.location.href =
  634. globalConfig.context + "/open/download?fileName=" + fileName + "&delete=false";
  635. },
  636. followUp(e) {
  637. const { searchValues } = this.state;
  638. this.setState({
  639. searchValues: Object.assign(searchValues, {
  640. belongname: e,
  641. }),
  642. });
  643. $.ajax({
  644. method: "get",
  645. dataType: "json",
  646. crossDomain: false,
  647. url: globalConfig.context + "/api/admin/customer/listAdminByName",
  648. data: {
  649. adminName: e,
  650. },
  651. success: function (data) {
  652. let thedata = data.data;
  653. if (!thedata) {
  654. if (data.error && data.error.length) {
  655. message.warning(data.error[0].message);
  656. }
  657. thedata = {};
  658. }
  659. this.setState({
  660. fjlist: thedata,
  661. });
  662. }.bind(this),
  663. }).always(
  664. function () {
  665. this.setState({
  666. loading: false,
  667. });
  668. }.bind(this)
  669. );
  670. },
  671. selectF(value) {
  672. const { searchValues, fjlist } = this.state;
  673. const newdataSources = JSON.stringify(fjlist) == "{}" ? [] : fjlist;
  674. this.setState({
  675. searchValues: Object.assign(searchValues, {
  676. belongName: newdataSources.find((item) => item.name == value).id,
  677. }),
  678. });
  679. },
  680. render() {
  681. const { searchValues, } = this.state
  682. const rowSelection = {
  683. selectedRowKeys: this.state.selectedRowKeys,
  684. onChange: (selectedRowKeys, selectedRows) => {
  685. this.setState({
  686. modalVisible: false,
  687. selectedRows: selectedRows,
  688. selectedRowKeys: selectedRowKeys,
  689. });
  690. },
  691. onSelect: (recordt, selected, selectedRows) => {
  692. this.setState({
  693. modalVisible: false,
  694. });
  695. },
  696. };
  697. const hasSelected = this.state.selectedRowKeys.length > 0;
  698. const dataSources = this.state.customerArr || [];
  699. const options = dataSources.map((group) => (
  700. <Select.Option key={group.id} value={group.name}>
  701. {group.name}
  702. </Select.Option>
  703. ));
  704. const newdataSources =
  705. JSON.stringify(this.state.fjlist) == "{}" ? [] : this.state.fjlist;
  706. const newoptions = newdataSources.map((group) => (
  707. <Select.Option key={group.id} value={group.name}>
  708. {group.name}
  709. </Select.Option>
  710. ));
  711. return (
  712. <div className="user-content clue">
  713. <ShowModalDiv ShowModal={this.state.showModal} onClose={() => { this.setState({ showModal: false }) }} />
  714. <div className="content-title" style={{ marginBottom: 10 }}>
  715. <span style={{ fontWeight: 900, fontSize: 16 }}>线索客户</span>
  716. </div>
  717. <div className="user-search">
  718. <Tabs defaultActiveKey="1" className="test">
  719. <TabPane tab="搜索" key="1">
  720. <div className="user-search" style={{ marginLeft: 10 }}>
  721. <Input
  722. placeholder="客户名称"
  723. value={searchValues["userName"]
  724. ? searchValues["userName"]
  725. : ""}
  726. onChange={(e) => {
  727. searchValues["userName"] = e.target.value;
  728. this.setState({
  729. searchValues: searchValues,
  730. });
  731. }}
  732. />
  733. <AutoComplete
  734. className="certain-category-search"
  735. dropdownClassName="certain-category-search-dropdown"
  736. dropdownMatchSelectWidth={false}
  737. style={{ width: "150px" }}
  738. dataSource={newoptions}
  739. placeholder="所属人"
  740. value={searchValues["belongname"] || undefined}
  741. onChange={this.followUp.bind(this)}
  742. filterOption={true}
  743. onSelect={this.selectF.bind(this)}
  744. >
  745. <Input />
  746. </AutoComplete>
  747. <Select
  748. style={{ width: 140 }}
  749. placeholder=""
  750. value={searchValues["clueProcess"]
  751. ? searchValues["clueProcess"]
  752. : ""}
  753. onChange={(e) => {
  754. searchValues["clueProcess"] = e;
  755. this.setState({
  756. searchValues: searchValues,
  757. });
  758. }}
  759. >
  760. <Option value="">全部</Option>
  761. <Option value="0">待分配</Option>
  762. <Option value="1">已分配</Option>
  763. <Option value="2">已回退</Option>
  764. <Option value="3">已移除</Option>
  765. <Option value="4">已领取</Option>
  766. </Select>
  767. <RangePicker
  768. style={{ width: 300 }}
  769. value={[
  770. searchValues.startTime ? moment(searchValues.startTime) : null,
  771. searchValues.endTime ? moment(searchValues.endTime) : null,
  772. ]}
  773. onChange={(data, dataString) => {
  774. this.setState({
  775. searchValues: Object.assign(searchValues, {
  776. startTime: dataString[0],
  777. endTime: dataString[1],
  778. }),
  779. });
  780. }}
  781. />
  782. <Button
  783. type="primary"
  784. onClick={this.search}
  785. style={{ margin: "0 10px" }}
  786. >搜索</Button>
  787. <Button onClick={this.reset}>重置</Button>
  788. </div>
  789. </TabPane>
  790. <TabPane tab="更改表格显示数据" key="2">
  791. <div style={{ marginLeft: 10 }}>
  792. <ChooseList
  793. columns={this.state.columns}
  794. changeFn={this.changeList}
  795. changeList={this.state.changeList}
  796. top={55}
  797. margin={11}
  798. />
  799. </div>
  800. </TabPane>
  801. {this.props.intentionState == 1
  802. ? <TabPane tab="操作" key="3">
  803. <div className="user-search" >
  804. <AutoComplete
  805. className="certain-category-search"
  806. dropdownClassName="certain-category-search-dropdown"
  807. dropdownMatchSelectWidth={false}
  808. style={{ width: "120px" }}
  809. dataSource={options}
  810. placeholder="输入转交人姓名"
  811. value={this.state.auto}
  812. onChange={this.httpChange}
  813. filterOption={true}
  814. onBlur={this.blurChange}
  815. onSelect={this.selectAuto}
  816. disabled={!hasSelected}
  817. >
  818. <Input />
  819. </AutoComplete>
  820. <Button
  821. type="primary"
  822. onClick={(e) => {
  823. e.stopPropagation();
  824. this.showConfirm();
  825. }}
  826. disabled={!hasSelected}
  827. style={{ marginRight: 10 }}
  828. >
  829. 批量转交
  830. </Button>
  831. <Button
  832. style={{ marginLeft: 10 }}
  833. onClick={(e) => {
  834. e.stopPropagation();
  835. this.showConfirms();
  836. }}
  837. type="primary"
  838. disabled={!hasSelected}
  839. >
  840. 批量移至公共库
  841. </Button>
  842. <Upload {...this.state.upLoad} disabled={this.state.upLoadFileLoading}>
  843. <Button
  844. loading={this.state.upLoadFileLoading}
  845. type="primary"
  846. style={{ marginLeft: 10 }}
  847. >
  848. 批量上传
  849. </Button>
  850. </Upload>
  851. <Button
  852. style={{ marginLeft: 10 }}
  853. onClick={(e) => {
  854. this.exportExec()
  855. }}
  856. type="primary"
  857. >
  858. 下载模板
  859. </Button>
  860. </div>
  861. </TabPane> : ""}
  862. </Tabs>
  863. </div>
  864. <div className="patent-table">
  865. <Spin spinning={this.state.loading}>
  866. <Table
  867. size="middle"
  868. bordered
  869. columns={
  870. this.state.changeList == undefined
  871. ? this.state.columns
  872. : this.state.changeList
  873. }
  874. dataSource={this.state.dataSource}
  875. rowSelection={rowSelection}
  876. pagination={this.state.pagination}
  877. // onRowDoubleClick={this.tableRowClick}
  878. />
  879. </Spin>
  880. </div>
  881. {
  882. this.state.zhuanjiaoVisible &&
  883. <ZhuanjiaoDetail
  884. cancel={this.zhuanjiaoDetailCancel}
  885. visible={this.state.zhuanjiaoVisible}
  886. id={this.state.zhuanjiaoId}
  887. />
  888. }
  889. {
  890. this.state.modalVisible &&
  891. <IntentionDetail
  892. isLimit={true}
  893. isCustomerAdmin={true}
  894. tabsKey={this.state.tabsKey}
  895. categoryArr={this.state.categoryArr}
  896. detailApi={'/api/admin/customer/findOrganizationCustomerDetail'}
  897. IntentionData={this.state.RowData}
  898. modalVisible={this.state.modalVisible}
  899. name={this.state.modalName}
  900. closeDesc={this.closeDesc}
  901. basicState={this.state.basicState}
  902. contactState={this.state.contactState}
  903. />
  904. }
  905. </div>
  906. );
  907. },
  908. });
  909. export default LimitedProject;