笔记最新地址:https://app.yinxiang.com/fx/d1542e89-6b82-41ba-b945-67b1c3e55237
1、下载浏览器插件:tampermonkey
该插件在Edge、Chrome、Firefox等均可下载安装
谷歌tampermonkey插件包:下载
2、添加自动脚本
1)打开tampermonkey管理面板
2)添加脚本
代码如下:
// ==UserScript==
// @name XPOALogin
// @namespace http://tampermonkey.net/
// @version 0.2
// @description try to take over the world!
// @author You
// @match localhost:10086/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
// @grant none
// ==/UserScript==
(function () {
'use strict';
/************************************************************ 配置此处变量(注意:通过auto_switchUser触发的函数无法使用) *************************************************/
const pws = '10086;10086;123456;123456789';// 统一密码(未知bug,需让第1第2个密码相同)
const onlyOne = false;// true当搜索结果只有一个时,自动切换;false当搜索结果只有一个时还需输入序号或直接回车才可切换
const domain = 'localhost:10086';// 域名+端口(例如localhost:10086,同时需将本文件的@match修改成localhost:10086/*)
const url = window.location.href;// 当前页面url
/*************************************************************************** 以下代码无需修改 **********************************************************************/
let innerHtml =
'<script>' +
' auto_login = ' + auto_login + ';' +
' onlyOne = ' + onlyOne + ';' +
' hideSwitch = ' + hideSwitch + ';' +
' auto_switchUser = ' + auto_switchUser + ';' +
' toPage = ' + toPage + ';' +
' auto_searchUser = ' + auto_searchUser + ';' +
' auto_backToLogin = ' + auto_backToLogin + ';' +
'</script>' +
"<button id='auto_btn_hideswitch' class='lui-component lui_widget_btn lui-praise-btn' style='height: auto;color: #494949;' onclick='hideSwitch()'>▼</button>" +
"<button id='auto_btn_switchuser' class='lui-component lui_widget_btn lui-praise-btn' style='height: 20px;visibility: visible; cursor: pointer;font-size: 10px;font-weight:580;color: #919191;' onclick='auto_switchUser()'>1-用户</button>" +
"<button id='auto_btn_toPage_0' class='lui-component lui_widget_btn lui-praise-btn' style='height: 20px;visibility: visible; cursor: pointer;font-size: 11px;font-weight:580;color: #919191;' onclick='toPage(1,false)' >2-流程</button>" +
"<button id='auto_btn_toPage_1' class='lui-component lui_widget_btn lui-praise-btn' style='height: 20px;visibility: visible; cursor: pointer;font-size: 11px;font-weight:580;color: #919191;' onclick='toPage(0,true)' >3-模板</button>" +
"<button id='auto_btn_toPage_2' class='lui-component lui_widget_btn lui-praise-btn' style='height: 20px;visibility: visible; cursor: pointer;font-size: 11px;font-weight:580;color: #919191;' onclick='toPage(2,true)' >4-组织</button>";
if (typeof $ !== "undefined") {
$("#top").append(innerHtml);
// 页面快捷方式 alt
$(document).bind('keydown', function(e) {
// console.log({e})
if (e.altKey) {
switch (e.originalEvent.key) {
case "`": $("#auto_btn_hideswitch").click(); break
case "1": $("#auto_btn_switchuser").click(); break
case "2": $("#auto_btn_toPage_0").click(); break
case "3": $("#auto_btn_toPage_1").click(); break
case "4": $("#auto_btn_toPage_2").click(); break
}
}
})
}
/**
* 登录页自动登录
*/
auto_login();
function auto_login() {
const current_user = localStorage.xp_oa_current_user;
var tryCount = Number(localStorage.xp_oa_tryCount);
sessionStorage.log += tryCount + ";"
const pwArr = pws.split(';');
if (url.indexOf('login.jsp') < 0 || current_user == 'undefined') return;
// 仅登录页执行以下代码
if (tryCount >= pwArr.length){// 避免密码错误时一直在尝试登录
return;
}
const currentUser = JSON.parse(current_user);
const loginName = currentUser.fd_login_name;
if (loginName != undefined && loginName != null) {
localStorage.xp_oa_tryCount = tryCount + 1;
$('.lui_login_input_username').attr('value', loginName);;
console.log('TryCount: ' + tryCount);
console.log('TryPW: ' + pwArr[tryCount]);
$('.lui_login_input_password').attr('value', pwArr[tryCount]);
$('.lui_login_button_div_c').click();
}
}
/**
* 登录成功(转至非登录页)
*/
auto_loginSuccess();
function auto_loginSuccess() {
if (url.indexOf('login.jsp') > -1) return;
// 仅进入非登录页时执行以下代码
sessionStorage.log = url;
// 以下避免用户切换成功后在登录页自动执行登录,
// 但可能存在bug(执行退出登录时不一定直接退到登录页,一旦退到了非登录页就会导致登录页无法自动登录)
// localStorage.xp_oa_current_user = "{}";
// localStorage.xp_oa_tryCount = pws.split(';').length - 1;
}
/**
* 隐藏、显示切换按钮
*/
function hideSwitch() {
if (typeof $ === "undefined") return;
const hideSwitch = $('#auto_btn_hideswitch')[0];
if (!hideSwitch) return;
var hideBtnText = hideSwitch.innerText;
var selectors = ['#auto_btn_switchuser',
'#auto_btn_toPage_0', '#auto_btn_toPage_1', '#auto_btn_toPage_2',
'#luiPraiseBtn', '.com_gototop', '.lui-component.lui_widget_btn.com_qrcode']
for (var i = 0; i < selectors.length; i++) {
if (hideBtnText === '▼') {
$(selectors[i]).hide(200);
continue;
}
$(selectors[i]).show(200);
}
hideSwitch.innerText = hideBtnText === '▲' ? '▼' : '▲';
}
//hideSwitch();// 默认隐藏
/**
* [切换用户按钮]click触发函数
*/
function auto_switchUser() {
var usersArr = [];
let searchValue = `${window.prompt('公司||部门||姓名||登录名(模糊、不区分大小写)',)}`;
do{
console.log({searchValue})
if (searchValue == 'null' || searchValue == '') break;
usersArr = auto_searchUser(searchValue);
if (usersArr.length == 1 && onlyOne) break;// 只有一个查询结果直接选定执行切换
let usersStr = '';
for (let i = 0; i < usersArr.length; i++) {
usersStr += '(' + i + ')' + usersArr[i].fd_name + '_' + usersArr[i].fd_login_name + '\n'
}
searchValue = `${window.prompt('数字序号以选择,回车默认第0个(非数字则重新搜索):\n\n' + usersStr + (usersStr==''?'\n查无结果,请重新输入!':''))}`;
}while (isNaN(Number(searchValue)));
const user = usersArr[Number(searchValue) || 0];
if (searchValue == 'null' || user == null || user == undefined) return;
localStorage.xp_oa_current_user = JSON.stringify(user);
localStorage.xp_oa_tryCount = 0;
auto_backToLogin();
}
/**
* 跳转页面
* @param which 哪个页面
* @param newWin 新建标签页
*/
function toPage(which, newWin) {
console.log({which})
let url = "";
switch (which) {
case 0 : url = "sys/profile/index.jsp#app/ekp/km/review";break;// 模板设置
case 1 : url = "km/review/index.jsp?j_module=true#j_path=%2FlistCreate&mydoc=create";break;// 流程管理
case 2 : url = "sys/profile/index.jsp#org/organizational";break;// 组织架构
}
if (newWin) {// 新建标签页
window.open(Com_Parameter.ContextPath + url);
return;
}
window.open(Com_Parameter.ContextPath + url, "_self");// 当前页面打开
}
/**
* 搜索
*/
function auto_searchUser(searchName) {
const users = JSON.parse(localStorage.xp_oa_users).RECORDS;
let usersArr = [];
for (const obj of users) {
const loginName = obj.fd_login_name;
const name = obj.fd_name.toLowerCase() + loginName.toLowerCase();
if (name.indexOf(searchName.toLowerCase()) > -1) {
usersArr.push(obj);
}
}
return usersArr
}
/**
* 返回至登录界面
*/
function auto_backToLogin() {
// (特殊)后台管理页面
// if (url.indexOf(domain + "/sys/profile/index.jsp#")){
// location.href='/logout.jsp';
// // console.log(window.__sys_logout)
// return;
// }
// (通用)触发退出登录按钮
// __sys_logout();
// let clickCount = 0;
// const interval = setInterval(()=>{
// if (clickCount == 30) clearInterval(interval);
// $('.lui-component.lui_widget_btn.lui_toolbar_btn_def').click();
// console.log({clickCount});
// clickCount++;
// },100);
location.href='/logout.jsp';
}
})();
3、添加用户信息
获取切换用户所需JSON数据(将返回字符串F12执行)
import com.landray.kmss.sys.organization.model.SysOrgElement;
import com.landray.kmss.sys.organization.model.SysOrgPerson;
List userlist = $OrgUtil.获取全部用户$($部门$);
String rtnStr = "{'RECORDS':[";
for (int i = 0; i < userlist.size(); i++) {
if (userlist.get(i) == null) {
continue;
}
SysOrgElement orgElm = (SysOrgElement) userlist.get(i);
String name = orgElm.getFdName();
String loginName = "";
if (orgElm instanceof SysOrgPerson) {
loginName = ((SysOrgPerson) orgElm).getFdLoginName();
}
String fullPath = $组织架构.获取组织架构对象全路径$(orgElm);
rtnStr += "{'fd_name':'" + fullPath + "_" + name + "','fd_login_name':'" + loginName +"'},";
}
rtnStr = rtnStr.substring(0, rtnStr.length() - 1);
rtnStr += "]}";
rtnStr = "var users = " + rtnStr + ";localStorage.xp_oa_users = JSON.stringify(users);";
return rtnStr;
无$OrgUtil.获取全部用户$($部门$)时使用以下代码:
import com.landray.kmss.sys.organization.model.SysOrgElement;
import com.landray.kmss.sys.organization.model.SysOrgPerson;
public List getAllUsers(SysOrgElement sysOrgElement) {
List rtnList = new ArrayList();
List childs = sysOrgElement.getFdChildren();
for (int i = 0; i < childs.size(); i++) {
SysOrgElement child = (SysOrgElement) childs.get(i);
int childType = child.getFdOrgType();
if (childType == 8) {// 人员对象
rtnList.add(child);
}
else if (childType == 1 || childType == 2){// 1机构或2部门
rtnList.addAll(getAllUsers(child));
}
}
return rtnList;
}
List userlist = getAllUsers($部门$);
String rtnStr = "{'RECORDS':[";
for (int i = 0; i < userlist.size(); i++) {
if (userlist.get(i) == null) {
continue;
}
SysOrgElement orgElm = (SysOrgElement) userlist.get(i);
String name = orgElm.getFdName();
String loginName = "";
if (orgElm instanceof SysOrgPerson) {
loginName = ((SysOrgPerson) orgElm).getFdLoginName();
}
String fullPath = $组织架构.获取组织架构对象全路径$(orgElm);
rtnStr += "{'fd_name':'" + fullPath + "_" + name + "','fd_login_name':'" + loginName +"'},";
}
rtnStr = rtnStr.substring(0, rtnStr.length() - 1);
rtnStr += "]}";
rtnStr = "var users = " + rtnStr + ";localStorage.xp_oa_users = JSON.stringify(users);";
return rtnStr;