zs 5 tháng trước cách đây
mục cha
commit
199a829907

+ 36 - 0
src/store/api/core/statistics.js

@@ -0,0 +1,36 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+const url = '/statistics'
+const axios = new AxiosWrapper()
+
+export const StatisticsStore = defineStore('statistics', () => {
+  const work = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const user = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const resource = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  return {
+    work,
+    user,
+    resource
+  }
+})

+ 17 - 1
src/views/control/statement/index.vue

@@ -2,13 +2,29 @@
   <div id="index">
     <el-row>
       <el-col :span="24" class="main animate__animated animate__backInRight" v-loading="loading">
-        <el-col :span="24" class="one"> 报表管理 </el-col>
+        <el-tabs type="border-card" v-model="activeName">
+          <el-tab-pane label="资源统计" name="first">
+            <resource></resource>
+          </el-tab-pane>
+          <el-tab-pane label="作业统计" name="second">
+            <work></work>
+          </el-tab-pane>
+          <el-tab-pane label="用户统计" name="third">
+            <user></user>
+          </el-tab-pane>
+        </el-tabs>
       </el-col>
     </el-row>
   </div>
 </template>
 
 <script setup>
+// 组件
+import resource from './parts/resource.vue'
+import work from './parts/work.vue'
+import user from './parts/user.vue'
+
+const activeName = ref('first')
 // 加载中
 const loading = ref(false)
 // 请求

+ 44 - 0
src/views/control/statement/parts/resource.vue

@@ -0,0 +1,44 @@
+<template>
+  <div id="index">
+    <custom-table :data="data" :fields="fields" @query="search" :total="total"> </custom-table>
+  </div>
+</template>
+
+<script setup>
+// 接口
+import { StatisticsStore } from '@/store/api/core/statistics'
+const store = StatisticsStore()
+const data = ref([])
+const fields = [
+  { label: '日期', model: 'time' },
+  { label: 'CPU已使用/总数(核/核)', model: 'cpu_total' },
+  { label: 'GPU已使用/总数(卡/卡)', model: 'gpu_total' },
+  { label: 'CPU使用率均值/峰值', model: 'cpu_average' },
+  { label: 'GPU使用率均值/峰值', model: 'gpu_average' },
+  { label: '内存利用率均值', model: 'memory_num' },
+  { label: '可用节点', model: 'node_num' },
+  { label: '分区数', model: 'partition_num' },
+  { label: '已使用存储/存储总数(G/G)', model: 'storage_total' },
+  { label: '存储使用率', model: 'storage_num' }
+]
+let skip = 0
+let limit = inject('limit')
+const total = ref(20)
+// 加载中
+const loading = ref(false)
+// 请求
+onMounted(async () => {
+  loading.value = true
+  await search({ skip, limit })
+  loading.value = false
+})
+const search = async (query = { skip: 0, limit }) => {
+  const info = { skip: query.skip, limit: query.limit }
+  const res = await store.resource(info)
+  if (res.errcode == '0') {
+    data.value = res.data.data
+    total.value = res.data.total
+  }
+}
+</script>
+<style scoped lang="scss"></style>

+ 38 - 0
src/views/control/statement/parts/user.vue

@@ -0,0 +1,38 @@
+<template>
+  <div id="index">
+    <custom-table :data="data" :fields="fields" @query="search" :total="total"> </custom-table>
+  </div>
+</template>
+
+<script setup>
+// 接口
+import { StatisticsStore } from '@/store/api/core/statistics'
+const store = StatisticsStore()
+const data = ref([])
+const fields = [
+  { label: '日期', model: 'time' },
+  { label: '在线用户数', model: 'user_num' },
+  { label: '活跃用户数', model: 'active_num' },
+  { label: '总用户数', model: 'total' }
+]
+let skip = 0
+let limit = inject('limit')
+const total = ref(20)
+// 加载中
+const loading = ref(false)
+// 请求
+onMounted(async () => {
+  loading.value = true
+  await search({ skip, limit })
+  loading.value = false
+})
+const search = async (query = { skip: 0, limit }) => {
+  const info = { skip: query.skip, limit: query.limit }
+  const res = await store.user(info)
+  if (res.errcode == '0') {
+    data.value = res.data.data
+    total.value = res.data.total
+  }
+}
+</script>
+<style scoped lang="scss"></style>

+ 43 - 0
src/views/control/statement/parts/work.vue

@@ -0,0 +1,43 @@
+<template>
+  <div id="index">
+    <custom-table :data="data" :fields="fields" @query="search" :total="total"> </custom-table>
+  </div>
+</template>
+
+<script setup>
+// 接口
+import { StatisticsStore } from '@/store/api/core/statistics'
+const store = StatisticsStore()
+const data = ref([])
+const fields = [
+  { label: '作业ID', model: 'work_id' },
+  { label: '作业名称', model: 'work_name' },
+  { label: '用户', model: 'user_name' },
+  { label: '组织', model: 'organization' },
+  { label: '提交时间', model: 'submit_time' },
+  { label: '开始运行时间', model: 'create_time' },
+  { label: '结束运行时间', model: 'end_time' },
+  { label: '运行时长', model: 'time' },
+  { label: '作业运行状态', model: 'status' }
+]
+let skip = 0
+let limit = inject('limit')
+const total = ref(20)
+// 加载中
+const loading = ref(false)
+// 请求
+onMounted(async () => {
+  loading.value = true
+  await search({ skip, limit })
+  loading.value = false
+})
+const search = async (query = { skip: 0, limit }) => {
+  const info = { skip: query.skip, limit: query.limit }
+  const res = await store.work(info)
+  if (res.errcode == '0') {
+    data.value = res.data.data
+    total.value = res.data.total
+  }
+}
+</script>
+<style scoped lang="scss"></style>