// ==UserScript== // @name 高级查询 // @namespace http://tampermonkey.net/ // @version 0.3 // @description 允许使用多个关键字查询文件! // @author You // @match http://*.zhbg.kjt.gx.gov/* // @grant none // ==/UserScript== (function() { 'use strict'; // 延迟1秒设置数据劫持函数 setTimeout(setProxy, 1000); // 数据劫持函数 function setProxy(){ // 每秒设置一次数据劫持函数 setTimeout(setProxy, 1000); myhook("ZfGkFileListAction_getDataGridData");//劫持公开文件 myhook("filelibraryaction_getDataGridData");//劫持印发文件 myhook("docbasehistorylistaction_getDataGridData");//劫持旧系统公文 function myhook(f){ // 获取app对象 let app = document.getElementById("app"); // 检查是否已经劫持 if ((f + "_hook") in app.__vue__.$parent.$children[0].$children[0].$children[0].$children[1].$Api){ // 如果已劫持就直接返回 return; } // 设置已劫持标志 app.__vue__.$parent.$children[0].$children[0].$children[0].$children[1].$Api[f + "_hook"] = true; // 保存原有的数据处理函数 let realfun = app.__vue__.$parent.$children[0].$children[0].$children[0].$children[1].$Api[f]; // 劫持数据处理函数 app.__vue__.$parent.$children[0].$children[0].$children[0].$children[1].$Api[f] = myfun; function myfun(c,n){//c中保存了查询参数 // 读取查询关键字字符串 let keystr = c.values().next().value.match(/\"title\"\:\"([^\"]*)\"/)[1]; // 将关键字字符串分解为关键字数组 let keys = keystr.split(/\s+/); // 如果是多关键字查询 if (keys.length > 1){ //修改为查询第一个关键字 c.set("params", c.values().next().value.replace(keystr, keys[0])); //修改为返回2000个结果 c.set("params", c.values().next().value.replace('"pageSize":10', '"pageSize":2000')); } // 劫持并修改返回的数据 let mypromise = { // 调用原有的处理函数并保存返回的Promise对象 realpromise : realfun(c,n), // 劫持原有的then函数处理返回的数据 then : function(a, b){ return this.realpromise.then(i=>{ // 如果是多关键字查询 if (keys.length > 1){ // 删除没有包含所有关键字的文件 i.data = i.data.filter(item=>{ for(let index = 1; index < keys.length; index++){ if (item.title.indexOf(keys[index]) < 0){ return false; } } return true; }); // 修改文件数量 i.total = i.data.length; } // 调用系统数据处理函数处理已修改过的数据 a(i); },b); } }; // 返回劫持的Promise对象 return mypromise; } } } })();