dev01 11 달 전
부모
커밋
dd8b8e800c
55개의 변경된 파일8073개의 추가작업 그리고 2884개의 파일을 삭제
  1. 16 0
      js/admin/standard.js
  2. 16 12
      js/component/common/imgList/index.js
  3. 77 73
      js/component/common/projectOperation/index.jsx
  4. 5 6
      js/component/common/projectOperation/newAddProject.jsx
  5. 34 32
      js/component/common/projectOperation/newEditProject.jsx
  6. 23 1
      js/component/dataDic.js
  7. 12 25
      js/component/manageCenter/components/checkProject/index.jsx
  8. 7 2
      js/component/manageCenter/customer/NEW/intentionCustomer/followDetail.jsx
  9. 5 0
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionCustomer.jsx
  10. 2 2
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/business.jsx
  11. 67 67
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/contactPerson.jsx
  12. 542 517
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/visit.jsx
  13. 162 161
      js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/intentionDetail.jsx
  14. 773 0
      js/component/manageCenter/customer/NEW/intentionCustomer/limit.jsx
  15. 6 0
      js/component/manageCenter/customer/NEW/intentionCustomer/limit.less
  16. 325 97
      js/component/manageCenter/customer/NEW/query/detail.jsx
  17. 25 27
      js/component/manageCenter/customer/NEW/query/queryCutomer.jsx
  18. 1 2
      js/component/manageCenter/customer/NEW/signCustomer/followDetail.jsx
  19. 148 146
      js/component/manageCenter/customer/NEW/signCustomer/followDetail/addContact.jsx
  20. 35 10
      js/component/manageCenter/customer/NEW/signCustomer/signCustomer.jsx
  21. 9 0
      js/component/manageCenter/customer/content.jsx
  22. 601 576
      js/component/manageCenter/customer/customerManagement/adminCustomerStatistics.jsx
  23. 19 0
      js/component/manageCenter/customer/managementFollow/followUpSummary/index.jsx
  24. 33 14
      js/component/manageCenter/customer/publicSummary/index.jsx
  25. 1 1
      js/component/manageCenter/customer/signcustomer/statistics.jsx
  26. 223 221
      js/component/manageCenter/customer/statistics/departmentStatistics/customerDetails.jsx
  27. 39 13
      js/component/manageCenter/customer/statistics/departmentStatistics/index.jsx
  28. 26 9
      js/component/manageCenter/financialManage/account/accountDetaillist.jsx
  29. 1008 37
      js/component/manageCenter/financialManage/account/accountDetails.jsx
  30. 3 0
      js/component/manageCenter/financialManage/account/accountDetails.less
  31. 29 6
      js/component/manageCenter/financialManage/account/accountReview.jsx
  32. 24 1
      js/component/manageCenter/financialManage/account/accountReview.less
  33. 1210 0
      js/component/manageCenter/financialManage/account/accountTotal.jsx
  34. 19 0
      js/component/manageCenter/financialManage/account/index.less
  35. 551 0
      js/component/manageCenter/financialManage/account/publicityAccount.jsx
  36. 18 0
      js/component/manageCenter/financialManage/content.jsx
  37. 4 4
      js/component/manageCenter/financialManage/distribute/public.less
  38. 1 2
      js/component/manageCenter/order/content.jsx
  39. 9 7
      js/component/manageCenter/order/orderNew/addService.jsx
  40. 2 2
      js/component/manageCenter/order/orderNew/changeComponent/orderDetail.js
  41. 328 318
      js/component/manageCenter/project/content.jsx
  42. 0 0
      js/component/manageCenter/project/summary/projecData.jsx
  43. 231 225
      js/component/manageCenter/project/task/businessManagement/checkInfor.jsx
  44. 74 101
      js/component/manageCenter/project/task/myTask.jsx
  45. 62 2
      js/component/manageCenter/set/business/businessProject.jsx
  46. 142 142
      js/component/manageCenter/set/content.jsx
  47. 64 0
      js/component/manageCenter/standard/content.jsx
  48. 112 0
      js/component/manageCenter/standard/content.less
  49. 802 0
      js/component/manageCenter/standard/stList/index.jsx
  50. 106 0
      js/component/manageCenter/standard/stList/index.less
  51. 22 21
      js/component/manageCenter/topTab.jsx
  52. 2 1
      package.json
  53. 6 0
      webpack.config.js
  54. 7 1
      webpack/entry.config.js
  55. 5 0
      yarn.lock

+ 16 - 0
js/admin/standard.js

@@ -0,0 +1,16 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import '../../css/base.less';
+
+import TopTab from '../component/manageCenter/topTab.jsx';
+import Footer from '../component/manageCenter/bottom.jsx';
+import Content from '../component/manageCenter/standard/content.jsx';
+
+ReactDOM.render(
+    <div className="wrap clearfix">
+        <TopTab active={'standard'}/>
+        <Content />
+        <Footer />
+    </div>,
+    document.getElementById('root')
+)

+ 16 - 12
js/component/common/imgList/index.js

