您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
重庆网上房地产-房源信息查询助手(仅供个人学习研究使用,任何公司或个人不得利用其从事违法经营活动)
// ==UserScript== // @name 重庆网上房地产-房源信息查询助手 // @name:en CQ315House - Housing Info Query Assistant // @name:zh 重庆网上房地产-房源信息查询助手 // @namespace [email protected] // @version 0.1.9 // @description 重庆网上房地产-房源信息查询助手(仅供个人学习研究使用,任何公司或个人不得利用其从事违法经营活动) // @description:en CQ315House - Housing information query assistant // @author Kerry // @match *://*.cq315house.com/HtmlPage/ShowRooms.html* // @match *://218.70.88.119/HtmlPage/ShowRooms.html* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyODAyM2RjZC1jZjM3LTYyNDAtYTdjOC1hNTdlNjc0MWYxYzciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjVBQTk2NTdCNEFBMTFFN0E2QzNFNDBFQUJDODVBNjgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjVBQTk2NTZCNEFBMTFFN0E2QzNFNDBFQUJDODVBNjgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTU0Y2E5ZjctZGNlOS0zMDRmLWE1YjAtZGY1ZGI1YTM2YmFjIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6MmI5ZjY0N2EtNzViMi0xMWU3LTkzN2QtYzZiYTEwYjI0Y2VlIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+5kXnggAABLBJREFUeNrsm39oVlUYx9/pVGyZMGVhitofooaIrjBXSyV/QP5MmbJwGmItckIalflr4kjRIoomlUNR0CidpCIuN5UITeYP1kqEmq2NNNZWuaWzEvWd34d9Fw+H9937vtu9772vOwc+3N1z7z33PN/7nPOc87wsqaWlJdCVS5IVwApgBbACOFnSpn0SzW2jQRF4HPwMVoBSJ97fUPZqTPd380D0meBb8CRIBiNACVjuhQfEW4DXwGHwYIh+FIJtoPv9KIAY9TH40HjnHnBLneeBI+Ch+0mAvnRxPTj/A9lgMXgW/KGuPcchMsRoZzDYrXjBic4lu2z8UHAUPKbnKTAHlPP8DOcDuW8k60aBs7zvLOvSwYuGsJ/72QMy2Hlt/CUaW27cW8P7j6u6h8HXYEG4CObnIZDNzqepOglzT4HaMM/8DaaDT1Vdb7APrE2IOQBrAPkq6+mavdQlmQBngOsRmrjDueJ1EFT17zCC+FcAGN+Ls3qBqg6y4zK7342huQ/A8+CmqpvkWwFgfH8cToKFqroZzAIfdbBZCYfPgKu+DoMwXlZy58DTqvoKz0s62fx3YByoCHGtv+cCwPgpnNEfVdXn2ekfHPpIdfSEgyGizFLPBIDxuTh8xXjcVg5wrP7usKf+A7LAu0bfd4CtnbEjuQOGy7J2C3jDuCR1a4Bb+2uZUFeBKrBd7RneAsNADoVyzwNgfAoOXxrG3wZLsA1dDeKRXNgJpoImVTcXnAIDXBMAxg/kS2ar6mvSGRi+O867SllkjWcuIaCWyufQz7GOC4BG0zmp6cbFFTNg/DceJXN+oginVN0gmZTR31mOCYDG5vAlqar6expf5XFG6y8gkWi/qusJDqHfK6NpoN2UGBp5k5ObKZS4/Ykwz3ghxFBuqMwik+Vy9PVOTB4AI3qAIoadbmHW7PEs/cA0kMkNUrTlFVmMwZa+sQ6BveBldf6vh26ew3VFKYdiNRgexdD431uZa4hJgEKVqpKXT/BQAIk+m5k52slQtyLCM4vARbV+KIhJAIyZ02ykUhIYOL/goQDvgw0MfYWsi5QzrONwkZXq2+h/WcxRAA8V4/AEjr96PNPr+WYej8ciPYR+S+5hJo7vdXgpjIej3sNzSzxKVdUSSW3N50xdLyEKXFb3yY8jk+nav3HTUx3iFbIAW0dP+CyaPqH/Qcf3Au2UTGPHthH8SRfuqeo3BVqzwcXMFOUa7Wzm9S8M42WjdYHL3qBTnXYzKzzbWDm2lR7cxclXfynM9SLO+o3K+NP8u9mXKbEQRYz/BeQHWvP4uqTQ+AbO0EXGV+0TaP0JTcouijKO2aEmeo7vPaCRSYsGnkt+L8/YRU4EP/JcfhzR2d/RPEpW+AGj7YpEEOCwMr5t5tYClCnjA1ysrA2R8lrmZohxcwhcMc7NLJG5dq839ynxiLFuChCMsH+4G+H+QKILkBDFCmAFsAJYAbp0cWwhhJ2X7PKS2skJVkaI7bXxiv3WA6wAVgArgBXACtC5MJiFcDfGR3akxluAPJ9/2KAbQ6AqQbxaftGqccMDJH0ty7xHfGy8JEzzsSq9Ee0D9l9mrABWACuAFcAKYAWwAnTZck+AAQAW0kT67b3FTwAAAABJRU5ErkJggg== // @require https://cdn.staticfile.org/xlsx/0.18.5/xlsx.full.min.js // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_log // @grant GM_xmlhttpRequest // @license MIT // ==/UserScript== /*jshint esversion: 6 */ (function () { 'use strict'; var websiteHost = window.location.host;//URL的主机部分:www.home.com var windowHref = window.location.href; //整个URL字符串(查询参数部分) var currentUrl = window.location.origin + window.location.pathname; var currentPath = window.location.pathname;//URL的路径部分(即文件地址) const RouteDataParas = { roomListPath: '/HtmlPage/ShowRooms.html', roomInfoWebSrvUrl: '../WebService/Handler.ashx?ac=fwxx1&fid=',//返回户室信息img projInfoWebSrvUrl: '../WebService/Handler.ashx?ac=xmxx&text=',//返回项目信息img projNameWebSrvUrl: '../WebService/Handler.ashx?ac=xmmc&text=',//返回项目名称img webSrvUrl: '../WebService/WebFormService.aspx', buildInfoXhr: '/GetBuildingInfo', //获取楼盘信息 {"buildingid":""} roomListXhr: '/GetRoomJson', //获取楼盘户室详细信息 {"buildingid":""} roomInfoXhr: '/GetRoomInfo', //获取指定户室Id的户室详细信息{"roomId":""} }; const displayDataTypes = [ {Key:'ROOMNO', Value:'房号'}, {Key:'BAREA', Value:'建筑面积(㎡)'}, {Key:'IAREA', Value:'套内面积(㎡)'}, {Key:'NSJMJG', Value:'建面单价(元/㎡)'}, {Key:'NSJG', Value:'套内单价(元/㎡)'}, {Key:'TOTALPRC', Value:'总价(万元)'}, {Key:'ROOMSTATUS', Value:'房屋状态'} ]; var SELECTED_DATA_TYPE=displayDataTypes[0].Key; var vfObj = { totalCap: '房源共计:', unitCap: ' 套', utitlCap: '单元', rrmnoCap: '房 号:', rpurpCap: '用 途:', rstruCap: '结 构:', rTypeCap: '户 型:', rbareCap: '建筑面积:', riareCap: '套内面积:', runitCap: ' ㎡', ipricCap: '套内单价:', bpricCap: '建面单价:', punitCap: ' 元/㎡', tpricCap: '房屋总价:', tunitCap: ' 万元', tbId: '_mybuilding' }; var statsObj = { totalCnt: 0, //楼幢房源总数量 sellCnt: 0, //已销售(含已网签/或已交易完成不可售)数量 subsCnt: 0, //已认购数量 allowCnt: 0, //可销售数量 rbareMin: 0, //建面Min rbareMax: 0, //建面Max riareMin: 0, //套内Min riareMax: 0, //套内Max ipricMin: 0, //套内单价Min ipricMax: 0, //套内单价Max bpricMin: 0, //建面单价Min bpricMax: 0, //建面单价Max tpricMin: 0, //总价Min tpricMax: 0, //总价Max apiMsg: '' //[GetRoomInfo]API返回的错误信息 }; //因项目信息img不显示需特别处理的个别楼盘的楼幢ID var resetProjectList = [ { builIds: [ '_Nvdyi0aqwdrr4_vEE1yEA','zNcayCnXbHNbZFjuqABcmQ','osf07q_u1SlnW2mnzzGvUA', 'DXKShHLSXjcfVfRtR58JxQ','BMs2W/DG9tT0r87oOEcYgg','NpUcbqvhs_ww3ZtTIbA91g', 'vGyPYgMczivXTpUVXkfrKQ','4ie6/iv0q5WuI3l2lXRkBw', 'ILq22rFreTB0yhSAJX3p6Q','NpgsupKMSejJ3rnXbNE58A', ], emptyTxt: '和光尘樾 ', }, { builIds: [ 'H85THYxtxAPc0_IJxfNfVg','dyEUO5of8VbFj_VWfAtYyA','_cn7Zrwf1VoQ57_h9BMCSQ', 'X65zOBuwW7e4PPahVwf_cw','ooWKOieb/0QPEQUB_QHfSg','Et2mdSVordxUBVz56TPzyQ', '_iz10xgVDfQScg18sFJGnw','9nzRVN1z0Dl_coiB93SJhQ','0NvQtPMid86oWa4qysCj1Q', 'ZNbLVyGZ1/XgjmaOSccJtA','sfJ7Me/eqY8MTuOk_kOEmw','HQRUsNsjeUld/Gd_PcSUcQ', 'iexozwEMpb3jRZzLfoO00w','AdcGyoSzNKNQnF/7U9uTIA','ylFKWS5jiE54R0wXtCxzaQ', 'LfR1GSc93ds44LsEP5Bw7w','Vwr/_Y2DptBHndpRXKMYVw','ow5QDChnWAKQS_9VR_kteQ', 'ICAH7OA9N56h4FsqmJ2hvg', ], emptyTxt: ' 中粮·天悦壹号', }, ]; let cssText = ` .spanRoomUse,.spanRoomStru,.spanRoomType,.spanRoombArea, .spanRoomiArea,.spanKfsNsjg,.spanKfsNsjmjg,.spanRoomState, .spanZxsp,.spanRoomNo,.spanRoomStatus,.spanRoomTotalPrice{display:none;} .tbtop1{cursor:pointer;} .tbtop2-td1{vertical-align:bottom;font-weight:600;} .tbtop2-td2{padding-left:20px;vertical-align:bottom;} .tbtop2-td3{padding-left:20px;vertical-align:top;} .div-open-title{margin-left:5px;margin-top:5px;height:40px;line-height:40px;cursor:pointer;padding-left:10px;} .project-name{margin-bottom:-5px;} .fold-project-name{padding:0 20px;} .div-lpsm{padding:10px 0 0 10px;} .div-datatype{margin:-1px 0 10px 5px;padding-left:10px;text-align:left;height:40px;line-height:40px;} .radio-inline:not(:first-child){margin-left:20px;} .radio-item{vertical-align:middle;margin-top:-2px;} .btn-excel:first-of-type{margin-left:30px;} .btn-excel:not(:first-of-type){margin-left:10px;} .btn-excel{height:25px;cursor:pointer;background-color:#fff;border:1px solid #fff;border-radius:4px;} .btn-excel:hover{background-color:#eee;border:1px solid #999;} .bg-orange{background-color:#ffa500!important;}/*[认购]状态橙色背景*/ .color-black{color:#000;} .legend{display:inline-block;width:50px;margin-right:15px;} .legend-allow{background-color:#00ff00;} .legend-sell{background-color:#ff00ff;} .legend-subs{background-color:#ffa500;} .legend-unallow{background-color:#ffff00;} .fold-legend{margin-left:10px;padding:2px 10px;} ` GM_addStyle(cssText); // cq315house[楼盘表]解析开始 var cq315houseAnalysis={}; //仅解析[楼盘表]页面:/HtmlPage/ShowRooms.html cq315houseAnalysis.judgeWebUrl=function(){ if (currentUrl.indexOf(RouteDataParas.roomListPath)!=-1){ return true; } return false; }; //[楼盘表]页面相关元素初始化处理: // 1.增加[spanRoomNo]元素记录各cell的房屋房号信息 // 2.增加[spanRoomStatus]元素记录各cell的房屋状态信息 // 3.增加[spanRoomTotalPrice]元素记录各cell的房屋总价信息 // 4.房号cell中a标签绑定[data-roomid]属性 // 5.房号cell中a标签绑定[data-unitno]属性 // 6.房号cell中a标签绑定[data-floorno]属性 // 7.房号cell中a标签重置onclick事件 // 8.头部增加相关统计信息元素 cq315houseAnalysis.initShowRoomsPage=function(){ //各房号cell设置 let tb = document.getElementById(vfObj.tbId); if (tb == undefined) return; let tbRows = tb.tBodies[0].rows; let roomStatus = 'None'; for (let i = tbRows.length - 1; i >= 0; i--) { let tbCells = tbRows[i].cells; let floorNo = tbRows[i].cells[1].getAttribute('value');//名义层 for (let x = 0, len = tbCells.length; x < len; x++) { let objt = tbCells[x].getAttribute('objt');//房源Cell if (objt != 'tdclass') continue; //objt='tdclass'的cell是房源 //房号信息span元素设置(新增) if (!tbCells[x].getElementsByClassName('spanRoomNo')[0]){ let spanRoomNo = document.createElement('span'); spanRoomNo.className='spanRoomNo'; spanRoomNo.innerText = `房号:${tbCells[x].getElementsByTagName("a")[0].innerText.trim()}`; tbCells[x].appendChild(spanRoomNo); } //房屋状态信息span元素设置(新增) if (!tbCells[x].getElementsByClassName('spanRoomStatus')[0]){ let spanRoomStatus = document.createElement('span'); spanRoomStatus.className='spanRoomStatus'; spanRoomStatus.innerText = `房屋状态:${roomStatus}`; tbCells[x].appendChild(spanRoomStatus); } //房屋总价信息span元素设置(新增) if (!tbCells[x].getElementsByClassName('spanRoomTotalPrice')[0]){ let spanRoomTotalPrice = document.createElement('span'); spanRoomTotalPrice.className='spanRoomTotalPrice'; let roomIarea = tbCells[x].getElementsByClassName('spanRoomiArea')[0].innerText.split(':')[1].toString().trim();//套内面积 let roomNsjg = tbCells[x].getElementsByClassName('spanKfsNsjg')[0].innerText.split(':')[1].toString().trim();//套内单价 let totalPrice = (Math.floor(((roomIarea * 1) * (roomNsjg * 1)/10000) * 100) / 100).toFixed(2); spanRoomTotalPrice.innerText = `房屋总价:${totalPrice}`; tbCells[x].appendChild(spanRoomTotalPrice); } //旧有的[状态]span元素初始化设置 tbCells[x].getElementsByClassName('spanRoomState')[0].innerText = '详细状态:None'; //旧有建面单价/套内单价信息span元素设置(格式化2位小数) let roomNsjg = tbCells[x].getElementsByClassName('spanKfsNsjg')[0].innerText.split(':')[1].toString().trim();//套内单价 let roomNsjmjg = tbCells[x].getElementsByClassName('spanKfsNsjmjg')[0].innerText.split(':')[1].toString().trim();//建面单价 tbCells[x].getElementsByClassName('spanKfsNsjg')[0].innerText = `套内拟售价格:${parseFloat(roomNsjg).toFixed(2)}`; tbCells[x].getElementsByClassName('spanKfsNsjmjg')[0].innerText = `建面拟售价格:${parseFloat(roomNsjmjg).toFixed(2)}`; //房号cell中alink重置 let onclickValueParas = tbCells[x].getElementsByTagName('input')[0].getAttributeNode('onclick').nodeValue.match(/\{.*?\}/g);//获取input中onclick的传参 let unitNo = onclickValueParas[0].match(/(?<=uid:\s).*?(?=,)/gi); //获取传参中的(uid)单元No let roomId = tbCells[x].getElementsByTagName('input')[0].value;//房号ID,记录在checkbox的value中 let curAlink = tbCells[x].getElementsByTagName('a')[0]; curAlink.setAttribute('data-roomid',roomId);//把房号ID绑定给自定义data-roomid属性 curAlink.setAttribute('data-unitno',unitNo);//把单元No绑定给自定义data-unitno属性 curAlink.setAttribute('data-floorno',floorNo);//把名义层No绑定给自定义data-floorno属性 curAlink.className = 'color-black'; curAlink.removeAttribute('onclick');//移除原始onclick事件 curAlink.onclick=function(){cq315houseAnalysis.ShowRoomInfoByPass(this);};//alink重置onclick事件 curAlink.removeAttribute('onmouseover');//移除原始onmouseover事件 //初始化Title内容(和cq315原始保持一致) curAlink.title = '用 途:' + tbCells[x].getElementsByClassName('spanRoomUse')[0].innerText.split(':')[1].toString().trim() + '\n结 构:' + tbCells[x].getElementsByClassName('spanRoomStru')[0].innerText.split(':')[1].toString().trim() + '\n户 型:' + tbCells[x].getElementsByClassName('spanRoomType')[0].innerText.split(':')[1].toString().trim() + '\n建筑面积:' + tbCells[x].getElementsByClassName('spanRoombArea')[0].innerText.split(':')[1].toString().trim() + '\n套内面积:' + tbCells[x].getElementsByClassName('spanRoomiArea')[0].innerText.split(':')[1].toString().trim() + '\n<a href=\"javascript:void(0);\">户室信息刷新</a>'; curAlink.onmouseover = function() {cq315houseAnalysis.titleMouseOver(this);}//重新绑定onmouseover事件 curAlink.onmouseout = function() {cq315houseAnalysis.titleMouseOut(this);}//重新绑定onmouseout事件 } } // 头部增加相关统计信息元素 // 1.1.[楼幢房源总数]元素设置 let divTotalCntText = document.createElement('div'); divTotalCntText.innerHTML=`【${getQueryString('block')}】${vfObj.totalCap}<span id="spanTotalCnt">${statsObj.totalCnt}</span>${vfObj.unitCap}`; let tbTop2FirstRow = document.getElementById('tbTop2').tBodies[0].rows[0]; if (!tbTop2FirstRow.cells[1]) { let objTd = document.createElement('td'); objTd.className = 'tbtop2-td1'; objTd.appendChild(divTotalCntText); tbTop2FirstRow.appendChild(objTd); } else { tbTop2FirstRow.cells[1].innerHTML = ''; tbTop2FirstRow.cells[1].appendChild(divTotalCntText); } // 1.2.楼幢单价,面积等区间数据元素设置 let divDataRangeText = document.createElement('div'); let bpricRange=`${vfObj.bpricCap}<span id="spanBpricMin">${statsObj.bpricMin}</span> ~ <span id="spanBpricMax">${statsObj.bpricMax}</span> ${vfObj.punitCap}`; let ipricRange=`${vfObj.ipricCap}<span id="spanIpricMin">${statsObj.ipricMin}</span> ~ <span id="spanIpricMax">${statsObj.ipricMax}</span> ${vfObj.punitCap}`; divDataRangeText.innerHTML = `${bpricRange}<br/>${ipricRange}`; if (!tbTop2FirstRow.cells[2]) { let objTd = document.createElement('td'); objTd.className = 'tbtop2-td2'; objTd.appendChild(divDataRangeText); tbTop2FirstRow.appendChild(objTd); } else { tbTop2FirstRow.cells[2].innerHTML = ''; tbTop2FirstRow.cells[2].appendChild(divDataRangeText); } // 1.3.暂定显示API返回的错误信息 let spanApiMsg = document.createElement('span'); spanApiMsg.id='spanApiMsg'; if (!tbTop2FirstRow.cells[3]) { let objTd = document.createElement('td'); objTd.className = 'tbtop2-td3'; objTd.appendChild(spanApiMsg); tbTop2FirstRow.appendChild(objTd); } else { tbTop2FirstRow.cells[3].innerHTML = ''; tbTop2FirstRow.cells[3].appendChild(spanApiMsg); } // 2.[图例]table重置: 追加[认购]状态,追加各状态下的房源合计 let tbTuliFirstRow = document.getElementById('tbTuli').tBodies[0].rows[0]; tbTuliFirstRow.cells.innerHTML=''; tbTuliFirstRow.cells[1].innerHTML=`<span class="legend legend-allow"> </span>可销售: <span id="spanAllowCnt">${statsObj.allowCnt}</span>${vfObj.unitCap}`; tbTuliFirstRow.cells[2].innerHTML=`<span class="legend legend-sell"> </span>已销售: <span id="spanSellCnt">${statsObj.sellCnt}</span>${vfObj.unitCap}`; tbTuliFirstRow.cells[3].innerHTML=`<span class="legend legend-subs"> </span>已认购: <span id="spanSubsCnt">${statsObj.subsCnt}</span>${vfObj.unitCap}`; if (!tbTuliFirstRow.cells[4]) { let tdPlus = document.createElement('td'); tbTuliFirstRow.appendChild(tdPlus); } tbTuliFirstRow.cells[4].innerHTML='<span class="legend legend-unallow"> </span>不可售'; // 3.[收起]div标签重置 let tbTop1FirstRow = document.getElementById('tbTop1').tBodies[0].rows[0]; tbTop1FirstRow.className = 'tbtop1'; tbTop1FirstRow.onclick=function(){ document.getElementById('titlesPan').style.display='none'; document.getElementById('OpenTitleSpanDiv').style.display='block'; }; // 4.[展开]div标签重置 let divOpenTitle = document.getElementById('OpenTitleSpanDiv'); let spanFoldText=document.createElement('span'); let spanFoldProjectName=document.createElement('span'); let imgProjectName=document.createElement('img'); let spanFoldCntInfo1=document.createElement('span'); let spanFoldCntInfo2=document.createElement('span'); let spanFoldTotalCnt=document.createElement('span'); let spanFoldSellCnt=document.createElement('span'); let spanFoldSubsCnt=document.createElement('span'); let spanFoldAllowCnt=document.createElement('span'); spanFoldTotalCnt.id='spanFoldTotalCnt'; spanFoldAllowCnt.id='spanFoldAllowCnt'; spanFoldSellCnt.id='spanFoldSellCnt'; spanFoldSubsCnt.id='spanFoldSubsCnt'; spanFoldAllowCnt.className='fold-legend legend-allow'; spanFoldSellCnt.className='fold-legend legend-sell'; spanFoldSubsCnt.className='fold-legend legend-subs'; spanFoldAllowCnt.title='可销售'; spanFoldSellCnt.title='已销售'; spanFoldSubsCnt.title='已认购'; divOpenTitle.innerHTML=''; divOpenTitle.classList.add('div-open-title'); divOpenTitle.removeAttribute('style'); spanFoldText.innerText='展开'; imgProjectName.setAttribute('src',document.getElementById('projectName_img').getAttribute('src')); imgProjectName.className = 'project-name'; spanFoldProjectName.appendChild(imgProjectName); spanFoldProjectName.className = 'fold-project-name'; spanFoldCntInfo1.innerText=`【${getQueryString('block')}】${vfObj.totalCap}`; spanFoldCntInfo2.innerText=`${vfObj.unitCap}`; spanFoldTotalCnt.innerText=`${statsObj.totalCnt}`; divOpenTitle.appendChild(spanFoldText); divOpenTitle.appendChild(spanFoldProjectName); divOpenTitle.appendChild(spanFoldCntInfo1); divOpenTitle.appendChild(spanFoldTotalCnt); divOpenTitle.appendChild(spanFoldCntInfo2); divOpenTitle.appendChild(spanFoldAllowCnt); divOpenTitle.appendChild(spanFoldSellCnt); divOpenTitle.appendChild(spanFoldSubsCnt); divOpenTitle.onclick=function(){ document.getElementById('titlesPan').style.display='block'; document.getElementById('OpenTitleSpanDiv').style.display='none'; }; divOpenTitle.click(); //[楼盘说明]div标签CSS重置 document.getElementById('lpsm').className = 'div-lpsm'; }; /** * 鼠标悬停显示TITLE * @params obj 当前须生成悬停的标签 */ cq315houseAnalysis.titleMouseOver=function(obj) { //无TITLE悬停,直接返回 if (typeof obj.title == 'undefined' || obj.title == '') return false; //不存在title_show标签则自动新建 let titleShow = document.getElementById("title_show"); if (titleShow == null) { titleShow = document.createElement("div"); //新建Element document.getElementsByTagName('body')[0].appendChild(titleShow); //加入body中 let attrId = document.createAttribute('id'); //新建Element的id属性 attrId.nodeValue = 'title_show'; //为id属性赋值 titleShow.setAttributeNode(attrId); //为Element设置id属性 let attrStyle = document.createAttribute('style'); //新建Element的style属性 attrStyle.nodeValue = 'position:absolute;' //绝对定位 + 'border:solid 1px #999; background:#fff;' //边框、背景颜色 + 'border-radius:2px;box-shadow:0 0 2px #999;' //圆角、阴影 + 'line-height:18px;' //行间距 + 'font-size:12px; padding:2px 5px;' //字体大小、内间距 + 'text-align:left;'//左对齐 + 'white-space: pre;';//保持空格及折行 try { titleShow.setAttributeNode(attrStyle); //为Element设置style属性 } catch (e) { //IE Fix titleShow.style.position = 'absolute'; titleShow.style.border = 'solid 1px #999'; titleShow.style.background = '#fff'; titleShow.style.lineHeight = '18px'; titleShow.style.fontSize = '12px'; titleShow.style.padding = '2px 5px'; titleShow.style.textAlign = 'left'; titleShow.style.whiteSpace = 'pre'; } } //存储TITLE内容并清空原TITLE document.titleValue = obj.title; obj.title = ''; //在title_show中显示TITEL内容,模拟TITLE悬停效果 titleShow.innerHTML = document.titleValue; //针对批量获取楼盘表户室信息失败的房号 //titleShow里绑定a链接标签,用户自行点击链接刷新当前房号户室信息 let objAlink = titleShow.getElementsByTagName('a')[0]; if (objAlink != undefined) { objAlink.onclick = function () { cq315houseAnalysis.getRoomStatus(obj.parentNode); }; } //显示悬停效果DIV titleShow.style.display = 'block'; //根据鼠标位置设定title_show标签悬停位置 let e = window.event || arguments.callee.caller.arguments[0]; let clientx = e.clientX; let clienty = e.clientY; let pagex = e.pageX; let pagey = e.pageY; if (!pagex) { pagex = clientx + (document.documentElement.scrollLeft || document.body.scrollLeft); } if (!pagey) { pagey = clienty + (document.documentElement.scrollTop || document.body.scrollTop); } //最左值为当前鼠标位置 与 body宽度减去悬停效果DIV宽度的最小值,否则将导致右端遮盖 let left = Math.min(pagex, document.body.clientWidth - titleShow.clientWidth); //Top位置设定 let topDown = 15; //下移15px避免遮盖当前标签 let titelHeight = titleShow.offsetHeight;//TITEL div元素的高度 let bodyHeight = Math.max(document.body.clientHeight, document.documentElement.clientHeight);//body可视窗口高度 let minHeight = Math.min(pagey + topDown + titelHeight, bodyHeight); let top = (minHeight >= bodyHeight) ? pagey - topDown - titelHeight : minHeight - titelHeight; // console.log('e.PageY:',pagey,'TitleTop:',top, 'TitleH:',titelHeight, 'BodyH:',bodyHeight, 'BrowserH:',window.innerHeight); titleShow.style.left = left + "px"; //设置title_show在页面中的X轴位置。 titleShow.style.top = top + "px"; //设置title_show在页面中的Y轴位置。 }; /** * 鼠标离开隐藏TITLE * @params obj 当前须生成悬停的标签 */ cq315houseAnalysis.titleMouseOut=function(obj) { let titleShow = document.getElementById("title_show"); //不存在悬停标签则直接返回 if (titleShow == null) return false; //存在悬停标签,则将TITLE内容还原给原[obj]标签 obj.title = document.titleValue; //隐藏悬停标签DIV let e = window.event || arguments.callee.caller.arguments[0];//鼠标、键盘事件 let clientx = e.clientX; let clienty = e.clientY; let pagex = e.pageX; let pagey = e.pageY; if (!pagex) { pagex = clientx + (document.documentElement.scrollLeft || document.body.scrollLeft); } if (!pagey) { pagey = clienty + (document.documentElement.scrollTop || document.body.scrollTop); } let x = pagex; let y = pagey; let divx1 = titleShow.offsetLeft;//左 let divy1 = titleShow.offsetTop; //上 let divx2 = titleShow.offsetLeft + titleShow.offsetWidth;//右 let divy2 = titleShow.offsetTop + titleShow.offsetHeight;//下 if (x < divx1 || x > divx2 || y < divy1 || y > divy2) { titleShow.style.display = "none"; } titleShow.onmouseleave = function () { titleShow.style.display = "none"; }; }; // [楼盘表]页面生成房源显示信息类别的Radio组 cq315houseAnalysis.createRoomDataTypeContentBox=function(){ let targentElement = document.getElementById('DivInfo'); let parent = targentElement.parentNode; if (document.getElementById('datatype-text-box')) { document.getElementById('datatype-text-box').remove(); } let divObj = document.createElement('div'); divObj.id = 'datatype-text-box'; divObj.className = 'modal-content'; divObj.classList.add('div-datatype'); let radios = ''; for (let y = 0, len = displayDataTypes.length; y < len; y++) { let displayDataType = displayDataTypes[y]; radios += '<label class="radio-inline">'; if (y == 0) { radios += `<input type="radio" name="dataTypeRadioOptions" value="${displayDataType.Key}" class="radio-item" checked="true"> ${displayDataType.Value}`; } else { radios += `<input type="radio" name="dataTypeRadioOptions" value="${displayDataType.Key}" class="radio-item"> ${displayDataType.Value}`; } radios += '</label>'; } radios += '<input type="button" name="btnExportExcel" value="导出Excel(简)" class="btn-excel">'; radios += '<input type="button" name="btnExportExcelFull" value="导出Excel(详细)" class="btn-excel">'; divObj.innerHTML = radios; parent.insertBefore(divObj, targentElement.nextSibling); //绑定事件 let objRadio = document.getElementsByName('dataTypeRadioOptions'); for (let i = 0, len = objRadio.length; i < len; i++) { objRadio[i].onchange = function(){cq315houseAnalysis.displaySeleTypeDatas();}; } //绑定导出Excel按钮事件 let objBtn = document.getElementsByName('btnExportExcel')[0]; objBtn.onclick = function(){cq315houseAnalysis.exportExcel();}; let objBtnFull = document.getElementsByName('btnExportExcelFull')[0]; objBtnFull.onclick = function(){cq315houseAnalysis.exportExcelFull();}; }; //用户反映315house个别楼盘项目信息img不显示,单独修正之 cq315houseAnalysis.resetProjectInfoImg=function(){ let emptyTxt = ''; let isResetProjectId = -1; for (let y = 0, len = resetProjectList.length; y < len; y++) { isResetProjectId = resetProjectList[y].builIds.indexOf(getQueryString('buildingid')); if (isResetProjectId > -1){ emptyTxt = resetProjectList[y].emptyTxt; break; } } if (isResetProjectId <= -1) { console.log('Not need to reset project img.'); return; } // let buildId = getQueryString('buildingid'); let ldNoTxt = getQueryString('block'); let buildInfoUrl = `${RouteDataParas.webSrvUrl}${RouteDataParas.buildInfoXhr}`; let payload_data = {'buildingid': buildId}; //参数:楼幢ID let xhr = new XMLHttpRequest(); xhr.open('POST', buildInfoUrl); //异步调用 xhr.setRequestHeader('Accept', 'application/json'); xhr.setRequestHeader('Content-type', 'application/json'); xhr.onload = function (e) { if (xhr.status === 200) { // 返回的json数据结构: {"d":"{\"enterpriseName\":\"\",\"enterpriseOrgCode\":\"\",\"enterpriseDelegate\":\"\",\"projectName\":\"\",\"location\":\"\",\"presaleCert\":\"\"}"} let json = JSON.parse(xhr.responseText); let obj = JSON.parse(json.d); let projectNameText = json.d.match(/(?<=projectName\":\").*?(?=\")/gi); obj.projectName = projectNameText[0].replace(emptyTxt, '');//用户反映个别楼盘不显示项目信息img的修正 obj.ldNo = ldNoTxt || ''; //追加[ldNo]属性(参数) let urlParams = JSON.stringify(obj); urlParams = escape(urlParams); // 项目信息相关img显示刷新 document.getElementById('OpenTitleSpanDiv').getElementsByTagName("span")[1].getElementsByTagName("img")[0].setAttribute('src',`${RouteDataParas.projNameWebSrvUrl}${urlParams}`); document.getElementById('projectName_img').setAttribute('src',`${RouteDataParas.projNameWebSrvUrl}${urlParams}`); document.getElementById('projectInfo_img').setAttribute('src',`${RouteDataParas.projInfoWebSrvUrl}${urlParams}`); } else { console.log('Status Code:', xhr.status, buildId); } }; xhr.onerror = function (e) { console.log('Status Code:', xhr.status, buildId); }; //发送数据 xhr.send(JSON.stringify(payload_data)); }; //重置各房号cell相关信息 cq315houseAnalysis.resetRoomCellsInfo=function(){ let tb = document.getElementById(vfObj.tbId); if (tb == undefined) return; let tbRows = tb.tBodies[0].rows; // 先列后行遍历 - 叠拼类房源统计要注意 statsObj.totalCnt=0; statsObj.sellCnt=0; statsObj.subsCnt=0; statsObj.allowCnt=0; statsObj.apiMsg=''; let tbCellCnt = tb.tBodies[0].rows[0].cells.length; let tbRowsCnt = tb.tBodies[0].rows.length; for (let x = 0; x < tbCellCnt; x++) { for (let i = 0; i < tbRowsCnt; i++) { let tbCell = tbRows[i].cells[x]; let objt = tbCell.getAttribute('objt');//房源Cell if (objt != 'tdclass') {continue; } //objt='tdclass'的cell是房源 //重新通过API获取房屋状态(异步) cq315houseAnalysis.getRoomStatus(tbCell); // 叠拼类房源的判定 let isRowspan = tbCell.getAttribute('rowspan'); if (isRowspan) i = i + isRowspan*1 - 1; //叠拼类房源1套会有多行,防止重复统计 } } }; //API异步获取指定roomid的户室详细信息 cq315houseAnalysis.getRoomStatus = function (pTbCell) { let objRoomStatus = pTbCell.getElementsByClassName('spanRoomStatus')[0]; let objRoomState = pTbCell.getElementsByClassName('spanRoomState')[0]; let roomInfos = { roomId: pTbCell.getElementsByTagName('a')[0].getAttribute('data-roomid'), unitNo: pTbCell.getElementsByTagName('a')[0].getAttribute('data-unitno'),//单元No floorNo: pTbCell.getElementsByTagName('a')[0].getAttribute('data-floorno'),//名义层No roomNo: pTbCell.getElementsByClassName('spanRoomNo')[0].innerText.split(':')[1].toString().trim(),//房号 roomUse: pTbCell.getElementsByClassName('spanRoomUse')[0].innerText.split(':')[1].toString().trim(),//用途 roomStru: pTbCell.getElementsByClassName('spanRoomStru')[0].innerText.split(':')[1].toString().trim(),//结构 roomType: pTbCell.getElementsByClassName('spanRoomType')[0].innerText.split(':')[1].toString().trim(),//户型 roomBarea: pTbCell.getElementsByClassName('spanRoombArea')[0].innerText.split(':')[1].toString().trim(),//建面 roomIarea: pTbCell.getElementsByClassName('spanRoomiArea')[0].innerText.split(':')[1].toString().trim(),//套内 roomNsjg: pTbCell.getElementsByClassName('spanKfsNsjg')[0].innerText.split(':')[1].toString().trim(),//套内单价 roomNsjmjg: pTbCell.getElementsByClassName('spanKfsNsjmjg')[0].innerText.split(':')[1].toString().trim(),//建面单价 roomTotalPrice: pTbCell.getElementsByClassName('spanRoomTotalPrice')[0].innerText.split(':')[1].toString().trim(),//房屋总价 roomStatus: pTbCell.getElementsByClassName('spanRoomStatus')[0].innerText.split(':')[1].toString().trim(),//房屋状态 roomState: pTbCell.getElementsByClassName('spanRoomState')[0].innerText.split(':')[1].toString().trim(),//房屋详细状态 }; // let roomInfoUrl = `${RouteDataParas.webSrvUrl}${RouteDataParas.roomInfoXhr}`; let payload_data = {'roomId': roomInfos.roomId}; //参数:户室ID let xhr = new XMLHttpRequest(); xhr.open('POST', roomInfoUrl); //异步调用 xhr.setRequestHeader('Accept', 'application/json'); xhr.setRequestHeader('Content-type', 'application/json'); xhr.onload = function (e) { if (xhr.status === 200) { // 返回的json数据结构: {"d":"{\"dataType\":0,\"id\":\"28048786\",...,\"roomstatus\":\"已认购\"}"} let json = JSON.parse(xhr.responseText); let obj = JSON.parse(json.d); // 房屋状态信息保存至定义的[spanRoomStatus]元素中 objRoomStatus.innerText = `房屋状态:${obj.roomstatus}`; objRoomState.innerText = `详细状态:${obj.S_ISONLINESIGN}/${obj.S_ISCONTRACT}/${obj.S_ISOTHERRIGHT}`; //API错误提示信息刷新清理 let spanApiMsg = document.getElementById('spanApiMsg'); if (spanApiMsg != undefined && spanApiMsg.innerText.trim() != '') { let reg = new RegExp(`${roomInfos.unitNo}单元 ${roomInfos.roomNo}: 房源信息获取失败:\\s[\\d]{3};(\\n|\\r\\n)`); let replMsg = spanApiMsg.innerText.replace(reg, ''); spanApiMsg.innerText = replMsg; } // // 异步时处理页面相关信息 // let curStyle = window.getComputedStyle ? window.getComputedStyle(pTbCell, null) : pTbCell.currentStyle; let bgColor = curStyle.backgroundColor;//原始已销售#ff00ff rgb(255, 0, 255) let roomStatus = obj.roomstatus;//objRoomStatus.innerText.split(':')[1].toString().trim();//房屋状态 if (roomStatus.indexOf('网签')!=-1) { statsObj.sellCnt++; statsObj.totalCnt++; }//已销售(网签) if (roomStatus.indexOf('不可售')!=-1 && bgColor=='rgb(255, 0, 255)') { statsObj.sellCnt++; statsObj.totalCnt++; }//已销售(不可售) if (roomStatus.indexOf('可售')!=-1 && roomStatus.indexOf('不可售')==-1) { statsObj.allowCnt++; statsObj.totalCnt++; }//可销售 if (roomStatus.indexOf('认购')!=-1) { statsObj.subsCnt++; statsObj.totalCnt++; }//认购数量 roomInfos.roomStatus = roomStatus; roomInfos.roomState = `${obj.S_ISONLINESIGN}/${obj.S_ISCONTRACT}/${obj.S_ISOTHERRIGHT}`; // 相关统计量显示刷新 document.getElementById('spanTotalCnt').innerText = statsObj.totalCnt; document.getElementById('spanSellCnt').innerText = statsObj.sellCnt; document.getElementById('spanSubsCnt').innerText = statsObj.subsCnt; document.getElementById('spanAllowCnt').innerText = statsObj.allowCnt; document.getElementById('spanFoldTotalCnt').innerText = statsObj.totalCnt; document.getElementById('spanFoldSellCnt').innerText = statsObj.sellCnt; document.getElementById('spanFoldSubsCnt').innerText = statsObj.subsCnt; document.getElementById('spanFoldAllowCnt').innerText = statsObj.allowCnt; // 原始已销售#ff00ff,但其实是含有[认购]状态的 // [认购]状态下房号Cell背景色重置 if (roomStatus.indexOf('认购') != -1) { pTbCell.classList.add('bg-orange'); //[认购]状态单独用橙色背景区分 } // 房号cell中alink重新绑定title信息 let curAlink = pTbCell.getElementsByTagName('a')[0]; curAlink.title = cq315houseAnalysis.__bindTitle(roomInfos); curAlink.removeAttribute('onmouseover');//移除原始onmouseover事件 curAlink.onmouseover = function() {cq315houseAnalysis.titleMouseOver(this);};//重新绑定onmouseover事件 // 建面单价区间范围显示 if (statsObj.bpricMin == 0) { statsObj.bpricMin = roomInfos.roomNsjmjg * 1; } else if (parseFloat(roomInfos.roomNsjmjg * 1) > 0 && parseFloat(statsObj.bpricMin) > parseFloat(roomInfos.roomNsjmjg * 1)) { statsObj.bpricMin = roomInfos.roomNsjmjg * 1; } if (parseFloat(statsObj.bpricMax) < parseFloat(roomInfos.roomNsjmjg * 1)) { statsObj.bpricMax = roomInfos.roomNsjmjg * 1; } document.getElementById('spanBpricMin').innerText = statsObj.bpricMin.toFixed(2); document.getElementById('spanBpricMax').innerText = statsObj.bpricMax.toFixed(2); // 套内单价区间范围显示 if (statsObj.ipricMin == 0) { statsObj.ipricMin = roomInfos.roomNsjg * 1; } else if (parseFloat(roomInfos.roomNsjg * 1) > 0 && parseFloat(statsObj.ipricMin) > parseFloat(roomInfos.roomNsjg * 1)) { statsObj.ipricMin = roomInfos.roomNsjg * 1; } if (parseFloat(statsObj.ipricMax) < parseFloat(roomInfos.roomNsjg * 1)) { statsObj.ipricMax = roomInfos.roomNsjg * 1; } document.getElementById('spanIpricMin').innerText = statsObj.ipricMin.toFixed(2); document.getElementById('spanIpricMax').innerText = statsObj.ipricMax.toFixed(2); } else { console.log('Status Code:', xhr.status, roomInfos.roomId); let spanApiMsg = document.getElementById('spanApiMsg'); spanApiMsg.innerText += `${roomInfos.unitNo}单元 ${roomInfos.roomNo}: 房源信息获取失败: ${xhr.status};\n`; } }; xhr.onerror = function (e) { console.log('Status Code:', xhr.status, roomInfos.roomId); let spanApiMsg = document.getElementById('spanApiMsg'); spanApiMsg.innerText += `${roomInfos.unitNo}单元 ${roomInfos.roomNo}: 房源信息获取失败: ${xhr.status};\n`; }; //发送数据 xhr.send(JSON.stringify(payload_data)); }; //依据选择的数据类别显示房源信息 cq315houseAnalysis.displaySeleTypeDatas=function(){ let checkedRadio = document.querySelector('input[name="dataTypeRadioOptions"]:checked'); let dataType = checkedRadio.value; if (dataType==SELECTED_DATA_TYPE) return; SELECTED_DATA_TYPE = dataType; cq315houseAnalysis.refreshTableDatas(); }; //切换页面房源列表table的显示数据 cq315houseAnalysis.refreshTableDatas=function(){ let tb = document.getElementById(vfObj.tbId); if (tb == undefined) return; let tbRows = tb.tBodies[0].rows; for (let i = tbRows.length - 1; i >= 0; i--) { let tbCells = tbRows[i].cells; for (let x = 0, len = tbCells.length; x < len; x++) { let objt = tbCells[x].getAttribute('objt');//房源Cell if (objt != 'tdclass') continue; //objt='tdclass'的cell是房源 let tdStyle = String(tbCells[x].getAttribute("style")).toLowerCase();//房源Cell的style内容 if (tdStyle.indexOf("display:")!=-1 && tdStyle.indexOf("none")!=-1) continue; //隐藏的td不作处理 let roomInfos = { roomId: tbCells[x].getElementsByTagName('a')[0].getAttribute('data-roomid'), unitNo: tbCells[x].getElementsByTagName('a')[0].getAttribute('data-unitno'),//单元No floorNo: tbCells[x].getElementsByTagName('a')[0].getAttribute('data-floorno'),//名义层No roomNo: tbCells[x].getElementsByClassName('spanRoomNo')[0].innerText.split(':')[1].toString().trim(),//房号 roomUse: tbCells[x].getElementsByClassName('spanRoomUse')[0].innerText.split(':')[1].toString().trim(),//用途 roomStru: tbCells[x].getElementsByClassName('spanRoomStru')[0].innerText.split(':')[1].toString().trim(),//结构 roomType: tbCells[x].getElementsByClassName('spanRoomType')[0].innerText.split(':')[1].toString().trim(),//户型 roomBarea: tbCells[x].getElementsByClassName('spanRoombArea')[0].innerText.split(':')[1].toString().trim(),//建面 roomIarea: tbCells[x].getElementsByClassName('spanRoomiArea')[0].innerText.split(':')[1].toString().trim(),//套内 roomNsjg: tbCells[x].getElementsByClassName('spanKfsNsjg')[0].innerText.split(':')[1].toString().trim(),//套内单价 roomNsjmjg: tbCells[x].getElementsByClassName('spanKfsNsjmjg')[0].innerText.split(':')[1].toString().trim(),//建面单价 roomTotalPrice: tbCells[x].getElementsByClassName('spanRoomTotalPrice')[0].innerText.split(':')[1].toString().trim(),//房屋总价 roomStatus: tbCells[x].getElementsByClassName('spanRoomStatus')[0].innerText.split(':')[1].toString().trim(),//房屋状态 roomState: tbCells[x].getElementsByClassName('spanRoomState')[0].innerText.split(':')[1].toString().trim(),//房屋详细状态 }; let curAlink = tbCells[x].getElementsByTagName('a')[0]; switch (SELECTED_DATA_TYPE) { case displayDataTypes[0].Key: curAlink.innerText = roomInfos.roomNo; break; case displayDataTypes[1].Key: curAlink.innerText = roomInfos.roomBarea; break; case displayDataTypes[2].Key: curAlink.innerText = roomInfos.roomIarea; break; case displayDataTypes[3].Key: curAlink.innerText = roomInfos.roomNsjmjg; break; case displayDataTypes[4].Key: curAlink.innerText = roomInfos.roomNsjg; break; case displayDataTypes[5].Key: curAlink.innerText = roomInfos.roomTotalPrice; break; case displayDataTypes[6].Key: curAlink.innerText = roomInfos.roomStatus; break; default: break; } } } }; //绑定alink的tips(title显示文本) cq315houseAnalysis.__bindTitle=function(roomInfos) { let str = '房 号:' + roomInfos.unitNo + '单元 ' + roomInfos.roomNo + '\n用 途:' + roomInfos.roomUse + '\n结 构:' + roomInfos.roomStru + '\n户 型:' + roomInfos.roomType + '\n建筑面积:' + roomInfos.roomBarea + ' ㎡' + '\n套内面积:' + roomInfos.roomIarea + ' ㎡' + '\n建面单价:' + roomInfos.roomNsjmjg + ' 元/㎡' + '\n套内单价:' + roomInfos.roomNsjg + ' 元/㎡' + '\n房屋总价:' + roomInfos.roomTotalPrice + ' 万元' + '\n房屋状态:' + roomInfos.roomStatus + '\n详细状态:' + roomInfos.roomState; // '\n<a href=\"javascript:void(0);\">户室信息刷新</a>'; return str; }; //弹窗显示所点击房号的房源详细信息 cq315houseAnalysis.ShowRoomInfoByPass=function(obj){ let roomId = obj.getAttribute('data-roomid'); if (document.getElementById('fRoomInfo')){ document.getElementById('fRoomInfo').remove(); } if (!document.getElementById('img-roominfo')){ let imgObj = document.createElement('img'); imgObj.id = 'img-roominfo'; document.getElementById('myModalContent').appendChild(imgObj); } document.getElementById('img-roominfo').setAttribute('src',`${RouteDataParas.roomInfoWebSrvUrl}${roomId}`); document.getElementById('showDialog').click(); }; //将查询数据导出Excel cq315houseAnalysis.exportExcel=function(){ // // use SheetJS js-xlsx: https://github.com/SheetJS/sheetjs // // 1.克隆[楼盘表]table的DOM元素,并进行删除span/input子元素处理(便于后续Excel导出) let tb = document.getElementById(vfObj.tbId).cloneNode(true); if (tb == undefined) return; const elemSpan = tb.querySelectorAll('td span'); const elemInput = tb.querySelectorAll('td input'); elemSpan.forEach(e => e.remove()); elemInput.forEach(e => e.remove()); let str=SELECTED_DATA_TYPE.slice(0,1).toUpperCase()+SELECTED_DATA_TYPE.slice(1).toLowerCase(); let fileName = `ShowRooms-${str}.xlsx`; let dataTypeText=document.querySelector('input[name="dataTypeRadioOptions"]:checked').parentNode.innerText; // 2.创建新的workbook let wb = XLSX.utils.book_new(); if(!wb.Props) wb.Props = {}; wb.Props.Title = fileName; wb.Props.Subject = 'Export from web browser'; wb.Props.Author = '房源信息查询助手'; // 3.提取数据(通过table数据创建ws) let ws = XLSX.utils.table_to_sheet(tb, {raw:true, display:true}); // 3.1.数据处理, 追加一个新行记录Excel创建日期(非必须) let dateTime = new Date(+new Date()+8*3600*1000); XLSX.utils.sheet_add_aoa(ws, [["Created "+new Date(dateTime).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')]], {origin:-1}); // 4.将创建的worksheet追加到workbook let wsName = 'ShowRooms'; XLSX.utils.book_append_sheet(wb, ws, wsName); // 5.通过`writeFile`保存并下载 XLSX 文件 XLSX.writeFile(wb, fileName); }; //将查询楼幢所有户室详细数据导出Excel cq315houseAnalysis.exportExcelFull=function(){ // // use SheetJS js-xlsx: https://github.com/SheetJS/sheetjs // let fileName = 'ShowRooms-Detail-Infos.xlsx'; // 1.创建新的workbook let wb = XLSX.utils.book_new(); if(!wb.Props) wb.Props = {}; wb.Props.Title = fileName; wb.Props.Subject = 'Export from web browser'; wb.Props.Author = '房源信息查询助手'; // 2.提取楼幢户室详细数据(通过table详细数据创建ws) let blockTxt = getQueryString('block'); let datas=[]; datas.push(['楼幢号','名义层','单元','房号','户型','建面','套内','套内单价(元)','建面单价(元)','房屋总价(万元)','房屋状态','房屋详细状态']); let tb = document.getElementById(vfObj.tbId); if (tb == undefined) return; let tbRows = tb.tBodies[0].rows; let tbCellCnt = tb.tBodies[0].rows[0].cells.length; let tbRowsCnt = tb.tBodies[0].rows.length; // 先列后行遍历(先排楼层再排单元房号) for (let x = 0; x < tbCellCnt; x++) { for (let y = 0; y < tbRowsCnt; y++) { let tbCell = tbRows[y].cells[x]; let objt = tbCell.getAttribute('objt');//房源Cell if (objt != 'tdclass') {continue; } //objt='tdclass'的cell是房源 let tdStyle = String(tbCell.getAttribute("style")).toLowerCase();//房源Cell的style内容 if (tdStyle.indexOf("display:")!=-1 && tdStyle.indexOf("none")!=-1) continue; //隐藏的td不作处理 let roomInfos = { roomId: tbCell.getElementsByTagName('a')[0].getAttribute('data-roomid'), unitNo: tbCell.getElementsByTagName('a')[0].getAttribute('data-unitno'),//单元No floorNo: tbCell.getElementsByTagName('a')[0].getAttribute('data-floorno'),//名义层No roomNo: tbCell.getElementsByClassName('spanRoomNo')[0].innerText.split(':')[1].toString().trim(),//房号 roomUse: tbCell.getElementsByClassName('spanRoomUse')[0].innerText.split(':')[1].toString().trim(),//用途 roomStru: tbCell.getElementsByClassName('spanRoomStru')[0].innerText.split(':')[1].toString().trim(),//结构 roomType: tbCell.getElementsByClassName('spanRoomType')[0].innerText.split(':')[1].toString().trim(),//户型 roomBarea: tbCell.getElementsByClassName('spanRoombArea')[0].innerText.split(':')[1].toString().trim(),//建面 roomIarea: tbCell.getElementsByClassName('spanRoomiArea')[0].innerText.split(':')[1].toString().trim(),//套内 roomNsjg: tbCell.getElementsByClassName('spanKfsNsjg')[0].innerText.split(':')[1].toString().trim(),//套内单价 roomNsjmjg: tbCell.getElementsByClassName('spanKfsNsjmjg')[0].innerText.split(':')[1].toString().trim(),//建面单价 roomTotalPrice: tbCell.getElementsByClassName('spanRoomTotalPrice')[0].innerText.split(':')[1].toString().trim(),//房屋总价 roomStatus: tbCell.getElementsByClassName('spanRoomStatus')[0].innerText.split(':')[1].toString().trim(),//房屋状态 roomState: tbCell.getElementsByClassName('spanRoomState')[0].innerText.split(':')[1].toString().trim(),//房屋详细状态 }; //楼幢, 名义层, 单元, 房号, 户型, 建面, 套内, 套内单价, 建面单价, 房屋总价, 房屋状态, 房屋详细状态 datas.push([blockTxt, roomInfos.floorNo, roomInfos.unitNo, roomInfos.roomNo, roomInfos.roomType, roomInfos.roomBarea, roomInfos.roomIarea, roomInfos.roomNsjg, roomInfos.roomNsjmjg, roomInfos.roomTotalPrice, roomInfos.roomStatus, roomInfos.roomState]); } } let ws = XLSX.utils.aoa_to_sheet(datas, {cellDates:true}); // 2.1.数据处理, 追加一个新行记录Excel创建日期(非必须) let dateTime = new Date(+new Date()+8*3600*1000); XLSX.utils.sheet_add_aoa(ws, [["Created "+new Date(dateTime).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')]], {origin:-1}); // 3.将创建的worksheet追加到workbook let wsName = 'ShowRooms'; XLSX.utils.book_append_sheet(wb, ws, wsName); // 4.通过`writeFile`保存并下载 XLSX 文件 XLSX.writeFile(wb, fileName); }; cq315houseAnalysis.start=function(){ if (cq315houseAnalysis.judgeWebUrl()){ cq315houseAnalysis.initShowRoomsPage(); cq315houseAnalysis.createRoomDataTypeContentBox(); cq315houseAnalysis.resetProjectInfoImg(); cq315houseAnalysis.resetRoomCellsInfo(); } // Easter Egg try { window.console && window.console.log && ( console.log('%c\n当你挤地铁时,阿拉斯加的鳕鱼正跃出水面。\n当你看设计书时,大洋彼岸的海鸥正振翅掠过城市上方。\n当你被产品经理完虐时,极图的夜空散满了五彩斑斓。\n但是啊,别着急,\n当你为自己的未来努力奋斗时,\n那些你感觉从来不会看到的风景,\n那些你觉得终身不会遇到的人,\n你要的一切,\n正一步步向你走来。\n\n', 'color:green'), console.log(`%c${GM_info.script.name} Ver.${GM_info.script.version}:\n增加楼幢所有户室详细信息导出Excel功能;\n\n`, 'color:purple'), console.log('%c寻Python开发志同道合者\n油猴脚本地址:https://greasyfork.org/scripts/444147', 'color:red')) } catch (e) {} }; cq315houseAnalysis.start(); })(); /** * 获取URL中指定名称的参数 */ function getQueryString(key) { let reg = new RegExp('(^|&)' + key + '=([^&]*)(&|$)'); let result = window.location.search.substr(1).match(reg); return result ? decodeURIComponent(result[2]) : null; }