فهرست منبع

fix: 在线用户

lxz 2 سال پیش
والد
کامیت
284bbdb94c

+ 5 - 0
src/api/monitor/onlineApi.ts

@@ -3,6 +3,7 @@ import { defHttp } from '/@/utils/http/axios';
 enum Api {
   onlineForceLogout = '/monitor/online/forceLogout',
   onlineList = '/monitor/online/query/page',
+  onlineListToken = '/monitor/online/query/token/list',
 }
 
 /**
@@ -21,3 +22,7 @@ export const onlineForceLogout = (params?: object) => {
 export const onlineList = (params?: object) => {
   return defHttp.post({ url: Api.onlineList, params: setParams(params) });
 };
+
+export const onlineListToken = (params?: object) => {
+  return defHttp.post({ url: Api.onlineListToken, params: setParams(params) });
+};

+ 59 - 25
src/views/monitor/onlineUser/FormDrawer.vue

@@ -3,61 +3,95 @@
     v-bind="$attrs"
     destroyOnClose
     @register="registerDrawer"
-    :showFooter="true"
+    :showFooter="false"
     width="800px"
   >
-    <BasicTable @register="registerTable" :columns="tokenColumns" :data-source="columnsSorce">
+    <BasicTable @register="registerTable" :columns="tokenColumns" @showOkBtn="false">
       <template #toolbar>
-        <a-button type="primary" danger="true" @click="loginOut()">批量强退</a-button>
+        <Button type="primary" danger @click="loginOut()">批量强退</Button>
       </template>
       <template #headerTop>
-        <h1>设备管理列表</h1>
+        <h1>Token列表</h1>
       </template>
-      <template #tableTitle> 共{{ columnsSorce.length }}条数据 </template></BasicTable
+      <template #tableTitle> 共 {{ total }} 条数据 </template></BasicTable
     >
   </BasicDrawer>
 </template>
 <script lang="ts" setup>
   import { ref } from 'vue';
   import { BasicTable, useTable } from '/@/components/Table';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { Button } from '/@/components/Button';
   import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-  import { onlineForceLogout } from '/@/api/monitor/onlineApi';
+  import { onlineForceLogout, onlineListToken } from '/@/api/monitor/onlineApi';
   import { tokenColumns } from './data';
-  const columnsSorce = ref<any>([]);
+  import { useUserStore } from '/@/store/modules/user';
+
+  const { createConfirm, createMessage } = useMessage();
+  const userStore = useUserStore();
+  // const setTableList = ref<any>([]);
+  const sessionId = ref('');
+  const total = ref('');
   const tokenList = ref<any>([]);
+
   const [registerDrawer] = useDrawerInner(async data => {
     // setDrawerProps({ confirmLoading: false });
-    columnsSorce.value = [];
-    console.log(data.record.tokenSessionList, '22222222');
-    for (const i of data.record.tokenSessionList) {
-      columnsSorce.value.push({
-        loginDevice: i.os,
-        indate: i.loginTime,
-        tokenValues: i.tokenValue,
-      });
-    }
+    sessionId.value = data.record.sessionId;
   });
-
-  const [registerTable, { getSelectRows }] = useTable({
+  //setTableData
+  const [registerTable, { getSelectRows, reload }] = useTable({
     // title: '设备管理列表',
-    rowKey: 'tokenValues',
-    rowSelection: { type: 'checkbox' },
+    api: onlineListToken,
+    rowKey: 'tokenValue',
+    rowSelection: {
+      type: 'checkbox',
+      getCheckboxProps: record => {
+        return {
+          disabled: record.tokenValue == userStore.getToken,
+        };
+      },
+    },
     clickToRowSelect: true,
     showIndexColumn: false,
     bordered: true,
     pagination: false,
     // showTableSetting: true,
+    beforeFetch: handleBeforeFetch,
+    afterFetch: handleAfterFetch,
   });
 
+  function handleBeforeFetch(params) {
+    params.sessionId = sessionId.value;
+    params.loginType = 'login';
+    return params;
+  }
+  function handleAfterFetch(params) {
+    total.value = params.length;
+  }
+
   async function loginOut() {
     const rows = getSelectRows();
-    console.log('rows', rows);
     for (const i of rows) {
-      console.log('i', i);
-      tokenList.value.push(i.tokenValues);
+      tokenList.value.push(i.tokenValue);
     }
     console.log('tokenList', tokenList);
-    await onlineForceLogout({ tokenValues: tokenList.value, loginType: 'login' });
-    tokenList.value = [];
+    if (rows.length) {
+      createConfirm({
+        content: '你确定要删除?',
+        iconType: 'warning',
+        onOk: async () => {
+          await onlineForceLogout({
+            tokenValues: tokenList.value,
+            loginType: 'login',
+            sessionId: sessionId.value,
+          });
+          await reload();
+          createMessage.success('删除成功!');
+        },
+      });
+    } else {
+      createMessage.warn('请选择');
+    }
+    await reload();
   }
 </script>

+ 6 - 6
src/views/monitor/onlineUser/data.ts

@@ -23,12 +23,12 @@ export const columns: BasicColumn[] = [
   },
   {
     title: '浏览器类型',
-    dataIndex: 'browser',
+    dataIndex: 'lastBrowser',
     width: 150,
   },
   {
     title: '操作系统',
-    dataIndex: 'os',
+    dataIndex: 'lastOs',
   },
   {
     title: '登录时间',
@@ -51,14 +51,14 @@ export const searchFormSchema: FormSchema[] = [
 export const tokenColumns: BasicColumn[] = [
   {
     title: '登录设备',
-    dataIndex: 'loginDevice',
+    dataIndex: 'os',
   },
   {
-    title: '有效期',
-    dataIndex: 'indate',
+    title: '登录时间',
+    dataIndex: 'loginTime',
   },
   {
     title: '令牌',
-    dataIndex: 'tokenValues',
+    dataIndex: 'tokenValue',
   },
 ];

+ 3 - 3
src/views/monitor/onlineUser/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="p-4">
-    <Row class="mb-2">
+    <!-- <Row class="mb-2">
       <Card class="w-1/4" style="width: 25%; text-align: center">
         <img src="http://n.sinaimg.cn/sinacn12/149/w539h410/20181011/9663-hktxqai5109344.jpg" />
         <p>当前会话数:16</p>
@@ -19,7 +19,7 @@
         <img src="http://n.sinaimg.cn/sinacn12/149/w539h410/20181011/9663-hktxqai5109344.jpg" />
         <p>B/C端占比:1/0</p>
       </Card>
-    </Row>
+    </Row> -->
     <BasicTable @register="registerTable">
       <template #bodyCell="{ column, record }">
         <template v-if="column.key === 'tenantName'">
@@ -62,7 +62,7 @@
   import { onBeforeMount, ref } from 'vue';
   // import { Tag } from 'ant-design-vue';
   import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { Card, Row } from 'ant-design-vue';
+  // import { Card, Row } from 'ant-design-vue';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { columns, searchFormSchema } from './data';
   import formDrawer from './FormDrawer.vue';