| 
					
				 | 
			
			
				@@ -0,0 +1,185 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+'use strict'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author LanJianRong 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @date 2020/11/13 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @version 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const tenderTree = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let parentId = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 查询方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function findNode (key, value, arr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (const a of arr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (a[key] && a[key] === value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return a; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 初始化TenderTree数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function initTenderTree () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const levelCategory = category.filter(function (c) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return c.level && c.level > 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function findCategoryNode(cid, value, array) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (const a of array) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (a.cid === cid && a.vid === value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return a; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function getCategoryNode(category, value, parent, i = null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const array = parent ?  parent.children : tenderTree; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let cate = findCategoryNode(category.id, value, array); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!cate) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const cateValue = findNode('id', value, category.value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!cateValue) return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cate = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                cid: category.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                vid: value, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                name: cateValue.value, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                children: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                level: i ? i : category.level, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sort_id: ++parentId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sort: cateValue.sort, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            array.push(cate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return cate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function loadTenderCategory (tender) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let tenderCategory = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (const [index,lc] of levelCategory.entries()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const tenderCate = findNode('cid', lc.id, tender.category); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (tenderCate) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tenderCategory = getCategoryNode(lc, tenderCate.value, tenderCategory); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (index === 0 && tender.category) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (const [i,c] of tender.category.entries()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        const cate = findNode('id', c.cid, category); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        tenderCategory = getCategoryNode(cate, c.value, tenderCategory, i+1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return tenderCategory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return tenderCategory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function calculateTender(tender) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (tender.lastStage) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tender.gather_tp = ZhCalc.add(tender.lastStage.contract_tp, tender.lastStage.qc_tp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tender.end_contract_tp = ZhCalc.add(tender.lastStage.pre_contract_tp, tender.lastStage.contract_tp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tender.end_qc_tp = ZhCalc.add(tender.lastStage.pre_qc_tp, tender.lastStage.qc_tp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tender.end_gather_tp = ZhCalc.add(tender.end_contract_tp, tender.end_qc_tp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tender.pre_gather_tp = ZhCalc.add(tender.lastStage.pre_contract_tp, tender.lastStage.pre_qc_tp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tender.yf_tp = ZhCalc.add(tender.lastStage.yf_tp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tender.end_yf_tp = ZhCalc.add(tender.lastStage.pre_yf_tp, tender.yf_tp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tenderTree.splice(0, tenderTree.length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (const t of tenders) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calculateTender(t); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        t.valid = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        delete t.level; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (t.category && levelCategory.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const parent = loadTenderCategory(t); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (parent) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                t.level = parent.level + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                parent.children.push(t); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tenderTree.push(t); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tenderTree.push(t); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function recursiveGetTenderNodeHtml (node, arr, pid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // console.log(node, tender) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (node.id === tender.id) return '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (node.user_id && parseInt(node.user_id) !== cur_uid) return '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const html = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    html.push('<tr pid="' + pid + '">'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    html.push('<td class="in-' + node.level + '">'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (node.cid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push('<i class="fa fa-folder-o"></i> ', node.name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push('<span class="text-muted mr-2">'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push(arr.indexOf(node) === arr.length - 1 ? '└' : '├'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push('</span>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //html.push('<a href="/tender/' + node.id + '">', node[c.field], '</a>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push('<a href="javascript: void(0)" id="' + node.id + '">', node.name, '</a>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    html.push('</td>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 创建人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    html.push('<td>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!node.cid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // html.push('<input data-tid="'+ node.id +'" type="radio"> '+ (node.copy_id === tender.copy_id ? 'checked' : '') + '/>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push(`<input data-tid=${node.id} type="radio" ${node.id === tender.copy_id ? 'checked' : ''}>`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    html.push('</td>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    html.push('</tr>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (node.children) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (const c of node.children) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            html.push(recursiveGetTenderNodeHtml(c, node.children, node.sort_id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return html.join(''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 根据TenderTree数据获取Html代码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function getTenderTreeHtml () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (tenderTree.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const html = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push('<table class="table table-hover table-bordered">'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push('<thead>', '<tr>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push('<th>名称</th>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push('<th width="40">选择</th>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push('</tr>', '</thead>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        parentId = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (const t of tenderTree) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            html.push(recursiveGetTenderNodeHtml(t, tenderTree, '')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        html.push('</table>'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return html.join(''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return EmptyTenderHtml.join(''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$(document).ready(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    initTenderTree(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const html = getTenderTreeHtml(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $('#copyModalContent').html(html); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // $('#copyBtn').click(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     const html = getTenderTreeHtml(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     $('#copyModalContent').html(html); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     $('#bd-set-8').modal('show'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // $('#copyModalContent').on('click', 'input[type="radio"]', function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     $('#copyModalContent tbody').children().each(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         $(this).find('input:radio').prop("checked", false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     $(this).prop("checked", true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // $('#setting-custom').on('click', '.custom-checkbox', function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     const isChecked = $(this).find('input').prop("checked"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     $(this).find('input').prop("checked", !isChecked); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // $('#copy_comfirm_btn').click(function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     const type = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     $('#setting-custom').find('input:checked').each(function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         type.push($(this).data('type')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     if (!type.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         return toastr.error('请勾选需要拷贝的属性') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     const id = $('#copyModalContent').find('input:checked').data('tid'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     if (id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         postData(window.location.pathname + '/copy-setting', { id, type }, function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //             window.location.reload() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}) 
			 |