破解百度网盘/百度文库下载限制

【2025】破解百度网盘下载限制,百度文库下载限制,完全免费下载。联系作者/用户QQ群: 882776749

// ==UserScript==
// @name         破解百度网盘/百度文库下载限制
// @namespace    tools
// @version      2.1.0
// @author       大角牛软件科技
// @description  【2025】破解百度网盘下载限制,百度文库下载限制,完全免费下载。联系作者/用户QQ群: 882776749
// @license      AGPL v3
// @icon         https://u2233.vip/favicon.ico
// @match        *://pan.baidu.com/*
// @match        *://www.sse.com.cn/assortment/options/date*
// @match        *://www.zhipin.com/*
// @match        *://wenku.baidu.com/*
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.global.prod.js
// @require      data:application/javascript,%3Bwindow.Vue%20%3D%20Vue%3B
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/index.full.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/echarts.min.js
// @require      data:application/javascript,%3Bwindow.echarts%20%3D%20echarts%3B
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/system.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/extras/named-register.min.js
// @require      data:application/javascript,%3B(typeof%20System!%3D'undefined')%26%26(System%3Dnew%20System.constructor())%3B
// @resource     ElementPlus  https://cdn.jsdelivr.net/npm/[email protected]/dist/index.css
// @connect      dl-test.infiniteworlds.com.cn
// @connect      wan.baidu.com
// @connect      localhost
// @connect      u2233.vip
// @grant        GM_addStyle
// @grant        GM_deleteValue
// @grant        GM_getResourceText
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_xmlhttpRequest
// @grant        unsafeWindow
// @noframes
// ==/UserScript==

(t=>{if(typeof GM_addStyle=="function"){GM_addStyle(t);return}const a=document.createElement("style");a.textContent=t,document.head.append(a)})(' #cd-nav[data-v-9c557335]{position:fixed;bottom:10%;right:10%;z-index:999999999999999}ul[data-v-9c557335],li[data-v-9c557335]{list-style:none;-webkit-user-select:none;user-select:none}.btnBox[data-v-9c557335]{display:flex!important;gap:10px 0;flex-direction:row-reverse}#cd-nav ul[data-v-9c557335]{width:90%;width:400px;position:absolute;margin:0;padding:0;right:0;bottom:0;border-radius:.25em;box-shadow:#959da533 0 8px 24px;background:#fff;visibility:hidden;overflow:hidden;z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transition:-webkit-transform .3s,visibility 0s .3s;-moz-transition:-moz-transform .3s,visibility 0s .3s;transition:transform .3s,visibility 0s .3s}#cd-nav ul li[data-v-9c557335]{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:flex}#cd-nav ul.is-visible[data-v-9c557335]{visibility:visible;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .3s,visibility 0s 0s;-moz-transition:-moz-transform .3s,visibility 0s 0s;transition:transform .3s,visibility 0s 0s}#cd-nav ul.is-visible li[data-v-9c557335]:nth-child(1){-webkit-animation:cd-slide-in-9c557335 .2s;-moz-animation:cd-slide-in-9c557335 .2s;animation:cd-slide-in-9c557335 .2s}#cd-nav ul.is-visible li[data-v-9c557335]:nth-child(2){-webkit-animation:cd-slide-in-9c557335 .3s;-moz-animation:cd-slide-in-9c557335 .3s;animation:cd-slide-in-9c557335 .3s}#cd-nav ul.is-visible li[data-v-9c557335]:nth-child(3){-webkit-animation:cd-slide-in-9c557335 .4s;-moz-animation:cd-slide-in-9c557335 .4s;animation:cd-slide-in-9c557335 .4s}#cd-nav ul.is-visible li[data-v-9c557335]:nth-child(4){-webkit-animation:cd-slide-in-9c557335 .5s;-moz-animation:cd-slide-in-9c557335 .5s;animation:cd-slide-in-9c557335 .5s}#cd-nav ul.is-visible li[data-v-9c557335]:nth-child(5){-webkit-animation:cd-slide-in-9c557335 .6s;-moz-animation:cd-slide-in-9c557335 .6s;animation:cd-slide-in-9c557335 .6s}#cd-nav li>div[data-v-9c557335]{display:block;padding:20px;border-bottom:1px solid #eff2f6;cursor:pointer;box-sizing:border-box;font-size:14px}#cd-nav li>div[data-v-9c557335]:first-child{flex:0 0 250px}#cd-nav li>div[data-v-9c557335]:last-child{flex:1}#cd-nav li:last-child div[data-v-9c557335]{border-bottom:none}.cd-nav-trigger[data-v-9c557335]{position:absolute;bottom:0;right:0;width:44px;height:44px;background:#f56c6c;border-radius:.25em;box-shadow:#959da533 0 8px 24px;overflow:hidden;text-indent:100%;white-space:nowrap;z-index:2;cursor:pointer}.cd-nav-trigger span[data-v-9c557335]{position:absolute;display:block;width:20px;height:2px;background:#fff;top:50%;margin-top:-1px;left:50%;margin-left:-10px;-webkit-transition:background .3s;-moz-transition:background .3s;transition:background .3s}.cd-nav-trigger span[data-v-9c557335]:before,.cd-nav-trigger span[data-v-9c557335]:after{content:"";position:absolute;left:0;background:inherit;width:100%;height:100%;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .3s,background 0s;-moz-transition:-moz-transform .3s,background 0s;transition:transform .3s,background 0s}.cd-nav-trigger span[data-v-9c557335]:before{top:-6px;-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}.cd-nav-trigger span[data-v-9c557335]:after{bottom:-6px;-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}.cd-nav-trigger.menu-is-open[data-v-9c557335]{box-shadow:none}.cd-nav-trigger.menu-is-open span[data-v-9c557335]{background:#e84a6400}.cd-nav-trigger.menu-is-open span[data-v-9c557335]:before,.cd-nav-trigger.menu-is-open span[data-v-9c557335]:after{background:#fff}.cd-nav-trigger.menu-is-open span[data-v-9c557335]:before{top:0;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}.cd-nav-trigger.menu-is-open span[data-v-9c557335]:after{bottom:0;-webkit-transform:rotate(225deg);-moz-transform:rotate(225deg);-ms-transform:rotate(225deg);-o-transform:rotate(225deg);transform:rotate(225deg)}@-webkit-keyframes cd-slide-in-9c557335{0%{-webkit-transform:translateX(100px)}to{-webkit-transform:translateY(0)}}@-moz-keyframes cd-slide-in-9c557335{0%{-moz-transform:translateX(100px)}to{-moz-transform:translateY(0)}}@keyframes cd-slide-in-9c557335{0%{-webkit-transform:translateX(100px);-moz-transform:translateX(100px);-ms-transform:translateX(100px);-o-transform:translateX(100px);transform:translate(100px)}to{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}.el-drawer__header{margin-bottom:0!important}body{font-size:14px!important}a{text-decoration:none!important}:where(*,*:before,*:after){box-sizing:border-box}:where(html){-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;line-height:1.15}:where(body){margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:where(img,picture,video,canvas,svg,iframe,embed,object){display:block}:where(img,svg){height:auto}:where(iframe){border:0}:where(input,button,textarea,select){font:inherit;color:inherit}:where(button,[type=button],[type=reset],[type=submit]){-webkit-appearance:button}:where(textarea){resize:vertical}:where(fieldset){min-width:0;margin:0;padding:.35em .75em .625em;border:1px solid #a9a9a9}:where(legend){padding:0}:where(progress){vertical-align:baseline}:where(ol,ul){list-style:none;margin:0;padding:0}:where(blockquote,q){quotes:none}:where(blockquote:before,blockquote:after,q:before,q:after){content:"";content:none}:where(table){border-collapse:collapse;border-spacing:0}:where(th,td){padding:0;text-align:left}:where(main,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section){display:block}:where(summary){display:list-item}:where(template,[hidden]){display:none}:where(:focus-visible){outline:2px solid Highlight;outline-offset:2px}:where(:focus:not(:focus-visible)){outline:0}:where(html){color-scheme:light dark}:where(html){scrollbar-width:thin;scrollbar-color:#888 transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#888;border-radius:4px}::-webkit-scrollbar-track{background:transparent}:where(iframe){width:100%;height:auto}.content[data-v-f8630f3e]{flex:1;box-sizing:border-box;background-color:#fff}.header[data-v-f8630f3e]{text-align:center;margin-bottom:10px;padding:20px;background:linear-gradient(120deg,#a1c4fd,#c2e9fb);box-shadow:0 4px 6px #0000001a}.header h1[data-v-f8630f3e]{margin:0;color:#2c3e50;font-size:28px}.header p[data-v-f8630f3e]{margin:10px 0 0;color:#7f8c8d;font-size:16px}.task-list[data-v-f8630f3e]{display:grid;padding:10px;box-sizing:border-box;grid-template-columns:repeat(auto-fill,minmax(350px,1fr));gap:14px;margin-top:20px}.task-card[data-v-f8630f3e]{background:#fff;border-radius:12px;box-shadow:0 4px 15px #0000001a;padding:14px;transition:all .3s ease;border-left:5px solid #3498db}.task-card[data-v-f8630f3e]:hover{transform:translateY(-5px);box-shadow:0 8px 25px #00000026}.task-card.processing[data-v-f8630f3e]{border-left-color:#f39c12}.task-card.completed[data-v-f8630f3e]{border-left-color:#27ae60}.task-card.error[data-v-f8630f3e]{border-left-color:#e74c3c}.task-title[data-v-f8630f3e]{font-size:16px;font-weight:600;margin:0 0 10px;color:#2c3e50;display:flex;justify-content:space-between;align-items:center}.task-module[data-v-f8630f3e]{background-color:#ecf0f1;color:#7f8c8d;padding:3px 8px;border-radius:12px;font-size:12px;font-weight:400}.task-info[data-v-f8630f3e]{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:15px 0}.info-item[data-v-f8630f3e]{font-size:14px}.info-label[data-v-f8630f3e]{color:#7f8c8d;font-weight:500}.info-value[data-v-f8630f3e]{color:#2c3e50;font-weight:600;margin-top:8px;word-break:break-all}.task-status[data-v-f8630f3e]{padding:8px 12px;border-radius:20px;font-size:13px;font-weight:500;text-align:center;margin-top:10px}.status-pending[data-v-f8630f3e]{background-color:#f8f9fa;color:#6c757d}.status-processing[data-v-f8630f3e]{background-color:#fff3cd;color:#856404}.status-completed[data-v-f8630f3e]{background-color:#d4edda;color:#155724}.status-error[data-v-f8630f3e]{background-color:#f8d7da;color:#721c24}.progress-bar[data-v-f8630f3e]{height:8px;background-color:#ecf0f1;border-radius:4px;margin:15px 0;overflow:hidden}.progress-fill[data-v-f8630f3e]{height:100%;background:linear-gradient(90deg,#3498db,#2ecc71);border-radius:4px;transition:width .3s ease}.loading[data-v-f8630f3e]{text-align:center;padding:40px;color:#7f8c8d}.loading-spinner[data-v-f8630f3e]{border:4px solid #f3f3f3;border-top:4px solid #3498db;border-radius:50%;width:40px;height:40px;animation:spin-f8630f3e 1s linear infinite;margin:0 auto 20px}@keyframes spin-f8630f3e{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.empty-state[data-v-f8630f3e]{text-align:center;padding:60px 20px;color:#7f8c8d}.empty-state i[data-v-f8630f3e]{font-size:48px;margin-bottom:20px;display:block}#el[data-v-f8630f3e]{display:flex;justify-content:space-between}.data-analysis-tool[data-v-3be403ae]{background:#fff;margin-top:40px}.date-selector[data-v-3be403ae]{display:flex;justify-content:center;gap:10px;align-items:center;margin-bottom:20px}.cache-info[data-v-3be403ae]{font-size:14px;color:#666;margin-bottom:8px}.loading-info[data-v-3be403ae]{text-align:center;margin:20px 0}.charts-container[data-v-3be403ae]{display:grid;grid-template-columns:repeat(1,1fr);gap:20px}.chart-wrapper[data-v-3be403ae]{background:#fff;padding:15px;border-radius:4px;box-shadow:0 2px 4px #0000001a}.chart-title[data-v-3be403ae]{font-weight:700;margin-bottom:10px}.chart-container[data-v-3be403ae]{height:350px;background:#f9f9f9;margin-bottom:10px}.chart-time-slider[data-v-3be403ae]{padding:0 10px}@media (max-width: 1600px){.charts-container[data-v-3be403ae]{grid-template-columns:repeat(1,1fr)}}@media (max-width: 1200px){.charts-container[data-v-3be403ae]{grid-template-columns:repeat(1,1fr)}}@media (max-width: 768px){.charts-container[data-v-3be403ae]{grid-template-columns:1fr}.date-selector[data-v-3be403ae]{flex-direction:column;align-items:flex-start}} ');

