login.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>登录</title>
  6. <!-- 资 源 引 入 -->
  7. <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
  8. <!--[if lt IE 9]>
  9. <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
  10. <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
  11. <![endif]-->
  12. <script>
  13. var href = window.location.href;
  14. if(href.indexOf('/addons/') != -1){
  15. localStorage.setItem("sysType", "W7");
  16. }else{
  17. localStorage.setItem("sysType", "");
  18. }
  19. localStorage.setItem("version", "2.0.1.Release"); //静态资源版本号
  20. // localStorage.setItem("sysType", "W7"); //系统类型
  21. if (localStorage.getItem("sysType") == 'W7') {
  22. localStorage.setItem("w7Type", "W7"); //W7类型
  23. localStorage.setItem("moduleName", "wike_chatgpt"); //静态资源版本号
  24. // W7
  25. localStorage.setItem("adminDomainModel", "false"); // /public/admin目录是否独立绑定域名模式
  26. if (localStorage.getItem("sysType") == 'W7R'){
  27. localStorage.setItem("adminApiDomain", "/addons/" + localStorage.getItem("moduleName") +
  28. "/public/"); // 请求后台接口的域名
  29. }else{
  30. localStorage.setItem("adminApiDomain", "/addons/" + localStorage.getItem("moduleName") +
  31. "/public/index.php"); // 请求后台接口的域名
  32. }
  33. localStorage.setItem("staticDomain", "/addons/" + localStorage.getItem("moduleName") + "/public/static"); // 请求静态资源的域名
  34. document.write("<link rel='stylesheet' href='" + localStorage.getItem("staticDomain") + "/component/layui/css/layui.css?v=" + localStorage.getItem("version") + "'>");
  35. document.write("<link rel='stylesheet' href='" + localStorage.getItem("staticDomain") + "/admin/css/other/login.css?v=" + localStorage.getItem("version") + "'>");
  36. } else {
  37. //独立版
  38. localStorage.setItem("adminDomainModel", "true"); // /public/admin目录是否独立绑定域名模式
  39. localStorage.setItem("adminApiDomain", ""); // 请求后台接口的域名
  40. localStorage.setItem("adminDomain", ""); //
  41. localStorage.setItem("staticDomain", "/static"); // 请求静态资源的域名
  42. document.write("<link rel='stylesheet' href='/static/component/layui/css/layui.css?v=" + localStorage.getItem("version") + "'>");
  43. document.write("<link rel='stylesheet' href='/static/admin/css/other/login.css?v=" + localStorage.getItem("version") + "'>");
  44. }
  45. </script>
  46. </head>
  47. <!-- 代 码 结 构 -->
  48. <body style="background-size: cover;display:none;">
  49. <form class="layui-form" lay-filter="layui-form" action="javascript:void(0);">
  50. <div class="layui-form-item">
  51. <img class="logo" />
  52. <div class="title">ChatGPT分销版</div>
  53. <div class="desc">
  54. 一款基于chatgpt的应用
  55. </div>
  56. </div>
  57. <div class="layui-form-item">
  58. <input name="username" placeholder="账 户 : " lay-verify="required" hover class="layui-input" autocomplete="off" />
  59. </div>
  60. <div class="layui-form-item login-form-item">
  61. <input type="password" name="password" placeholder="密 码 : " lay-verify="required" hover class="layui-input" />
  62. </div>
  63. <div class="layui-form-item login-form-item verifyCodeItem">
  64. <input name="verify_code" placeholder="验证码 : " hover lay-verify="required" class="code layui-input layui-input-inline" autocomplete="off" />
  65. <img class="codeImage" />
  66. </div>
  67. <div class="layui-form-item login-form-item">
  68. <input type="checkbox" name="remember" title="记住密码" lay-skin="primary" checked>
  69. </div>
  70. <div class="layui-form-item login-form-item">
  71. <button type="submit" class="laytp-btn laytp-btn-success login" lay-submit lay-filter="login">
  72. 登 入
  73. </button>
  74. </div>
  75. </form>
  76. </body>
  77. <!-- 依 赖 脚 本 -->
  78. <script>
  79. if(localStorage.getItem("staticDomain")){
  80. document.write("<link rel='stylesheet' href='" + localStorage.getItem("staticDomain") + "/component/layui/css/layui.css?v=" + localStorage.getItem("version") + "'>");
  81. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/layui/layui.js?v="+localStorage.getItem("version")+"'><\/script>");
  82. document.write("<script src='" + localStorage.getItem("staticDomain") + "/component/laytp/layuiConfig.js?v="+localStorage.getItem("version")+"'><\/script>");
  83. }else{
  84. document.write("<link rel='stylesheet' href='/static/component/layui/css/layui.css?v=" + localStorage.getItem("version") + "'>");
  85. document.write("<script src='/static/component/layui/layui.js?v="+localStorage.getItem("version")+"'><\/script>");
  86. document.write("<script src='/static/component/laytp/layuiConfig.js?v="+localStorage.getItem("version")+"'><\/script>");
  87. }
  88. </script>
  89. <!-- 框 架 初 始 化 -->
  90. <script>
  91. let tokenCookieKey = "laytpAdminToken";//Header中传递的token的key名称
  92. let tokenKey = "LayTp-Admin-Token";//Header中传递的token的key名称
  93. let ajaxHeaders = {
  94. "LayTp-Admin-Token": getCookie(tokenCookieKey),
  95. "Cache-Control": "no-cache"
  96. };//ajax请求默认发送的Header部分
  97. function getCookie(name) {
  98. let arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
  99. if (arr != null) {
  100. return (arr[2]);
  101. } else {
  102. return "";
  103. }
  104. }
  105. layui.use(['laytp','button'], function() {
  106. var form = layui.form;
  107. var $ = layui.$;
  108. var context = layui.context;
  109. if(localStorage.getItem("staticDomain")) {
  110. $('body').attr('background', localStorage.getItem("staticDomain") + '/admin/images/background.svg');
  111. $('.logo').attr('src', localStorage.getItem("staticDomain") + '/admin/images/logo.png');
  112. }else{
  113. $('body').attr('background', '/static/admin/images/background.svg');
  114. $('.logo').attr('src', '/static/admin/images/logo.png');
  115. }
  116. if(localStorage.getItem("adminApiDomain")) {
  117. $('.codeImage').attr('src', localStorage.getItem("adminApiDomain") + '/captcha/login');
  118. }else{
  119. $('.codeImage').attr('src', '/captcha/login');
  120. }
  121. // 背景图,验证码都是使用js动态加载的,因此需要先隐藏整个body层,然后执行加载背景图和验证码,然后显示body层,如果不这么做,页面加载时会闪烁
  122. $('body').show();
  123. //获取是否需要验证码配置项
  124. facade.ajax({
  125. route: "/admin.common/getLoginNeedCaptchaConf",
  126. successAlert: false
  127. }).done(function (res) {
  128. if (res.code === 0) {
  129. if(res.data == 1){
  130. if(localStorage.getItem("adminApiDomain")) {
  131. $('.codeImage').attr('src', localStorage.getItem("adminApiDomain") + '/captcha/login');
  132. }else{
  133. $('.codeImage').attr('src', '/captcha/login');
  134. }
  135. }else{
  136. $(".verifyCodeItem").remove();
  137. }
  138. }
  139. // 背景图,验证码都是使用js动态加载的,因此需要先隐藏整个body层,然后执行加载背景图和验证码,然后显示body层,如果不这么做,页面加载时会闪烁
  140. $('body').show();
  141. });
  142. //点击验证码图片,获取新的验证码图片地址
  143. layui.$(document).off("click", ".codeImage").on("click", ".codeImage", function () {
  144. if(localStorage.getItem("adminApiDomain")) {
  145. this.src = localStorage.getItem("adminApiDomain") + "/captcha/login?v=" + Math.random();
  146. }else{
  147. this.src = "/captcha/login?v=" + Math.random();
  148. }
  149. });
  150. // 登 录 提 交
  151. form.on('submit(login)', function(data) {
  152. var buttonAnim = layui.button.load({elem: '.login'});
  153. data.field.session_id = facade.getCookie('PHPSESSID');
  154. facade.ajax({route: '/admin.admin.user/login', data: data.field, successAlert: false}).done(function(res){
  155. if (res['code'] === 0) {
  156. layui.popup.success("登录成功",function(){
  157. var sysType = facade.getSysType(),
  158. moduleName = facade.getModuleName();
  159. // console.log(sysType)
  160. var isAdminDomainModel = facade.isAdminDomainModel();
  161. facade.clearCache();
  162. let days = 0;
  163. if (data.field.remember === 'on') {
  164. days = 365;
  165. }
  166. context.put("user", res.data.user);
  167. context.put("authList", res.data.authList);
  168. context.put("pluginConf", res.data.pluginConf);
  169. facade.setCookie(tokenCookieKey, res['data']['user']['token'], days);
  170. context.put("tokenCookieKey",tokenCookieKey);
  171. context.put("tokenKey",tokenKey);
  172. //ajaxHeaders
  173. var ajaxHeaders = {};
  174. ajaxHeaders[context.get("tokenKey")] = facade.getCookie(context.get("tokenCookieKey"));
  175. ajaxHeaders["Cache-Control"] = "no-cache";
  176. context.put("ajaxHeaders", ajaxHeaders);
  177. //数据表格顶部按钮,默认的按钮监听事件,lay-event的值,包括添加、编辑、删除、搜索、刷新、回收站、回收站刷新、回收站搜索、还原、真实删除
  178. context.put("defaultTableToolbar",['add', 'edit', 'del', 'search', 'recycle', 'refresh', 'recycle-refresh', 'recycle-search', 'restore', 'true-del']);
  179. //数据表格每行的操作列按钮
  180. context.put("defaultTableTool",['detail', 'edit', 'del', 'restore', 'true-del']);
  181. if (sysType == 'W7') {
  182. window.location.href = '/addons/' + moduleName + '/public/admin/index.html';
  183. } else {
  184. window.location.href = '/index.html';
  185. }
  186. });
  187. } else {
  188. $(".codeImage").click();
  189. }
  190. buttonAnim.stop();
  191. }).fail(function(){
  192. buttonAnim.stop();
  193. });
  194. return false;
  195. });
  196. });
  197. </script>
  198. </html>