home.jsp 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. <%@ page import="ss.WebC" %>
  2. <%@ page import="ss.serv.ServC" %>
  3. <%@ page language="java" pageEncoding="UTF-8" isELIgnored="false" %>
  4. <%@ taglib uri="/ssTag" prefix="ss"%>
  5. <!DOCTYPE html>
  6. <html lang="en">
  7. <head>
  8. <meta charset="UTF-8" />
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  10. <script>window.loginStatus="${empty sessionScope['ssUser']?'0':'1'}"</script>
  11. <ss:skin file='main.css'/>
  12. <script type="text/javascript" src="/ss/jquery/jquery.js"></script>
  13. <script type="text/javascript" src="/ss/artdialog/artDialogUtil.js"></script>
  14. <script type="text/javascript" src="/ss/js/base.js"></script>
  15. <script> if(!window.wd) var wd={}; if(!wd.display) wd.display={}; wd.display.wdDialogId="1"; if(!wd.app) wd.app={}; wd.app.name='pms';</script>
  16. <script type="text/javascript" src="/ss/js/masklayer.js"></script>
  17. <script type="text/javascript" src="/ss/js/wdDialogInit.js"></script>
  18. <script type="text/javascript" src="/ss/js/common.js"></script>
  19. <script type="text/javascript" src="/ss/js/display.js"></script>
  20. <script type="text/javascript" src="/ss/js/edit.js"></script>
  21. <script type="text/javascript" src="/ss/nicescroll/jquery.nicescroll.js"></script>
  22. <script type="text/javascript" src="/ss/nicescroll/jquery.nicescroll.iframehelper.min.js"></script>
  23. <link rel="stylesheet" type="text/css" href="/ss/window/theme/dhtmlxwindows.css">
  24. <link rel="stylesheet" type="text/css" href="/ss/window/theme/dhx_blue/dhtmlxwindows_dhx_blue.css">
  25. <script type="text/javascript" src="/ss/window/dhtmlxcommon.js"></script>
  26. <script type="text/javascript" src="/ss/window/dhtmlxwindows.js"></script>
  27. <script type="text/javascript" src="/ss/window/dhtmlxcontainer.js"></script>
  28. <script type="text/javascript" src="/js/pageC.js"></script> <%-- 对象变动、修改、查看页,左则选项卡宽度 在里面定义 Ben(20251213) --%>
  29. <%
  30. if(pageContext.getSession().getAttribute("ssUser")==null){
  31. /* 再改,去掉 loginExp.ss.jsp(写死错误信息),改用 relogin.ss.jsp。Lin
  32. request.getRequestDispatcher(WebC.PPATH_loginExp).forward(request,response);
  33. */
  34. request.setAttribute(ServC.REQ_msg, WebC.LOGIN_expMsg);
  35. request.getRequestDispatcher(WebC.PPATH_relogin).forward(request,response);
  36. return;
  37. }
  38. %>
  39. <title>${sessionScope.projectUrlDesc}</title>
  40. <link rel="stylesheet" type="text/css" href="/ss/window/theme/dhtmlxwindows.css">
  41. <script type="text/javascript" src="/ss/window/dhtmlxcommon.js"></script>
  42. <%-- 去掉,上面已经有了。Lin(新UI)
  43. <script type="text/javascript" src="/ss/window/dhtmlxwindows.js"></script>
  44. --%>
  45. <script type="text/javascript" src="/ss/window/dhtmlxcontainer.js"></script>
  46. <script type="text/javascript" src="/ss/js/wdDialogInit.js"></script>
  47. <ss:skin file='dlg.css'/>
  48. <script type="text/javascript" src="/js/load.js"></script> <%-- ="/newUI/ss/js/base.js"。Lin(新UI) --%>
  49. </head>
  50. <body>
  51. <!-- menu标签输出start -->
  52. <%-- <ss:menu/>--%>
  53. <!-- menu标签输出end -->
  54. <div id="app" >
  55. <div class="self-block layout-container" :sys-mode="sysMode" :sys-mode-source="sysModeSource" v-show="isLockScreen==false"><%-- // 功能说明:透传 sysModeSource(desktop/biz)给 CSS 控制左侧菜单加号显隐 by xu 20260123 --%>
  56. <div class="header">
  57. <global-header :menu-data="menuData[8]" :icon-items="iconItems"></global-header>
  58. </div>
  59. <div class="content-area">
  60. <global-menu :menu-items="menuData[1]"></global-menu>
  61. <div class="main-content">
  62. <iframe
  63. :src="currentPage"
  64. frameborder="0"
  65. ifrType="appWin"
  66. name="win2"
  67. class="appIframe"
  68. oriSrc="/initDesktop?"
  69. ></iframe>
  70. </div>
  71. </div>
  72. </div>
  73. <div class="login-container lockscreen-container" style="background-image: url(/skin/easy/images/login-bg.png)" <%-- (/newUI/skin/easy/images/login-bg.png)。Lin(新UI) --%>
  74. v-show="isLockScreen == true" @click.self="toggleRight">
  75. <div class="left" @click.self="toggleRight"></div>
  76. <div class="right" :class="{ 'right--visible': isRightVisible }"
  77. @click="resetTimer"
  78. @mousemove="resetTimer">
  79. <div class="content-area">
  80. <div class="login-box">
  81. <ss-login-icon class="login-icon-change-user" onclick="wd.display.exit({homepage:1})"></ss-login-icon>
  82. <div class="box-header">
  83. <img :src="defaultPersonalPhoto" style="margin-bottom: 15px;" />
  84. <p>您好,${sessionScope['ssUser'].xm} 欢迎回来</p>
  85. </div>
  86. <div>
  87. </div>
  88. <div class="box-container">
  89. <form class="box-form">
  90. <div class="form-item">
  91. <div class="icon">
  92. <ss-login-icon class="login-icon-password" />
  93. </div>
  94. <ss-login-input type="password" v-model="formData.password"
  95. placeholder="请输入您的密码" />
  96. </div>
  97. <div class="form-bar">
  98. <span><ss-login-button class="login-icon-yaoyiyao" text="摇一摇登录" type="button"
  99. @click="handleClick" /></span>
  100. <span><ss-login-button class="login-icon-loginin" text="登录" type="button"
  101. @click="unlockSessionByPassword" /></span>
  102. </div>
  103. </form>
  104. <!-- 错误提示 -->
  105. <div v-if="errInfo.status" class="err-tip">
  106. <div class="time">
  107. <div v-for="i in errInfo.allTime" :key="i"
  108. :class="{ fill: errInfo.allTime - i < errInfo.time }"></div>
  109. </div>
  110. <div class="tip">{{ errInfo.tip }}</div>
  111. </div>
  112. </div>
  113. <div class="box-footer">
  114. <div class="left"></div>
  115. </div>
  116. </div>
  117. </div>
  118. <div class="footer">
  119. <div>服务单位:广州非繁科技有限公司</div>
  120. </div>
  121. </div>
  122. </div>
  123. </div>
  124. <script type="text/javascript" src="/js/lockScreen.js"></script> <%-- ="/newUI/ss/js/lockScreen.js"。Lin(新UI) --%>
  125. <%-- 去掉。Lin(新UI)
  126. 用新UI的 lockScreen.js(注意大小写)
  127. 先不去掉
  128. --%>
  129. <script type="text/javascript" src="/ss/js/lockscreen.js"></script>
  130. <ss:skin file='lock.css'/>
  131. <script>
  132. var body = $(window.top.document.body);
  133. // $(top.document.head).append('');
  134. var funcStr = " if($('#mm').attr('type') == 'password') {$('#mm').attr('type','text')} else {$('#mm').attr('type','password')}";
  135. var defaultPersonalPhoto=wd.common.loadSkinFile('image/default-personalPhoto.png');
  136. <ss:equal val='${empty sessionScope["ssUser"]["yszwj"]}' val2='false'>
  137. <%-- 改。Lin
  138. defaultPersonalPhoto="/service?wdService=getData&path=${sessionScope['env.ry']['yszwj']}"; --%>
  139. <%--defaultPersonalPhoto="/service?wdService=dlByHttp&path=${sessionScope['wd.yyh']['yszwj']}";--%>
  140. defaultPersonalPhoto="/service?ssServ=dlByHttp&type=img&path=${sessionScope['ssOrigUser']['yszwj']}";
  141. </ss:equal>
  142. body.append('<div class="lock-controll-screen" style="display:none;">'+
  143. '<div id="lock-screen" class="lock-screen login-js-lock-screen" style="background-color: rgb(0, 0, 0);">'+
  144. '<div class="lock-controll-panel login-translucentDiv" style="position:relative;">'+
  145. '<div class="login-sca" ></div>'+
  146. '<div class="login-black icon-replace" title="切换登录" style="width: 22px;height: 22px;margin-right: 5px;margin-top: 5px;cursor:pointer;position:absolute;top:0;right:0;" onclick="wd.display.exit({homepage:1})"></div>'+
  147. '<div class="welcomeWords" style="padding: 4px 24px;border-radius: 20px;text-align: center;"><div class="personalPhoto" style="margin-left: 98px;margin-bottom: 15px;"><img src="'+defaultPersonalPhoto+'" /></div><p class="login-unlockHello">您好,&nbsp;<input id="zh" name="zh" type="hidden" value="${sessionScope['ssUser'].xm}"></input>${sessionScope['ssUser'].xm}&nbsp;欢迎回来</p><p>&nbsp;</p></div>'+
  148. '<p class="lock-controll-input clearfix" ><input id="mm" name="mm" style="background:none !important;" class="login-header_password_sp login-input login-unlockInput" type="password" /><span class="ksmm icon-eye" onclick="'+funcStr+'"></span><button style="background-size:unset;" id="unlockByPassword" class="lock-controll-button icon-enter content-invertButton"></button><button id="unlockByApp" class="lock-controll-button content-invertButton invertIcon-mobile"></button><span class="icon-countdownButton" style="position: absolute;top: 0px;width: 45px;border-radius: 3px;right: -94px;line-height: 30px;text-align: center;"></span></p>'+
  149. '<p class="lock-controll-hint"><span style="text-align: center;display: block;font-size: 14px;margin-top: 10px;color: #f00;" id="lock-msg"></span></p>'+
  150. '<p class="lock-controll-button-container" style="display: flex;align-items: center;justify-content: space-between;"><button id="unlockByVoice" style="display:none" class="lock-controll-button login-jslock-button login-unlockByVoice">按住说话</button></p>'+
  151. '</div>'+
  152. '</div>'+
  153. '<div class="home-clock desktop-time">12:12</div>'+
  154. '</div>');
  155. body.append('<div id="background-desktop" class="background-desktop" style="display:none;"></div>');
  156. body.append('<ul class="home-tool desktop-time clearfix" style="display:none">' +
  157. '<li id="pl-list"><div class="pl-list-container"><div class="pl-list"></div><div id="pl-page" class="pl-page"></div></div><a href="#" class="icon-forum listIcon"></a></li>' +
  158. '<li id="dz-count"><div class="dz-count" id="dz-count"><div id="dz-count-text" class="login-dz-count-text"></div></div><a href="#" class="icon-like listIcon"></a></li>' +
  159. '<li id="pic-info"><div class="pic-info login-pic-info"><table><tr><th>作者</th><td id="pic-zz-text"></td></tr><tr><th>发布时间</th><td id="pic-fbsj-text"></td></tr><tr><th>名称</th><td id="pic-mc-text"></td></tr></table></div><a href="#" class="icon-info listIcon"></a></li>' +
  160. '</ul>');
  161. /** 锁屏监听处理开始 **/
  162. var lockScreenData = {
  163. url1: '<ss:serv name='wd.lockSession' parm='{"wdConfirmationCaptchaService":"0"}'/>',
  164. url2: '<ss:serv name='wd.checkIsUnlockedByApp' parm='{"wdConfirmationCaptchaService":"0"}'/>',
  165. url3: '<ss:serv name='unlockByPwd' parm='{"wdConfirmationCaptchaService":"0"}'/>',
  166. url4: '<ss:serv name='loadDeskImg' parm='{"wdConfirmationCaptchaService":"0"}'/>',
  167. url5: '<ss:serv name='pl_cxajax' parm='{"wdConfirmationCaptchaService":"0"}'/>',
  168. url6: 'wd.display.showComponent({show:["wdDialog"],url:"<ss:serv name='pl_cx' parm='{"wdConfirmationCaptchaService":"0"}' dest='pl_cx'/>",title:"pl_cx",width:650,height:555});',
  169. url7: '<ss:serv name='nr_dz' parm='{"wdConfirmationCaptchaService":"0"}'/>',
  170. url8: '<ss:serv name='wrLockStat' parm='{"wdConfirmationCaptchaService":"0"}'/>'
  171. };
  172. // 将锁屏需要的东西放进sessionStorage里
  173. sessionStorage.setItem("lockScreenData",JSON.stringify(lockScreenData));
  174. // 获取sessionStorage里用户设置的锁屏时间
  175. var time = sessionStorage.getItem("lockTime");
  176. //var time = 2;
  177. console.log("用户设置的锁屏时间",time)
  178. if(!time){
  179. time = 15;
  180. }
  181. // 实例化锁屏方法,time分钟后锁屏
  182. // var lock = new LockScreen($(top.document).find('.lock-controll-screen'),$(top.document).find('#home-background'),$(top.document).find('.home-tool'),time,lockScreenData);
  183. // 键盘按下重新设置锁屏
  184. // $(document).keydown(function(event){
  185. // // time分钟后重新锁屏
  186. // lock.setupAutoLock(time);
  187. // });
  188. // 鼠标移动重新设置锁屏
  189. // document.onmousemove = function() {
  190. // // time分钟后重新锁屏
  191. // lock.setupAutoLock(time);
  192. // }
  193. /** 锁屏监听处理结束 **/
  194. function lockScreenFun(){
  195. console.log("锁屏点击了2");
  196. wd.display.beaconLogin("loginOut");
  197. $(top.document).find('#background-desktop').css('display','block');
  198. $.ajax({
  199. type: 'POST',
  200. url: '<ss:serv name='wrLockStat' parm='{"wdConfirmationCaptchaService":"0"}'/>',
  201. data: {},
  202. async: false,
  203. success: function (data) {
  204. console.log("成功锁屏");
  205. lock.lockSession(time);
  206. },
  207. });
  208. }
  209. wd.topWindow.lockScreen=function(){
  210. $('#lock').trigger("click");
  211. }
  212. var passwordeye = $('.login-eyeIcon');
  213. var showPwd = $(".login-unlockInput");
  214. passwordeye.on('click', function() {
  215. console.log(1111111111111);
  216. if(showPwd.prop('type') == 'text') {
  217. showPwd.prop('type', 'password');
  218. } else {
  219. showPwd.prop('type', 'text');
  220. };
  221. });
  222. var kscs =parseInt('<%=base.SsC.LOGIN_maxNum %>');
  223. var cwcs = 0;
  224. var cs="";
  225. for(let i = 1;i<=kscs;i++){
  226. if(i>cwcs){
  227. cs += '<span class="login-sc login-used login-unused" style="display:none;width: 8px;height: 8px;border-radius: 50%;float: left;margin-right: 5px;" time="'+i+'"></span>';
  228. }else{
  229. cs += '<span class="login-sc login-used login-used" style="display:none;width: 8px;height: 8px;border-radius: 50%;float: left;margin-right: 5px;" time="'+i+'"></span>';
  230. }
  231. }
  232. $(".login-sca").append(cs);
  233. console.log("出去了");
  234. function goToIndex() {
  235. delCookie("userId");
  236. var sbbs = $("input[name='sbbs']").val();
  237. var ysbbs = $("input[name='ysbbs']").val();
  238. window.location.href = "/index?homepage=1&sbbs=" + sbbs+"&ysbbs=" + ysbbs;
  239. }
  240. function getCookie(name){
  241. var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
  242. if(arr=document.cookie.match(reg))
  243. return unescape(arr[2]);
  244. else
  245. return null;
  246. }
  247. function delCookie(name){
  248. var exp = new Date();
  249. exp.setTime(exp.getTime() - 1);
  250. var cval=getCookie(name);
  251. if(cval!=null)
  252. document.cookie= name + "="+cval+";expires="+exp.toGMTString();
  253. }
  254. </script>
  255. <script type="module">
  256. import { eventBus, EVEN_VAR } from "/js/vue/EventBus.js"; <%-- "/newUI/ss/js/EventBus.js"。Lin(新UI) --%>
  257. SS.ready(function() {
  258. if (!window.sharedEventBus) {
  259. window.sharedEventBus = eventBus;
  260. }
  261. const sysMode = {
  262. read: {
  263. key: "read",
  264. icon: "setting",
  265. },
  266. edit: {
  267. key: "edit",
  268. icon: "check",
  269. },
  270. };
  271. const currentMode = Vue.ref(sysMode.read.key);
  272. const toggoleSysMode = function (key) {
  273. // 功能说明:区分“桌面页(initDesktop)”与“业务页(iframe 内其他页面)”的编辑模式切换,用于排查加号/编辑态联动 by xu 20260123
  274. try {
  275. const iframeEl = document.querySelector(".layout-container iframe.appIframe");
  276. const iframeSrc = iframeEl?.getAttribute?.("src") || iframeEl?.src || "";
  277. const isDesktop = String(iframeSrc || "").indexOf("initDesktop") > -1;
  278. console.log("[sysMode] toggle click", {
  279. page: isDesktop ? "desktop" : "biz",
  280. iframeSrc: iframeSrc,
  281. from: currentMode.value,
  282. });
  283. } catch (_) {}
  284. let newKey = sysMode.edit.key;
  285. if (currentMode.value === sysMode.edit.key) {
  286. newKey = sysMode.read.key;
  287. // SYBJCTRL.saveedit(SESSION_STATE); //保存编辑模式
  288. }else{
  289. // 功能说明:只有桌面页才尝试调用 userEdit;业务页场景 userEdit 可能不存在,不能阻断 sysMode 切换 by xu 20260123
  290. try {
  291. const iframeEl = document.querySelector(".layout-container iframe.appIframe");
  292. const iframeSrc = iframeEl?.getAttribute?.("src") || iframeEl?.src || "";
  293. const isDesktop = String(iframeSrc || "").indexOf("initDesktop") > -1;
  294. const userEdit = wd?.topWindow?.gxhymWindow?.userEdit;
  295. if (isDesktop && typeof userEdit === "function") {
  296. userEdit("gr");
  297. // userEdit("gf"); //打开编辑模式
  298. } else {
  299. console.log("[sysMode] skip userEdit", { isDesktop: isDesktop, hasUserEdit: typeof userEdit === "function", iframeSrc: iframeSrc });
  300. }
  301. } catch (e) {
  302. try { console.warn("[sysMode] userEdit failed", e); } catch (_) {}
  303. }
  304. }
  305. // 设置系统模式
  306. currentMode.value = newKey;
  307. // 功能说明:发布 systemEditModelChange 时携带来源(desktop/biz),用于 CSS 控制左侧菜单加号显隐 by xu 20260123
  308. try {
  309. const iframeEl = document.querySelector(".layout-container iframe.appIframe");
  310. const iframeSrc = iframeEl?.getAttribute?.("src") || iframeEl?.src || "";
  311. const isDesktop = String(iframeSrc || "").indexOf("initDesktop") > -1;
  312. eventBus.publish(EVEN_VAR.systemEditModelChange, { mode: newKey, source: isDesktop ? "desktop" : "biz" });
  313. } catch (_) {
  314. eventBus.publish(EVEN_VAR.systemEditModelChange, newKey);
  315. }
  316. }
  317. // 调用组件中的初始化方法
  318. window.SS.dom.initializeFormApp({
  319. el: "#app",
  320. data() {
  321. return {
  322. lockTime: sessionStorage.getItem("lockTime") || 15,
  323. isLockScreen: ${!empty sessionScope.isLockScreen},
  324. isRightVisible: false,
  325. hideTimer: null,
  326. defaultPersonalPhoto: "",
  327. errInfo: {
  328. status: false,
  329. time: 5,
  330. allTime: 5,
  331. tip: "",
  332. },
  333. formData: {
  334. password: "",
  335. },
  336. sysMode: sysMode.read.key,
  337. sysModeSource: "desktop", // 功能说明:系统编辑模式来源(desktop/biz/menu/unknown),用于控制左侧菜单加号显隐 by xu 20260123
  338. currentPage: "/initDesktop?",
  339. menuData: {
  340. "8": //系统菜单(左上角LOGO下拉出来的菜单)
  341. [],
  342. "1"://侧方菜单(主菜单)
  343. [{
  344. desc: "首页",
  345. icon: "nav-icon-home",
  346. pid:"00001",
  347. type:"2",
  348. url:'/initDesktop?'
  349. }]
  350. },
  351. iconItems: [
  352. { name: 'qiehuan', class: 'header-toolbar-icon', action: () => eventBus.publish('toggleGlobalMenuMode') }, //功能: 切换左侧菜单模式(图标跟随菜单模式切换)by xu 20251222
  353. { name: 'question', class: 'header-toolbar-icon icon-help-bold', action: () => wd.display.showComponent({show:["wdDialog"],url:"<ss:serv name='querySYSHelp' parm='{"wdConfirmationCaptchaService":"0","ishelp":"true","dialogid":"1"}' dest='cmsPlay'/>",title:"使用指南",width:900,height:800,minHeight:1,maxHeight:800}) }, //功能: 顶部帮助图标 by xu 20251222
  354. { name: 'check', class: 'header-toolbar-icon icon-save', condition: () => currentMode.value === sysMode.edit.key, action: () => toggoleSysMode()}, //功能 by xu 20251222
  355. { name: 'setting-fill', class: 'header-toolbar-icon icon-set-bold', condition: () => currentMode.value !== sysMode.edit.key, action: () => toggoleSysMode() }, //功能 by xu 20251222
  356. // { name: 'list-fill', class: 'header-toolbar-icon', action: () => console.log('list-fill clicked') }, //功能: 顶部菜单按钮暂时隐藏 by xu 20251222
  357. { name: 'topic-fill', class: 'header-toolbar-icon icon-skin', action: () => wd.display.showComponent({show:["wdDialog"],url:"<ss:serv name='gxhpf_cx' parm='{"wdConfirmationCaptchaService":"0"}' dest='ty_hf'/>",title:"换肤",width:799,height:757}) }, //功能 by xu 20251222
  358. { name: 'lock-fill', class: 'header-toolbar-icon icon-lock-bold', action: () => this.lockScreenFun() }, //功能 by xu 20251222
  359. { name: 'quit', class: 'header-toolbar-logout-icon icon-exit', action: () => wd.display.exit() }, //功能 by xu 20251222
  360. ],
  361. };
  362. },
  363. methods: {
  364. setupAutoLock() {
  365. if(this.autoLockTimer) {
  366. clearTimeout(this.autoLockTimer);
  367. }
  368. this.autoLockTimer = setTimeout(() => {
  369. console.log('自动锁屏');
  370. this.lockScreenFun();
  371. }, this.lockTime * 60 * 1000);
  372. },
  373. // 编辑模式变化
  374. sysEditModelChange(payload) {
  375. // 功能说明:兼容旧入参(mode 字符串)与新入参({mode,source}),并同步 currentMode 供 header 按钮显隐 by xu 20260123
  376. const mode = (payload && typeof payload === "object") ? payload.mode : payload;
  377. const source = (payload && typeof payload === "object") ? payload.source : "unknown";
  378. this.sysMode = mode;
  379. this.sysModeSource = source || "unknown";
  380. try { currentMode.value = mode; } catch (_) {}
  381. },
  382. currentPageChange(page) {
  383. this.currentPage = "./" + page;
  384. },
  385. showErrorMsg(msg,sydlcs,zcs){
  386. console.log(msg,sydlcs,zcs);
  387. var kscs = zcs;
  388. var cs = '';
  389. // for (let i = 1; i <= kscs; i++) {
  390. // if (i <= (zcs - sydlcs)) {
  391. // cs = '<span class="login-sc login-used login-used" style="width: 8px;height: 8px;display:block;border-radius: 50%;float: left;margin-right: 5px;" time="' + i + '"></span>';
  392. // } else {
  393. // cs = '<span class="login-sc login-used login-unused" style="width: 8px;height: 8px;display: block;border-radius: 50%;float: left;margin-right: 5px;" time="' + i + '"></span>';
  394. // }
  395. // console.log(cs);
  396. // }
  397. this.errInfo.time = sydlcs;
  398. this.errInfo.allTime = zcs;
  399. this.errInfo.tip = msg;
  400. this.errInfo.status = true;
  401. if (sydlcs == zcs) {
  402. this.errInfo.status = false;
  403. }
  404. if (0 >= sydlcs) {
  405. this.errInfo.status = true;
  406. this.errInfo.time = 0;
  407. this.errInfo.allTime = 5;
  408. this.errInfo.tip = msg;
  409. return false;
  410. } else {
  411. this.errInfo.status = true;
  412. this.errInfo.tip = msg;
  413. }
  414. },
  415. lockScreenFun(){
  416. console.log("锁屏点击了1");
  417. this.isLockScreen = true;
  418. $("#app").css("position", "relative");
  419. wd.display.beaconLogin("loginOut");
  420. $.ajax({
  421. type: 'POST',
  422. url: '<ss:serv name='wrLockStat' parm='{"wdConfirmationCaptchaService":"0"}'/>',
  423. data: {},
  424. async: false,
  425. success: function (data) {
  426. console.log("成功锁屏");
  427. // lock.lockSession(time);
  428. },
  429. });
  430. },
  431. unlockSessionByPassword(){
  432. console.log("解锁");
  433. $("#app").css("position", "");
  434. var mm=this.formData.password;
  435. if(!mm){
  436. this.errInfo.status = true;
  437. this.errInfo.tip = "请输入密码";
  438. this.errInfo.time = 5;
  439. return;
  440. }
  441. var that = this;
  442. $.ajax({
  443. url: '<ss:serv name='unlockByPwd' parm='{"wdConfirmationCaptchaService":"0"}'/>',
  444. dataType: 'json',
  445. type: 'POST',
  446. data: {
  447. mm: mm,
  448. },
  449. success: function(data) {
  450. // context.target.find('#lock-msg').html(data.msg);
  451. if (data.code == -1) {
  452. that.showErrorMsg(data.msg, data.sydlcs, data.zcs);
  453. }
  454. if (data.code == 0) {
  455. that.isLockScreen = false;
  456. that.formData.password = "";
  457. that.errInfo.status = false;
  458. that.errInfo.time = 5;
  459. that.errInfo.allTime = 5;
  460. }
  461. },
  462. });
  463. },
  464. changeUser(){
  465. console.log('Button clicked!', event);
  466. },
  467. toggleRight() {
  468. this.isRightVisible = !this.isRightVisible;
  469. // 清除之前的定时器
  470. if (this.hideTimer) {
  471. clearTimeout(this.hideTimer);
  472. }
  473. // 设置新的定时器
  474. if (this.isRightVisible) {
  475. this.hideTimer = setTimeout(() => {
  476. this.isRightVisible = false;
  477. }, 10000);
  478. }
  479. },
  480. // 当用户在右侧区域操作时,重置定时器
  481. resetTimer() {
  482. if (this.hideTimer) {
  483. clearTimeout(this.hideTimer);
  484. }
  485. this.hideTimer = setTimeout(() => {
  486. this.isRightVisible = false;
  487. }, 10000);
  488. }
  489. },
  490. mounted() {
  491. // console.log(window.SS)
  492. console.log(window.top.SS)
  493. window.top.SS.lockScreenService.init(this);
  494. eventBus.subscribe(EVEN_VAR.systemEditModelChange,this.sysEditModelChange);
  495. eventBus.subscribe(EVEN_VAR.currentPage, this.currentPageChange);
  496. // 监听锁屏
  497. // 设置键盘和鼠标事件监听
  498. document.addEventListener('keydown', () => {
  499. this.setupAutoLock();
  500. });
  501. document.addEventListener('mousemove', () => {
  502. this.setupAutoLock();
  503. });
  504. this.setupAutoLock();
  505. <ss:equal val='${empty sessionScope.isLockScreen}' val2='false'>
  506. this.lockScreenFun();
  507. </ss:equal>
  508. this.defaultPersonalPhoto = wd.common.loadSkinFile('image/default-personalPhoto.png');
  509. // 如果用户有自定义头像,则使用自定义头像
  510. <ss:equal val='${empty sessionScope["ssUser"]["yszwj"]}' val2='false'>
  511. <%-- 改。Lin
  512. defaultPersonalPhoto="/service?wdService=getData&path=${sessionScope['env.ry']['yszwj']}"; --%>
  513. <%--this.defaultPersonalPhoto="/service?wdService=dlByHttp&path=${sessionScope['wd.yyh']['yszwj']}";--%>
  514. this.defaultPersonalPhoto="/service?ssServ=dlByHttp&type=img&path=${sessionScope['ssOrigUser']['yszwj']}";
  515. </ss:equal>
  516. const that = this;
  517. $.ajax({
  518. type: 'POST',
  519. url: '<ss:serv name='wrMenuList'/>',
  520. async: false,
  521. dataType: 'json',
  522. success: function (data) {
  523. // alert('菜单数据:'+JSON.stringify(data));
  524. that.menuData = data;
  525. <%-- 测试新UI临时写死 start --%>
  526. // that.menuData["1"].unshift({
  527. // desc: "单位",
  528. // icon: "nav-icon-home",
  529. // pid:"00001",
  530. // type:"2",
  531. // url:'<ss:serv name='dw_cx' dest='objList_bk' parm='{}'/>'
  532. // });
  533. // that.menuData["1"].unshift({
  534. // desc: "在用单位-部门",
  535. // icon: "nav-icon-home",
  536. // pid:"00001",
  537. // type:"2",
  538. // url:'<ss:serv name='bm_cx' dest='1objList' parm='{dwid:"101122",ssObjId:"101122",ssObjName:"dw",dataType:"change",ParentViewObject:"dw"}'/>'
  539. // });
  540. // that.menuData["1"].unshift({
  541. // desc: "人员",
  542. // icon: "nav-icon-person",
  543. // pid:"00001",
  544. // type:"2",
  545. // url:'<ss:serv name='ry_cx' dest='1ryList' parm='{}'/>'
  546. // });
  547. <%-- 测试新UI临时写死 end --%>
  548. that.menuData["1"].unshift({
  549. desc: "首页",
  550. iconName: "icon-home", // v3.0 改为使用新图标库 by xu 20251215
  551. pid:"00001",
  552. type:"2",
  553. url:'/initDesktop?'
  554. });
  555. // v3.0 使用后端返回的 iconName 设置图标 by xu 20251219
  556. that.menuData["1"].forEach(item => {
  557. if(item.iconName) {
  558. item.icon = item.iconName;
  559. }
  560. });
  561. // v3.0 header 菜单也使用后端返回的 iconName by xu 20251219
  562. if(that.menuData["8"]) {
  563. that.menuData["8"].forEach(item => {
  564. if(item.iconName) {
  565. item.icon = item.iconName;
  566. }
  567. });
  568. }
  569. },
  570. });
  571. // 初始化菜单模式为收起(设置CSS变量)
  572. const layoutContainer = document.querySelector('.layout-container');
  573. if (layoutContainer) {
  574. layoutContainer.style.setProperty('--left-side-width', '60px');
  575. }
  576. },
  577. unmounted() {
  578. // 清理定时器和事件监听
  579. if(this.autoLockTimer) {
  580. clearTimeout(this.autoLockTimer);
  581. }
  582. document.removeEventListener('keydown', this.setupAutoLock);
  583. document.removeEventListener('mousemove', this.setupAutoLock);
  584. eventBus.clear(
  585. EVEN_VAR.systemEditModelChange,
  586. this.sysEditModelChange
  587. );
  588. },
  589. });
  590. });
  591. </script>
  592. </body>
  593. </html>