Browse Source

订单模块增加保密&违约说明

dev01 1 month ago
parent
commit
f3866449ce
28 changed files with 884 additions and 34 deletions
  1. 10 1
      js/component/manageCenter/financialManage/orderDetail/orderDetail.jsx
  2. 206 28
      js/component/manageCenter/order/orderNew/addService.jsx
  3. 12 0
      js/component/manageCenter/order/orderNew/approveds.jsx
  4. 0 1
      js/component/manageCenter/order/orderNew/billing.jsx
  5. 130 2
      js/component/manageCenter/order/orderNew/changeComponent/changeApply.js
  6. 4 0
      js/component/manageCenter/order/orderNew/changeComponent/changeDetailCwjl.js
  7. 5 0
      js/component/manageCenter/order/orderNew/changeComponent/changeDetailCwzj.js
  8. 6 0
      js/component/manageCenter/order/orderNew/changeComponent/changeDetailCwzy.js
  9. 6 0
      js/component/manageCenter/order/orderNew/changeComponent/changeDetailJsjl.js
  10. 6 0
      js/component/manageCenter/order/orderNew/changeComponent/changeDetailJsy.js
  11. 6 0
      js/component/manageCenter/order/orderNew/changeComponent/changeDetailJszj.js
  12. 4 0
      js/component/manageCenter/order/orderNew/changeComponent/changeDetailYxgly.js
  13. 6 0
      js/component/manageCenter/order/orderNew/changeComponent/changeDetailYxjl.js
  14. 6 0
      js/component/manageCenter/order/orderNew/changeComponent/changeDetailYxy.js
  15. 6 0
      js/component/manageCenter/order/orderNew/changeComponent/changeDetailYybz.js
  16. 3 0
      js/component/manageCenter/order/orderNew/changeComponent/orderDetail.js
  17. 115 0
      js/component/manageCenter/order/orderNew/confidenBreach.jsx
  18. 91 0
      js/component/manageCenter/order/orderNew/confidenBreachView.jsx
  19. 14 0
      js/component/manageCenter/order/orderNew/examine.jsx
  20. 10 2
      js/component/manageCenter/order/orderNew/examinejl.jsx
  21. 11 0
      js/component/manageCenter/order/orderNew/examineyybz.jsx
  22. 19 0
      js/component/manageCenter/order/orderNew/inquiry.jsx
  23. 11 0
      js/component/manageCenter/order/orderNew/outsourcingPro.jsx
  24. 113 0
      js/component/manageCenter/order/orderNew/reject.jsx
  25. 11 0
      js/component/manageCenter/project/project/projectAssignment.jsx
  26. 12 0
      js/component/manageCenter/project/project/projectQuery.jsx
  27. 49 0
      js/component/manageCenter/project/summary/highTech.jsx
  28. 12 0
      js/component/manageCenter/project/summary/highTechConfig.jsx

+ 10 - 1
js/component/manageCenter/financialManage/orderDetail/orderDetail.jsx

@@ -38,6 +38,7 @@ import FlowChart from '../../../common/flowchart'; // 流程图
 import Gxczx from '../../../common/orderDetail/gxczx' // 高新纯咨询合同说明详情
 import Property from '../../../common/orderDetail/property' // 知识产权情况
 import ApproveTypeTooltip from "../../../common/ApproveTypeTooltip/index.js";
