Browse Source

项目暂停&重启

dev01 2 years ago
parent
commit
5bccb4a88e

+ 133 - 0
js/component/common/logPopup/mysuspendlog.jsx

@@ -0,0 +1,133 @@
+// 项目暂停重启日志弹窗
+import React, { Component } from "react";
+import { Button, message, Modal, Spin, Table } from "antd";
+import { ShowModal } from "../../tools";
+import $ from "jquery/src/ajax";
+
+class MySuspendLog extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      loading: false,
+      visible: false,
+      columnsDate: [
+        {
+          title: "操作人",
+          dataIndex: "createName",
+          key: "createName",
+          width: 150,
+        },
+        {
+          title: "操作",
+          dataIndex: "status",
+          key: "status",
+          width: 150,
+          render: (text, record) => {
+            return (
+              <span>
+                {this.props.stopType == 0 ? "项目暂停" : "项目重启"}
+                <span style={{ color: ["", "green", "red"][text], fontWeight: "bold" }}>
+                  {" " + ["【发起】", "【通过】", "【拒绝】"][text] + " "}
+                </span>
+              </span>
+            );
+          },
+        },
+        {
+          title: "操作时间",
+          dataIndex: "createTimes",
+          key: "createTimes",
+          width: 150,
+        },
+        {
+          title: "备注",
+          dataIndex: "reason",
+          key: "reason",
+        },
+      ],
+      recordData: [],
+    };
+  }
+
+  componentDidMount() { }
+
+  // 日志
+  getData() {
+    this.setState({
+      loading: true,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/orderProject/projectStopList",
+      data: {
+        taskStopId: this.props.id,
+      },
+      success: function (data) {
+        ShowModal(this);
+        if (!data.data) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          }
+        } else {
+          this.setState({
+            recordData: data.data,
+          });
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  }
+
+  render() {
+    return (
+      <span>
+        <Button
+          type="primary"
+          onClick={(e) => {
+            e.stopPropagation();
+            this.getData();
+            this.setState({
+              visible: true,
+            })
+          }}
+          style={{ margin: 5 }}
+        >
+          日志
+        </Button>
+        <Modal
+          maskClosable={false}
+          visible={this.state.visible}
+          footer=""
+          title="操作日志"
+          className="admin-desc-content"
+          width="800px"
+          onCancel={(e) => {
+            this.setState({
+              visible: false,
+            });
+          }}
+          style={{ zIndex: 10 }}
+        >
+          <Spin spinning={this.state.loading}>
+            <div className="patent-table">
+              <Table
+                columns={this.state.columnsDate}
+                dataSource={this.state.recordData || []}
+                pagination={false}
+              />
+            </div>
+          </Spin>
+        </Modal>
+      </span>
+    );
+  }
+}
+
+export default MySuspendLog;

+ 503 - 0
js/component/common/mysuspend/index.jsx

@@ -0,0 +1,503 @@
+import React, { Component } from "react";
+import { Button, Modal, message, Input, Form, Spin, } from "antd";
+import $ from "jquery/src/ajax";
+import "./index.less";
+import { splitUrl } from '@/tools';
+import ImgList from "../imgList";
+
+/**
+ * 
+ */
+const PicturesWall = React.createClass({
+
+  getInitialState() {
+    return {
+      previewVisible: false,
+      previewImage: "",
+      fileList: this.props.pictureUrl,
+    };
+  },
+
+  getDefaultProps() {
+    return {
+      changeClick: this.modifyChange,
+    };
+  },
+
+  handleCancel() {
+    this.setState({ previewVisible: false });
+  },
+
+  handlePreview(file) {
+    this.setState({
+      previewImage: file.url || file.thumbUrl,
+      previewVisible: true,
+    });
+  },
+
+  handleChange(info) {
+    let fileList = info.fileList;
+    this.setState({ fileList });
+    this.props.fileList(fileList);
+  },
+
+  componentWillReceiveProps(nextProps) {
+    this.state.fileList = nextProps.pictureUrl;
+  },
+
+  render() {
+    const { fileList } = this.state;
+    return (
+      <div style={{ display: "inline-block" }}>
+        <ImgList
+          domId={this.props.domId}
+          uploadConfig={{
+            action: globalConfig.context + "/api/admin/orderProject/uploadStopFile",
+            data: { sign: "projectStopFile" },
+            multiple: true,
+            listType: "picture-card",
+          }}
+          onChange={(infor) => {
+            this.handleChange(infor);
+          }}
+          fileList={fileList}
+        />
+      </div>
+    );
+  },
+
+});
+
+class MySuspend extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      reason: "", //原因
+      orgCodeUrl: [], //附件
+      loading: false,
+      logList: [], //日志
+      emVisible: false, //审核弹窗
+      emReason: "", //审核说明
+    };
+    this.onOks = this.onOks.bind(this);
+    this.getOrgCodeUrl = this.getOrgCodeUrl.bind(this);
+  }
+
+  componentDidMount() {
+    const { rowData } = this.props
+    !!rowData && !!rowData.id && this.getLog(rowData.id)
+  }
+
+
+  // 日志
+  getLog(id) {
+    this.setState({
+      loading: true,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      url: globalConfig.context + "/api/admin/orderProject/projectStopList",
+      data: {
+        taskStopId: id,
+      },
+      success: function (data) {
+        if (data.error.length === 0) {
+          this.setState({
+            logList: data.data || [],
+          });
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  }
+  // 确定
+  onOks() {
+    const { selectedRowKeys, subClose, title } = this.props
+    let annexUrl = []
+    if (this.state.orgCodeUrl.length) {
+      let annexArr = [];
+      this.state.orgCodeUrl.map(function (item) {
+        if (
+          item.response &&
+          item.response.data &&
+          item.response.data.length
+        ) {
+          annexArr.push(item.response.data);
+        }
+      });
+      annexUrl = annexArr.join(",");
+    }
+    if (typeof annexUrl !== "string") {
+      message.warning("请上传附件!");
+      return
+    }
+    if (!this.state.reason) {
+      message.warning("请填写原因!");
+      return
+    }
+    this.setState({
+      loading: true,
+    });
+    let infor = {
+      ids: selectedRowKeys.toString(),
+      type: title == "项目重启" ? 1 : 0, //0=项目暂停,1=项目重启
+      reason: this.state.reason, //原因
+      annexUrl: annexUrl.length ? annexUrl : undefined,//附件,
+    }
+    $.ajax({
+      method: "POST",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/orderProject/addProjectStop",
+      data: infor,
+    }).done(
+      function (data) {
+        this.setState({
+          loading: false,
+        });
+        if (!data.error.length) {
+          message.success("操作成功!");
+          subClose()
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this)
+    );
+  }
+  // 重新
+  onAgain() {
+    const { subClose, title, rowData } = this.props
+    let annexUrl = []
+    if (this.state.orgCodeUrl.length) {
+      let annexArr = [];
+      this.state.orgCodeUrl.map(function (item) {
+        if (
+          item.response &&
+          item.response.data &&
+          item.response.data.length
+        ) {
+          annexArr.push(item.response.data);
+        }
+      });
+      annexUrl = annexArr.join(",");
+    }
+    if (typeof annexUrl !== "string") {
+      message.warning("请上传附件!");
+      return
+    }
+    if (!this.state.reason) {
+      message.warning("请填写原因!");
+      return
+    }
+    this.setState({
+      loading: true,
+    });
+    let infor = {
+      stopId: rowData.id, //暂停编号
+      type: title == "项目重启" ? 1 : 0, //0=项目暂停,1=项目重启
+      reason: this.state.reason, //原因
+      annexUrl: annexUrl.length ? annexUrl : undefined,//附件,
+    }
+    $.ajax({
+      method: "POST",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/orderProject/updateProjectStop",
+      data: infor,
+    }).done(
+      function (data) {
+        this.setState({
+          loading: false,
+        });
+        if (!data.error.length) {
+          message.success("重新发起成功!");
+          subClose()
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this)
+    );
+  }
+  // 图片添加
+  getOrgCodeUrl(e) {
+    this.setState({ orgCodeUrl: e });
+  }
+  // 关闭审核弹窗
+  emCancel() {
+    const { subClose } = this.props
+    this.setState({
+      emVisible: false,
+      emReason: "",
+    }, () => {
+      subClose()
+    })
+  }
+  // 项目审核
+  examineProjectStop(status) {
+    if (!this.state.emReason) {
+      message.warning("请填写审核说明~");
+      return;
+    }
+    this.setState({
+      loading: true,
+    });
+    $.ajax({
+      method: "POST",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/orderProject/examineProjectStop",
+      data: {
+        taskStopId: this.props.rowData.id,
+        reason: this.state.emReason,
+        status,
+      },
+    }).done(
+      function (data) {
+        if (!data.error.length) {
+          this.setState({
+            loading: false,
+          })
+          message.success("审核成功!");
+          this.emCancel()
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this)
+    );
+  }
+
+  render() {
+    const { visible, title, orderNo, userName, contractNo, isApproved = false,
+      subClose, selectedRows, type, reason, annexUrl, rowData,
+    } = this.props
+    const { logList } = this.state
+    const FormItem = Form.Item;
+    const formItemLayout = {
+      labelCol: { span: 3 },
+      wrapperCol: { span: 20 },
+    };
+    return (
+      <Modal
+        maskClosable={false}
+        visible={visible}
+        width={"700px"}
+        title=""
+        footer=""
+        onCancel={subClose}
+      >
+        <Spin spinning={this.state.loading}>
+          <div className="clearfix">
+            <div className="tittle">{title}</div>
+            <div style={{ marginLeft: 20 }}>
+              <div style={{ marginBottom: 10 }}>
+                {type != "details" && "请您确定,是否将"}
+                订单号:{orderNo},客户:{userName},合同编号:{contractNo}
+                {type != "details" && ("的项目进行" + (title == "项目重启" ? "重启" : "暂停"))}
+              </div>
+              <div>{title == "项目重启" ? "重启" : "暂停"}项目清单:</div>
+              {
+                selectedRows.length > 0 && selectedRows.map((item, index) =>
+                  <div
+                    key={item.id}
+                    style={{ marginLeft: 20 }}
+                  >{index + 1}{"、" + item.commodityName + "-" + item.id}</div>
+                )
+              }
+            </div>
+            <Form>
+              <div className="clearfix" style={{ marginTop: 20 }}>
+                {
+                  type == "details" ?
+                    <FormItem
+                      {...formItemLayout}
+                      label={title == "项目重启" ? "重启原因" : "暂停原因"}
+                    >
+                      {reason}
+                    </FormItem> :
+                    <FormItem
+                      {...formItemLayout}
+                      label={<span><span style={{ color: "red" }}>*</span>{title == "项目重启" ? "重启原因" : "暂停原因"}</span>}
+                    >
+                      <Input
+                        type="textarea"
+                        placeholder=""
+                        autosize={{ minRows: 3 }}
+                        value={this.state.reason}
+                        onChange={(e) => {
+                          this.setState({ reason: e.target.value });
+                        }}
+                      />
+                      <span>
+                        点击“确定{title == "项目重启" ? "重启" : "暂停"}”,
+                        审核通过后,项目状态更改为“{title == "项目重启" ? "正常" : "暂停"}”,
+                        技术人员将暂停此项目的相关服务!
+                      </span>
+                    </FormItem>
+                }
+              </div>
+              <div className="clearfix">
+                {
+                  type == "details" ?
+                    <FormItem
+                      {...formItemLayout}
+                      label="附件"
+                    >
+                      <ImgList fileList={splitUrl(annexUrl, ",", globalConfig.avatarHost + "/upload")} domId={"details"} />
+                    </FormItem> :
+                    <FormItem
+                      {...formItemLayout}
+                      label={<span><span style={{ color: "red" }}>*</span>上传附件</span>}
+                    >
+                      <PicturesWall
+                        fileList={this.getOrgCodeUrl}
+                        pictureUrl={this.state.orgCodeUrl}
+                      />
+                      <p>图片建议:要清晰。</p>
+                      <p style={{ color: "red" }}>可上传与客户协议或截图等信息</p>
+                    </FormItem>
+                }
+              </div>
+              {
+                type != "details" &&
+                <div className="clearfix">
+                  <FormItem
+                    wrapperCol={{ span: 12, offset: 7 }}
+                    className="half-middle"
+                  >
+                    <Button
+                      className="submitSave"
+                      type="primary"
+                      onClick={() => {
+                        this.props.again
+                          ? this.onAgain()
+                          : this.onOks()
+                      }}
+                    >
+                      {
+                        this.props.again
+                          ? "重新发起"
+                          : (title == "项目重启" ? "确定重启" : "确定暂停")
+                      }
+                    </Button>
+                    <Button
+                      className="submitSave"
+                      type="primary"
+                      onClick={subClose}
+                    >
+                      取消
+                    </Button>
+                  </FormItem>
+                </div>
+              }
+              {
+                // 日志
+                type == "details" &&
+                <div style={{ marginLeft: 20, marginBottom: 20 }}>
+                  {
+                    logList.map((item) =>
+                      <div key={item.id}>
+                        {item.createName + ":" + item.createTimes + " "}
+                        <span style={{ color: ["", "green", "red"][item.status], fontWeight: "bold" }}>
+                          {" " + ["【发起】", "【通过】", "【拒绝】"][item.status] + " "}
+                        </span>
+                        {"备注:" + item.reason}
+                      </div>
+                    )
+                  }
+                </div>
+              }
+              {
+                !!rowData && rowData.stopStatus == 0 && isApproved &&
+                <div className="clearfix">
+                  <FormItem
+                    wrapperCol={{ span: 12, offset: 10 }}
+                    className="half-middle"
+                  >
+                    <Button
+                      type="primary"
+                      onClick={() => {
+                        this.setState({
+                          emVisible: true,
+                        })
+                      }}
+                    >
+                      审核
+                    </Button>
+                  </FormItem>
+                </div>
+              }
+            </Form>
+          </div>
+        </Spin >
+        {
+          // 项目审核
+          this.state.emVisible &&
+          <Modal
+            visible={this.state.emVisible}
+            width="500px"
+            title="项目审核"
+            footer=""
+            onCancel={() => { this.setState({ emVisible: false }) }}
+          >
+            <Form>
+              <Spin spinning={this.state.loading}>
+                <FormItem
+                  labelCol={{ span: 5 }}
+                  wrapperCol={{ span: 16 }}
+                  label={
+                    <span>
+                      <strong style={{ color: "#f00" }}>*</strong>
+                      备注
+                    </span>
+                  }
+                >
+                  <Input
+                    type="textarea"
+                    rows={4}
+                    placeholder="请填写审核说明"
+                    value={this.state.emReason}
+                    onChange={(e) => {
+                      this.setState({ emReason: e.target.value });
+                    }}
+                  />
+                </FormItem>
+                <FormItem wrapperCol={{ span: 12, offset: 5 }}>
+                  <Button
+                    type="primary"
+                    onClick={() => { this.examineProjectStop(1) }}
+                    style={{ marginRight: 20 }}
+                  >
+                    同意
+                  </Button>
+                  <Button
+                    type="primary"
+                    onClick={() => { this.examineProjectStop(2) }}
+                    style={{ marginRight: 20 }}
+                  >
+                    驳回
+                  </Button>
+                  <Button
+                    type="default"
+                    onClick={() => { this.setState({ emVisible: false }) }}
+                  >
+                    取消
+                  </Button>
+                </FormItem>
+              </Spin>
+            </Form>
+          </Modal>
+        }
+      </Modal >
+    );
+  }
+}
+
+export default MySuspend;

+ 14 - 0
js/component/common/mysuspend/index.less

@@ -0,0 +1,14 @@
+.tittle{
+  font-size: 20px;
+  text-align: center;
+  margin-bottom: 20px;
+}
+
+.selectlist {
+  margin-left: 25px;
+}
+
+.selectlist>.ant-checkbox-wrapper {
+  width: 80%;
+  margin: 5px 0;
+}

+ 175 - 0
js/component/common/mysuspend/selectList.jsx

@@ -0,0 +1,175 @@
+import React, { Component } from "react";
+import { Button, Modal, Checkbox, } from "antd";
+import $ from "jquery/src/ajax";
+import "./index.less";
+import MySuspend from './index'; // 项目暂停
+
+class SelectList extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      plainOptions: [], // 多选渲染数据
+      checkedList: [],  // 选中数据的id
+      checkedValues: [], // 渲染数据的id 
+      selectedRows: [], // 项目暂停用到的选中数据
+      indeterminate: false,
+      checkAll: false,
+      suspendVisible: false,
+    };
+    this.onCheckAllChange = this.onCheckAllChange.bind(this);
+    this.onChange = this.onChange.bind(this);
+    this.onOk = this.onOk.bind(this);
+    this.subClose = this.subClose.bind(this);
+  }
+
+  componentDidMount() {
+    const { list = [], type } = this.props;
+    let options = [];
+    let defaultValue = [];
+    let arr = [];
+    if (type == "suspend") {
+      // 项目暂停
+      arr = list.filter(v => {
+        return (v.projectStopStatus == 0 && v.projectStatus != 29)
+      });
+    } else if (type == "restart") {
+      // 项目重启
+      arr = list.filter(v => {
+        return (v.stopType == 0 && v.stopStatus == 1)
+      });
+    }
+    arr.forEach(item => {
+      let obj = {
+        label: item.commodityName + "-" + item.id,
+        value: item.id
+      };
+      options.push(obj)
+      defaultValue.push(item.id)
+    })
+    this.setState({
+      plainOptions: options,
+      checkedValues: defaultValue,
+    })
+  }
+  // 全选
+  onCheckAllChange(e) {
+    const { checkedValues } = this.state
+    this.setState({
+      checkedList: e.target.checked ? checkedValues : [],
+      indeterminate: false,
+      checkAll: e.target.checked,
+    });
+  }
+  // 单选操作
+  onChange(checkedList) {
+    const { checkedValues } = this.state
+    this.setState({
+      checkedList,
+      indeterminate: !!checkedList.length && (checkedList.length < checkedValues.length),
+      checkAll: checkedList.length === checkedValues.length,
+    });
+  }
+  // 确定
+  onOk() {
+    const { list } = this.props;
+    const { checkedList } = this.state
+    let rows = [];
+    for (var i = 0; i < list.length; i++) {
+      for (var j = 0; j < checkedList.length; j++) {
+        if (list[i].id == checkedList[j]) {
+          let obj = {
+            commodityName: list[i].commodityName,
+            id: list[i].id
+          }
+          rows.push(obj)
+        }
+      }
+    }
+    this.setState({
+      selectedRows: rows,
+      suspendVisible: true
+    })
+  }
+  // 关闭
+  subClose() {
+    const { subClose } = this.props
+    this.setState({
+      suspendVisible: false,
+    }, () => {
+      subClose()
+    })
+  }
+
+
+  render() {
+    const { plainOptions, checkedValues, indeterminate, checkAll, checkedList } = this.state
+    const { visible, subClose, } = this.props
+    const CheckboxGroup = Checkbox.Group;
+    return (
+      <Modal
+        maskClosable={false}
+        visible={visible}
+        width={"520px"}
+        title="请勾选"
+        footer=""
+        onCancel={subClose}
+      >
+        <div>
+          {
+            plainOptions.length == 0
+              ? <div
+                style={{
+                  margin: 50,
+                  color: "red",
+                  fontSize: "24px",
+                  textAlign: "center"
+                }}
+              >暂无可操作的项目</div>
+              : <div>
+                <Checkbox
+                  indeterminate={indeterminate}
+                  onChange={this.onCheckAllChange}
+                  checked={checkAll}>
+                  全选
+                </Checkbox>
+                <CheckboxGroup
+                  className={"selectlist"}
+                  options={plainOptions}
+                  value={checkedList}
+                  onChange={this.onChange}
+                />
+              </div>
+          }
+          <div style={{ height: 30 }}>
+            <Button
+              disabled={checkedList.length == 0}
+              type="primary"
+              style={{
+                float: "right",
+              }}
+              onClick={this.onOk}
+            >
+              确定
+            </Button>
+          </div>
+        </div>
+        {
+          this.state.suspendVisible &&
+          <MySuspend
+            type={this.props.type}
+            title={this.props.type == "suspend" ? "项目暂停" : "项目重启"}
+            contractNo={this.props.contractNo}
+            orderNo={this.props.orderNo}
+            userName={this.props.userName}
+            selectedRowKeys={this.state.checkedList}
+            selectedRows={this.state.selectedRows}
+            visible={this.state.suspendVisible}
+            subClose={this.subClose}
+          />
+        }
+      </Modal>
+    );
+  }
+}
+
+export default SelectList;

+ 60 - 60
js/component/common/nowProjectStatus/type.jsx

@@ -4,18 +4,18 @@ const highTechColumnsVIP =[
         id:1,
         name:'进行中',
     },
-    {
-        id:2,
-        name:'暂停(客户通知暂停)',
-        valueType:['date'],
-        explain:'需上传截图证明'
-    },
-    {
-        id:3,
-        name:'暂停(业务线、总经理通知暂停)',
-        valueType:['date'],
-        explain:'需上传截图证明'
-    },
+    // {
+    //     id:2,
+    //     name:'暂停(客户通知暂停)',
+    //     valueType:['date'],
+    //     explain:'需上传截图证明'
+    // },
+    // {
+    //     id:3,
+    //     name:'暂停(业务线、总经理通知暂停)',
+    //     valueType:['date'],
+    //     explain:'需上传截图证明'
+    // },
     {
         id:21,
         name:'第1年进行中',
@@ -69,18 +69,18 @@ const highTechColumns =[
         id:1,
         name:'进行中',
     },
-    {
-        id:2,
-        name:'暂停(客户通知暂停)',
-        valueType:['date'],
-        explain:'需上传截图证明'
-    },
-    {
-        id:3,
-        name:'暂停(业务线、总经理通知暂停)',
-        valueType:['date'],
-        explain:'需上传截图证明'
-    },
+    // {
+    //     id:2,
+    //     name:'暂停(客户通知暂停)',
+    //     valueType:['date'],
+    //     explain:'需上传截图证明'
+    // },
+    // {
+    //     id:3,
+    //     name:'暂停(业务线、总经理通知暂停)',
+    //     valueType:['date'],
+    //     explain:'需上传截图证明'
+    // },
     {
         id:4,
         name:'已提交',
@@ -142,18 +142,18 @@ const science = [
         id:1,
         name:'进行中',
     },
-    {
-        id:2,
-        name:'暂停(客户通知暂停)',
-        valueType:['date'],
-        explain:'需上传截图证明'
-    },
-    {
-        id:3,
-        name:'暂停(业务线、总经理通知暂停)',
-        valueType:['date'],
-        explain:'需上传截图证明'
-    },
+    // {
+    //     id:2,
+    //     name:'暂停(客户通知暂停)',
+    //     valueType:['date'],
+    //     explain:'需上传截图证明'
+    // },
+    // {
+    //     id:3,
+    //     name:'暂停(业务线、总经理通知暂停)',
+    //     valueType:['date'],
+    //     explain:'需上传截图证明'
+    // },
     {
         id:4,
         name:'已提交',
@@ -216,18 +216,18 @@ const patent = [
         id:1,
         name:'进行中',
     },
-    {
-        id:2,
-        name:'暂停(客户通知暂停)',
-        valueType:['date'],
-        explain:'需上传截图证明'
-    },
-    {
-        id:3,
-        name:'暂停(业务线、总经理通知暂停)',
-        valueType:['date'],
-        explain:'需上传截图证明'
-    },
+    // {
+    //     id:2,
+    //     name:'暂停(客户通知暂停)',
+    //     valueType:['date'],
+    //     explain:'需上传截图证明'
+    // },
+    // {
+    //     id:3,
+    //     name:'暂停(业务线、总经理通知暂停)',
+    //     valueType:['date'],
+    //     explain:'需上传截图证明'
+    // },
     {
         id:4,
         name:'已提交',
@@ -261,18 +261,18 @@ const currency = [
         id:1,
         name:'进行中',
     },
-    {
-        id:2,
-        name:'暂停(客户通知暂停)',
-        valueType:['date'],
-        explain:'需上传截图证明'
-    },
-    {
-        id:3,
-        name:'暂停(业务线、总经理通知暂停)',
-        valueType:['date'],
-        explain:'需上传截图证明'
-    },
+    // {
+    //     id:2,
+    //     name:'暂停(客户通知暂停)',
+    //     valueType:['date'],
+    //     explain:'需上传截图证明'
+    // },
+    // {
+    //     id:3,
+    //     name:'暂停(业务线、总经理通知暂停)',
+    //     valueType:['date'],
+    //     explain:'需上传截图证明'
+    // },
     {
         id:4,
         name:'已提交',

+ 1 - 1
js/component/common/projectOperation/newAddProject.jsx

@@ -62,7 +62,7 @@ const PicturesWall = React.createClass({
           domId={this.props.domId}
           uploadConfig={{
             action: globalConfig.context + "/api/admin/orderProject/uploadMemberFile",
-            data: { sign: "order_invoice_file" },
+            data: { sign: "memberFile" },
             multiple: true,
             listType: "picture-card",
           }}

+ 17 - 13
js/component/dataDic.js

@@ -3851,12 +3851,8 @@ module.exports = {
       label: '进行中',
     },
     {
-      value: 2,
-      label: '暂停(客户通知暂停)',
-    },
-    {
-      value: 3,
-      label: '暂停(业务线、总经理通知暂停)',
+      value: 29,
+      label: '暂停',
     },
     {
       value: 4,
@@ -3958,6 +3954,14 @@ module.exports = {
       value: 28,
       label: '抽查未备案',
     },
+    {
+      value: 2,
+      label: '暂停(客户通知暂停)',
+    },
+    {
+      value: 3,
+      label: '暂停(业务线、总经理通知暂停)',
+    },
   ],
   //转交类型
   transferType: [
@@ -4118,13 +4122,13 @@ module.exports = {
     '2027', '2028', '2029', '2030', '2031',
   ],
   // 巴权限
-  roleList:[
-    {value: "1", key: "管理者",},
-    {value: "2", key: "大区总",},
-    {value: "3", key: "事业部总",},
-    {value: "4", key: "战区总",},
-    {value: "5", key: "巴主",},
-    {value: "6", key: "小巴主",},
+  roleList: [
+    { value: "1", key: "管理者", },
+    { value: "2", key: "大区总", },
+    { value: "3", key: "事业部总", },
+    { value: "4", key: "战区总", },
+    { value: "5", key: "巴主", },
+    { value: "6", key: "小巴主", },
     // {value: "7", key: "巴员",},
   ],
 };

+ 19 - 2
js/component/manageCenter/order/content.jsx

@@ -32,11 +32,28 @@ class Content extends Component {
   }
   getKey(key) {
     switch (key) {
+      //项目暂停&重启审核
+      case "suspendexamine":
+        require.ensure([], () => {
+          const SuspendExamine = require("./orderNew/suspendexamine").default;
+          this.setState({
+            component: <SuspendExamine />,
+          });
+        });
+        break;
+      //我的暂停项目
+      case "mysuspend":
+        require.ensure([], () => {
+          const MySuspend = require("./orderNew/mysuspend").default;
+          this.setState({
+            component: <MySuspend />,
+          });
+        });
+        break;
       //我的会员项目
       case "myprojectvip":
         require.ensure([], () => {
-          const MyProjectVip = require("./orderNew/myprojectvip")
-            .default;
+          const MyProjectVip = require("./orderNew/myprojectvip").default;
           this.setState({
             component: <MyProjectVip />,
           });

+ 111 - 89
js/component/manageCenter/order/orderNew/addService.jsx

@@ -54,6 +54,7 @@ import {
   getProjectName,
   moneyVerify,
   getProcessStatusNew,
+  stopStatus,
 } from "../../../tools.js";
 import PicturesWall from "./changeComponent/picturesWall.js";
 import { getChangeType } from "./changeComponent/changeDetailYxgly";
@@ -66,6 +67,8 @@ import NewAddProject from "../../../common/projectOperation/newAddProject"
 import NewEditProject from "../../../common/projectOperation/newEditProject"
 import { instanceOf } from "prop-types";
 import UpdateSales from './updatesales';
+import SelectList from '../../../common/mysuspend/selectList'; //
+
 const Option = AutoComplete.Option;
 const confirm = Modal.confirm;
 const RadioGroup = Radio.Group;
@@ -79,6 +82,9 @@ const NewService = Form.create()(
       this.setState({
         loading: true,
       });
+      if (!record && !this.props.datauser.orderNo) {
+        return
+      }
       $.ajax({
         method: "get",
         dataType: "json",
@@ -347,18 +353,6 @@ const NewService = Form.create()(
                 return (
                   <span>
                     {text}{" "}
-                    {/* {
-                      record.cSort != 6 &&
-                      <Tag
-                        color="#108ee9"
-                        onClick={(e) => {
-                          e.stopPropagation();
-                          this.showRes(record);
-                        }}
-                      >
-                        已拆
-                      </Tag>
-                    } */}
                   </span>
                 );
               } else {
@@ -386,7 +380,6 @@ const NewService = Form.create()(
             title: "项目状态",
             dataIndex: "projectStatus",
             key: "projectStatus",
-            width: 60,
             render: (text) => {
               return getProjectName(text);
             },
@@ -414,12 +407,8 @@ const NewService = Form.create()(
             title: "年限",
             dataIndex: "serviceLife",
             key: "serviceLife",
-
             render: (text, record) => {
               return (
-                // !!text && JSON.parse(text).map(item =>
-                //   <div>{item}</div>
-                // )
                 <div>{!!text && JSON.parse(text).toString()}</div>
               );
             }
@@ -460,31 +449,37 @@ const NewService = Form.create()(
             width: 80,
             render: (text, record) => {
               return (
-                this.state.processStatus == 0 &&
                 <div>
-                  <div>
-                    <Button
-                      onClick={(e) => {
-                        e.stopPropagation();
-                        this.showConfirm(this.delectRow, record);
-                        this.setState({
-                          addFlag: false,
-                        });
-                      }}
-                    >
-                      删除
-                    </Button>
-                  </div>
-                  <div>
-                    <Button
-                      onClick={(e) => {
-                        e.stopPropagation();
-                        this.tableRowClick(record)
-                      }}
-                    >
-                      编辑
-                    </Button>
-                  </div>
+                  {stopStatus(record.stopType, record.stopStatus)}
+                  {
+                    this.state.processStatus == 0 &&
+                    <div>
+                      <Button
+                        onClick={(e) => {
+                          e.stopPropagation();
+                          this.showConfirm(this.delectRow, record);
+                          this.setState({
+                            addFlag: false,
+                          });
+                        }}
+                      >
+                        删除
+                      </Button>
+                    </div>
+                  }
+                  {
+                    this.state.processStatus == 0 &&
+                    <div>
+                      <Button
+                        onClick={(e) => {
+                          e.stopPropagation();
+                          this.tableRowClick(record)
+                        }}
+                      >
+                        编辑
+                      </Button>
+                    </div>
+                  }
                 </div>
               );
             },
@@ -1978,6 +1973,8 @@ const NewService = Form.create()(
         isGive: 0,//是否赠送
         cPeriod: false, // 合同期是否可编辑
         isNew: false,// 是否替换合同
+        sType: "",
+        selectList: [],// 可操作项目集
       };
     },
     getpatentTypeList() {
@@ -3871,8 +3868,9 @@ const NewService = Form.create()(
         costReduction: "",
       });
     },
-    componentWillReceiveProps(nextProps) {
-      //props改变时触发
+
+    componentWillMount(){
+      const nextProps = this.props
       this.state.visible = nextProps.showDesc;
       this.state.signBillVisible = nextProps.signBillVisible;
       if (this.state.signBillVisible) {
@@ -3906,6 +3904,10 @@ const NewService = Form.create()(
         });
       }
     },
+
+    // componentWillReceiveProps(nextProps) {
+    //   //props改变时触发
+    // },
     //查看变更记录
     getChangeData(record) {
       this.setState({
@@ -5028,6 +5030,13 @@ const NewService = Form.create()(
       this.setState({ serviceLife, serviceYear: undefined });
     },
 
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.setState({
+        selectedRowKeys,
+        selectedRows,
+      });
+    },
+
 
     render() {
       const expandedRowRender = (e) => {
@@ -5061,32 +5070,6 @@ const NewService = Form.create()(
                       >
                         {str}
                       </Tag>
-                      {/* {record.splitStatus == 1 ? (
-                        <Tag
-                          color="#108ee9"
-                        // onClick={e => {
-                        //   e.stopPropagation();
-                        //   this.showRes(record);
-                        // }}
-                        >
-                          父项目
-                        </Tag>
-                      ) : (
-                        ""
-                      )}
-                      {record.splitStatus == 2 ? (
-                        <Tag
-                          color="#108ee9"
-                        // onClick={e => {
-                        //   e.stopPropagation();
-                        //   this.showRes(record);
-                        // }}
-                        >
-                          子项目
-                        </Tag>
-                      ) : (
-                        ""
-                      )} */}
                     </span>
                   );
                 },
@@ -5228,24 +5211,6 @@ const NewService = Form.create()(
                       >
                         {str}
                       </Tag>
-                      {/* {record.splitStatus == 1 ? (
-                        <Tag
-                          color="#108ee9"
-                        >
-                          父项目
-                        </Tag>
-                      ) : (
-                        ""
-                      )}
-                      {record.splitStatus == 2 ? (
-                        <Tag
-                          color="#108ee9"
-                        >
-                          子项目
-                        </Tag>
-                      ) : (
-                        ""
-                      )} */}
                     </span>
                   );
                 },
@@ -5745,7 +5710,7 @@ const NewService = Form.create()(
       let children = vipYear.map(its => (
         <Option key={its}>{its}</Option>
       ));
-      let { closable, isVip, histYear, isEdit } = this.state;
+      let { closable } = this.state;
       let assistList = this.assistList;
       const { addPop = "" } = this.props
       return (
@@ -5762,7 +5727,7 @@ const NewService = Form.create()(
           )}
           <Modal
             maskClosable={false}
-            visible={this.state.visible}
+            visible={this.props.addPop == "add" ? this.props.showDesc : this.state.visible}
             onOk={this.handleOk}
             onCancel={this.handleCancelclose}
             width={!this.props.userDetaile ? "600px" : "1200px"}
@@ -7158,13 +7123,70 @@ const NewService = Form.create()(
                                 添加会员项目
                               </Button>
                             }
+                            {
+                              (this.state.processStatus == 5 || this.state.processStatus == 6) &&
+                              <Button
+                                type="primary"
+                                style={{
+                                  float: "right",
+                                  marginRight: "50px",
+                                  marginBottom: "15px",
+                                }}
+                                onClick={() => {
+                                  this.setState({
+                                    selectVisible: true,
+                                    sType: "restart",
+                                  })
+                                }}
+                              >
+                                项目重启
+                              </Button>
+                            }
+                            {
+                              (this.state.processStatus == 5 || this.state.processStatus == 6) &&
+                              <Button
+                                type="primary"
+                                style={{
+                                  float: "right",
+                                  marginRight: "50px",
+                                  marginBottom: "15px",
+                                }}
+                                onClick={() => {
+                                  this.setState({
+                                    selectVisible: true,
+                                    sType: "suspend",
+                                  })
+                                }}
+                              >
+                                项目暂停
+                              </Button>
+                            }
                           </div>
                           <div
                             className="patent-table"
                             style={{ marginBottom: 10 }}
                           >
                             <Spin spinning={this.state.loading}>
+                              {
+                                // 项目暂停&重启勾选
+                                this.state.selectVisible &&
+                                <SelectList
+                                  type={this.state.sType}
+                                  contractNo={this.state.contractNo}
+                                  orderNo={this.state.orderNo}
+                                  userName={this.state.userName}
+                                  list={this.state.dataSource}
+                                  visible={this.state.selectVisible}
+                                  subClose={() => {
+                                    this.loadData();
+                                    this.setState({
+                                      selectVisible: false,
+                                    })
+                                  }}
+                                />
+                              }
                               <Table
+                                rowKey="id"
                                 columns={this.state.columns}
                                 dataSource={this.state.dataSource}
                                 pagination={this.state.pagination}

+ 19 - 73
js/component/manageCenter/order/orderNew/billing.jsx

@@ -172,6 +172,7 @@ const MyService = Form.create()(
                 deleteSign: thisdata.deleteSign,
                 salesType: thisdata.salesType,
                 other: thisdata.other,
+                stopProject: thisdata.stopProject, //暂停项目  0无 1有
               });
             }
             this.state.pagination.current = data.data.pageNo;
@@ -274,14 +275,7 @@ const MyService = Form.create()(
             render: (text) => {
               return (
                 <Tooltip title={text}>
-                  <div
-                  // style={{
-                  //   maxWidth: "150px",
-                  //   overflow: "hidden",
-                  //   textOverflow: "ellipsis",
-                  //   whiteSpace: "nowrap",
-                  // }}
-                  >
+                  <div>
                     {text}
                   </div>
                 </Tooltip>
@@ -469,7 +463,6 @@ const MyService = Form.create()(
             title: "销售类型",
             dataIndex: "salesType",
             key: "salesType",
-            // width: 70,
             render: (text, record) => {
               return (
                 <Tooltip
@@ -478,6 +471,7 @@ const MyService = Form.create()(
                   <span>
                     {salesList[text]}
                   </span>
+                  {record.stopProject == 1 && <div><Tag color="red">含暂停项目</Tag></div>}
                 </Tooltip>
               );
             },
@@ -2132,26 +2126,28 @@ const MyService = Form.create()(
                   scroll={{ x: 1500, y: 0 }}
                   pagination={this.state.pagination}
                   rowSelection={rowSelection}
-                  onRowClick={this.tableRowClick}
+                  onRowDoubleClick={this.tableRowClick}
                   bordered
                   size="small"
                 />
               </Spin>
             </div>
             <textarea id="copyText" style={{ opacity: 0 }} />
-            <NewService
-              uid={this.state.uid}
-              signBillVisible={this.state.signBillVisible}
-              signBillState={this.state.signBillState}
-              operation={this.operation}
-              admissibleOrder={this.admissibleOrder}
-              userDetaile={this.state.userDetaile}
-              datauser={this.state.datauser}
-              showDesc={this.state.showDesc}
-              closeDesc={this.closeDesc}
-              addPop={this.state.addPop}
-            />
-
+            {
+              this.state.showDesc &&
+              <NewService
+                uid={this.state.uid}
+                signBillVisible={this.state.signBillVisible}
+                signBillState={this.state.signBillState}
+                operation={this.operation}
+                admissibleOrder={this.admissibleOrder}
+                userDetaile={this.state.userDetaile}
+                datauser={this.state.datauser}
+                showDesc={this.state.showDesc}
+                closeDesc={this.closeDesc}
+                addPop={this.state.addPop}
+              />
+            }
             {this.state.avisible ? (
               <Modal
                 maskClosable={false}
@@ -3535,56 +3531,6 @@ const MyService = Form.create()(
                 </Spin>
               </Form>
             </Modal>
-            {/* <Modal
-              visible={this.state.bvisible}
-              footer=""
-              title="开票历史记录"
-              className="admin-desc-content"
-              width="1200px"
-              onCancel={this.inRecordCanl}
-            >
-              <Spin spinning={this.state.loading}>
-                <div
-                  className="patent-table"
-                  ref={e => {
-                    this.refs.kaiPiao = e;
-                  }}
-                >
-                  <Table
-                    columns={this.state.columnsDate}
-                    dataSource={this.state.recordData}
-                    pagination={false}
-                    bordered
-                  />
-                  <div className="clearfix" style={{ marginTop: "20px" }}>
-                    <FormItem
-                      className="half-item"
-                      {...formItemLayout}
-                      label={<span style={{ fontSize: "14px" }}>开票总计</span>}
-                    >
-                      <span>{this.state.sum + "(万元)"}</span>
-                    </FormItem>
-                  </div>
-                  <ReactToPrint
-                    trigger={() => (
-                      <Button
-                        type="primary"
-                        style={{
-                          float: "right",
-                          // marginTop: 10,
-                          position: "absolute",
-                          top: -54,
-                          right: 30
-                        }}
-                      >
-                        打印
-                      </Button>
-                    )}
-                    content={() => this.refs.kaiPiao}
-                  />
-                </div>
-              </Spin>
-            </Modal> */}
             <Modal
               maskClosable={false}
               visible={this.state.cuiVisible}

+ 7 - 7
js/component/manageCenter/order/orderNew/myprojectvip.jsx

@@ -88,12 +88,12 @@ const MyProjectVip = React.createClass({
                   <div style={{ display: "flex" }}>
                     <OrderItemStatus deleteSign={record.deleteSign} />
                     {
-                        record.approval == 1
-                          ? <Tag color="#faa755">特批待审</Tag> : record.approval == 2
-                            ? <Tag color="#ff0000">特批通过</Tag> : record.approval == 4
-                              ? <Tag color="#faa755">特批待审</Tag> : record.approval == 5
-                                ? <Tag color="#ff0000">特批通过</Tag> : ""
-                      }
+                      record.approval == 1
+                        ? <Tag color="#faa755">特批待审</Tag> : record.approval == 2
+                          ? <Tag color="#ff0000">特批通过</Tag> : record.approval == 4
+                            ? <Tag color="#faa755">特批待审</Tag> : record.approval == 5
+                              ? <Tag color="#ff0000">特批通过</Tag> : ""
+                    }
                   </div>
                 </div>
               </Tooltip>
@@ -198,7 +198,7 @@ const MyProjectVip = React.createClass({
           width: 60,
           render: (text, record) => {
             return (
-<div>{!!text && JSON.parse(text).toString()}</div>
+              <div>{!!text && JSON.parse(text).toString()}</div>
             );
           }
         },

+ 607 - 0
js/component/manageCenter/order/orderNew/mysuspend.jsx

@@ -0,0 +1,607 @@
+import React from "react";
+import $ from "jquery/src/ajax";
+import { AutoComplete, Button, Input, Spin, Table, DatePicker, Select, message, Tabs, Tag, Tooltip, Modal } from "antd";
+import { ChooseList } from "../../order/orderNew/chooseList"
+import moment from "moment";
+import ShowModalDiv from "@/showModal.jsx";
+import { getStopStatus } from '@/tools';
+import Cascaders from "../../../common/cascaders";
+import MySuspend from '../../../common/mysuspend';
+import MySuspendLog from '../../../common/logPopup/mysuspendlog';
+
+
+const { TabPane } = Tabs;
+const { RangePicker } = DatePicker;
+
+//我的暂停项目列表
+const MySuspendList = React.createClass({
+
+  //
+  getInitialState() {
+    return {
+      type: "",
+      title: "",
+      visible: false,
+      pageNo: 1,
+      totalPage: 0,
+      searchValues: {},//查询条件
+      loading: false,
+      changeList: undefined,// 子组件改变的表格title数组
+      pagination: {
+        defaultCurrent: 1,
+        defaultPageSize: 10,
+        showQuickJumper: true,
+        pageSize: 10,
+        onChange: function (page) {
+          this.setState({
+            pageNo: page,
+          });
+          this.loadData(page);
+        }.bind(this),
+        showTotal: function (total) {
+          return "共" + total + "条数据";
+        },
+      },
+      columns: [
+        {
+          title: "时间",
+          dataIndex: "createTimes",
+          key: "createTimes",
+          width: 80,
+        },
+        {
+          title: "省份",
+          dataIndex: "province",
+          key: "province"
+        },
+        {
+          title: "合同编号",
+          dataIndex: "contractNo",
+          key: "contractNo",
+          render: (text, record) => {
+            return (
+              <Tooltip
+                title={
+                  <Button
+                    type="primary"
+                    onClick={(e) => {
+                      e.stopPropagation();
+                      let input = document.getElementById("copyText");
+                      input.value = text;
+                      input.select();
+                      document.execCommand("copy");
+                      message.success("复制成功");
+                    }}
+                  >
+                    复制
+                  </Button>
+                }
+              >
+                <div>{text}</div>
+              </Tooltip>
+            );
+          },
+        },
+        {
+          title: "订单编号",
+          dataIndex: "orderNo",
+          key: "orderNo"
+        },
+        {
+          title: "签单客户",
+          dataIndex: "userName",
+          key: "userName"
+        },
+        {
+          title: "项目类型",
+          dataIndex: "cname",
+          key: "cname"
+        },
+        {
+          title: "项目名称",
+          dataIndex: "projectName",
+          key: "projectName"
+        },
+        {
+          title: "数量",
+          dataIndex: "commodityQuantity",
+          key: "commodityQuantity",
+          width: 50,
+        },
+        {
+          title: "服务类型",
+          dataIndex: "serviceType",
+          key: "serviceType"
+        },
+        {
+          title: "咨询师/咨询经理",
+          dataIndex: "receiverName",
+          key: "receiverName"
+        },
+        {
+          title: "项目状态",
+          dataIndex: "stopStatus",
+          key: "stopStatus",
+          render: (value, record) => (
+            <div>
+              {getStopStatus(record.stopType, value)}
+              <div>
+                {
+                  record.stopType == 0 && value == 1 && record.projectStopStatus == 0 &&
+                  <Button
+                    type="primary"
+                    onClick={() => {
+                      this.setState({
+                        title: "项目重启",
+                        type: "restart",
+                        visible: true,
+                        rowData: record,
+                      })
+                    }}
+                  >重启</Button>
+                }
+                {
+                  value == 2 &&
+                  <Button
+                    type="primary"
+                    onClick={() => {
+                      this.setState({
+                        type: record.stopType == 0
+                          ? "suspend" : record.stopType == 1
+                            ? "restart" : "",
+                        visible: true,
+                        rowData: record,
+                        again: true,
+                      })
+                    }}
+                  >重新发起</Button>
+                }
+              </div>
+            </div>
+          )
+        },
+        {
+          title: "项目金额",
+          dataIndex: "commodityPrice",
+          key: "commodityPrice"
+        },
+        {
+          title: "原因",
+          dataIndex: "reason",
+          key: "reason",
+          width: 250,
+        },
+        {
+          title: "日志",
+          dataIndex: "rz",
+          key: "rz",
+          width: 90,
+          render: (text, record) => (
+            <div>
+              <MySuspendLog id={record.id} stopType={record.stopType} />
+            </div>
+          )
+        }
+      ],
+      dataSource: [],
+      rowData: {},
+    };
+  },
+
+  componentWillMount() {
+    this.loadData();
+  },
+
+  // 列表数据
+  loadData(pageNo, pageSize) {
+    const { searchValues, pagination } = this.state
+    this.setState({
+      loading: true,
+    });
+    let datas = Object.assign(searchValues, {
+      pageNo: pageNo || 1,
+      pageSize: pageSize || 10,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/orderProject/selectProjectStop",
+      data: datas,
+      success: function (data) {
+        this.setState({
+          loading: false,
+        });
+        if (data.error && data.error.length === 0) {
+          if (data.data.list) {
+            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,
+              totalPage: data.data.totalPage,
+            });
+          } else {
+            this.setState({
+              dataSource: data.data,
+              pagination: false,
+            });
+          }
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+  // 导出当前列表
+  exportAll() {
+    const { searchValues } = this.state
+    message.config({
+      duration: 20,
+    });
+    let loading = message.loading("下载中...");
+    this.setState({
+      exportPendingLoading: true,
+    });
+    let data = Object.assign(searchValues, {
+      pageNo: 1,
+      pageSize: 9999,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: "/api/admin/orderProject/selectProjectStop/export",
+      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;
+  },
+  // 更改表格显示数据
+  changeList(arr) {
+    const newArr = [];
+    this.state.columns.forEach((item) => {
+      arr.forEach((val) => {
+        if (val === item.title) {
+          newArr.push(item);
+        }
+      });
+    });
+    this.setState({
+      changeList: newArr,
+    });
+  },
+  // 查询订单负责人列表
+  followUp(e) {
+    const { searchValues } = this.state;
+    this.setState({
+      searchValues: Object.assign(searchValues, {
+        aname: 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, {
+        receiverId: newdataSources.find((item) => item.name == value).id,
+      }),
+    });
+  },
+  // 失去焦点
+  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,
+    });
+  },
+  // 双击查看详情
+  tableRowClick(record) {
+    this.setState({
+      visible: true,
+      type: "details",
+      rowData: record,
+    })
+  },
+  // 搜索
+  search() {
+    this.setState({
+      selectedRowKeys: []
+    })
+    this.loadData();
+  },
+  // 重置
+  reset() {
+    this.setState({
+      pageNo: 1,
+      searchValues: JSON.parse(JSON.stringify({})),
+    }, () => {
+      this.Cascaders.empty();
+      this.loadData();
+    })
+  },
+
+  render() {
+    const { searchValues, rowData } = this.state
+    const dataSources = this.state.fjlist || [];
+    const options = dataSources.map((group) => (
+      <Select.Option key={group.id} value={group.name}>
+        {group.name}
+      </Select.Option>
+    ));
+    return (
+      <div className="user-content">
+        <ShowModalDiv ShowModal={this.state.showModal} />
+        <div className="content-title" style={{ marginBottom: 10 }}>
+          <span style={{ fontWeight: 900, fontSize: 16 }}>我的暂停项目</span>
+        </div>
+        <Tabs defaultActiveKey="1" onChange={this.callback} className="test">
+          <TabPane tab="搜索" key="1">
+            <div className="user-search" style={{ marginLeft: 10 }}>
+              <Input
+                placeholder="订单编号"
+                style={{ width: 160 }}
+                value={searchValues["orderNo"]
+                  ? searchValues["orderNo"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["orderNo"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Input
+                placeholder="客户名称"
+                style={{ width: 160 }}
+                value={searchValues["userName"]
+                  ? searchValues["userName"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["userName"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Cascaders
+                ref={node => this.Cascaders = node}
+                placeholder="订单部门"
+                id="id"
+                name="name"
+                children="list"
+                height={28}
+                onSel={(e) => {
+                  searchValues["deps"] = JSON.stringify(e);
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Input
+                placeholder="合同编号"
+                style={{ width: 160 }}
+                value={searchValues["contractNo"]
+                  ? searchValues["contractNo"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["contractNo"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Input
+                placeholder="项目名称"
+                style={{ width: 160 }}
+                value={searchValues["projectName"]
+                  ? searchValues["projectName"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["projectName"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Select
+                style={{ width: 120 }}
+                placeholder="项目暂停状态"
+                value={searchValues["status"]
+                  ? searchValues["status"]
+                  : undefined}
+                onChange={(e) => {
+                  searchValues["status"] = 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>
+                <Option value="5">重启已驳回</Option>
+              </Select>
+              <AutoComplete
+                dropdownMatchSelectWidth={false}
+                style={{ width: 160 }}
+                dataSource={options}
+                placeholder="咨询师/经理"
+                value={searchValues.aname || undefined}
+                onChange={this.followUp.bind(this)}
+                filterOption={true}
+                onBlur={this.blurChange}
+                onSelect={this.selectF.bind(this)}
+              >
+                <Input />
+              </AutoComplete>
+              <RangePicker
+                style={{ width: 200 }}
+                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={{ marginLeft: 10 }}
+                disabled={this.state.loading ? true : false}
+              >
+                搜索
+              </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>
+          <TabPane tab="导出Excel" key="3">
+            <Button
+              type="primary"
+              style={{ margin: "11px 0px 10px 10px" }}
+              onClick={this.exportAll}
+            >
+              导出当前列表
+            </Button>
+          </TabPane>
+        </Tabs>
+        <div className="patent-table">
+          <Spin spinning={this.state.loading}>
+            <Table
+              bordered
+              columns={
+                this.state.changeList == undefined
+                  ? this.state.columns
+                  : this.state.changeList
+              }
+              dataSource={this.state.dataSource}
+              pagination={this.state.pagination}
+              onRowDoubleClick={this.tableRowClick.bind(this)}
+              size="small"
+            />
+          </Spin>
+        </div>
+        <textarea id="copyText" style={{ opacity: 0 }} />
+        {
+          // 项目详情
+          this.state.visible &&
+          <MySuspend
+            type={this.state.type}
+            title={!this.state.title
+              ? (rowData.stopType == 0 ? "项目暂停" : "项目重启")
+              : this.state.title}
+            contractNo={rowData.contractNo}
+            orderNo={rowData.orderNo}
+            userName={rowData.userName}
+            reason={rowData.reason}
+            annexUrl={rowData.annexUrl}
+            rowData={rowData}
+            selectedRowKeys={[rowData.tid]}//项目发起id
+            again={this.state.again} //是否为驳回重新发起
+            selectedRows={[{ "commodityName": rowData.projectName, "id": rowData.tid }]}
+            visible={this.state.visible}
+            subClose={() => {
+              this.loadData(this.state.pageNo);
+              this.setState({
+                visible: false,
+                again: false,
+                rowData: {},
+                type: "",
+                title: "",
+              })
+            }}
+          />
+        }
+      </div>
+    );
+  },
+});
+
+export default MySuspendList;

+ 532 - 0
js/component/manageCenter/order/orderNew/suspendexamine.jsx

@@ -0,0 +1,532 @@
+import React from "react";
+import $ from "jquery/src/ajax";
+import { AutoComplete, Button, Input, Spin, Table, DatePicker, Select, message, Tabs, Form, Tooltip, Modal } from "antd";
+import { ChooseList } from "../../order/orderNew/chooseList"
+import moment from "moment";
+import ShowModalDiv from "@/showModal.jsx";
+import { getStopStatus } from '@/tools';
+import Cascaders from "../../../common/cascaders";
+import MySuspend from '../../../common/mysuspend';
+import MySuspendLog from '../../../common/logPopup/mysuspendlog';
+
+
+const { TabPane } = Tabs;
+const { RangePicker } = DatePicker;
+const FormItem = Form.Item;
+
+//项目暂停&重启审核
+const SuspendExamine = React.createClass({
+
+  //
+  getInitialState() {
+    return {
+      visible: false,
+      pageNo: 1,
+      totalPage: 0,
+      searchValues: {},//查询条件
+      loading: false,
+      changeList: undefined,// 子组件改变的表格title数组
+      pagination: {
+        defaultCurrent: 1,
+        defaultPageSize: 10,
+        showQuickJumper: true,
+        pageSize: 10,
+        onChange: function (page) {
+          this.setState({
+            pageNo: page,
+          });
+          this.loadData(page);
+        }.bind(this),
+        showTotal: function (total) {
+          return "共" + total + "条数据";
+        },
+      },
+      columns: [
+        {
+          title: "时间",
+          dataIndex: "createTimes",
+          key: "createTimes",
+          width: 80,
+        },
+        {
+          title: "省份",
+          dataIndex: "province",
+          key: "province"
+        },
+        {
+          title: "合同编号",
+          dataIndex: "contractNo",
+          key: "contractNo",
+          render: (text, record) => {
+            return (
+              <Tooltip
+                title={
+                  <Button
+                    type="primary"
+                    onClick={(e) => {
+                      e.stopPropagation();
+                      let input = document.getElementById("copyText");
+                      input.value = text;
+                      input.select();
+                      document.execCommand("copy");
+                      message.success("复制成功");
+                    }}
+                  >
+                    复制
+                  </Button>
+                }
+              >
+                <div>{text}</div>
+              </Tooltip>
+            );
+          },
+        },
+        {
+          title: "订单编号",
+          dataIndex: "orderNo",
+          key: "orderNo"
+        },
+        {
+          title: "签单客户",
+          dataIndex: "userName",
+          key: "userName"
+        },
+        {
+          title: "项目类型",
+          dataIndex: "cname",
+          key: "cname"
+        },
+        {
+          title: "项目名称",
+          dataIndex: "projectName",
+          key: "projectName"
+        },
+        {
+          title: "数量",
+          dataIndex: "commodityQuantity",
+          key: "commodityQuantity",
+          width: 50,
+        },
+        {
+          title: "服务类型",
+          dataIndex: "serviceType",
+          key: "serviceType"
+        },
+        {
+          title: "咨询师/咨询经理",
+          dataIndex: "receiverName",
+          key: "receiverName"
+        },
+        {
+          title: "项目状态",
+          dataIndex: "stopStatus",
+          key: "stopStatus",
+          render: (value, record) => (
+            <div>
+              {getStopStatus(record.stopType, value)}
+              <div>
+                {
+                  value == 0 &&
+                  <Button
+                    type="primary"
+                    onClick={() => {
+                      this.setState({
+                        visible: true,
+                        rowData: record,
+                      })
+                    }}
+                  >审核</Button>
+                }
+              </div>
+            </div>
+          )
+        },
+        {
+          title: "项目金额",
+          dataIndex: "commodityPrice",
+          key: "commodityPrice"
+        },
+        {
+          title: "原因",
+          dataIndex: "reason",
+          key: "reason",
+          width: 250,
+        },
+        {
+          title: "日志",
+          dataIndex: "rz",
+          key: "rz",
+          width: 90,
+          render: (text, record) => (
+            <div>
+              <MySuspendLog id={record.id} stopType={record.stopType} />
+            </div>
+          )
+        }
+      ],
+      dataSource: [],
+      rowData: {},
+    };
+  },
+
+  componentWillMount() {
+    this.loadData();
+  },
+
+  // 列表数据
+  loadData(pageNo, pageSize) {
+    const { searchValues, pagination } = this.state
+    this.setState({
+      loading: true,
+    });
+    let datas = Object.assign(searchValues, {
+      pageNo: pageNo || 1,
+      pageSize: pageSize || 10,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/orderProject/selectProjectStop",
+      data: datas,
+      success: function (data) {
+        this.setState({
+          loading: false,
+        });
+        if (data.error && data.error.length === 0) {
+          if (data.data.list) {
+            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,
+              totalPage: data.data.totalPage,
+            });
+          } else {
+            this.setState({
+              dataSource: data.data,
+              pagination: false,
+            });
+          }
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+  // 更改表格显示数据
+  changeList(arr) {
+    const newArr = [];
+    this.state.columns.forEach((item) => {
+      arr.forEach((val) => {
+        if (val === item.title) {
+          newArr.push(item);
+        }
+      });
+    });
+    this.setState({
+      changeList: newArr,
+    });
+  },
+  // 查询订单负责人列表
+  followUp(e) {
+    const { searchValues } = this.state;
+    this.setState({
+      searchValues: Object.assign(searchValues, {
+        aname: 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, {
+        receiverId: newdataSources.find((item) => item.name == value).id,
+      }),
+    });
+  },
+  // 失去焦点
+  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,
+    });
+  },
+  // 双击行
+  tableRowClick(record) {
+    this.setState({
+      visible: true,
+      rowData: record,
+    })
+  },
+  // 搜索
+  search() {
+    this.setState({
+      selectedRowKeys: []
+    })
+    this.loadData();
+  },
+  // 重置
+  reset() {
+    this.setState({
+      pageNo: 1,
+      searchValues: JSON.parse(JSON.stringify({})),
+    }, () => {
+      this.Cascaders.empty();
+      this.loadData();
+    })
+  },
+
+
+  render() {
+    const { searchValues, rowData } = this.state
+    const dataSources = this.state.fjlist || [];
+    const options = dataSources.map((group) => (
+      <Select.Option key={group.id} value={group.name}>
+        {group.name}
+      </Select.Option>
+    ));
+    return (
+      <div className="user-content">
+        <ShowModalDiv ShowModal={this.state.showModal} />
+        <div className="content-title" style={{ marginBottom: 10 }}>
+          <span style={{ fontWeight: 900, fontSize: 16 }}>审核暂停&重启项目</span>
+        </div>
+        <Tabs defaultActiveKey="1" onChange={this.callback} className="test">
+          <TabPane tab="搜索" key="1">
+            <div className="user-search" style={{ marginLeft: 10 }}>
+              <Input
+                placeholder="订单编号"
+                style={{ width: 160 }}
+                value={searchValues["orderNo"]
+                  ? searchValues["orderNo"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["orderNo"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Input
+                placeholder="客户名称"
+                style={{ width: 160 }}
+                value={searchValues["userName"]
+                  ? searchValues["userName"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["userName"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Cascaders
+                ref={node => this.Cascaders = node}
+                placeholder="订单部门"
+                id="id"
+                name="name"
+                children="list"
+                height={28}
+                onSel={(e) => {
+                  searchValues["deps"] = JSON.stringify(e);
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Input
+                placeholder="合同编号"
+                style={{ width: 160 }}
+                value={searchValues["contractNo"]
+                  ? searchValues["contractNo"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["contractNo"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Input
+                placeholder="项目名称"
+                style={{ width: 160 }}
+                value={searchValues["projectName"]
+                  ? searchValues["projectName"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["projectName"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Select
+                style={{ width: 120 }}
+                placeholder="项目暂停状态"
+                value={searchValues["status"]
+                  ? searchValues["status"]
+                  : undefined}
+                onChange={(e) => {
+                  searchValues["status"] = 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>
+                <Option value="5">重启已驳回</Option>
+              </Select>
+              <AutoComplete
+                dropdownMatchSelectWidth={false}
+                style={{ width: 160 }}
+                dataSource={options}
+                placeholder="咨询师/经理"
+                value={searchValues.aname || undefined}
+                onChange={this.followUp.bind(this)}
+                filterOption={true}
+                onBlur={this.blurChange}
+                onSelect={this.selectF.bind(this)}
+              >
+                <Input />
+              </AutoComplete>
+              <RangePicker
+                style={{ width: 200 }}
+                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={{ marginLeft: 10 }}
+                disabled={this.state.loading ? true : false}
+              >
+                搜索
+              </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>
+        </Tabs>
+        <div className="patent-table">
+          <Spin spinning={this.state.loading}>
+            <Table
+              bordered
+              columns={
+                this.state.changeList == undefined
+                  ? this.state.columns
+                  : this.state.changeList
+              }
+              dataSource={this.state.dataSource}
+              pagination={this.state.pagination}
+              onRowDoubleClick={this.tableRowClick.bind(this)}
+              size="small"
+            />
+          </Spin>
+        </div>
+        <textarea id="copyText" style={{ opacity: 0 }} />
+        {
+          // 项目详情
+          this.state.visible &&
+          <MySuspend
+            isApproved={true} // 审核权限
+            type="details"
+            title={rowData.stopType == 0 ? "项目暂停" : "项目重启"}
+            contractNo={rowData.contractNo}
+            orderNo={rowData.orderNo}
+            userName={rowData.userName}
+            reason={rowData.reason}
+            annexUrl={rowData.annexUrl}
+            rowData={rowData}
+            selectedRows={[{ "commodityName": rowData.projectName, "id": rowData.id }]}
+            visible={this.state.visible}
+            subClose={() => {
+              this.loadData(this.state.pageNo);
+              this.setState({
+                visible: false,
+                rowData: {},
+              })
+            }}
+          />
+        }
+      </div>
+    );
+  },
+});
+
+export default SuspendExamine;

+ 43 - 32
js/component/manageCenter/project/summary/highTech.jsx

@@ -24,6 +24,7 @@ import {
   audit,
   currency,
 } from "./highTechConfig";
+import { projectStatusList } from "@/dataDic";
 import ProjectDetails from "./projectDetails";
 import Cascaders from "../../../common/cascaders";
 
@@ -140,6 +141,7 @@ class HighTech extends Component {
           projectAmount: this.state.projectAmount || undefined, //项目金额
           status: this.state.status,
           thchId: this.state.thchId || undefined, //咨询师/咨询经理id
+          taskProjectStatus: this.state.taskProjectStatus || undefined,//项目状态
         },
       success: function (data) {
         ShowModal(this);
@@ -194,7 +196,8 @@ class HighTech extends Component {
         columns: currency,
         status: 0,
         thchId: "",
-        auto: ""
+        auto: "",
+        taskProjectStatus: "",
       },
       () => {
         this.Cascaders1.empty();
@@ -296,6 +299,7 @@ class HighTech extends Component {
       declarationBatch: this.state.declarationBatch || undefined, //申报批次
       projectAmount: this.state.projectAmount || undefined, //项目金额
       thchId: this.state.thchId || undefined, //咨询师/咨询经理id
+      taskProjectStatus: this.state.taskProjectStatus || undefined,//项目状态
     };
     $.ajax({
       method: "get",
@@ -463,7 +467,7 @@ class HighTech extends Component {
                   <Input
                     placeholder="订单编号"
                     style={{
-                      width: 150,
+                      width: 220,
                       marginRight: "10px",
                     }}
                     value={this.state.searchOrderNo}
@@ -474,7 +478,7 @@ class HighTech extends Component {
                   <Input
                     placeholder="合同编号"
                     style={{
-                      width: 150,
+                      width: 220,
                       marginRight: "10px",
                     }}
                     value={this.state.searchContractNo}
@@ -485,7 +489,7 @@ class HighTech extends Component {
                   <Input
                     placeholder="企业名称"
                     style={{
-                      width: 150,
+                      width: 220,
                       marginRight: "10px",
                     }}
                     value={this.state.searchEnterpriseName}
@@ -494,12 +498,12 @@ class HighTech extends Component {
                     }}
                   />
                   <span style={{ display: "inline-block" }}>
-                    <span style={{ marginRight: "10px" }}>项目分类 :</span>
+                    <span style={{ marginRight: "10px" }}>项目分类:</span>
                     <Cascader
                       options={this.state.contactsOptionData}
                       value={this.state.newArray}
                       placeholder="请选择"
-                      style={{ width: 200, marginRight: 10 }}
+                      style={{ width: 150, marginRight: 10 }}
                       onChange={(e, pre) => {
                         let first = e[0];
                         let two = e[1];
@@ -642,11 +646,12 @@ class HighTech extends Component {
                       marginRight: "10px",
                     }}
                   >
-                    <span style={{ marginRight: "10px", marginBottom: "10px" }}>订单部门 : </span>
+                    <span style={{ marginRight: "10px", marginBottom: "10px" }}>订单部门:</span>
                     <Cascaders
                       ref={ref => this.Cascaders1 = ref}
                       placeholder="请选择订单部门"
                       height={28}
+                      width={150}
                       onSel={(e) => {
                         this.setState({
                           deps: JSON.stringify(e)
@@ -660,41 +665,22 @@ class HighTech extends Component {
                       marginRight: "10px",
                     }}
                   >
-                    <span style={{ marginRight: "10px", marginBottom: "10px" }}>负责部门 : </span>
+                    <span style={{ marginRight: "10px", marginBottom: "10px" }}>负责部门:</span>
                     <Cascaders
                       ref={ref => this.Cascaders2 = ref}
                       placeholder="请选择负责部门"
                       height={28}
+                      width={150}
                       onSel={(e) => {
                         this.setState({
                           thchDeps: JSON.stringify(e)
                         })
                       }}
                     />
-                    {/* <Select
-                      placeholder="请选择部门"
-                      style={{
-                        width: 200,
-                        marginRight: "10px",
-                        marginLeft: "10px",
-                      }}
-                      value={this.state.thchDepId || undefined}
-                      onChange={(e) => {
-                        this.setState({ thchDepId: e });
-                      }}
-                    >
-                      {this.state.departmentArr.map(function (item) {
-                        return (
-                          <Select.Option key={item.id} value={item.id}>
-                            {item.name}
-                          </Select.Option>
-                        );
-                      })}
-                    </Select> */}
                   </span>
                   <span style={{ display: "inline-block" }}>
                     <span style={{ marginRight: "10px", marginBottom: "10px" }}>
-                      咨询师/经理 :
+                      咨询师/经理:
                     </span>
                     <AutoComplete
                       className="certain-category-search"
@@ -714,7 +700,7 @@ class HighTech extends Component {
                   </span>
                   <span style={{ display: "inline-block" }}>
                     <span style={{ marginRight: "10px", marginBottom: "10px" }}>
-                      申报批次 :
+                      申报批次:
                     </span>
                     <Select
                       value={this.state.declarationBatch || undefined}
@@ -737,7 +723,7 @@ class HighTech extends Component {
                   </span>
                   <span style={{ display: "inline-block" }}>
                     <span style={{ marginRight: "10px" }}>
-                      项目金额 :
+                      项目金额:
                     </span>
                     <Select
                       value={this.state.projectAmount || undefined}
@@ -763,6 +749,30 @@ class HighTech extends Component {
                       <Option value={9}>80万上</Option>
                     </Select>
                   </span>
+                  <span style={{ display: "inline-block" }}>
+                    <span style={{ marginRight: "10px" }}>
+                      项目状态:
+                    </span>
+                    <Select
+                      value={this.state.taskProjectStatus || undefined}
+                      placeholder="请选择项目状态"
+                      style={{
+                        width: 150,
+                        marginRight: "10px",
+                      }}
+                      onChange={(e) => {
+                        this.setState({
+                          taskProjectStatus: e,
+                        });
+                      }}
+                    >
+                      {
+                        projectStatusList.map((item) =>
+                          <Option value={item.value} key={item.value}>{item.label}</Option>
+                        )
+                      }
+                    </Select>
+                  </span>
                   {/*    <span style={{display:"inline-block"}}>*/}
                   {/*    <span style={{marginRight:'10px',marginBottom:'10px'}}>项目情况 :</span>*/}
                   {/*    <Select*/}
@@ -784,9 +794,10 @@ class HighTech extends Component {
                   {/*        <Option value={6}>项目未完成 已退单</Option>*/}
                   {/*    </Select>*/}
                   {/*</span>*/}
+
                   <span style={{ display: "inline-block" }}>
                     <span style={{ marginRight: "10px" }}>
-                      派单时间 :
+                      派单时间:
                     </span>
                     <RangePicker
                       allowClear={false}

+ 18 - 2
js/component/manageCenter/project/task/myTask.jsx

@@ -3556,7 +3556,7 @@ const Task = React.createClass({
             }.bind(this)
         )
     },
-    // 可展开颜色不同
+    //会员 可展开颜色不同
     addRowColor(record) {
         if (!!record.splitList && record.splitList.length > 0) {
             return 'light'
@@ -3564,7 +3564,14 @@ const Task = React.createClass({
             return 'dark'
         }
     },
-
+    // 暂停项目 颜色
+    suspendColor(record) {
+        if (record.projectStatus == 29) {
+            return 'light'
+        } else {
+            return 'dark'
+        }
+    },
 
     render() {
         const expandedRowRenderVip = (e) => {
@@ -3914,6 +3921,7 @@ const Task = React.createClass({
                             pagination={this.state.pagination}
                             scroll={{ x: 'max-content', y: 0 }}
                             onRowClick={this.tableRowClick.bind(this)}
+                            rowClassName={this.suspendColor}
                             bordered
                             size={'small'}
                         />
@@ -4039,6 +4047,10 @@ const Task = React.createClass({
                                                                 marginLeft: '5px',
                                                             }}
                                                             onClick={() => {
+                                                                if (this.state.projectStatus == 29) {
+                                                                    message.warn("项目已暂停,无法修改")
+                                                                    return
+                                                                }
                                                                 this.setState({
                                                                     projectSituationVisible: true,
                                                                 })
@@ -5585,6 +5597,10 @@ const Task = React.createClass({
                                                     marginLeft: '5px',
                                                 }}
                                                 onClick={() => {
+                                                    if (this.state.projectStatus == 29) {
+                                                        message.warn("项目已暂停,无法修改")
+                                                        return
+                                                    }
                                                     this.setState({
                                                         projectSituationVisible: true,
                                                     })

+ 35 - 1
js/component/tools.js

@@ -2155,7 +2155,7 @@ const obj = {
       return v.value === e
     });
     if (arr.length) {
-      return arr[0].label
+      return arr[0].value == 29 ? <Tag color="#FF0000">{arr[0].label}</Tag> : <span>{arr[0].label}</span>
     }
     return '';
   },
@@ -2211,6 +2211,40 @@ const obj = {
       return theType.toString();
     }
   },
+  // 项目状态
+  // 项目暂停类型 0暂停 1重启
+  // 项目暂停状态 0发起 1通过 2拒绝
+  getStopStatus(type, status) {
+    let str = ""
+    str = type == 0 ? "暂停" : "重启"
+    if (status == 0) {
+      return <span>{"项目" + str + "待审核"}</span>
+    } else if (status == 1) {
+      return <span style={{ color: "green" }}>{"项目已" + str}</span>
+    } else if (status == 2) {
+      return <span style={{ color: "red" }}>{"项目" + str + "拒绝"}</span>
+    }
+  },
+  // 
+  stopStatus(type, status) {
+    if (type == 0) {
+      if (status == 0) {
+        return <span style={{ color: "red" }}>暂停待审核</span>
+      } else if (status == 1) {
+        return <span style={{ color: "red" }}>项目已暂停,需重启</span>
+      } else if (status == 2) {
+        return <span style={{ color: "red" }}>暂停被驳回,重新申请暂停</span>
+      }
+    } else if (type == 1) {
+      if (status == 0) {
+        return <span style={{ color: "red" }}>重启待审核</span>
+      } else if (status == 1) {
+        return <span style={{ color: "red" }}>项目已重启</span>
+      } else if (status == 2) {
+        return <span style={{ color: "red" }}>重启被驳回,重新申请重启</span>
+      }
+    }
+  },
 };
 
 

+ 1 - 1
package.json

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