Kaynağa Gözat

外呼线索库

dev01 3 ay önce
ebeveyn
işleme
626862fcd6

+ 15 - 0
js/component/dataDic.js

@@ -4104,6 +4104,21 @@ module.exports = {
     }, {
       value: 21,
       label: '领取为限定项目',
+    }, {
+      value: 22,
+      label: '导入线索客户',
+    }, {
+      value: 23,
+      label: '转交线索客户',
+    }, {
+      value: 24,
+      label: '线索客户退回',
+    }, {
+      value: 25,
+      label: '线索客户移除',
+    }, {
+      value: 26,
+      label: '领取线索客户',
     }
   ],
   //消息提醒状态

+ 1 - 1
js/component/manageCenter/channelList/channelunit/channellog.jsx

@@ -111,7 +111,7 @@ const ChannelLog = React.createClass({
     return (
       <Modal
         style={{ position: "relative" }}
-        title="转交记录"
+        title="记录"
         visible={this.props.visible == "channellog"}
         onCancel={this.props.cancel}
         footer={null}

+ 9 - 1
js/component/manageCenter/customer/NEW/components/outbound/index.jsx

@@ -122,10 +122,16 @@ class Outbound extends Component {
     // 处理WebSocket关闭事件
     this.webSocket.onclose = () => {
       console.log('WebSocket已关闭');
+      _this.setState({
+        status: false
+      })
     };
     // 处理WebSocket错误事件
     this.webSocket.onerror = (error) => {
       console.error('WebSocket出错了', error);
+      _this.setState({
+        status: false
+      })
     };
   }
 
@@ -323,7 +329,9 @@ class Outbound extends Component {
   render() {
     const { status, pVisible, rVisible, tVisible, transAgent, tList, mobile, uList } = this.state
     const { type, } = this.props
-
+    // history 只查看呼叫记录
+    // private 私有呼叫,支持呼叫转移
+    // public 公共库呼叫
     return (
       <span>
         {type != "history" &&

+ 944 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/clue.jsx

@@ -0,0 +1,944 @@
+import React from "react";
+import $ from "jquery/src/ajax";
+import moment from "moment";
+import {
+  Button,
+  Form,
+  Input,
+  Spin,
+  Table,
+  Select,
+  message,
+  Tabs,
+  DatePicker,
+  AutoComplete,
+  Modal,
+  Upload,
+  Icon,
+  Tooltip,
+  Tag,
+} from "antd";
+import { ChooseList } from "../../../order/orderNew/chooseList";
+import { ShowModal, } from "@/tools.js"
+import { accountType, accountStatus } from "@/dataDic";
+import ZhuanjiaoDetail from "@/zhuanjiaoDetail.jsx";
+import IntentionDetail from "./intentionDetail/intentionDetail";
+import ShowModalDiv from "@/showModal.jsx";
+import FollowDetail from "./followDetail"
+import Outbound from '../components/outbound';
+import './clue.less';
+
+const FormItem = Form.Item;
+const { RangePicker } = DatePicker;
+const { TabPane } = Tabs;
+
+const LimitedProject = React.createClass({
+
+  getInitialState() {
+    return {
+      searchValues: {
+        clueProcess: this.props.intentionState == 1 ? "0" : ""
+      }, // 列表筛选条件
+      loading: false, //加载动画
+      changeList: undefined, // 更改后的表格显示数据
+      dataSource: [], // 列表数据
+      fjlist: [],
+      pagination: {
+        defaultCurrent: 1,
+        defaultPageSize: 10,
+        showQuickJumper: true,
+        pageSize: 10,
+        onChange: function (page) {
+          this.loadData(page);
+        }.bind(this),
+        showTotal: function (total) {
+          return "共" + total + "条数据";
+        },
+      },
+      columns: [
+        {
+          title: "客户名称",
+          dataIndex: "nickname",
+          key: "nickname",
+          width: 300,
+        },
+        {
+          title: "联系人",
+          dataIndex: "contacts",
+          key: "contacts",
+        },
+        {
+          title: "联系电话",
+          dataIndex: "contactMobile",
+          key: "contactMobile",
+        },
+        {
+          title: "所属人",
+          dataIndex: "adminName",
+          key: "adminName",
+          isSelect: "jl",
+        },
+        {
+          title: "转交人",
+          dataIndex: "clueAname",
+          key: "clueAname",
+          isSelect: "yxy",
+        },
+        {
+          title: "状态",
+          dataIndex: "clueProcess",
+          key: "clueProcess",
+          render: (text, record) => {
+            return (
+              <div style={{ color: ["green", "", "red", "", ""][text] }}>
+                {["待分配", "已分配", "已回退", "已释放", "已领取"][text]}
+              </div>
+            );
+          },
+        },
+        {
+          title: "导入时间",
+          dataIndex: "clueTime",
+          key: "clueTime",
+          isSelect: "jl",
+          render: (text, record) => {
+            return (
+              <div>
+                {text}
+              </div>
+            );
+          },
+        },
+        {
+          title: "转交时间",
+          dataIndex: "clueTransferTime",
+          key: "clueTransferTime",
+          isSelect: "yxy",
+          render: (text, record) => {
+            return (
+              <div>
+                {text}
+              </div>
+            );
+          },
+        },
+        {
+          title: "操作",
+          dataIndex: "op",
+          key: "op",
+          render: (text, record) => {
+            return (
+              <div>
+                <Outbound
+                  type="public"
+                  uid={record.id}
+                />
+                {
+                  ((record.clueProcess == 1 && this.props.intentionState == 2) ||
+                    ((record.clueProcess == 0 || record.clueProcess == 2) && this.props.intentionState == 1)
+                  ) &&
+                  <Button
+                    style={{ marginLeft: 10 }}
+                    type="primary"
+                    onClick={(e) => {
+                      let _this = this;
+                      Modal.confirm({
+                        title: "提示",
+                        content: (
+                          <span style={{ color: "red" }}>
+                            确定将此客户领取至私有库吗?
+                            <div style={{ marginTop: "5px", color: "#000" }}>
+                              {record.nickname}
+                            </div>
+                          </span>
+                        ),
+                        onOk() {
+                          _this.changeAssigner(3, record.id)
+                        },
+                        onCancel() { },
+                      });
+                    }}
+                  >
+                    领取
+                  </Button>
+                }
+                {this.props.intentionState == 2 &&
+                  <Button
+                    style={{ marginLeft: 10 }}
+                    type="primary"
+                    onClick={(e) => {
+                      let _this = this;
+                      Modal.confirm({
+                        title: "提示",
+                        content: (
+                          <span style={{ color: "red" }}>
+                            确定将此客户退回吗?
+                            <div style={{ marginTop: "5px", color: "#000" }}>
+                              {record.nickname}
+                            </div>
+                          </span>
+                        ),
+                        onOk() {
+                          _this.changeAssigner(1, record.id)
+                        },
+                        onCancel() { },
+                      });
+                    }}
+                  >
+                    回退
+                  </Button>}
+                <Button
+                  style={{ marginLeft: 10 }}
+                  type="primary"
+                  onClick={(e) => {
+                    e.stopPropagation();
+                    this.zhuanjiaoDetail(record);
+                  }}
+                >
+                  记录
+                </Button>
+              </div>
+            );
+          },
+        },
+      ],
+      customerArr: [],
+      selectedRowKeys: [],
+      selectedRows: [],
+      zhuanjiaoVisible: false,
+      categoryArr: [],
+      upLoad: {
+        customRequest: (options) => {
+          this.setState({
+            upLoadFileLoading: true,
+          })
+          let params = new FormData();
+          params.append("file", options.file);
+          $.ajax({
+            method: "post",
+            url: globalConfig.context + "/api/admin/userClue/import",
+            async: true,
+            cache: false,
+            contentType: false,
+            processData: false,
+            data: params
+          }).done(
+            function (data) {
+              this.setState({
+                upLoadFileLoading: false,
+              })
+              if (data.error.length === 0) {
+                if (data.data.errorCount == 0) {
+                  message.success("上传成功!");
+                } else {
+                  Modal.info({
+                    title: "提示",
+                    width: 500,
+                    content: (
+                      <span>
+                        {data.data.errorCount}个客户信息导入失败!
+                        <div style={{ color: "red" }} dangerouslySetInnerHTML={{ __html: data.data.msg }}/>
+                      </span>
+                    ),
+                    onOk() { },
+                  });
+                }
+                this.loadData();
+              } else {
+                message.warning(data.error[0].message);
+                this.loadData();
+              }
+            }.bind(this)
+          ).always(
+            function () {
+              this.loadData();
+              this.setState({
+                upLoadFileLoading: false,
+              });
+            }.bind(this)
+          );
+        },
+        name: "file",
+        action: globalConfig.context + "/api/admin/userClue/import",
+        showUploadList: false,
+      },
+      status: this.props.intentionState,
+    };
+  },
+
+  componentWillMount() {
+    this.defaultcolumns()
+  },
+
+  defaultcolumns() {
+    const newArr = [];
+    this.state.columns.forEach((item) => {
+      if (this.props.intentionState == 1) {
+        if (item.isSelect == "yxy") {
+          return
+        } else {
+          newArr.push(item);
+        }
+      } else if (this.props.intentionState == 2) {
+        if (item.isSelect == "jl") {
+          return
+        } else {
+          newArr.push(item);
+        }
+      }
+    });
+    this.setState({
+      changeList: newArr,
+    }, () => {
+      this.loadData();
+    });
+  },
+
+  componentWillReceiveProps(prevProps) {
+    if (prevProps.intentionState !== this.state.status) {
+      this.setState({
+        status: prevProps.intentionState
+      }, () => {
+        this.defaultcolumns()
+      })
+    }
+  },
+
+  // 列表接口
+  loadData(pageNo) {
+    const { searchValues, pagination } = this.state;
+    this.setState({
+      loading: true,
+    });
+    let datas = Object.assign(searchValues, {
+      pageNo: pageNo || 1,
+      pageSize: pagination.pageSize,
+      shiroType: this.props.intentionState,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/userClue/list",
+      data: datas,
+      success: function (data) {
+        ShowModal(this);
+        this.setState({
+          loading: false,
+        });
+        let theArr = [];
+        if (data.error && data.error.length === 0) {
+          if (data.data) {
+            pagination.current = data.data.pageNo;
+            pagination.total = data.data.totalCount;
+            if (data.data && data.data.list && !data.data.list.length) {
+              pagination.current = 0
+              pagination.total = 0
+            };
+            this.setState({
+              dataSource: data.data.list,
+              pagination: this.state.pagination,
+              pageNo: data.data.pageNo,
+            });
+          }
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+  // 搜索
+  search() {
+    this.loadData();
+  },
+  // 重置
+  reset() {
+    this.setState({
+      searchValues: {
+        clueProcess: this.props.intentionState == 1 ? "0" : ""
+      },
+    }, () => {
+      this.defaultcolumns();
+    })
+  },
+
+  changeList(arr) {
+    const newArr = [];
+    this.state.columns.forEach((item) => {
+      arr.forEach((val) => {
+        if (val === item.title) {
+          newArr.push(item);
+        }
+      });
+    });
+    this.setState({
+      changeList: newArr,
+    });
+  },
+
+  supervisor(e) {
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/customer/listAdminByName",
+      data: {
+        adminName: e,
+      },
+      success: function (data) {
+        let thedata = data.data;
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          }
+          thedata = {};
+        }
+        this.setState({
+          customerArr: thedata,
+        });
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  selectAuto(value, options) {
+    this.setState({
+      auto: value,
+    });
+  },
+
+  blurChange(e) {
+    let theType = "";
+    let contactLists = this.state.customerArr || [];
+    if (e) {
+      contactLists.map(function (item) {
+        if (item.name == e.toString()) {
+          theType = item.id;
+        }
+      });
+    }
+    this.setState({
+      theTypes: theType,
+    });
+  },
+
+  httpChange(e) {
+    if (e.length >= 1) {
+      this.supervisor(e);
+    }
+    this.setState({
+      auto: e,
+    });
+  },
+
+  showConfirm() {
+    let _this = this;
+    Modal.confirm({
+      title: "提示",
+      content: (
+        <span style={{ color: "red" }}>
+          确定要转交以下客户吗?
+          {this.state.selectedRows.map((value, index) => (
+            <div key={index} style={{ marginTop: "5px", color: "#000" }}>
+              {value.nickname}
+            </div>
+          ))}
+        </span>
+      ),
+      onOk() {
+        _this.changeAssigner(0)
+      },
+      onCancel() { },
+    });
+  },
+
+  showConfirms() {
+    let _this = this;
+    Modal.confirm({
+      title: "您确定将以下客户移至公共库吗?",
+      content: (
+        <span style={{ color: "red" }}>
+          移除后,以下客户将被别人领取!
+          {this.state.selectedRows.map((value, index) => (
+            <div key={index} style={{ marginTop: "5px", color: "#000" }}>
+              {value.nickname}
+            </div>
+          ))}
+        </span>
+      ),
+      onOk() {
+        _this.changeAssigner(2);
+      },
+      onCancel() { },
+    });
+  },
+  // 批量转交,移至公共库
+  changeAssigner(type, uid) {
+    const _this = this;
+    if (type == 0 && !this.state.theTypes) {
+      message.warning("请输入转交人姓名");
+      return
+    }
+    let changeIds = "";
+    if (type == 0 || type == 2) {
+      for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+        let rowItem = this.state.selectedRows[idx];
+        if (rowItem.id) {
+          changeIds =
+            this.state.selectedRows.length - 1 === idx
+              ? changeIds + rowItem.id
+              : changeIds + rowItem.id + ",";
+        }
+      }
+    } else if (type == 1 || type == 3) {
+      changeIds = uid
+    }
+    let loading = message.loading("加载中...");
+    $.ajax({
+      method: "post",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/userClue/transfer",
+      data: {
+        uid: changeIds,
+        type,
+        transferId: type == 0 ? this.state.theTypes : undefined,
+      },
+    }).done(
+      function (data) {
+        loading();
+        this.setState({
+          selList: [],
+        })
+        if (!data.error.length) {
+          this.setState({
+            auto: "",
+            loading: false,
+            selectedRowKeys: [],
+          });
+          if (data.data == 1) {
+            message.success(["转交成功!", "退回成功!", "成功移至公共库!", "领取成功!"][type]);
+            _this.loadData();
+          } else {
+            data.data.forEach(function (e) { message.warning(e) })
+          }
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this)
+    );
+  },
+
+  zhuanjiaoDetail(record) {
+    this.setState({
+      zhuanjiaoVisible: true,
+      zhuanjiaoId: record.id,
+    });
+  },
+
+  zhuanjiaoDetailCancel() {
+    this.setState({
+      zhuanjiaoVisible: false,
+    });
+  },
+
+  tableRowClick(record, index) {
+    this.state.visitModul = false;
+    this.setState({
+      modalVisible: true,
+      basicState: true,
+      contactState: true,
+      modalName: record.name,
+      RowData: record,
+    });
+  },
+
+  closeDesc(e, s) {
+    this.state.basicState = e;
+    this.state.visitModul = e;
+    this.state.modalVisible = e;
+    this.state.visitModuls = e;
+    this.state.showDesc = e;
+    this.setState({
+      tabsKey: "",
+    });
+    if (s) {
+      this.loadData(this.state.ispage);
+    }
+  },
+  //查看跟进记录列表
+  loadVisit(pageNo) {
+    this.setState({
+      loading: true
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + '/api/admin/customer/listFollowHistory',
+      data: {
+        pageNo: pageNo || 1,
+        pageSize: this.state.paginations.pageSize,
+        uid: this.state.RowData.id, //名称1
+      },
+      success: function (data) {
+        let theArr = [];
+        if (data.error.length || data.data.list == "") {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          };
+        } else {
+          for (let i = 0; i < data.data.list.length; i++) {
+            let thisdata = data.data.list[i];
+            theArr.push(thisdata);
+          };
+          this.state.paginations.current = data.data.pageNo;
+          this.state.paginations.total = data.data.totalCount;
+          this.setState({
+            ispage: data.data.pageNo
+          })
+        };
+        if (data.data.list && !data.data.list.length) {
+          this.state.paginations.current = 0;
+          this.state.paginations.total = 0;
+        };
+        this.setState({
+          visitArrList: theArr,
+          paginations: this.state.paginations
+        });
+      }.bind(this),
+    }).always(function () {
+      this.setState({
+        loading: false
+      });
+    }.bind(this));
+  },
+  // 模版下载
+  exportExec() {
+    message.config({
+      duration: 20,
+    });
+    let loading = message.loading("下载中...");
+    this.setState({
+      exportPendingLoading: true,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/userClue/exportTemplate",
+      data: {},
+      success: function (data) {
+        if (data.error.length === 0) {
+          this.download(data.data);
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        loading();
+        this.setState({
+          exportPendingLoading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  download(fileName) {
+    window.location.href =
+      globalConfig.context + "/open/download?fileName=" + fileName;
+  },
+
+  followUp(e) {
+    const { searchValues } = this.state;
+    this.setState({
+      searchValues: Object.assign(searchValues, {
+        belongname: e,
+      }),
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/customer/listAdminByName",
+      data: {
+        adminName: e,
+      },
+      success: function (data) {
+        let thedata = data.data;
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          }
+          thedata = {};
+        }
+        this.setState({
+          fjlist: thedata,
+        });
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  selectF(value) {
+    const { searchValues, fjlist } = this.state;
+    const newdataSources = JSON.stringify(fjlist) == "{}" ? [] : fjlist;
+    this.setState({
+      searchValues: Object.assign(searchValues, {
+        belongName: newdataSources.find((item) => item.name == value).id,
+      }),
+    });
+  },
+
+  render() {
+    const { searchValues, } = this.state
+    const rowSelection = {
+      selectedRowKeys: this.state.selectedRowKeys,
+      onChange: (selectedRowKeys, selectedRows) => {
+        this.setState({
+          modalVisible: false,
+          selectedRows: selectedRows,
+          selectedRowKeys: selectedRowKeys,
+        });
+      },
+      onSelect: (recordt, selected, selectedRows) => {
+        this.setState({
+          modalVisible: false,
+        });
+      },
+    };
+    const hasSelected = this.state.selectedRowKeys.length > 0;
+    const dataSources = this.state.customerArr || [];
+    const options = dataSources.map((group) => (
+      <Select.Option key={group.id} value={group.name}>
+        {group.name}
+      </Select.Option>
+    ));
+    const newdataSources =
+      JSON.stringify(this.state.fjlist) == "{}" ? [] : this.state.fjlist;
+    const newoptions = newdataSources.map((group) => (
+      <Select.Option key={group.id} value={group.name}>
+        {group.name}
+      </Select.Option>
+    ));
+    return (
+      <div className="user-content clue">
+        <ShowModalDiv ShowModal={this.state.showModal} onClose={() => { this.setState({ showModal: false }) }} />
+        <div className="content-title" style={{ marginBottom: 10 }}>
+          <span style={{ fontWeight: 900, fontSize: 16 }}>线索客户</span>
+        </div>
+        <div className="user-search">
+          <Tabs defaultActiveKey="1" className="test">
+            <TabPane tab="搜索" key="1">
+              <div className="user-search" style={{ marginLeft: 10 }}>
+                <Input
+                  placeholder="客户名称"
+                  value={searchValues["userName"]
+                    ? searchValues["userName"]
+                    : ""}
+                  onChange={(e) => {
+                    searchValues["userName"] = e.target.value;
+                    this.setState({
+                      searchValues: searchValues,
+                    });
+                  }}
+                />
+                <AutoComplete
+                  className="certain-category-search"
+                  dropdownClassName="certain-category-search-dropdown"
+                  dropdownMatchSelectWidth={false}
+                  style={{ width: "150px" }}
+                  dataSource={newoptions}
+                  placeholder="所属人"
+                  value={searchValues["belongname"] || undefined}
+                  onChange={this.followUp.bind(this)}
+                  filterOption={true}
+                  onSelect={this.selectF.bind(this)}
+                >
+                  <Input />
+                </AutoComplete>
+                <Select
+                  style={{ width: 140 }}
+                  placeholder=""
+                  value={searchValues["clueProcess"]
+                    ? searchValues["clueProcess"]
+                    : ""}
+                  onChange={(e) => {
+                    searchValues["clueProcess"] = e;
+                    this.setState({
+                      searchValues: searchValues,
+                    });
+                  }}
+                >
+                  <Option value="">全部</Option>
+                  <Option value="0">待分配</Option>
+                  <Option value="1">已分配</Option>
+                  <Option value="2">已回退</Option>
+                  <Option value="3">已移除</Option>
+                  <Option value="4">已领取</Option>
+                </Select>
+
+                <RangePicker
+                  style={{ width: 300 }}
+                  value={[
+                    searchValues.startTime ? moment(searchValues.startTime) : null,
+                    searchValues.endTime ? moment(searchValues.endTime) : null,
+                  ]}
+                  onChange={(data, dataString) => {
+                    this.setState({
+                      searchValues: Object.assign(searchValues, {
+                        startTime: dataString[0],
+                        endTime: dataString[1],
+                      }),
+                    });
+                  }}
+                />
+                <Button
+                  type="primary"
+                  onClick={this.search}
+                  style={{ margin: "0 10px" }}
+                >搜索</Button>
+                <Button onClick={this.reset}>重置</Button>
+              </div>
+            </TabPane>
+            <TabPane tab="更改表格显示数据" key="2">
+              <div style={{ marginLeft: 10 }}>
+                <ChooseList
+                  columns={this.state.columns}
+                  changeFn={this.changeList}
+                  changeList={this.state.changeList}
+                  top={55}
+                  margin={11}
+                />
+              </div>
+            </TabPane>
+            {this.props.intentionState == 1
+              ? <TabPane tab="操作" key="3">
+                <div className="user-search" >
+                  <AutoComplete
+                    className="certain-category-search"
+                    dropdownClassName="certain-category-search-dropdown"
+                    dropdownMatchSelectWidth={false}
+                    style={{ width: "120px" }}
+                    dataSource={options}
+                    placeholder="输入转交人姓名"
+                    value={this.state.auto}
+                    onChange={this.httpChange}
+                    filterOption={true}
+                    onBlur={this.blurChange}
+                    onSelect={this.selectAuto}
+                    disabled={!hasSelected}
+                  >
+                    <Input />
+                  </AutoComplete>
+                  <Button
+                    type="primary"
+                    onClick={(e) => {
+                      e.stopPropagation();
+                      this.showConfirm();
+                    }}
+                    disabled={!hasSelected}
+                    style={{ marginRight: 10 }}
+                  >
+                    批量转交
+                  </Button>
+                  <Button
+                    style={{ marginLeft: 10 }}
+                    onClick={(e) => {
+                      e.stopPropagation();
+                      this.showConfirms();
+                    }}
+                    type="primary"
+                    disabled={!hasSelected}
+                  >
+                    批量移至公共库
+                  </Button>
+                  <Upload {...this.state.upLoad} disabled={this.state.upLoadFileLoading}>
+                    <Button
+                      loading={this.state.upLoadFileLoading}
+                      type="primary"
+                      style={{ marginLeft: 10 }}
+                    >
+                      批量上传
+                    </Button>
+                  </Upload>
+
+                  <Button
+                    style={{ marginLeft: 10 }}
+                    onClick={(e) => {
+                      this.exportExec()
+                    }}
+                    type="primary"
+                  >
+                    下载模板
+                  </Button>
+
+                </div>
+              </TabPane> : ""}
+          </Tabs>
+        </div>
+        <div className="patent-table">
+          <Spin spinning={this.state.loading}>
+            <Table
+              size="middle"
+              bordered
+              columns={
+                this.state.changeList == undefined
+                  ? this.state.columns
+                  : this.state.changeList
+              }
+              dataSource={this.state.dataSource}
+              rowSelection={rowSelection}
+              pagination={this.state.pagination}
+            // onRowDoubleClick={this.tableRowClick}
+            />
+          </Spin>
+        </div>
+        {
+          this.state.zhuanjiaoVisible &&
+          <ZhuanjiaoDetail
+            cancel={this.zhuanjiaoDetailCancel}
+            visible={this.state.zhuanjiaoVisible}
+            id={this.state.zhuanjiaoId}
+          />
+        }
+        {
+          this.state.modalVisible &&
+          <IntentionDetail
+            isLimit={true}
+            isCustomerAdmin={true}
+            tabsKey={this.state.tabsKey}
+            categoryArr={this.state.categoryArr}
+            detailApi={'/api/admin/customer/findOrganizationCustomerDetail'}
+            IntentionData={this.state.RowData}
+            modalVisible={this.state.modalVisible}
+            name={this.state.modalName}
+            closeDesc={this.closeDesc}
+            basicState={this.state.basicState}
+            contactState={this.state.contactState}
+          />
+        }
+
+      </div>
+    );
+  },
+});
+
+export default LimitedProject;

+ 9 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/clue.less

@@ -0,0 +1,9 @@
+// 部分模块全选框被隐藏,需手动显示出来
+.clue{
+  .ant-table-thead .ant-table-selection-column .ant-checkbox-wrapper{
+      display: block!important;
+  }
+  thead > tr > .ant-table-selection-column > span .ant-checkbox-inner{
+      display: block!important;
+  }
+}

+ 26 - 9
js/component/manageCenter/customer/NEW/intentionCustomer/intentionCustomer.jsx

@@ -277,15 +277,31 @@ const IntentionCustomer = Form.create()(
             dataIndex: "level",
             key: "level",
             render: (text, record) => {
-              if (text == 0) {
-                return <Tag color="#87d068">一般客户(一年以上预签)</Tag>;
-              } else if (text == 1) {
-                return <Tag color="#D2691E">意向客户(半年内预签)</Tag>;
-              } else if (text == 2) {
-                return <Tag color="#FF0000">重点客户(一个月内预签)</Tag>;
-              } else {
-                return "";
-              }
+              return (
+                <div>
+                  <span style={{ display: "inline-block", width: 170 }}>
+                    {
+                      text == 0
+                        ? <Tag color="#87d068">一般客户(一年以上预签)</Tag> : text == 1
+                          ? <Tag color="#D2691E">意向客户(半年内预签)</Tag> : text == 2
+                            ? <Tag color="#FF0000">重点客户(一个月内预签)</Tag> : ""
+                    }
+                  </span>
+                  <Button
+                    style={{ marginLeft: 10 }
+                    }
+                    onClick={(e) => {
+                      e.stopPropagation(),
+                        this.zhuanjiaoDetail(record);
+                    }}
+                    type="primary"
+                  >
+                    记录
+                  </Button >
+                </div>
+              )
+
+
             },
           },
           {
@@ -1186,6 +1202,7 @@ const IntentionCustomer = Form.create()(
                     !(hasSelected && this.state.selectedRows.length === 1)
                   }
                   style={{ marginLeft: 10 }}
+                  data={this.state.selectedRows[0]}
                   enterpriseId={
                     this.state.selectedRows[0] && this.state.selectedRows[0].id
                   }

+ 0 - 1
js/component/manageCenter/customer/NEW/intentionCustomer/transferRecords.jsx

@@ -108,7 +108,6 @@ const TransferRecords = React.createClass({
         return (
             <Modal
                 style={{ position: "relative" }}
-                // title={this.props.type === 1 ? '转交记录' : this.props.type === 2 ? '回收记录' : '分配记录'}
                 title='日志'
                 visible={this.props.visible}
                 onCancel={this.props.cancel}

+ 1 - 1
js/component/manageCenter/customer/NEW/signCustomer/signCustomer.jsx

@@ -281,7 +281,7 @@ const IntentionCustomer = Form.create()(React.createClass({
                   }}
                   type="primary"
                 >
-                  转交记录
+                  记录
                 </Button>
                 <Button
                   style={{ marginLeft: 10 }}

+ 30 - 0
js/component/manageCenter/customer/content.jsx

@@ -397,6 +397,36 @@ class Content extends Component {
           });
         });
         break;
+      case 'clueAdmin':
+        require.ensure([], () => {
+          const ClueAdmin = require('./NEW/intentionCustomer/clue').default;
+          this.setState({
+            component: <ClueAdmin
+              intentionState={0}
+            />
+          });
+        });
+        break;
+      case 'clueJl':
+        require.ensure([], () => {
+          const ClueJl = require('./NEW/intentionCustomer/clue').default;
+          this.setState({
+            component: <ClueJl
+              intentionState={1}
+            />
+          });
+        });
+        break;
+      case 'clueYxy':
+        require.ensure([], () => {
+          const ClueYxy = require('./NEW/intentionCustomer/clue').default;
+          this.setState({
+            component: <ClueYxy
+              intentionState={2}
+            />
+          });
+        });
+        break;
       // 限定项目
       case 'limit':
         require.ensure([], () => {

+ 2 - 1
js/component/manageCenter/order/orderNew/chooseList.jsx

@@ -38,7 +38,8 @@ class ChooseList extends Component {
     this.props.columns.forEach(item => {
       let obj = {
         label: item.title,
-        value: item.title
+        value: item.title,
+        disabled: !adminData.isSuperAdmin && item.disabled,
       };
       options.push(obj);
       defaultValue.push(item.title);

+ 2 - 0
js/component/manageCenter/project/summary/highTech.jsx

@@ -318,6 +318,8 @@ class HighTech extends Component {
     this.state.columns.forEach((item) => {
       if (item.isNoD) {
         return
+      } else if (!adminData.isSuperAdmin && item.disabled) {
+        return
       } else {
         newArr.push(item);
       }

+ 7 - 0
js/component/manageCenter/project/summary/highTechConfig.jsx

@@ -187,6 +187,7 @@ const member = (onCellClick) => [
     dataIndex: "scoreNumber",
     key: "scoreNumber",
     width: 80,
+    isNoS: true,
     onCellClick: (record, e) => {
       e.stopPropagation();
       onCellClick(record)
@@ -403,6 +404,7 @@ const highTechColumns = (onCellClick) => [
     dataIndex: "scoreNumber",
     key: "scoreNumber",
     width: 80,
+    isNoS: true,
     onCellClick: (record, e) => {
       e.stopPropagation();
       onCellClick(record)
@@ -586,6 +588,7 @@ const doubleSoft = (onCellClick) => [
     dataIndex: "scoreNumber",
     key: "scoreNumber",
     width: 80,
+    isNoS: true,
     onCellClick: (record, e) => {
       e.stopPropagation();
       onCellClick(record)
@@ -808,6 +811,7 @@ const softWriting = (onCellClick) => [
     dataIndex: "scoreNumber",
     key: "scoreNumber",
     width: 80,
+    isNoS: true,
     onCellClick: (record, e) => {
       e.stopPropagation();
       onCellClick(record)
@@ -1042,6 +1046,7 @@ const patent = (onCellClick) => [
     dataIndex: "scoreNumber",
     key: "scoreNumber",
     width: 80,
+    isNoS: true,
     onCellClick: (record, e) => {
       e.stopPropagation();
       onCellClick(record)
@@ -1256,6 +1261,7 @@ const audit = (onCellClick) => [
     dataIndex: "scoreNumber",
     key: "scoreNumber",
     width: 80,
+    isNoS: true,
     onCellClick: (record, e) => {
       e.stopPropagation();
       onCellClick(record)
@@ -1442,6 +1448,7 @@ const currency = (onCellClick) => [
     dataIndex: "scoreNumber",
     key: "scoreNumber",
     width: 80,
+    disabled: true,
     onCellClick: (record, e) => {
       e.stopPropagation();
       onCellClick(record)

+ 1 - 1
js/component/zhuanjiaoDetail.jsx

@@ -108,7 +108,7 @@ const ZhuanjiaoDetail = React.createClass({
     return (
       <Modal
         style={{ position: "relative" }}
-        title="转交记录"
+        title="记录"
         visible={this.props.visible}
         onCancel={this.props.cancel}
         footer={null}

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "afanti",
-  "version": "1.3.30",
+  "version": "1.3.31",
   "description": "",
   "main": "index.js",
   "scripts": {