From 5d745c2c8854d2c1e94e5ee9004d5219681f6d7c Mon Sep 17 00:00:00 2001
From: 石广澎 <shiguangpeng@163.com>
Date: 星期五, 29 十二月 2023 11:02:50 +0800
Subject: [PATCH] 增加图片验证码和登录日志

---
 admin-web/src/views/login/index.vue                  |  127 ++++++++++++++++---------
 admin-web/src/views/systemSetting/logs/loginLogs.vue |  111 ++++++++++++++++++++++
 admin-web/public/static/config.js                    |   10 +-
 admin-web/src/utils/auth.js                          |    2 
 4 files changed, 198 insertions(+), 52 deletions(-)

diff --git a/admin-web/public/static/config.js b/admin-web/public/static/config.js
index 547f1bd..4d0e4aa 100644
--- a/admin-web/public/static/config.js
+++ b/admin-web/public/static/config.js
@@ -4,12 +4,12 @@
 const SettingIplatform = {
   // 鏈嶅姟鍣ㄥ湴鍧�
   // 涓婁紶璺緞
-  ftpUrl: 'https://yqzx.jinmingyuan.com/lowConsum',//娴嬭瘯
-  // ftpUrl: protocol + '//'+ host + '/file',// 姝e紡,
+  /*ftpUrl: 'https://yqzx.jinmingyuan.com/lowConsum',//娴嬭瘯
+  apiBaseURL: 'https://yqzx.jinmingyuan.com/lowConsum',//娴嬭瘯*/
   // 鎺ュ彛璇锋眰鍦板潃
-  // apiBaseURL: 'https://yqzx.jinmingyuan.com/lowConsum',//娴嬭瘯
-  // apiBaseURL: 'http://127.0.0.1:8083/lowConsum',//寮�鍙�
-  // apiBaseURL: 'http://172.16.60.155:8083/lowConsum',//寮�鍙�
+  /*ftpUrl: 'http://172.16.20.6:8083/lowConsum',//寮�鍙�
+  apiBaseURL: 'http://172.16.20.6:8083/lowConsum',//寮�鍙�*/
+  ftpUrl: protocol + '//'+ host + '/file',// 姝e紡,
   apiBaseURL: protocol + '//'+ host + '/lowapi',// 姝e紡,
   debug: false //璋冭瘯寮�鍏�  true鏃朵細杈撳嚭璇锋眰鏃ュ織
 };
diff --git a/admin-web/src/utils/auth.js b/admin-web/src/utils/auth.js
index 7607ab9..b490a6b 100644
--- a/admin-web/src/utils/auth.js
+++ b/admin-web/src/utils/auth.js
@@ -1,6 +1,6 @@
 import storage from 'store';
 
-const TokenKey = 'iplatform_token';
+const TokenKey = 'low_consum_iplatform_token';
 const userKey = 'user'
 const userInfo = 'userInfo'
 export function getToken() {
diff --git a/admin-web/src/views/login/index.vue b/admin-web/src/views/login/index.vue
index f0a9ca2..bbec4a5 100644
--- a/admin-web/src/views/login/index.vue
+++ b/admin-web/src/views/login/index.vue
@@ -52,24 +52,20 @@
                       :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"
                     /></span>
                   </el-form-item>
-<!--                  <el-form-item prop="code" class="captcha" v-if="loginForm.verifyType==='code' && captchaEnabled">-->
-<!--                    <div class="captcha">-->
-<!--                      <el-input-->
-<!--                        v-model.trim="loginForm.code"-->
-<!--                        style="width: 218px"-->
-<!--                        prefix-icon="el-icon-message"-->
-<!--                        placeholder="楠岃瘉鐮�"-->
-<!--                        type="text"-->
-<!--                        tabindex="3"-->
-<!--                        autocomplete="off"-->
-<!--                      />-->
-<!--                      <div class="imgs" @click="getCode()">-->
-<!--                        &lt;!&ndash;                <img :src="captchatImg" />&ndash;&gt;-->
-<!--                        <img :src="codeUrl"/>-->
-<!--                        <span v-show="showCaptchatImg">宸插け鏁�</span>-->
-<!--                      </div>-->
-<!--                    </div>-->
-<!--                  </el-form-item>-->
+                  <el-form-item prop="code" class="captcha" v-if="loginForm.verifyType==='code' && captchaEnabled">
+                    <el-input
+                      v-model.trim="loginForm.code"
+                      style="width: 218px"
+                      placeholder="楠岃瘉鐮�"
+                      type="text"
+                      tabindex="3"
+                      autocomplete="off"
+                    />
+                    <div class="imgs" @click="getCode()">
+                      <img :src="codeUrl"/>
+                      <span v-show="showCaptchatImg">宸插け鏁�</span>
+                    </div>
+                  </el-form-item>
                   <el-button
                     id="loginBtn"
                     :loading="loading"
@@ -127,18 +123,13 @@
         },
       },
       loginForm: {
-        account: 'jmy123456', // admin
-        password: 'Adu_8097',
+        account: '', // admin
+        password: '',
         // key: '',
         uuid: '',
         code: '',
         loginType: 'user_pass',  // 鐢ㄦ埛鍚嶃�佸瘑鐮佹柟寮忕櫥褰�
         verifyType: 'code'     //  'code': 楠岃瘉鐮�  'slide':婊戝潡  'jigsaw':鎷煎浘
-        // captcha: {
-        //   captchaVerification: '',
-        //   secretKey: '',
-        //   token: '',
-        // },
       },
       loginRules: {
         account: [{required: true, trigger: 'blur', message: '璇疯緭鍏ョ敤鎴峰悕'}], // validator: validateUsername
@@ -154,7 +145,7 @@
       disabled: false,
       isWeixin: this.$wechat.isWeixin(),
       // 楠岃瘉鐮佸紑鍏�
-      captchaEnabled: true
+      captchaEnabled: false
     };
   },
   components: {},
