diff --git a/ruoyi-admin/src/main/resources/templates/project/info/add.html b/ruoyi-admin/src/main/resources/templates/project/info/add.html
index 8d7d0aa7..c2733382 100644
--- a/ruoyi-admin/src/main/resources/templates/project/info/add.html
+++ b/ruoyi-admin/src/main/resources/templates/project/info/add.html
@@ -334,6 +334,8 @@
     function submitHandler() {
         if ($.validate.form()) {
             $.operate.save(prefix + "/add", $('#form-product-add').serialize());
+        }else{
+            $.modal.alertWarning("请完善表单");
         }
     }
 
diff --git a/ruoyi-admin/src/main/resources/templates/project/info/edit.html b/ruoyi-admin/src/main/resources/templates/project/info/edit.html
index f9266a17..4c6e8ac4 100644
--- a/ruoyi-admin/src/main/resources/templates/project/info/edit.html
+++ b/ruoyi-admin/src/main/resources/templates/project/info/edit.html
@@ -371,6 +371,8 @@
     function submitHandler() {
         if ($.validate.form()) {
             $.operate.save(prefix + "/edit", $('#form-product-add').serialize());
+        }else{
+            $.modal.alertWarning("请完善表单");
         }
     }
 
diff --git a/ruoyi-admin/src/main/resources/templates/project/info/project.html b/ruoyi-admin/src/main/resources/templates/project/info/project.html
index 45833749..74529426 100644
--- a/ruoyi-admin/src/main/resources/templates/project/info/project.html
+++ b/ruoyi-admin/src/main/resources/templates/project/info/project.html
@@ -34,6 +34,10 @@
     .highlightRow {
         color: red;
     }
+
+    .disableBtnfalse {
+        color: #ccc;
+    }
 </style>
 <body class="gray-bg">
 <div class="container-div">
@@ -57,7 +61,7 @@
                         <li>
                             <label>项目阶段:</label>
                             <select name="projectStage" class="form-control"
-                                    th:with="type=${@dict.getType('project_stage')}" required>
+                                    th:with="type=${@dict.getType('project_stage')}">
                                 <option value="">请选择合项目阶段</option>
                                 <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
                                         th:value="${dict.dictValue}"></option>
@@ -74,7 +78,7 @@
                         </li>
                         <li>
                             <label>行业:</label>
-                            <div  id="industryTypeBox" style="float: right">
+                            <div id="industryTypeBox" style="float: right">
                                 <select name="industryType" class="form-control" required>
                                     <option value="">请先选择BG</option>
                                 </select>
@@ -186,7 +190,7 @@
                     formatter: (value, row, index) => {
                         if (row.highlight) {
                             return `<span class="highlight">${value}</span>`
-                        }else{
+                        } else {
                             return `<span>${value}</span>`
                         }
                     }