System.addImportMap({ imports: {"vue":"user:vue","element-plus":"user:element-plus","echarts":"user:echarts"} });
System.set("user:vue", (()=>{const _=Vue;('default' in _)||(_.default=_);return _})());
System.set("user:element-plus", (()=>{const _=ElementPlus;('default' in _)||(_.default=_);return _})());
System.set("user:echarts", (()=>{const _=echarts;('default' in _)||(_.default=_);return _})());

System.register("./__entry.js", ['./__monkey.entry-DzHbnFBR.js'], (function (exports, module) {
	'use strict';
	return {
		setters: [null],
		execute: (function () {



		})
	};
}));

System.register("./__monkey.entry-DzHbnFBR.js", ['vue', 'element-plus'], (function (exports, module) {
  'use strict';
  var createApp, resolveComponent, createElementBlock, openBlock, createVNode, createBlock, createCommentVNode, resolveDynamicComponent, createElementVNode, normalizeClass, Fragment, renderList, withCtx, createTextVNode, toDisplayString, ElementPlus, ElMessage;
  return {
    setters: [module => {
      createApp = module.createApp;
      resolveComponent = module.resolveComponent;
      createElementBlock = module.createElementBlock;
      openBlock = module.openBlock;
      createVNode = module.createVNode;
      createBlock = module.createBlock;
      createCommentVNode = module.createCommentVNode;
      resolveDynamicComponent = module.resolveDynamicComponent;
      createElementVNode = module.createElementVNode;
      normalizeClass = module.normalizeClass;
      Fragment = module.Fragment;
      renderList = module.renderList;
      withCtx = module.withCtx;
      createTextVNode = module.createTextVNode;
      toDisplayString = module.toDisplayString;
    }, module => {
      ElementPlus = module.default;
      ElMessage = module.ElMessage;
    }],
    execute: (function () {

      const scriptRel = /* @__PURE__ */ function detectScriptRel() {
        const relList = typeof document !== "undefined" && document.createElement("link").relList;
        return relList && relList.supports && relList.supports("modulepreload") ? "modulepreload" : "preload";
      }();
      const assetsURL = function(dep) {
        return "/" + dep;
      };
      const seen = {};
      const __vitePreload = function preload(baseModule, deps, importerUrl) {
        let promise = Promise.resolve();
        if (deps && deps.length > 0) {
          let allSettled = function(promises$2) {
            return Promise.all(promises$2.map((p$1) => Promise.resolve(p$1).then((value$1) => ({
              status: "fulfilled",
              value: value$1
            }), (reason) => ({
              status: "rejected",
              reason
            }))));
          };
          document.getElementsByTagName("link");
          const cspNonceMeta = document.querySelector("meta[property=csp-nonce]");
          const cspNonce = cspNonceMeta?.nonce || cspNonceMeta?.getAttribute("nonce");
          promise = allSettled(deps.map((dep) => {
            dep = assetsURL(dep);
            if (dep in seen) return;
            seen[dep] = true;
            const isCss = dep.endsWith(".css");
            const cssSelector = isCss ? '[rel="stylesheet"]' : "";
            if (document.querySelector(`link[href="${dep}"]${cssSelector}`)) return;
            const link = document.createElement("link");
            link.rel = isCss ? "stylesheet" : scriptRel;
            if (!isCss) link.as = "script";
            link.crossOrigin = "";
            link.href = dep;
            if (cspNonce) link.setAttribute("nonce", cspNonce);
            document.head.appendChild(link);
            if (isCss) return new Promise((res, rej) => {
              link.addEventListener("load", res);
              link.addEventListener("error", () => rej(/* @__PURE__ */ new Error(`Unable to preload CSS for ${dep}`)));
            });
          }));
        }
        function handlePreloadError(err$2) {
          const e$1 = new Event("vite:preloadError", { cancelable: true });
          e$1.payload = err$2;
          window.dispatchEvent(e$1);
          if (!e$1.defaultPrevented) throw err$2;
        }
        return promise.then((res) => {
          for (const item of res || []) {
            if (item.status !== "rejected") continue;
            handlePreloadError(item.reason);
          }
          return baseModule().catch(handlePreloadError);
        });
      };
      const _export_sfc = exports("_", (sfc, props) => {
        const target = sfc.__vccOpts || sfc;
        for (const [key, val] of props) {
          target[key] = val;
        }
        return target;
      });
      const _sfc_main$1 = {
        name: "HamburgerMenu",
        props: {
          menuItems: {
            type: Array,
            required: true,
            default: () => []
          }
        },
        data() {
          return {
            menuOpen: false,
            isHidden: false
          };
        },
        methods: {
          toggleMenu() {
            this.menuOpen = !this.menuOpen;
          },
          onItemClick(index) {
            this.$emit("itemClick", index);
          },
          btnClickEvent(index1, index2) {
            this.$emit("btnClickEvent", {
              index1,
              index2
            });
          }
        }
      };
      const _hoisted_1 = {
        id: "cd-nav",
        class: "is-fixed"
      };
      const _hoisted_2 = {
        key: 0,
        class: "btnBox"
      };
      const _hoisted_3 = ["onClick"];
      function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_el_link = resolveComponent("el-link");
        return openBlock(), createElementBlock("div", _hoisted_1, [
          createElementVNode("a", {
            class: normalizeClass(["cd-nav-trigger", { "menu-is-open": $data.menuOpen }]),
            onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleMenu && $options.toggleMenu(...args))
          }, _cache[1] || (_cache[1] = [
            createElementVNode("span", null, null, -1)
          ]), 2),
          createElementVNode("ul", {
            class: normalizeClass(["has-transitions", "is-hidden", { "is-visible": $data.menuOpen }])
          }, [
            (openBlock(true), createElementBlock(Fragment, null, renderList($props.menuItems, (item, index) => {
              return openBlock(), createElementBlock("li", { key: index }, [
                createElementVNode("div", null, [
                  createVNode(_component_el_link, {
                    type: "primary",
                    disabled: item.disabled,
                    onClick: ($event) => $options.onItemClick(index)
                  }, {
                    default: withCtx(() => [
                      createTextVNode(toDisplayString(item.text), 1)
                    ]),
                    _: 2
                  }, 1032, ["disabled", "onClick"])
                ]),
                item.btns && item.btns.length ? (openBlock(), createElementBlock("div", _hoisted_2, [
                  (openBlock(true), createElementBlock(Fragment, null, renderList(item.btns, (btn, index2) => {
                    return openBlock(), createElementBlock("div", {
                      key: index2,
                      onClick: ($event) => $options.btnClickEvent(index, index2)
                    }, [
                      createVNode(_component_el_link, { type: "warning" }, {
                        default: withCtx(() => [
                          createTextVNode(toDisplayString(btn.text), 1)
                        ]),
                        _: 2
                      }, 1024)
                    ], 8, _hoisted_3);
                  }), 128))
                ])) : createCommentVNode("", true)
              ]);
            }), 128))
          ], 2)
        ]);
      }
      const HamburgerMenu = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1], ["__scopeId", "data-v-9c557335"]]);
      const _sfc_main = {
        name: "App",
        components: {
          HamburgerMenu
        },
        data() {
          return {
            currentComponent: null,
            config: {
              text: {
                callme: "请全屏截图并发给管理员",
                error: "出现异常!"
              }
            }
          };
        },
        computed: {
          tingConfig() {
            return $tingConfig || { qq: "882776749" };
          },
          menuItems() {
            let that = this;
            let items = [
              // logo制作
              // https://www.logomaker.com.cn/guide#/generate?title=%E5%A4%A7%E8%A7%92%E7%89%9B&slogan=Big%20Horn%20Bull&brand_true_slogan=&industry_id=139&industry_tag=&industry_keyword=%E8%BD%AF%E4%BB%B6%E5%BA%94%E7%94%A8&sceneSelect=b&source=new&preview_dialog=true
              {
                text: "百度文库 | 下载当前文档",
                disabled: !window.location.href.includes("wenku.baidu.com/view"),
                click() {
                  let url = window.location.href;
                  url = encodeURIComponent(url);
                  window.open(`https://u2233.vip/BDWK/index.html?url=${url}`);
                  document.getElementsByClassName("cd-nav-trigger")[0].click();
                },
                btns: [
                  {
                    text: "💡 使用教程",
                    click: () => {
                      window.open("https://u2233.vip/BDWK/word.html", "_blank");
                    }
                  }
                ]
              },
              {
                text: "百度网盘 | 领取极速下载卷",
                disabled: !window.location.href.includes("pan.baidu.com"),
                async click() {
                  $createVerifyCodeModal(async () => {
                    const component = await __vitePreload(() => module.import('./index-C6Br58wp-CNrm4cDA.js'), void 0 );
                    that.currentComponent = component.default;
                    that.$nextTick(() => {
                      that.$refs.dynamicComponent.open();
                    });
                  });
                  document.getElementsByClassName("cd-nav-trigger")[0].click();
                },
                btns: [
                  {
                    text: "💡 使用教程",
                    click: () => {
                      window.open("https://u2233.vip/BDWP/word.html", "_blank");
                    }
                  }
                ]
              },
              {
                text: "BOOS直聘 | 抓取数据",
                disabled: !window.location.href.includes("zhipin.com/web/geek/jobs"),
                async click() {
                  $createVerifyCodeModal(async (captcha) => {
                    const capStatus = await $httpRequest({
                      url: `https://dl-test.infiniteworlds.com.cn/TING/checkCaptcha?captcha=${captcha}`
                    });
                    if (capStatus.data.code != 0) {
                      ElMessage.warning(capStatus.data.message);
                      return;
                    }
                    const component = await __vitePreload(() => module.import('./index-BUsTNQud-vB6-WEWk.js'), void 0 );
                    that.currentComponent = component.default;
                    that.$nextTick(() => {
                      if (that.$refs.dynamicComponent && typeof that.$refs.dynamicComponent.open === "function") {
                        that.$refs.dynamicComponent.open();
                      }
                    });
                  });
                  document.getElementsByClassName("cd-nav-trigger")[0].click();
                },
                btns: [
                  {
                    text: "💡 使用教程",
                    click: () => {
                      window.open("https://u2233.vip/BOSS/word.html", "_blank");
                    }
                  }
                ]
              },
              {
                text: `点击联系开发者/QQ群(${this.tingConfig.qq})`,
                click() {
                  window.open(
                    `https://jq.qq.com/?_wv=1027&k=${this.tingConfig.qq}`,
                    "_blank"
                  );
                }
              }
            ];
            return items.sort((a, b) => {
              const aHasDisabled = "disabled" in a;
              const bHasDisabled = "disabled" in b;
              if (!aHasDisabled && bHasDisabled) return 1;
              if (aHasDisabled && !bHasDisabled) return -1;
              if (!aHasDisabled && !bHasDisabled) return 0;
              return (a.disabled ? 1 : 0) - (b.disabled ? 1 : 0);
            });
          }
        },
        methods: {
          // 操作按钮点击事件
          btnClickEvent({ index1, index2 }) {
            this.menuItems[index1].btns[index2].click();
          },
          // 上海证券数据分析
          async ShangHaiZhengQuan() {
            const component = await __vitePreload(() => module.import('./index-D_oBu48O-BWn9ZtuK.js'), void 0 );
            const pageContent = document.querySelector(".page_content");
            const appContainer2 = document.createElement("div");
            appContainer2.style.position = "relative";
            appContainer2.style.margin = "0 0 50px 0";
            pageContent.appendChild(appContainer2);
            createApp(component.default).mount(appContainer2);
          },
          async itemClick(index) {
            try {
              this.menuItems[index].click();
            } catch (error) {
              ElMessage.warning(
                `${this.config.text.error} ${this.config.text.callme} :${error}`
              );
            }
          }
        }
      };
      function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_HamburgerMenu = resolveComponent("HamburgerMenu");
        return openBlock(), createElementBlock("div", null, [
          createVNode(_component_HamburgerMenu, {
            "menu-items": $options.menuItems,
            onItemClick: $options.itemClick,
            onBtnClickEvent: $options.btnClickEvent
          }, null, 8, ["menu-items", "onItemClick", "onBtnClickEvent"]),
          $data.currentComponent ? (openBlock(), createBlock(resolveDynamicComponent($data.currentComponent), {
            key: 0,
            ref: "dynamicComponent"
          }, null, 512)) : createCommentVNode("", true)
        ]);
      }
      const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
      const cssLoader = (e) => {
        const t = GM_getResourceText(e);
        return GM_addStyle(t), t;
      };
      cssLoader("ElementPlus");
      var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)();
      var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)();
      var _GM_xmlhttpRequest = /* @__PURE__ */ (() => typeof GM_xmlhttpRequest != "undefined" ? GM_xmlhttpRequest : void 0)();
      const apis = {
        GM_xmlhttpRequest: _GM_xmlhttpRequest,
        GM_setValue: _GM_setValue,
        GM_getValue: _GM_getValue
      };
      Object.keys(apis).forEach((key) => {
        window[key] = apis[key];
        if (typeof unsafeWindow !== "undefined") {
          unsafeWindow[key] = apis[key];
        }
      });
      const appContainer = document.createElement("div");
      document.body.appendChild(appContainer);
      function initApp() {
        if (window.$tingConfig) {
          createApp(App).use(ElementPlus).mount(appContainer);
          return;
        }
        const script = document.createElement("script");
        script.src = "https://u2233.vip/static/js/public.js";
        script.async = true;
        script.crossOrigin = "anonymous";
        script.onload = () => {
          createApp(App).use(ElementPlus).mount(appContainer);
        };
        script.onerror = (error) => {
          createApp(App).use(ElementPlus).mount(appContainer);
        };
        document.head.appendChild(script);
      }
      initApp();

    })
  };
}));