@@ -272,7 +263,7 @@
       if (this.loginForm.verifyType === 'code') {
         getCodeImg().then(data => {
           this.captchaEnabled = data.captchaEnabled === undefined ? true : data.captchaEnabled;
-          console.log("captchaEnabled = " + this.captchaEnabled);
+
           if (this.captchaEnabled) {
             this.codeUrl = "data:image/jpeg;base64," + data.img;
           }
@@ -328,16 +319,20 @@
     color: $cursor;
   }
 }
+
 .flex-1 {
   flex: 1;
 }
+
 .min-1200 {
   min-width: 1200px;
 }
+
 /* reset element-ui css */
 .login-container {
-  padding:50px;
+  padding: 50px;
   line-height: 54px;
+
   .el-form-item__content {
     display: flex;
     flex: 1;
@@ -347,18 +342,20 @@
     background-color: #F1F3F5;
     border-radius: 4px;
   }
+
   .el-input {
     flex: 1;
     margin-left: 6px;
     position: relative;
     background-color: #F1F3F5;
     top: 3px;
+
     input {
       border: none;
       padding: 0;
       font-size: 16px;
       line-height: 54px;
-      background: #F1F3F5;
+      // background: #F1F3F5;
       color: #333333;
     }
   }
@@ -366,9 +363,34 @@
 </style>
 
 <style lang="scss" scoped>
+.captcha {
+  display: flex;
+  align-items: flex-start;
+}
+
 $bg: #2d3a4b;
 $dark_gray: #889aa4;
 $light_gray: #eee;
+.imgs {
+  position: relative;
+  height: 36px;
+  cursor: pointer;
+
+  img {
+    height: 100%;
+  }
+
+  span {
+    width: 84px;
+    line-height: 36px;
+    display: inline-block;
+    background: rgba(0, 0, 0, 0.4);
+    position: absolute;
+    left: 0;
+    color: #fff;
+  }
+}
+
 .login-container {
   height: 100%;
   width: 100%;
@@ -377,45 +399,53 @@
   background-size: cover;
   position: relative;
 }
-.school-logo{
+
+.school-logo {
   position: absolute;
-  top:30px;
+  top: 30px;
   left: 40px;
 }
-.form-main{
+
+.form-main {
   background-color: #FFFFFF;
   overflow: hidden;
   border-radius: 8px;
 }
->>>.el-button{
+
+> > > .el-button {
   font-size: 16px;
 }
-.logo-name{
-  width: 336px;
-  height: 51px;
+
+.logo-name {
   margin-bottom: 30px;
 }
-.logo-lf{
-  width:100%;
+
+.logo-lf {
+  width: 100%;
 }
-.login-box{
-  padding:100px;
-  .title{
+
+.login-box {
+  padding: 100px;
+
+  .title {
     font-size: 22px;
     font-weight: bold;
   }
-  .f-lable{
+
+  .f-lable {
     line-height: 20px;
     margin-bottom: 10px;
     font-size: 14px;
     color: #333333;
   }
 }
+
 .w1050 {
   width: 1050px;
   margin: 0 auto;
   overflow: hidden;
 }
+
 .login-btn {
   width: 100%;
   height: 45px;
@@ -424,11 +454,13 @@
   color: #FFFFFF;
   background-color: #0d997c;
 }
+
 .logo-txt {
   position: absolute;
   top: 5%;
   left: 2%;
 }
+
 .txtBox {
   color: #fff;
   opacity: 0.7;
@@ -441,24 +473,27 @@
   line-height: 30px;
   width: 610px;
 }
-.show-pwd{
+
+.show-pwd {
   position: relative;
-  top:5px;
+  top: 5px;
   right: 5px;
   cursor: pointer;
 }
+
 .td-outer-wrapper {
   width: 1200px !important;
   margin: 0 auto !important;
 }
+
 @media screen and(max-width: 1400px) {
   .w1050 {
     width: 850px;
     margin: 0 auto;
     overflow: hidden;
   }
-  .login-box{
-    padding:40px;
+  .login-box {
+    padding: 40px;
   }
 }
 </style>
diff --git a/admin-web/src/views/systemSetting/logs/loginLogs.vue b/admin-web/src/views/systemSetting/logs/loginLogs.vue
new file mode 100644
index 0000000..b05036c
--- /dev/null
+++ b/admin-web/src/views/systemSetting/logs/loginLogs.vue
@@ -0,0 +1,111 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card" shadow="never" style="width: 100%">
+      <!--鎼滅储鏉′欢-->
+      <div class="filter-container">
+        <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
+      </div>
+      <div style="margin-top: 15px">
+        <!--鍒楄〃-->
+        <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/>
+      </div>
+
+    </el-card>
+  </div>
+</template>
+
+<script>
+import MyTableV2 from "@/components/myTable/myTableV2";
+import SettingIplatform from "@/utils/settingIplatform";
+import {LongToDateTime} from "@/utils/DateFormatter";
+
+export default {
+  components: {MyTableV2},
+  data() {
+    return {
+      items: [
+        {
+          type: 'text',
+          dataIndex: 'userName',
+          label: '鐧诲綍璐﹀彿',
+          placeholder: '璇疯緭鍏�',
+          defaultValue: ''
+        }
+      ],
+      // 鎼滅储鏉′欢
+      filterFrom: {
+        userName: null,
+      },
+      // 琛ㄦ牸鏁版嵁
+      table: {
+        showIndex: true, // 鏄惁鏄剧ず搴忓彿
+        expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
+        url: SettingIplatform.apiBaseURL + '/pc/p/login/info/list', // 璇锋眰鍦板潃
+        // 宸ュ叿鏉�
+        tools: {
+          columnsCtrl: {// 鍒楁帶鍒舵寜閽�
+            show: false
+          },
+          generalExport: {// 閫氱敤瀵煎嚭鎸夐挳
+            show: false
+          },
+          // 鑷畾涔夊伐鍏锋潯鎸夐挳
+          custom: []
+        },
+        // 鍒椾俊鎭�
+        columns: [
+          {title: '鐧诲綍璐﹀彿', field: 'userName', align: 'left', minWidth: 110},
+          {title: '鐧诲綍IP', field: 'ipaddr', align: 'center'},
+          {title: '娴忚鍣ㄧ被鍨�', field: 'browser', align: 'center'},
+          {
+            title: '鐧诲綍鐘舵��', field: 'status', align: 'center', formatter: row => {
+              return {value: row.status == 1 ? '鐧诲綍鎴愬姛' : '鐧诲綍澶辫触'}
+            }
+          },
+          {title: '鎻愮ず娑堟伅', field: 'msg', align: 'left'},
+          {
+            title: '璁块棶鏃堕棿', field: 'login_time', align: 'center', width: 180, formatter: row => {
+              return {value: LongToDateTime(row.loginTime)}
+            }
+          },
+        ],
+        // 鎿嶄綔淇℃伅
+        operation: {
+          show: false, // 鏄剧ず鎿嶄綔鍒�
+        },
+        paging: {
+          show: true, // 鏄剧ず鍒嗛〉
+          // 鍒嗛〉淇℃伅
+          page: {
+            small: false,
+            pageNumber: 1,
+            pageSize: 10,
+            total: 0
+          }
+        }
+      },
+    }
+  },
+  mounted() {
+  },
+  methods: {
+
+    // 鏌ヨtable鍒楄〃
+    search(pageNumber) {
+      if (pageNumber != undefined) {
+        this.$refs.myTable.search(pageNumber)
+      } else {
+        this.$refs.myTable.search()
+      }
+    },
+    fifterForm(params) {
+      this.filterFrom = Object.assign(this.filterFrom, params)
+      this.search(1)
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

--
Gitblit v1.9.1