From da51e7d5bbf5ff1610209510571e94d0523b515c Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期三, 24 四月 2024 17:40:37 +0800
Subject: [PATCH] 完善自动评估模块,规范性分析报告的后台任务和结果下载逻辑

---
 src/components/bg-task/FYBgTaskCard.vue |  190 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 152 insertions(+), 38 deletions(-)

diff --git a/src/components/bg-task/FYBgTaskCard.vue b/src/components/bg-task/FYBgTaskCard.vue
index 877c4b7..5853db3 100644
--- a/src/components/bg-task/FYBgTaskCard.vue
+++ b/src/components/bg-task/FYBgTaskCard.vue
@@ -1,52 +1,166 @@
 <template>
-  <el-card class="bg-task-card" shadow="hover" :body-style="{ padding: '8px' }">
-    <!-- <template #header> -->
-    <el-row>
-      <el-space>
-        <el-tag>{{ nameToLabel(model.type) }}</el-tag>
-        <el-text tag="b" size="large" truncated>{{ model.name }}鍟婂疄鎵撳疄澶ц嫃鎵撳晩瀹炴墦瀹炲ぇ鑻忔墦闃垮ぇ鎾掑ぇ鎾�</el-text>
-      </el-space>
-    </el-row>
-
-    <!-- </template> -->
-    <el-text type="info" size="small">鐘舵�侊細{{ nameToLabel(model.status) }}</el-text>
-    <el-text type="info" size="small">寮�濮嬶細{{ model.startTime }}</el-text>
-    <el-text type="info" size="small">缁撴潫锛歿{ model.endTime }}</el-text>
-    <!-- <template #footer> -->
-    <el-button type="primary" size="small" :loading="false" @click="$emit('start', model)"
-      >寮�濮嬩换鍔�</el-button
-    >
-    <el-button type="danger" size="small" :loading="false" @click="$emit('shutDown', model)"
-      >寮哄埗缁撴潫</el-button
-    >
-    <el-button type="danger" size="small" :loading="false" @click="$emit('remove', model)"
-      >绉婚櫎浠诲姟</el-button
-    >
-    <el-button type="danger" size="small" :loading="false" @click="$emit('gotoResult', model)"
-      >鏌ョ湅缁撴灉</el-button
-    >
-    <el-text type="info" size="small">ID锛歿{ model.id }}</el-text>
-    <!-- </template> -->
+  <el-card shadow="never" :body-style="{ padding: 0 }">
+    <template #header>
+      <el-row justify="space-between">
+        <div>
+          <div><el-text tag="b" size="large">鍚庡彴浠诲姟</el-text></div>
+          <el-text size="small" type="info">鏄剧ず褰撳墠姝e湪杩涜鐨勫悗鍙拌�楁椂浠诲姟鐘舵��</el-text>
+        </div>
+        <el-button
+          icon="Refresh"
+          type="primary"
+          size="default"
+          :loading="loading"
+          @click="fetchTask"
+          >鍒锋柊浠诲姟</el-button
+        >
+      </el-row>
+      <!-- <el-row>
+        <el-button type="default" size="default" @click="newTestTask">鏂板娴嬭瘯浠诲姟</el-button>
+        <el-button type="default" size="default" @click="startNewTestTask"
+          >鏂板缓骞惰繍琛屼竴涓祴璇曚换鍔�</el-button
+        >
+        <el-button type="default" size="default" @click="shutDownTask"
+          >寮哄埗鍏抽棴鎵�鏈夋祴璇曚换鍔�</el-button
+        >
+      </el-row> -->
+    </template>
+    <el-scrollbar height="70vh" class="scrollbar">
+      <template v-for="(v, i) in taskList" :key="i">
+        <FYBgTaskItem
+          :model="v"
+          :index="i"
+          @start="startTask"
+          @shutDown="shutDownTask"
+          @remove="removeTask"
+          @gotoResult="gotoResult"
+        ></FYBgTaskItem>
+      </template>
+    </el-scrollbar>
   </el-card>
 </template>
 <script>