@@ -210,9 +214,9 @@
                     field: 'industryType',
                     title: '行业',
                     formatter: function (value, row, index) {
-                        if(row.bgProperty=='YYS'){
+                        if (row.bgProperty == 'YYS') {
                             return $.table.selectDictLabel([[${@dict.getType('bg_yys')}]], value);
-                        }else{
+                        } else {
                             return $.table.selectDictLabel([[${@dict.getType('bg_hsys')}]], value);
 
                         }
@@ -225,7 +229,7 @@
                 {
                     field: 'projectGraspDegree',
                     title: '项目把握度',
-                    width:30
+                    width: 30
                 },
                 {
                     field: 'projectStage',
@@ -266,7 +270,7 @@
                     formatter: function (value, row, index) {
                         var actions = [];
                         actions.push('<a class="btn btn-success btn-xs mb5' + editFlag + '" href="javascript:void(0)" onclick="$.operate.editFull(\'' + row.id + '\')"><i class="fa fa-edit"></i>项目详情</a> ');
-                        actions.push('<a class="btn btn-success btn-xs mb5' + editFlag + '" href="javascript:void(0)" onclick=`openOrder(${row})`><i class="fa fa-refresh"></i>生成订单</a> ');
+                        actions.push('<a class="btn btn-success btn-xs mb5' + editFlag + '" href="javascript:void(0)" onclick="openOrder(' + row.id + ',' + row.canGenerate + ')" name="disableBtn' + row.canGenerate + '"><i class="fa fa-refresh"></i>生成订单</a> ');
                         actions.push('<a class="btn btn-danger btn-xs mb5' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
                         return actions.join('');
                     }
@@ -368,6 +372,7 @@
             $('#laydate-endTime').attr('name', 'updateTimeEnd')
         }
     }
+
     function changeBg() {
         if ($('[name="bgProperty"]').val() != 'YYS') {
             let datas = [[${@dict.getType('bg_hysy')}]]
@@ -397,6 +402,31 @@
 
     }
 
+    function openOrder(id, canAdd) {
+        if (!canAdd) {
+            $.modal.alertWarning("该项目已存在订单");
+            return
+        }
+        var options = {
+            title: "新建订单",
+            url: ctx + `project/order/add`,
+            maxmin: false,
+            full: true,
+            index: 1000,
+            width: 1050,
+            yes: function (index, layero) {
+                let body = parent.layer.getChildFrame('body', index)
+                if ($(body.find('#form-product-add').get(0)).validate().form()) {
+                    $.operate.save(prefix + "/add", body.find('#form-product-add').serialize(), function () {
+                        parent.layer.close(index)
+                    });
+                }
+            },
+        };
+        window.localStorage.setItem('projcetDataId', id)
+        $.modal.openOptions(options)
+    }
+
 </script>
 </body>
 </html>
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/templates/project/order/add.html b/ruoyi-admin/src/main/resources/templates/project/order/add.html
index 20a62260..5ebb4927 100644
--- a/ruoyi-admin/src/main/resources/templates/project/order/add.html
+++ b/ruoyi-admin/src/main/resources/templates/project/order/add.html
@@ -85,6 +85,7 @@
                 <td class="shortTd">项目编号<span class="is-required">*</span></td>
                 <td>
                     <input name="projectId" class="form-control" type="hidden">
+                    <input name="orderId" class="form-control" type="hidden">
                     <input type="text" name="projectCode" placeholder="请选择" class="form-control"
                            onclick="searchProject()">
                 </td>
@@ -129,6 +130,7 @@
                 <td>联系方式<span class="is-required">*</span></td>
                 <td><input name="businessPhone" class="form-control" type="text" required></td>
             </tr>
+
             <tr>
                 <td>合同编号<span class="is-required">*</span></td>
                 <td><input type="text" name="orderCode" class="form-control" readonly placeholder="自动生成">
@@ -218,6 +220,15 @@
                     </select>
                 </td>
             </tr>
+            <tr>
+                <td>进货商联系人</td>
+                <td><input name="partnerPeople" class="form-control" type="text"></td>
+                <td>Email</td>
+                <td><input type="text" name="partnerEmail"
+                           class="form-control"></td>
+                <td>联系方式<span class="is-required">*</span></td>
+                <td><input name="partnerPhone" class="form-control" type="text" required></td>
+            </tr>
             <tr>
                 <td>供货商<span class="is-required">*</span></td>
                 <td colspan="5">
@@ -383,11 +394,39 @@
     function submitHandler() {
         if ($.validate.form()) {
             $.operate.save(prefix + "/add", $('#form-product-add').serialize());
+        }else{
+            $.modal.alertWarning("请完善表单");
         }
     }
 
+    function initProjcet() {
+        let id = window.localStorage.getItem('projcetDataId')
+        if (!id) {
+            return
+        }
+        window.localStorage.removeItem('projcetDataId')
+        $.operate.get(ctx + `sip/project/query/${id}`, function (res) {
+            let data = res.data
+            $('#projectNameBox').text(data.projectName)
+            $('[name="customerCode"]').val(data.customerCode);
+            $('[name="customerName"]').val(data.customerName);
+            $('[name="projectCode"]').val(data.projectCode);
+            $('[name="projectId"]').val(data.id);
+            $('[name="projectName"]').val(data.projectName);
+            $('[name="bgProperty"]').val(data.bgProperty);
+            $('[name="agentName"]').val(data.agentName);
+            $('[name="agentCode"]').val(data.agentCode);
+            changeBg()
+            $('[name="industryType"]').val(data.industryType);
+            initProjectList()
+        })
+
+
+    }
+
     $(function () {
         initProductList()
+        initProjcet()
         $("input[name='estimatedOrderTime']").datetimepicker({
             format: "yyyy-mm-dd",
             minView: "month",
@@ -459,7 +498,7 @@
     function doSubmitProject(index, layero) {
         var rows = layero.find("iframe")[0].contentWindow.getSelections();
         if (rows.length == 0) {
-            $.modal.alertWarning("请选择一个用户");
+            $.modal.alertWarning("请选择一个项目");
             return;
         }
         $('#projectNameBox').text(rows[0].projectName)
@@ -486,6 +525,9 @@
         $('[name="partnerCode"]').val(rows[0].partnerCode);
         $('[name="partnerName"]').val(rows[0].partnerName);
         $('[name="level"]').val(rows[0].level);
+        $('[name="partnerPeople"]').val(rows[0].contactPerson);
+        $('[name="partnerPhone"]').val(rows[0].contactPhone);
+
 
         $.modal.close(index);
     }
@@ -534,7 +576,7 @@ ${softwareProjectProductInfoList.map((ele) => {
 <td><input value="${data.catalogueAllPrice || ''}" name="softwareProjectProductInfoList[${length}].catalogueAllPrice" type="number" class="form-control catalogueAllPrice" placeholder="自动计算" required readonly></td>
 <td><input value="${data.remark || ''}" name="softwareProjectProductInfoList[${length}].remark" type="text" class="form-control"  ></td>
 
-<td><span style="cursor:pointer;color: ff5722" class="delRow">删除</span></td>
+<td><span style="cursor:pointer;color: #1686d8" class="delRow">删除</span></td>
 
 </tr>`)
         $('#productTable tbody').append(tr)
@@ -571,7 +613,7 @@ ${hardwareProjectProductInfoList.map((ele) => {
 <td><input value="${data.catalogueAllPrice || ''}" name="hardwareProjectProductInfoList[${length}].catalogueAllPrice" type="number" class="form-control catalogueAllPrice" placeholder="自动计算" required readonly></td>
 <td><input value="${data.remark || ''}" name="hardwareProjectProductInfoList[${length}].remark" type="text" class="form-control"  ></td>
 
-<td><span style="cursor:pointer;color: ff5722" class="delRow">删除</span></td>
+<td><span style="cursor:pointer;color: #1686d8" class="delRow">删除</span></td>
 
 </tr>`)
         $('#productTable2 tbody').append(tr)
@@ -608,7 +650,7 @@ ${maintenanceProjectProductInfoList.map((ele) => {
 <td><input value="${data.catalogueAllPrice || ''}" name="maintenanceProjectProductInfoList[${length}].catalogueAllPrice" type="number" class="form-control catalogueAllPrice" placeholder="自动计算" required readonly></td>
 <td><input value="${data.remark || ''}" name="maintenanceProjectProductInfoList[${length}].remark" type="text" class="form-control"  ></td>
 
-<td><span style="cursor:pointer;color: ff5722" class="delRow">删除</span></td>
+<td><span style="cursor:pointer;color: #1686d8" class="delRow">删除</span></td>
 
 </tr>`)
         $('#productTable3 tbody').append(tr)
@@ -790,7 +832,7 @@ ${maintenanceProjectProductInfoList.map((ele) => {
         const file = event.target.files[0];
         let data = new FormData()
         data.append('file', file)
-        data.append('projectId', $('[name="projectId"]').val())
+        data.append('orderId', $('[name="orderId"]').val())
 
         var xhr = new XMLHttpRequest(); // 创建XMLHttpRequest对象
         xhr.open('POST', prefix + '/importContractData', true); // 设置请求类型和URL
@@ -799,9 +841,7 @@ ${maintenanceProjectProductInfoList.map((ele) => {
             let data = JSON.parse(res.currentTarget.response)
             if (data.code === 0) {
                 $.modal.msgSuccess('导入成功');
-                data.data.forEach((row) => {
-                    addFile(row)
-                })
+                addFile(data.data)
             } else {
                 $.modal.msgError(data.msg || '导入失败');
             }
@@ -818,21 +858,30 @@ ${maintenanceProjectProductInfoList.map((ele) => {
     });
 
     function importList() {
-        if (!$('[name="projectId"]').val()) {
-            $.modal.alertWarning("请先选择项目");
-            return
-        }
         $('#uploadInput').click()
     }
 
-    function addFile() {
+    function addFile(data) {
+        let length = $('#fileBox tbody').find('tr').length
+        let filterArr = ['fileName', 'createBy', 'uploadTime']
+        let keys = Object.keys(data).filter((ele) => filterArr.indexOf(ele) < 0)
         let tr = $(`
 <tr>
-<td></td>
-<td></td>
-<td></td>
+<td>
+${
+            keys.map((ele) => {
+                return `<input type="hidden" name="contractFileList[${length}].${ele}" value="${data[ele] || ''}">`
+            }).join('')
+        }
+<input value="${data.fileName || ''}" name="contractFileList[${length}].fileName" readonly class="form-control"></td>
+<td><input value="${data.createByName || ''}" name="contractFileList[${length}].createBy" readonly class="form-control"></td>
+<td><input value="${data.uploadTime || ''}" name="contractFileList[${length}].uploadTime" readonly class="form-control"  ></td>
+<td><span style="cursor:pointer;color: #1686d8;margin-right: 5px;" onclick="preview('${data.filePath}')">预览</span><span style="cursor:pointer;color: #1686d8;margin-right: 5px;" onclick="downFile('${data.filePath}')">下载</span><span style="cursor:pointer;color: #dd242a" class="delfile">删除</span></td>
 </tr>`)
         $('#fileBox tbody').append(tr)
+        $('.delfile').on('click', function () {
+            $(this).parent().parent().remove()
+        })
 
     }
 
@@ -853,6 +902,18 @@ ${maintenanceProjectProductInfoList.map((ele) => {
             }) : ''
         })
     }
+
+    function downFile(filePath) {
+        $.operate.get(prefix + `/file/download?filePath=${filePath}`, function (res) {
+            window.location.href = res.data
+        })
+    }
+
+    function preview(filePath) {
+        $.operate.get(prefix + `/file/download?filePath=${filePath}`, function (res) {
+            window.open(res.data)
+        })
+    }
 </script>
 </body>
 </html>
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/templates/project/order/edit.html b/ruoyi-admin/src/main/resources/templates/project/order/edit.html
index 60d0f2ef..21fb1800 100644
--- a/ruoyi-admin/src/main/resources/templates/project/order/edit.html
+++ b/ruoyi-admin/src/main/resources/templates/project/order/edit.html
@@ -1,214 +1,924 @@
 <!DOCTYPE html>
-<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<html lang="zh" xmlns:th="http://www.thymeleaf.org">
 <head>
-    <th:block th:include="include :: header('修改订单管理')" />
-    <th:block th:include="include :: datetimepicker-css" />
+    <th:block th:include="include :: header('新增项目管理')"/>
+    <th:block th:include="include :: datetimepicker-css"/>
 </head>
+<style>
+    body {
+        font-family: "微软雅黑", Arial, sans-serif;
+    }
+
+    table {
+        border-collapse: collapse;
+        width: 100%;
+        margin-bottom: 20px;
+    }
+
+    th, td {
+        border: 1px solid #ccc;
+        padding: 8px;
+    }
+
+    .is-required {
+        color: red;
+    }
+
+    th {
+        background: #f5f5f5;
+    }
+
+    .section-title {
+        font-weight: bold;
+        font-size: 18px;
+        padding: 10px 0;
+    }
+
+    .checkbox-group label {
+        margin-right: 20px;
+    }
+
+    .add-btn {
+        background: #409eff;
+        color: #fff;
+        border: none;
+        padding: 5px 10px;
+        cursor: pointer;
+    }
+
+    .checkbox-box {
+        display: flex;
+        flex-direction: row;
+        gap: 10px;
+    }
+
+    .checkbox-box label {
+        display: flex;
+        flex-direction: row;
+        gap: 5px;
+        align-items: center;
+    }
+
+    .shortTd {
+        width: 100px;
+    }
+
+    input, textarea, .productTable td {
+        position: relative;
+    }
+
+    [name="bgProperty"], #industryTypeBox select {
+        pointer-events: none;
+    }
+
+    #projectNameBox {
+        margin-left: 20px;
+        display: inline-block;
+    }
+</style>
 <body class="white-bg">
-    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
-        <form class="form-horizontal m" id="form-order-edit" th:object="${projectOrderInfo}">
-            <input name="id" th:field="*{id}" type="hidden">
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">项目主键:</label>
-                    <div class="col-sm-8">
-                        <input name="projectId" th:field="*{projectId}" class="form-control" type="text" required>
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">地市:</label>
-                    <div class="col-sm-8">
-                        <input name="city" th:field="*{city}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">进货商商务接口人姓名:</label>
-                    <div class="col-sm-8">
-                        <input name="businessPerson" th:field="*{businessPerson}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">邮箱:</label>
-                    <div class="col-sm-8">
-                        <input name="businessEmail" th:field="*{businessEmail}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">电话:</label>
-                    <div class="col-sm-8">
-                        <input name="businessPhone" th:field="*{businessPhone}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">合同编号:</label>
-                    <div class="col-sm-8">
-                        <input name="orderCode" th:field="*{orderCode}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">出货金额:</label>
-                    <div class="col-sm-8">
-                        <input name="shipmentAmount" th:field="*{shipmentAmount}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">实际进货金额:</label>
-                    <div class="col-sm-8">
-                        <input name="actualPurchaseAmount" th:field="*{actualPurchaseAmount}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">执行单有效截止时间:</label>
-                    <div class="col-sm-8">
-                        <div class="input-group date">
-                            <input name="orderEndTime" th:value="${#dates.format(projectOrderInfo.orderEndTime, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text">
-                            <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">要求到货时间:</label>
-                    <div class="col-sm-8">
-                        <div class="input-group date">
-                            <input name="deliveryTime" th:value="${#dates.format(projectOrderInfo.deliveryTime, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text">
-                            <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">公司直发:</label>
-                    <div class="col-sm-8">
-                        <input name="companyDelivery" th:field="*{companyDelivery}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">通知人:</label>
-                    <div class="col-sm-8">
-                        <input name="notifier" th:field="*{notifier}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">通知人邮箱:</label>
-                    <div class="col-sm-8">
-                        <input name="notifierEmail" th:field="*{notifierEmail}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">通知人电话:</label>
-                    <div class="col-sm-8">
-                        <input name="notifierPhone" th:field="*{notifierPhone}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">责任人:</label>
-                    <div class="col-sm-8">
-                        <input name="duty" th:field="*{duty}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">责任人邮箱:</label>
-                    <div class="col-sm-8">
-                        <input name="dutyEmail" th:field="*{dutyEmail}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">责任人电话:</label>
-                    <div class="col-sm-8">
-                        <input name="dutyPhone" th:field="*{dutyPhone}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">下单通路:</label>
-                    <div class="col-sm-8">
-                        <input name="orderChannel" th:field="*{orderChannel}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">进货商:</label>
-                    <div class="col-sm-8">
-                        <input name="partnerCode" th:field="*{partnerCode}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">供货商:</label>
-                    <div class="col-sm-8">
-                        <input name="supplier" th:field="*{supplier}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label">其它特别说明:</label>
-                    <div class="col-sm-8">
-                        <input name="remark" th:field="*{remark}" class="form-control" type="text">
-                    </div>
-                </div>
-            </div>
-        </form>
-    </div>
-    <th:block th:include="include :: footer" />
-    <th:block th:include="include :: datetimepicker-js" />
-    <script th:inline="javascript">
-        var prefix = ctx + "project/order";
-        $("#form-order-edit").validate({
-            focusCleanup: true
-        });
+<div class="wrapper wrapper-content animated fadeInRight ibox-content">
+    <form id="form-product-add" th:object="${projectOrderInfo}">
+        <div class="section-title">编辑订单<span id="projectNameBox"></span></div>
+        <table>
+            <tr>
+                <td class="shortTd">项目编号<span class="is-required">*</span></td>
+                <td>
+                    <input name="projectId" class="form-control" type="hidden" th:field="*{projectId}">
+                    <input name="id" class="form-control" type="hidden" th:field="*{id}">
+                    <input type="text" name="projectCode" th:field="*{projectCode}" placeholder="请选择"
+                           class="form-control"
+                           onclick="searchProject()">
+                </td>
+                <td class="shortTd">项目名称<span class="is-required">*</span></td>
+                <td><input type="text" name="projectName"
+                           class="form-control" placeholder="选择项目后带入" th:field="*{projectName}" readonly></td>
+                <td class="shortTd">最终客户<span class="is-required">*</span></td>
+                <td><input name="customerName" class="form-control" th:field="*{customerName}" type="text" readonly
+                           placeholder="选择项目后带入"
+                           required>
+                    <input name="customerCode" class="form-control" th:field="*{customerCode}" type="hidden"></td>
+            </tr>
+            <tr>
+                <td>BG<span class="is-required">*</span></td>
+                <td>
+                    <select name="bgProperty" class="form-control" th:field="*{bgProperty}"
+                            th:with="type=${@dict.getType('bg_type')}"
+                            readonly required>
+                        <option value="">请选择BG</option>
+                        <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
+                                th:value="${dict.dictValue}"></option>
+                    </select>
+                </td>
+                <td>行业<span class="is-required">*</span></td>
+                <td id="industryTypeBox">
+                    <select name="industryType" class="form-control"
+                            required readonly>
+                        <option value="">请先选择BG</option>
+                    </select>
+                </td>
+                <td>代表处<span class="is-required">*</span></td>
+                <td colspan="3">
+                    <input name="agentName" class="form-control" th:field="*{agentName}" type="text" readonly required>
+                    <input name="agentCode" class="form-control" th:field="*{agentCode}" type="hidden">
+                </td>
+            </tr>
+            <tr>
+                <td>进货商商务接口人姓名<span class="is-required">*</span></td>
+                <td><input type="text" name="businessPerson" th:field="*{businessPerson}" class="form-control" required>
+                </td>
+                <td>Email</td>
+                <td><input type="text" name="businessEmail" th:field="*{businessEmail}"
+                           class="form-control"></td>
+                <td>联系方式<span class="is-required">*</span></td>
+                <td><input name="businessPhone" class="form-control" th:field="*{businessPhone}" type="text" required>
+                </td>
+            </tr>
 
-        function submitHandler() {
-            if ($.validate.form()) {
-                $.operate.save(prefix + "/edit", $('#form-order-edit').serialize());
-            }
+            <tr>
+                <td>合同编号<span class="is-required">*</span></td>
+                <td><input type="text" name="orderCode" th:field="*{orderCode}" class="form-control" readonly
+                           placeholder="自动生成">
+                </td>
+                <td>币种<span class="is-required">*</span></td>
+                <td>
+                    <select name="currencyType" th:field="*{currencyType}" class="form-control"
+                            th:with="type=${@dict.getType('currency_type')}"
+                            required>
+                        <option value="">请选择币种</option>
+                        <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
+                                th:value="${dict.dictValue}"></option>
+                    </select></td>
+                <td class="shortTd">出货金额<span class="is-required">*</span></td>
+                <td><input name="shipmentAmount" th:field="*{shipmentAmount}" class="form-control" type="number"
+                           required></td>
+            </tr>
+            <tr>
+                <td>实际进货金额<span class="is-required">*</span></td>
+                <td><input type="number" name="actualPurchaseAmount" th:field="*{actualPurchaseAmount}"
+                           class="form-control" required>
+                </td>
+                <td>执行单有效截止时间<span class="is-required">*</span></td>
+                <td colspan="3">
+                    <input name="orderEndTime" class="form-control" th:field="*{orderEndTime}" placeholder="yyyy-MM-dd"
+                           required>
+                </td>
+            </tr>
+            <tr>
+
+                <td>要求到货时间<span class="is-required">*</span></td>
+                <td>
+                    <input name="deliveryTime" class="form-control" th:field="*{deliveryTime}" placeholder="yyyy-MM-dd"
+                           required>
+                </td>
+                <td>公司直发</td>
+                <td colspan="3">
+                    <select name="companyDelivery" class="form-control" th:field="*{companyDelivery}"
+                            th:with="type=${@dict.getType('company_delivery')}"
+                            required>
+                        <option value="">请选择</option>
+                        <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
+                                th:value="${dict.dictValue}"></option>
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td>通知人<span class="is-required">*</span></td>
+                <td><input type="text" name="notifier" class="form-control" th:field="*{notifier}" required>
+                </td>
+                <td>Email</td>
+                <td><input type="text" name="notifierEmail" th:field="*{notifierEmail}"
+                           class="form-control"></td>
+                <td>联系方式<span class="is-required">*</span></td>
+                <td><input name="notifierPhone" class="form-control" th:field="*{notifierPhone}" type="text" required>
+                </td>
+            </tr>
+            <tr>
+                <td>汇智责任人</td>
+                <td><input name="dutyName" class="form-control" type="text"
+                           onclick="selectPeople()">
+                    <input name="duty" class="form-control" th:field="*{dutyName}" type="hidden"></td>
+                <td>Email</td>
+                <td><input type="text" name="dutyEmail" th:field="*{dutyEmail}"
+                           class="form-control"></td>
+                <td>联系方式<span class="is-required">*</span></td>
+                <td><input name="dutyPhone" class="form-control" th:field="*{dutyPhone}" type="text" required></td>
+            </tr>
+            <tr>
+                <td>下单通路<span class="is-required">*</span></td>
+                <td colspan="5">
+                    <select name="orderChannel" class="form-control" required th:field="*{orderChannel}">
+                        <option value="">请选择</option>
+                        <option value="1">总代</option>
+                        <option value="2">直签</option>
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td>进货商<span class="is-required">*</span></td>
+                <td><input name="partnerName" class="form-control" type="text" th:field="*{partnerName}"
+                           onclick="selectPartner()" required></td>
+                <td>进货商代码<span class="is-required">*</span></td>
+                <td><input type="text" name="partnerCode" th:field="*{partnerCode}"
+                           class="form-control" readonly placeholder="选择后带入" required></td>
+                <td>进货商类型<span class="is-required">*</span></td>
+                <td>
+                    <select name="level" class="form-control" readonly :placeholder="选择后带入" th:field="*{level}"
+                            th:with="type=${@dict.getType('identify_level')}" style="pointer-events: none">
+                        <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
+                                th:value="${dict.dictValue}"></option>
+                    </select>
+                </td>
+            </tr>
+            <tr>
+                <td>进货商联系人</td>
+                <td><input name="partnerPeople" class="form-control" type="text" th:field="*{partnerPeople}"></td>
+                <td>Email</td>
+                <td><input type="text" name="partnerEmail" th:field="*{partnerEmail}"
+                           class="form-control"></td>
+                <td>联系方式<span class="is-required">*</span></td>
+                <td><input name="partnerPhone" class="form-control" type="text" required th:field="*{partnerPhone}">
+                </td>
+            </tr>
+            <tr>
+                <td>供货商<span class="is-required">*</span></td>
+                <td colspan="5">
+                    <input name="supplier" class="form-control" type="text" required th:field="*{remark}">
+                </td>
+            </tr>
+            <tr>
+                <td>其他特别说明</td>
+                <td colspan="5">
+                    <input name="remark" class="form-control" type="text" th:field="*{remark}">
+                </td>
+            </tr>
+        </table>
+
+        <div class="layui-tab">
+            <ul class="layui-tab-title">
+                <li class="layui-this" lay-id="11">配置信息</li>
+                <li lay-id="22">审批信息</li>
+                <li lay-id="33">备货信息</li>
+                <li lay-id="44">物流信息</li>
+                <li lay-id="55">合同信息</li>
+            </ul>
+            <div class="layui-tab-content">
+                <div class="layui-tab-item layui-show">
+                    <div class="section-title">配置信息</div>
+                    <h3>软件</h3>
+                    <button type="button" class="add-btn" onclick="addProduct({})">添加</button>
+                    <table id="productTable" class="productTable">
+                        <thead>
+                        <tr>
+                            <th>序号</th>
+                            <th>产品编号</th>
+                            <th>产品型号</th>
+                            <th>描述</th>
+                            <th>数量</th>
+                            <th style="width: 90px">目录单价(RMB)</th>
+                            <th style="width: 90px">指导折扣</th>
+                            <th style="width: 90px">折扣</th>
+                            <th style="width: 90px">单价(RMB)</th>
+                            <th style="width: 120px">总价(RMB)</th>
+                            <th style="width: 120px">目录总价(RMB)</th>
+                            <th>备注</th>
+                            <th style="width: 60px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        </tbody>
+                    </table>
+                    <h3>硬件</h3>
+                    <button type="button" class="add-btn" onclick="addProduct2({})">添加</button>
+                    <table id="productTable2" class="productTable">
+                        <thead>
+                        <tr>
+                            <th>序号</th>
+                            <th>产品编号</th>
+                            <th>产品型号</th>
+                            <th>描述</th>
+                            <th>数量</th>
+                            <th style="width: 90px">目录单价(RMB)</th>
+                            <th style="width: 90px">指导折扣</th>
+                            <th style="width: 90px">折扣</th>
+                            <th style="width: 90px">单价(RMB)</th>
+                            <th style="width: 120px">总价(RMB)</th>
+                            <th style="width: 120px">目录总价(RMB)</th>
+                            <th>备注</th>
+                            <th style="width: 60px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        </tbody>
+                    </table>
+                    <h3>维保</h3>
+                    <button type="button" class="add-btn" onclick="addProduct3({})">添加</button>
+                    <table id="productTable3" class="productTable">
+                        <thead>
+                        <tr>
+                            <th>序号</th>
+                            <th>产品编号</th>
+                            <th>产品型号</th>
+                            <th>描述</th>
+                            <th>数量</th>
+                            <th style="width: 90px">目录单价(RMB)</th>
+                            <th style="width: 90px">指导折扣</th>
+                            <th style="width: 90px">折扣</th>
+                            <th style="width: 90px">单价(RMB)</th>
+                            <th style="width: 120px">总价(RMB)</th>
+                            <th style="width: 120px">目录总价(RMB)</th>
+                            <th>备注</th>
+                            <th style="width: 60px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        </tbody>
+                    </table>
+                </div>
+                <div class="layui-tab-item">内容-2</div>
+                <div class="layui-tab-item">内容-3</div>
+                <div class="layui-tab-item">内容-4</div>
+                <div class="layui-tab-item">
+                    <div class="row">
+                        <input id="uploadInput" type="file" accept=".pdf" style="display: none">
+                        <div class="col-xs-12">
+                            <button type="button" class="btn btn-white btn-sm" onclick="downloadTem()"><i
+                                    class="fa fa-download">
+                                下载模板</i></button>
+                            <button type="button" class="btn btn-white btn-sm" onclick="importList()"><i
+                                    class="fa fa-upload">
+                                上传</i>
+                            </button>
+                            <div class="col-sm-12 select-table table-striped">
+                                <table id="fileBox">
+                                    <thead>
+                                    <tr>
+                                        <th>合同名称</th>
+                                        <th>上传人</th>
+                                        <th>上传时间</th>
+                                        <th>操作</th>
+                                    </tr>
+                                    </thead>
+                                    <tbody></tbody>
+                                </table>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+    </form>
+</div>
+<th:block th:include="include :: footer"/>
+<th:block th:include="include :: datetimepicker-js"/>
+<th:block th:include="include :: layui"/>
+<th:block th:include="include :: jquery-cxselect-js"/>
+
+<script th:inline="javascript">
+    var prefix = ctx + "project/order"
+    $("#form-product-add").validate({
+        focusCleanup: true
+    });
+    var softwareProjectProductInfoList = []
+    var hardwareProjectProductInfoList = []
+    var maintenanceProjectProductInfoList = []
+
+    function initProductList() {
+        let data = {
+            pageSize: 100000,
+            pageNum: 1,
+            isTable: 0,
         }
+        $.operate.post(ctx + 'system/product/list', {...data, type: '1'}, function (res) {
+            softwareProjectProductInfoList = res.rows
+            let softwareProjectProductInfoListAll = [[${projectOrderInfo.softwareProjectProductInfoList}]] || []
+            softwareProjectProductInfoListAll.forEach((ele) => {
+                addProduct(ele)
+            })
+        })
+        $.operate.post(ctx + 'system/product/list', {...data, type: '2'}, function (res) {
+            hardwareProjectProductInfoList = res.rows
+            let hardwareProjectProductInfoListAll = [[${projectOrderInfo.hardwareProjectProductInfoList}]] || []
+            hardwareProjectProductInfoListAll.forEach((ele) => {
+                addProduct2(ele)
+            })
 
+        })
+        $.operate.post(ctx + 'system/product/list', {...data, type: '11,22'}, function (res) {
+            maintenanceProjectProductInfoList = res.rows
+            let maintenanceProjectProductInfoListAll = [[${projectOrderInfo.maintenanceProjectProductInfoList}]] || []
+            maintenanceProjectProductInfoListAll.forEach((ele) => {
+                addProduct3(ele)
+            })
+        })
+        ([[${projectOrderInfo.contractFileList}]] || []).forEach((ele) => {
+            addFile(ele)
+        })
+    }
+
+    function submitHandler() {
+        if ($.validate.form()) {
+            $.operate.save(prefix + "/edit", $('#form-product-add').serialize());
+        }else{
+            $.modal.alertWarning("请完善表单");
+        }
+    }
+
+    $(function () {
+        initProductList()
+        $("input[name='estimatedOrderTime']").datetimepicker({
+            format: "yyyy-mm-dd",
+            minView: "month",
+            autoclose: true
+        });
+        $("input[name='estimatedDeliverTime']").datetimepicker({
+            format: "yyyy-mm-dd",
+            minView: "month",
+            autoclose: true
+        });
+        layui.use('element', function () {
+            var element = layui.element;
+        });
+        var urlChina = '/cnarea/select';
+        $.cxSelect.defaults.url = urlChina;
+        $('#element1').cxSelect({
+            selects: ['province', 'city'],
+            nodata: 'none'
+
+        });
         $("input[name='orderEndTime']").datetimepicker({
             format: "yyyy-mm-dd",
             minView: "month",
             autoclose: true
         });
-
         $("input[name='deliveryTime']").datetimepicker({
             format: "yyyy-mm-dd",
             minView: "month",
             autoclose: true
         });
-    </script>
+        initData()
+    })
+
+    function searchProject() {
+        var url = prefix + "/selectProject";
+        var options = {
+            title: '选择客户',
+            width: "680",
+            url: url,
+            height: '600',
+            callBack: doSubmitProject
+        };
+        $.modal.openOptions(options);
+    }
+
+    function selectPartner() {
+        var url = prefix + "/selectPartner";
+        var options = {
+            title: '选择代理商',
+            width: "680",
+            height: '600',
+            url: url,
+            callBack: doSubmitPartner
+        };
+        $.modal.openOptions(options);
+    }
+
+    function selectPeople() {
+        var url = prefix + "/selectPeople";
+        var options = {
+            title: '选择代理商',
+            width: "680",
+            height: '600',
+            url: url,
+            callBack: doSubmitPeople
+        };
+        $.modal.openOptions(options);
+    }
+
+    function doSubmitProject(index, layero) {
+        var rows = layero.find("iframe")[0].contentWindow.getSelections();
+        if (rows.length == 0) {
+            $.modal.alertWarning("请选择一个项目");
+            return;
+        }
+        $('#projectNameBox').text(rows[0].projectName)
+        $('[name="customerCode"]').val(rows[0].customerCode);
+        $('[name="customerName"]').val(rows[0].customerName);
+        $('[name="projectCode"]').val(rows[0].projectCode);
+        $('[name="projectId"]').val(rows[0].id);
+        $('[name="projectName"]').val(rows[0].projectName);
+        $('[name="bgProperty"]').val(rows[0].bgProperty);
+        $('[name="agentName"]').val(rows[0].agentName);
+        $('[name="agentCode"]').val(rows[0].agentCode);
+        changeBg()
+        $('[name="industryType"]').val(rows[0].industryType);
+        initProjectList()
+        $.modal.close(index);
+    }
+
+    function doSubmitPartner(index, layero) {
+        var rows = layero.find("iframe")[0].contentWindow.getSelections();
+        if (rows.length == 0) {
+            $.modal.alertWarning("请选择一个代理商");
+            return;
+        }
+        $('[name="partnerCode"]').val(rows[0].partnerCode);
+        $('[name="partnerName"]').val(rows[0].partnerName);
+        $('[name="level"]').val(rows[0].level);
+        $('[name="partnerPeople"]').val(rows[0].contactPerson);
+        $('[name="partnerPhone"]').val(rows[0].contactPhone);
+
+
+        $.modal.close(index);
+    }
+
+    function initData() {
+        changeBg()
+    }
+
+    function doSubmitPeople(index, layero) {
+        var rows = layero.find("iframe")[0].contentWindow.getSelections();
+        if (rows.length == 0) {
+            $.modal.alertWarning("请选择一个代理商");
+            return;
+        }
+        $('[name="duty"]').val(rows[0].userId);
+        $('[name="dutyName"]').val(rows[0].userName);
+        $('[name="dutyPhone"]').val(rows[0].phonenumber);
+        $('[name="dutyEmail"]').val(rows[0].email);
+
+
+        $.modal.close(index);
+    }
+
+
+    // 添加软件
+    function addProduct(data) {
+        let length = $('#productTable tbody').find('tr').length
+        let tr = $(`
+<tr>
+<td class="indexBox">${length + 1}</td>
+<td class="layui-form"><input type="hidden" name="softwareProjectProductInfoList[${length}].id" value="${data.id || ''}"><select name="softwareProjectProductInfoList[${length}].productBomCode" value="${data.productBomCode || ''}" required class="form-control productBomCode" lay-search="" lay-filter="productCode1">
+${softwareProjectProductInfoList.map((ele) => {
+            return `<option value="${ele.productCode}">${ele.productCode}</option>`
+        }).join('')
+        }
+</select></td>
+<td class="layui-form"><select name="softwareProjectProductInfoList[${length}].model" required class="form-control model" lay-search="" lay-filter="productModel1">
+${softwareProjectProductInfoList.map((ele) => {
+            return `<option value="${ele.model}">${ele.model}</option>`
+        }).join('')
+        }
+</select></td>
+<td><textarea name="softwareProjectProductInfoList[${length}].productDesc" required class="form-control productDesc" placeholder="自动带入" readonly>${softwareProjectProductInfoList[0]?.description || ''}</textarea></td>
+<td><input value="${data.quantity || ''}" name="softwareProjectProductInfoList[${length}].quantity" type="number" class="form-control quantity" step="1" required></td>
+<td><input value="${data.cataloguePrice || ''}" name="softwareProjectProductInfoList[${length}].cataloguePrice" type="text" class="form-control cataloguePrice" required></td>
+<td><input value="${data.guidanceDiscount || ''}" name="softwareProjectProductInfoList[${length}].guidanceDiscount" type="number" class="form-control guidanceDiscount" min="0" max="1"  step="0.1" required></td>
+<td><input value="${data.discount || ''}" name="softwareProjectProductInfoList[${length}].discount" type="number" class="form-control discount" min="0" max="1" step="0.1" required></td>
+<td><input value="${data.price || ''}" name="softwareProjectProductInfoList[${length}].price" type="number" class="form-control price" placeholder="自动计算" required readonly></td>
+<td><input value="${data.allPrice || ''}" name="softwareProjectProductInfoList[${length}].allPrice" type="number" class="form-control allPrice" placeholder="自动计算" required readonly></td>
+<td><input value="${data.catalogueAllPrice || ''}" name="softwareProjectProductInfoList[${length}].catalogueAllPrice" type="number" class="form-control catalogueAllPrice" placeholder="自动计算" required readonly></td>
+<td><input value="${data.remark || ''}" name="softwareProjectProductInfoList[${length}].remark" type="text" class="form-control"  ></td>
+
+<td><span style="cursor:pointer;color: #1686d8" class="delRow">删除</span></td>
+
+</tr>`)
+        $('#productTable tbody').append(tr)
+        initSearchProduct('1')
+        initPrice()
+    }
+
+    function addProduct2(data) {
+        let length = $('#productTable2 tbody').find('tr').length
+        let tr = $(`
+<tr>
+<td class="indexBox">${length + 1}</td>
+<td class="layui-form"><input type="hidden" name="hardwareProjectProductInfoList[${length}].id" value="${data.id || ''}"><select name="hardwareProjectProductInfoList[${length}].productBomCode" required class="form-control productBomCode" lay-search="" lay-filter="productCode2" value="${data.productBomCode || ''}">
+${hardwareProjectProductInfoList.map((ele) => {
+            return `<option value="${ele.productCode}">${ele.productCode}</option>`
+        }).join('')
+        }
+
+</select></td>
+<td class="layui-form"><select name="hardwareProjectProductInfoList[${length}].model" required class="form-control model" lay-search="" lay-filter="productModel2" value="${data.model || ''}">
+${hardwareProjectProductInfoList.map((ele) => {
+            return `<option value="${ele.model}">${ele.model}</option>`
+        }).join('')
+        }
+
+</select></td>
+<td><textarea name="hardwareProjectProductInfoList[${length}].productDesc" required class="form-control productDesc" placeholder="自动带入" readonly>${data.id ? data.productDesc : (hardwareProjectProductInfoList[0]?.description || '')}</textarea></td>
+<td><input value="${data.quantity || ''}" name="hardwareProjectProductInfoList[${length}].quantity" type="number" class="form-control quantity" step="1" required></td>
+<td><input value="${data.cataloguePrice || ''}" name="hardwareProjectProductInfoList[${length}].cataloguePrice" type="text" class="form-control cataloguePrice" required></td>
+<td><input value="${data.guidanceDiscount || ''}" name="hardwareProjectProductInfoList[${length}].guidanceDiscount" type="number" class="form-control guidanceDiscount" min="0" max="1"  step="0.1" required></td>
+<td><input value="${data.discount || ''}" name="hardwareProjectProductInfoList[${length}].discount" type="number" class="form-control discount" min="0" max="1" step="0.1" required></td>
+<td><input value="${data.price || ''}" name="hardwareProjectProductInfoList[${length}].price" type="number" class="form-control price" placeholder="自动计算" required readonly></td>
+<td><input value="${data.allPrice || ''}" name="hardwareProjectProductInfoList[${length}].allPrice" type="number" class="form-control allPrice" placeholder="自动计算" required readonly></td>
+<td><input value="${data.catalogueAllPrice || ''}" name="hardwareProjectProductInfoList[${length}].catalogueAllPrice" type="number" class="form-control catalogueAllPrice" placeholder="自动计算" required readonly></td>
+<td><input value="${data.remark || ''}" name="hardwareProjectProductInfoList[${length}].remark" type="text" class="form-control"  ></td>
+
+<td><span style="cursor:pointer;color: #1686d8" class="delRow">删除</span></td>
+
+</tr>`)
+        $('#productTable2 tbody').append(tr)
+        initSearchProduct('2')
+        initPrice()
+    }
+
+    function addProduct3(data) {
+        let length = $('#productTable3 tbody').find('tr').length
+        let tr = $(`
+<tr>
+<td class="indexBox">${length + 1}</td>
+<td class="layui-form"><input type="hidden" name="maintenanceProjectProductInfoList[${length}].id" value="${data.id || ''}"><select name="maintenanceProjectProductInfoList[${length}].productBomCode" required class="form-control productBomCode" lay-search="" lay-filter="productCode3" value="${data.productBomCode || ''}">
+${maintenanceProjectProductInfoList.map((ele) => {
+            return `<option value="${ele.productCode}">${ele.productCode}</option>`
+        }).join('')
+        }
+
+</select></td>
+<td class="layui-form"><select name="maintenanceProjectProductInfoList[${length}].model" required class="form-control model" lay-search="" lay-filter="productModel3">
+${maintenanceProjectProductInfoList.map((ele) => {
+            return `<option value="${ele.model}">${ele.model}</option>`
+        }).join('')
+        }
+
+</select></td>
+<td><textarea name="maintenanceProjectProductInfoList[${length}].productDesc" required class="form-control productDesc" placeholder="自动带入" readonly>${maintenanceProjectProductInfoList[0]?.description || ''}</textarea></td>
+<td><input name="maintenanceProjectProductInfoList[${length}].quantity" type="number" class="form-control quantity" step="1" required value="${data.quantity || ''}" ></td>
+<td><input value="${data.cataloguePrice || ''}" name="maintenanceProjectProductInfoList[${length}].cataloguePrice" type="text" class="form-control cataloguePrice" required></td>
+<td><input value="${data.guidanceDiscount || ''}" name="maintenanceProjectProductInfoList[${length}].guidanceDiscount" type="number" class="form-control guidanceDiscount" min="0" max="1"  step="0.1" required></td>
+<td><input value="${data.discount || ''}" name="maintenanceProjectProductInfoList[${length}].discount" type="number" class="form-control discount" min="0" max="1" step="0.1" required></td>
+<td><input value="${data.price || ''}" name="maintenanceProjectProductInfoList[${length}].price" type="number" class="form-control price" placeholder="自动计算" required readonly></td>
+<td><input value="${data.allPrice || ''}" name="maintenanceProjectProductInfoList[${length}].allPrice" type="number" class="form-control allPrice" placeholder="自动计算" required readonly></td>
+<td><input value="${data.catalogueAllPrice || ''}" name="maintenanceProjectProductInfoList[${length}].catalogueAllPrice" type="number" class="form-control catalogueAllPrice" placeholder="自动计算" required readonly></td>
+<td><input value="${data.remark || ''}" name="maintenanceProjectProductInfoList[${length}].remark" type="text" class="form-control"  ></td>
+
+<td><span style="cursor:pointer;color: #1686d8" class="delRow">删除</span></td>
+
+</tr>`)
+        $('#productTable3 tbody').append(tr)
+        initSearchProduct('11,22')
+        initPrice()
+    }
+
+    function addLog() {
+        let length = $('#workLog tbody').find('tr').length
+        let tr = $(`
+<tr>
+<td>${length + 1}</td>
+<td><textarea type="text" name="projectWorkProgressList[${length}].workContent" class="form-control" required></textarea></td>
+<td><input type="text" class="form-control"  placeholder="保存后自动填入"  readonly></td>
+<td><input type="text" class="form-control" placeholder="保存后自动填入" readonly></td>
+</tr>`)
+        $('#workLog tbody').append(tr)
+
+    }
+
+    function initSearchProduct() {
+        layui.use(function () {
+            var form = layui.form
+            form.render()
+
+            form.on('select(productCode1)', function (data) {
+                searchProduct(data.value, 'code', data.elem)
+            })
+            form.on('select(productCode2)', function (data) {
+                searchProduct(data.value, 'code', data.elem)
+            })
+            form.on('select(productCode3)', function (data) {
+                searchProduct(data.value, 'code', data.elem)
+            })
+            form.on('select(productModel1)', function (data) {
+                searchProduct(data.value, 'model', data.elem)
+            })
+            form.on('select(productModel2)', function (data) {
+                searchProduct(data.value, 'model', data.elem)
+            })
+            form.on('select(productModel3)', function (data) {
+                searchProduct(data.value, 'model', data.elem)
+            })
+            $('.layui-input').on('mouseout', function () {
+                $(this).blur()
+            })
+        })
+        $('.productTable .delRow').on('click', function () {
+            let ele = $(this)
+            $.modal.confirm('是否确认删除', function () {
+                $(ele).parent().parent().remove()
+                $('#productTable tbody tr').each((index, item) => {
+                    $(item).find('.indexBox').text(index + 1)
+                })
+                $('#productTable2 tbody tr').each((index, item) => {
+                    $(item).find('.indexBox').text(index + 1)
+                })
+                $('#productTable3 tbody tr').each((index, item) => {
+                    $(item).find('.indexBox').text(index + 1)
+                })
+
+            });
+        })
+    }
+
+    function searchProduct(val, type, ele) {
+        let selectObj = {}
+        let listName = $(ele).attr('name')
+        if (type == 'code') {
+            if (listName.indexOf('softwareProjectProductInfoList') > -1) {
+                selectObj = softwareProjectProductInfoList.find((ele) => ele.productCode == val)
+            } else if (listName.indexOf('hardwareProjectProductInfoList') > -1) {
+                selectObj = hardwareProjectProductInfoList.find((ele) => ele.productCode == val)
+            } else if (listName.indexOf('maintenanceProjectProductInfoList') > -1) {
+                selectObj = maintenanceProjectProductInfoList.find((ele) => ele.productCode == val)
+            }
+            $(ele).parent().parent().find('.model+div').find('.layui-input').val(selectObj.model)
+            $(ele).parent().parent().find('.model').val(selectObj.model)
+        } else {
+            if (listName.indexOf('softwareProjectProductInfoList') > -1) {
+                selectObj = softwareProjectProductInfoList.find((ele) => ele.model == val)
+            } else if (listName.indexOf('hardwareProjectProductInfoList') > -1) {
+                selectObj = hardwareProjectProductInfoList.find((ele) => ele.model == val)
+            } else if (listName.indexOf('maintenanceProjectProductInfoList') > -1) {
+                selectObj = maintenanceProjectProductInfoList.find((ele) => ele.model == val)
+            }
+            $(ele).parent().parent().find('.productBomCode+div').find('.layui-input').val(selectObj.model)
+            $(ele).parent().parent().find('.productBomCode').val(selectObj.productCode)
+        }
+        $(ele).parent().parent().find('.productDesc').val(selectObj.description)
+    }
+
+    function initPrice() {
+        $('.productTable .quantity').on('input', function () {
+            let num = $(this).val()
+            let priceVal = $(this).parent().parent().find('.price').val()
+            let cateVal = $(this).parent().parent().find('.cataloguePrice').val()
+            if (priceVal && num) {
+                $(this).parent().parent().find('.allPrice').val((num * priceVal).toFixed(2))
+            }
+            if (cateVal && num) {
+                $(this).parent().parent().find('.catalogueAllPrice').val((num * cateVal).toFixed(2))
+            }
+        })
+        $('.productTable .cataloguePrice').on('input', function () {
+            let val = $(this).val()
+            $(this).parent().parent().find('.price').val(val)
+            let quantity = $(this).parent().parent().find('.quantity').val()
+            if (quantity && val)
+                $(this).parent().parent().find('.catalogueAllPrice').val((val * quantity).toFixed(2))
+        })
+        $('.productTable .guidanceDiscount').on('input', function () {
+            let val = $(this).val()
+            let cataloguePrice = $(this).parent().parent().find('.cataloguePrice').val()
+            $(this).parent().parent().find('.discount').val(val)
+            $(this).parent().parent().find('.price').val((cataloguePrice * val).toFixed(2))
+            let price = $(this).parent().parent().find('.price').val()
+            let quantity = $(this).parent().parent().find('.quantity').val()
+            if (price && quantity) {
+                $(this).parent().parent().find('.allPrice').val((price * quantity).toFixed(2))
+            }
+        })
+        $('.productTable .discount').on('input', function () {
+            let discount = $(this).val()
+            let val = $(this).parent().parent().find('.cataloguePrice').val()
+            $(this).parent().parent().find('.price').val((val * discount).toFixed(2))
+        })
+        $('.productTable .price').change('input', function () {
+            let val = $(this).val()
+            let num = $(this).parent().parent().find('.quantity').val()
+            $(this).parent().parent().find('.allPrice').val((val * num).toFixed(2))
+        })
+    }
+
+    function changeBg() {
+        if ($('[name="bgProperty"]').val() != 'YYS') {
+            let datas = [[${@dict.getType('bg_hysy')}]]
+            let str = ``
+            datas.forEach((ele) => {
+                str += `<option value="${ele.dictValue}">${ele.dictLabel}</option> `
+            })
+            $('#industryTypeBox').html(`
+                 <select name="industryType" class="form-control" readonly required>
+                 <option value="">请选择行业</option>
+                 ${str}
+                 </select>
+            `)
+        } else {
+            let datas = [[${@dict.getType('bg_yys')}]]
+            let str = ``
+            datas.forEach((ele) => {
+                str += `<option value="${ele.dictValue}">${ele.dictLabel}</option> `
+            })
+            $('#industryTypeBox').html(`
+                  <select name="industryType" class="form-control" required readonly>
+                 <option value="">请选择行业</option>
+                 ${str}
+                 </select>
+            `)
+        }
+    }
+
+    function downloadTem() {
+        var xhr = new XMLHttpRequest(); // 创建XMLHttpRequest对象
+        if (!$('[name="orderChannel"]').val()) {
+            $.modal.alertWarning("请先选择下单通路");
+            return
+        }
+        if ($('[name="orderChannel"]').val() == 1) {
+            window.location.href = prefix + "/contract/export?fileName=文件111.xlsx"
+        } else {
+            window.location.href = prefix + "/contract/export?fileName=文件222.xlsx"
+        }
+
+        $.modal.closeLoading()
+    }
+
+    document.getElementById('uploadInput').addEventListener('change', function (event) {
+        const file = event.target.files[0];
+        let data = new FormData()
+        data.append('file', file)
+        data.append('orderId', $('[name="id"]').val())
+
+        var xhr = new XMLHttpRequest(); // 创建XMLHttpRequest对象
+        xhr.open('POST', prefix + '/importContractData', true); // 设置请求类型和URL
+        // 当请求完成时执行的回调函数
+        xhr.onload = function (res) {
+            let data = JSON.parse(res.currentTarget.response)
+            if (data.code === 0) {
+                $.modal.msgSuccess('导入成功');
+                addFile(data.data)
+            } else {
+                $.modal.msgError(data.msg || '导入失败');
+            }
+            $('#uploadInput').val('')
+
+        };
+
+        // 当请求发生错误时执行的回调函数
+        xhr.onerror = function () {
+            console.log('上传过程中发生错误');
+        };
+        // // 发送数据到服务器
+        xhr.send(data);
+    });
+
+    function importList() {
+        $('#uploadInput').click()
+    }
+
+    function addFile(data) {
+        let length = $('#fileBox tbody').find('tr').length
+        let filterArr = ['fileName', 'createBy', 'uploadTime']
+        let keys = Object.keys(data).filter((ele) => filterArr.indexOf(ele) < 0)
+        let tr = $(`
+<tr>
+<td>
+${
+            keys.map((ele) => {
+                return `<input type="hidden" name="contractFileList[${length}].${ele}" value="${data[ele] || ''}">`
+            }).join('')
+        }
+<input value="${data.fileName || ''}" name="contractFileList[${length}].fileName" readonly class="form-control"></td>
+<td><input value="${data.createByName || ''}" name="contractFileList[${length}].createBy" readonly class="form-control"></td>
+<td><input value="${data.uploadTime || ''}" name="contractFileList[${length}].uploadTime" readonly class="form-control"  ></td>
+<td><span style="cursor:pointer;color: #1686d8;margin-right: 5px;" onclick="preview('${data.filePath}')">预览</span><span style="cursor:pointer;color: #1686d8;margin-right: 5px;" onclick="downFile('${data.filePath}')">下载</span><span style="cursor:pointer;color: #dd242a" class="delfile">删除</span></td>
+</tr>`)
+        $('#fileBox tbody').append(tr)
+        $('.delfile').on('click', function () {
+            $(this).parent().parent().remove()
+        })
+
+    }
+
+    function initProjectList() {
+        let id = $('[name="projectId"]').val()
+        $.operate.get(ctx + `sip/project/query/${id}`, function (res) {
+            $('#productTable tbody').html('')
+            $('#productTable2 tbody').html('')
+            $('#productTable3 tbody').html('')
+            res.data.softwareProjectProductInfoList ? res.data.softwareProjectProductInfoList.forEach((ele) => {
+                addProduct(ele)
+            }) : ''
+            res.data.hardwareProjectProductInfoList ? res.data.hardwareProjectProductInfoList.forEach((ele) => {
+                addProduct2(ele)
+            }) : ''
+            res.data.maintenanceProjectProductInfoList ? res.data.maintenanceProjectProductInfoList.forEach((ele) => {
+                addProduct3(ele)
+            }) : ''
+        })
+    }
+
+    function downFile(filePath) {
+        $.operate.get(prefix + `/file/download?filePath=${filePath}`, function (res) {
+            window.location.href = res.data
+        })
+    }
+
+    function preview(filePath) {
+        $.operate.get(prefix + `/file/download?filePath=${filePath}`, function (res) {
+            window.open(res.data)
+        })
+    }
+</script>
 </body>
 </html>
\ No newline at end of file