// ==UserScript== // @name 优惠购 // @namespace http://tb.newday.me/ // @version 1.3.4 // @icon http://tb.newday.me/taobao/favicon.ico // @author 哩呵 // @description 以最优惠的价格,把宝贝抱回家。插件主要功能有:[1] 淘宝全站商品的优惠券查询与领取 [2] 京东商品页的优惠券查询与获取 [3] 展示淘宝、京东等主流商城的商品历史价格图表 // @match *://*.taobao.com/* // @match *://*.tmall.com/* // @match *://*.tmall.hk/* // @match *://item.jd.com/* // @match *://item.jd.hk/* // @match *://goods.kaola.com/product/* // @match *://you.163.com/item/* // @match *://product.suning.com/* // @match *://product.dangdang.com/* // @match *://item.gome.com.cn/* // @match *://*.newday.me/* // @connect taobao.com // @connect newday.me // @require https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js // @require https://cdn.staticfile.org/qrcode-generator/1.4.3/qrcode.min.js // @require https://cdn.staticfile.org/snap.svg/0.5.1/snap.svg-min.js // @require https://cdn.staticfile.org/echarts/4.1.0/echarts.min.js // @require https://cdn.staticfile.org/vue/2.6.6/vue.min.js // @run-at document-start // @grant GM_getValue // @grant GM_setValue // @grant GM_listValues // @grant GM_xmlhttpRequest // @grant GM_openInTab // @noframes // @downloadURL none // ==/UserScript== (function () { 'use strict'; var injectConfig = { name: "yhg", version: "1.3.3", addon: { options_page: "/page/yhg/option.html" }, script: { options_page: "http://tb.newday.me/script/option.html" } }; var container = (function () { var obj = { module_defines: {}, module_objects: {} }; obj.define = function (name, requires, callback) { name = obj.processName(name); obj.module_defines[name] = { requires: requires, callback: callback }; }; obj.require = function (name, cache) { if (typeof cache == "undefined") { cache = true; } name = obj.processName(name); if (cache && obj.module_objects.hasOwnProperty(name)) { return obj.module_objects[name]; } else if (obj.module_defines.hasOwnProperty(name)) { var requires = obj.module_defines[name].requires; var callback = obj.module_defines[name].callback; var module = obj.use(requires, callback); cache && obj.register(name, module); return module; } }; obj.use = function (requires, callback) { var module = { exports: {} }; var params = obj.buildParams(requires, module); var result = callback.apply(this, params); if (typeof result != "undefined") { return result; } else { return module.exports; } }; obj.register = function (name, module) { name = obj.processName(name); obj.module_objects[name] = module; }; obj.buildParams = function (requires, module) { var params = []; requires.forEach(function (name) { params.push(obj.require(name)); }); params.push(obj.require); params.push(module.exports); params.push(module); return params; }; obj.processName = function (name) { return name.toLowerCase(); }; return { define: obj.define, use: obj.use, register: obj.register, modules: obj.module_objects }; })(); container.define("gm", [], function () { var obj = {}; obj.ready = function (callback) { if (typeof GM_getValue != "undefined") { callback && callback(); } else { setTimeout(function () { obj.ready(callback); }, 100); } }; return obj; }); container.define("runtime", [], function () { var obj = { url: location.href, referer: document.referrer, }; obj.getUrl = function () { return obj.url; }; obj.setUrl = function (url) { obj.url = url; }; obj.getReferer = function () { return obj.referer; }; obj.setReferer = function (referer) { obj.referer = referer; }; obj.getUrlParam = function (name) { var param = obj.parseUrlParam(obj.getUrl()); if (name) { return param.hasOwnProperty(name) ? param[name] : null; } else { return param; } }; obj.parseUrlParam = function (url) { if (url.indexOf("?")) { url = url.split("?")[1]; } var reg = /([^=&\s]+)[=\s]*([^=&\s]*)/g; var obj = {}; while (reg.exec(url)) { obj[RegExp.$1] = RegExp.$2; } return obj; }; return obj; }); container.define("object", [], function () { var obj = {}; obj.keys = function (data) { var list = []; for (var key in data) { list.push(key); } return list; }; obj.values = function (data) { var list = []; for (var key in data) { list.push(data[key]); } return list; }; return obj; }); container.define("storage", [], function () { var obj = {}; obj.getValue = function (name, defaultValue) { return GM_getValue(name, defaultValue); }; obj.setValue = function (name, value) { GM_setValue(name, value); }; obj.getValueList = function () { var nameList = GM_listValues(); var valueList = {}; nameList.forEach(function (name) { valueList[name] = obj.getValue(name); }); return valueList; }; return obj; }); container.define("addon", ["storage"], function (storage, constant) { var obj = { name: constant.name + "_status" }; obj.isEnable = function () { if (storage.getValue(obj.name) == "off") { return false; } else { return true; } }; return obj; }); container.define("config", ["storage", "constant"], function (storage, constant) { var obj = { name: "config_json" }; obj.getConfig = function (name) { var configJson = storage.getValue(obj.name); var configObject = obj.parseJson(configJson); if (name) { name = obj.processName(name); return configObject.hasOwnProperty(name) ? configObject[name] : null; } else { return configObject; } }; obj.setConfig = function (name, value) { var configObject = obj.getConfig(); configObject[obj.processName(name)] = value; storage.setValue(obj.name, JSON.stringify(configObject)); }; obj.parseJson = function (jsonStr) { var jsonObject = {}; try { if (jsonStr) { jsonObject = JSON.parse(jsonStr); } } catch (e) { } return jsonObject; }; obj.processName = function (name) { return constant.name + "_" + name; }; return obj; }); container.define("option", ["config", "constant", "object"], function (config, constant, object) { var obj = { name: "option", constant: constant.option }; obj.isOptionActive = function (item) { var name = item.name; var option = obj.getOption(); return option.indexOf(name) >= 0 ? true : false; }; obj.setOptionActive = function (item) { var name = item.name; var option = obj.getOption(); if (option.indexOf(name) < 0) { option.push(name); obj.setOption(option); } }; obj.setOptionUnActive = function (item) { var name = item.name; var option = obj.getOption(); var index = option.indexOf(name); if (index >= 0) { delete option[index]; obj.setOption(option); } }; obj.getOption = function () { var option = []; var optionObject = obj.getOptionObject(); object.values(obj.constant).forEach(function (item) { var name = item.name; if (optionObject.hasOwnProperty(name)) { if (optionObject[name] != "no") { option.push(name); } } else if (item.value != "no") { option.push(name); } }); return option; }; obj.setOption = function (option) { var optionObject = {}; object.values(obj.constant).forEach(function (item) { var name = item.name; if (option.indexOf(name) >= 0) { optionObject[name] = "yes"; } else { optionObject[name] = "no"; } }); obj.setOptionObject(optionObject); }; obj.getOptionObject = function () { var optionObject = config.getConfig(obj.name); return optionObject ? optionObject : {}; }; obj.setOptionObject = function (optionObject) { config.setConfig(obj.name, optionObject); }; return obj; }); container.define("mode", [], function () { var obj = { constant: { addon: "addon", script: "script" } }; obj.getMode = function () { if (GM_info.addon) { return obj.constant.addon; } else { return obj.constant.script; } }; return obj; }); container.define("user", ["storage"], function (storage) { var obj = {}; obj.getUid = function () { var uid = storage.getValue("uid"); if (!uid) { uid = obj.randString(32); storage.setValue("uid", uid); } return uid; }; obj.randString = function (length) { var possible = "abcdefghijklmnopqrstuvwxyz0123456789"; var text = ""; for (var i = 0; i < length; i++) { text += possible.charAt(Math.floor(Math.random() * possible.length)); } return text; }; return obj; }); container.define("browser", [], function () { var obj = { constant: { firefox: "firefox", edge: "edge", baidu: "baidu", liebao: "liebao", uc: "uc", qq: "qq", sogou: "sogou", opera: "opera", maxthon: "maxthon", ie2345: "2345", se360: "360", chrome: "chrome", safari: "safari", other: "other" } }; obj.getBrowser = function () { return obj.matchBrowserType(navigator.userAgent); }; obj.matchBrowserType = function (userAgent) { var browser = obj.constant.other; userAgent = userAgent.toLowerCase(); if (userAgent.match(/firefox/) != null) { browser = obj.constant.firefox; } else if (userAgent.match(/edge/) != null) { browser = obj.constant.edge; } else if (userAgent.match(/bidubrowser/) != null) { browser = obj.constant.baidu; } else if (userAgent.match(/lbbrowser/) != null) { browser = obj.constant.liebao; } else if (userAgent.match(/ubrowser/) != null) { browser = obj.constant.uc; } else if (userAgent.match(/qqbrowse/) != null) { browser = obj.constant.qq; } else if (userAgent.match(/metasr/) != null) { browser = obj.constant.sogou; } else if (userAgent.match(/opr/) != null) { browser = obj.constant.opera; } else if (userAgent.match(/maxthon/) != null) { browser = obj.constant.maxthon; } else if (userAgent.match(/2345explorer/) != null) { browser = obj.constant.ie2345; } else if (userAgent.match(/chrome/) != null) { if (obj.existMime("type", "application/vnd.chromium.remoting-viewer")) { browser = obj.constant.se360; } else { browser = obj.constant.chrome; } } else if (userAgent.match(/safari/) != null) { browser = obj.constant.safari; } return browser; }; obj.existMime = function (option, value) { if (typeof navigator != "undefined") { var mimeTypes = navigator.mimeTypes; for (var mt in mimeTypes) { if (mimeTypes[mt][option] == value) { return true; } } } return false; }; return obj; }); container.define("env", ["mode", "user", "browser", "constant"], function (mode, user, browser, constant) { var obj = {}; obj.isAddon = function () { if (mode.getMode() == mode.constant.addon) { return true; } else { return false; } }; obj.isInject = function () { if (obj.isAddon()) { if (GM_info.addon.name != constant.name) { return true; } else { return false; } } else { if (GM_info.script.name && GM_info.script.name != constant.name) { return true; } else { return false; } } }; obj.getMode = function () { return mode.getMode(); }; obj.getAid = function () { if (GM_info.addon && GM_info.addon.id) { return GM_info.addon.id; } else if (GM_info.scriptHandler) { return GM_info.scriptHandler.toLowerCase(); } else { return "unknown"; } }; obj.getUid = function () { return user.getUid(); }; obj.getVersion = function () { if (obj.isInject()) { return injectConfig.version; } else { return GM_info.script.version; } }; obj.getBrowser = function () { return browser.getBrowser(); }; obj.getInfo = function () { return { mode: obj.getMode(), aid: obj.getAid(), uid: obj.getUid(), version: obj.getVersion(), browser: obj.getBrowser() }; }; return obj; }); container.define("http", [], function () { var obj = {}; obj.ajax = function (option) { var details = { method: option.type, url: option.url, responseType: option.dataType, onload: function (result) { option.success && option.success(result.response); }, onerror: function (result) { option.error && option.error(result.error); } }; // 提交数据 if (option.data) { if (option.data instanceof FormData) { details.data = option.data; } else { var formData = new FormData(); for (var i in option.data) { formData.append(i, option.data[i]); } details.data = formData; } } // 自定义头 if (option.headers) { details.headers = option.headers; } // 超时 if (option.timeout) { details.timeout = option.timeout; } GM_xmlhttpRequest(details); }; return obj; }); container.define("router", [], function () { var obj = {}; obj.goUrl = function (url) { obj.runCode('location.href = "' + url + '";'); }; obj.openUrl = function (url) { obj.runCode('window.open("' + url + '");'); }; obj.openTab = function (url, active) { GM_openInTab(url, !active); }; obj.runCode = function (script) { var node = document.createElementNS(document.lookupNamespaceURI(null) || "http://www.w3.org/1999/xhtml", "script"); node.textContent = script; (document.head || document.body || document.documentElement || document).appendChild(node); node.parentNode.removeChild(node) }; return obj; }); container.define("logger", ["env", "constant"], function (env, constant) { var obj = { level: 3, constant: { debug: 0, info: 1, warn: 2, error: 3 } }; obj.debug = function (message) { obj.log(message, obj.constant.debug); }; obj.info = function (message) { obj.log(message, obj.constant.info); }; obj.warn = function (message) { obj.log(message, obj.constant.warn); }; obj.error = function (message) { obj.log(message, obj.constant.error); }; obj.log = function (message, level) { if (level < obj.level) { return false; } console.group("[" + constant.name + "]" + env.getMode()); console.log(message); console.groupEnd(); }; obj.setLevel = function (level) { obj.level = level; }; return obj; }); container.define("meta", ["constant", "$"], function (constant, $) { var obj = {}; obj.existMeta = function (name) { name = obj.processName(name); if ($("meta[name='" + name + "']").length) { return true; } else { return false; } }; obj.appendMeta = function (name, content) { name = obj.processName(name); content || (content = "on"); $('').appendTo($("head")); }; obj.processName = function (name) { return constant.name + "::" + name; }; return obj; }); container.define("unsafe_window", [], function () { if (typeof unsafeWindow == "undefined") { return window; } else { return unsafeWindow; } }); container.define("svg_crypt", ["snap"], function (snap) { var obj = {}; obj.getReqData = function () { var reqTime = Math.round(new Date().getTime() / 1000); var reqPoint = obj.getStrPoint("timestamp:" + reqTime); return { req_time: reqTime, req_point: reqPoint }; }; obj.getStrPoint = function (str) { if (str.length < 2) { return "0:0"; } var path = ""; var current, last = str[0].charCodeAt(); var sum = last; for (var i = 1; i < str.length; i++) { current = str[i].charCodeAt(); if (i == 1) { path = path + "M"; } else { path = path + " L"; } path = path + current + " " + last; last = current; sum = sum + current; } path = path + " Z"; var index = sum % str.length; var data = snap.path.getPointAtLength(path, str[index].charCodeAt()); return data.m.x + ":" + data.n.y; }; return obj; }); container.define("calendar", ["object"], function (object) { var obj = {}; obj.formatTime = function (timestamp, format) { timestamp || (timestamp = (new Date()).getTime()); format || (format = "Y-m-d H:i:s"); var date = new Date(timestamp); var year = 1900 + date.getYear(); var month = "0" + (date.getMonth() + 1); var day = "0" + date.getDate(); var hour = "0" + date.getHours(); var minute = "0" + date.getMinutes(); var second = "0" + date.getSeconds(); var vars = { "Y": year, "m": month.substring(month.length - 2, month.length), "d": day.substring(day.length - 2, day.length), "H": hour.substring(hour.length - 2, hour.length), "i": minute.substring(minute.length - 2, minute.length), "s": second.substring(second.length - 2, second.length) }; return obj.replaceVars(vars, format); }; obj.replaceVars = function (vars, value) { object.keys(vars).forEach(function (key) { value = value.replace(key, vars[key]); }); return value; }; return obj; }); /** custom start **/ container.define("constant", ["mode", "browser"], function (mode, browser) { return { name: injectConfig.name, mode: mode.constant, browser: browser.constant, addon: injectConfig.addon, script: injectConfig.script, site: { taobao: "taobao", jd: "jd", kaola: "kaola", guomei: "guomei", yanxuan: "yanxuan", suning: "suning", dangdang: "dangdang", newday: "newday" }, option: { chart_scale: { name: "chart_scale", value: "yes" }, chart_point: { name: "chart_point", value: "yes" }, chart_zoom: { name: "chart_zoom", value: "no" }, taobao_detail: { name: "taobao", value: "yes" }, taobao_shop_coupon: { name: "taobao_shop_coupon", value: "yes" }, taobao_search: { name: "taobao_search", value: "yes" }, taobao_shop: { name: "taobao_shop", value: "yes" }, jd_detail: { name: "jd", value: "yes" }, kaola_detail: { name: "kaola", value: "yes" }, yanxuan_detail: { name: "yanxuan", value: "yes" }, suning_detail: { name: "suning", value: "yes" }, dangdang_detail: { name: "dangdang", value: "yes" }, guomei_detail: { name: "guomei", value: "yes" } } }; }); container.define("resource", [], function () { var obj = {}; obj.getText = function (name) { if (name == "style") { return obj.getStyleText(); } else { return null; } }; obj.getStyleText = function () { return '#tb-cool-area{border:1px solid #eee;margin:0 auto;position:relative;clear:both;display:none}#tb-cool-area .tb-cool-area-home{position:absolute;top:5px;right:10px;z-index:10000}#tb-cool-area .tb-cool-area-home a{color:#515858;font-size:10px;text-decoration:none}#tb-cool-area .tb-cool-area-home a.new-version{color:#ff0036}#tb-cool-area .tb-cool-area-benefit{width:240px;float:left}#tb-cool-area .tb-cool-area-benefit .tb-cool-quan-qrcode{text-align:center;min-height:150px;margin-top:40px}#tb-cool-area .tb-cool-area-benefit .tb-cool-quan-qrcode canvas,#tb-cool-area .tb-cool-area-benefit .tb-cool-quan-qrcode img{margin:0 auto}#tb-cool-area .tb-cool-area-benefit .tb-cool-quan-title{margin-top:20px;color:#000;font-size:14px;font-weight:700;text-align:center}#tb-cool-area .tb-cool-area-benefit .tb-cool-quan-title span{color:#ff0036;font-weight:700}#tb-cool-area .tb-cool-area-benefit .tb-cool-quan-action{margin-top:10px;text-align:center}#tb-cool-area .tb-cool-area-benefit .tb-cool-quan-action a{text-decoration:none}#tb-cool-area .tb-cool-area-benefit .tb-cool-quan-action .tb-cool-quan-button{min-width:120px;padding:0 8px;line-height:35px;color:#fff;background:#ff0036;font-size:13px;font-weight:700;letter-spacing:1.5px;margin:0 auto;text-align:center;border-radius:15px;display:inline-block;cursor:pointer}#tb-cool-area .tb-cool-area-benefit .tb-cool-quan-action .tb-cool-quan-button.quan-none{color:#000;background:#bec5c5}#tb-cool-area .tb-cool-area-history{height:300px;overflow:hidden;position:relative}#tb-cool-area .tb-cool-area-history #tb-cool-area-chart,#tb-cool-area .tb-cool-area-history .tb-cool-area-container{width:100%;height:100%}#tb-cool-area .tb-cool-area-history .tb-cool-history-tip{position:absolute;margin:0;top:50%;left:50%;letter-spacing:1px;font-size:15px;transform:translateX(-50%) translateY(-50%)}#tb-cool-area .tb-cool-area-table{margin-top:10px;position:relative;overflow:hidden}#tb-cool-area .tb-cool-quan-tip{position:absolute;margin:0;top:50%;left:50%;letter-spacing:1px;font-size:15px;opacity:0;transform:translateX(-50%) translateY(-50%)}#tb-cool-area .tb-cool-quan-tip a{color:#333;font-weight:400;text-decoration:none}#tb-cool-area .tb-cool-quan-tip a:hover{color:#ff0036}#tb-cool-area .tb-cool-area-table .tb-cool-quan-table{width:100%;font-size:14px;text-align:center}#tb-cool-area .tb-cool-area-table .tb-cool-quan-table tr td{padding:4px;color:#1c2323;border-top:1px solid #eee;border-left:1px solid #eee}#tb-cool-area .tb-cool-area-table .tb-cool-quan-table tr td span{color:#ff0036;font-weight:700}#tb-cool-area .tb-cool-area-table .tb-cool-quan-table tr td:first-child{border-left:none}#tb-cool-area .tb-cool-area-table .tb-cool-quan-table .tb-cool-quan-link{width:60px;line-height:24px;font-size:12px;background:#ff0036;text-decoration:none;display:inline-block}#tb-cool-area .tb-cool-area-table .tb-cool-quan-table .tb-cool-quan-link-enable{cursor:pointer;color:#fff}#tb-cool-area .tb-cool-area-table .tb-cool-quan-table .tb-cool-quan-link-disable{cursor:default;color:#000;background:#ccc}#tb-cool-area .tb-cool-quan-empty .tb-cool-quan-tip{opacity:1}#tb-cool-area .tb-cool-quan-empty .tb-cool-quan-table{filter:blur(3px);-webkit-filter:blur(3px);-moz-filter:blur(3px);-ms-filter:blur(3px)}.tb-cool-box-area{position:absolute;top:10px;left:5px;z-index:9999}.tb-cool-box-wait{cursor:pointer}.tb-cool-box-already{position:relative}.tb-cool-box-info{width:auto!important;height:auto!important;padding:6px 8px!important;font-size:12px;color:#fff!important;border-radius:15px;cursor:pointer;text-decoration:none!important}.tb-cool-box-info:hover{text-decoration:none!important}.tb-cool-box-info:visited{text-decoration:none!important}.tb-cool-box-info-default{background:#3186fd!important}.tb-cool-box-info-find{background:#ff0036!important}.tb-cool-box-info-empty{color:#000!important;background:#ccc!important}.tb-cool-box-info-translucent{opacity:.33}.mui-zebra-module .tb-cool-box-info{font-size:10px}.zebra-ziying-qianggou .tb-cool-box-area{right:10px;left:auto}.import-shangou-itemcell .tb-cool-box-area{right:10px;left:auto}.item_s_cpb .tb-cool-box-area{top:auto;bottom:10px}.j-mdv-chaoshi .m-floor .tb-cool-box-area a{width:auto;height:auto}.left-wider .proinfo-main{margin-bottom:40px}.detailHd .m-info{margin-bottom:20px}.tb-cool-quan-date{color: #233b3d;font-weight: normal;font-size: 12px;} .tb-cool-area-has-date .tb-cool-quan-qrcode{margin-top: 30px !important;} .tb-cool-area-has-date .tb-cool-quan-title{margin-top: 10px !important;}'; }; return obj; }); container.define("api", ["http", "env", "svg_crypt"], function (http, env, svgCrypt) { var obj = { base: "https://api.newday.me" }; obj.versionQuery = function (callback) { obj.requestApi("/taobao/tool/version", {}, callback); }; obj.itemQuery = function (url, callback) { var data = { item_url: url }; obj.requestApi("/taobao/tool/query", data, callback); }; obj.basicQuery = function (itemId, callback) { var data = { item_id: itemId, source: "taobao" }; obj.requestApi("/taobao/tool/basic", data, callback); }; obj.trendQuery = function (url, callback) { var data = { item_url: url, item_point: svgCrypt.getStrPoint(url) }; obj.requestApi("/taobao/tool/trend", data, callback); }; obj.logOption = function (option, callback) { var data = { option_json: JSON.stringify(option) }; obj.requestApi("/taobao/tool/option", data, callback); }; obj.couponQueryShop = function (itemId, shopId, callback) { http.ajax({ type: "get", url: "https://cart.taobao.com/json/GetPriceVolume.do?sellerId=" + shopId, dataType: "json", success: function (response) { callback && callback(response); }, error: function (error) { callback && callback(""); } }); }; obj.requestApi = function (path, data, callback) { data.mode = env.getMode(); data.aid = env.getAid(); data.uid = env.getUid(); data.version = env.getVersion(); data.browser = env.getBrowser(); http.ajax({ type: "post", url: obj.base + path, dataType: "json", data: data, success: function (response) { callback && callback(response); }, error: function (error) { callback && callback(""); } }); }; return obj; }); container.define("updater", ["config", "calendar", "api"], function (config, calendar, api) { var obj = {}; obj.init = function () { var versionDate = config.getConfig("version_date"); var currentDate = calendar.formatTime(null, "Ymd"); if (!versionDate || versionDate < currentDate) { api.versionQuery(function (response) { config.setConfig("version_date", currentDate); if (response && response.code == 1) { config.setConfig("dialog", response.data.dialog); config.setConfig("version_latest", response.data.version); } }); } }; return obj; }); container.define("core", ["config", "env", "router", "constant", "resource", "updater", "$"], function (config, env, router, constant, resource, updater, $) { var obj = {}; obj.appendStyle = function () { var styleText = resource.getText("style"); $("").text(styleText).appendTo($("head")); }; obj.jumpLink = function (jumpUrl, jumpMode) { switch (jumpMode) { case 9: // self router.goUrl(jumpUrl); break; case 6: // new router.openUrl(jumpUrl); break; case 3: // new & not active router.openTab(jumpUrl, false); break; case 1: // new & active router.openTab(jumpUrl, true); break; } }; obj.jumpCouponLink = function (jumpUrl, jumpMode) { var callback = function () { obj.jumpLink(jumpUrl, jumpMode); }; if (!window.layer || env.getMode() == constant.mode.script) { callback(); } else if (env.getBrowser() != constant.browser.se360 || config.getConfig("dialog") == 0) { callback(); } else if (config.getConfig("remember")) { callback(); } else { layer.open({ type: 1, title: false, closeBtn: false, area: "400px", shade: 0.8, id: "nd-coupon-dialog", btn: ["同意跳转", "还是算了"], btnAlign: "c", zIndex: 199999999, content: '
" + data.act_text + "
"; if (data.act_tip) { html += "" + data.act_tip + "
"; $(".tb-cool-area-benefit").addClass("tb-cool-area-has-date"); } $(".tb-cool-quan-title").html(html); html = '' + data.act_title + ''; $(".tb-cool-quan-action").html(html); } else { html = "券后价 " + data.coupon_price.toFixed(2) + " 元
"; if (data.start_time && data.end_time) { html += "(" + data.start_time + " ~ " + data.end_time + ")
"; $(".tb-cool-area-benefit").addClass("tb-cool-area-has-date"); } $(".tb-cool-quan-title").html(html); html = '领' + data.coupon_money + '元优惠券'; $(".tb-cool-quan-action").html(html); } $(".tb-cool-quan-button.quan-exist").each(function () { var $this = this; var jumpUrl = $($this).attr("data-url"); var jumpMode = parseInt($($this).attr("data-mode")); $this.onclick = function () { core.jumpCouponLink(jumpUrl, jumpMode); }; }); }; obj.showQrcode = function (url) { var type = 0; if (url.length < 80) { type = 5; } var qr = qrcode(type, "M"); qr.addData(url); qr.make(); $(".tb-cool-quan-qrcode").html(qr.createImgTag(4, 2)); }; obj.showText = function (buttonText, infoText) { var infoTextArr = ["移动端快捷购买"]; if (!infoText) { var index = (new Date()).valueOf() % infoTextArr.length; infoText = infoTextArr[index]; } var infoHtml = "" + infoText + "
"; $(".tb-cool-quan-title").html(infoHtml); buttonText || (buttonText = "手机扫一扫"); var buttonHtml = '' + buttonText + ''; $(".tb-cool-quan-action").html(buttonHtml); }; obj.showVersion = function () { var html = '[ 配置 ]'; $(".tb-cool-area-home").html(html); // 打开配置页 $(".nd-open-page-option").each(function () { this.onclick = function () { core.openOptionPage(); }; }); }; obj.showChart = function (itemUrl) { $(".tb-cool-history-tip").html("查询历史价格中..."); api.trendQuery(itemUrl, function (response) { logger.debug(response); obj.trendData = obj.parseTrendResponse(response); obj.showChartRefresh(); }); }; obj.showChartRefresh = function () { obj.showChartData(obj.trendData); }; obj.showChartData = function (trendData) { if (trendData) { var option = obj.buildChartOption(trendData); $(".tb-cool-area-container").html(''); echarts.init(document.getElementById("tb-cool-area-chart")).setOption(option); $(".tb-cool-history-tip").html(""); } else { $(".tb-cool-history-tip").html("暂无商品历史价格信息"); } }; obj.showCouponList = function (itemId, shopId) { api.couponQueryShop(itemId, shopId, function (response) { var couponList; if (response) { couponList = obj.parseCouponListShop(itemId, shopId, response); obj.showCouponListLoginYes(couponList); } else { couponList = obj.parseCouponListPadding(); obj.showCouponListLoginNo(couponList); } }); }; obj.showCouponListLoginYes = function (couponList) { obj.buildCouponListTable(couponList); }; obj.showCouponListLoginNo = function (couponList) { obj.buildCouponListTable(couponList); var loginUrl = obj.buildLoginUrl(); $(".tb-cool-quan-tip").html('登录后可以查看店铺优惠券哦'); $(".tb-cool-area-table").addClass("tb-cool-quan-empty"); }; obj.buildCouponListTable = function (couponList) { var list = object.values(couponList); var compare = function (a, b) { if (a.coupon_money == b.coupon_money) { if (a.coupon_money_start > b.coupon_money_start) { return 1; } else if (a.coupon_money_start == b.coupon_money_start) { return 0; } else { return -1; } } else { if (a.coupon_money > b.coupon_money) { return 1; } else if (a.coupon_money == b.coupon_money) { return 0; } else { return -1; } } }; list.sort(compare); var html = ""; list.forEach(function (item) { html += "