joway преди 2 години
родител
ревизия
0d742d3d93

+ 2 - 1
backendApi/config/menu.php

@@ -488,6 +488,7 @@ return [
             ['name'=>'编辑会员聘级', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'emp-level-edit', 'routePath'=>'config/emp-level-edit', 'show'=>0,],
             ['name'=>'报单中心级别配置', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'dec-role', 'routePath'=>'config/dec-role', 'show'=>1,],
             ['name'=>'编辑报单中心级别', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'dec-role-edit', 'routePath'=>'config/dec-role-edit', 'show'=>0,],
+            ['name'=>'用户在线统计', 'class'=>'', 'icon'=>'', 'controller'=>'config', 'action'=>'user-online', 'routePath'=>'config/user-online', 'show'=>1,],
         ],
     ],
-];
+];

+ 2 - 1
backendApi/config/urlManagerRules.php

@@ -293,6 +293,7 @@ return [
             'POST,GET sms' => 'sms',
             'POST,GET transfer' => 'transfer',
             'POST,GET score' => 'score',
+            'POST,GET user-online' => 'user-online',
         ],
     ],
     [
@@ -539,4 +540,4 @@ return [
             'GET user-login-export' => 'user-login-export',
         ],
     ],
-];
+];

+ 49 - 1
backendApi/modules/v1/controllers/ConfigController.php

@@ -9,6 +9,8 @@
 namespace backendApi\modules\v1\controllers;
 
 use backendApi\modules\v1\models\Admin;
+use backendApi\modules\v1\models\User;
+use common\components\Redis;
 use common\helpers\Cache;
 use common\helpers\Date;
 use common\helpers\Form;
@@ -822,4 +824,50 @@ class ConfigController extends BaseController {
         return static::notice('更新服务协议成功');
     }
 
-}
+    /**
+     * 获取当前在线用户
+     * @return mixed
+     * @throws \yii\base\InvalidConfigException
+     * @throws \yii\web\HttpException
+     */
+    public function actionUserOnline() {
+        $params = Yii::$app->request->get();
+        $page = $params['page'];
+        $pageSize = $params['pageSize'];
+        $redisKey = $params['filterStatus'] == 1 ? 'user:timeOut' : 'admin:timeOut';
+        $redisKeyUserInfo = 'user:baseInfo';
+
+        $tokens = Yii::$app->tokenRedis->hgetall($redisKey);
+        $timeOut = Yii::$app->params['operationTimeOut'];
+        $currentTime = time();
+        $user_info = [];
+        if($tokens && is_array($tokens)){
+            foreach($tokens as $k=>$v){
+                //判断是否是hash的key
+                $last_time = Yii::$app->tokenRedis->hget($redisKey,$v);
+                if($last_time && ( $currentTime - $last_time < $timeOut )){
+                    if( $params['filterStatus'] == 1){
+                        $user_data = json_decode(Yii::$app->tokenRedis->hget($redisKeyUserInfo,$v),true);
+                        $user_info['list'][$k]['ID'] = $user_data['USER_NAME'];
+                        $user_info['list'][$k]['REAL_NAME'] = $user_data['REAL_NAME'];
+                        $user_info['list'][$k]['UPDATE_TIME'] = date('Y-m-d H:i:s',$last_time);
+                    } else {
+                        $user_data = User::find()->where(['ID'=>$v])->asArray()->one();
+                        $user_info['list'][$k]['ID'] = $user_data['ADMIN_NAME'];
+                        $user_info['list'][$k]['REAL_NAME'] = $user_data['REAL_NAME'];
+                        $user_info['list'][$k]['UPDATE_TIME'] = date('Y-m-d H:i:s',$last_time);
+                    }
+
+                }
+            }
+        }
+        array_values($user_info);
+        $totalCount = count($user_info['list']);
+        $limit = ($page - 1) * $pageSize;
+        $user_info['list'] = array_slice($user_info['list'],$limit,$pageSize);
+        $user_info['totalCount'] = $totalCount;
+        $user_info['pageSize'] = $pageSize;
+        return static::notice($user_info);
+    }
+
+}

+ 119 - 0
backendEle/src/views/config/user-online.vue

@@ -0,0 +1,119 @@
+<template>
+  <div v-loading="loading">
+    <div class="white-box">
+      <el-tabs v-model="filterStatus" @tab-click="handleFilterStatusClick">
+        <el-tab-pane label="会员用户" name="1" :lazy="true"></el-tab-pane>
+        <el-tab-pane label="后台操作人" name="2" :lazy="true"></el-tab-pane>
+      </el-tabs>
+      <el-table :data="tableData" stripe style="width: 100%;" >
+        <el-table-column label="用户编号">
+          <template slot-scope="scope">
+            {{scope.row.ID}}
+          </template>
+        </el-table-column>
+        <el-table-column label="用户姓名">
+          <template slot-scope="scope">
+            {{scope.row.REAL_NAME}}
+          </template>
+        </el-table-column>
+        <el-table-column label="最后操作时间">
+          <template slot-scope="scope">
+            {{scope.row.UPDATE_TIME}}
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"></pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+  import network from '@/utils/network'
+  import tool from '@/utils/tool'
+  import FilterUser from '@/components/FilterUser'
+  import baseInfo from '@/utils/baseInfo'
+  import permission from '@/utils/permission'
+  import Pagination from '@/components/Pagination'
+  import filterHelper from '@/utils/filterHelper'
+
+  export default {
+    name: 'leo-balance-audit-table',
+    components: {FilterUser,Pagination},
+    mounted() {
+      network.getData('finance/change-balance-type').then(response => {
+        this.type = response.type
+        this.dealTypes = response.dealTypes
+        this.getData()
+      })
+    },
+    data() {
+      return {
+        tableHeaders: null,
+        tableData: null,
+        loading: true,
+        multipleSelection: [],
+        currentPage: 1,
+        totalPages: 1,
+        totalCount: 1,
+        pageSize: 20,
+        tool: tool,
+        permission: permission,
+        baseDecLevels: baseInfo.decLevels(),
+        filterTypes: {},
+        filterModel: {},
+        filterStatus: '1',
+        filterData: null,
+        type: null,
+        dealTypes: null,
+        dialogEditLoading: false,
+        dialogAuditLoading: false,
+        dialogEditFormVisible: false,
+        dialogAuditFormVisible: false,
+        auditPassButtonStat: true,
+      }
+    },
+    methods: {
+      handleFilterStatusClick(tab, event) {
+        filterHelper.clearFilterOption(this)
+        this.getData()
+      },
+      handleCurrentChange(page) {
+        this.getData(page, this.pageSize)
+      },
+      handleSizeChange(pageSize) {
+        this.getData(this.currentPage, pageSize)
+      },
+      handleFilterUser(filterData) {
+        filterHelper.handleFilterUser(this, filterData)
+      },
+      getData(page, pageSize) {
+        let filterData = this.filterModel
+        let vueObj=this
+        filterData.filterStatus = this.filterStatus
+        network.getPageData(this, 'config/user-online', page, pageSize, filterData, function (response) {
+          vueObj.tableData = response.list
+        })
+      },
+      handleExport(){
+        this.$confirm(`确定要导出当前数据吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          return network.getData(`finance/balance-audit-list-export`, this.filterModel)
+        }).then(response => {
+          this.$message({
+            message: response,
+            type: 'success'
+          })
+        }).catch(response => {
+
+        })
+      },
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>