@@ -72,6 +72,7 @@ class ImgList extends Component {
   }
 
   beforeUpload(file) {
+    const { isSupportPDF = false } = this.props
     const isLt2M = file.size / 1024 / 1024 < 20;
     if (!isLt2M) {
       message.error('文件大小不能超过 20MB!');
@@ -87,13 +88,16 @@ class ImgList extends Component {
       return isLt2M;
     } else {
       const isJPG = file.type.split('/');
-      // if (isJPG[0] !== 'image' && isJPG[0] !== "application") {
-      //   message.error('只能上传图片或pdf文件!');
-      //   return false;
-      // }
-      if (isJPG[0] !== 'image') {
-        message.error('只能上传图片!');
-        return false;
+      if (isSupportPDF) {
+        if (isJPG[0] !== 'image' && isJPG[0] !== "application") {
+          message.error('只能上传图片或pdf文件!');
+          return false;
+        }
+      } else {
+        if (isJPG[0] !== 'image') {
+          message.error('只能上传图片!');
+          return false;
+        }
       }
       if (isJPG && isLt2M) {
         // 用于计算当次选择的图片数量
@@ -196,11 +200,11 @@ class ImgList extends Component {
                   let url = file.response.data.indexOf("/upload") == -1
                     ? globalConfig.avatarHost + "/upload" + file.response.data
                     : file.response.data
-                  this.setState({
-                    isPDF: true,
-                    file: url,
-                  })
-                  // window.open(url)
+                  // this.setState({
+                  //   isPDF: true,
+                  //   file: url,
+                  // })
+                  window.open(url)
                 } else {
                   if (Object.keys(this.props.uploadConfig).length !== 0) {
                     //TODO 上传组件,查看图片临时解决方法,无法查看下一张

+ 77 - 73
js/component/common/projectOperation/index.jsx

@@ -324,7 +324,7 @@ class ProjectOperation extends Component {
     }
     if (this.state.displayFees === 'block') {
       infor.officialCost = this.state.officialCost //是否有官费
-      infor.costReduction = (this.state.patentType === 0 || this.state.patentType === 2) ? (this.state.officialCost === 1 ? this.state.costReduction : 0) : 0//是否有费减
+      infor.costReduction = (this.state.patentType === 0 || this.state.patentType === 2) ? this.state.costReduction : 0//是否有费减
       infor.patentType = this.state.patentType //专利类型
     }
     if (this.state.isIso) {
@@ -618,81 +618,85 @@ class ProjectOperation extends Component {
                   *
                 </span>
               </FormItem>}
-              <FormItem
-                className="half-item"
-                labelCol={{ span: 3 }}
-                wrapperCol={{ span: 14 }}
-                label="官费:"
-                style={{
-                  display: this.state.displayFees,
-                  marginLeft: "63px",
-                }}
-              >
-                {readOnly
-                  ? (this.state.officialCost === 1 ? '含官费' : this.state.officialCost === 0 ? '不含官费' : '')
-                  : <Radio.Group
-                    value={this.state.officialCost}
-                    onChange={(e) => {
-                      this.setState({ officialCost: e.target.value });
-                      if (e.target.value === 0) {
-                        this.setState({
-                          costReduction: ''
-                        })
-                      }
-                    }}
-                  >
-                    <Radio value={1}>含官费</Radio>
-                    <Radio value={0}>不含官费</Radio>
-                  </Radio.Group>}
-                <span style={{ color: "red", marginLeft: "8px" }}>
-                  *
-                </span>
-              </FormItem>
-              {
-                readOnly ?
-                  <FormItem
-                    className="half-item"
-                    labelCol={{ span: 3 }}
-                    wrapperCol={{ span: 14 }}
-                    label="费减:"
-                    style={{
-                      display: this.state.displayFees,
-                      marginLeft: "63px",
-                    }}
-                  >
-                    {this.state.costReduction === 1 ? '有费减' : this.state.costReduction === 0 ? '无费减' : ''}
-                    <span style={{ color: "red", marginLeft: "8px" }}>
-                      *
-                    </span>
-                  </FormItem>
-                  :
-                  (this.state.patentType === 0 || this.state.patentType === 2) && this.state.officialCost === 1 &&
-                  <FormItem
-                    className="half-item"
-                    labelCol={{ span: 3 }}
-                    wrapperCol={{ span: 14 }}
-                    label="费减:"
-                    style={{
-                      display: this.state.displayFees,
-                      marginLeft: "63px",
-                    }}
-                  >
-                    {/*不含官费或者专利类型不为复审或者申请时置灰*/}
-                    <Radio.Group
-                      disabled={this.state.officialCost === 0 || (this.state.patentType !== 0 && this.state.patentType !== 2)}
-                      value={this.state.costReduction}
+              <div className="clearfix">
+                <FormItem
+                  className="half-item"
+                  labelCol={{ span: 3 }}
+                  wrapperCol={{ span: 14 }}
+                  label="官费:"
+                  style={{
+                    display: this.state.displayFees,
+                    marginLeft: "63px",
+                  }}
+                >
+                  {readOnly
+                    ? (this.state.officialCost === 1 ? '含官费' : this.state.officialCost === 0 ? '不含官费' : '')
+                    : <Radio.Group
+                      value={this.state.officialCost}
                       onChange={(e) => {
-                        this.setState({ costReduction: e.target.value });
+                        this.setState({ officialCost: e.target.value });
+                        if (e.target.value === 0) {
+                          this.setState({
+                            costReduction: ''
+                          })
+                        }
                       }}
                     >
-                      <Radio value={1}>有费减</Radio>
-                      <Radio value={0}>无费减</Radio>
-                    </Radio.Group>
-                    <span style={{ color: "red", marginLeft: "8px" }}>
-                      *
-                    </span>
-                  </FormItem>
-              }
+                      <Radio value={1}>含官费</Radio>
+                      <Radio value={0}>不含官费</Radio>
+                    </Radio.Group>}
+                  <span style={{ color: "red", marginLeft: "8px" }}>
+                    *
+                  </span>
+                </FormItem>
+              </div>
+              <div className="clearfix">
+                {
+                  readOnly ?
+                    <FormItem
+                      className="half-item"
+                      labelCol={{ span: 3 }}
+                      wrapperCol={{ span: 14 }}
+                      label="费减:"
+                      style={{
+                        display: this.state.displayFees,
+                        marginLeft: "63px",
+                      }}
+                    >
+                      {this.state.costReduction === 1 ? '有费减' : this.state.costReduction === 0 ? '无费减' : ''}
+                      <span style={{ color: "red", marginLeft: "8px" }}>
+                        *
+                      </span>
+                    </FormItem>
+                    :
+                    (this.state.patentType === 0 || this.state.patentType === 2) &&
+                    <FormItem
+                      className="half-item"
+                      labelCol={{ span: 3 }}
+                      wrapperCol={{ span: 14 }}
+                      label="费减:"
+                      style={{
+                        display: this.state.displayFees,
+                        marginLeft: "63px",
+                      }}
+                    >
+                      {/*不含官费或者专利类型不为复审或者申请时置灰*/}
+                      <Radio.Group
+                        disabled={this.state.patentType !== 0 && this.state.patentType !== 2}
+                        value={this.state.costReduction}
+                        onChange={(e) => {
+                          this.setState({ costReduction: e.target.value });
+                        }}
+                      >
+                        <Radio value={1}>有费减</Radio>
+                        <Radio value={0}>无费减</Radio>
+                      </Radio.Group>
+                      <span style={{ color: "red", marginLeft: "8px" }}>
+                        *
+                      </span>
+                    </FormItem>
+                }
+              </div>
               <FormItem
                 className="half-item"
                 {...formItemLayout}

+ 5 - 6
js/component/common/projectOperation/newAddProject.jsx

@@ -172,7 +172,7 @@ class NewAddProject extends Component {
         message.warning("请选择官费!");
         return false;
       }
-      if (this.state.costReduction === "" && (this.state.patentType === 0 || this.state.patentType === 2) && this.state.officialCost === 1) {
+      if (this.state.costReduction === "" && (this.state.patentType === 0 || this.state.patentType === 2)) {
         message.warning("请选择费减!");
         return false;
       }
@@ -264,8 +264,7 @@ class NewAddProject extends Component {
     }
     if (this.state.displayFees === 'block') {
       infor.officialCost = this.state.officialCost //是否有官费
-      infor.costReduction = (this.state.patentType === 0 || this.state.patentType === 2) ?
-        (this.state.officialCost === 1 ? this.state.costReduction : 0) : 0//是否有费减
+      infor.costReduction = (this.state.patentType === 0 || this.state.patentType === 2) ? this.state.costReduction : 0//是否有费减
       infor.patentType = this.state.patentType //专利类型
     }
     if (this.state.isIso) {
@@ -808,7 +807,7 @@ class NewAddProject extends Component {
                 </FormItem>
               </div>
               {
-                (this.state.patentType === 0 || this.state.patentType === 2) && this.state.officialCost === 1 &&
+                (this.state.patentType === 0 || this.state.patentType === 2) &&
                 <div className="clearfix">
                   <FormItem
                     className="half-item"
@@ -818,9 +817,9 @@ class NewAddProject extends Component {
                       display: this.state.displayFees,
                     }}
                   >
-                    {/*不含官费或者专利类型不为复审或者申请时置灰*/}
+                    {/*专利类型不为复审或者申请时置灰*/}
                     <Radio.Group
-                      disabled={this.state.officialCost === 0 || (this.state.patentType !== 0 && this.state.patentType !== 2)}
+                      disabled={this.state.patentType !== 0 && this.state.patentType !== 2}
                       value={this.state.costReduction}
                       onChange={(e) => {
                         this.setState({ costReduction: e.target.value });

+ 34 - 32
js/component/common/projectOperation/newEditProject.jsx

@@ -227,7 +227,7 @@ class newEditProject extends Component {
     }
     if (this.state.displayFees === 'block') {
       infor.officialCost = this.state.officialCost //是否有官费
-      infor.costReduction = (this.state.patentType === 0 || this.state.patentType === 2) ? (this.state.officialCost === 1 ? this.state.costReduction : 0) : 0//是否有费减
+      infor.costReduction = (this.state.patentType === 0 || this.state.patentType === 2) ? this.state.costReduction : 0//是否有费减
       infor.patentType = this.state.patentType //专利类型
     }
     if (this.state.isIso) {
@@ -676,24 +676,9 @@ class newEditProject extends Component {
                   </span>
                 </FormItem>
               </div>
-              {
-                readOnly ?
-                  <FormItem
-                    className="half-item"
-                    {...formItemLayout}
-                    label="费减:"
-                    style={{
-                      display: this.state.displayFees,
-                    }}
-                  >
-                    {this.state.costReduction === 1 ? '有费减' : this.state.costReduction === 0 ? '无费减' : ''}
-                    <span style={{ color: "red", marginLeft: "8px" }}>
-                      *
-                    </span>
-                  </FormItem>
-                  :
-                  (this.state.patentType === 0 || this.state.patentType === 2) && this.state.officialCost === 1 &&
-                  <div className="clearfix">
+              <div className="clearfix">
+                {
+                  readOnly ?
                     <FormItem
                       className="half-item"
                       {...formItemLayout}
@@ -702,23 +687,40 @@ class newEditProject extends Component {
                         display: this.state.displayFees,
                       }}
                     >
-                      {/*不含官费或者专利类型不为复审或者申请时置灰*/}
-                      <Radio.Group
-                        disabled={this.state.officialCost === 0 || (this.state.patentType !== 0 && this.state.patentType !== 2)}
-                        value={this.state.costReduction}
-                        onChange={(e) => {
-                          this.setState({ costReduction: e.target.value });
-                        }}
-                      >
-                        <Radio value={1}>有费减</Radio>
-                        <Radio value={0}>无费减</Radio>
-                      </Radio.Group>
+                      {this.state.costReduction === 1 ? '有费减' : this.state.costReduction === 0 ? '无费减' : ''}
                       <span style={{ color: "red", marginLeft: "8px" }}>
                         *
                       </span>
                     </FormItem>
-                  </div>
-              }
+                    :
+                    (this.state.patentType === 0 || this.state.patentType === 2) &&
+                    <div className="clearfix">
+                      <FormItem
+                        className="half-item"
+                        {...formItemLayout}
+                        label="费减:"
+                        style={{
+                          display: this.state.displayFees,
+                        }}
+                      >
+                        {/*不含官费或者专利类型不为复审或者申请时置灰*/}
+                        <Radio.Group
+                          disabled={this.state.patentType !== 0 && this.state.patentType !== 2}
+                          value={this.state.costReduction}
+                          onChange={(e) => {
+                            this.setState({ costReduction: e.target.value });
+                          }}
+                        >
+                          <Radio value={1}>有费减</Radio>
+                          <Radio value={0}>无费减</Radio>
+                        </Radio.Group>
+                        <span style={{ color: "red", marginLeft: "8px" }}>
+                          *
+                        </span>
+                      </FormItem>
+                    </div>
+                }
+              </div>
               {
                 //审计
                 this.state.addProjectType == "3" &&

+ 23 - 1
js/component/dataDic.js

@@ -1423,6 +1423,10 @@ module.exports = {
     //   value: "2",
     //   key: "外联客户",
     // },
+    {
+      value: "3",
+      key: "限定项目",
+    },
   ],
   //销售类型
   ssalesType: [
@@ -2374,7 +2378,7 @@ module.exports = {
     { value: "平台管理", key: "operate" },
     { value: "渠道管理", key: "channelList" },
     { value: "阿米巴", key: "amiba" },
-    { value: "查询管理", key: "povertyInquiry" }
+    { value: "查询管理", key: "povertyInquiry" },
   ],
   //意向进度
   intentProgress: [
@@ -4067,6 +4071,24 @@ module.exports = {
     }, {
       value: 15,
       label: '领取为私有渠道',
+    }, {
+      value: 16,
+      label: '限定项目移除',
+    }, {
+      value: 17,
+      label: '限定项目转交',
+    }, {
+      value: 18,
+      label: '限定项目释放',
+    }, {
+      value: 19,
+      label: '限定项目签单释放',
+    }, {
+      value: 20,
+      label: '限定项目签单',
+    }, {
+      value: 21,
+      label: '领取为限定项目',
     }
   ],
   //消息提醒状态

+ 12 - 25
js/component/manageCenter/components/checkProject/index.jsx

@@ -160,7 +160,7 @@ class CheckProject extends Component {
                 {/*this.props.startType   0外包  1供应商(不需要审核)*/}
                 {/*record.status  0-未支付 1-待全款 ,2已全款  status=2的时候已经全款,按钮可以去掉了*/}
                 <Button disabled={
-                  !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1) && record.status !== 2)
+                  !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1 || parseInt(this.props.startType) === 2) && record.status !== 2)
                 } type="primary" onClick={() => {
                   this.setState({
                     previewPayVisible: true,
@@ -279,7 +279,7 @@ class CheckProject extends Component {
                   {/*0-待审核 ,1-审核通过,2-审核拒绝 true [NULL]*/}
                   {/*this.props.startType   0外包  1供应商(不需要审核)*/}
                   <Button disabled={
-                    !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1) && this.props.dataSource.length === 0)
+                    !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1 || parseInt(this.props.startType) === 2) && this.props.dataSource.length === 0)
                   } type="primary" onClick={() => {
                     this.setState({
                       previewPayVisible: true,
@@ -396,7 +396,7 @@ class CheckProject extends Component {
                   {/*0-待审核 ,1-审核通过,2-审核拒绝 true [NULL]*/}
                   {
                     <Button disabled={
-                      !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1) && this.props.dataSource.length === 0)
+                      !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1 || parseInt(this.props.startType) === 2) && this.props.dataSource.length === 0)
                     } type="primary" onClick={() => {
                       this.setState({
                         previewPayVisible: true,
@@ -531,7 +531,7 @@ class CheckProject extends Component {
                     {/*存在支付节点时不显示第三方的申请付款*/}
                     {/*0-待审核 ,1-审核通过,2-审核拒绝 true [NULL]*/}
                     <Button disabled={
-                      !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1) && this.props.dataSource.length === 0)
+                      !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1 || parseInt(this.props.startType) === 2) && this.props.dataSource.length === 0)
                     } type="primary" onClick={() => {
                       this.setState({
                         previewPayVisible: true,
@@ -540,21 +540,6 @@ class CheckProject extends Component {
                     }}>
                       申请付款
                     </Button>
-                    {/*{record.officialCost === 1? <Button*/}
-                    {/*    type="primary"*/}
-                    {/*    style={{*/}
-                    {/*      marginLeft: '10px',*/}
-                    {/*    }}*/}
-                    {/*    disabled={!(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1))}*/}
-                    {/*    onClick={() => {*/}
-                    {/*      this.setState({*/}
-                    {/*        previewPayVisible: true,*/}
-                    {/*        previewPayInfor: record,*/}
-                    {/*        type: 2,*/}
-                    {/*      })*/}
-                    {/*    }}>*/}
-                    {/*  付官费*/}
-                    {/*</Button> : <div/>}*/}
                     {this.props.status === 2 && !this.props.isAuditPaymentGLY ? <Popconfirm
                       title="是否删除?"
                       onConfirm={() => {
@@ -664,7 +649,7 @@ class CheckProject extends Component {
                     {/*0-待审核 ,1-审核通过,2-审核拒绝 true [NULL]*/}
                     {
                       <Button disabled={
-                        !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1) && this.props.dataSource.length === 0)
+                        !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1 || parseInt(this.props.startType) === 2) && this.props.dataSource.length === 0)
                       } type="primary" onClick={() => {
                         this.setState({
                           previewPayVisible: true,
@@ -797,7 +782,7 @@ class CheckProject extends Component {
                   {/*0-待审核 ,1-审核通过,2-审核拒绝 true [NULL]*/}
                   {
                     <Button disabled={
-                      !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1) && this.props.dataSource.length === 0)
+                      !(this.props.isPreviewPay && (this.props.status === 1 || parseInt(this.props.startType) === 1 || parseInt(this.props.startType) === 2) && this.props.dataSource.length === 0)
                     } type="primary" onClick={() => {
                       this.setState({
                         previewPayVisible: true,
@@ -951,12 +936,14 @@ class CheckProject extends Component {
                 <div>类型:</div>
               </div>
               {
-                parseInt(this.props.startType) === 0 ?
+                parseInt(this.props.startType) === 0
+                  ?
                   <div>
                     <div>外包(外包派单,不走总部)</div>
                     <div className="tipsText">提示高于总部价格,费用个人承担</div>
-                  </div> :
-                  <div>供应商信息(普通单)</div>
+                  </div> : parseInt(this.props.startType) === 1
+                    ?
+                    <div>供应商信息(普通单)</div> : <div>高质量申请</div>
               }
               <div style={{ marginLeft: 'auto' }}>
                 <span style={{ color: '#58a3ff' }}>项目状态:</span>{getProjectName(parseInt(this.props.projectStatus))}
@@ -1065,7 +1052,7 @@ class CheckProject extends Component {
               </div>
             </div>
             {/*如果是软著类或者专利类的专利申请,隐藏付款节点但当为外包类型时,无需隐藏*/}
-            {(!((this.props.projectType === 1 && this.props.patentType === 0) || this.props.projectType === 2)) || this.props.startType === 0 ? <div className="thirdParty">
+            {(!((this.props.projectType === 1 && this.props.patentType === 0) || this.props.projectType === 2)) || this.props.startType === 0 || this.props.startType === 2 ? <div className="thirdParty">
               <div>
                 <span className="title">
                   付款节点

+ 7 - 2
js/component/manageCenter/customer/NEW/intentionCustomer/followDetail.jsx

@@ -321,7 +321,9 @@ const FollowDetail = React.createClass({
     $.ajax({
       method: "get",
       dataType: "json",
-      url: globalConfig.context + "/api/admin/customer/toAddFollowOnHistory",
+      url: globalConfig.context + this.props.isLimit
+        ? "/api/restrict/Project/getFollowDetails"
+        : "/api/admin/customer/toAddFollowOnHistory",
       data: {
         uid: e,
       },
@@ -443,6 +445,8 @@ const FollowDetail = React.createClass({
         contactType: this.state.contactType,
         result: this.state.result,
         followTime: this.state.followTime,
+        type: this.props.isLimit ? 1 : 0,
+        pid: this.props.isLimit ? this.props.details.pid : undefined,
       },
     }).done(
       function (data) {
@@ -502,7 +506,7 @@ const FollowDetail = React.createClass({
           maskClosable={false}
           className="customeDetails"
           footer=""
-          title="新增渠道跟进"
+          title="新增跟进"
           width="1200px"
           visible={this.state.visitModul}
           onOk={this.visitOk}
@@ -659,6 +663,7 @@ const FollowDetail = React.createClass({
           </Form>
         </Modal>
         <AddContact
+          isLimit={this.props.isLimit}
           addcontactModul={this.state.addcontactModul}
           uids={this.state.uids}
           closeFollow={this.closeFollow}

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

@@ -36,6 +36,10 @@ const confirm = Modal.confirm;
 const IntentionCustomer = Form.create()(
   React.createClass({
     loadData(pageNo, apiUrl) {
+      // 新需求 除湖南和内蒙古外 不让其他省操作
+      if (adminData.province != "21" && adminData.province != "11") {
+        return
+      }
       this.setState({
         visitModul: false,
         loading: true,
@@ -1217,6 +1221,7 @@ const IntentionCustomer = Form.create()(
             closeDesc={this.closeDesc}
           />
           <IntentionDetail
+            isLimit={this.props.isLimit}
             tabsKey={this.state.tabsKey}
             categoryArr={this.state.categoryArr}
             detailApi={this.props.detailApi}

+ 2 - 2
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/business.jsx

@@ -44,7 +44,7 @@ const Business = React.createClass({
           }
         },
         {
-          title: "业务名",
+          title: "项目名称",
           dataIndex: "businessName",
           key: "businessName",
         },
@@ -84,7 +84,7 @@ const Business = React.createClass({
                   this.businessIntentionDetails(record);
                 }}
               >
-                查看
+                查看跟进记录
               </Button>
             );
           },

+ 67 - 67
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/contactPerson.jsx

@@ -14,17 +14,17 @@ import AddContact from "../../../signCustomer/followDetail/addContact";
 const ContactPerson = React.createClass({
   getInitialState() {
     return {
-      major:0,
+      major: 0,
       loading: false,
-      addcontactModul:false,
-      enterpriseName:'',
+      addcontactModul: false,
+      enterpriseName: '',
       ContactsLists: [
         {
           title: "姓名",
           dataIndex: "name",
           key: "name",
           render: (text, record, index) => {
-            if(record.id) return <div>{text}</div>
+            if (record.id) return <div>{text}</div>
           }
         },
         {
@@ -32,7 +32,7 @@ const ContactPerson = React.createClass({
           dataIndex: "department",
           key: "department",
           render: (text, record, index) => {
-            if(record.id) return <div>{text}</div>
+            if (record.id) return <div>{text}</div>
           }
         },
         {
@@ -40,7 +40,7 @@ const ContactPerson = React.createClass({
           dataIndex: "position",
           key: "position",
           render: (text, record, index) => {
-            if(record.id) return <div>{text}</div>
+            if (record.id) return <div>{text}</div>
           }
         },
         {
@@ -57,7 +57,7 @@ const ContactPerson = React.createClass({
           dataIndex: "cityName",
           key: "cityName",
           render: (text, record, index) => {
-          if(record.id) return <div>{text}</div>
+            if (record.id) return <div>{text}</div>
           }
         },
         {
@@ -65,7 +65,7 @@ const ContactPerson = React.createClass({
           dataIndex: "mobile",
           key: "mobile",
           render: (text, record, index) => {
-            if(record.id) return <div>{text}</div>
+            if (record.id) return <div>{text}</div>
           }
         },
         {
@@ -73,7 +73,7 @@ const ContactPerson = React.createClass({
           dataIndex: "fixedTel",
           key: "fixedTel",
           render: (text, record, index) => {
-            if(record.id) return <div>{text}</div>
+            if (record.id) return <div>{text}</div>
           }
         },
         {
@@ -81,7 +81,7 @@ const ContactPerson = React.createClass({
           dataIndex: "wechat",
           key: "wechat",
           render: (text, record, index) => {
-            if(record.id) return <div>{text}</div>
+            if (record.id) return <div>{text}</div>
           }
         },
         {
@@ -89,7 +89,7 @@ const ContactPerson = React.createClass({
           dataIndex: "qq",
           key: "qq",
           render: (text, record, index) => {
-            if(record.id) return <div>{text}</div>
+            if (record.id) return <div>{text}</div>
           }
         },
         {
@@ -97,7 +97,7 @@ const ContactPerson = React.createClass({
           dataIndex: "email",
           key: "email",
           render: (text, record, index) => {
-            if(record.id) return <div>{text}</div>
+            if (record.id) return <div>{text}</div>
           }
         },
         {
@@ -105,7 +105,7 @@ const ContactPerson = React.createClass({
           dataIndex: "createTimes",
           key: "createTimes",
           render: (text, record, index) => {
-            if(record.id) return <div>{text}</div>
+            if (record.id) return <div>{text}</div>
           }
         },
         {
@@ -113,7 +113,7 @@ const ContactPerson = React.createClass({
           dataIndex: "aname",
           key: "aname",
           render: (text, record, index) => {
-            if(record.id) return <div>{text}</div>
+            if (record.id) return <div>{text}</div>
           }
         },
         {
@@ -123,7 +123,7 @@ const ContactPerson = React.createClass({
           render: (text, record, index) => {
             return (
               !this.props.isCustomerAdmin && <div>
-                {adminData.isSuperAdmin || !record.id? (
+                {adminData.isSuperAdmin || !record.id ? (
                   <Popconfirm
                     title="是否删除?"
                     onConfirm={e => {
@@ -146,7 +146,7 @@ const ContactPerson = React.createClass({
                 ) : (
                   ""
                 )}
-                {record.major!=1 ? (
+                {record.major != 1 ? (
                   <Button
                     style={{
                       marginRight: "10px",
@@ -185,7 +185,7 @@ const ContactPerson = React.createClass({
           ocbId: e.id //删除的ID
         }
       }).done(
-        function(data) {
+        function (data) {
           if (!data.error.length) {
             message.success("删除成功!");
             this.setState({
@@ -204,27 +204,27 @@ const ContactPerson = React.createClass({
   //选择主要联系人
   mainContact(record) {
     this.setState({
-    	loading: true
+      loading: true
     });
     $.ajax({
-    	method: "get",
-    	dataType: "json",
-    	crossDomain: false,
-    	url: globalConfig.context + "/api/admin/customer/updateMainContact",
-    	data: {
-    		uid:this.props.data.id,
-    		ocbId: record.id
-    	}
-    }).done(function(data) {
-    	if(!data.error.length) {
-    		message.success('设为主要联系人成功!');
-    		this.setState({
-    			loading: false,
-    		});
-    	} else {
-    		message.warning(data.error[0].message);
-    	};
-    	this.contactLists();
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/customer/updateMainContact",
+      data: {
+        uid: this.props.data.id,
+        ocbId: record.id
+      }
+    }).done(function (data) {
+      if (!data.error.length) {
+        message.success('设为主要联系人成功!');
+        this.setState({
+          loading: false,
+        });
+      } else {
+        message.warning(data.error[0].message);
+      };
+      this.contactLists();
     }.bind(this));
     this.state.contactList.forEach(item => {
       item.major = 0;
@@ -248,7 +248,7 @@ const ContactPerson = React.createClass({
       data: {
         uid: ids || this.props.data.id //名称1
       },
-      success: function(data) {
+      success: function (data) {
         let theArr = [];
         if (data.error.length || data.data.list == "") {
           if (data.error && data.error.length) {
@@ -268,10 +268,10 @@ const ContactPerson = React.createClass({
               department: thisdata.department,
               position: thisdata.position,
               major: thisdata.major,
-              createTimes:thisdata.createTimes,
-              fixedTel:thisdata.fixedTel,
-              aname:thisdata.aname,
-              cityName:(thisdata.provinceName || '')+(thisdata.cityName || '')+(thisdata.areaName || '')
+              createTimes: thisdata.createTimes,
+              fixedTel: thisdata.fixedTel,
+              aname: thisdata.aname,
+              cityName: (thisdata.provinceName || '') + (thisdata.cityName || '') + (thisdata.areaName || '')
             });
           }
         }
@@ -280,7 +280,7 @@ const ContactPerson = React.createClass({
         });
       }.bind(this)
     }).always(
-      function() {
+      function () {
         this.setState({
           loading: false
         });
@@ -318,20 +318,20 @@ const ContactPerson = React.createClass({
               display: "inline-block",
             }}
           >
-            公司名称:{this.state.enterpriseName ? this.state.enterpriseName :  this.props.name}
+            公司名称:{this.state.enterpriseName ? this.state.enterpriseName : this.props.name}
             <EnterpriseNameChange
-                type={this.props.isCustomerAdmin ? 'journal' : 'modify'}
-                changeOtherInfor
-                style={{marginLeft:'20px'}}
-                enterpriseId={this.props.data.uid}
-                enterpriseName={this.props.name}
-                data={this.props.data}
-                onCancel={this.props.onCancel}
-                onChangeSuccess={(value)=>{
-                  this.setState({
-                    enterpriseName:value
-                  })
-            }}/>
+              type={this.props.isCustomerAdmin ? 'journal' : 'modify'}
+              changeOtherInfor
+              style={{ marginLeft: '20px' }}
+              enterpriseId={this.props.data.uid}
+              enterpriseName={this.props.name}
+              data={this.props.data}
+              onCancel={this.props.onCancel}
+              onChangeSuccess={(value) => {
+                this.setState({
+                  enterpriseName: value
+                })
+              }} />
           </span>
           {!this.props.isCustomerAdmin ? <Button
             className="ContactsList"
@@ -344,23 +344,23 @@ const ContactPerson = React.createClass({
         <div className="clearfix">
           <Spin spinning={this.state.loading}>
             <Table
-                pagination={false}
-                columns={this.state.ContactsLists}
-                dataSource={this.state.contactList}
+              pagination={false}
+              columns={this.state.ContactsLists}
+              dataSource={this.state.contactList}
             />
           </Spin>
         </div>
         {/* 新增联系人 */}
         <AddContact
-            addcontactModul={this.state.addcontactModul}
-            uids={this.props.data.id}
-            closeFollow={()=>{
-              this.setState({
-                addcontactModul:false
-              },()=>{
-                this.contactLists()
-              })
-            }}
+          addcontactModul={this.state.addcontactModul}
+          uids={this.props.data.id}
+          closeFollow={() => {
+            this.setState({
+              addcontactModul: false
+            }, () => {
+              this.contactLists()
+            })
+          }}
         />
       </div>
     );

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 542 - 517
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/detail/visit.jsx


+ 162 - 161
js/component/manageCenter/customer/NEW/intentionCustomer/intentionDetail/intentionDetail.jsx

@@ -11,167 +11,168 @@ import Business from './detail/business.jsx';
 import BasicPerson from './detail/basicPerson.jsx';
 
 const IntentionDetail = React.createClass({
-	getInitialState() {
-		return {
-			modalVisible: false,
-			switchState: false,
-			contactData: [],
-			contactState: true,
-			IntentionState: false,
-			businessState: false,
-			visitState: false,
-			accountState: false,
-			basicState: false
-		}
-	},
-	detailsModal() {
-		this.setState({
-			basicState: false,
-			modalVisible: false
-		})
-		this.props.closeDesc(false, true)
-	},
-	//详情tab切换数据处理
-	callback(e) {
-		if (e == '1') {
-			this.setState({
-				IntentionState: true,
-				contactState: false,
-				accountState: false,
-				visitState: false,
-				businessState: false,
-				basicState: true
-			})
-		}
-		if (e == '2') {
-			this.setState({
-				IntentionState: false,
-				contactState: true,
-				accountState: false,
-				visitState: false,
-				businessState: false,
-				basicState: false
-			})
-		}
-		// if(e == '3') {
-		// 	this.setState({
-		// 		IntentionState:false,
-		// 		contactState:false,
-		// 		accountState:true,
-		// 		visitState:false,
-		// 		businessState:false,
-		// 		basicState:false
-		// 	})
-		// }
-		if (e == '4') {
-			this.setState({
-				IntentionState: false,
-				contactState: false,
-				accountState: false,
-				visitState: true,
-				businessState: false,
-				basicState: false
-			})
-		}
-		if (e == '5') {
-			this.setState({
-				IntentionState: false,
-				contactState: false,
-				accountState: false,
-				visitState: false,
-				businessState: true,
-				basicState: false
-			})
-		}
-		this.setState({
-			callnub: e,
-		})
-	},
-	//取消函数
-	closeDetail(e, s) {
-		this.setState({
-			basicState: false,
-			modalVisible: e,
-		})
-		if (s) {
-			this.props.closeDesc(false, true)
-		}
-	},
-	componentWillReceiveProps(nextProps) {
-		if (nextProps.modalVisible && nextProps.IntentionData.id) {
-			this.setState({
-				modalVisible: true,
-				callnub: this.props.isCustomerAdmin ? '2' : (nextProps.isGuidanceLv ? (nextProps.tabsKey ? nextProps.tabsKey : "4") : (nextProps.tabsKey ? nextProps.tabsKey : (nextProps.detailApi.indexOf('Organization')) > 0 ? "2" : '1')),
-			})
-		};
-		this.setState({
-			basicState: nextProps.basicState,
-			contactState: nextProps.contactState,
-		})
-	},
-	render() {
-		return (
-			<div>
-				{this.state.modalVisible ? <Modal
-					className="customeDetails"
-					title="意向客户详情"
-					width='92%'
-					visible={this.state.modalVisible}
-					onOk={this.detailsModal}
-					onCancel={this.detailsModal}
-					footer=''
-				>
-					<Tabs onChange={this.callback} activeKey={this.state.callnub}>
-						{this.props.isGuidanceLv || this.props.detailApi.indexOf('Organization') > 0 ? "" :
-							<TabPane tab="基本信息" key="1">
-								<BasicPerson
-									detailApi={this.props.detailApi}
-									closeDetail={this.closeDetail}
-									data={this.props.IntentionData}
-									IntentionState={this.state.IntentionState}
-									basicState={this.state.basicState}
-								/>
+  getInitialState() {
+    return {
+      modalVisible: false,
+      switchState: false,
+      contactData: [],
+      contactState: true,
+      IntentionState: false,
+      businessState: false,
+      visitState: false,
+      accountState: false,
+      basicState: false
+    }
+  },
+  detailsModal() {
+    this.setState({
+      basicState: false,
+      modalVisible: false
+    })
+    this.props.closeDesc(false, true)
+  },
+  //详情tab切换数据处理
+  callback(e) {
+    if (e == '1') {
+      this.setState({
+        IntentionState: true,
+        contactState: false,
+        accountState: false,
+        visitState: false,
+        businessState: false,
+        basicState: true
+      })
+    }
+    if (e == '2') {
+      this.setState({
+        IntentionState: false,
+        contactState: true,
+        accountState: false,
+        visitState: false,
+        businessState: false,
+        basicState: false
+      })
+    }
+    // if(e == '3') {
+    // 	this.setState({
+    // 		IntentionState:false,
+    // 		contactState:false,
+    // 		accountState:true,
+    // 		visitState:false,
+    // 		businessState:false,
+    // 		basicState:false
+    // 	})
+    // }
+    if (e == '4') {
+      this.setState({
+        IntentionState: false,
+        contactState: false,
+        accountState: false,
+        visitState: true,
+        businessState: false,
+        basicState: false
+      })
+    }
+    if (e == '5') {
+      this.setState({
+        IntentionState: false,
+        contactState: false,
+        accountState: false,
+        visitState: false,
+        businessState: true,
+        basicState: false
+      })
+    }
+    this.setState({
+      callnub: e,
+    })
+  },
+  //取消函数
+  closeDetail(e, s) {
+    this.setState({
+      basicState: false,
+      modalVisible: e,
+    })
+    if (s) {
+      this.props.closeDesc(false, true)
+    }
+  },
+  componentWillReceiveProps(nextProps) {
+    if (nextProps.modalVisible && nextProps.IntentionData.id) {
+      this.setState({
+        modalVisible: true,
+        callnub: this.props.isCustomerAdmin ? '2' : (nextProps.isGuidanceLv ? (nextProps.tabsKey ? nextProps.tabsKey : "4") : (nextProps.tabsKey ? nextProps.tabsKey : (nextProps.detailApi.indexOf('Organization')) > 0 ? "2" : '1')),
+      })
+    };
+    this.setState({
+      basicState: nextProps.basicState,
+      contactState: nextProps.contactState,
+    })
+  },
+  render() {
+    return (
+      <div>
+        {this.state.modalVisible ? <Modal
+          className="customeDetails"
+          title="意向客户详情"
+          width='92%'
+          visible={this.state.modalVisible}
+          onOk={this.detailsModal}
+          onCancel={this.detailsModal}
+          footer=''
+        >
+          <Tabs onChange={this.callback} activeKey={this.state.callnub}>
+            {this.props.isGuidanceLv || this.props.detailApi.indexOf('Organization') > 0 ? "" :
+              <TabPane tab="基本信息" key="1">
+                <BasicPerson
+                  detailApi={this.props.detailApi}
+                  closeDetail={this.closeDetail}
+                  data={this.props.IntentionData}
+                  IntentionState={this.state.IntentionState}
+                  basicState={this.state.basicState}
+                />
 
-							</TabPane>}
-						{!this.props.isGuidanceLv || this.props.isCustomerAdmin ? <TabPane tab="企业&联系人详情" key="2">
-							<ContactPerson
-								isCustomerAdmin={this.props.isCustomerAdmin}
-								closeDetail={this.closeDetail}
-								name={this.props.name}
-								data={this.props.IntentionData}
-								contactState={this.state.contactState}
-								onCancel={this.detailsModal}
-							/>
-						</TabPane> : ""}
-						{/* {!this.props.isGuidanceLv ? <TabPane tab="账户信息" key="3">*/}
-						{/*	<Account*/}
-						{/*		 isGuidanceLv={this.props.isGuidanceLv}  //用于判断是否为跟进管理页面*/}
-						{/*		 closeDetail={this.closeDetail}*/}
-						{/*         data={this.props.IntentionData}*/}
-						{/*         accountState={this.state.accountState}*/}
-						{/*	/>*/}
-						{/*</TabPane>: ""}*/}
-						<TabPane tab="客户跟进" key="4">
-							<Visit
-								isGuidanceLv={this.props.isGuidanceLv}
-								isEditGuidanceLv={this.props.isEditGuidanceLv}
-								categoryArr={this.props.categoryArr}
-								closeDetail={this.closeDetail}
-								data={this.props.IntentionData}
-								visitState={this.state.visitState}
-							/>
-						</TabPane>
-						<TabPane tab="业务意向" key="5">
-							<Business
-								closeDetail={this.closeDetail}
-								data={this.props.IntentionData}
-								businessState={this.state.businessState}
-							/>
-						</TabPane>
-					</Tabs>
-				</Modal> : <div />}
-			</div>
-		)
-	}
+              </TabPane>}
+            {!this.props.isGuidanceLv || this.props.isCustomerAdmin ? <TabPane tab="企业&联系人详情" key="2">
+              <ContactPerson
+                isCustomerAdmin={this.props.isCustomerAdmin}
+                closeDetail={this.closeDetail}
+                name={this.props.name}
+                data={this.props.IntentionData}
+                contactState={this.state.contactState}
+                onCancel={this.detailsModal}
+              />
+            </TabPane> : ""}
+            {/* {!this.props.isGuidanceLv ? <TabPane tab="账户信息" key="3">*/}
+            {/*	<Account*/}
+            {/*		 isGuidanceLv={this.props.isGuidanceLv}  //用于判断是否为跟进管理页面*/}
+            {/*		 closeDetail={this.closeDetail}*/}
+            {/*         data={this.props.IntentionData}*/}
+            {/*         accountState={this.state.accountState}*/}
+            {/*	/>*/}
+            {/*</TabPane>: ""}*/}
+            <TabPane tab="客户跟进" key="4">
+              <Visit
+                isLimit={this.props.isLimit}
+                isGuidanceLv={this.props.isGuidanceLv}
+                isEditGuidanceLv={this.props.isEditGuidanceLv}
+                categoryArr={this.props.categoryArr}
+                closeDetail={this.closeDetail}
+                data={this.props.IntentionData}
+                visitState={this.state.visitState}
+              />
+            </TabPane>
+            <TabPane tab="业务意向" key="5">
+              <Business
+                closeDetail={this.closeDetail}
+                data={this.props.IntentionData}
+                businessState={this.state.businessState}
+              />
+            </TabPane>
+          </Tabs>
+        </Modal> : <div />}
+      </div>
+    )
+  }
 })
 export default IntentionDetail;

+ 773 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/limit.jsx

@@ -0,0 +1,773 @@
+import React from "react";
+import $ from "jquery/src/ajax";
+import moment from "moment";
+import {
+  Button,
+  Form,
+  Input,
+  Spin,
+  Table,
+  Select,
+  message,
+  Tabs,
+  DatePicker,
+  AutoComplete,
+  Modal,
+  Tooltip,
+  Tag,
+} from "antd";
+import { ChooseList } from "../../../order/orderNew/chooseList";
+import { ShowModal, } from "@/tools.js"
+import { accountType, accountStatus } from "@/dataDic";
+import ZhuanjiaoDetail from "@/zhuanjiaoDetail.jsx";
+import IntentionDetail from "./intentionDetail/intentionDetail";
+import ShowModalDiv from "@/showModal.jsx";
+import FollowDetail from "./followDetail"
+import './limit.less';
+
+const FormItem = Form.Item;
+const { RangePicker } = DatePicker;
+const { TabPane } = Tabs;
+
+const LimitedProject = React.createClass({
+
+  getInitialState() {
+    return {
+      searchValues: {
+        type: ''
+      }, // 列表筛选条件
+      loading: false, //加载动画
+      changeList: undefined, // 更改后的表格显示数据
+      dataSource: [], // 列表数据
+      pagination: {
+        defaultCurrent: 1,
+        defaultPageSize: 10,
+        showQuickJumper: true,
+        pageSize: 10,
+        onChange: function (page) {
+          this.loadData(page);
+        }.bind(this),
+        showTotal: function (total) {
+          return "共" + total + "条数据";
+        },
+      },
+      columns: [
+        {
+          title: "客户名称",
+          dataIndex: "name",
+          key: "name",
+          width: 300,
+          render: (text, record) => {
+            return (
+              <span>
+                <span>{text}</span>
+              </span>
+            );
+          },
+        },
+        {
+          title: "限定项目名称",
+          dataIndex: "projectName",
+          key: "projectName",
+          render: (text, record) => {
+            return (
+              <div>
+                {text}
+              </div>
+            );
+          },
+        },
+        {
+          title: "项目状态",
+          dataIndex: "type",
+          key: "type",
+          render: (text, record) => {
+            return (
+              <div>
+                {['公共', '私有', '签单'][text]}
+              </div>
+            );
+          },
+        },
+        {
+          title: "客户所属",
+          dataIndex: "userAdmin",
+          key: "userAdmin",
+          render: (text, record) => {
+            return (
+              <div>
+                {text}
+              </div>
+            );
+          },
+        },
+        {
+          title: "项目所属",
+          dataIndex: "adminName",
+          key: "adminName",
+          render: (text, record) => {
+            return (
+              <div>
+                {text}
+              </div>
+            );
+          },
+        },
+        // {
+        //   title: "项目初始时间",
+        //   dataIndex: "lockTime",
+        //   key: "lockTime",
+        //   render: (text, record) => {
+        //     return (
+        //       <div>
+        //         {text}
+        //       </div>
+        //     );
+        //   },
+        // },
+        {
+          title: "剩余私有天数",
+          dataIndex: "privateDays",
+          key: "privateDays",
+          render: (text, record) => {
+            return (
+              <div>
+                {record.type == 1
+                  ? text : record.type == 2
+                    ? record.signDays : ""}
+              </div>
+            );
+          },
+        },
+        {
+          title: "最新跟进时间",
+          dataIndex: "lockTime",
+          key: "lockTime",
+          render: (text, record) => {
+            return (
+              <div>
+                {text}
+              </div>
+            );
+          },
+        },
+        {
+          title: "操作",
+          dataIndex: "op",
+          key: "op",
+          render: (text, record) => {
+            return (
+              <div>
+                <Button
+                  style={{ marginLeft: 10 }}
+                  type="primary"
+                  onClick={(e) => {
+                    e.stopPropagation();
+                    let obj = {
+                      id: record.id
+                    }
+                    this.setState({
+                      visitModuls: true,
+                      followData: obj,
+                      RowData: record,
+                    })
+                  }}
+                >
+                  跟进限定项目
+                </Button>
+              </div>
+            );
+          },
+        },
+      ],
+      customerArr: [],
+      selectedRowKeys: [],
+      zhuanjiaoVisible: false,
+      categoryArr: [],
+      followData:{}
+    };
+  },
+
+  componentWillMount() {
+    this.loadData();
+    this.category();
+  },
+
+  // 列表接口
+  loadData(pageNo) {
+    const { searchValues, pagination } = this.state;
+    this.setState({
+      loading: true,
+    });
+    let datas = Object.assign(searchValues, {
+      pageNo: pageNo || 1,
+      pageSize: pagination.pageSize,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/restrict/Project/pageList",
+      data: datas,
+      success: function (data) {
+        ShowModal(this);
+        this.setState({
+          loading: false,
+        });
+        let theArr = [];
+        if (data.error && data.error.length === 0) {
+          if (data.data) {
+            pagination.current = data.data.pageNo;
+            pagination.total = data.data.totalCount;
+            if (data.data && data.data.list && !data.data.list.length) {
+              pagination.current = 0
+              pagination.total = 0
+            };
+            for (var i = 0; i < data.data.list.length; i++) {
+              let thisdata = data.data.list[i];
+              let diqu =
+                (thisdata.province == null ? "" : thisdata.province) +
+                (thisdata.city == null ? "" : "-" + thisdata.city) +
+                (thisdata.area == null ? "" : "-" + thisdata.area);
+              thisdata.opId = thisdata.id;
+              thisdata.id = thisdata.uid;
+              thisdata.locationProvince = diqu;
+              theArr.push(thisdata);
+            }
+            this.setState({
+              dataSource: theArr,
+              pagination: this.state.pagination,
+              pageNo: data.data.pageNo,
+            });
+          }
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+  // 搜索
+  search() {
+    this.loadData();
+  },
+  // 重置
+  reset() {
+    this.setState({
+      searchValues: {
+        type: ''
+      },
+    }, () => {
+      this.loadData();
+    })
+  },
+
+  changeList(arr) {
+    const newArr = [];
+    this.state.columns.forEach((item) => {
+      arr.forEach((val) => {
+        if (val === item.title) {
+          newArr.push(item);
+        }
+      });
+    });
+    this.setState({
+      changeList: newArr,
+    });
+  },
+
+  supervisor(e) {
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/customer/listAdminByName",
+      data: {
+        adminName: e,
+      },
+      success: function (data) {
+        let thedata = data.data;
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          }
+          thedata = {};
+        }
+        this.setState({
+          customerArr: thedata,
+        });
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  selectAuto(value, options) {
+    this.setState({
+      auto: value,
+    });
+  },
+
+  blurChange(e) {
+    let theType = "";
+    let contactLists = this.state.customerArr || [];
+    if (e) {
+      contactLists.map(function (item) {
+        if (item.name == e.toString()) {
+          theType = item.id;
+        }
+      });
+    }
+    this.setState({
+      theTypes: theType,
+    });
+  },
+
+  httpChange(e) {
+    if (e.length >= 1) {
+      this.supervisor(e);
+    }
+    this.setState({
+      auto: e,
+    });
+  },
+
+  showConfirm() {
+    let _this = this;
+    Modal.confirm({
+      title: "提示",
+      content: (
+        <span style={{ color: "red" }}>
+          确定要转交以下项目吗?
+          {this.state.selectedRows.map((value, index) => (
+            <div key={index} style={{ marginTop: "5px", color: "#000" }}>
+              {value.projectName}
+            </div>
+          ))}
+        </span>
+      ),
+      onOk() {
+        _this.changeAssigner(1)
+      },
+      onCancel() { },
+    });
+  },
+
+  showConfirms() {
+    let _this = this;
+    Modal.confirm({
+      title: "您确定将以下项目移至公共项目吗?",
+      content: (
+        <span style={{ color: "red" }}>
+          移除后,以下项目将被别人领取!
+          {this.state.selectedRows.map((value, index) => (
+            <div key={index} style={{ marginTop: "5px", color: "#000" }}>
+              {value.projectName}
+            </div>
+          ))}
+        </span>
+      ),
+      onOk() {
+        _this.changeAssigner(0);
+      },
+      onCancel() { },
+    });
+  },
+
+  changeAssigner(type) {
+    const _this = this;
+    if (type == 1 && !this.state.theTypes) {
+      message.warning("请输入转交人姓名");
+      return
+    }
+    let changeIds = "";
+    for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+      let rowItem = this.state.selectedRows[idx];
+      if (rowItem.opId) {
+        changeIds =
+          this.state.selectedRows.length - 1 === idx
+            ? changeIds + rowItem.opId
+            : changeIds + rowItem.opId + ",";
+      }
+    }
+    let loading = message.loading("加载中...");
+    $.ajax({
+      method: "post",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/restrict/Project/update",
+      data: {
+        id: changeIds,
+        type,
+        takeAid: type == 1 ? this.state.theTypes : undefined,
+      },
+    }).done(
+      function (data) {
+        loading();
+        this.setState({
+          selList: [],
+        })
+        if (!data.error.length) {
+          this.setState({
+            auto: "",
+            loading: false,
+            selectedRowKeys: [],
+          });
+          if (data.data == 1) {
+            message.success(type == 1 ? "转交成功!" : "移除成功!");
+            _this.loadData();
+          } else {
+            data.data.forEach(function (e) { message.warning(e) })
+          }
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this)
+    );
+  },
+
+  zhuanjiaoDetail(record) {
+    this.setState({
+      zhuanjiaoVisible: true,
+      zhuanjiaoId: record.id,
+    });
+  },
+
+  zhuanjiaoDetailCancel() {
+    this.setState({
+      zhuanjiaoVisible: false,
+    });
+  },
+
+  tableRowClick(record, index) {
+    this.state.visitModul = false;
+    this.setState({
+      // selectedRowKeys: [],
+      modalVisible: true,
+      basicState: true,
+      contactState: true,
+      modalName: record.name,
+      RowData: record,
+    });
+  },
+
+  closeDesc(e, s) {
+    this.state.basicState = e;
+    this.state.visitModul = e;
+    this.state.modalVisible = e;
+    this.state.visitModuls = e;
+    this.state.showDesc = e;
+    this.setState({
+      tabsKey: "",
+    });
+    if (s) {
+      this.loadData(this.state.ispage);
+    }
+  },
+  //品类数据获取
+  category() {
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/Varieties/getSuperList",
+      data: {},
+      success: function (data) {
+        let thedata = data.data;
+        let theArr = [];
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          }
+        } else {
+          thedata.map(function (item, index) {
+            theArr.push({
+              value: item.id,
+              key: item.cname,
+            });
+          });
+        }
+        this.setState({
+          categoryArr: theArr,
+        });
+      }.bind(this),
+    });
+  },
+  //查看跟进记录列表
+  loadVisit(pageNo) {
+    this.setState({
+      loading: true
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + '/api/admin/customer/listFollowHistory',
+      data: {
+        pageNo: pageNo || 1,
+        pageSize: this.state.paginations.pageSize,
+        uid: this.state.RowData.id, //名称1
+      },
+      success: function (data) {
+        let theArr = [];
+        if (data.error.length || data.data.list == "") {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          };
+        } else {
+          for (let i = 0; i < data.data.list.length; i++) {
+            let thisdata = data.data.list[i];
+            theArr.push(thisdata);
+          };
+          this.state.paginations.current = data.data.pageNo;
+          this.state.paginations.total = data.data.totalCount;
+          this.setState({
+            ispage: data.data.pageNo
+          })
+        };
+        if (data.data.list && !data.data.list.length) {
+          this.state.paginations.current = 0;
+          this.state.paginations.total = 0;
+        };
+        this.setState({
+          visitArrList: theArr,
+          paginations: this.state.paginations
+        });
+      }.bind(this),
+    }).always(function () {
+      this.setState({
+        loading: false
+      });
+    }.bind(this));
+  },
+
+  render() {
+    const { searchValues, } = this.state
+    const rowSelection = {
+      hideDefaultSelections: true,
+      selectedRowKeys: this.state.selectedRowKeys,
+      onChange: (selectedRowKeys, selectedRows) => {
+        this.setState({
+          modalVisible: false,
+          selectedRows: selectedRows,
+          selectedRowKeys: selectedRowKeys,
+        });
+      },
+      onSelect: (recordt, selected, selectedRows) => {
+        this.setState({
+          modalVisible: false,
+          recordt: recordt.opId,
+        });
+      },
+    };
+    const hasSelected = this.state.selectedRowKeys.length > 0;
+    const dataSources = this.state.customerArr || [];
+    const options = dataSources.map((group) => (
+      <Select.Option key={group.id} value={group.name}>
+        {group.name}
+      </Select.Option>
+    ));
+    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" className="test">
+          <TabPane tab="搜索" key="1">
+            <div className="user-search" style={{ marginLeft: 10 }}>
+              <Input
+                placeholder="客户名称"
+                value={searchValues["userName"]
+                  ? searchValues["userName"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["userName"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Input
+                placeholder="请输入限定项目全称"
+                value={searchValues["projectName"]
+                  ? searchValues["projectName"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["projectName"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Select
+                style={{ width: 140 }}
+                placeholder=""
+                value={searchValues["type"]}
+                onChange={(e) => {
+                  searchValues["type"] = e;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              >
+                <Option value="">全部</Option>
+                <Option value="1">私有</Option>
+                <Option value="2">已签</Option>
+              </Select>
+              <span>时间:</span>
+              <RangePicker
+                style={{ width: 300 }}
+                value={[
+                  searchValues.startTime ? moment(searchValues.startTime) : null,
+                  searchValues.endTime ? moment(searchValues.endTime) : null,
+                ]}
+                onChange={(data, dataString) => {
+                  this.setState({
+                    searchValues: Object.assign(searchValues, {
+                      startTime: dataString[0],
+                      endTime: dataString[1],
+                    }),
+                  });
+                }}
+              />
+              <Button
+                type="primary"
+                onClick={this.search}
+                style={{ margin: "0 10px" }}
+              >搜索</Button>
+              <Button onClick={this.reset}>重置</Button>
+            </div>
+          </TabPane>
+          <TabPane tab="操作" key="2">
+            <div className="user-search" style={{ marginLeft: 10 }}>
+              <AutoComplete
+                className="certain-category-search"
+                dropdownClassName="certain-category-search-dropdown"
+                dropdownMatchSelectWidth={false}
+                style={{ width: "120px" }}
+                dataSource={options}
+                placeholder="输入转交人姓名"
+                value={this.state.auto}
+                onChange={this.httpChange}
+                filterOption={true}
+                onBlur={this.blurChange}
+                onSelect={this.selectAuto}
+                disabled={!hasSelected}
+              >
+                <Input />
+              </AutoComplete>
+              <Button
+                type="primary"
+                onClick={(e) => {
+                  e.stopPropagation();
+                  this.showConfirm();
+                }}
+                disabled={!hasSelected}
+                style={{ marginRight: 10 }}
+              >
+                转交
+              </Button>
+              <Button
+                style={{ marginLeft: 10 }}
+                onClick={(e) => {
+                  e.stopPropagation();
+                  this.showConfirms();
+                }}
+                type="primary"
+                disabled={!hasSelected}
+              >
+                移除项目
+              </Button>
+              <Button
+                style={{ marginLeft: 10 }}
+                onClick={(e) => {
+                  e.stopPropagation();
+                  this.zhuanjiaoDetail(this.state.selectedRows[0]);
+                }}
+                type="primary"
+                disabled={!hasSelected || this.state.selectedRows.length > 1}
+              >
+                项目日志
+              </Button>
+            </div>
+          </TabPane>
+          <TabPane tab="更改表格显示数据" key="3">
+            <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
+              size="middle"
+              bordered
+              columns={
+                this.state.changeList == undefined
+                  ? this.state.columns
+                  : this.state.changeList
+              }
+              dataSource={this.state.dataSource}
+              rowSelection={rowSelection}
+              pagination={this.state.pagination}
+              onRowDoubleClick={this.tableRowClick}
+            />
+          </Spin>
+        </div>
+        {
+          this.state.zhuanjiaoVisible &&
+          <ZhuanjiaoDetail
+            cancel={this.zhuanjiaoDetailCancel}
+            visible={this.state.zhuanjiaoVisible}
+            id={this.state.zhuanjiaoId}
+          />
+        }
+        {
+          this.state.modalVisible &&
+          <IntentionDetail
+            isLimit={true}
+            isCustomerAdmin={true}
+            tabsKey={this.state.tabsKey}
+            categoryArr={this.state.categoryArr}
+            detailApi={'/api/admin/customer/findOrganizationCustomerDetail'}
+            IntentionData={this.state.RowData}
+            modalVisible={this.state.modalVisible}
+            name={this.state.modalName}
+            closeDesc={this.closeDesc}
+            basicState={this.state.basicState}
+            contactState={this.state.contactState}
+          />
+        }
+        {
+          <FollowDetail
+            isLimit={true}
+            details={this.state.RowData}
+            categoryArr={this.state.categoryArr}
+            followData={this.state.followData}
+            visitModul={this.state.visitModuls}
+            closeDesc={this.closeDesc}
+            loadData={this.loadVisit}
+          />
+        }
+      </div>
+    );
+  },
+});
+
+export default LimitedProject;

+ 6 - 0
js/component/manageCenter/customer/NEW/intentionCustomer/limit.less

@@ -0,0 +1,6 @@
+.ant-table-thead>tr.ant-table-row-hover>td,
+.ant-table-tbody>tr.ant-table-row-hover>td,
+.ant-table-thead>tr:hover>td,
+.ant-table-tbody>tr:hover>td {
+  background: rgba(70, 101, 191, .3);
+}

+ 325 - 97
js/component/manageCenter/customer/NEW/query/detail.jsx

@@ -1,104 +1,332 @@
 import React from 'react';
-import { Table, Spin, message, Modal } from 'antd';
+import { Form, Table, Spin, message, Modal, Button, Select } from 'antd';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 
 const Detail = React.createClass({
-	loadData(data, apiUrl) {
-		this.setState({
-			loading: true,
-		});
-		$.ajax({
-			method: "get",
-			dataType: "json",
-			crossDomain: false,
-			url: globalConfig.context + apiUrl,
-			data: {
-				uid: data.id,
-			},
-			success: function(data) {
-				let listArr = [];
-				let thedata = data.data;
-				if(!thedata) {
-					if(data.error && data.error.length) {
-						message.warning(data.error[0].message);
-					};
-					thedata = {};
-					return;
-				};
-				for(let i = 0; i < data.data.length; i++) {
-					let thisdata = data.data[i];
-					listArr.push({
-						id: thisdata.id,
-						businessProjectName: thisdata.businessProjectName,
-						salesmanName: thisdata.salesmanName,
-						lockTime: thisdata.lockTime && thisdata.lockTime.split(' ')[0],
-					});
-				};
-				this.setState({
-					dataSource: listArr,
-				});
-			}.bind(this),
-		}).always(function() {
-			this.setState({
-				loading: false
-			});
-		}.bind(this));
-	},
-	getInitialState() {
-		return {
-			loading: false,
-			dataSource: [],
-			columns: [{
-					title: '业务名称',
-					dataIndex: 'businessProjectName',
-					key: 'businessProjectName',
-				}, {
-					title: '签单时间',
-					dataIndex: 'lockTime',
-					key: 'lockTime',
-				},
-				{
-					title: '营销员',
-					dataIndex: 'salesmanName',
-					key: 'salesmanName',
-				}
-			],
-		}
-	},
-	visitCancel() {
-		this.setState({
-			visitModul: false
-		})
-		this.props.closeDesc(false);
-	},
-	componentWillReceiveProps(nextProps) {
-		if(nextProps.visitModul) {
-			this.setState({
-				visitModul: true
-			})
-			this.loadData(nextProps.data, nextProps.detailApi);
-		}
-	},
-	render() {
-		return(
-			<Modal	
-			      className="customeDetails"
-			      footer=''
-		          title="已签业务"
-		          width='800px'
-		          visible={this.state.visitModul}
-		          onOk={this.visitCancel}
-				  onCancel={this.visitCancel}							          							          
-			        >		
-                    <Spin spinning={this.state.loading}>
-                        <Table size="middle" columns={this.state.columns}
-                            dataSource={this.state.dataSource}    
-                            pagination={false} 
-                           />
-                    </Spin>
-			</Modal>
-		)
-	}
+  getInitialState() {
+    return {
+      visible: false,
+      loading: false,
+      dataSource: [],
+      gdataSource: [],
+      columns: [
+        {
+          title: '业务名称',
+          dataIndex: 'businessProjectName',
+          key: 'businessProjectName',
+        },
+        {
+          title: '签单时间',
+          dataIndex: 'lockTime',
+          key: 'lockTime',
+        },
+        {
+          title: '营销员',
+          dataIndex: 'salesmanName',
+          key: 'salesmanName',
+        }
+      ],
+      gcolumns: [
+        {
+          title: '限定项目',
+          dataIndex: 'projectName',
+          key: 'projectName',
+        },
+        {
+          title: '状态',
+          dataIndex: 'type',
+          key: 'type',
+          render: (text) =>
+            <span>
+              {["公共", "私有", "签单"][text]}
+            </span>
+        },
+        {
+          title: '营销员',
+          dataIndex: 'adminName',
+          key: 'adminName',
+        },
+        {
+          title: '操作',
+          dataIndex: 'op',
+          key: 'op',
+          render: (text, record) =>
+            (record.type == 0 && this.props.data.shareType == 2) &&
+            <Button
+              type="primary"
+              onClick={() => {
+                this.setState({
+                  visible: true,
+                  pid: record.pid,
+                  pName: record.projectName,
+                })
+              }}
+            >
+              领取
+            </Button>
+        },
+      ],
+      followList: [
+        { key: "已发项目介绍资料", value: 0 },
+        { key: "已约面谈", value: 1 },
+        { key: "已发合同计划书", value: 2 },
+        { key: "已报价", value: 3 },
+        { key: "已发合同", value: 4 },
+        { key: "已签合同", value: 5 },
+        { key: "面谈中", value: 6 },
+        { key: "已面签", value: 7 },
+        { key: "无进度", value: 8 },
+      ],
+      customerList: [
+        { key: "新客户", value: 0 },
+        { key: "意向客户", value: 1 },
+        { key: "重点客户", value: 2 },
+        { key: "面谈客户", value: 3 },
+        { key: "签单客户", value: 4 },
+        { key: "被拒客户", value: 5 },
+        { key: "停止跟进", value: 6 },
+      ],
+      followSituation: 6,
+      customerStatus: 4,
+    }
+  },
+
+
+  loadData(data, apiUrl) {
+    this.setState({
+      loading: true,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + apiUrl,
+      data: {
+        uid: data.id,
+      },
+      success: function (data) {
+        let listArr = [];
+        let thedata = data.data;
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          };
+          thedata = {};
+          return;
+        };
+        for (let i = 0; i < data.data.length; i++) {
+          let thisdata = data.data[i];
+          listArr.push({
+            id: thisdata.id,
+            businessProjectName: thisdata.businessProjectName,
+            salesmanName: thisdata.salesmanName,
+            lockTime: thisdata.lockTime && thisdata.lockTime.split(' ')[0],
+          });
+        };
+        this.setState({
+          dataSource: listArr,
+        });
+      }.bind(this),
+    }).always(function () {
+      this.setState({
+        loading: false
+      });
+    }.bind(this));
+  },
+
+  gloadData(id) {
+    this.setState({
+      loading: true,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + '/api/restrict/Project/list',
+      data: {
+        uid: id,
+      },
+      success: function (data) {
+        let thedata = data.data;
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          };
+        } else {
+          this.setState({
+            gdataSource: thedata
+          })
+        }
+      }.bind(this),
+    }).always(function () {
+      this.setState({
+        loading: false
+      });
+    }.bind(this));
+  },
+
+  visitCancel() {
+    this.setState({
+      visitModul: false
+    })
+    this.props.closeDesc(false);
+  },
+
+  add() {
+    if (!this.state.followSituation && this.state.followSituation != 0) {
+      message.warning("请选择跟进进度!")
+      return
+    }
+    if (!this.state.customerStatus && this.state.customerStatus != 0) {
+      message.warning("请选择客户状态!")
+      return
+    }
+    this.setState({
+      loading: true,
+    });
+    $.ajax({
+      method: "post",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/restrict/Project/add",
+      data: {
+        pid: this.state.pid,
+        uid: this.state.uid,
+        followSituation: this.state.followSituation,
+        customerStatus: this.state.customerStatus,
+      },
+      success: function (data) {
+        if (data.error && data.error.length) {
+          message.warning(data.error[0].message);
+        } else {
+          Modal.success({
+            title: '领取成功!',
+            content: (
+              <div>
+                本次领取的项目为
+                <span style={{ color: "red" }}>【{this.state.pName}】</span>
+                ,请在我的“客户管理-限定项目列表“查看
+              </div>),
+          });
+          this.setState({
+            visible: false,
+            followSituation: 6,
+            customerStatus: 4,
+          })
+          this.gloadData(this.state.uid)
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  componentWillReceiveProps(nextProps) {
+    if (nextProps.visitModul) {
+      this.setState({
+        visitModul: true,
+        uid: nextProps.data.id,
+      })
+      this.loadData(nextProps.data, nextProps.detailApi);
+      this.gloadData(nextProps.data.id)
+    }
+  },
+
+
+  render() {
+    const FormItem = Form.Item
+    return (
+      <Modal
+        className="customeDetails"
+        footer=''
+        title=""
+        width='800px'
+        visible={this.state.visitModul}
+        onOk={this.visitCancel}
+        onCancel={this.visitCancel}
+      >
+        <Spin spinning={this.state.loading}>
+          <div style={{ fontSize: "16px", fontWeight: "bold" }}>限定项目</div>
+          <Table
+            size="middle"
+            columns={this.state.gcolumns}
+            dataSource={this.state.gdataSource}
+            pagination={false}
+          />
+          <div style={{ marginTop: 50, fontSize: "16px", fontWeight: "bold" }}>已签业务</div>
+          <Table
+            size="middle"
+            columns={this.state.columns}
+            dataSource={this.state.dataSource}
+            pagination={false}
+          />
+        </Spin>
+        <Modal
+          title="领取限定项目"
+          visible={this.state.visible}
+          onOk={this.add}
+          onCancel={() => {
+            this.setState({
+              visible: false,
+              followSituation: 6,
+              customerStatus: 4,
+            })
+          }}
+        >
+          <FormItem
+            labelCol={{ span: 8 }}
+            wrapperCol={{ span: 10 }}
+            label="跟进进度"
+          >
+            <Select
+              placeholder="跟进进度"
+              value={this.state.followSituation}
+              style={{ width: 200 }}
+              onChange={(e) => {
+                this.setState({ followSituation: e });
+              }}
+            >
+              {this.state.followList.map(function (item) {
+                return (
+                  <Select.Option key={item.value} value={item.value}>
+                    {item.key}
+                  </Select.Option>
+                );
+              })}
+            </Select>
+          </FormItem>
+
+          <FormItem
+            labelCol={{ span: 8 }}
+            wrapperCol={{ span: 10 }}
+            label="客户状态"
+          >
+            <Select
+              placeholder="客户状态"
+              value={this.state.customerStatus}
+              style={{ width: 200 }}
+              onChange={(e) => {
+                this.setState({ customerStatus: e });
+              }}
+            >
+              {this.state.customerList.map(function (item) {
+                return (
+                  <Select.Option key={item.value} value={item.value}>
+                    {item.key}
+                  </Select.Option>
+                );
+              })}
+            </Select>
+          </FormItem>
+
+        </Modal>
+      </Modal>
+    )
+  }
 })
 export default Detail;

+ 25 - 27
js/component/manageCenter/customer/NEW/query/queryCutomer.jsx

@@ -479,34 +479,32 @@ const QueryCustomer = React.createClass({
                 }}
               />
               {/* <Select placeholder="选择部门"
-                            style={{ width: 150 ,marginRight:'10px',marginLeft:'10px'}}
-                            value={this.state.departmenttSearch}
-                            onChange={(e) => { this.setState({ departmenttSearch: e }) }}>
-                            {
-                                departmentArr.map(function (item) {
-                                        return <Select.Option key={item.id} >{item.name}</Select.Option>
-                                })
-                            }
-                    </Select>   */}
+                style={{ width: 150, marginRight: '10px', marginLeft: '10px' }}
+                value={this.state.departmenttSearch}
+                onChange={(e) => { this.setState({ departmenttSearch: e }) }}>
+                {
+                  departmentArr.map(function (item) {
+                    return <Select.Option key={item.id} >{item.name}</Select.Option>
+                  })
+                }
+              </Select> */}
               {/* <AutoComplete
-				        className="certain-category-search"
-				        dropdownClassName="certain-category-search-dropdown"
-				        dropdownMatchSelectWidth={false}
-				        dropdownStyle={{ width: 120 }}
-				        style={{ width: '120px'}}
-				        dataSource={options}
-				        placeholder="客户所有人姓名"
-				        value={this.state.auto}
-				        onChange={this.httpChange}
-				        filterOption={true}
-				        onBlur={this.blurChange}
-				        onSelect={this.selectAuto}
-				    >
-				        <Input />
-				    </AutoComplete>   */}
-              <Button type="primary" onClick={this.search}>
-                搜索
-              </Button>
+                className="certain-category-search"
+                dropdownClassName="certain-category-search-dropdown"
+                dropdownMatchSelectWidth={false}
+                dropdownStyle={{ width: 120 }}
+                style={{ width: '120px' }}
+                dataSource={options}
+                placeholder="客户所有人姓名"
+                value={this.state.auto}
+                onChange={this.httpChange}
+                filterOption={true}
+                onBlur={this.blurChange}
+                onSelect={this.selectAuto}
+              >
+                <Input />
+              </AutoComplete> */}
+              <Button type="primary" onClick={this.search}>搜索</Button>
               <Button onClick={this.reset}>重置</Button>
             </div>
           </TabPane>

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

@@ -102,12 +102,11 @@ const FollowDetail = React.createClass({
     });
   },
   visitCancel(e) {
-    console.log('00')
     this.setState({
       addcontactModul: false,
       visitModul: false
     });
-    // this.props.closeDesc(false, false)
+    this.props.closeDesc(false, false)
   },
   //获取联系人下拉框
   getNewWoman(ids) {

+ 148 - 146
js/component/manageCenter/customer/NEW/signCustomer/followDetail/addContact.jsx

@@ -1,105 +1,108 @@
 import React from 'react';
-import {Modal, message, layout, Spin, Input, Button, Form, Row, Col, Radio, Select} from 'antd';
+import { Modal, message, layout, Spin, Input, Button, Form, Row, Col, Radio, Select } from 'antd';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
-const FormItem =Form.Item;
+const FormItem = Form.Item;
 
 const AddContact = React.createClass({
-	getInitialState() {
-		return {
-			addcontactModul: false,
-            major:0,
-		}
-	},
-	addcontactModulOK() {
-		this.setState({
-			addcontactModul: false
-		})
-		this.props.closeFollow(true, true)
-	},
-	addcontactModulcancel() {
-		this.setState({
-			addcontactModul: false
-		})
-		this.props.closeFollow(false, false)
-	},
-	//新增联系人保存函数
-	submitcontactman(e) {
-		e.preventDefault();
-		if (/.*[\u4e00-\u9fa5]+.*$/.test(this.state.newname)) {
-		} else {
-			message.error("请填写正确的姓名,且至少包含一个汉字");
-			return ;
-		};
-		if(this.state.newmobile.length!=11){
-			message.error('请填写正确的手机号码');
-		  return
-		}
-		if (/.*[\u4e00-\u9fa5]+.*$/.test(this.state.newdepatrment)) {
-		} else {
-			message.error("请填写正确的部门,且至少包含一个汉字");
-			return;
-		};
-		if (/.*[\u4e00-\u9fa5]+.*$/.test(this.state.newposition)) {
-		} else {
-			message.error("请填写正确的职位,且至少包含一个汉字");
-			return;
-		};
-		this.setState({
-			loading: true
-		})
-		$.ajax({
-			method: "post",
-			dataType: "json",
-			crossDomain: false,
-			url: globalConfig.context + "/api/admin/customer/addOneContact",
-			data: {
-				uid: this.state.uid,
-				name: this.state.newname,
-				mobile: this.state.newmobile,
-				email: this.state.newemail,
-                fixedTel:this.state.fixedTelModal,
-                major: this.state.major,
-				wechat: this.state.newwechat,
-				department: this.state.newdepatrment,
-				position: this.state.newposition,
-				sex: this.state.newsex,
-				qq: this.state.newqq
-			},
-			success: function(data) {
-				if(!data.error.length) {
-                    message.success('添加成功')
-					this.addcontactModulOK()
-					this.setState({
-						loading: false,
-					})
-				} else {
-					message.warning(data.error[0].message);
-				};
-			}.bind(this)
-		});
-	},
-	componentWillReceiveProps(nextProps) {
-		if(nextProps.addcontactModul && nextProps.uids) {
-			this.setState({
-				newsex: undefined,
-				newname: '',
-				newmobile: '',
-				newwechat: '',
-				newqq: '',
-				newdepatrment: '',
-				newposition: '',
-				newemail: '',
-                fixedTelModal:'',
-                major:0,
-				addcontactModul: true,
-				uid: nextProps.uids,
-				loading:false
-			})
-		};
-	},
-	render() {
-		return (
+  getInitialState() {
+    return {
+      addcontactModul: false,
+      major: 0,
+    }
+  },
+  addcontactModulOK() {
+    this.setState({
+      addcontactModul: false
+    })
+    this.props.closeFollow(true, true)
+  },
+  addcontactModulcancel() {
+    this.setState({
+      addcontactModul: false
+    })
+    this.props.closeFollow(false, false)
+  },
+  //新增联系人保存函数
+  submitcontactman(e) {
+    e.preventDefault();
+    if (/.*[\u4e00-\u9fa5]+.*$/.test(this.state.newname)) {
+    } else {
+      message.error("请填写正确的姓名,且至少包含一个汉字");
+      return;
+    };
+    if (this.state.newmobile.length != 11) {
+      message.error('请填写正确的手机号码');
+      return
+    }
+    if (/.*[\u4e00-\u9fa5]+.*$/.test(this.state.newdepatrment)) {
+    } else {
+      message.error("请填写正确的部门,且至少包含一个汉字");
+      return;
+    };
+    if (/.*[\u4e00-\u9fa5]+.*$/.test(this.state.newposition)) {
+    } else {
+      message.error("请填写正确的职位,且至少包含一个汉字");
+      return;
+    };
+    this.setState({
+      loading: true
+    })
+    $.ajax({
+      method: "post",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/customer/addOneContact",
+      data: {
+        uid: this.state.uid,
+        name: this.state.newname,
+        mobile: this.state.newmobile,
+        email: this.state.newemail,
+        fixedTel: this.state.fixedTelModal,
+        major: this.state.major,
+        wechat: this.state.newwechat,
+        department: this.state.newdepatrment,
+        position: this.state.newposition,
+        sex: this.state.newsex,
+        qq: this.state.newqq
+      },
+      success: function (data) {
+        if (!data.error.length) {
+          message.success('添加成功')
+          this.addcontactModulOK()
+          this.setState({
+            loading: false,
+          })
+        } else {
+          message.warning(data.error[0].message);
+        };
+      }.bind(this)
+    });
+  },
+  componentWillReceiveProps(nextProps) {
+    if (nextProps.addcontactModul && nextProps.uids) {
+      this.setState({
+        newsex: undefined,
+        newname: '',
+        newmobile: '',
+        newwechat: '',
+        newqq: '',
+        newdepatrment: '',
+        newposition: '',
+        newemail: '',
+        fixedTelModal: '',
+        major: 0,
+        addcontactModul: true,
+        uid: nextProps.uids,
+        loading: false
+      })
+    };
+  },
+  render() {
+    const maList = !this.props.isLimit
+      ? [<Select.Option value={1}>是</Select.Option>, <Select.Option value={0}>否</Select.Option>]
+      : [<Select.Option value={0}>否</Select.Option>]
+    return (
       <div>
         <Modal
           maskClosable={false}
@@ -141,32 +144,32 @@ const AddContact = React.createClass({
                   />
                 </Col>
               </Row>
-                <Row style={{ marginTop: "20px", paddingLeft: "50px" }}>
-                    <Col span={2}>
-                        <span style={{ color: "red" }}>*</span>部门:
-                    </Col>
-                    <Col span={8}>
-                        <Input
-                            value={this.state.newdepatrment}
-                            required="required"
-                            onChange={(e) => {
-                                this.setState({ newdepatrment: e.target.value });
-                            }}
-                        />
-                    </Col>
-                    <Col span={2} style={{ marginLeft: "50px" }}>
-                        <span style={{ color: "red" }}>*</span>职位:
-                    </Col>
-                    <Col span={8}>
-                        <Input
-                            value={this.state.newposition}
-                            required="required"
-                            onChange={(e) => {
-                                this.setState({ newposition: e.target.value });
-                            }}
-                        />
-                    </Col>
-                </Row>
+              <Row style={{ marginTop: "20px", paddingLeft: "50px" }}>
+                <Col span={2}>
+                  <span style={{ color: "red" }}>*</span>部门:
+                </Col>
+                <Col span={8}>
+                  <Input
+                    value={this.state.newdepatrment}
+                    required="required"
+                    onChange={(e) => {
+                      this.setState({ newdepatrment: e.target.value });
+                    }}
+                  />
+                </Col>
+                <Col span={2} style={{ marginLeft: "50px" }}>
+                  <span style={{ color: "red" }}>*</span>职位:
+                </Col>
+                <Col span={8}>
+                  <Input
+                    value={this.state.newposition}
+                    required="required"
+                    onChange={(e) => {
+                      this.setState({ newposition: e.target.value });
+                    }}
+                  />
+                </Col>
+              </Row>
               <Row style={{ marginTop: "20px", paddingLeft: "50px" }}>
                 <Col span={2}>微信:</Col>
                 <Col span={8}>
@@ -189,39 +192,38 @@ const AddContact = React.createClass({
                   />
                 </Col>
               </Row>
-            <Row style={{ marginTop: '20px',paddingLeft:'50px' }}>
+              <Row style={{ marginTop: '20px', paddingLeft: '50px' }}>
                 <Col span={2}>邮箱:</Col>
                 <Col span={8}>
-                    <Input
-                        onChange={(e) => { this.setState({ newemail: e.target.value }) }} />
+                  <Input
+                    onChange={(e) => { this.setState({ newemail: e.target.value }) }} />
                 </Col>
                 <Col span={2} style={{ marginLeft: '50px' }}>座机:</Col>
                 <Col span={8}>
-                    <Input
-                        onChange={(e) => { this.setState({ fixedTelModal: e.target.value }) }} />
+                  <Input
+                    onChange={(e) => { this.setState({ fixedTelModal: e.target.value }) }} />
                 </Col>
-            </Row>
-            <Row style={{ marginTop: '20px',paddingLeft:'50px' }}>
-                <Col span={2}><span style={{whiteSpace:'nowrap',marginLeft:'-36px'}}>主要联系人:</span></Col>
+              </Row>
+              <Row style={{ marginTop: '20px', paddingLeft: '50px' }}>
+                <Col span={2}><span style={{ whiteSpace: 'nowrap', marginLeft: '-36px' }}>主要联系人:</span></Col>
                 <Col span={8}>
-                    <Select value={this.state.major} onChange={(e) => { this.setState({ major: e }) }}>
-                        <Select.Option value={1}>是</Select.Option>
-                        <Select.Option value={0}>否</Select.Option>
-                    </Select>
+                  <Select value={this.state.major} onChange={(e) => { this.setState({ major: e }) }}>
+                    {maList}
+                  </Select>
                 </Col>
                 <Col span={2} style={{ marginLeft: "50px" }}><span>性别:</span></Col>
                 <Col span={8}>
-                    <Radio.Group
-                        value={this.state.newsex}
-                        onChange={(e) => {
-                            this.setState({ newsex: e.target.value });
-                        }}
-                    >
-                        <Radio value="男">男</Radio>
-                        <Radio value="女">女</Radio>
-                    </Radio.Group>
+                  <Radio.Group
+                    value={this.state.newsex}
+                    onChange={(e) => {
+                      this.setState({ newsex: e.target.value });
+                    }}
+                  >
+                    <Radio value="男">男</Radio>
+                    <Radio value="女">女</Radio>
+                  </Radio.Group>
                 </Col>
-            </Row>
+              </Row>
               <Row
                 style={{
                   marginTop: "20px",
@@ -252,6 +254,6 @@ const AddContact = React.createClass({
         </Modal>
       </div>
     );
-	}
+  }
 })
 export default AddContact;

+ 35 - 10
js/component/manageCenter/customer/NEW/signCustomer/signCustomer.jsx

@@ -28,6 +28,7 @@ import IntentionDetail from './intentionDetail/intentionDetail'
 import './customer.less';
 import { ChooseList } from "../../../order/orderNew/chooseList";
 import EnterpriseNameChange from "../../../../common/enterpriseNameChange";
+import Detaile from "../query/detail";
 
 const { TabPane } = Tabs
 const confirm = Modal.confirm;
@@ -178,16 +179,16 @@ const IntentionCustomer = Form.create()(React.createClass({
           dataIndex: "transferTime",
           key: "transferTime",
         },
-        // {
-        //   title: "最新跟进日期",
-        //   dataIndex: "lastFollowTime",
-        //   key: "lastFollowTime",
-        // },
-        // {
-        //   title: "剩余私有天数",
-        //   dataIndex: "surplusFollowTime",
-        //   key: "surplusFollowTime",
-        // },
+        {
+          title: "最新跟进日期",
+          dataIndex: "lastFollowTime",
+          key: "lastFollowTime",
+        },
+        {
+          title: "剩余私有天数",
+          dataIndex: "surplusFollowTime",
+          key: "surplusFollowTime",
+        },
         // {
         //   title: "剩余签单天数",
         //   dataIndex: "surplusSignTime",
@@ -215,6 +216,7 @@ const IntentionCustomer = Form.create()(React.createClass({
           title: "操作",
           dataIndex: "abc",
           key: "abc",
+          width: 420,
           render: (text, record, index) => {
             return (
               <div>
@@ -264,6 +266,19 @@ const IntentionCustomer = Form.create()(React.createClass({
                 >
                   转交项目
                 </Button>
+                <Button
+                  style={{ marginLeft: 10 }}
+                  type="primary"
+                  onClick={(e) => {
+                    e.stopPropagation();
+                    this.setState({
+                      visitD: true,
+                      RowData: record,
+                    })
+                  }}
+                >
+                  新增限定项目
+                </Button>
               </div>
             );
           },
@@ -348,6 +363,7 @@ const IntentionCustomer = Form.create()(React.createClass({
     this.loadData();
   },
   closeDesc(e, s) {
+    this.state.visitD = e
     this.state.basicState = e
     this.state.visitModul = e;
     this.state.modalVisible = e;
@@ -618,6 +634,7 @@ const IntentionCustomer = Form.create()(React.createClass({
         )}
         <div className="content-title" style={{ marginBottom: 10 }}>
           <span style={{ fontWeight: 900, fontSize: 16 }}>{!intentionState ? "签单客户" : "签单客户"}</span>
+          <span style={{ color: "red", float: "right" }}>注:签单客户,30天未跟进,将自动释放至公共库!!!</span>
         </div>
         <Tabs defaultActiveKey="1" className="test">
           <TabPane tab="搜索" key="1">
@@ -820,6 +837,14 @@ const IntentionCustomer = Form.create()(React.createClass({
             </Checkbox.Group>
           </div>
         </Modal>}
+
+        <Detaile
+          visitModul={this.state.visitD}
+          data={this.state.RowData}
+          detailApi='/api/admin/customer/getLockedProject'
+          closeDesc={this.closeDesc}
+        />
+
       </div>
     );
   }

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

@@ -397,6 +397,15 @@ class Content extends Component {
           });
         });
         break;
+      // 限定项目
+      case 'limit':
+        require.ensure([], () => {
+          const Limit = require('./NEW/intentionCustomer/limit').default;
+          this.setState({
+            component: <Limit  />
+          });
+        });
+        break;
       //客户跟进汇总(看所有人的)
       case 'followUpSummaryAdmin':
         require.ensure([], () => {

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 601 - 576
js/component/manageCenter/customer/customerManagement/adminCustomerStatistics.jsx


+ 19 - 0
js/component/manageCenter/customer/managementFollow/followUpSummary/index.jsx

@@ -78,11 +78,29 @@ class FollowUpSummary extends Component {
           },
         },
         {
+          title: "限定项目名称",
+          dataIndex: "projectName",
+          key: "projectName",
+          width: 160,
+        },
+        {
           title: "跟进人",
           dataIndex: "followName",
           key: "followName",
         },
         {
+          title: "跟进类型",
+          dataIndex: "type",
+          key: "type",
+          render: (text, record) => {
+            return (
+              <div>
+                {["客户跟进", "限定项目跟进"][text]}
+              </div>
+            );
+          },
+        },
+        {
           title: "跟进部门",
           dataIndex: "followDep",
           key: "followDep",
@@ -486,6 +504,7 @@ class FollowUpSummary extends Component {
                     <Select.Option value={2}>公共客户</Select.Option>
                     <Select.Option value={3}>签单客户</Select.Option>
                     <Select.Option value={4}>外联客户</Select.Option>
+                    <Select.Option value={5}>限定项目客户</Select.Option>
                   </Select>
                 </Form.Item>
                 <Form.Item>

+ 33 - 14
js/component/manageCenter/customer/publicSummary/index.jsx

@@ -50,9 +50,15 @@ class PublicSummary extends Component {
           key: "userName",
           width: 150,
           fixed: "left",
-          render: (text) => {
+          render: (text, record) => {
             return (
-              <div>{text}</div>
+              <div>
+                <div>{text}</div>
+                <div style={{ color: ["red", "green"][record.signBills] }}>
+                  {["未签单", "已签单"][record.signBills]}
+                  {record.signBills == 1 && `(${record.signTime})`}
+                </div>
+              </div >
             );
           },
         },
@@ -126,12 +132,16 @@ class PublicSummary extends Component {
           title: "打卡时间",
           dataIndex: "clockInTimes",
           key: "clockInTimes",
-          width: 80,
+          width: 120,
           render: (text, record) => (
-            <span>
-              <div style={{ width: 70 }}>{text}</div>
+            <div>
+              {
+                text.split("\n").map(it =>
+                  <div>{it}</div>
+                )
+              }
               <Tag color={["#F21212", "#34DE38", "#ffd400"][record.clockIn]}>{["未打卡", "已打卡", "异常打卡"][record.clockIn]}</Tag>
-            </span>
+            </div>
           )
         },
         {
@@ -242,11 +252,13 @@ class PublicSummary extends Component {
                 onClick={(e) => {
                   e.stopPropagation();
                   let arr1 = text || [];
-                  let arr2 = record.photoUrl || [];
+                  // let arr2 = record.photoUrl || [];
+                  let arr3 = record.list || [];
                   this.setState(
                     {
                       annexUrlArr: splitUrl(arr1, ",", globalConfig.avatarHost + "/upload"),
-                      photoUrlArr: splitUrl(arr2, ",", globalConfig.avatarHost + "/upload"),
+                      phoList: arr3,
+                      // photoUrlArr: splitUrl(arr2, ",", globalConfig.avatarHost + "/upload"),
                     }, () => {
                       this.setState({
                         imgListVisible: true,
@@ -1018,16 +1030,23 @@ class PublicSummary extends Component {
             footer=""
           >
             <div>
-              <div>申请附件</div>
+              <div style={{ paddingBottom: "20px", fontSize: "15px" }}>申请附件</div>
               <ImgList
                 fileList={this.state.annexUrlArr}
                 domId="publicStatistics"
               />
-              <div style={{ paddingTop: "35px" }}>打卡照片</div>
-              <ImgList
-                fileList={this.state.photoUrlArr}
-                domId="publicStatistics1"
-              />
+              <div style={{ padding: "20px 0", fontSize: "15px" }}>打卡照片</div>
+              {
+                this.state.phoList.map(it =>
+                  <div>
+                    <div>{it.clockInTime}</div>
+                    <ImgList
+                      fileList={splitUrl(it.photoUrl, ",", globalConfig.avatarHost + "/upload")}
+                      domId="publicStatistics1"
+                    />
+                  </div>
+                )
+              }
             </div>
           </Modal>
         ) : null}

+ 1 - 1
js/component/manageCenter/customer/signcustomer/statistics.jsx

@@ -436,7 +436,7 @@ class SignStatistics extends Component {
   closeDesc() {
     this.setState({
       showDetail: false,
-      params: {},
+      // params: {},
     });
     this.loadData(this.state.pageNo);
   }

+ 223 - 221
js/component/manageCenter/customer/statistics/departmentStatistics/customerDetails.jsx

@@ -4,242 +4,244 @@ import PropTypes from 'prop-types';
 import $ from "jquery/src/ajax";
 
 class CustomerDetails extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            loading: false,
-            columns: [{
-                title: '客户名称',
-                dataIndex: 'name',
-                key: 'name'
-            }, {
-                title: '来源',
-                dataIndex: 'sourceName',
-                key: 'sourceName',
-                width: 75,
-            }, {
-                title: '联系人(部门/职务)',
-                dataIndex: 'contacts',
-                key: 'contacts',
-                width: 155,
-                render: (text, record) => {
-                    if (!text) { return '' }
-                    let str = text + '(' + (record.contactsDep ? record.contactsDep : ' ') + '/' + (record.contactsPosition ? record.contactsPosition : ' ') + ')';
-                    return (
-                        <Tooltip title={str}>
-                            <div style={{
-                                maxWidth: '155px',
-                                overflow: 'hidden',
-                                textOverflow: "ellipsis",
-                                whiteSpace: 'nowrap',
-                            }}>{str}</div>
-                        </Tooltip>
-                    )
-                }
-            }, {
-                title: '联系人电话',
-                dataIndex: 'contactMobile',
-                key: 'contactMobile'
-            }, {
-                title: '创建时间',
-                dataIndex: 'createTime',
-                key: 'createTime',
-                width: 145,
-            }, {
-                title: '跟进时间',
-                dataIndex: 'followTime',
-                key: 'followTime',
-                width: 145,
-            }, {
-                title: '企业主营',
-                dataIndex: 'businessScope',
-                key: 'businessScope',
-                width: 200,
-                render: (text) => {
-                    return (
-                        <Tooltip title={text}>
-                            <div style={{
-                                maxWidth: '200px',
-                                overflow: 'hidden',
-                                textOverflow: "ellipsis",
-                                whiteSpace: 'nowrap',
-                            }}>{text}</div>
-                        </Tooltip>
-                    )
-                }
-            }, {
-                title: '意向合作',
-                dataIndex: 'intendedProject',
-                key: 'intendedProject',
-                width: 200,
-                render: (text) => {
-                    return (
-                        <Tooltip title={text}>
-                            <div style={{
-                                maxWidth: '200px',
-                                overflow: 'hidden',
-                                textOverflow: "ellipsis",
-                                whiteSpace: 'nowrap',
-                            }}>{text}</div>
-                        </Tooltip>
-                    )
-                }
-            },],
-            pagination: {
-                defaultCurrent: 1,
-                defaultPageSize: 10,
-                showQuickJumper: true,
-                pageSize: 10,
-                onChange: function (page) {
-                    this.loadData(page);
-                }.bind(this),
-                showTotal: function (total) {
-                    return '共' + total + '条数据';
-                }
-            }
+  constructor(props) {
+    super(props);
+    this.state = {
+      loading: false,
+      columns: [{
+        title: '客户名称',
+        dataIndex: 'name',
+        key: 'name'
+      }, {
+        title: '来源',
+        dataIndex: 'sourceName',
+        key: 'sourceName',
+        width: 75,
+      }, {
+        title: '联系人(部门/职务)',
+        dataIndex: 'contacts',
+        key: 'contacts',
+        width: 155,
+        render: (text, record) => {
+          if (!text) { return '' }
+          let str = text + '(' + (record.contactsDep ? record.contactsDep : ' ') + '/' + (record.contactsPosition ? record.contactsPosition : ' ') + ')';
+          return (
+            <Tooltip title={str}>
+              <div style={{
+                maxWidth: '155px',
+                overflow: 'hidden',
+                textOverflow: "ellipsis",
+                whiteSpace: 'nowrap',
+              }}>{str}</div>
+            </Tooltip>
+          )
+        }
+      }, {
+        title: '联系人电话',
+        dataIndex: 'contactMobile',
+        key: 'contactMobile'
+      }, {
+        title: '创建时间',
+        dataIndex: 'createTime',
+        key: 'createTime',
+        width: 145,
+      }, {
+        title: '跟进时间',
+        dataIndex: 'followTime',
+        key: 'followTime',
+        width: 145,
+      }, {
+        title: '企业主营',
+        dataIndex: 'businessScope',
+        key: 'businessScope',
+        width: 200,
+        render: (text) => {
+          return (
+            <Tooltip title={text}>
+              <div style={{
+                maxWidth: '200px',
+                overflow: 'hidden',
+                textOverflow: "ellipsis",
+                whiteSpace: 'nowrap',
+              }}>{text}</div>
+            </Tooltip>
+          )
+        }
+      }, {
+        title: '意向合作',
+        dataIndex: 'intendedProject',
+        key: 'intendedProject',
+        width: 200,
+        render: (text) => {
+          return (
+            <Tooltip title={text}>
+              <div style={{
+                maxWidth: '200px',
+                overflow: 'hidden',
+                textOverflow: "ellipsis",
+                whiteSpace: 'nowrap',
+              }}>{text}</div>
+            </Tooltip>
+          )
+        }
+      },],
+      pagination: {
+        defaultCurrent: 1,
+        defaultPageSize: 10,
+        showQuickJumper: true,
+        pageSize: 10,
+        onChange: function (page) {
+          this.loadData(page);
+        }.bind(this),
+        showTotal: function (total) {
+          return '共' + total + '条数据';
         }
-        this.loadData = this.loadData.bind(this);
-        this.isView = this.isView.bind(this);
+      }
     }
+    this.loadData = this.loadData.bind(this);
+    this.isView = this.isView.bind(this);
+  }
 
-    componentDidMount() {
-        this.loadData();
-    }
+  componentDidMount() {
+    this.loadData();
+  }
 
-    loadData(pageNo) {
-        this.setState({
-            loading: true
-        })
-        $.ajax({
-            method: "get",
-            dataType: "json",
-            crossDomain: false,
-            url: globalConfig.context + "/api/admin/customer/selectAdminCustomerList",
-            data: {
-                pageNo: pageNo || 1,
-                pageSize: this.state.pagination.pageSize,
-                aid: this.props.aid,
-                type: this.props.type,                       //0 所有 1新增 2领取 3已签 4面谈
-                startTime: this.props.startTime,
-                endTime: this.props.endTime,
-            },
-            success: function (data) {
-                let theArr = [];
-                if (data.error.length || data.data.list == "") {
-                    if (data.error && data.error.length) {
-                        message.warning(data.error[0].message);
-                    };
-                } else {
-                    for (let i = 0; i < data.data.list.length; i++) {
-                        let thisdata = data.data.list[i];
-                        thisdata.key = i;
-                        theArr.push(thisdata);
-                    };
-                    this.state.pagination.current = pageNo;
-                    this.state.pagination.total = data.data.totalCount;
-                };
-                if (!data.data.list.length) {
-                    this.state.pagination.current = 0
-                    this.state.pagination.total = 0
-                }
-                this.setState({
-                    dataSource: theArr,
-                    pagination: this.state.pagination,
-                });
-            }.bind(this),
-        }).always(function () {
-            this.setState({
-                loading: false
-            });
-        }.bind(this));
-    }
-    // 判断是否有权限查看详情
-    isView() {
-        // 11=运营管理,12=总裁助理,13=总裁
-        let iskeep =
-            window.adminData.shiroList.indexOf("11") != -1 ||
-            window.adminData.shiroList.indexOf("12") != -1 ||
-            window.adminData.shiroList.indexOf("13") != -1
-        // 
-        let isName = this.props.aName.indexOf("曹津") != -1
-        if (iskeep && isName) {
-            return false
+  loadData(pageNo) {
+    this.setState({
+      loading: true
+    })
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/customer/selectAdminCustomerList",
+      data: {
+        pageNo: pageNo || 1,
+        pageSize: this.state.pagination.pageSize,
+        aid: this.props.aid,
+        type: this.props.type,                       //0 所有 1新增 2领取 3已签 4面谈
+        startTime: this.props.startTime,
+        endTime: this.props.endTime,
+      },
+      success: function (data) {
+        let theArr = [];
+        if (data.error.length || data.data.list == "") {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          };
         } else {
-            return true
+          for (let i = 0; i < data.data.list.length; i++) {
+            let thisdata = data.data.list[i];
+            thisdata.key = i;
+            theArr.push(thisdata);
+          };
+          this.state.pagination.current = pageNo;
+          this.state.pagination.total = data.data.totalCount;
+        };
+        if (!data.data.list.length) {
+          this.state.pagination.current = 0
+          this.state.pagination.total = 0
         }
+        this.setState({
+          dataSource: theArr,
+          pagination: this.state.pagination,
+        });
+      }.bind(this),
+    }).always(function () {
+      this.setState({
+        loading: false
+      });
+    }.bind(this));
+  }
+  // 判断是否有权限查看详情
+  isView() {
+    // 11=运营管理,12=总裁助理,13=总裁
+    let iskeep =
+      window.adminData.shiroList.indexOf("11") != -1 ||
+      window.adminData.shiroList.indexOf("12") != -1 ||
+      window.adminData.shiroList.indexOf("13") != -1
+    // 
+    let isName = this.props.aName.indexOf("曹津") != -1
+    if (iskeep && isName) {
+      return false
+    } else {
+      return true
     }
+  }
 
-    render() {
-        return (
-            <div>
-                <Modal
-                    maskClosable={true}
-                    visible={this.props.visible}
-                    onOk={this.props.onCancel}
-                    onCancel={this.props.onCancel}
-                    width='1300px'
-                    title={
-                        <span>
-                            <span style={{ marginRight: '15px' }}>客户详情</span>
-                            <Tag color="#f50">{this.props.aName}</Tag>
-                            <Tag color="#108ee9">
-                                {
-                                    this.props.type === 0 ?
-                                        '私有客户' :
-                                        this.props.type === 1 ?
-                                            '外联客户' :
-                                            this.props.type === 2 ?
-                                                '签单客户' :
-                                                this.props.type === 3 ?
-                                                    '私有新增客户' :
-                                                    this.props.type === 4 ?
-                                                        '外联新增客户' :
-                                                        this.props.type === 5 ?
-                                                            '私有面谈客户' :
-                                                            this.props.type === 6 ?
-                                                                '外联面谈客户' :
-                                                                this.props.type === 7 ?
-                                                                    '私有领取客户' : ''
-                                }
-                            </Tag>
-                        </span>
-                    }
-                    footer=''
-                    className="admin-desc-content">
-                    <div className="patent-table">
-                        <Spin spinning={this.state.loading}>
-                            {
-                                this.isView()
-                                    ? <Table
-                                        columns={this.state.columns}
-                                        dataSource={this.state.dataSource}
-                                        pagination={this.state.pagination}
-                                    />
-                                    : <div style={{ padding: "40px 0", textAlign: "center", color: "red", fontSize: "20px" }}>
-                                        暂无权限查看
-                                    </div>
+  render() {
+    return (
+      <div>
+        <Modal
+          maskClosable={true}
+          visible={this.props.visible}
+          onOk={this.props.onCancel}
+          onCancel={this.props.onCancel}
+          width='1300px'
+          title={
+            <span>
+              <span style={{ marginRight: '15px' }}>客户详情</span>
+              <Tag color="#f50">{this.props.aName}</Tag>
+              <Tag color="#108ee9">
+                {
+                  this.props.type === 0 ?
+                    '私有客户' :
+                    this.props.type === 1 ?
+                      '外联客户' :
+                      this.props.type === 2 ?
+                        '签单客户' :
+                        this.props.type === 3 ?
+                          '私有新增客户' :
+                          this.props.type === 4 ?
+                            '外联新增客户' :
+                            this.props.type === 5 ?
+                              '私有面谈客户' :
+                              this.props.type === 6 ?
+                                '外联面谈客户' :
+                                this.props.type === 7 ?
+                                  '私有领取客户' :
+                                  this.props.type === 8 ?
+                                    '私有转交客户' : ''
+                }
+              </Tag>
+            </span>
+          }
+          footer=''
+          className="admin-desc-content">
+          <div className="patent-table">
+            <Spin spinning={this.state.loading}>
+              {
+                this.isView()
+                  ? <Table
+                    columns={this.state.columns}
+                    dataSource={this.state.dataSource}
+                    pagination={this.state.pagination}
+                  />
+                  : <div style={{ padding: "40px 0", textAlign: "center", color: "red", fontSize: "20px" }}>
+                    暂无权限查看
+                  </div>
 
-                            }
-                        </Spin>
-                    </div>
-                </Modal>
-            </div>
-        );
-    }
+              }
+            </Spin>
+          </div>
+        </Modal>
+      </div>
+    );
+  }
 }
 
 CustomerDetails.propTypes = {
-    visible: PropTypes.bool,
-    onCancel: PropTypes.func,
-    aid: PropTypes.number,      //员工ID
-    type: PropTypes.number,     //列表类型 客户总数 成交客户总数 新增客户数等等
-    startTime: PropTypes.string, //开始时间
-    endTime: PropTypes.string,   //结束时间
+  visible: PropTypes.bool,
+  onCancel: PropTypes.func,
+  aid: PropTypes.number,      //员工ID
+  type: PropTypes.number,     //列表类型 客户总数 成交客户总数 新增客户数等等
+  startTime: PropTypes.string, //开始时间
+  endTime: PropTypes.string,   //结束时间
 }
 
 CustomerDetails.defaultProps = {
-    visible: false,
-    onCancel: () => { }
+  visible: false,
+  onCancel: () => { }
 }
 
 export default CustomerDetails;

+ 39 - 13
js/component/manageCenter/customer/statistics/departmentStatistics/index.jsx

@@ -83,9 +83,9 @@ class DepartmentStatistics extends Component {
           },
         },
         {
-          title: "外联数",
-          dataIndex: "channelCount",
-          key: "channelCount",
+          title: "私有新增数",
+          dataIndex: "newCount",
+          key: "newCount",
           className: 'tableRowStyle',
           width: 120,
           render: (text, record) => {
@@ -97,9 +97,9 @@ class DepartmentStatistics extends Component {
                     e.stopPropagation();
                     this.setState({
                       customerVisible: true,
-                      aid: record.aid,
                       aName: record.aName,
-                      type: 1,
+                      aid: record.aid,
+                      type: 3,
                     })
                   }
                 }}>
@@ -109,9 +109,9 @@ class DepartmentStatistics extends Component {
           },
         },
         {
-          title: "签单数",
-          dataIndex: "signCount",
-          key: "signCount",
+          title: "私有转交数",
+          dataIndex: "transferCount",
+          key: "transferCount",
           className: 'tableRowStyle',
           width: 120,
           render: (text, record) => {
@@ -125,7 +125,7 @@ class DepartmentStatistics extends Component {
                       customerVisible: true,
                       aName: record.aName,
                       aid: record.aid,
-                      type: 2,
+                      type: 8,
                     })
                   }
                 }}>
@@ -135,9 +135,35 @@ class DepartmentStatistics extends Component {
           },
         },
         {
-          title: "私有新增数",
-          dataIndex: "newCount",
-          key: "newCount",
+          title: "外联数",
+          dataIndex: "channelCount",
+          key: "channelCount",
+          className: 'tableRowStyle',
+          width: 120,
+          render: (text, record) => {
+            return (
+              <div
+                className={record.aid ? 'receiveCount' : ''}
+                onClick={(e) => {
+                  if (record.aid) {
+                    e.stopPropagation();
+                    this.setState({
+                      customerVisible: true,
+                      aid: record.aid,
+                      aName: record.aName,
+                      type: 1,
+                    })
+                  }
+                }}>
+                {text}
+              </div>
+            );
+          },
+        },
+        {
+          title: "签单数",
+          dataIndex: "signCount",
+          key: "signCount",
           className: 'tableRowStyle',
           width: 120,
           render: (text, record) => {
@@ -151,7 +177,7 @@ class DepartmentStatistics extends Component {
                       customerVisible: true,
                       aName: record.aName,
                       aid: record.aid,
-                      type: 3,
+                      type: 2,
                     })
                   }
                 }}>

+ 26 - 9
js/component/manageCenter/financialManage/account/accountDetaillist.jsx

@@ -36,7 +36,9 @@ const AccountDetaillist = React.createClass({
       reason: "",
       checkData: {},
       aname: "",
-      searchValues: {}, // 列表筛选条件
+      searchValues: {
+        myType: "0"
+      }, // 列表筛选条件
       loading: false, //加载动画
       changeList: undefined, // 更改后的表格显示数据
       dataSource: [], // 列表数据
@@ -168,6 +170,7 @@ const AccountDetaillist = React.createClass({
           key: "status",
           render: (text, record) => {
             return (
+              (!!text || text == 0) &&
               <span style={{ color: accountStatus[text].color }}>
                 {accountStatus[text].label}
               </span>
@@ -375,10 +378,6 @@ const AccountDetaillist = React.createClass({
         aLink.click();
         document.body.removeChild(aLink);
       });
-
-
-
-
     }
   },
 
@@ -517,7 +516,9 @@ const AccountDetaillist = React.createClass({
   reset() {
     this.setState({
       aname: "",
-      searchValues: JSON.parse(JSON.stringify({})),
+      searchValues: {
+        myType: "0"
+      },
     }, () => {
       this.loadData();
     })
@@ -592,6 +593,22 @@ const AccountDetaillist = React.createClass({
         <Tabs defaultActiveKey="2" className="test">
           <TabPane tab="搜索" key="2">
             <div className="user-search" style={{ marginLeft: 10 }}>
+              <Select
+                style={{ width: 140 }}
+                placeholder=""
+                value={searchValues["myType"]
+                  ? searchValues["myType"]
+                  : undefined}
+                onChange={(e) => {
+                  searchValues["myType"] = e;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              >
+                <Option value="0">查看列表</Option>
+                <Option value="1">我的列表</Option>
+              </Select>
               <Input
                 placeholder="合同编号"
                 value={searchValues["contractNo"]
@@ -606,11 +623,11 @@ const AccountDetaillist = React.createClass({
               />
               <Input
                 placeholder="客户名称"
-                value={searchValues["username"]
-                  ? searchValues["username"]
+                value={searchValues["buyerName"]
+                  ? searchValues["buyerName"]
                   : ""}
                 onChange={(e) => {
-                  searchValues["username"] = e.target.value;
+                  searchValues["buyerName"] = e.target.value;
                   this.setState({
                     searchValues: searchValues,
                   });

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1008 - 37
js/component/manageCenter/financialManage/account/accountDetails.jsx


+ 3 - 0
js/component/manageCenter/financialManage/account/accountDetails.less

@@ -0,0 +1,3 @@
+.ant-modal{
+  top: 50px;
+}

+ 29 - 6
js/component/manageCenter/financialManage/account/accountReview.jsx

@@ -40,7 +40,8 @@ const AccountReview = React.createClass({
       checkData: {},
       aname: "",
       searchValues: {
-        examineStatus: this.props.isOperate ? "1" : undefined
+        examineStatus: this.props.isOperate ? "1" : undefined,
+        roleType: this.props.isOperate ? undefined : "0"
       }, // 列表筛选条件
       loading: false, //加载动画
       changeList: undefined, // 更改后的表格显示数据
@@ -282,7 +283,7 @@ const AccountReview = React.createClass({
       pageNo: pageNo || 1,
       pageSize: pagination.pageSize,
       expenseMain: 1,
-      processStatus: this.props.isOperate ? 1 : 2,
+      processStatus: this.props.isOperate ? 1 : undefined,
     });
     $.ajax({
       method: "get",
@@ -527,7 +528,10 @@ const AccountReview = React.createClass({
   reset() {
     this.setState({
       aname: "",
-      searchValues: JSON.parse(JSON.stringify({ examineStatus: this.props.isOperate ? "1" : undefined })),
+      searchValues: {
+        examineStatus: this.props.isOperate ? "1" : undefined,
+        roleType: this.props.isOperate ? undefined : "0",
+      },
     }, () => {
       this.loadData();
     })
@@ -571,6 +575,25 @@ const AccountReview = React.createClass({
         <Tabs defaultActiveKey="2" className="test">
           <TabPane tab="搜索" key="2">
             <div className="user-search" style={{ marginLeft: 10 }}>
+              {
+                !this.props.isOperate &&
+                <Select
+                  style={{ width: 140 }}
+                  placeholder=""
+                  value={searchValues["roleType"]
+                    ? searchValues["roleType"]
+                    : undefined}
+                  onChange={(e) => {
+                    searchValues["roleType"] = e;
+                    this.setState({
+                      searchValues: searchValues,
+                    });
+                  }}
+                >
+                  <Option value="0">全部列表</Option>
+                  <Option value="1">我的列表</Option>
+                </Select>
+              }
               <Input
                 placeholder="合同编号"
                 value={searchValues["contractNo"]
@@ -631,7 +654,7 @@ const AccountReview = React.createClass({
               </AutoComplete>
               <Select
                 placeholder="所属部门"
-                style={{ width: 200, marginRight: 10 }}
+                style={{ width: 180, marginRight: 10 }}
                 value={searchValues["depId"]
                   ? searchValues["depId"]
                   : undefined}
@@ -648,7 +671,7 @@ const AccountReview = React.createClass({
               </Select>
               <Select
                 placeholder="申请部门"
-                style={{ width: 200, marginRight: 10 }}
+                style={{ width: 180, marginRight: 10 }}
                 value={searchValues["applyDep"]
                   ? searchValues["applyDep"]
                   : undefined}
@@ -665,7 +688,7 @@ const AccountReview = React.createClass({
               </Select>
               <Select
                 placeholder="支付部门"
-                style={{ width: 200, marginRight: 10 }}
+                style={{ width: 180, marginRight: 10 }}
                 value={searchValues["payDep"]
                   ? searchValues["payDep"]
                   : undefined}

+ 24 - 1
js/component/manageCenter/financialManage/account/accountReview.less

@@ -27,6 +27,19 @@
   table {
     font-size: 12px !important;
   }
+
+  table,
+  th,
+  td {
+    white-space: normal;
+
+  }
+
+  tr {
+    page-break-inside: avoid;
+  
+  }
+
 }
 
 .m_table {
@@ -76,7 +89,7 @@
     font-weight: bold;
     padding: 2px 5px;
     // border-bottom: 1px solid #000;
-    margin-bottom: 20px;
+    margin-bottom: 5px;
   }
 
   .ant-table-wrapper {
@@ -101,4 +114,14 @@
     background: transparent;
     text-align: center;
   }
+}
+
+.light {
+  background: #D3D3D3;
+
+}
+
+.dark {
+  background: white;
+
 }

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1210 - 0
js/component/manageCenter/financialManage/account/accountTotal.jsx


+ 19 - 0
js/component/manageCenter/financialManage/account/index.less

@@ -0,0 +1,19 @@
+.receiveCount{
+  cursor: pointer;
+  padding: 6px;
+}
+.receiveCount:hover{
+  background: #0e77ca;
+  color: #FFFFFF;
+  font-weight: bolder;
+}
+
+.light {
+  background: #D3D3D3;
+
+}
+
+.dark {
+  background: white;
+
+}

+ 551 - 0
js/component/manageCenter/financialManage/account/publicityAccount.jsx

@@ -0,0 +1,551 @@
+import React from "react";
+import $ from "jquery/src/ajax";
+import moment from "moment";
+import {
+  Button,
+  Form,
+  Input,
+  Spin,
+  Table,
+  Select,
+  message,
+  Tabs,
+  DatePicker,
+  AutoComplete,
+  Modal,
+  Tooltip,
+  Tag,
+} from "antd";
+import { ChooseList } from "../../order/orderNew/chooseList";
+import { ShowModal, getAccountName, getSecondaryAccountName, getClockState } from "../../../tools"
+import { accountType, accountStatus } from "@/dataDic";
+import ShowModalDiv from "@/showModal.jsx";
+import OrderDetail from '../../order/orderNew/changeComponent/orderDetail';
+import './index.less';
+
+const FormItem = Form.Item;
+const { RangePicker } = DatePicker;
+const { TabPane } = Tabs;
+
+const PublicityAccount = React.createClass({
+
+  getInitialState() {
+    return {
+      searchValues: {
+        allStatus: "0"
+      }, // 列表筛选条件
+      loading: false, //加载动画
+      changeList: undefined, // 更改后的表格显示数据
+      dataSource: [], // 列表数据
+      departmentArr: [], // 部门信息
+      pagination: {
+        defaultCurrent: 1,
+        defaultPageSize: 10,
+        showQuickJumper: true,
+        pageSize: 10,
+        onChange: function (page) {
+          this.loadData(page);
+        }.bind(this),
+        showTotal: function (total) {
+          return "共" + total + "条数据";
+        },
+      },
+      columns: [
+        {
+          title: "合同/客户",
+          dataIndex: "contractNo",
+          key: "contractNo",
+          width: 300,
+          render: (text, record) => {
+            return (
+              <span>
+                <span>{text}</span>
+                {" / " + record.buyerName}
+              </span>
+            );
+          },
+        },
+        {
+          title: "营销所属部门",
+          dataIndex: "depName",
+          key: "depName",
+          render: (text, record) => {
+            return (
+              <div>
+                {text}
+              </div>
+            );
+          },
+        },
+        {
+          title: "营销员",
+          dataIndex: "salesmanName",
+          key: "salesmanName",
+          render: (text, record) => {
+            return (
+              <div>
+                {text}
+              </div>
+            );
+          },
+        },
+        {
+          title: "公出/实际/超出(时)",
+          dataIndex: "maxDuration",
+          key: "maxDuration",
+          render: (text, record) => {
+            return (
+              <div>
+                {text + " / " + record.actualDuration + " / "}
+                <span style={{ color: record.exceedType == 1 && "red" }}>{record.exceedDuration}</span>
+              </div>
+            );
+          },
+        },
+        {
+          title: "合同总额/已收款(万元)",
+          dataIndex: "totalAmount",
+          key: "totalAmount",
+          render: (text, record) => {
+            return (
+              <div>
+                {text + " / " + record.settlementAmount}
+              </div>
+            );
+          },
+        },
+        {
+          title: "报销总额(元)",
+          dataIndex: "expenseAmount",
+          key: "expenseAmount",
+          render: (text, record) => {
+            return (
+              <div>
+                {text}
+              </div>
+            );
+          },
+        },
+        {
+          title: "已付成本(万元)",
+          dataIndex: "paymentAmount",
+          key: "paymentAmount",
+          render: (text, record) => {
+            return (
+              <div>
+                {text}
+              </div>
+            );
+          },
+        },
+        {
+          title: "报销人数/天数/报销次数",
+          dataIndex: "peopleCount",
+          key: "peopleCount",
+          render: (text, record) => {
+            return (
+              <div>
+                {text + " / " + record.days + " / " + record.expenseCount}
+              </div>
+            );
+          },
+        },
+        {
+          title: "报销未审核/驳回次数",
+          dataIndex: "notExamine",
+          key: "notExamine",
+          render: (text, record) => {
+            return (
+              <div>
+                {text + " / " + record.rejectCount}
+              </div>
+            );
+          },
+        },
+      ],
+    };
+  },
+
+  componentWillMount() {
+    this.departmentList();
+    this.loadData();
+  },
+
+  // 列表接口
+  loadData(pageNo) {
+    const { searchValues, pagination } = this.state;
+    this.setState({
+      loading: true,
+    });
+    let datas = Object.assign(searchValues, {
+      // pageNo: pageNo || 1,
+      // pageSize: pagination.pageSize,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/release/releaseAndExpenseCount",
+      data: datas,
+      success: function (data) {
+        ShowModal(this);
+        this.setState({
+          loading: false,
+        });
+        if (data.error && data.error.length === 0) {
+          if (data.data) {
+            pagination.current = data.data.pageNo;
+            pagination.total = data.data.totalCount;
+            if (data.data && data.data && !data.data.length) {
+              pagination.current = 0;
+              pagination.total = 0;
+            }
+            this.setState({
+              dataSource: data.data,
+              pagination: this.state.pagination,
+              pageNo: data.data.pageNo,
+              totalAmount: data.data.totalAmount,
+            });
+          }
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  departmentList() {
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/organization/selectSuperId",
+      data: {},
+      success: function (data) {
+        let thedata = data.data;
+        let theArr = [];
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          }
+        } else {
+          thedata.map(function (item, index) {
+            theArr.push({
+              key: index,
+              name: item.name,
+              id: item.id
+            });
+          });
+        }
+        this.setState({
+          departmentArr: theArr
+        });
+      }.bind(this)
+    }).always(
+      function () {
+
+      }.bind(this)
+    );
+  },
+  // 搜索
+  search() {
+    this.loadData();
+  },
+  // 重置
+  reset() {
+    this.setState({
+      searchValues: {
+        allStatus: "0"
+      },
+    }, () => {
+      this.loadData();
+    })
+  },
+
+  changeList(arr) {
+    const newArr = [];
+    this.state.columns.forEach((item) => {
+      arr.forEach((val) => {
+        if (val === item.title) {
+          newArr.push(item);
+        }
+      });
+    });
+    this.setState({
+      changeList: newArr,
+    });
+  },
+  // 导出
+  export() {
+    this.setState({
+      exportExecLoading: true
+    })
+    let loading = message.loading('加载中...');
+    let data = this.state.searchValues;
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/release/releaseAndExpenseCount/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({
+        exportExecLoading: false
+      })
+    }.bind(this));
+  },
+  // 下载
+  download(fileName) {
+    window.location.href = globalConfig.context + "/open/download?fileName=" + fileName
+  },
+  // 清理缓存
+  getCountsClear() {
+    this.setState({
+      loading: true,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/release/releaseAndExpenseCountClear",
+      data: {},
+      success: function (data) {
+        ShowModal(this);
+        this.setState({
+          loading: false,
+        });
+        if (data.error && data.error.length === 0) {
+          message.success("清除成功!")
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  followUp(e) {
+    this.setState({
+      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, {
+        aid: newdataSources.find((item) => item.name == value).id,
+      }),
+    });
+  },
+
+  render() {
+    const { searchValues, } = 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="2" className="test">
+          <TabPane tab="搜索" key="2">
+            <div className="user-search" style={{ marginLeft: 10 }}>
+              <Input
+                placeholder="合同编号"
+                value={searchValues["contactNo"]
+                  ? searchValues["contactNo"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["contactNo"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Input
+                placeholder="客户名称"
+                value={searchValues["buyerName"]
+                  ? searchValues["buyerName"]
+                  : ""}
+                onChange={(e) => {
+                  searchValues["buyerName"] = e.target.value;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              />
+              <Select
+                placeholder="所属部门"
+                style={{ width: 200, marginRight: 10 }}
+                value={searchValues["depId"]
+                  ? searchValues["depId"]
+                  : undefined}
+                onChange={e => {
+                  searchValues["depId"] = e;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              >
+                {this.state.departmentArr.map(function (item) {
+                  return <Select.Option key={item.id}>{item.name}</Select.Option>;
+                })}
+              </Select>
+              <AutoComplete
+                className="certain-category-search"
+                dropdownClassName="certain-category-search-dropdown"
+                dropdownMatchSelectWidth={false}
+                style={{ width: 140 }}
+                dataSource={options}
+                placeholder="营销员名称"
+                value={this.state.aname}
+                onChange={this.followUp.bind(this)}
+                filterOption={true}
+                onSelect={this.selectF.bind(this)}
+              >
+                <Input />
+              </AutoComplete>
+              <Select
+                style={{ width: 140 }}
+                placeholder=""
+                value={searchValues["allStatus"]
+                  ? searchValues["allStatus"]
+                  : undefined}
+                onChange={(e) => {
+                  searchValues["allStatus"] = e;
+                  this.setState({
+                    searchValues: searchValues,
+                  });
+                }}
+              >
+                <Option value="0">全部公出</Option>
+                <Option value="1">未超出</Option>
+                <Option value="2">已超出</Option>
+              </Select>
+              <span>报销时间:</span>
+              <RangePicker
+                style={{ width: 300 }}
+                value={[
+                  searchValues.startTime ? moment(searchValues.startTime) : null,
+                  searchValues.endTime ? moment(searchValues.endTime) : null,
+                ]}
+                onChange={(data, dataString) => {
+                  this.setState({
+                    searchValues: Object.assign(searchValues, {
+                      startTime: dataString[0],
+                      endTime: dataString[1],
+                    }),
+                  });
+                }}
+              />
+              <Button
+                type="primary"
+                onClick={this.search}
+                style={{ margin: "0 10px" }}
+              >搜索</Button>
+              <Button onClick={this.reset}>重置</Button>
+              <Button
+                type="primary"
+                onClick={this.getCountsClear}
+                style={{ marginLeft: 10 }}
+              >清理缓存</Button>
+            </div>
+          </TabPane>
+          <TabPane tab="更改表格显示数据" key="1">
+            <div style={{ marginLeft: 10 }}>
+              <ChooseList
+                columns={this.state.columns}
+                changeFn={this.changeList}
+                changeList={this.state.changeList}
+                top={55}
+                margin={11}
+              />
+            </div>
+          </TabPane>
+          <TabPane tab="导出" key="3">
+            <div style={{ float: "left" }}>
+              <Button
+                type="primary"
+                loading={this.state.exportPendingLoading}
+                onClick={this.export}
+                style={{ margin: 10 }}
+              >
+                导出excel
+              </Button>
+            </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={false}
+              size="small"
+            />
+          </Spin>
+        </div>
+      </div>
+    );
+  },
+});
+
+export default PublicityAccount;

+ 18 - 0
js/component/manageCenter/financialManage/content.jsx

@@ -325,6 +325,24 @@ class Content extends Component {
           });
         });
         break;
+      // 报销总计
+      case "accountTotal":
+        require.ensure([], () => {
+          const AccountTotal = require("./account/accountTotal").default;
+          this.setState({
+            component: <AccountTotal />,
+          });
+        });
+        break;
+      // 公出&报销
+      case "publicityAccount":
+        require.ensure([], () => {
+          const PublicityAccount = require("./account/publicityAccount").default;
+          this.setState({
+            component: <PublicityAccount />,
+          });
+        });
+        break;
       // 费用单列表
       case "accountlist":
         require.ensure([], () => {

+ 4 - 4
js/component/manageCenter/financialManage/distribute/public.less

@@ -44,10 +44,10 @@ button:focus,button:active{
 	margin-bottom: 10px;
 }
 table tr span,table tr td{
-    overflow: hidden;
-    white-space:nowrap; 
-    text-overflow:ellipsis; 
-    -o-text-overflow:ellipsis;
+    // overflow: hidden;
+    // white-space:nowrap; 
+    // text-overflow:ellipsis; 
+    // -o-text-overflow:ellipsis;
 }
 .patent-addNew {
     float: right;

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

@@ -320,8 +320,7 @@ class Content extends Component {
         break;
       case "settlementManage":
         require.ensure([], () => {
-          const SettlementManage = require("./settlementOrder/settlementManage/settlementManagement")
-            .default;
+          const SettlementManage = require("./settlementOrder/settlementManage/settlementManagement").default;
           this.setState({
             component: <SettlementManage />,
           });

+ 9 - 7
js/component/manageCenter/order/orderNew/addService.jsx

@@ -5952,14 +5952,16 @@ const NewService = Form.create()(
                         >
                           {(this.state.userType == "0"
                             ? ssalesType : this.state.userType == "1"
-                              ? qsalesType : []).map(function (item) {
-                                return (
-                                  <Select.Option key={item.value} disabled={item.value == "5"}>
-                                    {item.key}
-                                  </Select.Option>
-                                );
-                              })}
+                              ? qsalesType : this.state.userType == "3"
+                                ? qsalesType : []).map(function (item) {
+                                  return (
+                                    <Select.Option key={item.value} disabled={item.value == "5"}>
+                                      {item.key}
+                                    </Select.Option>
+                                  );
+                                })}
                         </Select>
+                        <span className="mandatory">*</span>
                       </FormItem>
                       {
                         (this.state.selectSales == "4" || this.state.selectSales == "5") &&

+ 2 - 2
js/component/manageCenter/order/orderNew/changeComponent/orderDetail.js

@@ -485,7 +485,7 @@ class OrderDetail extends Component {
       labelCol: { span: 10 },
       wrapperCol: { span: 14 }
     };
-    const data = this.props.orderData;
+    const data = this.props.orderData || {};
     const propsList = this.props.contactList || [];
     const expandedRowRenderVip = (e) => {
       const data = e.splitList;
@@ -761,7 +761,7 @@ class OrderDetail extends Component {
           imgId={"orderImg1x"}
         //  getContentUrl = {this.getContentUrl}
         />
-        
+
         <Property
           patentStatus={data.patentStatus}
         />

+ 328 - 318
js/component/manageCenter/project/content.jsx

@@ -1,326 +1,336 @@
 import React, { Component } from 'react';
 import '../content.less';
 import LeftTab from '../leftTab';
-import {getMenu} from '../publicMenu.js'
+import { getMenu } from '../publicMenu.js'
 
 class Content extends Component {
-    constructor() {
-        super();
-        this.state = {
-            loading: false,
-            component: <div></div>,
-        };
-    }
-    componentWillMount() {
-        var ids=window.location.href.indexOf('rid=');
-        var idk=window.location.href.substr(ids+4);
-        var rid=idk.split('#');
-        let menu=getMenu(rid);
-        let curry;
-        if(menu[0].subMenus.length>0){
-        	curry=menu[0].subMenus[0].url.split('#');
-        }else{
-        	curry=menu[0].url.split('#');
-        };
-        if (window.location.hash) {
-            this.getKey(window.location.hash.substr(1));
-        } else {
-         this.getKey(curry[1]);
-        };
-    }
-    getKey(key) {
-        switch (key) {
-          //项目派单
-          case "projectAssignment":
-            require.ensure([], () => {
-              const ProjectAssignment = require("./project/projectAssignment")
-                .default;
-              this.setState({
-                component: <ProjectAssignment ApiUrl={""} />
-              });
-            });
-            break;
-          //项目查询
-          case "projectQuery":
-            require.ensure([], () => {
-              const ProjectQuery = require("./project/projectQuery")
-                .default;
-              this.setState({
-                component: <ProjectQuery ApiUrl={""} />
-              });
-            });
-            break;
-            //项目汇总表
-            case "highTech":
-                require.ensure([], () => {
-                    const ProjectQuery = require("./summary/highTech")
-                        .default;
-                    this.setState({
-                        component: <ProjectQuery ApiUrl={""} />
-                    });
-                });
-                break;
-             //项目统计
-            case "projecCount":
-                require.ensure([], () => {
-                    const ProjectQuery = require("./summary/projecCount")
-                        .default;
-                    this.setState({
-                        component: <ProjectQuery ApiUrl={""} />
-                    });
-                });
-                break;
-          //外包派单
-          case "zxsglyOutSourcingPaiDan":
-            require.ensure([], () => {
-              const ZxsglyOutSourcingPaiDan = require("./project/zxsglyOutSourcingPaiDan")
-                .default;
-              this.setState({
-                component: <ZxsglyOutSourcingPaiDan ApiUrl={""} />
-              });
-            });
-            break;
-          //外包任务派单
-          case "outsourceTaskAssignment":
-            require.ensure([], () => {
-              const OutsourceTaskAssignment = require("./project/outsourceTaskAssignment")
-                .default;
-              this.setState({
-                component: <OutsourceTaskAssignment ApiUrl={""} />
-              });
-            });
-            break;
-          //企业项目查询
-          case "enterpriseProjectQuery":
-            require.ensure([], () => {
-                const EnterpriseProjectQuery = require("./project/enterpriseProjectQuery")
-                    .default;
-                this.setState({
-                    component: <EnterpriseProjectQuery ApiUrl={""} />
-                });
-            });
-            break;
-            case "businessManagement":
-                require.ensure([], () => {
-                    const BusinessManagement = require("./task/businessManagement/index")
-                        .default;
-                    this.setState({
-                        component: <BusinessManagement ApiUrl={""} />
-                    });
-                });
-                break;
-          //任务查询
-          case "taskQuery":
-            require.ensure([], () => {
-              const TaskQuery = require("./task/taskQuery").default;
-              this.setState({
-                component: <TaskQuery ApiUrl={""} />
-              });
-            });
-            break;
-          case "taskQueryZxs":
-            require.ensure([], () => {
-              const TaskQuery = require("./task/taskQueryZxs").default;
-              this.setState({
-                component: <TaskQuery ApiUrl={""} />
-              });
-            });
-            break;
-          //任务派单
-          case "taskAssignment":
-            require.ensure([], () => {
-              const TaskAssignment = require("./task/taskAssignment")
-                .default;
-              this.setState({
-                component: <TaskAssignment ApiUrl={""} />
-              });
-            });
-            break;
-            //专利列表
-            case "patentList":
-                require.ensure([], () => {
-                    const PatentList = require("./patent/list")
-                        .default;
-                    this.setState({
-                        component: <PatentList />
-                    });
-                });
-                break;
-            //7天内提醒缴费专利列表
-            case "patentSevenList":
-                require.ensure([], () => {
-                    const PatentList = require("./patent/list")
-                        .default;
-                    this.setState({
-                        component: <PatentList status={5}/>
-                    });
-                });
-                break;
-            //15天内提醒缴费专利列表
-            case "patentFifteenList":
-                require.ensure([], () => {
-                    const PatentList = require("./patent/list")
-                        .default;
-                    this.setState({
-                        component: <PatentList status={4}/>
-                    });
-                });
-                break;
-            //30天内提醒缴费专利列表
-            case "patentThirtyList":
-                require.ensure([], () => {
-                    const PatentList = require("./patent/list")
-                        .default;
-                    this.setState({
-                        component: <PatentList status={3}/>
-                    });
-                });
-                break;
-            //60天内提醒缴费专利列表
-            case "patentSixtyList":
-                require.ensure([], () => {
-                    const PatentList = require("./patent/list")
-                        .default;
-                    this.setState({
-                        component: <PatentList status={2}/>
-                    });
-                });
-                break;
-            //90天内提醒缴费专利列表
-            case "patentNinetyList":
-                require.ensure([], () => {
-                    const PatentList = require("./patent/list")
-                        .default;
-                    this.setState({
-                        component: <PatentList status={1}/>
-                    });
-                });
-                break;
-        //专利成本审核列表(专利管理员查看)
-        case "patentCostList":
-            require.ensure([], () => {
-                const CostAuditList = require("../order/orderNew/costAuditList").default;
-                this.setState({
-                    component: <CostAuditList isPatentManager/>,
-                });
-            });
-            break;
-          //我的任务
-          case "myTask":
-            require.ensure([], () => {
-              const MyTask = require("./task/myTask").default;
-              this.setState({
-                component: <MyTask ApiUrl={""} />
-              });
-            });
-            break;
-          //我的任务
-          case "myTaskZxs":
-            require.ensure([], () => {
-              const MyTask = require("./task/myTaskZxs").default;
-              this.setState({
-                component: <MyTask ApiUrl={""} />
-              });
-            });
-            break;
-          //我的外包任务
-          case "myTaskOutsource":
-            require.ensure([], () => {
-              const MyTaskOutsource = require("./task/myTaskOutsource")
-                .default;
-              this.setState({
-                component: <MyTaskOutsource ApiUrl={""} />
-              });
-            });
-            break;
-          //我的外包任务
-          case "myTaskOutsourceZxs":
-            require.ensure([], () => {
-              const MyTaskOutsource = require("./task/myTaskOutsourceZxs")
-                .default;
-              this.setState({
-                component: <MyTaskOutsource ApiUrl={""} />
-              });
-            });
-            break;
-          //合同变更审核列表
-          case "contractChangeJsy":
-            require.ensure([], () => {
-              const ContractChangeJsy = require("./task/contractChangeJsy")
-                .default;
-              this.setState({
-                component: <ContractChangeJsy ApiUrl={""} />
-              });
-            });
-            break;
-          //合同变更审核列表
-          case "contractChangeJsjl":
-            require.ensure([], () => {
-              const ContractChangeJsjl = require("./task/contractChangeJsjl")
-                .default;
-              this.setState({
-                component: <ContractChangeJsjl ApiUrl={""} />
-              });
-            });
-            break;
-          //合同变更审核列表
-          case "contractChangeJszj":
-            require.ensure([], () => {
-              const ContractChangeJszj = require("./task/contractChangeJszj")
-                .default;
-              this.setState({
-                component: <ContractChangeJszj ApiUrl={""} />
-              });
-            });
-            break;
-            //付款申请驳回列表
-            case "payApplyReject":
-                require.ensure([], () => {
-                    const PayApplyReject = require("./task/payApplyReject/index")
-                        .default;
-                    this.setState({
-                        component: <PayApplyReject ApiUrl={""} />
-                    });
-                });
-                break;
-          //任务统计
-          case "taskCount":
-            require.ensure([], () => {
-              const TaskCount = require("./task/taskCount").default;
-              this.setState({
-                component: <TaskCount ApiUrl={""} />
-              });
-            });
-            break;
-          //我的任务统计
-          case "myTaskCount":
-            require.ensure([], () => {
-              const MyTaskCount = require("./task/myTaskCount").default;
-              this.setState({
-                component: <MyTaskCount ApiUrl={""} />
-              });
-            });
-            break;
-          default:
-            require.ensure([], () => {
-              const Module = require("../module").default;
-              this.setState({
-                component: <Module ApiUrl={""} />
-              });
-            });
-        };
-        window.location.hash = key;
-    }
-    render() {
-        return (
-            <div className="manage-content">
-                <LeftTab handlekey={this.getKey.bind(this)} />
-                <div className="content-right">
-                   {this.state.component}
-                </div>
-            </div>
-        )
-    }
+  constructor() {
+    super();
+    this.state = {
+      loading: false,
+      component: <div></div>,
+    };
+  }
+  componentWillMount() {
+    var ids = window.location.href.indexOf('rid=');
+    var idk = window.location.href.substr(ids + 4);
+    var rid = idk.split('#');
+    let menu = getMenu(rid);
+    let curry;
+    if (menu[0].subMenus.length > 0) {
+      curry = menu[0].subMenus[0].url.split('#');
+    } else {
+      curry = menu[0].url.split('#');
+    };
+    if (window.location.hash) {
+      this.getKey(window.location.hash.substr(1));
+    } else {
+      this.getKey(curry[1]);
+    };
+  }
+  getKey(key) {
+    switch (key) {
+      //项目派单
+      case "projectAssignment":
+        require.ensure([], () => {
+          const ProjectAssignment = require("./project/projectAssignment")
+            .default;
+          this.setState({
+            component: <ProjectAssignment ApiUrl={""} />
+          });
+        });
+        break;
+      //项目查询
+      case "projectQuery":
+        require.ensure([], () => {
+          const ProjectQuery = require("./project/projectQuery")
+            .default;
+          this.setState({
+            component: <ProjectQuery ApiUrl={""} />
+          });
+        });
+        break;
+      //项目汇总表
+      case "highTech":
+        require.ensure([], () => {
+          const ProjectQuery = require("./summary/highTech")
+            .default;
+          this.setState({
+            component: <ProjectQuery ApiUrl={""} />
+          });
+        });
+        break;
+      //项目统计
+      case "projecCount":
+        require.ensure([], () => {
+          const ProjectQuery = require("./summary/projecCount")
+            .default;
+          this.setState({
+            component: <ProjectQuery ApiUrl={""} />
+          });
+        });
+        break;
+      //项目数据
+      case "projecData":
+        require.ensure([], () => {
+          const ProjecData = require("./summary/projecData")
+            .default;
+          this.setState({
+            component: <ProjecData ApiUrl={""} />
+          });
+        });
+        break;
+      //外包派单
+      case "zxsglyOutSourcingPaiDan":
+        require.ensure([], () => {
+          const ZxsglyOutSourcingPaiDan = require("./project/zxsglyOutSourcingPaiDan")
+            .default;
+          this.setState({
+            component: <ZxsglyOutSourcingPaiDan ApiUrl={""} />
+          });
+        });
+        break;
+      //外包任务派单
+      case "outsourceTaskAssignment":
+        require.ensure([], () => {
+          const OutsourceTaskAssignment = require("./project/outsourceTaskAssignment")
+            .default;
+          this.setState({
+            component: <OutsourceTaskAssignment ApiUrl={""} />
+          });
+        });
+        break;
+      //企业项目查询
+      case "enterpriseProjectQuery":
+        require.ensure([], () => {
+          const EnterpriseProjectQuery = require("./project/enterpriseProjectQuery")
+            .default;
+          this.setState({
+            component: <EnterpriseProjectQuery ApiUrl={""} />
+          });
+        });
+        break;
+      case "businessManagement":
+        require.ensure([], () => {
+          const BusinessManagement = require("./task/businessManagement/index")
+            .default;
+          this.setState({
+            component: <BusinessManagement ApiUrl={""} />
+          });
+        });
+        break;
+      //任务查询
+      case "taskQuery":
+        require.ensure([], () => {
+          const TaskQuery = require("./task/taskQuery").default;
+          this.setState({
+            component: <TaskQuery ApiUrl={""} />
+          });
+        });
+        break;
+      case "taskQueryZxs":
+        require.ensure([], () => {
+          const TaskQuery = require("./task/taskQueryZxs").default;
+          this.setState({
+            component: <TaskQuery ApiUrl={""} />
+          });
+        });
+        break;
+      //任务派单
+      case "taskAssignment":
+        require.ensure([], () => {
+          const TaskAssignment = require("./task/taskAssignment")
+            .default;
+          this.setState({
+            component: <TaskAssignment ApiUrl={""} />
+          });
+        });
+        break;
+      //专利列表
+      case "patentList":
+        require.ensure([], () => {
+          const PatentList = require("./patent/list")
+            .default;
+          this.setState({
+            component: <PatentList />
+          });
+        });
+        break;
+      //7天内提醒缴费专利列表
+      case "patentSevenList":
+        require.ensure([], () => {
+          const PatentList = require("./patent/list")
+            .default;
+          this.setState({
+            component: <PatentList status={5} />
+          });
+        });
+        break;
+      //15天内提醒缴费专利列表
+      case "patentFifteenList":
+        require.ensure([], () => {
+          const PatentList = require("./patent/list")
+            .default;
+          this.setState({
+            component: <PatentList status={4} />
+          });
+        });
+        break;
+      //30天内提醒缴费专利列表
+      case "patentThirtyList":
+        require.ensure([], () => {
+          const PatentList = require("./patent/list")
+            .default;
+          this.setState({
+            component: <PatentList status={3} />
+          });
+        });
+        break;
+      //60天内提醒缴费专利列表
+      case "patentSixtyList":
+        require.ensure([], () => {
+          const PatentList = require("./patent/list")
+            .default;
+          this.setState({
+            component: <PatentList status={2} />
+          });
+        });
+        break;
+      //90天内提醒缴费专利列表
+      case "patentNinetyList":
+        require.ensure([], () => {
+          const PatentList = require("./patent/list")
+            .default;
+          this.setState({
+            component: <PatentList status={1} />
+          });
+        });
+        break;
+      //专利成本审核列表(专利管理员查看)
+      case "patentCostList":
+        require.ensure([], () => {
+          const CostAuditList = require("../order/orderNew/costAuditList").default;
+          this.setState({
+            component: <CostAuditList isPatentManager />,
+          });
+        });
+        break;
+      //我的任务
+      case "myTask":
+        require.ensure([], () => {
+          const MyTask = require("./task/myTask").default;
+          this.setState({
+            component: <MyTask ApiUrl={""} />
+          });
+        });
+        break;
+      //我的任务
+      case "myTaskZxs":
+        require.ensure([], () => {
+          const MyTask = require("./task/myTaskZxs").default;
+          this.setState({
+            component: <MyTask ApiUrl={""} />
+          });
+        });
+        break;
+      //我的外包任务
+      case "myTaskOutsource":
+        require.ensure([], () => {
+          const MyTaskOutsource = require("./task/myTaskOutsource")
+            .default;
+          this.setState({
+            component: <MyTaskOutsource ApiUrl={""} />
+          });
+        });
+        break;
+      //我的外包任务
+      case "myTaskOutsourceZxs":
+        require.ensure([], () => {
+          const MyTaskOutsource = require("./task/myTaskOutsourceZxs")
+            .default;
+          this.setState({
+            component: <MyTaskOutsource ApiUrl={""} />
+          });
+        });
+        break;
+      //合同变更审核列表
+      case "contractChangeJsy":
+        require.ensure([], () => {
+          const ContractChangeJsy = require("./task/contractChangeJsy")
+            .default;
+          this.setState({
+            component: <ContractChangeJsy ApiUrl={""} />
+          });
+        });
+        break;
+      //合同变更审核列表
+      case "contractChangeJsjl":
+        require.ensure([], () => {
+          const ContractChangeJsjl = require("./task/contractChangeJsjl")
+            .default;
+          this.setState({
+            component: <ContractChangeJsjl ApiUrl={""} />
+          });
+        });
+        break;
+      //合同变更审核列表
+      case "contractChangeJszj":
+        require.ensure([], () => {
+          const ContractChangeJszj = require("./task/contractChangeJszj")
+            .default;
+          this.setState({
+            component: <ContractChangeJszj ApiUrl={""} />
+          });
+        });
+        break;
+      //付款申请驳回列表
+      case "payApplyReject":
+        require.ensure([], () => {
+          const PayApplyReject = require("./task/payApplyReject/index")
+            .default;
+          this.setState({
+            component: <PayApplyReject ApiUrl={""} />
+          });
+        });
+        break;
+      //任务统计
+      case "taskCount":
+        require.ensure([], () => {
+          const TaskCount = require("./task/taskCount").default;
+          this.setState({
+            component: <TaskCount ApiUrl={""} />
+          });
+        });
+        break;
+      //我的任务统计
+      case "myTaskCount":
+        require.ensure([], () => {
+          const MyTaskCount = require("./task/myTaskCount").default;
+          this.setState({
+            component: <MyTaskCount ApiUrl={""} />
+          });
+        });
+        break;
+      default:
+        require.ensure([], () => {
+          const Module = require("../module").default;
+          this.setState({
+            component: <Module ApiUrl={""} />
+          });
+        });
+    };
+    window.location.hash = key;
+  }
+  render() {
+    return (
+      <div className="manage-content">
+        <LeftTab handlekey={this.getKey.bind(this)} />
+        <div className="content-right">
+          {this.state.component}
+        </div>
+      </div>
+    )
+  }
 }
 
 export default Content;

+ 0 - 0
js/component/manageCenter/project/summary/projecData.jsx


+ 231 - 225
js/component/manageCenter/project/task/businessManagement/checkInfor.jsx

@@ -1,247 +1,253 @@
-import React,{Component} from 'react';
-import {Button, Form, Input, message, Modal, Radio, Select, Spin} from "antd";
+import React, { Component } from 'react';
+import { Button, Form, Input, message, Modal, Radio, Select, Spin } from "antd";
 import {
-    getboutique,
+  getboutique,
 } from "@/tools";
 import $ from "jquery";
 
 const formItemLayout = {
-    labelCol: { span: 8 },
-    wrapperCol: { span: 14 }
+  labelCol: { span: 8 },
+  wrapperCol: { span: 14 }
 };
 
 const FormItem = Form.Item;
 
-class checkInfor extends Component{
-    constructor(props) {
-        super(props);
-        this.state={
-            loading: false,
-            patentType:props.infor ? props.infor.patentType : '',
-            officialCost:props.infor ? props.infor.officialCost : '',
-            costReduction:props.infor ? props.infor.costReduction : '',
+class checkInfor extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      loading: false,
+      patentType: props.infor ? props.infor.patentType : '',
+      officialCost: props.infor ? props.infor.officialCost : '',
+      costReduction: props.infor ? props.infor.costReduction : '',
 
-            patentTypeList:[],
-        }
-        this.onChange = this.onChange.bind(this);
-        this.getpatentTypeList = this.getpatentTypeList.bind(this);
+      patentTypeList: [],
     }
+    this.onChange = this.onChange.bind(this);
+    this.getpatentTypeList = this.getpatentTypeList.bind(this);
+  }
 
-    componentDidMount() {
-        this.getpatentTypeList();
-    }
+  componentDidMount() {
+    this.getpatentTypeList();
+  }
 
-    onChange() {
+  onChange() {
+    this.setState({
+      loading: true,
+    });
+    if (this.state.patentType === null) {
+      message.warning('请选择专利类型')
+      return
+    }
+    if ((this.state.patentType === 0 || this.state.patentType === 2) && isNaN(parseInt(this.state.costReduction))) {
+      message.warning('请选择是否有费减')
+      return;
+    }
+    $.ajax({
+      method: "POST",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/newOrder/updateOrderTask",
+      data: {
+        id: this.props.infor.id, //项目ID
+        officialCost: this.state.officialCost, //是否有官费
+        costReduction: (this.state.patentType === 0 || this.state.patentType === 2) ? this.state.costReduction : 0, //是否有费减
+        patentType: this.state.patentType, //专利类型
+      },
+    }).done(
+      function (data) {
         this.setState({
-            loading: true,
+          loading: false,
         });
-        if(this.state.patentType === null){
-            message.warning('请选择专利类型')
-            return
+        if (!data.error.length) {
+          message.success("保存成功!");
+          this.props.onCancel();
+        } else {
+          message.warning(data.error[0].message);
         }
-        if((this.state.patentType === 0 || this.state.patentType === 2) && isNaN(parseInt(this.state.costReduction)) && this.state.officialCost === 1){
-            message.warning('请选择是否有费减')
-            return;
-        }
-        $.ajax({
-            method: "POST",
-            dataType: "json",
-            crossDomain: false,
-            url: globalConfig.context + "/api/admin/newOrder/updateOrderTask",
-            data: {
-                id: this.props.infor.id, //项目ID
-                officialCost: this.state.officialCost, //是否有官费
-                costReduction: (this.state.patentType === 0 || this.state.patentType === 2) && this.state.officialCost === 1 ?this.state.costReduction : 0, //是否有费减
-                patentType: this.state.patentType, //专利类型
-            },
-        }).done(
-            function (data) {
-                this.setState({
-                    loading: false,
-                });
-                if (!data.error.length) {
-                    message.success("保存成功!");
-                    this.props.onCancel();
-                } else {
-                    message.warning(data.error[0].message);
-                }
-            }.bind(this)
-        );
-    }
+      }.bind(this)
+    );
+  }
 
-    getpatentTypeList() {
-        $.ajax({
-            method: "get",
-            dataType: "json",
-            crossDomain: false,
-            url: globalConfig.context + '/api/admin/orderProject/getPatentType',
-            success: function (data) {
-                if (data.error.length === 0) {
-                    this.setState({
-                        patentTypeList:data.data
-                    })
-                }else{
-                    message.warning(data.error[0].message);
-                };
-            }.bind(this)
-        });
-    }
+  getpatentTypeList() {
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + '/api/admin/orderProject/getPatentType',
+      success: function (data) {
+        if (data.error.length === 0) {
+          this.setState({
+            patentTypeList: data.data
+          })
+        } else {
+          message.warning(data.error[0].message);
+        };
+      }.bind(this)
+    });
+  }
 
-    render() {
-        const {
-            commodityName,
-            commodityQuantity,
-            officialCost,
-            costReduction,
-            commodityPrice,
-            main,
-            taskComment,
-            ifCertificationFee,//是否包含认证费
-            declarationBatch,//批次
-            type,//项目类型  0 正常 1专利 2软著 3审计 4双软 5高新 6商标
-            patentType,//项目类型
-            patentTypeName,//项目类型名称
-        } = this.props.infor;
-        return (
-            <Modal
-                maskClosable={false}
-                visible={this.props.visible}
-                onOk={this.props.onCancel}
-                onCancel={this.props.onCancel}
-                width="800px"
-                title="项目任务详情"
-                footer=""
-                className="admin-desc-content"
+  render() {
+    const {
+      commodityName,
+      commodityQuantity,
+      officialCost,
+      costReduction,
+      commodityPrice,
+      main,
+      taskComment,
+      ifCertificationFee,//是否包含认证费
+      declarationBatch,//批次
+      type,//项目类型  0 正常 1专利 2软著 3审计 4双软 5高新 6商标
+      patentType,//项目类型
+      patentTypeName,//项目类型名称
+    } = this.props.infor;
+    return (
+      <Modal
+        maskClosable={false}
+        visible={this.props.visible}
+        onOk={this.props.onCancel}
+        onCancel={this.props.onCancel}
+        width="800px"
+        title="项目任务详情"
+        footer=""
+        className="admin-desc-content"
+      >
+        <Form layout="horizontal" id="demand-form">
+          <div className="clearfix">
+            <FormItem
+              className="half-item"
+              {...formItemLayout}
+              label="项目名称"
             >
-                <Form layout="horizontal" id="demand-form">
-                    <div className="clearfix">
-                        <FormItem
-                            className="half-item"
-                            {...formItemLayout}
-                            label="项目名称"
-                        >
-                            <span>{commodityName}</span>
-                        </FormItem>
-                        <FormItem
-                            className="half-item"
-                            {...formItemLayout}
-                            label="项目数量"
-                        >
-                            <span>{commodityQuantity}</span>
-                        </FormItem>
-                        <FormItem
-                            className="half-item"
-                            {...formItemLayout}
-                            label="金额(万元)"
-                        >
-                            <span>{commodityPrice}</span>
-                        </FormItem>
-                        <FormItem
-                            className="half-item"
-                            {...formItemLayout}
-                            label="主要项目"
-                        >
-                            <span>{getboutique(String(main))}</span>
-                        </FormItem>
-                        {type === 5 && <FormItem
-                            className="half-item"
-                            {...formItemLayout}
-                            label="企业申报批次"
-                        >
-                                <span>
-                                    {
-                                        declarationBatch === 1 ? '第一批' :
-                                            declarationBatch === 2 ? '第二批' :
-                                                declarationBatch === 3 ? '第三批' :
-                                                    declarationBatch === 4 ? '第四批' : '未知'
-                                    }
-                                </span>
-                        </FormItem>}
-                        <div className="clearfix">
-                            <FormItem
-                                labelCol={{ span: 4 }}
-                                wrapperCol={{ span: 16 }}
-                                label="服务说明"
-                            >
-                                <span>{taskComment}</span>
-                            </FormItem>
-                        </div>
-                        <FormItem
-                            className="half-item"
-                            {...formItemLayout}
-                            label="专利类型"
-                        >
-                            <Select
-                                placeholder="请选择专利类型"
-                                style={{ width: "200px" }}
-                                value={this.state.patentType}
-                                onChange={(e) => {
-                                    this.setState({ patentType: e });
-                                    if(e !== 0 && e !== 2){
-                                        this.setState({
-                                            costReduction: ''
-                                        })
-                                    }
-                                }}
-                            >
-                                {this.state.patentTypeList.map(function (v,k) {
-                                    return (
-                                        <Select.Option key={k} value={v.id}>{v.name}</Select.Option>
-                                    );
-                                })}
-                            </Select>
-                        </FormItem>
-                        <FormItem
-                            className="half-item"
-                            {...formItemLayout}
-                            label="官费"
-                            style={{ display: this.state.displayFees }}
-                        >
-                            <Radio.Group
-                                value={this.state.officialCost}
-                                onChange={(e) => {
-                                    this.setState({ officialCost: e.target.value });
-                                    if(e.target.value === 0){
-                                        this.setState({
-                                            costReduction: ''
-                                        })
-                                    }
-                                }}
-                            >
-                                <Radio value={1}>含官费</Radio>
-                                <Radio value={0}>不含官费</Radio>
-                            </Radio.Group>
-                        </FormItem>
-                        <FormItem
-                            className="half-item"
-                            {...formItemLayout}
-                            label="费减"
-                            style={{ display: this.state.displayFees }}
-                        >
-                            <Radio.Group
-                                disabled={this.state.officialCost === 0 || (this.state.patentType !== 0 && this.state.patentType !== 2)}
-                                value={this.state.costReduction}
-                                onChange={(e) => {
-                                    this.setState({ costReduction: e.target.value });
-                                }}
-                            >
-                                <Radio value={1}>有费减</Radio>
-                                <Radio value={0}>无费减</Radio>
-                            </Radio.Group>
-                        </FormItem>
-                    </div>
-                    <div style={{color:'#f00',paddingLeft: '67px',paddingBottom: '10px'}}>
-                        注意:技术员已发起二次确认,请核对本次费用情况,填写有误,将影响到成本支付情况
-                    </div>
-                    <div style={{display:'flex',justifyContent:"center"}}>
-                        <Button type='primary' onClick={()=>{
-                            this.onChange();
-                        }}>确认核对</Button>
-                    </div>
-                </Form>
-            </Modal>
-        );
-    }
+              <span>{commodityName}</span>
+            </FormItem>
+            <FormItem
+              className="half-item"
+              {...formItemLayout}
+              label="项目数量"
+            >
+              <span>{commodityQuantity}</span>
+            </FormItem>
+            <FormItem
+              className="half-item"
+              {...formItemLayout}
+              label="金额(万元)"
+            >
+              <span>{commodityPrice}</span>
+            </FormItem>
+            <FormItem
+              className="half-item"
+              {...formItemLayout}
+              label="主要项目"
+            >
+              <span>{getboutique(String(main))}</span>
+            </FormItem>
+            {type === 5 && <FormItem
+              className="half-item"
+              {...formItemLayout}
+              label="企业申报批次"
+            >
+              <span>
+                {
+                  declarationBatch === 1 ? '第一批' :
+                    declarationBatch === 2 ? '第二批' :
+                      declarationBatch === 3 ? '第三批' :
+                        declarationBatch === 4 ? '第四批' : '未知'
+                }
+              </span>
+            </FormItem>}
+            <div className="clearfix">
+              <FormItem
+                labelCol={{ span: 4 }}
+                wrapperCol={{ span: 16 }}
+                label="服务说明"
+              >
+                <span>{taskComment}</span>
+              </FormItem>
+            </div>
+            <div className="clearfix">
+              <FormItem
+                className="half-item"
+                {...formItemLayout}
+                label="专利类型"
+              >
+                <Select
+                  placeholder="请选择专利类型"
+                  style={{ width: "200px" }}
+                  value={this.state.patentType}
+                  onChange={(e) => {
+                    this.setState({ patentType: e });
+                    if (e !== 0 && e !== 2) {
+                      this.setState({
+                        costReduction: ''
+                      })
+                    }
+                  }}
+                >
+                  {this.state.patentTypeList.map(function (v, k) {
+                    return (
+                      <Select.Option key={k} value={v.id}>{v.name}</Select.Option>
+                    );
+                  })}
+                </Select>
+              </FormItem>
+            </div>
+            <div className="clearfix">
+              <FormItem
+                className="half-item"
+                {...formItemLayout}
+                label="官费"
+                style={{ display: this.state.displayFees }}
+              >
+                <Radio.Group
+                  value={this.state.officialCost}
+                  onChange={(e) => {
+                    this.setState({ officialCost: e.target.value });
+                    if (e.target.value === 0) {
+                      this.setState({
+                        costReduction: ''
+                      })
+                    }
+                  }}
+                >
+                  <Radio value={1}>含官费</Radio>
+                  <Radio value={0}>不含官费</Radio>
+                </Radio.Group>
+              </FormItem>
+            </div>
+            <div className="clearfix">
+              <FormItem
+                className="half-item"
+                {...formItemLayout}
+                label="费减"
+                style={{ display: this.state.displayFees }}
+              >
+                <Radio.Group
+                  disabled={this.state.patentType !== 0 && this.state.patentType !== 2}
+                  value={this.state.costReduction}
+                  onChange={(e) => {
+                    this.setState({ costReduction: e.target.value });
+                  }}
+                >
+                  <Radio value={1}>有费减</Radio>
+                  <Radio value={0}>无费减</Radio>
+                </Radio.Group>
+              </FormItem>
+            </div>
+          </div>
+          <div style={{ color: '#f00', paddingLeft: '67px', paddingBottom: '10px' }}>
+            注意:技术员已发起二次确认,请核对本次费用情况,填写有误,将影响到成本支付情况
+          </div>
+          <div style={{ display: 'flex', justifyContent: "center" }}>
+            <Button type='primary' onClick={() => {
+              this.onChange();
+            }}>确认核对</Button>
+          </div>
+        </Form>
+      </Modal>
+    );
+  }
 }
 
 export default checkInfor;

+ 74 - 101
js/component/manageCenter/project/task/myTask.jsx

@@ -138,6 +138,7 @@ const Task = React.createClass({
           this.state.outsourceStatusSearch >= 999
             ? undefined
             : this.state.outsourceStatusSearch, //外包状态搜索
+        projectName: this.state.projectName, // 项目名称
       },
       success: function (data) {
         ShowModal(this)
@@ -169,6 +170,8 @@ const Task = React.createClass({
         }
         this.setState({
           dataSource: theArr,
+          totalAmount: data.data.totalAmount || 0,
+          totalNumber: data.data.totalNumber || 0,
           pagination: this.state.pagination,
         })
       }.bind(this),
@@ -361,7 +364,7 @@ const Task = React.createClass({
           render: (text, record) => {
             if (record.outsourceType === 1) {
               return '供应商'
-            } else {
+            } else if ((record.outsourceType === 0)) {
               if (text === 0) {
                 return <Tag color="#f50">外包待审核</Tag>
               } else if (text === 1) {
@@ -371,6 +374,10 @@ const Task = React.createClass({
               } else {
                 return <div style={{ textAlign: 'center' }}>/</div>
               }
+            } else if ((record.outsourceType === 2)) {
+              return '高质量申请'
+            } else {
+              return <div style={{ textAlign: 'center' }}>/</div>
             }
           },
         },
@@ -1874,30 +1881,42 @@ const Task = React.createClass({
   },
   //导出
   exportExec() {
-    let departmentName = '',
-      depart = this.state.departmentArr || []
-    depart.map((item) => {
-      if (this.state.departmentId == item.id) {
-        departmentName = item.name
-        return
-      }
-    })
-    // 导出
-    let categoryName = '',
-      category = this.state.categoryArr || []
-    category.map((item) => {
-      if (this.state.categoryId == item.id) {
-        categoryName = item.name
-        return
-      }
-    })
+    // let departmentName = '',
+    //   depart = this.state.departmentArr || []
+    // depart.map((item) => {
+    //   if (this.state.departmentId == item.id) {
+    //     departmentName = item.name
+    //     return
+    //   }
+    // })
+    // // 导出
+    // let categoryName = '',
+    //   category = this.state.categoryArr || []
+    // category.map((item) => {
+    //   if (this.state.categoryId == item.id) {
+    //     categoryName = item.name
+    //     return
+    //   }
+    // })
     let data = {
-      departmentId: this.state.departmentId,
-      departmentName: departmentName,
-      salesName: this.state.orderRefundSearch, //订单负责人
-      startTime: this.state.releaseDate[0],
-      endTime: this.state.releaseDate[1],
-      grantStatus: this.state.grantStatus,
+      orderNo: this.state.orderNoSearch, //订单编号
+      contractNo: this.state.contractNoSearch, //合同编号
+      name: this.state.nameSearch, //客户名称
+      taskId: this.state.taskNoSearch, //项目编号
+      cid: this.state.category,//项目分类
+      deps: this.state.departmenttSearch, //订单部门
+      taskStatus: this.state.taskStatuSearch, //项目状态
+      approval: this.state.approvalSearch, //特批状态搜索
+      outsourceStatus:
+        this.state.outsourceStatusSearch >= 999
+          ? undefined
+          : this.state.outsourceStatusSearch, //外包状态搜索
+      projectName: this.state.projectName, // 项目名称
+    }
+    for (let key in data) {
+      if (!data[key]) {
+        delete data[key]
+      }
     }
     window.location.href =
       globalConfig.context +
@@ -2195,6 +2214,7 @@ const Task = React.createClass({
         approvalSearch: undefined,
         category: undefined,
         outsourceStatusSearch: [],
+        projectName: undefined,
       })
     }
     this.setState({
@@ -2355,8 +2375,6 @@ const Task = React.createClass({
     })
   },
   timeDetail(record) {
-    console.log(record)
-
     this.setState({
       loading: true,
       recordHour: record.hours,
@@ -2377,7 +2395,6 @@ const Task = React.createClass({
           this.setState({
             dataSourceTime: data.data,
           })
-          console.log(this.state.dataSourceTime)
         }
       }.bind(this),
     }).always(
@@ -2409,7 +2426,7 @@ const Task = React.createClass({
   },
   // 项目发起外包
   sureOut(startType) {
-    if (this.state.startType !== 0 && this.state.startType !== 1) {
+    if (this.state.startType !== 0 && this.state.startType !== 1 && this.state.startType !== 2) {
       message.warning('请选择类型')
       return
     }
@@ -2439,7 +2456,7 @@ const Task = React.createClass({
     //refundStatus   0-待审核 ,1-审核通过,2-审核拒绝
     //类型为供应商时不需要发起原因
     //this.state.startType 0外包  1供应商
-    if (!this.state.reason && (this.state.refundStatus === 2 || typeof this.state.refundStatus === 'undefined') && this.state.startType !== 1) {
+    if (!this.state.reason && (this.state.refundStatus === 2 || typeof this.state.refundStatus === 'undefined') && this.state.startType == 0) {
       message.warning('发起原因不能为空')
       return
     }
@@ -2507,7 +2524,6 @@ const Task = React.createClass({
               ? _this.getUrl(_this.state.pictureUrl)
               : ''
           }
-
           ajaxObj = $.ajax({
             method: 'POST',
             dataType: 'json',
@@ -3890,6 +3906,13 @@ const Task = React.createClass({
                 <Select.Option key={2}>外包审核驳回</Select.Option>
                 <Select.Option key={999}>全部</Select.Option>
               </Select>
+              <Input
+                placeholder="请输入项目名称"
+                value={this.state.projectName}
+                onChange={(e) => {
+                  this.setState({ projectName: e.target.value })
+                }}
+              />
               <Button type="primary" onClick={this.search}>
                 搜索
               </Button>
@@ -3963,6 +3986,15 @@ const Task = React.createClass({
               size={'small'}
             />
           </Spin>
+          <p
+            style={{ display: "inline-block", fontSize: "14px", color: "red" }}
+          >
+            {
+              <span style={{ marginRight: 10 }}>
+                {`累计:${this.state.totalNumber}个,共${this.state.totalAmount}万元`}
+              </span>
+            }
+          </p>
         </div>
         <Assign
           title="项目"
@@ -5000,6 +5032,7 @@ const Task = React.createClass({
                           >
                             <Radio value={0}>外包(不走总部)</Radio>
                             <Radio value={1}>供应商信息</Radio>
+                            {adminData.isTechTransfer && <Radio value={2}>高质量申请</Radio>}
                           </Radio.Group>
                         </FormItem>
                       </div>
@@ -5070,7 +5103,7 @@ const Task = React.createClass({
                         </FormItem>
                       </div>
                       {/*外包类型无此选项*/}
-                      {this.state.startType !== 0 && this.state.projectType === 1 ?
+                      {this.state.startType === 1 && this.state.projectType === 1 ?
                         <div className="clearfix">
                           <FormItem
                             className="half-item"
@@ -5181,7 +5214,7 @@ const Task = React.createClass({
                       {/*this.state.startType 0外包 1供应商*/}
                       <div
                         style={{
-                          display: this.state.startType === 0 ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'),  //0正常 1专利 2软著 3审计
+                          display: (this.state.startType === 0 || this.state.startType === 2) ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'),  //0正常 1专利 2软著 3审计
                         }}
                       >
                         <span
@@ -5216,7 +5249,7 @@ const Task = React.createClass({
                       <div
                         className="clearfix"
                         style={{
-                          display: this.state.startType === 0 ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'),  //0正常 1专利 2软著 3审计
+                          display: (this.state.startType === 0 || this.state.startType === 2) ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'),  //0正常 1专利 2软著 3审计
                         }}
                       >
                         <Spin spinning={this.state.payNodeLoading}>
@@ -5260,36 +5293,12 @@ const Task = React.createClass({
                           />
                         </FormItem>
                       </div>
-                      {/*<div className="clearfix">
-                                          <FormItem className="half-item"
-                                              {...formItemLayout}
-                                              label="上传协议文件" style={{height:"auto"}}>
-                                               <Upload header={{authorization: 'authorization-text'}} action={globalConfig.context + "/api/admin/outsourceOrg/uploadOutsourceFile"}
-                                                      data={(e)=>{
-                                                          return {
-                                                              'sign': e.name.substring(0,e.name.lastIndexOf("."))
-                                                          }
-                                                      }}
-                                                      fileList={this.state.fileUrl}
-                                                      onChange={(e)=>{
-                                                          this.setState({
-                                                              attachmentUrl:e.fileList,
-                                                              fileUrl:e.fileList
-                                                          })
-                                                      }}>
-                                                  {fileUrl.length>1?null:<Button>
-                                                  <Icon type="upload" /> 点击上传
-                                                  </Button>}
-                                              </Upload>
-                                              <span className="tip" style={{display:"inline-block"}}>支持文件格式: doc,excel,ppt</span>
-                                          </FormItem>
-                                      </div>*/}
                       <p
                         className="tip"
                         style={{
                           paddingBottom: '12px',
                           width: '240px',
-                          marginLeft: '145px',
+                          marginLeft: '195px',
                           color: 'red',
                         }}
                       >
@@ -5313,7 +5322,7 @@ const Task = React.createClass({
                       </div>
                       {/*只有审核拒绝和第一次发起外包的时候才要填写发起原因   如果是类型为供应商则不需要发起原因*/}
                       {/*this.state.startType  0外包  1供应商*/}
-                      {(typeof this.state.refundStatus === 'undefined' || this.state.refundStatus === 2) && this.state.startType !== 1 ?
+                      {(typeof this.state.refundStatus === 'undefined' || this.state.refundStatus === 2) && this.state.startType == 0 ?
                         <div className="clearfix">
                           <FormItem
                             className="half-item"
@@ -5465,43 +5474,6 @@ const Task = React.createClass({
                             ))
                           }
                         </div>
-                        {/*  <div*/}
-                        {/*    className="clearfix"*/}
-                        {/*    style={{*/}
-                        {/*      display: this.state.refundStatus == 0 ? 'none' : 'block',*/}
-                        {/*    }}*/}
-                        {/*  >*/}
-                        {/*    <FormItem*/}
-                        {/*      className="half-item"*/}
-                        {/*      {...formItemLayout}*/}
-                        {/*      label="审核意见"*/}
-                        {/*    >*/}
-                        {/*      <span>{this.state.remarks}</span>*/}
-                        {/*    </FormItem>*/}
-                        {/*  </div>*/}
-                        {/*  {parseInt(this.state.startType) !== 1 ?<div className="clearfix">*/}
-                        {/*    <FormItem*/}
-                        {/*      className="half-item"*/}
-                        {/*      {...formItemLayout}*/}
-                        {/*      label="审核结果"*/}
-                        {/*    >*/}
-                        {/*      <span>{getRefundStatus(this.state.refundStatus)}</span>*/}
-                        {/*    </FormItem>*/}
-                        {/*  </div> : <div/>}*/}
-                        {/*  <div*/}
-                        {/*    className="clearfix"*/}
-                        {/*    style={{*/}
-                        {/*      display: this.state.refundStatus == 0 ? 'none' : 'block',*/}
-                        {/*    }}*/}
-                        {/*  >*/}
-                        {/*    <FormItem*/}
-                        {/*      className="half-item"*/}
-                        {/*      {...formItemLayout}*/}
-                        {/*      label="审核时间"*/}
-                        {/*    >*/}
-                        {/*      <span>{this.state.auditTimes}</span>*/}
-                        {/*    </FormItem>*/}
-                        {/*  </div>*/}
                       </div>
                     ) : (
                       ''
@@ -6319,6 +6291,7 @@ const Task = React.createClass({
                           >
                             <Radio value={0}>外包(不走总部)</Radio>
                             <Radio value={1}>供应商信息</Radio>
+                            {adminData.isTechTransfer && <Radio value={2}>高质量申请</Radio>}
                           </Radio.Group>
                         </FormItem>
                       </div>
@@ -6388,7 +6361,7 @@ const Task = React.createClass({
                           </Radio.Group>
                         </FormItem>
                       </div>
-                      {this.state.startType !== 0 && this.state.projectType === 1 ?
+                      {this.state.startType === 1 && this.state.projectType === 1 ?
                         <div className="clearfix">
                           <FormItem
                             className="half-item"
@@ -6502,7 +6475,7 @@ const Task = React.createClass({
                       {/*如果是软著类或者专利类的专利申请,隐藏付款节点*/}
                       <div
                         style={{
-                          display: this.state.startType === 0 ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'),  //0正常 1专利 2软著 3审计
+                          display: (this.state.startType === 0 || this.state.startType === 2) ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'),  //0正常 1专利 2软著 3审计
                         }}
                       >
                         <span
@@ -6537,7 +6510,7 @@ const Task = React.createClass({
                       <div
                         className="clearfix"
                         style={{
-                          display: this.state.startType === 0 ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'),  //0正常 1专利 2软著 3审计
+                          display: (this.state.startType === 0 || this.state.startType === 2) ? 'block' : ((this.state.projectType === 1 && this.state.patentType === 0) || this.state.projectType === 2 ? 'none' : 'block'),  //0正常 1专利 2软著 3审计
                         }}
                       >
                         <Spin spinning={this.state.payNodeLoading}>
@@ -6612,7 +6585,7 @@ const Task = React.createClass({
                       </div>
                       {/*只有审核拒绝和第一次发起外包的时候才要填写发起原因 如果是类型为供应商则不需要发起原因*/}
                       {/*this.state.startType  0外包  1供应商*/}
-                      {(typeof this.state.refundStatus === 'undefined' || this.state.refundStatus === 2) && this.state.startType !== 1 ?
+                      {(typeof this.state.refundStatus === 'undefined' || this.state.refundStatus === 2) && this.state.startType == 0 ?
                         <div className="clearfix">
                           <FormItem
                             className="half-item"
@@ -6841,7 +6814,7 @@ const Task = React.createClass({
             ThirdId={this.state.ThirdId}
             tid={this.state.tid}
             patentType={this.state.patentType}
-            projectType={this.state.startType === 0 ? 0 : this.state.projectType}
+            projectType={(this.state.startType === 0 || this.state.startType === 2) ? 0 : this.state.projectType}
             realProjectType={this.state.projectType}       //真实的项目类型
             startType={this.state.startType}               //项目类型 0外包  1供应商
             thirdCompanyName={this.state.thirdCompanyName}

+ 62 - 2
js/component/manageCenter/set/business/businessProject.jsx

@@ -105,6 +105,7 @@ const BusinessProject = Form.create()(React.createClass({
         district: dis, //区
         activityFlag: this.state.activityFlag, //活动生效标识
         status: this.state.status, //项目状态
+        restrictStatus: this.state.selrestrictStatus, //是否限定项目
         type: this.state.type,
       },
       success: function (data) {
@@ -147,6 +148,7 @@ const BusinessProject = Form.create()(React.createClass({
               activityPrice: thisdata.activityPrice, //活动价
               activityFlag: thisdata.activityFlag, //活动生效标识
               status: thisdata.status, //项目状态
+              restrictStatus: thisdata.restrictStatus, // 是否限定项目
               type: thisdata.type,
               arrProvinceCity: ProvinceCity,
             });
@@ -308,6 +310,16 @@ const BusinessProject = Form.create()(React.createClass({
           key: "bname",
         },
         {
+          title: "是否限定项目",
+          dataIndex: "restrictStatus",
+          key: "restrictStatus",
+          render: (text) => {
+            return (
+              <span>{["否", "是"][text]}</span>
+            );
+          },
+        },
+        {
           title: "业务品类",
           dataIndex: "cname",
           key: "cname",
@@ -515,6 +527,7 @@ const BusinessProject = Form.create()(React.createClass({
             status: this.state.editStatus,//项目状态
             patentTransfer: this.state.typeStatus == 1 ? this.state.patentTransfer : undefined,
             type: this.state.typeStatus,//项目分类
+            restrictStatus: this.state.restrictStatus, // 是否限定项目
             country: isCountry,//是否全国
             province: pro ? pro : '',//省
             city: city ? city : '',//市
@@ -609,12 +622,15 @@ const BusinessProject = Form.create()(React.createClass({
             str = "商标"
           } else if (thisdata.type == 7) {
             str = "会员"
+          } else if (thisdata.type == 8) {
+            str = "投标"
           }
           theArr.push({
             editId: thisdata.id,//每一条记录的ID
             editName: thisdata.bname,//项目名称
             editCname: thisdata.cname,//项目分类
             editCid: thisdata.cid,//项目分类
+            restrictStatus: thisdata.restrictStatus,//是否限定项目
             editCountry: thisdata.country,//是否全国
             editProvince: thisdata.province,//省
             editCity: thisdata.city,//市
@@ -658,12 +674,15 @@ const BusinessProject = Form.create()(React.createClass({
           str = "商标"
         } else if (thisdata.type == 7) {
           str = "会员"
+        } else if (thisdata.type == 8) {
+          str = "投标"
         }
         this.setState({
           editId: thisdata.id, //每一条记录的ID
           editName: thisdata.bname, //项目名称
           editCname: thisdata.cname, //项目分类
-          editCid: thisdata.cid, //项目分类
+          restrictStatus: thisdata.restrictStatus,//是否限定项目
+          editCid: thisdata.cid,
           editCountry: thisdata.country, //是否全国
           editProvince: thisdata.province, //省
           editCity: thisdata.city, //市
@@ -1058,12 +1077,13 @@ const BusinessProject = Form.create()(React.createClass({
   },
   //搜索部分的清零
   reset() {
-    this.state.bname = '';//项目名称清零
+    this.state.bname = undefined;//项目名称清零
     this.state.cid = undefined;//品类名称清零
     this.state.ressSearch = undefined;//省市区清零
     this.state.activityFlag = undefined;//活动生效清零
     this.state.status = undefined;//项目状态清零
     this.state.type = undefined;//项目分类清零
+    this.state.selrestrictStatus = undefined;//是否限定项目
     this.loadData();
   },
   //新增部分的清零
@@ -1167,6 +1187,17 @@ const BusinessProject = Form.create()(React.createClass({
                 >
                   {this.state.contactsOption}
                 </Select>
+                <Select
+                  placeholder="是否限定项目"
+                  style={{ width: "200px", marginRight: "10px" }}
+                  value={this.state.selrestrictStatus}
+                  onChange={(e) => {
+                    this.setState({ selrestrictStatus: e });
+                  }}
+                >
+                  <Select.Option value={0} >否</Select.Option>
+                  <Select.Option value={1} >是</Select.Option>
+                </Select>
                 <Button
                   type="primary"
                   onClick={this.search}
@@ -2206,6 +2237,8 @@ const BusinessProject = Form.create()(React.createClass({
                                 str = "商标";
                               } else if (e == 7) {
                                 str = "会员";
+                              } else if (e == 8) {
+                                str = "投标";
                               }
                               this.setState({
                                 typeStatus: e,
@@ -2221,6 +2254,7 @@ const BusinessProject = Form.create()(React.createClass({
                             <Select.Option key={5}>高新</Select.Option>
                             <Select.Option key={6}>商标</Select.Option>
                             <Select.Option key={7}>会员</Select.Option>
+                            <Select.Option key={8}>投标</Select.Option>
                           </Select>
                         </FormItem>
                         {this.state.typeStatus == 1 && <FormItem
@@ -2258,6 +2292,32 @@ const BusinessProject = Form.create()(React.createClass({
                           className="half-item"
                           labelCol={{ span: 4 }}
                           wrapperCol={{ span: 12 }}
+                          label="是否限定项目"
+                        >
+                          <Select
+                            placeholder="是否限定项目"
+                            value={this.state.restrictStatus}
+                            style={{ width: "94%" }}
+                            onChange={(e) => {
+                              this.setState({ restrictStatus: e });
+                            }}
+                          >
+                            {[
+                              { key: "否", value: 0 },
+                              { key: "是", value: 1 },
+                            ].map(function (item) {
+                              return (
+                                <Select.Option key={item.value} value={item.value}>
+                                  {item.key}
+                                </Select.Option>
+                              );
+                            })}
+                          </Select>
+                        </FormItem>
+                        <FormItem
+                          className="half-item"
+                          labelCol={{ span: 4 }}
+                          wrapperCol={{ span: 12 }}
                           label="创建时间"
                         >
                           <span style={{ width: "94%" }}>

+ 142 - 142
js/component/manageCenter/set/content.jsx

@@ -5,149 +5,149 @@ import LeftTab from '../leftTab';
 import { getMenu } from '../publicMenu.js'
 
 class Content extends Component {
-    constructor() {
-        super();
-        this.state = {
-            loading: false,
-            component: <div />,
-        };
-    }
-    componentWillMount() {
-        var ids = window.location.href.indexOf('rid=');
-        var idk = window.location.href.substr(ids + 4);
-        var rid = idk.split('#');
-        let menu = getMenu(rid);
-        let curry;
-        if (menu[0].subMenus.length > 0) {
-            curry = menu[0].subMenus[0].url.split('#');
-        } else {
-            curry = menu[0].url.split('#');
-        };
-        if (window.location.hash) {
-            this.getKey(window.location.hash.substr(1));
-        } else {
-            this.getKey(curry[1]);
-        };
-    }
-    getKey(key) {
-        switch (key) {
-            case 'softwareConfigure':
-                require.ensure([], () => {
-                    const SoftwareConfigure = require('./projectConfigure/softwareConfigure').default;
-                    this.setState({
-                        component: <SoftwareConfigure />,
-                    });
-                });
-                break;
-            case 'officialFees':
-                require.ensure([], () => {
-                    const OfficialFees = require('./projectConfigure/officialFees').default;
-                    this.setState({
-                        component: <OfficialFees />,
-                    });
-                });
-                break;
-            case 'patentFees':
-                require.ensure([], () => {
-                    const PatentFees = require('./projectConfigure/patentFees').default;
-                    this.setState({
-                        component: <PatentFees />,
-                    });
-                });
-                break;
-            case 'organization':
-                require.ensure([], () => {
-                    const Organization = require('./organization/organization').default;
-                    this.setState({
-                        component: <Organization />,
-                    });
-                });
-                break;
-            case 'workeTimes':
-                require.ensure([], () => {
-                    const WorkeTimes = require('./workeTimes/index').default;
-                    this.setState({
-                        component: <WorkeTimes />,
-                    });
-                });
-                break;
-            case 'businessCategory':
-                require.ensure([], () => {
-                    const BusinessCategory = require('./business/businessCategory').default;
-                    this.setState({
-                        component: <BusinessCategory />
-                    });
-                });
-                break;
-            case 'businessProject':
-                require.ensure([], () => {
-                    const BusinessProject = require('./business/businessProject').default;
-                    this.setState({
-                        component: <BusinessProject />
-                    });
-                });
-                break;
-            case 'businessQuery':
-                require.ensure([], () => {
-                    const BusinessQuery = require('./business/businessQuery').default;
-                    this.setState({
-                        component: <BusinessQuery />
-                    });
-                });
-                break;
-            case 'user':
-                require.ensure([], () => {
-                    const User = require('./userManagementS/user').default;
-                    this.setState({
-                        component: <User />
-                    });
-                });
-                break;
+  constructor() {
+    super();
+    this.state = {
+      loading: false,
+      component: <div />,
+    };
+  }
+  componentWillMount() {
+    var ids = window.location.href.indexOf('rid=');
+    var idk = window.location.href.substr(ids + 4);
+    var rid = idk.split('#');
+    let menu = getMenu(rid);
+    let curry;
+    if (menu[0].subMenus.length > 0) {
+      curry = menu[0].subMenus[0].url.split('#');
+    } else {
+      curry = menu[0].url.split('#');
+    };
+    if (window.location.hash) {
+      this.getKey(window.location.hash.substr(1));
+    } else {
+      this.getKey(curry[1]);
+    };
+  }
+  getKey(key) {
+    switch (key) {
+      case 'softwareConfigure':
+        require.ensure([], () => {
+          const SoftwareConfigure = require('./projectConfigure/softwareConfigure').default;
+          this.setState({
+            component: <SoftwareConfigure />,
+          });
+        });
+        break;
+      case 'officialFees':
+        require.ensure([], () => {
+          const OfficialFees = require('./projectConfigure/officialFees').default;
+          this.setState({
+            component: <OfficialFees />,
+          });
+        });
+        break;
+      case 'patentFees':
+        require.ensure([], () => {
+          const PatentFees = require('./projectConfigure/patentFees').default;
+          this.setState({
+            component: <PatentFees />,
+          });
+        });
+        break;
+      case 'organization':
+        require.ensure([], () => {
+          const Organization = require('./organization/organization').default;
+          this.setState({
+            component: <Organization />,
+          });
+        });
+        break;
+      case 'workeTimes':
+        require.ensure([], () => {
+          const WorkeTimes = require('./workeTimes/index').default;
+          this.setState({
+            component: <WorkeTimes />,
+          });
+        });
+        break;
+      case 'businessCategory':
+        require.ensure([], () => {
+          const BusinessCategory = require('./business/businessCategory').default;
+          this.setState({
+            component: <BusinessCategory />
+          });
+        });
+        break;
+      case 'businessProject':
+        require.ensure([], () => {
+          const BusinessProject = require('./business/businessProject').default;
+          this.setState({
+            component: <BusinessProject />
+          });
+        });
+        break;
+      case 'businessQuery':
+        require.ensure([], () => {
+          const BusinessQuery = require('./business/businessQuery').default;
+          this.setState({
+            component: <BusinessQuery />
+          });
+        });
+        break;
+      case 'user':
+        require.ensure([], () => {
+          const User = require('./userManagementS/user').default;
+          this.setState({
+            component: <User />
+          });
+        });
+        break;
 
-            case 'roles':
-                require.ensure([], () => {
-                    const Roles = require('./userManagementS/roles').default;
-                    this.setState({
-                        component: <Roles />,
-                    });
-                });
-                break;
-            case 'permission':
-                require.ensure([], () => {
-                    const Jurisdiction = require('./userManagementS/jurisdiction').default;
-                    this.setState({
-                        component: <Jurisdiction />
-                    });
-                });
-                break;
-            case 'bar':
-                require.ensure([], () => {
-                    const Bar = require('./amoeba/barList').default;
-                    this.setState({
-                        component: <Bar />
-                    });
-                });
-                break;
-            default:
-                require.ensure([], () => {
-                    const Module = require('../module').default;
-                    this.setState({
-                        component: <Module />
-                    });
-                });
-        };
-        window.location.hash = key;
-    }
-    render() {
-        return (
-            <div className="manage-content">
-                <LeftTab handlekey={this.getKey.bind(this)} />
-                <div className="content-right">
-                    {this.state.component}
-                </div>
-            </div>
-        )
-    }
+      case 'roles':
+        require.ensure([], () => {
+          const Roles = require('./userManagementS/roles').default;
+          this.setState({
+            component: <Roles />,
+          });
+        });
+        break;
+      case 'permission':
+        require.ensure([], () => {
+          const Jurisdiction = require('./userManagementS/jurisdiction').default;
+          this.setState({
+            component: <Jurisdiction />
+          });
+        });
+        break;
+      case 'bar':
+        require.ensure([], () => {
+          const Bar = require('./amoeba/barList').default;
+          this.setState({
+            component: <Bar />
+          });
+        });
+        break;
+      default:
+        require.ensure([], () => {
+          const Module = require('../module').default;
+          this.setState({
+            component: <Module />
+          });
+        });
+    };
+    window.location.hash = key;
+  }
+  render() {
+    return (
+      <div className="manage-content">
+        <LeftTab handlekey={this.getKey.bind(this)} />
+        <div className="content-right">
+          {this.state.component}
+        </div>
+      </div>
+    )
+  }
 }
 
 export default Content;

+ 64 - 0
js/component/manageCenter/standard/content.jsx

@@ -0,0 +1,64 @@
+import React, { Component } from 'react';
+import '../content.less';
+import './content.less';
+import LeftTab from '../leftTab';
+import { getMenu } from '../publicMenu.js'
+
+class Content extends Component {
+  constructor() {
+    super();
+    this.state = {
+      loading: false,
+      component: <div />,
+    };
+  }
+  componentWillMount() {
+    var ids = window.location.href.indexOf('rid=');
+    var idk = window.location.href.substr(ids + 4);
+    var rid = idk.split('#');
+    let menu = getMenu(rid);
+    let curry;
+    if (menu[0].subMenus.length > 0) {
+      curry = menu[0].subMenus[0].url.split('#');
+    } else {
+      curry = menu[0].url.split('#');
+    };
+    if (window.location.hash) {
+      this.getKey(window.location.hash.substr(1));
+    } else {
+      this.getKey(curry[1]);
+    };
+  }
+  getKey(key) {
+    switch (key) {
+      case 'standard':
+        require.ensure([], () => {
+          const Standard = require('./stList/index').default;
+          this.setState({
+            component: <Standard />
+          });
+        });
+        break;
+      default:
+        require.ensure([], () => {
+          const Module = require('../module').default;
+          this.setState({
+            component: <Module />
+          });
+        });
+    };
+    window.location.hash = key;
+  }
+  render() {
+    return (
+      <div className="manage-content">
+        <LeftTab handlekey={this.getKey.bind(this)} />
+        <div className="content-right">
+          {this.state.component}
+        </div>
+      </div>
+    )
+  }
+}
+
+export default Content;

+ 112 - 0
js/component/manageCenter/standard/content.less

@@ -0,0 +1,112 @@
+.user-content {
+  background: #fff;
+  padding: 20px;
+
+  .content-title {
+    color: #333;
+    font-size: 16px;
+  }
+
+  .user-search {
+    margin-bottom: 10px;
+
+    >input {
+      width: 140px;
+    }
+
+    >* {
+      margin-right: 10px;
+      margin-top: 10px;
+    }
+
+    >input,
+    >button,
+    .ant-select {
+      margin-top: 10px;
+      margin-right: 10px;
+    }
+
+    .ant-switch {
+      margin-left: 10px;
+    }
+
+    .search-more {
+      margin: 10px 0;
+    }
+
+    .search-div {
+      display: inline-block;
+      margin-top: 10px;
+      margin-right: 10px;
+    }
+  }
+}
+
+.ant-modal-body {
+  .modal-box {
+    overflow: hidden;
+    line-height: 28px;
+    margin-bottom: 10px;
+
+    .modal-box-title {
+      float: left;
+      width: 84px;
+      text-align: right;
+      margin-right: 20px;
+    }
+
+    .modal-box-detail {
+      float: left;
+      width: 400px;
+
+      >span {
+        margin-right: 6px;
+      }
+    }
+
+    >button {
+      margin-right: 20px;
+    }
+  }
+}
+
+.no-all-select {
+  .ant-table-selection {
+    .ant-checkbox {
+      display: none;
+    }
+  }
+}
+
+.addButton {
+  float: right;
+  margin-right: 50px !important;
+}
+
+.tip {
+  color: red;
+  font-size: 12px;
+}
+
+.division {
+  margin: 0 auto;
+  margin-top: 25px;
+  width: 80%;
+}
+
+.fa {
+  display: flex;
+  justify-content: space-around;
+}
+
+// .ant-upload-select{
+// 	vertical-align: top;
+// }
+
+.ant-upload.ant-upload-select {
+  vertical-align: top;
+}
+
+.ant-upload-list-item {
+  font-size: 14px;
+}

+ 802 - 0
js/component/manageCenter/standard/stList/index.jsx

@@ -0,0 +1,802 @@
+import React from 'react';
+import $ from 'jquery/src/ajax';
+import {
+  Form, Icon, Button, Input, Select, AutoComplete, Spin, Table,
+  message, DatePicker, Modal, Tabs
+} from 'antd';
+import moment from 'moment';
+import { ShowModal, splitUrl } from '../../../tools.js';
+import { ChooseList } from "../../order/orderNew/chooseList";
+import "./index.less";
+import ImgList from "../../../common/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
+          isSupportPDF={true}
+          domId={this.props.domId}
+          uploadConfig={{
+            action: globalConfig.context + "/api/admin/standard/uploadPicture",
+            data: { sign: "standard_document" },
+            multiple: true,
+            listType: "picture-card",
+          }}
+          onChange={(infor) => {
+            this.handleChange(infor);
+          }}
+          fileList={fileList}
+        />
+      </div>
+    );
+  },
+
+});
+
+const { TabPane } = Tabs
+const FormItem = Form.Item;
+const Standard = Form.create()(React.createClass({
+
+  getInitialState() {
+    return {
+      searchValues: {},
+      loading: false,
+      changeList: undefined, // 更改后的表格显示数据
+      dataSource: [],
+      departmentArr: [],
+      typeList: [
+        { key: "国家标准", value: 0, },
+        { key: "行业标准", value: 1, },
+        { key: "地方标准", value: 2, },
+        { key: "团体标准", value: 3, },
+        { key: "国际标准", value: 4, },
+      ],
+      pagination: {
+        defaultCurrent: 1,
+        defaultPageSize: 10,
+        showQuickJumper: true,
+        pageSize: 20,
+        onChange: function (page) {
+          this.loadData(page);
+        }.bind(this),
+        showTotal: function (total) {
+          return '共' + total + '条数据';
+        }
+      },
+      columns: [
+        {
+          title: '标准编号',
+          dataIndex: 'serialNumber',
+          key: 'serialNumber',
+        },
+        {
+          title: '标准名称',
+          dataIndex: 'name',
+          key: 'name',
+        },
+        {
+          title: '参考',
+          dataIndex: 'reference',
+          key: 'reference',
+          render: (text, record) => <span>{['国家 ', '行业 ', '地方 ', '团体 ', '国际 '][record.type]}{text}</span>
+        },
+        {
+          title: '部门',
+          dataIndex: 'depName',
+          key: 'depName',
+        },
+        {
+          title: '负责人',
+          dataIndex: 'adminName',
+          key: 'adminName',
+        },
+        {
+          title: '标准状态',
+          dataIndex: 'status',
+          key: 'status',
+          render: text => <span style={{ color: ["red", "green"][text] }}>{["关闭", "开启"][text]}</span>
+        },
+        {
+          title: '更新时间',
+          dataIndex: 'updateTime',
+          key: 'updateTime',
+        },
+        {
+          title: '附件',
+          dataIndex: 'url',
+          key: 'url',
+          render: (text, record, index) =>
+            <div className='selStandard'>
+              <ImgList
+                fileList={text ? splitUrl(text, ',', globalConfig.avatarHost + '/upload') : []}
+                domId={"selStandard" + index}
+              />
+            </div>
+        },
+      ],
+      visible: "",
+      data: {},
+      orgCodeUrl: [],
+    };
+  },
+
+  componentWillMount() {
+    this.loadData();
+    this.departmentList();
+  },
+
+  // 列表接口
+  loadData(pageNo) {
+    const { searchValues, pagination } = this.state;
+    this.setState({
+      loading: true,
+    });
+    let datas = Object.assign(searchValues, {
+      pageNo: pageNo || 1,
+      pageSize: pagination.pageSize,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/standard/list",
+      data: datas,
+      success: function (data) {
+        ShowModal(this);
+        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,
+            });
+          } 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)
+    );
+  },
+
+  //部门
+  departmentList() {
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/organization/selectSuperId",
+      data: {},
+      success: function (data) {
+        let thedata = data.data;
+        let theArr = [];
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          }
+        } else {
+          thedata.map(function (item, index) {
+            theArr.push({
+              key: index,
+              name: item.name,
+              id: item.id
+            });
+          });
+        }
+        this.setState({
+          departmentArr: theArr
+        });
+      }.bind(this)
+    }).always(
+      function () {
+
+      }.bind(this)
+    );
+  },
+
+  search() {
+    this.loadData();
+  },
+
+  reset() {
+    this.setState({
+      searchValues: {}
+    }, () => {
+      this.loadData();
+    })
+  },
+
+  changeList(arr) {
+    const newArr = [];
+    this.state.columns.forEach(item => {
+      arr.forEach(val => {
+        if (val === item.title) {
+          newArr.push(item);
+        }
+      });
+    });
+    this.setState({
+      changeList: newArr
+    });
+  },
+
+  addClick() {
+    this.setState({
+      visible: "add"
+    })
+  },
+
+  tableRowClick(e) {
+    if (!adminData.isSuperAdmin) {
+      return
+    }
+    this.setState({
+      visible: "edit",
+    })
+    this.getDetails(e.id)
+    // const orgCodeUrl = e.url ? splitUrl(e.url, ',', globalConfig.avatarHost + '/upload') : []
+    // this.setState({
+    //   visible: "edit",
+    //   data: e,
+    //   orgCodeUrl,
+    //   adminName: e.adminName,
+    // })
+  },
+
+  getDetails(id) {
+    this.setState({
+      loading: true
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/standard/get",
+      data: {
+        id,
+      },
+      success: function (data) {
+        let thedata = data.data || {};
+        let orgCodeUrl = []
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          };
+        } else {
+          orgCodeUrl = thedata.url ? splitUrl(thedata.url, ',', globalConfig.avatarHost + '/upload') : []
+        }
+        this.setState({
+          data: thedata,
+          orgCodeUrl,
+          adminName: thedata.adminName,
+        })
+      }.bind(this),
+    }).always(function () {
+      this.setState({
+        loading: false
+      });
+    }.bind(this));
+  },
+
+  getOrgCodeUrl(e) {
+    this.setState({
+      orgCodeUrl: e
+    });
+  },
+
+  handleCancel() {
+    this.setState({
+      visible: "",
+      adminName: undefined,
+      data: {},
+      orgCodeUrl: [],
+    })
+  },
+
+  handleSubmit() {
+    const { data } = this.state
+    if (!data.serialNumber) {
+      message.warning('标准编号不能为空!');
+      return;
+    }
+    if (!data.name) {
+      message.warning('标准名称不能为空!');
+      return;
+    }
+    if (!data.depId) {
+      message.warning('部门不能为空!');
+      return;
+    }
+    if (!data.status && data.status != 0) {
+      message.warning('请选择状态!');
+      return;
+    }
+    let pictureUrl = "";
+    if (this.state.orgCodeUrl.length) {
+      let picArr = [];
+      this.state.orgCodeUrl.map(function (item) {
+        if (
+          item.response &&
+          item.response.data &&
+          item.response.data.length
+        ) {
+          picArr.push(item.response.data);
+        }
+      });
+      pictureUrl = picArr.join(",");
+    }
+    $.ajax({
+      method: "POST",
+      dataType: "json",
+      crossDomain: false,
+      url:
+        data.id
+          ? globalConfig.context + '/api/admin/standard/update'
+          : globalConfig.context + '/api/admin/standard/add',
+      data: Object.assign(data, {
+        url: pictureUrl,
+      }),
+    }).done(function (data) {
+      this.setState({
+        loading: false
+      });
+      if (!data.error.length) {
+        message.success('保存成功!');
+        this.handleCancel();
+        this.loadData();
+      } else {
+        message.warning(data.error[0].message);
+      }
+    }.bind(this));
+  },
+
+  followUp(e) {
+    this.setState({
+      adminName: 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 { data, fjlist } = this.state;
+    const newdataSources = JSON.stringify(fjlist) == "{}" ? [] : fjlist;
+    this.setState({
+      data: Object.assign(data, {
+        aid: newdataSources.find((item) => item.name == value).id,
+      }),
+    });
+  },
+
+  render() {
+    const { RangePicker } = DatePicker;
+    let departmentArr = this.state.departmentArr || [];
+    const { searchValues, data } = this.state
+    const dataSources = this.state.fjlist || [];
+    const options = dataSources.map((group) => (
+      <Select.Option key={group.id} value={group.name}>
+        {group.name}
+      </Select.Option>
+    ));
+    const formItemLayout = {
+      labelCol: { span: 8 },
+      wrapperCol: { span: 14 },
+    };
+    return (
+      <div className="user-content">
+        <div className="content-title">
+          <Tabs defaultActiveKey="1" className="test">
+            <TabPane tab="搜索" key="1">
+              <div className="user-search" style={{ marginLeft: 10 }}>
+                <Input
+                  placeholder="请输入标准名称"
+                  value={searchValues["name"]
+                    ? searchValues["name"]
+                    : ""}
+                  onChange={(e) => {
+                    searchValues["name"] = e.target.value;
+                    this.setState({
+                      searchValues: searchValues,
+                    });
+                  }}
+                />
+                <Select
+                  placeholder="请输入部门名称"
+                  style={{ width: 230 }}
+                  value={searchValues["depId"]
+                    ? searchValues["depId"]
+                    : undefined}
+                  onChange={e => {
+                    searchValues["depId"] = e;
+                    this.setState({
+                      searchValues: searchValues,
+                    });
+                  }}
+                >
+                  {departmentArr.map(function (item) {
+                    return (
+                      <Select.Option key={item.id}>{item.name}</Select.Option>
+                    );
+                  })}
+                </Select>
+                <Select
+                  placeholder="状态"
+                  style={{ width: 140 }}
+                  value={searchValues["status"]}
+                  onChange={(e) => {
+                    searchValues["status"] = e;
+                    this.setState({
+                      searchValues: searchValues,
+                    });
+                  }}
+                >
+                  <Select.Option value={null}>全部</Select.Option>
+                  <Select.Option value={0}>关闭</Select.Option>
+                  <Select.Option value={1}>开启</Select.Option>
+                </Select>
+                <span>时间:</span>
+                <RangePicker
+                  style={{ width: 300 }}
+                  value={[
+                    searchValues.startTime ? moment(searchValues.startTime) : null,
+                    searchValues.endTime ? moment(searchValues.endTime) : null,
+                  ]}
+                  onChange={(data, dataString) => {
+                    this.setState({
+                      searchValues: Object.assign(searchValues, {
+                        startTime: dataString[0],
+                        endTime: dataString[1],
+                      }),
+                    });
+                  }}
+                />
+                <Button
+                  type="primary"
+                  onClick={this.search}
+                  style={{ margin: "0 10px" }}
+                >搜索</Button>
+                <Button onClick={this.reset}>重置</Button>
+              </div>
+            </TabPane>
+            <TabPane tab="更改表格显示数据" key="2">
+              <div style={{ marginLeft: 10 }}>
+                <ChooseList
+                  columns={this.state.columns}
+                  changeFn={this.changeList}
+                  changeList={this.state.changeList}
+                  top={55}
+                  margin={11}
+                />
+              </div>
+            </TabPane>
+            {adminData.isSuperAdmin ?
+              <TabPane tab="新增" key="3">
+                <Button
+                  type="primary"
+                  className="addButton"
+                  style={{ float: "left", marginBottom: 10, marginTop: 12 }}
+                  onClick={this.addClick}
+                >
+                  新增
+                </Button>
+              </TabPane> : ""}
+          </Tabs>
+          <div className="patent-table">
+            <Spin spinning={this.state.loading}>
+              <Table
+                bordered
+                columns={
+                  this.state.changeList
+                    ? this.state.changeList
+                    : this.state.columns
+                }
+                style={{
+                  cursor: 'pointer',
+                }}
+                dataSource={this.state.dataSource}
+                pagination={this.state.pagination}
+                onRowDoubleClick={this.tableRowClick}
+              />
+            </Spin>
+          </div>
+        </div>
+        {
+          this.state.visible != "" &&
+          <Modal
+            title={!!data.id ? "编辑标准" : "新增标准"}
+            visible={this.state.visible != ""}
+            width="600px"
+            onCancel={this.handleCancel}
+            maskClosable={false}
+            footer=""
+            className="admin-desc-content"
+          >
+            <Form
+              layout="horizontal"
+              // onSubmit={this.handleSubmit}
+              id="demand-form"
+            >
+              <Spin spinning={this.state.loading}>
+                <div className="clearfix">
+                  <FormItem
+                    className="half-middle"
+                    {...formItemLayout}
+                    label="标准编号"
+                  >
+                    <Input
+                      placeholder="标准编号"
+                      value={data["serialNumber"]
+                        ? data["serialNumber"]
+                        : ""}
+                      style={{ width: "230px" }}
+                      onChange={(e) => {
+                        data["serialNumber"] = e.target.value;
+                        this.setState({
+                          data: data
+                        });
+                      }}
+                    />
+                    <span className="mandatory">*</span>
+                  </FormItem>
+
+                  <FormItem
+                    className="half-middle"
+                    {...formItemLayout}
+                    label="标准名称"
+                  >
+                    <Input
+                      placeholder="标准名称"
+                      value={data["name"]
+                        ? data["name"]
+                        : ""}
+                      style={{ width: "230px" }}
+                      onChange={(e) => {
+                        data["name"] = e.target.value;
+                        this.setState({
+                          data: data
+                        });
+                      }}
+                    />
+                    <span className="mandatory">*</span>
+                  </FormItem>
+
+                  <FormItem
+                    className="half-middle"
+                    {...formItemLayout}
+                    label="参考"
+                  >
+                    <Select
+                      placeholder="请选择"
+                      style={{ width: "80px" }}
+                      value={data.type}
+                      onChange={(e) => {
+                        data["type"] = e;
+                        this.setState({
+                          data: data
+                        });
+                      }}
+                    >
+                      {this.state.typeList.map(function (item) {
+                        return (
+                          <Select.Option key={item.value} value={item.value}>
+                            {item.key}
+                          </Select.Option>
+                        );
+                      })}
+                    </Select>
+                    <Input
+                      placeholder="请输入参考网址"
+                      value={data["reference"]
+                        ? data["reference"]
+                        : ""}
+                      style={{ width: "140px", marginLeft: "10px" }}
+                      onChange={(e) => {
+                        data["reference"] = e.target.value;
+                        this.setState({
+                          data: data
+                        });
+                      }}
+                    />
+                  </FormItem>
+
+                  <FormItem
+                    className="half-middle"
+                    {...formItemLayout}
+                    label="部门"
+                  >
+                    <Select
+                      placeholder="请选择部门"
+                      style={{ width: 230 }}
+                      value={data["depId"]
+                        ? data["depId"]
+                        : undefined}
+                      onChange={e => {
+                        data["depId"] = e;
+                        this.setState({
+                          data: data,
+                        });
+                      }}
+                    >
+                      {departmentArr.map(function (item) {
+                        return (
+                          <Select.Option key={item.id}>{item.name}</Select.Option>
+                        );
+                      })}
+                    </Select>
+                    <span className="mandatory">*</span>
+                  </FormItem>
+
+                  <FormItem
+                    className="half-middle"
+                    {...formItemLayout}
+                    label="负责人"
+                  >
+                    <AutoComplete
+                      className="certain-category-search"
+                      dropdownClassName="certain-category-search-dropdown"
+                      dropdownMatchSelectWidth={false}
+                      style={{ width: 230 }}
+                      dataSource={options}
+                      placeholder="负责人名称"
+                      value={this.state.adminName}
+                      onChange={this.followUp.bind(this)}
+                      filterOption={true}
+                      onSelect={this.selectF.bind(this)}
+                    >
+                      <Input />
+                    </AutoComplete>
+                  </FormItem>
+
+                  <FormItem
+                    className="half-middle"
+                    {...formItemLayout}
+                    label="状态"
+                  >
+                    <Select
+                      placeholder=""
+                      style={{ width: "80px" }}
+                      value={data.status}
+                      onChange={(e) => {
+                        data["status"] = e;
+                        this.setState({
+                          data: data,
+                        });
+                      }}
+                    >
+                      {[
+                        { key: "关闭", value: 0 },
+                        { key: "开启", value: 1 },
+                      ].map(function (item) {
+                        return (
+                          <Select.Option key={item.value} value={item.value}>
+                            {item.key}
+                          </Select.Option>
+                        );
+                      })}
+                    </Select>
+                    <span className="mandatory">*</span>
+                  </FormItem>
+
+                  <FormItem
+                    className="half-middle"
+                    {...formItemLayout}
+                    label="上附件"
+                  >
+                    <PicturesWall
+                      domId={'standard'}
+                      fileList={this.getOrgCodeUrl}
+                      pictureUrl={this.state.orgCodeUrl}
+                    />
+                  </FormItem>
+                  <span className="mandatory" style={{ marginLeft: 210 }}>支持图片,pdf</span>
+
+                </div>
+                <FormItem className="half-middle">
+                  <Button
+                    className="set-submit"
+                    type="primary"
+                    onClick={this.handleSubmit}
+                    style={{ marginLeft: "150px" }}
+                  >
+                    保存
+                  </Button>
+                  <Button
+                    className="set-submit"
+                    type="ghost"
+                    onClick={this.handleCancel}
+                  >
+                    取消
+                  </Button>
+                </FormItem>
+              </Spin>
+            </Form>
+          </Modal>
+        }
+      </div>
+    );
+  }
+}));
+
+export default Standard;

+ 106 - 0
js/component/manageCenter/standard/stList/index.less

@@ -0,0 +1,106 @@
+.user-content {
+  background: #fff;
+  padding: 20px;
+
+  .content-title {
+    color: #333;
+    font-size: 16px;
+    overflow: hidden;
+  }
+
+  .user-search {
+
+    // margin-bottom: 10px;
+    >input {
+      width: 140px;
+    }
+
+    >button,
+    .ant-select,
+    >input {
+      margin-right: 10px;
+      // margin-top: 10px;
+    }
+
+    .ant-switch {
+      margin-left: 10px;
+    }
+
+    .search-more {
+      margin: 10px 0;
+
+      >span {
+        margin-right: 10px;
+      }
+    }
+  }
+
+  .addButton {
+    float: right;
+    margin-right: 10px !important;
+  }
+}
+
+.ant-tabs-bar {
+  margin-bottom: 10px;
+}
+
+.half-item {
+  float: left;
+  width: 50%;
+  min-height: 36px;
+  margin-bottom: 10px;
+
+  button {
+    margin-left: 20px;
+  }
+}
+
+.half-middle {
+  width: 80%;
+  margin: 10px auto;
+  height: 36px;
+
+  button {
+    margin-left: 20px;
+  }
+}
+
+.patent-table {
+  clear: both;
+}
+
+.set-submit {
+  margin-right: 15px;
+}
+
+.deletButton {
+  float: right;
+  margin-bottom: 15px;
+}
+
+.clearfix {
+  clear: both;
+}
+
+.mandatory {
+  color: red;
+  margin-left: 8px;
+}
+
+.search-more .ant-select-auto-complete.ant-select-lg .ant-input {
+  height: 28px
+}
+
+.rolesCol {
+  width: 90%;
+}
+
+.selStandard {
+  .ant-upload-list-picture-card .ant-upload-list-item {
+    float: left;
+    width: 40px;
+    height: 40px;
+    margin: 0 8px 0 0;
+  }
+}

+ 22 - 21
js/component/manageCenter/topTab.jsx

@@ -909,27 +909,28 @@ const TopTab = React.createClass({
           showDesc={this.state.messageModalShow}
           closeDesc={this.closeMessageModal}
         />
-
-        <Modal
-          title="报销清单查询"
-          visible={this.state.visible}
-          onOk={() => { this.onAccount() }}
-          onCancel={() => { this.setState({ visible: false, }) }}
-          okText="确认"
-          cancelText="取消"
-          maskClosable={false}
-        >
-          <div style={{ width: "60%", margin: "40px auto" }}>
-            <Input
-              placeholder="请输入报销单编号"
-              value={this.state.checkNo}
-              onChange={(e) => {
-                this.setState({ checkNo: e.target.value });
-              }}
-            />
-          </div>
-        </Modal>
-
+        {
+          this.state.visible &&
+          <Modal
+            title="报销清单查询"
+            visible={this.state.visible}
+            onOk={() => { this.onAccount() }}
+            onCancel={() => { this.setState({ visible: false, }) }}
+            okText="确认"
+            cancelText="取消"
+            maskClosable={false}
+          >
+            <div style={{ width: "60%", margin: "40px auto" }}>
+              <Input
+                placeholder="请输入报销单编号"
+                value={this.state.checkNo}
+                onChange={(e) => {
+                  this.setState({ checkNo: e.target.value });
+                }}
+              />
+            </div>
+          </Modal>
+        }
         {
           // 报销信息详情
           this.state.detailsPup &&

+ 2 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "afanti",
-  "version": "1.3.08",
+  "version": "1.3.16",
   "description": "",
   "main": "index.js",
   "scripts": {
@@ -60,6 +60,7 @@
     "react": "^15.4.1",
     "react-dom": "^15.4.1",
     "react-pdf": "^1.8.3",
+    "react-print-html": "^1.0.5",
     "react-quill": "^1.0.0",
     "viewer": "^0.10.11",
     "viewerjs": "^1.6.2",

+ 6 - 0
webpack.config.js

@@ -312,6 +312,12 @@ module.exports = (function () {
             template: './template/template.html',
             chunks: ['user/account/evaluateInfo', 'vendors'],
         }),
+        new HtmlWebpackPlugin({
+          title: '管理员-标准管理',
+          filename: 'admin/standard.html',
+          template: './template/template.html',
+          chunks: ['admin/standard', 'vendors'],
+      }),
         //portal 门户
         // new HtmlWebpackPlugin({
         //     title: '主页-需求搜索',

+ 7 - 1
webpack/entry.config.js

@@ -20,6 +20,8 @@ module.exports = {
     "admin/set": "./js/admin/set.js",
     "admin/userManage": "./js/admin/userManage.js",
     "admin/idea": "./js/admin/idea.js",
+    "admin/amiba": "./js/admin/amiba.js",
+    "admin/standard": "./js/admin/standard.js",
     //admin-servicesManage
     "admin/servicesManage/contract": "./js/admin/servicesManage/contract.js",
     "admin/servicesManage/patent": "./js/admin/servicesManage/patent.js",
@@ -36,7 +38,6 @@ module.exports = {
     "admin/customerService": "./js/admin/customerService.js",
     "admin/legalAffairs": "./js/admin/legalAffairs.js",
     "admin/channelList": "./js/admin/channelList.js",
-    "admin/amiba": "./js/admin/amiba.js",
     "admin/povertyInquiry": "./js/admin/povertyInquiry.js",
     "admin/achievement": "./js/admin/achievement.js",
     "admin/customer": "./js/admin/customer.js",
@@ -156,6 +157,11 @@ module.exports = {
       "webpack/hot/only-dev-server",
       "./js/admin/amiba.js",
     ],
+    "admin/standard": [
+      "webpack-dev-server/client?http://127.0.0.1:80", // WebpackDevServer host and port
+      "webpack/hot/only-dev-server",
+      "./js/admin/standard.js",
+    ],
     "admin/povertyInquiry": [
       "webpack-dev-server/client?http://127.0.0.1:80", // WebpackDevServer host and port
       "webpack/hot/only-dev-server",

+ 5 - 0
yarn.lock

@@ -5462,6 +5462,11 @@ react-pdf@^1.8.3:
     react ">=15.5"
     react-dom ">=15.5"
 
+react-print-html@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/react-print-html/-/react-print-html-1.0.5.tgz#d48beb5ad1059f1c72102940fbc2d3c9d9827033"
+  integrity sha512-LUKVDJPu+95gbFg8wDreYxx2q2Krbh/aa/esTo4WewsizhukjQZiZC8yFohwApX6kfrkk7brT5XqO/yCOzkD6g==
+
 react-quill@^1.0.0:
   version "1.1.0"
   resolved "http://registry.npm.taobao.org/react-quill/download/react-quill-1.1.0.tgz"