ceshi
accas
H5网页跳转微信小程序-nodeJs
注 微信中打开网页,可跳转微信小程序操作。 前期准备 目前仅支持在微信内打开H5页面; 已认证的服务号,服务号绑定“JS接口安全域名”下的网页可使用此标签跳转任意合法合规的小程序;…
前端文件上传到阿里云OSS存储
前端vue+element ui文件上传操作。 1、vue项目安装依赖 npm install ali-oss 2、设置OSS支持PUT跨域请求 文件上传公共方法oss.js [c…
uni app基础搭建
uni-app的基本使用 环境搭建 安装编辑器HbuilderX【下载地址】 安装微信开发者工具【下载地址】 HbuilderX编辑器初始化项目 点击HbuilderX菜单栏文件&…
nodejs接口配置域名
nginx服务下配置,域名解析后
12345678910111213141516server{listen 80;server_name node8000.kl.com;index index.html index.htm index.php default.html default.htm default.php;expires off;charset utf-8;location / {proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_set_header X-NginX-Proxy true;proxy_pass http://127.0.0.1:8000;#这里是nodejs接口的ipproxy_redirect off;}}小程序要使用这些接口就要给域名配置ssl,使用https协议, 需要注意的是域名…
web历史曲线卡顿问题—Echarts降采样策略
渲染绘制37W条数据3秒; 此时拖动图表底部滑块明显卡顿,并且第一眼看不到图表曲线趋势; 降采样策略: sampling: ‘average’, [cray…
ECharts实时曲线图表
代码: 示例:https://echarts.apache.org/examples/zh/editor.html?c=dynamic-data2 [crayon-6287a87f…
js常用公共方法-vue
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615/*** @file Describe the file*/import element from 'element-ui';import api from '../request/api.js';import globalVariable from '../components/Menu/globalVariable.js';export default class myUtils {/*** @param {String} 两个日期相差天数(sDate1, sDate2),时间格式【2020-05-10】* @returns {Number} 返回相差天数数值*/static dateDiff(sDate1, sDate2) {let aDate = sDate1.split('-');let oDate1 = new Date(aDate[0], aDate[1], aDate[2]); // 转换为12-18-2006格式aDate = sDate2.split('-');let oDate2 = new Date(aDate[0], aDate[1], aDate[2]);let iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24); // 把相差的毫秒数转换为天数return iDays;}/*** @param {Number} timeStamp 传入的时间戳* @returns {string} startType 要返回的时间字符串的格式类型,传入'year'则返回年开头的完整时间*/static getTimeStampToTime(timeStamp) {let date = new Date(Number(timeStamp)); // 时间戳为10位需*1000,时间戳为13位的话不需乘1000let Y = date.getFullYear() + '-';let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';let D = date.getDate() + 'T';let h = date.getHours();let m = date.getMinutes();let s = date.getSeconds();if (h < 10) {h = '0' + h;}if (m < 10) {m = '0' + m;}return Y + M + D + h + ':' + m + ':' + '00';}/*** @param 数组去重* @returns {Obj}* 传参:数组*/static unique(arr) {return Array.from(new Set(arr));}/*** 获取当前时间---年月日时分秒* @param* @returns {number}*/static getCurrentDate(format, type) {let now = new Date();let year = now.getFullYear(); // 得到年份let month = now.getMonth(); // 得到月份let date = now.getDate(); // 得到日期// let day = now.getDay();// 得到周几let hour = now.getHours(); // 得到小时let minu = now.getMinutes(); // 得到分钟let sec = now.getSeconds(); // 得到秒month = month + 1;if (month < 10) {month = '0' + month;}if (date < 10) {date = '0' + date;}if (hour < 10) {hour = '0' + hour;}if (minu < 10) {minu = '0' + minu;}if (sec < 10) {sec = '0' + sec;}let time = '';// 精确到天if (format === 1) {time = year + type + month + type + date;} else {// 精确到分time = year + type + month + type + date + ' ' + hour + ':' + minu + ':' + sec;}return time;}/* eslint-disable *//*** @param* @returns {String}* 全局消息提醒* 传参:弹窗类型、提示文字*/static messageType(type, msg) {// 警告 warning// 成功 success// 消息 info// 错误 errorif (type === 'error') {element.Message.error(msg);} else {element.Message({type: type,message: msg});}}/*** @param* @returns {obj}* 文件导出功能* 文件格式:.xlsx* data:【必传】文件下载接口返回的数据流* name:导出的文件命名,不传默认为时间命名,(字符串,一般为中文+年月日时分秒,配合getCurrentDate方法)* 例:平台设备统计明细2020-10-30 15_30_56.xlsx*/static downloadFile(data, name) {let fileName = '';if (String(name) !== 'undefined') {fileName = String(name);} else {fileName = this.getCurrentDate();}let blob = new Blob([data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});let url = window.URL.createObjectURL(blob);const link = document.createElement('a'); // 创建a标签link.href = url;link.download = fileName; // 重命名文件link.click();URL.revokeObjectURL(url); // 释放内存}/*** 应用于图表插件---获取日的时间数据* @param* @returns {obj}*/static getChartDay() {let dataTimes = ['00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00'];return dataTimes;}/*** 应用于图表插件---获取随机图表数据* @param* @returns {obj}*/static getChartDayObjList() {let dataList = [];for (var i = 1; i < this.getCurrentMonthDays() + 1; i++) {// for (var i = 1; i < 4+1; i++) {dataList.push(+this.getRandomNumber(2));}return dataList;}/*** 应用于图表插件---获取周的时间数据* @param* @returns {obj}*/static getChartWeek() {let dataTimes = this.$t('myUtils.msg.dataTimes');return dataTimes;}/*** 应用于图表插件---获取当前月天数数组* @param* @returns {obj}*/static getChartMonth() {let dataTimes = [];let date = new Date();let year = date.getFullYear();let month = date.getMonth() + 1;let d = new Date(year, month, 0);let n = +d.getDate();for (var i = 1; i < n + 1; i++) {dataTimes.push(i + ' 号');}return dataTimes; //返回天数数组}/*** 获取当前月有多少天* @param* @returns {number}*/static getCurrentMonthDays() {let date = new Date();let year = date.getFullYear();let month = date.getMonth() + 1;let d = new Date(year, month, 0);return +d.getDate();}/*** 获取随机数* @param n* @returns {number}*/static getRandomNumber(n) {var rnd = '';for (var i = 0; i < n; i++) rnd += Math.floor(Math.random() * 10);return rnd;}/*** 判断字符串是否为空* @param str* @returns {boolean}*/static isNull(str) {return str === null || str.length == 0 || str === '';}/**** @desc 判断是否为身份证号* @param {String|Number} str* @return {Boolean}*/static isIdCard(str) {return /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/.test(str)}/**** @desc 判断邮箱* @param {String} str* @return {Boolean}*/static emails(str) {return /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(str);}/**** @desc 判断是否为座机号* @param {String|Number} str* @return {Boolean}*/static landlineNumber(str) {return /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/.test(str);}/**** @desc 判断是否为手机号* @param {String|Number} str* @return {Boolean}*/static isPhoneNum(str) {return /^(0|86|17951)?(1[3-9][0-9])[0-9]{8}$/.test(str);}/*** @description 日期格式化* @param {Date} date 日期* @param {String} fmt 日期格式 eg: yyyy-MM-dd hh:mm:ss*/static dateFormat(date, fmt) {let o = {'M+': date.getMonth() + 1, // 月份'd+': date.getDate(), // 日'h+': date.getHours(), // 小时'm+': date.getMinutes(), // 分's+': date.getSeconds(), // 秒'q+': Math.floor((date.getMonth() + 3) / 3), // 季度'S': date.getMilliseconds() // 毫秒};if (/(y+)/.test(fmt)) {fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));}for (let k in o) {if (new RegExp('(' + k + ')').test(fmt)) {fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));}}return fmt;}/*** @description 文件下载* @param {Object} data 数据* @param {String} fileName 下载文件名*/static download(data, fileName) {// 创建一个blob对象,file的一种let blob = new Blob([data], {type: 'application/x-xls'});if ('download' in document.createElement('a')) { // 非IE下载let link = document.createElement('a');if (window.URL) {link.href = window.URL.createObjectURL(blob);} else {link.href = window.webkitURL.createObjectURL(blob);}link.download = fileName;document.body.appendChild(link);link.click();link.remove();} else { // IE10+下载navigator.msSaveBlob(blob, fileName);}}/*** @description 校验导入execl格式* @param {file} file 导入文件对象*/static validateExecl(file) {const isXLS = file.type === 'application/vnd.ms-excel';const isXLSX = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';if (!isXLS && !isXLSX) {this.$message.error(this.$t('myUtils.msg.validateExecl'));return false;}}/*** @description 校验上传图片格式和大小* @param {file} file 导入文件对象*/static validateImage(file) {const isPNG = file.type.toLowerCase() === 'image/png';const isJPG = file.type.toLowerCase() === 'image/jpeg';const isLt2M = file.size / 1024 / 1024 < 2;if (!isJPG && !isPNG) {this.$message.error(this.$t('myUtils.msg.validateImage[0]'));return false;}if (!isLt2M) {this.$message.error(this.$t('myUtils.msg.validateImage[1]'));return false;}};static debounce(func, wait) {let timeout;return function(event) {let _this = thislet args = arguments;if (timeout) {clearTimeout(timeout)}timeout = setTimeout(() => {timeout = nullfunc.call(_this, args)}, wait)}}static rollImg(e, element, zoomNum) {try {zoomNum += event.wheelDelta / 12;} catch (e) {}if (zoomNum >= 60 && zoomNum < 2000) {element.style.zoom = zoomNum + '%';}return false;}static move(e, element) {let odiv = element; // 获取目标元素// 算出鼠标相对元素的位置let disX = e.clientX - odiv.offsetLeft;let disY = e.clientY - odiv.offsetTop;document.onmousemove = (e) => { // 鼠标按下并移动的事件// 用鼠标的位置减去鼠标相对元素的位置,得到元素的位置let left = e.clientX - disX;let top = e.clientY - disY;// 绑定元素位置到positionX和positionY上面// this.positionX = top;// this.positionY = left;// 移动当前元素odiv.style.left = left + 'px';odiv.style.top = top + 'px';};document.onmouseup = (e) => {document.onmousemove = null;document.onmouseup = null;};}static downloadTXTFile(data, name) {let fileName = '';if (String(name) !== 'undefined') {fileName = String(name);} else {fileName = this.getCurrentDate();}let blob = new Blob([data], {type: 'application/octet-stream'});let url = window.URL.createObjectURL(blob);const link = document.createElement('a'); // 创建a标签link.href = url;link.download = fileName; // 重命名文件link.click();URL.revokeObjectURL(url); // 释放内存}static connectServer(equipNo, messageType) {if (!this.signalr_connection) { // 如果有连接就断开连接return false;}this.signalr_connection.stop();// 开始连接this.signalr_connectionthis.signalr_connection.start().then(() => {this.signalr_connection.invoke('OnConnect', localStorage.SRToken, equipNo);}).catch(function(ex) {console.log('connectServer' + this.$t('myUtils.msg.connectionFailed') + ex);});}static connectHub(equipNo, type) {this.signalr_connection = null;this.signalr_connection = new signalRAll.HubConnectionBuilder().withUrl(this.$api.getSignalrHttp() + '/monitor', {}).build()let that = this;// 开始连接this.signalr_connectionrthat.signalr_connection.start().then(() => {that.signalr_connection.invoke('OnConnect', localStorage.SRToken, equipNo);}).catch(function(ex) {console.log('connectHub' + this.$t('myUtils.msg.connectionFailed') + ex);});that.signalr_connection.off('EquipDataChanged');that.signalr_connection.on('EquipDataChanged', res => {let data = JSON.parse(res);if (data.length > 0) {console.log(data);}})that.signalr_connection.onclose(() => {that.signalr_connection.stop();})}static signalRaddeventlistener(arry) {}/*** @description 生成唯一Id* @param {} 不用传参* @return {string}*/static generateUUID() {let d = new Date().getTime();if (window.performance && typeof window.performance.now === 'function') {d += performance.now(); // use high-precision timer if available}let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {let r = (d + Math.random() * 16) % 16 | 0;d = Math.floor(d / 16);return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);});return uuid;}static fontSize(num, echartId) {let clientWidth = document.getElementById(echartId).clientWidth;if (!clientWidth) {return;}let fontSize = clientWidth / 400;return num * fontSize;};/* eslint-disable *//*** @param* @returns {String}* 全局消息提醒* 传参:弹窗类型、提示文字*/static messageType(type, msg) {// 警告 warning// 成功 success// 消息 info// 错误 errorif (type === 'error') {element.Message.error(msg);} else {element.Message({type: type,message: msg});}}/*** @param* @returns {obj}* 文件导出功能* 文件格式:.xlsx* data:【必传】文件下载接口返回的数据流* name:导出的文件命名,不传默认为时间命名,(字符串,一般为中文+年月日时分秒,配合getCurrentDate方法)* 例:平台设备统计明细2020-10-30 15_30_56.xlsx*/static downloadFile(data, name) {let fileName = '';if (String(name) !== 'undefined') {fileName = String(name);} else {fileName = this.getCurrentDate();}let blob = new Blob([data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});let url = window.URL.createObjectURL(blob);const link = document.createElement('a'); // 创建a标签link.href = url;link.download = fileName; // 重命名文件link.click();URL.revokeObjectURL(url); // 释放内存}// 补零 num:要改变的值,len补零后数字的长度static addZero(num, len) {return String(num).length > len ? num : (Array(len).join(0) + num).slice(-len);}/*** @pageNo 页数* @SearchName 搜索名称* @systemName 首页跳转携带子系统字段** 获取公共左侧列表* 文件格式:.xlsx*/static getEquipListCache(pageNo, SearchName, systemName) {let data = {pageNo: pageNo,pageSize: 40,SearchName: SearchName,systemName: systemName},result;api.getEquipLists(data).then((rt) => {if (rt.data.code === 200) {result = rt.data.data;try {localStorage.initsEquipAList = JSON.stringify(result);} catch (e) {localStorage.initsEquipAList = JSON.stringify({});}globalVariable.initsEquipAList = JSON.parse(localStorage.initsEquipAList);} else {}}).catch((err) => {console.log('err---', err);});}}Highchart图表-实时曲线
代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243splineChart(type, item) {let equipNm = '';let no = 0;let physicMax = 0; // 上限值let physicMin = 0; // 下限值let seriesList = [];let that = this;if (type === 'C') {equipNm = item.ycNm;no = item.ycNo;physicMax = item.valMax;physicMin = item.valMin;seriesList = [{name: '实时值',color: '#3875ff',animation: true,style: {color: '#d3d8e2'},data: (function() {let data = [],time = new Date().getTime(),i;for (i = -9; i <= 0; i += 1) {data.push({x: time + i * 1000,y: Number(that.getEquipCurve(no))});}return data;})()},{name: '上限值',color: '#f54551',animation: true,type: 'spline',marker: {enabled: false // 曲线是否显示值圆点},dashStyle: 'shortdot',style: {color: 'red'},data: (function() {let data = [],time = new Date().getTime(),i;for (i = -9; i <= 0; i += 1) {data.push({x: time + i * 1000,y: physicMax});}return data;})()}, {name: '下限值',color: '#f5bb36',animation: true,type: 'spline',marker: {enabled: false},dashStyle: 'shortdot',style: {color: 'red'},data: (function() {let data = [],time = new Date().getTime(),i;for (i = -9; i <= 0; i += 1) {data.push({x: time + i * 1000,y: physicMin});}return data;})()},]} else {equipNm = item.yxNm;no = item.yxNo;seriesList = [{name: '实时值',color: '#3875ff',animation: true,style: {color: '#d3d8e2'},data: (function() {let data = [],time = new Date().getTime(),i;for (i = -9; i <= 0; i += 1) {data.push({x: time + i * 1000,y: +Number(that.getEquipCurve(no))});}return data;})()}]}this.equipChartNm = equipNm;Highcharts.chart('containerE', {chart: {type: 'spline',margin: [40, 23, 80, 60],backgroundColor: {linearGradient: {x1: 0,y1: 0,x2: 1,y2: 1},stops: [[0, '#252833'],[1, '#252833']]},events: {load: function() {let series = this.series[0];let chart = this;let seriesPhysicMax = [];let seriesPhysicMin = [];if (type === 'C') {seriesPhysicMax = this.series[1];seriesPhysicMin = this.series[2];}that.activeLastPointToolip(chart);if (this.timeChart) {clearInterval(this.timeChart);}this.timeChart = setInterval(function() {if (!typeof(that.getEquipCurve(no)) === 'number') {return;}let x = new Date().getTime(),y = Number(that.getEquipCurve(no));series.addPoint([x, y], true, true);if (type === 'C') {seriesPhysicMax.addPoint([x, physicMax], true, true);seriesPhysicMin.addPoint([x, physicMin], true, true);}that.activeLastPointToolip(chart);}, that.IntervalTime);}},borderColor: '#252833',plotBackgroundColor: '#252833',plotBorderColor: '#999fa8'},title: {text: ''},xAxis: {lineColor: '#999fa8',type: 'datetime',tickPixelInterval: 130,labels: {style: {color: '#d3d8e2'}},axisLine: {lineStyle: {type: 'solid',color: 'red', // 左边线的颜色width: '2' // 坐标线的宽度}},axisLabel: {textStyle: {color: 'red' // 坐标值得具体的颜色}}},yAxis: {gridLineColor: '#3b4357',gridLineWidth: 1,title: {text: '',style: {color: '#999fa8'}},labels: {style: {color: '#d3d8e2'}}},tooltip: {backgroundColor: '#000',formatter: function() {return ('<b>' +this.series.name +'</b><br/>' +Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) +'<br/>' +Highcharts.numberFormat(this.y, 3));},style: {color: '#d3d8e2'}},legend: {enabled: type === 'C',layout: 'horizontal',x: 0,verticalAlign: 'top',y: -5,floating: true,align: 'right',labelFormatter: function() {return '<span style="color:rgba(240, 244, 255, 0.64)"> ' + this.name + '</span>';}},plotOptions:{spline:{animation: true,}},credits: {//配置右下角的版权信息enabled:false,//是否显示版权信息,默认:true。若想去除图表右下角highcharts官网链接则设置为false。text:" ",//版权信息显示内容,默认:Highcharts.com。href:" "//版权信息链接地址,默认:http://www.highcharts.com。},series: seriesList});},ECharts图表-历史曲线
代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143//图表需要的数据【时间数组、时间所对应的数据数组】historyTime = equipHistory.times;historyValue = equipHistory.values;this.hisChart = this.$echart.init(document.getElementById('historyData'),'light');this.hisChart.setOption({grid: {left: '1%',top: '10%',right: '2%',bottom: '11%',containLabel: true,color: 'red'},tooltip: {style: {color: 'red'}},xAxis: {type: 'category',splitLine: {show: false,lineStyle: { // x网格线color: 'red'}},axisLine: {lineStyle: {color: '#999fa8',width: 1 // 这里是为了突出显示加上的}},axisLabel: {margin: 12,textStyle: {color: '#d3d8e2',fontSize: '13'}},labels: {style: {color: '#d3d8e2'}},style: {color: '#d3d8e2'},data: historyTime},yAxis: {gridLineColor: '#3b4357',gridLineWidth: 1,type: 'value',axisLine: {show: false},axisTick: {show: false},axisLabel: {margin: 12,textStyle: {color: '#d3d8e2',fontSize: '13'}},style: {color: '#d3d8e2',fontWeight: 'bold',fontSize: '12px',fontFamily: 'Trebuchet MS, Verdana, sans-serif'},title: {style: {color: '#d3d8e2',fontWeight: 'bold',fontSize: '12px',fontFamily: 'Trebuchet MS, Verdana, sans-serif'}},labels: {style: {color: '#d3d8e2'}},splitLine: {show: true,lineStyle: { // x网格线color: '#373f51'}}},// 图表时间轴滑块dataZoom: [{height: 30,xAxisIndex: [0],start: 0,end: 10,handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z',handleSize: '110%',handleStyle: {color: '#3b4357',shadowBlur: 3,shadowColor: '#3b4357',shadowOffsetX: 2,shadowOffsetY: 2,textStyle: {color: '#d3d8e2'}},style: {color: '#d3d8e2'},borderColor: '240, 244, 255, 0.16',color: 'red',fontColor: 'red',textStyle: {color: '#d3d8e2'}},{type: 'inside',start: 0,end: 10,height: 15}],series: [{data: historyValue,type: 'line',animation: false,// showSymbol :false,sampling: 'average', //降采样策略-明显优化拖动滚动条卡顿smooth: false}]});- 点击查看更多