+import ConfidenBreachView from '../../order/orderNew/confidenBreachView.jsx';
 
 const OrderDetail = Form.create()(
   React.createClass({
@@ -83,6 +84,7 @@ const OrderDetail = Form.create()(
     },
     getInitialState() {
       return {
+        confidenBreachData: {},
         rotateDeg: 0,
         orderNos: '',
         visible: false,
@@ -473,7 +475,12 @@ const OrderDetail = Form.create()(
             patentStatus: thisData.patentStatus, //知识产权情况
             type: thisData.type,// 特批类型
             typeExplain: thisData.typeExplain, // 特批类型
-
+            confidenBreachData: {
+              nda: thisData.nda,
+              ndaUrl: thisData.ndaUrl,
+              breachClause: thisData.breachClause,
+              breachClauseUrl: thisData.breachClauseUrl
+            },
           });
         }.bind(this),
       }).always(
@@ -1126,6 +1133,8 @@ const OrderDetail = Form.create()(
                 patentStatus={this.state.patentStatus}
               />
 
+              <ConfidenBreachView data={this.state.confidenBreachData} />
+
               <div className="clearfix">
                 <FormItem
                   className="half-item"

+ 206 - 28
js/component/manageCenter/order/orderNew/addService.jsx

@@ -79,6 +79,9 @@ import FlowChart from '../../../common/flowchart'; // 流程图
 import Gxczx from '../../../common/orderDetail/gxczx' // 高新纯咨询合同说明详情
 import Property from '../../../common/orderDetail/property' // 知识产权情况
 import ApproveTypeTooltip from "../../../common/ApproveTypeTooltip/index.js";
+// 订单保密&违约说明
+import ConfidenBreach from "./confidenBreach.jsx";
+import ConfidenBreachView from "./confidenBreachView.jsx";
 
 
 const Option = AutoComplete.Option;
@@ -188,6 +191,10 @@ const NewService = Form.create()(
     },
     getInitialState() {
       return {
+        // 保密&违约说明
+        confidenBreachData: {},
+        confidenBreachChangeData: {},
+        confidenBreachDtData: {},
         marks: "",
         score: "",
         type: "",
@@ -2192,6 +2199,89 @@ const NewService = Form.create()(
         resVisible: false,
       });
     },
+    validConfiderBreachForm(data) {
+      let flag = true;
+      let msg = '';
+      data.ndaUrl = data.ndaUrl || []
+      data.breachClauseUrl = data.breachClauseUrl || []
+      if (data.nda === undefined || data.nda === null || data.nda === '') {
+        flag = false;
+        msg = '请选择是否签订保密协议'
+      } else if (data.nda == '1' && !data.ndaUrl.length) {
+        flag = false;
+        msg = '请上传保密协议图片'
+      } else if (data.breachClause1 === undefined || data.breachClause1 === null || data.breachClause1 === '') {
+        flag = false;
+        msg = '请选择是否有违约条款'
+      } else if (data.breachClause1 != '0' && !data.breachClause2) {
+        flag = false;
+        msg = '请选择与技术有关/无关'
+      } else if (data.breachClause1 != '0' && !data.breachClauseUrl.length) {
+        flag = false;
+        msg = '请上传签约条款图片'
+      }
+
+      return { flag, msg }
+    },
+    // 获取保密&违约说明数据
+    getConfidenBreachFormData(data) {
+      const _data = Object.assign({}, data);
+      _data.ndaUrl = _data.ndaUrl || [];
+      _data.breachClauseUrl = _data.breachClauseUrl || [];
+      if (_data.breachClause1 == '0') {
+        _data.breachClause = '0'
+      } else if (_data.breachClause1 == '1' && _data.breachClause2 == '1') {
+        // 有限责任违约条款、与技术服务有关
+        _data.breachClause = '1'
+      } else if (_data.breachClause1 == '1' && _data.breachClause2 == '0') {
+        // 有限责任违约条款、与技术服务无关
+        _data.breachClause = '2'
+      } else if (_data.breachClause1 == '2' && _data.breachClause2 == '1') {
+        // 无限责任违约条款、与技术服务有关
+        _data.breachClause = '3'
+      } else if (_data.breachClause1 == '2' && _data.breachClause2 == '0') {
+        // 无限责任违约条款、与技术服务无关
+        _data.breachClause = '4'
+      }
+      _data.ndaUrl = _data.ndaUrl.map(item => item.response.data).join(',')
+      _data.breachClauseUrl = _data.breachClauseUrl.map(item => item.response.data).join(',')
+      delete _data.breachClause1
+      delete _data.breachClause2
+      return _data;
+    },
+    setConfidenBreachFormData(data) {
+      let breachClause1, breachClause2 = ''
+      if (data.breachClause == 0) {
+        breachClause1 = '0'
+      } else if (data.breachClause == 1) {
+        breachClause1 = '1'
+        breachClause2 = '1'
+      } else if (data.breachClause == 2) {
+        breachClause1 = '1'
+        breachClause2 = '0'
+      } else if (data.breachClause == 3) {
+        breachClause1 = '2'
+        breachClause2 = '1'
+      } else if (data.breachClause == 4) {
+        breachClause1 = '2'
+        breachClause2 = '0'
+      }
+      return {
+        nda: data.nda,
+        ndaUrl: data.ndaUrl ? splitUrl(
+          data.ndaUrl,
+          ",",
+          globalConfig.avatarHost + "/upload"
+        ) : [],
+        breachClause1,
+        breachClause2,
+        breachClauseUrl: data.breachClauseUrl ? splitUrl(
+          data.breachClauseUrl,
+          ",",
+          globalConfig.avatarHost + "/upload"
+        ) : []
+      }
+    },
     //新建订单、编辑订单保存
     handleSubmit(e) {
       e.preventDefault();
@@ -2342,6 +2432,15 @@ const NewService = Form.create()(
           return false;
         }
       }
+
+      if (this.props.userDetaile) {
+        let breachValid = this.validConfiderBreachForm(this.state.confidenBreachData)
+        if (!breachValid.flag) {
+          message.warning(breachValid.msg);
+          return false;
+        }
+      }
+
       this.setState({
         loading: true,
       });
@@ -2368,6 +2467,8 @@ const NewService = Form.create()(
         })
       }
 
+      let confidenBreachData = this.getConfidenBreachFormData(this.state.confidenBreachData)
+
       $.ajax({
         method: "POST",
         dataType: "json",
@@ -2402,6 +2503,10 @@ const NewService = Form.create()(
 
             type: this.state.approvaType.sort(compare).toString(), // 特批类型
             typeExplain: this.state.approvaType.indexOf(0) === -1 ? "" : this.state.typeExplain, // 其他备注
+            nda: confidenBreachData.nda,
+            ndaUrl: confidenBreachData.ndaUrl,
+            breachClause: confidenBreachData.breachClause,
+            breachClauseUrl: confidenBreachData.breachClauseUrl
           },
       }).done(
         function (data) {
@@ -2606,6 +2711,26 @@ const NewService = Form.create()(
             },
             channelName: thisData.salesType == "3" ? thisData.other : "",//销售类型为渠道的时候给编辑出的渠道名称赋值
 
+            confidenBreachData: this.setConfidenBreachFormData(thisData),
+            confidenBreachChangeData: this.setConfidenBreachFormData(thisData),
+            confidenBreachDtData: {
+              nda: thisData.nda,
+              ndaUrl: thisData.ndaUrl
+              ? splitUrl(
+                thisData.ndaUrl,
+                ",",
+                globalConfig.avatarHost + "/upload"
+              )
+              : [],
+              breachClause: thisData.breachClause,
+              breachClauseUrl: thisData.breachClauseUrl
+              ? splitUrl(
+                thisData.breachClauseUrl,
+                ",",
+                globalConfig.avatarHost + "/upload"
+              )
+              : [],
+            },
           });
           // 判断状态
           if (this.state.processStatus === 0) {
@@ -3939,6 +4064,39 @@ const NewService = Form.create()(
         message.warning("请上传新合同扫描件!");
         return
       }
+
+      const paramsData = {
+        orderNo: this.state.orderNo, //订单编号
+        processState: 0,
+        status: 0,
+        startRemarks: this.state.startRemarks,
+        remarks: this.state.remarksC,
+        voucherUrl: theorgCodeUrl.length ? theorgCodeUrl : "",
+        totalAmount: this.state.totalAmount,
+        firstAmount: this.state.firstAmount,
+        settlementAmount: this.state.settlementAmount,
+        changeAmount: this.state.changeAmount,
+        applicant: this.state.salesmanName,
+        depName: this.state.depName,
+        type: this.state.typeChange,
+        contractPictureUrl: this.state.isNew
+          ? newContractUrl : undefined,//合同替换件
+      }
+      if (this.state.typeChange == 7) {
+        let breachValid = this.validConfiderBreachForm(this.state.confidenBreachChangeData)
+        if (!breachValid.flag) {
+          message.warning(breachValid.msg);
+          return false;
+        }
+
+        let confidenBreachData = this.getConfidenBreachFormData(this.state.confidenBreachChangeData)
+
+        paramsData.nda = confidenBreachData.nda
+        paramsData.ndaUrl = confidenBreachData.ndaUrl
+        paramsData.breachClause = confidenBreachData.breachClause
+        paramsData.breachClauseUrl = confidenBreachData.breachClauseUrl
+      }
+
       this.setState({
         loading: true,
       });
@@ -3948,23 +4106,7 @@ const NewService = Form.create()(
         dataType: "json",
         crossDomain: false,
         url: globalConfig.context + "/api/admin/orderChange/addOrderChange",
-        data: {
-          orderNo: this.state.orderNo, //订单编号
-          processState: 0,
-          status: 0,
-          startRemarks: this.state.startRemarks,
-          remarks: this.state.remarksC,
-          voucherUrl: theorgCodeUrl.length ? theorgCodeUrl : "",
-          totalAmount: this.state.totalAmount,
-          firstAmount: this.state.firstAmount,
-          settlementAmount: this.state.settlementAmount,
-          changeAmount: this.state.changeAmount,
-          applicant: this.state.salesmanName,
-          depName: this.state.depName,
-          type: this.state.typeChange,
-          contractPictureUrl: this.state.isNew
-            ? newContractUrl : undefined,//合同替换件
-        },
+        data: paramsData,
       }).done(
         function (data) {
           this.setState({
@@ -6779,7 +6921,6 @@ const NewService = Form.create()(
                                       {getApprovedType(this.state.approvaType, this.state.typeExplain, 1)}
                                     </span>
                                   </FormItem>
-                                  { this.state.approval }
                                   { this.state.approval > 0 && <div className="clearfix">
                                       <FormItem
                                         labelCol={{ span: 5 }}
@@ -7089,6 +7230,17 @@ const NewService = Form.create()(
                                     </Button>
                                   </FormItem>
 
+                                  {/* 违约&保密说明 */}
+                                  <ConfidenBreach
+                                    orderNo={this.state.orderNo}
+                                    data={this.state.confidenBreachData}
+                                    onChange={(value, updateKey) => {
+                                      const { confidenBreachData } = this.state;
+                                      confidenBreachData[updateKey] = value;
+                                      this.setState({ confidenBreachData })
+                                    }}
+                                  />
+                                  
                                   <Gxczx
                                     isShow={this.state.isShow}
                                     isCreat={true}
@@ -7192,6 +7344,7 @@ const NewService = Form.create()(
                                       )}
                                     </div>
                                   </FormItem>
+                                  
                                 </div>
                               )}
                             </div>
@@ -7278,20 +7431,26 @@ const NewService = Form.create()(
                                   </FormItem>
                                 </div>
                               ) : (
-                                <FormItem
-                                  labelCol={{ span: 4 }}
-                                  wrapperCol={{ span: 16 }}
-                                  label="订单留言"
-                                >
-                                  <p
-                                    style={{ width: 500, wordWrap: "break-word" }}
+                                <div>
+                                  <FormItem
+                                    labelCol={{ span: 4 }}
+                                    wrapperCol={{ span: 16 }}
+                                    label="订单留言"
                                   >
-                                    {this.state.orderRemarks}
-                                  </p>
-                                </FormItem>
+                                    <p
+                                      style={{ width: 500, wordWrap: "break-word" }}
+                                    >
+                                      {this.state.orderRemarks}
+                                    </p>
+                                    
+                                  </FormItem>
+                                  <ConfidenBreachView data={this.state.confidenBreachDtData} />
+                                </div>
                               )}
                             </div>
 
+
+
                             <div className="clearfix">
                               <FormItem
                                 className="half-item"
@@ -8576,6 +8735,20 @@ const NewService = Form.create()(
                                   </FormItem>
                                 </div>
                               }
+                              {/* 违约&保密说明 */}
+                              { this.state.typeChange == 7 ? (
+                                <ConfidenBreach
+                                  orderNo={this.state.orderNo}
+                                  data={this.state.confidenBreachChangeData}
+                                  onChange={(value, updateKey) => {
+                                    const { confidenBreachChangeData } = this.state;
+                                    confidenBreachChangeData[updateKey] = value;
+                                    this.setState({ confidenBreachChangeData })
+                                  }}
+                                  labelCol={4}
+                                  wrapperCol={18}
+                                />
+                              ) : null }
                               <div className="clearfix">
                                 <Button
                                   type="primary"
@@ -8923,6 +9096,11 @@ const NewService = Form.create()(
                                   </FormItem>
                                 </div>
                               }
+
+                              { this.state.detailChange.typeChange == 7 ? (
+                                <ConfidenBreachView data={this.state.detailChange} />
+                              ) : null }
+
                               <ul
                                 style={{
                                   width: "868px",

+ 12 - 0
js/component/manageCenter/order/orderNew/approveds.jsx

@@ -55,6 +55,7 @@ import FlowChart from '../../../common/flowchart'; // 流程图
 import Gxczx from '../../../common/orderDetail/gxczx' // 高新纯咨询合同说明详情
 import Property from '../../../common/orderDetail/property' // 知识产权情况
 import ApproveTypeTooltip from '../../../common/ApproveTypeTooltip';
+import ConfidenBreachView from './confidenBreachView';
 
 const { TabPane } = Tabs;
 const { TextArea } = Input;
@@ -192,6 +193,7 @@ const IntentionCustomer = Form.create()(
     },
     getInitialState() {
       return {
+        confidenBreachData: {},
         approvaType: [],
         page: 1,
         declarationBatch: 1,
@@ -1115,6 +1117,13 @@ const IntentionCustomer = Form.create()(
               patentStatus: thisdata.patentStatus, //知识产权情况
               type: thisdata.type,// 特批类型
               typeExplain: thisdata.typeExplain, // 特批类型
+
+              confidenBreachData: {
+                nda: thisdata.nda,
+                ndaUrl: thisdata.ndaUrl,
+                breachClause: thisdata.breachClause,
+                breachClauseUrl: thisdata.breachClauseUrl
+              },
             });
           }
         }.bind(this),
@@ -2724,6 +2733,9 @@ const IntentionCustomer = Form.create()(
                     <Property
                       patentStatus={this.state.patentStatus}
                     />
+
+                    <ConfidenBreachView data={this.state.confidenBreachData} />
+
                     <div className="clearfix">
                       <FormItem
                         className="half-item"

+ 0 - 1
js/component/manageCenter/order/orderNew/billing.jsx

@@ -1638,7 +1638,6 @@ const MyService = Form.create()(
       }
     },
     tableRowClick(record) {
-      console.log(record)
       this.state.userDetaile = true;
       this.state.datauser = record;
       this.setState({

+ 130 - 2
js/component/manageCenter/order/orderNew/changeComponent/changeApply.js

@@ -39,6 +39,8 @@ import ProjectOperation from "../../../../common/projectOperation";
 import NewAddProject from "../../../../common/projectOperation/newAddProject"
 import NewEditProject from "../../../../common/projectOperation/newEditProject"
 import "./index.less";
+import ConfidenBreach from "../confidenBreach.jsx"
+
 
 const FormItem = Form.Item;
 const confirm = Modal.confirm;
@@ -52,6 +54,7 @@ class ChangeApply extends Component {
   constructor(props) {
     super(props);
     this.state = {
+      confidenBreachData: {},
       data: {},
       voucherUrl: [],
       newContractUrl: [],
@@ -1091,9 +1094,28 @@ class ChangeApply extends Component {
       contractPictureUrl: this.state.isNew
         ? newContractUrl : undefined,//合同替换件
     });
+    
+
+    let paramsData = Object.assign({}, this.state.data)
+    if (paramsData.type == 7) {
+      let breachValid = this.validConfiderBreachForm(this.state.confidenBreachData)
+      if (!breachValid.flag) {
+        message.warning(breachValid.msg);
+        return false;
+      }
+
+      const confidenBreachData = this.getConfidenBreachFormData(this.state.confidenBreachData)
+
+      paramsData.nda = confidenBreachData.nda;
+      paramsData.ndaUrl = confidenBreachData.ndaUrl;
+      paramsData.breachClause = confidenBreachData.breachClause;
+      paramsData.breachClauseUrl = confidenBreachData.breachClauseUrl;
+    }
+
     this.setState({
       loading: true
     })
+
     $.ajax({
       method: "post",
       dataType: "json",
@@ -1642,6 +1664,89 @@ class ChangeApply extends Component {
       );
     }
   }
+  validConfiderBreachForm(data) {
+    let flag = true;
+    let msg = '';
+    data.ndaUrl = data.ndaUrl || []
+    data.breachClauseUrl = data.breachClauseUrl || []
+    if (data.nda === undefined || data.nda === null || data.nda === '') {
+      flag = false;
+      msg = '请选择是否签订保密协议'
+    } else if (data.nda == '1' && !data.ndaUrl.length) {
+      flag = false;
+      msg = '请上传保密协议图片'
+    } else if (data.breachClause1 === undefined || data.breachClause1 === null || data.breachClause1 === '') {
+      flag = false;
+      msg = '请选择是否有违约条款'
+    } else if (data.breachClause1 != '0' && !data.breachClause2) {
+      flag = false;
+      msg = '请选择与技术有关/无关'
+    } else if (data.breachClause1 != '0' && !data.breachClauseUrl.length) {
+      flag = false;
+      msg = '请上传签约条款图片'
+    }
+
+    return { flag, msg }
+  }
+  // 获取保密&违约说明数据
+  getConfidenBreachFormData(data) {
+    const _data = Object.assign({}, data);
+    _data.ndaUrl = _data.ndaUrl || [];
+    _data.breachClauseUrl = _data.breachClauseUrl || [];
+    if (_data.breachClause1 == '0') {
+      _data.breachClause = '0'
+    } else if (_data.breachClause1 == '1' && _data.breachClause2 == '1') {
+      // 有限责任违约条款、与技术服务有关
+      _data.breachClause = '1'
+    } else if (_data.breachClause1 == '1' && _data.breachClause2 == '0') {
+      // 有限责任违约条款、与技术服务无关
+      _data.breachClause = '2'
+    } else if (_data.breachClause1 == '2' && _data.breachClause2 == '1') {
+      // 无限责任违约条款、与技术服务有关
+      _data.breachClause = '3'
+    } else if (_data.breachClause1 == '2' && _data.breachClause2 == '0') {
+      // 无限责任违约条款、与技术服务无关
+      _data.breachClause = '4'
+    }
+    _data.ndaUrl = _data.ndaUrl.map(item => item.response.data).join(',')
+    _data.breachClauseUrl = _data.breachClauseUrl.map(item => item.response.data).join(',')
+    delete _data.breachClause1
+    delete _data.breachClause2
+    return _data;
+  }
+  setConfidenBreachFormData(data) {
+    let breachClause1, breachClause2 = ''
+    if (data.breachClause == 0) {
+      breachClause1 = '0'
+    } else if (data.breachClause == 1) {
+      breachClause1 = '1'
+      breachClause2 = '1'
+    } else if (data.breachClause == 2) {
+      breachClause1 = '1'
+      breachClause2 = '0'
+    } else if (data.breachClause == 3) {
+      breachClause1 = '2'
+      breachClause2 = '1'
+    } else if (data.breachClause == 4) {
+      breachClause1 = '2'
+      breachClause2 = '0'
+    }
+    return {
+      nda: data.nda,
+      ndaUrl: data.ndaUrl ? splitUrl(
+        data.ndaUrl,
+        ",",
+        globalConfig.avatarHost + "/upload"
+      ) : [],
+      breachClause1,
+      breachClause2,
+      breachClauseUrl: data.breachClauseUrl ? splitUrl(
+        data.breachClauseUrl,
+        ",",
+        globalConfig.avatarHost + "/upload"
+      ) : []
+    }
+  }
   submitChange() {
     if (
       this.state.typeChange == undefined ||
@@ -1687,6 +1792,7 @@ class ChangeApply extends Component {
       });
       theorgCodeUrl = picArr.join(",");
     }
+
     this.setState({
       loading: true
     });
@@ -1706,7 +1812,7 @@ class ChangeApply extends Component {
         changeAmount: this.state.changeAmount,
         applicant: this.state.salesmanName,
         depName: this.state.depName,
-        type: this.state.typeChange
+        type: this.state.typeChange,
       }
     }).done(
       function (data) {
@@ -1830,9 +1936,14 @@ class ChangeApply extends Component {
     this.departmentList();
     this.state.data = this.props.orderData;
     this.state.data.oldPrice = this.props.orderData.totalAmount;
+
+    // 设置保密&违约说明表单默认数据
+    let confidenBreachData = this.setConfidenBreachFormData(this.state.orderData || {});
+
     this.setState({
       data: this.state.data,
-      voucherUrl: this.props.voucherUrl
+      voucherUrl: this.props.voucherUrl,
+      confidenBreachData
     });
 
     this.proList();
@@ -2919,6 +3030,23 @@ class ChangeApply extends Component {
               </FormItem>
             </div>
           }
+
+          {/* 违约&保密说明 */}
+          { this.state.data.type == 7 ? (
+            <ConfidenBreach
+              orderNo={this.state.data.orderNo}
+              data={this.state.confidenBreachData}
+              onChange={(value, updateKey) => {
+                const { confidenBreachData } = this.state;
+                confidenBreachData[updateKey] = value;
+                this.setState({ confidenBreachData })
+              }}
+              labelCol={4}
+              wrapperCol={18}
+            />
+          ) : (null) }
+          
+
           {/* <ul
           style={{
             width: "868px",

+ 4 - 0
js/component/manageCenter/order/orderNew/changeComponent/changeDetailCwjl.js

@@ -28,6 +28,7 @@ import Refund from "./refund.js"
 import "./xButton.less"
 import ImgList from "../../../../common/imgList";
 import FlowChart from '../../../../common/flowchart'; // 流程图
+import ConfidenBreachView from "../confidenBreachView.jsx";
 
 
 const { RangePicker } = DatePicker;
@@ -1161,6 +1162,9 @@ class ChangeDetail extends Component {
               </Form.Item>
             </div>
           }
+          { this.props.data.type == 7 ? (
+            <ConfidenBreachView data={this.props.data} />
+          ) : null }
           <ul
             style={{
               width: "868px",

+ 5 - 0
js/component/manageCenter/order/orderNew/changeComponent/changeDetailCwzj.js

@@ -18,6 +18,7 @@ import ImgList from "../../../../common/imgList";
 import EnterpriseNameChange from "../../../../common/enterpriseNameChange";
 import FlowChart from '../../../../common/flowchart'; // 流程图
 import SelectReject from '../../../../common/selectreject'; // 驳回位置选择
+import ConfidenBreachView from "../confidenBreachView.jsx";
 
 
 const { TextArea } = Input;
@@ -596,6 +597,10 @@ class ChangeDetail extends Component {
               </Form.Item>
             </div>
           }
+          { this.props.data.type == 7 ? (
+            <ConfidenBreachView data={this.props.data} />
+          ) : null }
+          
           {/* <h2 style={{ textAlign: "center", marginBottom: 0 }}>变更日志</h2> */}
           <ul
             style={{

+ 6 - 0
js/component/manageCenter/order/orderNew/changeComponent/changeDetailCwzy.js

@@ -29,6 +29,7 @@ import "./xButton.less"
 import ImgList from "../../../../common/imgList";
 import FlowChart from '../../../../common/flowchart'; // 流程图
 import SelectReject from '../../../../common/selectreject'; // 驳回位置选择
+import ConfidenBreachView from "../confidenBreachView.jsx";
 
 
 const { RangePicker } = DatePicker;
@@ -1202,6 +1203,11 @@ class ChangeDetail extends Component {
               </Form.Item>
             </div>
           }
+
+          { this.props.data.type == 7 ? (
+            <ConfidenBreachView data={this.props.data} />
+          ) : null }
+
           <ul
             style={{
               width: "868px",

+ 6 - 0
js/component/manageCenter/order/orderNew/changeComponent/changeDetailJsjl.js

@@ -15,6 +15,7 @@ import ImgList from "../../../../common/imgList";
 import FlowChart from '../../../../common/flowchart'; // 流程图
 import SelectReject from '../../../../common/selectreject'; // 驳回位置选择
 // import ReactToPrint from "react-to-print";
+import ConfidenBreachView from "../confidenBreachView.jsx";
 
 const formItemLayout = {
   labelCol: { span: 8 },
@@ -458,6 +459,11 @@ class ChangeDetail extends Component {
               </Form.Item>
             </div>
           }
+
+          { this.props.data.type == 7 ? (
+            <ConfidenBreachView data={this.props.data} />
+          ) : null }
+
           <ul
             style={{
               width: "868px",

+ 6 - 0
js/component/manageCenter/order/orderNew/changeComponent/changeDetailJsy.js

@@ -17,6 +17,7 @@ import ImgList from "../../../../common/imgList";
 import EnterpriseNameChange from "../../../../common/enterpriseNameChange";
 import FlowChart from '../../../../common/flowchart'; // 流程图
 import SelectReject from '../../../../common/selectreject'; // 驳回位置选择
+import ConfidenBreachView from "../confidenBreachView.jsx";
 
 
 const { TextArea } = Input;
@@ -511,6 +512,11 @@ class ChangeDetail extends Component {
           </ul> */}
 
           {/* <h2 style={{ textAlign: "center", marginBottom: 0 }}>变更日志</h2> */}
+
+          { this.props.data.type == 7 ? (
+            <ConfidenBreachView data={this.props.data} />
+          ) : null }
+
           <ul
             style={{
               width: "868px",

+ 6 - 0
js/component/manageCenter/order/orderNew/changeComponent/changeDetailJszj.js

@@ -16,6 +16,7 @@ import EnterpriseNameChange from "../../../../common/enterpriseNameChange";
 import FlowChart from '../../../../common/flowchart'; // 流程图
 import SelectReject from '../../../../common/selectreject'; // 驳回位置选择
 // import ReactToPrint from "react-to-print";
+import ConfidenBreachView from "../confidenBreachView.jsx";
 
 const formItemLayout = {
   labelCol: { span: 8 },
@@ -459,6 +460,11 @@ class ChangeDetail extends Component {
               </Form.Item>
             </div>
           }
+
+          { this.props.data.type == 7 ? (
+            <ConfidenBreachView data={this.props.data} />
+          ) : null }
+
           <ul
             style={{
               width: "868px",

+ 4 - 0
js/component/manageCenter/order/orderNew/changeComponent/changeDetailYxgly.js

@@ -16,6 +16,7 @@ import Refund from "./refund.js"
 import ImgList from "../../../../common/imgList/index";
 import EnterpriseNameChange from "../../../../common/enterpriseNameChange";
 import FlowChart from '../../../../common/flowchart'; // 流程图
+import ConfidenBreachView from "../confidenBreachView.jsx";
 
 const { TextArea } = Input;
 
@@ -492,6 +493,9 @@ class ChangeDetail extends Component {
               </Form.Item>
             </div>
           }
+          { this.props.data.type == 7 ? (
+            <ConfidenBreachView data={this.props.data} />
+          ) : null }
           {/* <h2 style={{ textAlign: "center", marginBottom: 0 }}>变更日志</h2> */}
           <ul
             style={{

+ 6 - 0
js/component/manageCenter/order/orderNew/changeComponent/changeDetailYxjl.js

@@ -16,6 +16,7 @@ import Refund from "./refund.js"
 import ImgList from "../../../../common/imgList/index";
 import EnterpriseNameChange from "../../../../common/enterpriseNameChange";
 import FlowChart from '../../../../common/flowchart'; // 流程图
+import ConfidenBreachView from "../confidenBreachView.jsx";
 
 const { TextArea } = Input;
 
@@ -499,6 +500,11 @@ class ChangeDetail extends Component {
               </Form.Item>
             </div>
           }
+
+          { this.props.data.type == 7 ? (
+            <ConfidenBreachView data={this.props.data} />
+          ) : null }
+
           {/* <h2 style={{ textAlign: "center", marginBottom: 0 }}>变更日志</h2> */}
           <ul
             style={{

+ 6 - 0
js/component/manageCenter/order/orderNew/changeComponent/changeDetailYxy.js

@@ -15,6 +15,7 @@ import ReactToPrint from "react-to-print";
 import ImgList from "../../../../common/imgList";
 import EnterpriseNameChange from "../../../../common/enterpriseNameChange";
 import FlowChart from '../../../../common/flowchart'; // 流程图
+import ConfidenBreachView from "../confidenBreachView.jsx";
 
 const formItemLayout = {
   labelCol: { span: 8 },
@@ -560,6 +561,11 @@ class ChangeDetail extends Component {
               </Form.Item>
             </div>
           }
+
+          { this.props.data.type == 7 ? (
+            <ConfidenBreachView data={this.props.data} />
+          ) : null }
+
           <ul
             style={{
               width: "868px",

+ 6 - 0
js/component/manageCenter/order/orderNew/changeComponent/changeDetailYybz.js

@@ -16,6 +16,7 @@ import Refund from "./refund.js"
 import ImgList from "../../../../common/imgList/index";
 import EnterpriseNameChange from "../../../../common/enterpriseNameChange";
 import FlowChart from '../../../../common/flowchart'; // 流程图
+import ConfidenBreachView from "../confidenBreachView.jsx";
 
 const { TextArea } = Input;
 
@@ -499,6 +500,11 @@ class ChangeDetail extends Component {
               </Form.Item>
             </div>
           }
+
+          { this.props.data.type == 7 ? (
+            <ConfidenBreachView data={this.props.data} />
+          ) : null }
+
           {/* <h2 style={{ textAlign: "center", marginBottom: 0 }}>变更日志</h2> */}
           <ul
             style={{

+ 3 - 0
js/component/manageCenter/order/orderNew/changeComponent/orderDetail.js

@@ -25,6 +25,7 @@ import FlowChart from '../../../../common/flowchart'; // 流程图
 import Gxczx from '../../../../common/orderDetail/gxczx' // 高新纯咨询合同说明详情
 import Property from '../../../../common/orderDetail/property' // 知识产权情况
 import ApproveTypeTooltip from "../../../../common/ApproveTypeTooltip";
+import ConfidenBreachView from "../confidenBreachView";
 
 
 const FormItem = Form.Item;
@@ -825,6 +826,8 @@ class OrderDetail extends Component {
           patentStatus={data.patentStatus}
         />
 
+        <ConfidenBreachView data={data} />
+
         <div className="clearfix">
           <FormItem
             className="half-item"

+ 115 - 0
js/component/manageCenter/order/orderNew/confidenBreach.jsx

@@ -0,0 +1,115 @@
+import React, { Component } from "react";
+import { Form, Radio } from "antd";
+import PicturesWall from "./changeComponent/picturesWall.js";
+
+
+/**
+ * 订单保密&违约说明
+ */
+const FormItem = Form.Item;
+class ConfidenBreach extends Component {
+  constructor(props) {
+    super(props);
+  }
+
+  onChange(value, updateKey) {
+    this.props.onChange(value, updateKey)
+  }
+
+  render() {
+    const { orderNo, data: { nda, ndaUrl, breachClauseUrl, breachClause1, breachClause2 } } = this.props;
+    
+    let ndaString = nda !== null && nda !== undefined ? nda.toString() : ''
+
+    return (
+      <div>
+        <div style={{display: 'flex', alignItems: 'center' }}>
+          <h3
+            style={{
+              marginLeft: 10,
+              fontWeight: 800,
+              marginBottom: 10,
+            }}
+          >
+            保密&违约说明 &nbsp; &nbsp; &nbsp;
+          </h3>
+          <div style={{ padding: '10px', backgroundColor: 'yellow', color: '#000' }}>
+            <p>营销说明:未如实填报,责任由营销本人全部承担</p>
+            <p>技术说明:请认真阅读保密/违约条款,并规避相关事项,含保密要求的企业,发送任何资料必须脱密</p>
+          </div>
+        </div>
+        
+        <FormItem
+          labelCol={{ span: this.props.labelCol || 5 }}
+          wrapperCol={{ span: this.props.wrapperCol || 19 }}
+          label={<span><strong style={{ color: "#f00" }}>*</strong>是否签订保密协议</span>}
+        >
+          <Radio.Group
+            onChange={(e) => { this.onChange(e.target.value, 'nda') }}
+            value={ndaString}
+          >
+            <Radio value='0'>无</Radio>
+            <Radio value='1'>有</Radio>
+          </Radio.Group>
+
+          {nda == 1 ? (
+            <div>
+              <PicturesWall
+                domId={"ndaImg"}
+                orderNo={orderNo}
+                fileList={(e) => { this.onChange(e, 'ndaUrl') }}
+                pictureUrl={ndaUrl}
+                url="/api/admin/orderChange/uploadFile"
+                sign="nda"
+              />
+              <p>图片建议:要清晰。</p>
+            </div>
+          ) : null}
+
+        </FormItem>
+        <FormItem
+          labelCol={{ span: this.props.labelCol || 5 }}
+          wrapperCol={{ span: this.props.wrapperCol || 19 }}
+          label={<span><strong style={{ color: "#f00" }}>*</strong>是否有违约条款</span>}
+        >
+          <Radio.Group
+            onChange={e => {this.onChange(e.target.value, 'breachClause1')}}
+            value={breachClause1}
+          >
+            <Radio value='0'>无</Radio>
+            <Radio value='1'>有,有限责任违约条款</Radio>
+            <Radio value='2'>有,无限责任违约条款</Radio>
+          </Radio.Group>
+
+          {breachClause1 && '1,2'.indexOf(breachClause1) > -1 ? (
+            <div>
+              <Radio.Group
+                onChange={(e) => { this.onChange(e.target.value, 'breachClause2') }}
+                value={breachClause2}
+              >
+                <Radio value='1'>与技术服务有关</Radio>
+                <Radio value='0'>与技术服务无关</Radio>
+              </Radio.Group>
+
+              <div>
+                <PicturesWall
+                  domId={"breachClauseImg"}
+                  orderNo={orderNo}
+                  fileList={(e) => { this.onChange(e, 'breachClauseUrl') }}
+                  pictureUrl={breachClauseUrl}
+                  url="/api/admin/orderChange/uploadFile"
+                  sign="breach_clause"
+                />
+                <p>图片建议:要清晰。</p>
+              </div>
+            </div>
+
+          ) : null}
+
+        </FormItem>
+      </div >
+    );
+  }
+}
+
+export default ConfidenBreach;

+ 91 - 0
js/component/manageCenter/order/orderNew/confidenBreachView.jsx

@@ -0,0 +1,91 @@
+import React, { Component } from "react";
+import { Form } from "antd";
+import ImgList from "../../../common/imgList/index.js";
+import { splitUrl } from "../../../tools.js";
+
+/**
+ * 订单保密&违约说明详情
+ */
+const FormItem = Form.Item;
+
+const ndaOptions = {
+  1: '是',
+  0: '否'
+};
+
+const breachClauseOptions = {
+  0: '否',
+  1: '有,有限责任违约条款,与技术服务有关',
+  2: '有,有限责任违约条款,与技术服务无关',
+  3: '无,无限责任违约条款,与技术服务有关',
+  4: '无,无限责任违约条款,与技术服务无关'
+};
+class ConfidenBreachView extends Component {
+  constructor(props) {
+    super(props);
+  }
+
+  onChange(value, updateKey) {
+    this.props.onChange(value, updateKey)
+  }
+
+  getFileList(url) {
+    let fileList = []
+
+    if (url instanceof Array) {
+      fileList = url
+    } else {
+      fileList = url ? splitUrl(url, ",", globalConfig.avatarHost + "/upload") : []
+    }
+
+    return fileList
+  }
+
+  render() {
+    let _data = {}
+    if (!!this.props.data) {
+      _data = this.props.data
+    }
+    const { nda, ndaUrl, breachClauseUrl, breachClause } = _data;
+
+    console.log(nda, ndaUrl, breachClause, breachClauseUrl)
+    return (
+      <div>
+        <div style={{display: 'flex', alignItems: 'center' }}>
+          <h3
+            style={{
+              marginLeft: 10,
+              fontWeight: 800,
+              marginBottom: 10,
+            }}
+          >
+            保密&违约说明 &nbsp; &nbsp; &nbsp;
+          </h3>
+          <div style={{ padding: '10px', backgroundColor: 'yellow', color: '#000' }}>
+            <p>营销说明:未如实填报,责任由营销本人全部承担</p>
+            <p>技术说明:请认真阅读保密/违约条款,并规避相关事项,含保密要求的企业,发送任何资料必须脱密</p>
+          </div>
+        </div>
+        <FormItem
+          labelCol={{ span: this.props.labelCol || 5 }}
+          wrapperCol={{ span: this.props.wrapperCol || 19 }}
+          label='是否签订保密协议'
+        >
+          <div>{ndaOptions[nda]}</div>
+          {nda === 1 ? <ImgList domId={"ndaImg"} fileList={this.getFileList(ndaUrl)} ItemWidth={'96px'} /> : null}
+        </FormItem>
+
+        <FormItem
+          labelCol={{ span: this.props.labelCol || 5 }}
+          wrapperCol={{ span: this.props.wrapperCol || 19 }}
+          label='是否有违约条款'
+        >
+          <div>{breachClauseOptions[breachClause]}</div>
+          {breachClause !== 0 ? <ImgList domId={"breachClauseImg"} fileList={this.getFileList(breachClauseUrl)} ItemWidth={'96px'} /> : null}
+        </FormItem>
+      </div >
+    );
+  }
+}
+
+export default ConfidenBreachView;

+ 14 - 0
js/component/manageCenter/order/orderNew/examine.jsx

@@ -50,6 +50,7 @@ import FlowChart from '../../../common/flowchart'; // 流程图
 import Gxczx from '../../../common/orderDetail/gxczx' // 高新纯咨询合同说明详情
 import Property from '../../../common/orderDetail/property' // 知识产权情况
 import ApproveTypeTooltip from "../../../common/ApproveTypeTooltip";
+import ConfidenBreachView from "./confidenBreachView";
 
 
 const confirm = Modal.confirm;
@@ -210,6 +211,7 @@ const IntentionCustomer = Form.create()(
     },
     getInitialState() {
       return {
+        confidenBreachData: {},
         approvaType: [],
         rotateDeg: 0,
         page: 1,
@@ -810,6 +812,13 @@ const IntentionCustomer = Form.create()(
               patentStatus: thisdata.patentStatus, //知识产权情况
               type: thisdata.type,// 特批类型
               typeExplain: thisdata.typeExplain, // 特批类型
+
+              confidenBreachData: {
+                nda: thisdata.nda,
+                ndaUrl: thisdata.ndaUrl,
+                breachClause: thisdata.breachClause,
+                breachClauseUrl: thisdata.breachClauseUrl
+              }
             });
           }
         }.bind(this),
@@ -2096,10 +2105,15 @@ const IntentionCustomer = Form.create()(
                             imgId={"examineContentsImg"}
                           />
 
+                          {/* 订单保密&违约说明 */}
+                          <ConfidenBreachView data={this.state.confidenBreachData} />
+
                           <Property
                             patentStatus={this.state.patentStatus}
                           />
 
+                          
+
                           <div className="clearfix">
                             <FormItem
                               className="half-item"

+ 10 - 2
js/component/manageCenter/order/orderNew/examinejl.jsx

@@ -51,7 +51,7 @@ import FlowChart from '../../../common/flowchart'; // 流程图
 import Gxczx from '../../../common/orderDetail/gxczx' // 高新纯咨询合同说明详情
 import Property from '../../../common/orderDetail/property' // 知识产权情况
 import ApproveTypeTooltip from "../../../common/ApproveTypeTooltip";
-
+import ConfidenBreachView from "./confidenBreachView";
 
 const confirm = Modal.confirm;
 const { Option } = Select;
@@ -228,6 +228,7 @@ const IntentionCustomer = Form.create()(
         processStatusSearch: undefined,
         aloading: false,
         orderNos: '',
+        confidenBreachData: {},
         pagination: {
           defaultCurrent: 1,
           defaultPageSize: 10,
@@ -813,7 +814,12 @@ const IntentionCustomer = Form.create()(
               patentStatus: thisdata.patentStatus, //知识产权情况
               type: thisdata.type,// 特批类型
               typeExplain: thisdata.typeExplain, // 特批类型
-
+              confidenBreachData: {
+                nda: thisdata.nda,
+                ndaUrl: thisdata.ndaUrl,
+                breachClause: thisdata.breachClause,
+                breachClauseUrl: thisdata.breachClauseUrl
+              }
             });
           }
         }.bind(this),
@@ -2096,6 +2102,8 @@ const IntentionCustomer = Form.create()(
                             contentUrl={this.state.contentUrl}
                             imgId={"examineContentsImg"}
                           />
+                          {/* 订单保密&违约说明 */}
+                          <ConfidenBreachView data={this.state.confidenBreachData} />
                           {/* 知识产权情况 */}
                           <Property
                             patentStatus={this.state.patentStatus}

+ 11 - 0
js/component/manageCenter/order/orderNew/examineyybz.jsx

@@ -50,6 +50,7 @@ import FlowChart from '../../../common/flowchart'; // 流程图
 import Gxczx from '../../../common/orderDetail/gxczx' // 高新纯咨询合同说明详情
 import Property from '../../../common/orderDetail/property' // 知识产权情况
 import ApproveTypeTooltip from "../../../common/ApproveTypeTooltip";
+import ConfidenBreachView from "./confidenBreachView";
 
 
 const confirm = Modal.confirm;
@@ -210,6 +211,7 @@ const IntentionCustomer = Form.create()(
     },
     getInitialState() {
       return {
+        confidenBreachData: {},
         approvaType: [],
         rotateDeg: 0,
         page: 1,
@@ -810,6 +812,13 @@ const IntentionCustomer = Form.create()(
               patentStatus: thisdata.patentStatus, //知识产权情况
               type: thisdata.type,// 特批类型
               typeExplain: thisdata.typeExplain, // 特批类型
+
+              confidenBreachData: {
+                nda: thisdata.nda,
+                ndaUrl: thisdata.ndaUrl,
+                breachClause: thisdata.breachClause,
+                breachClauseUrl: thisdata.breachClauseUrl
+              },
             });
           }
         }.bind(this),
@@ -2094,6 +2103,8 @@ const IntentionCustomer = Form.create()(
                             patentStatus={this.state.patentStatus}
                           />
 
+                          <ConfidenBreachView data={this.state.confidenBreachData} />
+
                           <div className="clearfix">
                             <FormItem
                               className="half-item"

+ 19 - 0
js/component/manageCenter/order/orderNew/inquiry.jsx

@@ -62,6 +62,7 @@ import Cascaders from "../../../common/cascaders";
 import NewPicturesWall from "./changeComponent/picturesWall.js";
 import FlowChart from '../../../common/flowchart'; // 流程图
 import ApproveTypeTooltip from "../../../common/ApproveTypeTooltip/index.js";
+import ConfidenBreachView from "./confidenBreachView.jsx";
 
 const { Option } = Select;
 const { TabPane } = Tabs;
@@ -227,6 +228,7 @@ const IntentionCustomer = Form.create()(
     },
     getInitialState() {
       return {
+        confidenBreachData: {},
         approvaType: [],
         rotateDeg: 0,
         orderNos: '',
@@ -1859,6 +1861,13 @@ const IntentionCustomer = Form.create()(
               depName: thisdata.depName,
               outsource: thisdata.outsource == 0 ? "否" : "是",
               deleteSign: thisdata.deleteSign,
+
+              confidenBreachData: {
+                nda: thisdata.nda,
+                ndaUrl: thisdata.ndaUrl,
+                breachClause: thisdata.breachClause,
+                breachClauseUrl: thisdata.breachClauseUrl
+              },
             });
           }
         }.bind(this),
@@ -4786,6 +4795,16 @@ const IntentionCustomer = Form.create()(
                             imgId={"inquiryContentsImg"}
                           />
                       }
+
+                      <div className="clearfix">
+                        {/* 订单保密&违约说明 */}
+                        <ConfidenBreachView
+                          data={this.state.confidenBreachData}
+                          labelCol={4}
+                          wrapperCol={18}
+                        />
+                      </div>
+
                       <div className="clearfix">
                         <FormItem
                           className="half-item"

+ 11 - 0
js/component/manageCenter/order/orderNew/outsourcingPro.jsx

@@ -45,6 +45,7 @@ import OrderItemStatus from "../../../common/orderItemStatus";
 import OrderCoor from "./changeComponent/orderCoor";
 import ContentUrl from "./contentUrl";
 import Property from '../../../common/orderDetail/property' // 知识产权情况
+import ConfidenBreachView from "./confidenBreachView";
 
 //图片组件
 const PicturesWall = React.createClass({
@@ -176,6 +177,7 @@ const outsourcingPro = Form.create()(
     },
     getInitialState() {
       return {
+        confidenBreachData: {},
         containOfficialFees: 0,//官费缴费情况
         paySubject: [],
         rotateDeg: 0,
@@ -677,6 +679,13 @@ const outsourcingPro = Form.create()(
               deleteSign: thisdata.deleteSign,
 
               patentStatus: thisdata.patentStatus, //知识产权情况
+
+              confidenBreachData: {
+                nda: thisdata.nda,
+                ndaUrl: thisdata.ndaUrl,
+                breachClause: thisdata.breachClause,
+                breachClauseUrl: thisdata.breachClauseUrl
+              },
             });
           }
         }.bind(this),
@@ -2066,6 +2075,8 @@ const outsourcingPro = Form.create()(
                           labelCol={4}
                         />
 
+                        <ConfidenBreachView data={this.state.confidenBreachData} />
+
                         <div className="clearfix">
                           <FormItem
                             className="half-item"

+ 113 - 0
js/component/manageCenter/order/orderNew/reject.jsx

@@ -52,6 +52,7 @@ import FlowChart from '../../../common/flowchart'; // 流程图
 import Gxczx from '../../../common/orderDetail/gxczx' // 高新纯咨询合同说明详情
 import Property from '../../../common/orderDetail/property' // 知识产权情况
 import ApproveTypeTooltip from "../../../common/ApproveTypeTooltip/index.js";
+import ConfidenBreach from './confidenBreach.jsx';
 
 const CheckboxGroup = Checkbox.Group;
 
@@ -115,6 +116,7 @@ const IntentionCustomer = Form.create()(
     },
     getInitialState() {
       return {
+        confidenBreachData: {},
         approvaType: [],
         isShow: true, // 高新纯咨询合同默认填写
         page: 1,
@@ -1104,6 +1106,7 @@ const IntentionCustomer = Form.create()(
               approvaType: thisdata.type ? thisdata.type.split(",").map(Number) : [], // 特批类型
               typeExplain: thisdata.typeExplain,
 
+              confidenBreachData: this.setConfidenBreachFormData(thisdata) // 设置保密&违约说明表单默认数据
             });
           }
         }.bind(this),
@@ -1507,6 +1510,89 @@ const IntentionCustomer = Form.create()(
         });
       }
     },
+    validConfiderBreachForm(data) {
+      let flag = true;
+      let msg = '';
+      data.ndaUrl = data.ndaUrl || []
+      data.breachClauseUrl = data.breachClauseUrl || []
+      if (data.nda === undefined || data.nda === null || data.nda === '') {
+        flag = false;
+        msg = '请选择是否签订保密协议'
+      } else if (data.nda == '1' && !data.ndaUrl.length) {
+        flag = false;
+        msg = '请上传保密协议图片'
+      } else if (data.breachClause1 === undefined || data.breachClause1 === null || data.breachClause1 === '') {
+        flag = false;
+        msg = '请选择是否有违约条款'
+      } else if (data.breachClause1 != '0' && !data.breachClause2) {
+        flag = false;
+        msg = '请选择与技术有关/无关'
+      } else if (data.breachClause1 != '0' && !data.breachClauseUrl.length) {
+        flag = false;
+        msg = '请上传签约条款图片'
+      }
+
+      return { flag, msg }
+    },
+    // 获取保密&违约说明数据
+    getConfidenBreachFormData(data) {
+      const _data = Object.assign({}, data);
+      _data.ndaUrl = _data.ndaUrl || [];
+      _data.breachClauseUrl = _data.breachClauseUrl || [];
+      if (_data.breachClause1 == '0') {
+        _data.breachClause = '0'
+      } else if (_data.breachClause1 == '1' && _data.breachClause2 == '1') {
+        // 有限责任违约条款、与技术服务有关
+        _data.breachClause = '1'
+      } else if (_data.breachClause1 == '1' && _data.breachClause2 == '0') {
+        // 有限责任违约条款、与技术服务无关
+        _data.breachClause = '2'
+      } else if (_data.breachClause1 == '2' && _data.breachClause2 == '1') {
+        // 无限责任违约条款、与技术服务有关
+        _data.breachClause = '3'
+      } else if (_data.breachClause1 == '2' && _data.breachClause2 == '0') {
+        // 无限责任违约条款、与技术服务无关
+        _data.breachClause = '4'
+      }
+      _data.ndaUrl = _data.ndaUrl.map(item => item.response.data).join(',')
+      _data.breachClauseUrl = _data.breachClauseUrl.map(item => item.response.data).join(',')
+      delete _data.breachClause1
+      delete _data.breachClause2
+      return _data;
+    },
+    setConfidenBreachFormData(data) {
+      let breachClause1, breachClause2 = ''
+      if (data.breachClause == 0) {
+        breachClause1 = '0'
+      } else if (data.breachClause == 1) {
+        breachClause1 = '1'
+        breachClause2 = '1'
+      } else if (data.breachClause == 2) {
+        breachClause1 = '1'
+        breachClause2 = '0'
+      } else if (data.breachClause == 3) {
+        breachClause1 = '2'
+        breachClause2 = '1'
+      } else if (data.breachClause == 4) {
+        breachClause1 = '2'
+        breachClause2 = '0'
+      }
+      return {
+        nda: data.nda,
+        ndaUrl: data.ndaUrl ? splitUrl(
+          data.ndaUrl,
+          ",",
+          globalConfig.avatarHost + "/upload"
+        ) : [],
+        breachClause1,
+        breachClause2,
+        breachClauseUrl: data.breachClauseUrl ? splitUrl(
+          data.breachClauseUrl,
+          ",",
+          globalConfig.avatarHost + "/upload"
+        ) : []
+      }
+    },
     //重新提交
     examOk() {
       let theorgCodeUrl = [];
@@ -1657,6 +1743,15 @@ const IntentionCustomer = Form.create()(
         message.warning("请选择销售类型!");
         return
       }
+
+      let breachValid = this.validConfiderBreachForm(this.state.confidenBreachData)
+      if (!breachValid.flag) {
+        message.warning(breachValid.msg);
+        return false;
+      }
+
+      const confidenBreachData = this.getConfidenBreachFormData(this.state.confidenBreachData)
+
       this.setState({
         flag: true,
       });
@@ -1696,6 +1791,10 @@ const IntentionCustomer = Form.create()(
           type: this.state.approvaType.sort(compare).toString(), // 特批类型
           typeExplain: this.state.approvaType.indexOf(0) === -1 ? "" : this.state.typeExplain, // 其他备注
 
+          nda: confidenBreachData.nda,
+          ndaUrl: confidenBreachData.ndaUrl,
+          breachClause: confidenBreachData.breachClause,
+          breachClauseUrl: confidenBreachData.breachClauseUrl,
         },
         success: function (data) {
           if (data.error.length || data.data.list == "") {
@@ -2722,6 +2821,19 @@ const IntentionCustomer = Form.create()(
                       </FormItem>
                     </div>
 
+                    <div className="clearfix">
+                      {/* 违约&保密说明 */}
+                      <ConfidenBreach
+                        orderNo={this.state.orderNo}
+                        data={this.state.confidenBreachData}
+                        onChange={(value, updateKey) => {
+                          const { confidenBreachData } = this.state;
+                          confidenBreachData[updateKey] = value;
+                          this.setState({ confidenBreachData })
+                        }}
+                      />
+                    </div>
+
                     <Gxczx
                       isShow={this.state.isShow}
                       isCreat={true}
@@ -2797,6 +2909,7 @@ const IntentionCustomer = Form.create()(
                         />
                       </FormItem>
                     </div>
+
                     <div className="clearfix">
                       <FormItem
                         className="half-item"

+ 11 - 0
js/component/manageCenter/project/project/projectAssignment.jsx

@@ -47,6 +47,7 @@ import FlowChart from '../../../common/flowchart'; // 流程图
 import Gxczx from '../../../common/orderDetail/gxczx' // 高新纯咨询合同说明详情
 import Property from '../../../common/orderDetail/property' // 知识产权情况
 import ApproveTypeTooltip from "../../../common/ApproveTypeTooltip/index.js";
+import ConfidenBreachView from "../../order/orderNew/confidenBreachView.jsx";
 
 
 const { TabPane } = Tabs
@@ -133,6 +134,7 @@ const PaiDan = React.createClass({
   },
   getInitialState() {
     return {
+      confidenBreachData: {},
       approvaType: [],
       orderNo: [], // 
       distribution: "0",
@@ -692,6 +694,13 @@ const PaiDan = React.createClass({
             patentStatus: thisdata.patentStatus, //知识产权情况
             type: thisdata.type,// 特批类型
             typeExplain: thisdata.typeExplain, // 特批类型
+
+            confidenBreachData: {
+              nda: thisdata.nda,
+              ndaUrl: thisdata.ndaUrl,
+              breachClause: thisdata.breachClause,
+              breachClauseUrl: thisdata.breachClauseUrl
+            },
           });
         }
       }.bind(this)
@@ -1867,6 +1876,8 @@ const PaiDan = React.createClass({
                     patentStatus={this.state.patentStatus}
                   />
 
+                  <ConfidenBreachView data={this.state.confidenBreachData} />
+
                   <div className="clearfix">
                     <FormItem
                       className="half-item"

+ 12 - 0
js/component/manageCenter/project/project/projectQuery.jsx

@@ -32,6 +32,7 @@ import Cascaders from "../../../common/cascaders";
 import FlowChart from '../../../common/flowchart'; // 流程图
 import Gxczx from '../../../common/orderDetail/gxczx' // 高新纯咨询合同说明详情
 import Property from '../../../common/orderDetail/property' // 知识产权情况
+import ConfidenBreachView from '../../order/orderNew/confidenBreachView';
 
 const { TabPane } = Tabs
 const PaiDan = React.createClass({
@@ -106,6 +107,7 @@ const PaiDan = React.createClass({
   },
   getInitialState() {
     return {
+      confidenBreachData: {},
       rotateDeg: 0,
       orderNos: '',
       searchMore: true,
@@ -449,6 +451,13 @@ const PaiDan = React.createClass({
             addDeductionOther: thisdata.addDeductionOther, //加计扣除服务其他描述
 
             patentStatus: thisdata.patentStatus, //知识产权情况
+
+            confidenBreachData: {
+              nda: thisdata.nda,
+              ndaUrl: thisdata.ndaUrl,
+              breachClause: thisdata.breachClause,
+              breachClauseUrl: thisdata.breachClauseUrl
+            },
           });
         }
       }.bind(this)
@@ -1124,6 +1133,9 @@ const PaiDan = React.createClass({
                   contentUrl={this.state.contentUrl}
                   imgId={"projectQueryContentsImg"}
                 />
+
+                <ConfidenBreachView data={this.state.confidenBreachData} />
+
                 <div className="clearfix">
                   <FormItem
                     className="half-item"

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

@@ -29,6 +29,19 @@ import { projectStatusList, approvalOptions } from "@/dataDic";
 import ProjectDetails from "./projectDetails";
 import Cascaders from "../../../common/cascaders";
 
+const ndaOptions = {
+  1: '是',
+  0: '否'
+};
+
+const breachClauseOptions = {
+  0: '否',
+  1: '有限责任违约条款,与技术服务有关',
+  2: '有限责任违约条款,与技术服务无关',
+  3: '无限责任违约条款,与技术服务有关',
+  4: '无限责任违约条款,与技术服务无关'
+};
+
 const { TabPane } = Tabs;
 const { RangePicker } = DatePicker;
 const { Option } = Select;
@@ -58,6 +71,8 @@ class HighTech extends Component {
           return "共" + total + "条数据";
         },
       },
+      nda: undefined,
+      breachClause: undefined,
       dataSource: [],
       releaseDate: [],
       searchOrderNo: "",
@@ -198,6 +213,8 @@ class HighTech extends Component {
           taskProjectStatus: this.state.taskProjectStatus || undefined,//项目状态
           sdStatus: this.state.sdStatus,//满意度
           type: this.state.approvaType.length > 0 ? this.state.approvaType.toString() : undefined, //特批类型
+          nda: this.state.nda,
+          breachClause: this.state.breachClause
         },
       success: function (data) {
         ShowModal(this);
@@ -210,6 +227,8 @@ class HighTech extends Component {
           for (let i = 0; i < data.data.list.length; i++) {
             let thisdata = data.data.list[i];
             thisdata.key = (data.data.pageNo - 1) * data.data.pageSize + i + 1;
+            thisdata.ndaName = ndaOptions[thisdata.nda]
+            thisdata.breachClauseName = breachClauseOptions[thisdata.breachClause]
             theArr.push(thisdata);
           }
           this.state.pagination.current = data.data.pageNo;
@@ -256,6 +275,8 @@ class HighTech extends Component {
         taskProjectStatus: "",
         sdStatus: undefined,
         approvaType: [],
+        nda: undefined,
+        breachClause: undefined
       },
       () => {
         this.Cascaders1.empty();
@@ -976,6 +997,34 @@ class HighTech extends Component {
                   >
                     {approvaChildren}
                   </Select>
+                  <Select
+                    style={{ width: 140 }}
+                    placeholder="是否签订保密协议"
+                    value={this.state.nda}
+                    onChange={e => {
+                      this.setState({
+                        nda: e
+                      })
+                    }}
+                  >
+                    { Object.keys(ndaOptions).map(key => {
+                      return <Option value={key}>{ndaOptions[key]}</Option>
+                    }) }
+                  </Select>
+                  <Select
+                    style={{ width: 220 }}
+                    placeholder="是否有违约条款"
+                    value={this.state.breachClause}
+                    onChange={e => {
+                      this.setState({
+                        breachClause: e
+                      })
+                    }}
+                  >
+                    { Object.keys(breachClauseOptions).map(key => {
+                      return <Option value={key}>{breachClauseOptions[key]}</Option>
+                    }) }
+                  </Select>
                   <Button
                     type="primary"
                     onClick={() => {

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

@@ -1432,6 +1432,18 @@ const currency = (onCellClick) => [
     // )
   },
   {
+    title: "是否签订保密",
+    dataIndex: "ndaName",
+    key: "ndaName",
+    minWidth: 100,
+  },
+  {
+    title: "是否有违约条款",
+    dataIndex: "breachClauseName",
+    key: "breachClauseName",
+    minWidth: 100
+  },
+  {
     title: "特别说明",
     dataIndex: "specialComment",
     key: "specialComment",