-import { nTlBgTask } from '@/enum/bgTask';
+/**
+ * 鑷姩璇勪及浠诲姟绠$悊
+ */
+import { useFetchData } from '@/composables/fetchData';
+import bgtaskApi from '@/api/fysp/bgtaskApi';
+import { enumBgTask, BG_TASK_TYPE, BG_TASK_STATUS } from '@/enum/bgTask';
 
 export default {
-  props: {
-    model: Object
+  setup() {
+    const { loading, fetchData } = useFetchData();
+    return { loading, fetchData };
   },
-  emits: ['start', 'shutDown', 'remove', 'gotoResult'],
-  methods: {
-    nameToLabel(name) {
-      const t = nTlBgTask(name);
-      return t.label;
+  props: {
+    modelValue: Number
+  },
+  emits: ['update:modelValue'],
+  data() {
+    return {
+      taskList: [],
+      taskIndex: 0
+    };
+  },
+  watch: {
+    taskList: {
+      handler(nV) {
+        let count = 0;
+        for (const e of nV) {
+          if (e.status == BG_TASK_STATUS.RUNNING.name) {
+            count++;
+          }
+        }
+        this.$emit('update:modelValue', count);
+      },
+      deep: true
     }
+  },
+  methods: {
+    addTask() {},
+    newTestTask() {
+      this.fetchData((page, pageSize) => {
+        return bgtaskApi.newTestTask(`Test-Task-${++this.taskIndex}`).then((res) => {
+          this.taskList.push(res.data);
+        });
+      });
+    },
+    startNewTestTask() {
+      this.fetchData((page, pageSize) => {
+        return bgtaskApi.startNewTestTask(`Test-Task-${++this.taskIndex}`).then((res) => {
+          this.taskList.push(res.data);
+        });
+      });
+    },
+
+    _getParam(taskStatus) {
+      return {
+        type: taskStatus.type,
+        id: taskStatus.id
+      };
+    },
+    fetchTask() {
+      this.fetchData((page, pageSize) => {
+        return bgtaskApi
+          .fetchTaskStatus({
+            // type: BG_TASK_TYPE.AUTO_SCORE.name
+          })
+          .then((res) => {
+            this.taskList = res.data;
+          });
+      });
+    },
+    startTask(index, callback) {
+      this.fetchData((page, pageSize) => {
+        const param = this._getParam(this.taskList[index]);
+        return bgtaskApi.startTask(param).then((res) => {
+          this.taskList[index] = res.data;
+          callback(true);
+        });
+      });
+    },
+    shutDownTask(index, callback) {
+      this.fetchData((page, pageSize) => {
+        const param = this._getParam(this.taskList[index]);
+        return bgtaskApi.shutDownTask(param).then((res) => {
+          if (index && res.data && res.data.length == 1) {
+            this.taskList[index] = res.data[0];
+          } else {
+            res.data.forEach((e) => {
+              let v = this.taskList.find((value) => {
+                return value.id == e.id;
+              });
+              const i = this.taskList.indexOf(v);
+              this.taskList[i] = e;
+            });
+          }
+          callback(true);
+        });
+      });
+    },
+    removeTask(index, callback) {
+      this.fetchData((page, pageSize) => {
+        const param = this._getParam(this.taskList[index]);
+        return bgtaskApi.removeTask(param).then((res) => {
+          if (res.data) {
+            this.taskList.splice(index, 1);
+            callback(true);
+          }
+        });
+      });
+    },
+    gotoResult(index) {}
+  },
+  mounted() {
+    this.fetchTask();
+    // setInterval(() => {
+    //   this.fetchTask();
+    // }, 10000);
   }
 };
 </script>
 <style scoped>
-.bg-task-card {
-  margin-bottom: 8px;
+.scrollbar {
+  padding: 8px;
 }
 </style>

--
Gitblit v1.9.3