System.register("./index-C6Br58wp-CNrm4cDA.js", ['element-plus', 'vue', './__monkey.entry-DzHbnFBR.js'], (function (exports, module) {
  'use strict';
  var ElMessage, resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createElementBlock, Fragment, renderList, normalizeClass, createCommentVNode, toDisplayString, normalizeStyle, _export_sfc;
  return {
    setters: [module => {
      ElMessage = module.ElMessage;
    }, module => {
      resolveComponent = module.resolveComponent;
      createBlock = module.createBlock;
      openBlock = module.openBlock;
      withCtx = module.withCtx;
      createElementVNode = module.createElementVNode;
      createElementBlock = module.createElementBlock;
      Fragment = module.Fragment;
      renderList = module.renderList;
      normalizeClass = module.normalizeClass;
      createCommentVNode = module.createCommentVNode;
      toDisplayString = module.toDisplayString;
      normalizeStyle = module.normalizeStyle;
    }, module => {
      _export_sfc = module._;
    }],
    execute: (function () {

      const config = $baiDuYunLingJuanConfig;
      window.addEventListener("message", (e) => {
        if (e.data.type === "start") {
          start();
        }
      });
      async function start(obj) {
        const tasks = await getAllTask();
        Promise.all(
          tasks.map((item) => getOneDownload(item.selectGameParams, item))
        ).then();
      }
      async function getAllTask() {
        const channelArr = config.channelArr;
        const promises = channelArr.map(
          (channel) => new Promise((resolve) => {
            $httpRequest({
              method: "GET",
              url: `https://wan.baidu.com/gameapi?action=bonus_pan_task_list&channel=${channel}`,
              headers: {
                "Content-Type": "application/json"
              }
            }).then((response) => {
              resolve(response.data);
            });
          })
        );
        const task_result = await Promise.all(promises);
        const taskOneWei = [];
        task_result.forEach((item) => {
          if (item.errorNo === 0 && item.result && item.result.data) {
            item.result.data.forEach((task) => {
              if (Array.isArray(task.data)) {
                taskOneWei.push(...task.data);
              }
            });
          }
        });
        const taskMianFei = taskOneWei.filter(
          (item) => config.taskModules.includes(item.taskModule)
        );
        const taskReal = taskMianFei.map((item) => {
          let selectGame = getRandomItem(item.taskGames);
          return {
            ...item,
            selectGame,
            selectGameParams: {
              ...url2obj(selectGame.gameUrl)
            }
          };
        });
        send_message({ type: "task_result", taskReal });
        return taskReal;
      }
      async function getOneDownload({ gameId, taskId, activityId }, task) {
        const sendApi = (params) => {
          $httpRequest({
            method: "GET",
            url: `https://wan.baidu.com/gameapi?${obj2url(params)}`,
            headers: {
              "Content-Type": "application/json"
            }
          }).then(async (response) => {
            const data = response.data;
            if (data.errorNo === 110503 || data.result && data.result.data && data.result.data.remainingTaskTime === 0) {
              await setStorage(getId(taskId), 0);
              return send_message({
                type: "task_status_update",
                taskId: params.taskId,
                status: `completed`,
                progress: 100
              });
            }
            if (data.errorNo !== 0) {
              return send_message({
                type: "task_status_update",
                taskId: params.taskId,
                errorNo: data.errorNo,
                status: `error`,
                progress: 40,
                errorMessage: `${data.message}(请刷新页面 或 重新登录 )`
              });
            }
            if (data.result && data.result.data && data.result.data.remainingTaskTime) {
              let finiTime = task.eachTaskNeedPlayTimeSecs - data.result.data.remainingTaskTime;
              send_message({
                type: "task_status_update",
                taskId: params.taskId,
                status: `processing`,
                needTime: task.eachTaskNeedPlayTimeSecs - finiTime,
                progress: parseInt(
                  finiTime / task.eachTaskNeedPlayTimeSecs * 100
                )
              });
              await setStorage(getId(taskId), data.result.data.remainingTaskTime);
            }
            if (data.result && data.result.data && data.result.data.nextReportInterval) {
              setTimeout(() => {
                sendApi({ ...params, isFirstReport: 0 });
              }, 10 * 1e3);
            }
          });
        };
        sendApi({
          gameId,
          isFirstReport: await getStorage(getId(taskId)) ? 0 : 1,
          taskId,
          activityId,
          action: "bonus_task_game_play_report"
        });
      }
      function send_message(data) {
        window.postMessage({
          type: data.type,
          data
        });
      }
      function getId(taskId) {
        var date = /* @__PURE__ */ new Date();
        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        var day = date.getDate();
        return year + "_" + month + "_" + day + "_" + taskId;
      }
      function getRandomItem(arr) {
        return arr[Math.floor(Math.random() * arr.length)];
      }
      function url2obj(url) {
        var obj = {};
        var arr = url.split("?")[1].split("&");
        for (var i = 0; i < arr.length; i++) {
          var item = arr[i].split("=");
          if (item[0].trim()) {
            obj[item[0]] = item[1];
          }
        }
        return obj;
      }
      function obj2url(obj) {
        var url = "";
        for (var key in obj) {
          url += key + "=" + obj[key] + "&";
        }
        return url.substring(0, url.length - 1);
      }
      function setStorage(key, value) {
        return new Promise((resolve) => {
          GM_setValue(key, value);
          resolve();
        });
      }
      function getStorage(key) {
        return new Promise((resolve) => {
          resolve(GM_getValue(key, null));
        });
      }
      const _sfc_main = {
        name: "BaiDuYunLingJuan",
        data() {
          return {
            drawer: false,
            tasks: [],
            loading: false
          };
        },
        methods: {
          open() {
            this.drawer = true;
            if (this.tasks.length == 0) {
              this.handleStartTask();
            }
          },
          handleStartTask() {
            this.loading = true;
            window.postMessage({ type: "start" }, "*");
          },
          handleMessage(event) {
            let eventData = event.data;
            if (eventData.type === "task_result") {
              this.tasks = eventData.data.taskReal.map((task) => ({
                ...task,
                status: "pending",
                progress: 0
              }));
              this.loading = false;
            }
            if (event.data.type === "task_status_update") {
              const taskIndex = this.tasks.findIndex((task) => {
                return +task?.taskId === +eventData.data.taskId;
              });
              if (taskIndex !== -1) {
                this.tasks[taskIndex] = {
                  ...this.tasks[taskIndex],
                  ...eventData.data
                };
                if (eventData.data.errorNo === 110008) {
                  ElMessage({
                    message: `请登录【百度网盘网页版】后再领取下载卷`,
                    duration: 5e3,
                    type: "warning"
                  });
                }
              } else {
                console.log(`找不到:${taskIndex}`);
              }
            }
          },
          init() {
            window.addEventListener("message", this.handleMessage);
          }
        },
        mounted() {
          this.init();
        },
        beforeUnmount() {
          window.removeEventListener("message", this.handleMessage);
        }
      };
      const _hoisted_1 = { id: "el" };
      const _hoisted_2 = { class: "content" };
      const _hoisted_3 = {
        key: 0,
        class: "loading"
      };
      const _hoisted_4 = {
        key: 1,
        class: "empty-state"
      };
      const _hoisted_5 = {
        key: 2,
        class: "task-list"
      };
      const _hoisted_6 = { class: "task-title" };
      const _hoisted_7 = { class: "task-module" };
      const _hoisted_8 = { class: "task-info" };
      const _hoisted_9 = { class: "info-item" };
      const _hoisted_10 = { class: "info-value" };
      const _hoisted_11 = { class: "info-item" };
      const _hoisted_12 = { class: "info-value" };
      const _hoisted_13 = {
        key: 0,
        class: "progress-bar"
      };
      const _hoisted_14 = { key: 0 };
      const _hoisted_15 = { key: 1 };
      const _hoisted_16 = { key: 2 };
      const _hoisted_17 = { key: 3 };
      const _hoisted_18 = { key: 4 };
      function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_el_drawer = resolveComponent("el-drawer");
        return openBlock(), createBlock(_component_el_drawer, {
          modelValue: $data.drawer,
          "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.drawer = $event),
          direction: "ltr",
          title: "百度下载卷领取助手",
          size: "60%"
        }, {
          default: withCtx(() => [
            createElementVNode("div", _hoisted_1, [
              createElementVNode("div", _hoisted_2, [
                $data.loading ? (openBlock(), createElementBlock("div", _hoisted_3, _cache[1] || (_cache[1] = [
                  createElementVNode("div", { class: "loading-spinner" }, null, -1),
                  createElementVNode("p", null, "正在加载可用下载卷...", -1)
                ]))) : $data.tasks.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_4, _cache[2] || (_cache[2] = [
                  createElementVNode("div", null, "📋", -1),
                  createElementVNode("h3", null, "暂无进行中任务,点击开始领取", -1)
                ]))) : (openBlock(), createElementBlock("div", _hoisted_5, [
                  (openBlock(true), createElementBlock(Fragment, null, renderList($data.tasks, (task, index2) => {
                    return openBlock(), createElementBlock("div", {
                      key: index2,
                      class: normalizeClass(["task-card", {
                        processing: task.status === "processing",
                        completed: task.status === "completed",
                        error: task.status === "error"
                      }])
                    }, [
                      createElementVNode("div", _hoisted_6, [
                        createElementVNode("span", null, "极速下载卷 #" + toDisplayString(index2 + 1), 1),
                        createElementVNode("span", _hoisted_7, toDisplayString(task.taskModule || "未知模块"), 1)
                      ]),
                      createElementVNode("div", _hoisted_8, [
                        createElementVNode("div", _hoisted_9, [
                          _cache[3] || (_cache[3] = createElementVNode("div", { class: "info-label" }, "程序ID", -1)),
                          createElementVNode("div", _hoisted_10, toDisplayString(task.selectGameParams?.gameId || "N/A"), 1)
                        ]),
                        createElementVNode("div", _hoisted_11, [
                          _cache[4] || (_cache[4] = createElementVNode("div", { class: "info-label" }, "任务ID", -1)),
                          createElementVNode("div", _hoisted_12, toDisplayString(index2 + 1), 1)
                        ])
                      ]),
                      task.progress ? (openBlock(), createElementBlock("div", _hoisted_13, [
                        createElementVNode("div", {
                          class: "progress-fill",
                          style: normalizeStyle({ width: task.progress + "%" })
                        }, null, 4)
                      ])) : createCommentVNode("", true),
                      createElementVNode("div", {
                        class: normalizeClass(["task-status", {
                          "status-pending": task.status === "pending",
                          "status-processing": task.status === "processing",
                          "status-completed": task.status === "completed",
                          "status-error": task.status === "error"
                        }])
                      }, [
                        task.status === "pending" ? (openBlock(), createElementBlock("span", _hoisted_14, "等待领取")) : task.status === "processing" ? (openBlock(), createElementBlock("span", _hoisted_15, "领取中... " + toDisplayString(task.progress) + "%", 1)) : task.status === "completed" ? (openBlock(), createElementBlock("span", _hoisted_16, "✅ 已领取,明天再来吧~")) : task.status === "error" ? (openBlock(), createElementBlock("span", _hoisted_17, "❌ 错误: " + toDisplayString(task.errorMessage), 1)) : (openBlock(), createElementBlock("span", _hoisted_18, "未知状态"))
                      ], 2)
                    ], 2);
                  }), 128))
                ])),
                _cache[5] || (_cache[5] = createElementVNode("p", { style: { "color": "orange", "text-align": "center", "margin-top": "20px" } }, " 领劵过程中请勿刷新页面,可能影响领卷。可以点击黑色区域,切到后台运行 ", -1))
              ])
            ])
          ]),
          _: 1
        }, 8, ["modelValue"]);
      }
      const index = exports("default", /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-f8630f3e"]]));

    })
  };
}));

