高级查询
// ==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;
}
}
}
})();