System.register("./index-BUsTNQud-vB6-WEWk.js", ['element-plus', 'vue', './__monkey.entry-DzHbnFBR.js'], (function (exports, module) {
  'use strict';
  var ElMessage, resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createVNode, createElementBlock, createTextVNode, toDisplayString, Fragment, renderList, _export_sfc;
  return {
    setters: [module => {
      ElMessage = module.ElMessage;
    }, module => {
      resolveComponent = module.resolveComponent;
      createBlock = module.createBlock;
      openBlock = module.openBlock;
      withCtx = module.withCtx;
      createElementVNode = module.createElementVNode;
      createVNode = module.createVNode;
      createElementBlock = module.createElementBlock;
      createTextVNode = module.createTextVNode;
      toDisplayString = module.toDisplayString;
      Fragment = module.Fragment;
      renderList = module.renderList;
    }, module => {
      _export_sfc = module._;
    }],
    execute: (function () {

      const _sfc_main = {
        name: "BossXiaZaiGongZuo",
        data() {
          return {
            drawer: false,
            jobs: [],
            currentPage: 1,
            pageSize: 10,
            downloading: false,
            autoDetect: false,
            autoDetectTimer: null
          };
        },
        computed: {
          totalPages() {
            return Math.ceil(this.jobs.length / this.pageSize);
          },
          paginatedJobs() {
            const start = (this.currentPage - 1) * this.pageSize;
            const end = start + this.pageSize;
            return this.jobs.slice(start, end);
          }
        },
        methods: {
          open() {
            this.drawer = true;
          },
          // 切换自动检测
          toggleAutoDetect() {
            this.autoDetect = !this.autoDetect;
            if (this.autoDetect) {
              ElMessage.success("已开启自动爬取岗位功能");
              this.getJobs();
              this.autoDetectTimer = setInterval(() => {
                this.getJobs();
              }, 3e3);
            } else {
              this.stopInterval();
              ElMessage.info("已暂停爬取岗位功能");
            }
          },
          stopInterval() {
            if (this.autoDetectTimer) {
              clearInterval(this.autoDetectTimer);
              this.autoDetectTimer = null;
            }
          },
          // 爬取工作
          getJobs() {
            try {
              const jobContainer = document.querySelector(
                "#wrap > div.page-jobs-main"
              );
              if (!jobContainer) {
                if (this.autoDetect) {
                  console.log("未找到岗位列表容器");
                } else {
                  ElMessage.error(
                    "未找到岗位列表容器,请确保在BOSS直聘岗位搜索页面使用"
                  );
                }
                return;
              }
              const vueInstance = jobContainer.__vue__;
              if (!vueInstance || !vueInstance.jobList) {
                if (this.autoDetect) {
                  console.log("无法爬取岗位数据");
                } else {
                  ElMessage.error("无法爬取岗位数据,请刷新页面后重试");
                }
                return;
              }
              const rawJobs = vueInstance.jobList || [];
              console.log("原始岗位数据:", rawJobs);
              const formattedJobs = rawJobs.map((job) => {
                return {
                  jobId: job.jobId,
                  encryptJobId: job.encryptJobId,
                  jobName: job.jobName,
                  brandName: job.brandName,
                  salaryDesc: job.salaryDesc,
                  jobLabels: job.jobLabels || [],
                  skills: job.skills || [],
                  areaDistrict: job.areaDistrict,
                  jobExperience: job.jobExperience,
                  jobDegree: job.jobDegree,
                  cityName: job.cityName,
                  brandLogo: job.brandLogo,
                  brandStageName: job.brandStageName,
                  brandIndustry: job.brandIndustry,
                  brandScaleName: job.brandScaleName,
                  bossName: job.bossName,
                  bossTitle: job.bossTitle,
                  bossAvatar: job.bossAvatar,
                  goldHunter: job.goldHunter,
                  jobUrl: `https://www.zhipin.com/job_detail/${job.encryptJobId}.html`,
                  securityId: job.securityId,
                  lid: job.lid
                };
              });
              const uniqueJobs = [];
              const jobIds = /* @__PURE__ */ new Set();
              formattedJobs.forEach((job) => {
                if (!jobIds.has(job.encryptJobId)) {
                  jobIds.add(job.encryptJobId);
                  uniqueJobs.push(job);
                }
              });
              if (this.jobs.length === uniqueJobs.length) {
                ElMessage({
                  message: "当前页面没有数据了~",
                  type: "success",
                  duration: 5e3
                });
                this.autoDetect = false;
                this.stopInterval();
                return;
              }
              this.jobs = uniqueJobs;
              if (this.autoDetect) {
                ElMessage.success(`自动检测: 爬取到 ${uniqueJobs.length} 个岗位信息`);
                window.scrollTo({
                  top: document.body.scrollHeight,
                  behavior: "smooth"
                });
              } else {
                ElMessage({
                  message: `成功爬取到 ${uniqueJobs.length} 个岗位信息`,
                  type: "success"
                });
              }
            } catch (error) {
              console.error("爬取岗位信息失败:", error);
              if (!this.autoDetect) {
                ElMessage.error("爬取岗位信息失败: " + error.message);
              }
            }
          },
          // 下载所有岗位
          async downloadAll() {
            if (this.jobs.length === 0) {
              ElMessage.warning("没有岗位信息可下载");
              return;
            }
            this.downloading = true;
            try {
              this.exportToCSV(this.jobs);
              ElMessage({
                message: `成功下载 ${this.jobs.length} 个岗位信息`,
                type: "success"
              });
            } catch (error) {
              console.error("下载失败:", error);
              ElMessage.error("下载失败: " + error.message);
            } finally {
              this.downloading = false;
            }
          },
          // 导出为CSV - 优化大数据量处理
          exportToCSV(jobsData) {
            const headers = [
              "职位名称",
              "公司名称",
              "薪资",
              "城市",
              "地区",
              "经验要求",
              "学历要求",
              "技能要求",
              "标签",
              "公司行业",
              "公司规模",
              "HR姓名",
              "HR职位",
              "职位链接"
            ];
            const chunkSize = 1e3;
            const chunks = [];
            for (let i = 0; i < jobsData.length; i += chunkSize) {
              chunks.push(jobsData.slice(i, i + chunkSize));
            }
            const csvChunks = chunks.map((chunk) => {
              return chunk.map(
                (job) => [
                  `"${this.escapeCSVField(job.jobName || "")}"`,
                  `"${this.escapeCSVField(job.brandName || "")}"`,
                  `"${this.escapeCSVField(job.salaryDesc || "")}"`,
                  `"${this.escapeCSVField(job.cityName || "")}"`,
                  `"${this.escapeCSVField(job.areaDistrict || "")}"`,
                  `"${this.escapeCSVField(job.jobExperience || "")}"`,
                  `"${this.escapeCSVField(job.jobDegree || "")}"`,
                  `"${this.escapeCSVField((job.skills || []).join("|"))}"`,
                  `"${this.escapeCSVField((job.jobLabels || []).join("|"))}"`,
                  `"${this.escapeCSVField(job.brandIndustry || "")}"`,
                  `"${this.escapeCSVField(job.brandScaleName || "")}"`,
                  `"${this.escapeCSVField(job.bossName || "")}"`,
                  `"${this.escapeCSVField(job.bossTitle || "")}"`,
                  `"${this.escapeCSVField(job.jobUrl || "")}"`
                ].join(",")
              );
            });
            const csvContent = [headers.join(","), ...csvChunks.flat()].join("\n");
            const blob = new Blob(["\uFEFF" + csvContent], {
              type: "text/csv;charset=utf-8;"
            });
            const url = URL.createObjectURL(blob);
            const link = document.createElement("a");
            link.setAttribute("href", url);
            link.setAttribute(
              "download",
              `BOSS岗位信息_${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.csv`
            );
            link.style.visibility = "hidden";
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
          },
          // CSV字段转义
          escapeCSVField(field) {
            if (typeof field !== "string") return field;
            return field.replace(/"/g, '""');
          },
          // 处理分页变化
          handleCurrentChange(page) {
            this.currentPage = page;
          }
        },
        beforeDestroy() {
          if (this.autoDetectTimer) {
            clearInterval(this.autoDetectTimer);
          }
        }
      };
      const _hoisted_1 = { style: { "margin-bottom": "20px" } };
      const _hoisted_2 = { key: 0 };
      const _hoisted_3 = { style: { "display": "flex", "flex-wrap": "wrap", "gap": "4px" } };
      const _hoisted_4 = { style: { "display": "flex", "flex-wrap": "wrap", "gap": "4px" } };
      const _hoisted_5 = { style: { "margin-top": "20px", "display": "flex", "justify-content": "space-between", "align-items": "center" } };
      const _hoisted_6 = { key: 1 };
      function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
        const _component_el_button = resolveComponent("el-button");
        const _component_el_alert = resolveComponent("el-alert");
        const _component_el_table_column = resolveComponent("el-table-column");
        const _component_el_link = resolveComponent("el-link");
        const _component_el_tag = resolveComponent("el-tag");
        const _component_el_table = resolveComponent("el-table");
        const _component_el_pagination = resolveComponent("el-pagination");
        const _component_el_drawer = resolveComponent("el-drawer");
        return openBlock(), createBlock(_component_el_drawer, {
          modelValue: $data.drawer,
          "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.drawer = $event),
          direction: "ttb",
          title: "BOSS岗位信息下载工具",
          size: "80%"
        }, {
          default: withCtx(() => [
            createElementVNode("div", _hoisted_1, [
              createVNode(_component_el_button, {
                onClick: $options.toggleAutoDetect,
                type: $data.autoDetect ? "danger" : "primary"
              }, {
                default: withCtx(() => [
                  createTextVNode(toDisplayString($data.autoDetect ? "暂停爬取" : "爬取【当前页】岗位"), 1)
                ]),
                _: 1
              }, 8, ["onClick", "type"]),
              createVNode(_component_el_button, {
                onClick: $options.downloadAll,
                type: "success",
                loading: $data.downloading,
                disabled: $data.jobs.length === 0,
                style: { "margin-left": "20px" }
              }, {
                default: withCtx(() => [
                  createTextVNode(toDisplayString($data.downloading ? "下载中..." : `下载全部岗位 (${$data.jobs.length}个)`), 1)
                ]),
                _: 1
              }, 8, ["onClick", "loading", "disabled"])
            ]),
            createVNode(_component_el_alert, {
              type: "error",
              description: "本插件仅用于学习和技术研究目的,不得用于任何商业用途。使用本插件产生的任何后果均由使用者自行承担,开发者不承担任何责任。",
              "show-icon": "",
              style: { "margin-bottom": "20px" },
              closable: ""
            }),
            $data.jobs.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2, [
              createVNode(_component_el_alert, {
                title: `共爬取到 ${$data.jobs.length} 个岗位信息,当前显示第 ${$data.currentPage} 页,共 ${$options.totalPages} 页`,
                type: "success",
                "show-icon": "",
                style: { "margin-bottom": "20px" }
              }, null, 8, ["title"]),
              createVNode(_component_el_table, {
                data: $options.paginatedJobs,
                height: "500",
                style: { "width": "100%" },
                border: ""
              }, {
                default: withCtx(() => [
                  createVNode(_component_el_table_column, {
                    type: "index",
                    label: "#",
                    width: "60"
                  }, {
                    default: withCtx((scope) => [
                      createTextVNode(toDisplayString(($data.currentPage - 1) * $data.pageSize + scope.$index + 1), 1)
                    ]),
                    _: 1
                  }),
                  createVNode(_component_el_table_column, {
                    prop: "jobName",
                    label: "职位名称",
                    "min-width": "150"
                  }, {
                    default: withCtx((scope) => [
                      createVNode(_component_el_link, {
                        href: scope.row.jobUrl,
                        target: "_blank",
                        type: "primary"
                      }, {
                        default: withCtx(() => [
                          createTextVNode(toDisplayString(scope.row.jobName), 1)
                        ]),
                        _: 2
                      }, 1032, ["href"])
                    ]),
                    _: 1
                  }),
                  createVNode(_component_el_table_column, {
                    prop: "brandName",
                    label: "公司名称",
                    "min-width": "120"
                  }),
                  createVNode(_component_el_table_column, {
                    prop: "salaryDesc",
                    label: "薪资",
                    width: "100"
                  }),
                  createVNode(_component_el_table_column, {
                    prop: "skills",
                    label: "技能要求",
                    "min-width": "200"
                  }, {
                    default: withCtx((scope) => [
                      createElementVNode("div", _hoisted_3, [
                        (openBlock(true), createElementBlock(Fragment, null, renderList(scope.row.skills, (skill) => {
                          return openBlock(), createBlock(_component_el_tag, {
                            key: skill,
                            size: "small"
                          }, {
                            default: withCtx(() => [
                              createTextVNode(toDisplayString(skill), 1)
                            ]),
                            _: 2
                          }, 1024);
                        }), 128))
                      ])
                    ]),
                    _: 1
                  }),
                  createVNode(_component_el_table_column, {
                    prop: "jobLabels",
                    label: "标签",
                    "min-width": "150"
                  }, {
                    default: withCtx((scope) => [
                      createElementVNode("div", _hoisted_4, [
                        (openBlock(true), createElementBlock(Fragment, null, renderList(scope.row.jobLabels, (tag) => {
                          return openBlock(), createBlock(_component_el_tag, {
                            key: tag,
                            size: "small"
                          }, {
                            default: withCtx(() => [
                              createTextVNode(toDisplayString(tag), 1)
                            ]),
                            _: 2
                          }, 1024);
                        }), 128))
                      ])
                    ]),
                    _: 1
                  }),
                  createVNode(_component_el_table_column, {
                    prop: "areaDistrict",
                    label: "地区",
                    width: "100"
                  }),
                  createVNode(_component_el_table_column, {
                    prop: "jobExperience",
                    label: "经验要求",
                    width: "100"
                  }),
                  createVNode(_component_el_table_column, {
                    prop: "jobDegree",
                    label: "学历要求",
                    width: "100"
                  })
                ]),
                _: 1
              }, 8, ["data"]),
              createElementVNode("div", _hoisted_5, [
                createVNode(_component_el_pagination, {
                  "current-page": $data.currentPage,
                  "page-size": $data.pageSize,
                  total: $data.jobs.length,
                  layout: "prev, pager, next, jumper",
                  background: "",
                  style: { "margin": "0 auto" },
                  onCurrentChange: $options.handleCurrentChange
                }, null, 8, ["current-page", "page-size", "total", "onCurrentChange"])
              ])
            ])) : (openBlock(), createElementBlock("div", _hoisted_6, [
              createVNode(_component_el_alert, {
                title: "暂无岗位信息,点击上方按钮开始爬取岗位信息",
                type: "info",
                "show-icon": ""
              })
            ]))
          ]),
          _: 1
        }, 8, ["modelValue"]);
      }
      const index = exports("default", /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]));

    })
  };
}));

System.register("./index-D_oBu48O-BWn9ZtuK.js", ['vue', 'element-plus', 'echarts', './__monkey.entry-DzHbnFBR.js'], (function (exports, module) {
  'use strict';
  var ref, onMounted, onBeforeUnmount, nextTick, createElementBlock, openBlock, Fragment, createVNode, createElementVNode, unref, withCtx, createCommentVNode, createBlock, createTextVNode, toDisplayString, renderList, ElMessage, ElDivider, ElDatePicker, ElCheckbox, ElButton, ElProgress, ElCard, echarts, _export_sfc;
  return {
    setters: [module => {
      ref = module.ref;
      onMounted = module.onMounted;
      onBeforeUnmount = module.onBeforeUnmount;
      nextTick = module.nextTick;
      createElementBlock = module.createElementBlock;
      openBlock = module.openBlock;
      Fragment = module.Fragment;
      createVNode = module.createVNode;
      createElementVNode = module.createElementVNode;
      unref = module.unref;
      withCtx = module.withCtx;
      createCommentVNode = module.createCommentVNode;
      createBlock = module.createBlock;
      createTextVNode = module.createTextVNode;
      toDisplayString = module.toDisplayString;
      renderList = module.renderList;
    }, module => {
      ElMessage = module.ElMessage;
      ElDivider = module.ElDivider;
      ElDatePicker = module.ElDatePicker;
      ElCheckbox = module.ElCheckbox;
      ElButton = module.ElButton;
      ElProgress = module.ElProgress;
      ElCard = module.ElCard;
    }, module => {
      echarts = module;
    }, module => {
      _export_sfc = module._;
    }],
    execute: (function () {

      const _hoisted_1 = { class: "data-analysis-tool" };
      const _hoisted_2 = { class: "tool-header" };
      const _hoisted_3 = { class: "date-selector" };
      const _hoisted_4 = { style: { "display": "flex", "align-items": "center", "gap": "14px" } };
      const _hoisted_5 = {
        key: 0,
        class: "cache-info"
      };
      const _hoisted_6 = {
        key: 0,
        class: "loading-info"
      };
      const _hoisted_7 = {
        key: 1,
        class: "charts-container"
      };
      const _hoisted_8 = ["id"];
      const LOG_PREFIX = "[SSE-Data-Tool]";
      const _sfc_main = {
        __name: "index",
        setup(__props) {
          const markFourthWednesday = ref(false);
          const markThirdFriday = ref(false);
          const datePickerKey = ref(0);
          const dateRange = ref([]);
          const loading = ref(true);
          const daysToFetch = ref(0);
          const estimatedTime = ref(0);
          const progressPercentage = ref(0);
          const cacheStartDate = ref("");
          const cacheEndDate = ref("");
          const cachedDaysCount = ref(0);
          const chartData = ref({});
          const chartInstances = ref({});
          const chartConfigs = [
            { title: "合约数量", field: "CONTRACT_VOLUME", type: "line" },
            { title: "总成交额(万元)", field: "TOTAL_MONEY", type: "line" },
            { title: "总成交量(张)", field: "TOTAL_VOLUME", type: "line" },
            { title: "认购成交量(张)", field: "CALL_VOLUME", type: "line" },
            { title: "认沽成交量(张)", field: "PUT_VOLUME", type: "line" },
            { title: "认沽/认购(%)", field: "CP_RATE", type: "line" },
            { title: "未平仓合约总数", field: "LEAVES_QTY", type: "line" },
            { title: "未平仓认购合约数", field: "LEAVES_CALL_QTY", type: "line" },
            { title: "未平仓认沽合约数", field: "LEAVES_PUT_QTY", type: "line" },
            { title: "持仓量", field: "CCL", type: "line" },
            { title: "成交量", field: "CJL", type: "line" },
            {
              title: "净认购成交量",
              field: "rgjrg",
              type: "line"
            },
            {
              title: "净认购认沽成交比率",
              field: "rgjrg2",
              type: "line"
            },
            {
              title: "净未平仓认购张数",
              field: "cclrgjrg",
              type: "line"
            },
            {
              title: "未平仓认购认沽净比率",
              field: "cclrgjrg2",
              type: "line"
            },
            {
              title: "上证50ETF(认购成交量和认沽成交量)",
              dataType: "duibi",
              duibi_SECURITY_CODE: "510050",
              duibi_fields: [
                { field: "CALL_VOLUME", name: "认购成交量" },
                { field: "PUT_VOLUME", name: "认沽成交量" }
              ],
              type: "line"
            },
            {
              title: "上证50ETF(未平仓认购合约数和未平仓认沽合约数)",
              dataType: "duibi",
              duibi_SECURITY_CODE: "510050",
              duibi_fields: [
                { field: "LEAVES_CALL_QTY", name: "未平仓认购合约数" },
                { field: "LEAVES_PUT_QTY", name: "未平仓认沽合约数" }
              ],
              type: "line"
            },
            {
              title: "沪深300ETF(认购成交量和认沽成交量)",
              dataType: "duibi",
              duibi_SECURITY_CODE: "510300",
              duibi_fields: [
                { field: "CALL_VOLUME", name: "认购成交量" },
                { field: "PUT_VOLUME", name: "认沽成交量" }
              ],
              type: "line"
            },
            {
              title: "沪深300ETF(未平仓认购合约数和未平仓认沽合约数)",
              dataType: "duibi",
              duibi_SECURITY_CODE: "510300",
              duibi_fields: [
                { field: "LEAVES_CALL_QTY", name: "未平仓认购合约数" },
                { field: "LEAVES_PUT_QTY", name: "未平仓认沽合约数" }
              ],
              type: "line"
            },
            {
              title: "中证500ETF(认购成交量和认沽成交量)",
              dataType: "duibi",
              duibi_SECURITY_CODE: "510500",
              duibi_fields: [
                { field: "CALL_VOLUME", name: "认购成交量" },
                { field: "PUT_VOLUME", name: "认沽成交量" }
              ],
              type: "line"
            },
            {
              title: "中证500ETF(未平仓认购合约数和未平仓认沽合约数)",
              dataType: "duibi",
              duibi_SECURITY_CODE: "510500",
              duibi_fields: [
                { field: "LEAVES_CALL_QTY", name: "未平仓认购合约数" },
                { field: "LEAVES_PUT_QTY", name: "未平仓认沽合约数" }
              ],
              type: "line"
            },
            {
              title: "科创50ETF(认购成交量和认沽成交量)",
              dataType: "duibi",
              duibi_SECURITY_CODE: "588000",
              duibi_fields: [
                { field: "CALL_VOLUME", name: "认购成交量" },
                { field: "PUT_VOLUME", name: "认沽成交量" }
              ],
              type: "line"
            },
            {
              title: "科创50ETF(未平仓认购合约数和未平仓认沽合约数)",
              dataType: "duibi",
              duibi_SECURITY_CODE: "588000",
              duibi_fields: [
                { field: "LEAVES_CALL_QTY", name: "未平仓认购合约数" },
                { field: "LEAVES_PUT_QTY", name: "未平仓认沽合约数" }
              ],
              type: "line"
            },
            {
              title: "科创板50ETF(认购成交量和认沽成交量)",
              dataType: "duibi",
              duibi_SECURITY_CODE: "588080",
              duibi_fields: [
                { field: "CALL_VOLUME", name: "认购成交量" },
                { field: "PUT_VOLUME", name: "认沽成交量" }
              ],
              type: "line"
            },
            {
              title: "科创板50ETF(未平仓认购合约数和未平仓认沽合约数)",
              dataType: "duibi",
              duibi_SECURITY_CODE: "588080",
              duibi_fields: [
                { field: "LEAVES_CALL_QTY", name: "未平仓认购合约数" },
                { field: "LEAVES_PUT_QTY", name: "未平仓认沽合约数" }
              ],
              type: "line"
            }
          ];
          onMounted(async () => {
            initDateRange();
            await loadCacheInfo();
            let id = setInterval(() => {
              try {
                if (getJSONP) {
                  loadData();
                  clearInterval(id);
                }
              } catch (error) {
              }
            }, 500);
          });
          onBeforeUnmount(() => {
            Object.values(chartInstances.value).forEach((chart) => {
              if (chart && typeof chart.dispose === "function") {
                chart.dispose();
              }
            });
          });
          const processChartData = async () => {
            const startDate = new Date(dateRange.value[0]);
            const endDate = new Date(dateRange.value[1]);
            const currentDate = new Date(startDate);
            const allData = [];
            while (currentDate <= endDate) {
              const dateStr = currentDate.toISOString().split("T")[0];
              const data = await getCachedData(dateStr);
              if (data && data.result && data.result.length > 0) {
                allData.push({
                  date: dateStr,
                  data
                });
              }
              currentDate.setDate(currentDate.getDate() + 1);
            }
            chartConfigs.forEach((config, index2) => {
              const seriesData = {};
              allData.forEach((item) => {
                item.data.result.forEach((etf) => {
                  if (config.dataType === "duibi") {
                    if (config.duibi_SECURITY_CODE === etf.SECURITY_CODE) {
                      config.duibi_fields.forEach((fieldItem) => {
                        !seriesData[fieldItem.name] && (seriesData[fieldItem.name] = []);
                        let value2 = etf[fieldItem.field].toString().replace(/,/g, "");
                        seriesData[fieldItem.name].push({
                          date: item.date,
                          value: value2
                        });
                      });
                    }
                    return;
                  }
                  const etfName = etf.SECURITY_ABBR;
                  let value = 0;
                  if (config.field in etf) {
                    const rawValue = etf[config.field];
                    value = parseFloat(rawValue.toString().replace(/,/g, "")) || 0;
                  } else if (config.field === "CCL") {
                    const a = parseFloat(etf.LEAVES_CALL_QTY.toString().replace(/,/g, "")) || 0;
                    const b = parseFloat(etf.LEAVES_PUT_QTY.toString().replace(/,/g, "")) || 0;
                    value = b > 0 ? a / b * 100 : 0;
                  } else if (config.field === "CJL") {
                    const a = parseFloat(etf.PUT_VOLUME.toString().replace(/,/g, "")) || 0;
                    const b = parseFloat(etf.CALL_VOLUME.toString().replace(/,/g, "")) || 0;
                    value = b > 0 ? a / b * 100 : 0;
                  } else if (config.field === "rgjrg") {
                    const a = parseFloat(etf.CALL_VOLUME.toString().replace(/,/g, "")) || 0;
                    const b = parseFloat(etf.PUT_VOLUME.toString().replace(/,/g, "")) || 0;
                    value = a - b;
                  } else if (config.field === "rgjrg2") {
                    const a = parseFloat(etf.CALL_VOLUME.toString().replace(/,/g, "")) || 0;
                    const b = parseFloat(etf.PUT_VOLUME.toString().replace(/,/g, "")) || 0;
                    const c = a - b;
                    const d = a + b;
                    value = d > 0 ? c / d * 100 : 0;
                  } else if (config.field === "cclrgjrg") {
                    const a = parseFloat(etf.LEAVES_CALL_QTY.toString().replace(/,/g, "")) || 0;
                    const b = parseFloat(etf.LEAVES_PUT_QTY.toString().replace(/,/g, "")) || 0;
                    value = a - b;
                  } else if (config.field === "cclrgjrg2") {
                    const a = parseFloat(etf.LEAVES_CALL_QTY.toString().replace(/,/g, "")) || 0;
                    const b = parseFloat(etf.LEAVES_PUT_QTY.toString().replace(/,/g, "")) || 0;
                    const c = a - b;
                    const d = a + b;
                    value = d > 0 ? c / d * 100 : 0;
                  }
                  if (!seriesData[etfName]) {
                    seriesData[etfName] = [];
                  }
                  seriesData[etfName].push({
                    date: item.date,
                    value
                  });
                });
              });
              chartData.value[index2] = seriesData;
            });
            await nextTick();
            renderCharts();
          };
          const renderCharts = () => {
            const colorPalette = [
              "#409EFF",
              "#67C23A",
              "#E6A23C",
              "#F56C6C",
              "#909399",
              "#34C759",
              "#007AFF",
              "#AF52DE",
              "#FF9500",
              "#5856D6"
            ];
            const day3 = [];
            const day5 = [];
            if (dateRange.value && dateRange.value.length === 2) {
              const startDate = new Date(dateRange.value[0]);
              const endDate = new Date(dateRange.value[1]);
              const currentDate = new Date(startDate);
              while (currentDate <= endDate) {
                let timeStr = currentDate.toISOString().split("T")[0];
                if (isNthWeekWeekday(timeStr, 4, 3)) {
                  day3.push(timeStr);
                } else if (isNthWeekWeekday(timeStr, 3, 5)) {
                  day5.push(timeStr);
                }
                currentDate.setDate(currentDate.getDate() + 1);
              }
            }
            chartConfigs.forEach((config, index2) => {
              const seriesData = chartData.value[index2];
              if (seriesData) {
                const chartDom = document.getElementById(`chart-${index2}`);
                if (!chartDom) {
                  console.warn(`${LOG_PREFIX} 未找到图表容器: chart-${index2}`);
                  return;
                }
                if (chartInstances.value[index2]) {
                  chartInstances.value[index2].dispose();
                }
                const chart = echarts.init(chartDom);
                chartInstances.value[index2] = chart;
                const series = [];
                let colorIndex = 0;
                Object.keys(seriesData).forEach((etfName, index3) => {
                  const data = seriesData[etfName];
                  const values = data.map((item) => item.value);
                  let markLine = null;
                  if (index3 === 0 && markFourthWednesday.value) {
                    markLine = {
                      silent: true,
                      symbol: "none",
                      label: {
                        show: false,
                        fontSize: 100
                      },
                      lineStyle: {
                        color: "#0066FF",
                        width: 1,
                        type: "solid"
                      },
                      data: day5.map((d) => {
                        return {
                          xAxis: d
                        };
                      })
                    };
                  }
                  if (index3 === 1 && markThirdFriday.value) {
                    markLine = {
                      silent: true,
                      symbol: "none",
                      label: {
                        show: false,
                        fontSize: 100
                      },
                      lineStyle: {
                        color: "#FF4D00",
                        width: 1,
                        // 实线
                        type: "solid"
                      },
                      data: day3.map((d) => {
                        return {
                          xAxis: d
                        };
                      })
                    };
                  }
                  series.push({
                    name: etfName,
                    type: "line",
                    data: values,
                    smooth: true,
                    lineStyle: {
                      width: 2
                    },
                    itemStyle: {
                      color: colorPalette[colorIndex % colorPalette.length]
                    },
                    areaStyle: {
                      opacity: 0.1
                    },
                    markLine
                  });
                  colorIndex++;
                });
                const option = {
                  title: {
                    textStyle: {
                      fontSize: 14,
                      fontWeight: "normal"
                    },
                    padding: [0, 0, 0, 0]
                  },
                  tooltip: {
                    trigger: "axis",
                    formatter: function(params) {
                      let tooltip = params[0].name + "<br/>";
                      params.forEach((param) => {
                        tooltip += `${param.seriesName}: ${param.value.toLocaleString()}<br/>`;
                      });
                      return tooltip;
                    }
                  },
                  legend: {
                    type: "scroll",
                    bottom: 30,
                    textStyle: {
                      fontSize: 10
                    }
                  },
                  xAxis: {
                    type: "category",
                    data: series.length > 0 ? series[0].data.map(
                      (_, i) => Object.values(seriesData)[0][i].date
                    ) : [],
                    axisLabel: {
                      fontSize: 10
                    }
                  },
                  yAxis: {
                    type: "value",
                    axisLabel: {
                      fontSize: 10,
                      formatter: function(value) {
                        return value.toLocaleString();
                      }
                    }
                  },
                  series,
                  grid: {
                    left: "6%",
                    right: "6%",
                    top: "6%",
                    bottom: "20%"
                  },
                  dataZoom: [
                    {
                      type: "inside",
                      start: 0,
                      end: 100
                    },
                    {
                      type: "slider",
                      start: 0,
                      end: 100,
                      height: 15,
                      bottom: 10
                    }
                  ]
                };
                chart.setOption(option);
              }
            });
          };
          const onMarkingChange = () => {
            if (!loading.value) {
              renderCharts();
            }
          };
          const loadData = async () => {
            loading.value = true;
            progressPercentage.value = 0;
            if (!dateRange.value || dateRange.value.length !== 2) {
              ElMessage.warning("请选择日期范围");
              return;
            }
            await calculateDaysToFetch();
            const startDate = new Date(dateRange.value[0]);
            const endDate = new Date(dateRange.value[1]);
            const currentDate = new Date(startDate);
            let processedDays = 0;
            while (currentDate <= endDate) {
              try {
                const dateStr = currentDate.toISOString().split("T")[0];
                await fetchOrLoadData(dateStr);
                processedDays++;
                progressPercentage.value = Math.round(
                  processedDays / daysToFetch.value * 100
                );
                currentDate.setDate(currentDate.getDate() + 1);
              } catch (error) {
                console.error(`${LOG_PREFIX} 处理数据时出错:`, error);
              }
            }
            await sleep(200);
            loading.value = false;
            ElMessage.success("数据加载完成");
            await loadCacheInfo();
            await processChartData();
          };
          const fetchOrLoadData = async (dateStr) => {
            if ([6, 0].includes(new Date(dateStr).getDay())) {
              return { result: [] };
            }
            let data = await getCachedData(dateStr);
            if (!data) {
              data = await fetchData(dateStr);
              if (data && data.result && data.result.length) {
                await cacheData(dateStr, data);
              }
              await sleep(Math.random() * 1e3 + 1e3);
            }
            return data;
          };
          const fetchData = (date) => {
            return new Promise((resolve, reject) => {
              getJSONP({
                type: "post",
                url: "//query.sse.com.cn/commonQuery.do",
                data: {
                  jsonCallBack: "jsonpCallback96937715",
                  isPagination: true,
                  sqlId: "COMMON_SSE_ZQPZ_YSP_QQ_SJTJ_MRTJ_CX",
                  tradeDate: date.replaceAll("-", ""),
                  "pageHelp.pageSize": 25,
                  "pageHelp.cacheSize": 1,
                  "pageHelp.pageNo": 1,
                  "pageHelp.beginPage": 1,
                  "pageHelp.endPage": 1,
                  _: Date.now()
                },
                successCallback: function(data) {
                  resolve(data);
                },
                errCallback: function() {
                  reject({});
                }
              });
            });
          };
          const initDateRange = () => {
            const end = /* @__PURE__ */ new Date();
            const start = /* @__PURE__ */ new Date();
            start.setDate(start.getDate() - 30);
            dateRange.value = [
              start.toISOString().split("T")[0],
              end.toISOString().split("T")[0]
            ];
            nextTick(() => {
              datePickerKey.value += 1;
            });
          };
          const disabledDate = (time) => {
            const start = /* @__PURE__ */ new Date("2023-07-17");
            const end = /* @__PURE__ */ new Date();
            return time.getTime() < start.getTime() || time.getTime() > end.getTime();
          };
          const onDateRangeChange = () => {
            calculateDaysToFetch();
          };
          const clearCache = () => {
            if (confirm("确定要清除缓存吗?")) {
              GM_deleteValue("sse_data_cache");
              ElMessage.success("清除缓存成功");
            }
          };
          const cacheData = async (date, data) => {
            const cache = await GM_getValue("sse_data_cache", {});
            cache[date] = data;
            await GM_setValue("sse_data_cache", cache);
          };
          const getCachedData = async (date) => {
            const cache = await GM_getValue("sse_data_cache", {});
            const data = cache[date];
            return data;
          };
          const getAllCachedData = async () => {
            const cache = await GM_getValue("sse_data_cache", {});
            return cache;
          };
          const loadCacheInfo = async () => {
            const cache = await getAllCachedData();
            const dates = Object.keys(cache).sort();
            if (dates.length > 0) {
              cacheStartDate.value = dates[0];
              cacheEndDate.value = dates[dates.length - 1];
              cachedDaysCount.value = dates.length;
            } else {
              cacheStartDate.value = "";
              cacheEndDate.value = "";
              cachedDaysCount.value = 0;
            }
          };
          const calculateDaysToFetch = async () => {
            if (!dateRange.value || dateRange.value.length !== 2) {
              console.log(`${LOG_PREFIX} 日期范围不完整,跳过计算`);
              return;
            }
            const startDate = new Date(dateRange.value[0]);
            const endDate = new Date(dateRange.value[1]);
            let days = 0;
            const currentDate = new Date(startDate);
            let time = 0;
            while (currentDate <= endDate) {
              const dateStr = currentDate.toISOString().split("T")[0];
              const cachedData = await getCachedData(dateStr);
              days++;
              cachedData ? time += 0.01 : time += 1.5;
              currentDate.setDate(currentDate.getDate() + 1);
            }
            daysToFetch.value = days;
            estimatedTime.value = Math.ceil(time);
          };
          const sleep = (ms) => {
            return new Promise((resolve) => setTimeout(resolve, ms));
          };
          function isNthWeekWeekday(date2, occurrence, dayOfWeek) {
            const date = new Date(date2);
            if (!(date instanceof Date) || isNaN(date)) {
              throw new Error("Invalid date");
            }
            if (occurrence < 1 || occurrence > 5) {
              throw new Error("Occurrence must be between 1 and 5");
            }
            if (dayOfWeek < 0 || dayOfWeek > 6) {
              throw new Error("Day of week must be between 0 (Sunday) and 6 (Saturday)");
            }
            const targetMonth = date.getMonth();
            const targetYear = date.getFullYear();
            const firstDayOfMonth = new Date(targetYear, targetMonth, 1);
            const firstDayWeekday = firstDayOfMonth.getDay();
            let firstOccurrenceDate = 1 + (dayOfWeek - firstDayWeekday + 7) % 7;
            const targetDateNumber = firstOccurrenceDate + (occurrence - 1) * 7;
            const targetNthDayOfWeek = new Date(
              targetYear,
              targetMonth,
              targetDateNumber
            );
            return targetNthDayOfWeek.getDate() === date.getDate() && targetNthDayOfWeek.getMonth() === date.getMonth() && targetNthDayOfWeek.getFullYear() === date.getFullYear();
          }
          return (_ctx, _cache) => {
            return openBlock(), createElementBlock(Fragment, null, [
              createVNode(unref(ElDivider), { "content-position": "center" }, {
                default: withCtx(() => _cache[3] || (_cache[3] = [
                  createElementVNode("h2", null, "数据分析", -1)
                ])),
                _: 1,
                __: [3]
              }),
              createElementVNode("div", _hoisted_1, [
                createElementVNode("div", _hoisted_2, [
                  createElementVNode("div", _hoisted_3, [
                    createElementVNode("div", _hoisted_4, [
                      (openBlock(), createBlock(unref(ElDatePicker), {
                        modelValue: dateRange.value,
                        "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => dateRange.value = $event),
                        key: datePickerKey.value,
                        disabled: loading.value,
                        type: "daterange",
                        "range-separator": "至",
                        "start-placeholder": "开始日期",
                        "disabled-date": disabledDate,
                        "end-placeholder": "结束日期",
                        "value-format": "YYYY-MM-DD",
                        onChange: onDateRangeChange,
                        size: "large"
                      }, null, 8, ["modelValue", "disabled"])),
                      createVNode(unref(ElCheckbox), {
                        modelValue: markFourthWednesday.value,
                        "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => markFourthWednesday.value = $event),
                        style: { "margin": "0" },
                        disabled: loading.value,
                        onChange: onMarkingChange,
                        size: "large",
                        border: ""
                      }, {
                        default: withCtx(() => _cache[4] || (_cache[4] = [
                          createElementVNode("span", { style: { "color": "#0066ff" } }, "标记第三周周五", -1)
                        ])),
                        _: 1,
                        __: [4]
                      }, 8, ["modelValue", "disabled"]),
                      createVNode(unref(ElCheckbox), {
                        modelValue: markThirdFriday.value,
                        "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => markThirdFriday.value = $event),
                        style: { "margin": "0" },
                        disabled: loading.value,
                        onChange: onMarkingChange,
                        size: "large",
                        border: ""
                      }, {
                        default: withCtx(() => _cache[5] || (_cache[5] = [
                          createElementVNode("span", { style: { "color": "#ff4d00" } }, "标记第四周周三", -1)
                        ])),
                        _: 1,
                        __: [5]
                      }, 8, ["modelValue", "disabled"]),
                      createVNode(unref(ElButton), {
                        type: "primary",
                        onClick: loadData,
                        size: "large",
                        disabled: loading.value
                      }, {
                        default: withCtx(() => [
                          createTextVNode(toDisplayString(loading.value ? "加载中..." : "加载数据"), 1)
                        ]),
                        _: 1
                      }, 8, ["disabled"]),
                      createVNode(unref(ElButton), {
                        onClick: clearCache,
                        type: "danger",
                        size: "large",
                        style: { "margin": "0" },
                        disabled: loading.value
                      }, {
                        default: withCtx(() => _cache[6] || (_cache[6] = [
                          createTextVNode("清除缓存", -1)
                        ])),
                        _: 1,
                        __: [6]
                      }, 8, ["disabled"])
                    ])
                  ]),
                  cacheStartDate.value && cacheEndDate.value ? (openBlock(), createElementBlock("div", _hoisted_5, " 缓存数据范围: " + toDisplayString(cacheStartDate.value) + " 至 " + toDisplayString(cacheEndDate.value) + "    缓存天数: " + toDisplayString(cachedDaysCount.value), 1)) : createCommentVNode("", true)
                ]),
                loading.value ? (openBlock(), createElementBlock("div", _hoisted_6, [
                  createElementVNode("div", null, " 需要获取 " + toDisplayString(daysToFetch.value) + " 天数据,预计需要 " + toDisplayString(estimatedTime.value) + " 秒 ", 1),
                  createVNode(unref(ElProgress), { percentage: progressPercentage.value }, null, 8, ["percentage"])
                ])) : createCommentVNode("", true),
                !loading.value ? (openBlock(), createElementBlock("div", _hoisted_7, [
                  (openBlock(), createElementBlock(Fragment, null, renderList(chartConfigs, (chart, index2) => {
                    return createVNode(unref(ElCard), { key: index2 }, {
                      header: withCtx(() => [
                        createTextVNode(toDisplayString(chart.title), 1)
                      ]),
                      default: withCtx(() => [
                        createElementVNode("div", {
                          class: "chart-container",
                          id: "chart-" + index2
                        }, null, 8, _hoisted_8)
                      ]),
                      _: 2
                    }, 1024);
                  }), 64))
                ])) : createCommentVNode("", true)
              ])
            ], 64);
          };
        }
      };
      const index = exports("default", /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-3be403ae"]]));

    })
  };
}));

System.import("./__entry.js", "./");