From aa1f56d5ef2d48b980a2fab3e88379efbe09b0d1 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期二, 26 十二月 2023 17:04:27 +0800
Subject: [PATCH] 评估任务模块新增任务状态管理逻辑
---
src/api/fysp/bgtaskApi.js | 50 +++++++
src/components/bg-task/FYBgTaskCard.vue | 52 +++++++
src/composables/fetchData.js | 28 ++-
src/enum/bgTask.js | 74 ++++++++++
src/enum/enum.js | 19 ++
/dev/null | 10 -
src/views/fysp/evaluation/components/CompEvaTask.vue | 125 +++++++++++++++++
src/components.d.ts | 1
src/views/fytz/user/components/CompUserInfo.vue | 19 +-
src/composables/formConfirm.js | 21 +-
src/components/form/FYForm.vue | 2
src/views/fysp/evaluation/DataSource.vue | 17 --
12 files changed, 364 insertions(+), 54 deletions(-)
diff --git a/src/api/fysp/bgtaskApi.js b/src/api/fysp/bgtaskApi.js
new file mode 100644
index 0000000..e2dd4cd
--- /dev/null
+++ b/src/api/fysp/bgtaskApi.js
@@ -0,0 +1,50 @@
+import { $fysp } from '../index';
+
+/**
+ * 鑰楁椂浠诲姟鐩稿叧API
+ */
+export default {
+ /**
+ * 鑾峰彇鍚庡彴浠诲姟鐘舵��
+ * @param {Object} param 鍚庡彴浠诲姟鏌ヨ鏉′欢
+ */
+ fetchTaskStatus(param) {
+ return $fysp.post(`bgTask/status`, param).then((res) => res.data);
+ },
+
+ /**
+ * 鏂板缓涓�涓祴璇曚换鍔�
+ * @param {String} taskId
+ * @returns {Promise}
+ */
+ newTestTask(taskId) {
+ return $fysp.put(`bgTask/newTask/test?taskId=${taskId}`).then((res) => res.data);
+ },
+
+ /**
+ * 鏂板缓涓�涓祴璇曚换鍔�
+ * @param {String} taskId
+ * @returns {Promise}
+ */
+ startTask(param) {
+ return $fysp.put(`bgTask/start`, param).then((res) => res.data);
+ },
+
+ /**
+ * 鏂板缓骞惰繍琛屼竴涓祴璇曚换鍔�
+ * @param {String} taskId
+ * @returns {Promise}
+ */
+ startNewTestTask(taskId) {
+ return $fysp.put(`bgTask/newTask/test/start?taskId=${taskId}`).then((res) => res.data);
+ },
+
+ /**
+ * 寮哄埗鍏抽棴娴嬭瘯浠诲姟
+ * @param {Object} param 鍚庡彴浠诲姟鏌ヨ鏉′欢
+ * @returns {Promise}
+ */
+ shutDownTask(param) {
+ return $fysp.put(`bgTask/shutDown`, param).then((res) => res.data);
+ },
+};
diff --git a/src/components.d.ts b/src/components.d.ts
index 6eff6e0..aff2c0b 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -64,6 +64,7 @@
ElTree: typeof import('element-plus/es')['ElTree']
Footer: typeof import('./components/core/Footer.vue')['default']
FormCol: typeof import('./components/layout/FormCol.vue')['default']
+ FYBgTaskCard: typeof import('./components/bg-task/FYBgTaskCard.vue')['default']
FYForm: typeof import('./components/form/FYForm.vue')['default']
FYOptionLocation: typeof import('./components/search-option/FYOptionLocation.vue')['default']
FYOptionOnlineStatus: typeof import('./components/search-option/FYOptionOnlineStatus.vue')['default']
diff --git a/src/components/bg-task/FYBgTaskCard.vue b/src/components/bg-task/FYBgTaskCard.vue
new file mode 100644
index 0000000..877c4b7
--- /dev/null
+++ b/src/components/bg-task/FYBgTaskCard.vue
@@ -0,0 +1,52 @@
+<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>
+</template>
+<script>
+import { nTlBgTask } from '@/enum/bgTask';
+
+export default {
+ props: {
+ model: Object
+ },
+ emits: ['start', 'shutDown', 'remove', 'gotoResult'],
+ methods: {
+ nameToLabel(name) {
+ const t = nTlBgTask(name);
+ return t.label;
+ }
+ }
+};
+</script>
+<style scoped>
+.bg-task-card {
+ margin-bottom: 8px;
+}
+</style>
diff --git a/src/components/form/FYForm.vue b/src/components/form/FYForm.vue
index a305bde..f9f8297 100644
--- a/src/components/form/FYForm.vue
+++ b/src/components/form/FYForm.vue
@@ -136,7 +136,7 @@
(nValue) => {
formObj.value = nValue;
},
- { deep: true, immediate: true }
+ { deep: false, immediate: true }
);
//鐩戝惉琛ㄥ崟閲嶇疆鍔熻兘瑙﹀彂
diff --git a/src/composables/fetchData.js b/src/composables/fetchData.js
index 3598753..4b5458e 100644
--- a/src/composables/fetchData.js
+++ b/src/composables/fetchData.js
@@ -1,13 +1,13 @@
// 鎺ュ彛鏁版嵁鐨勮幏鍙�
-import { onActivated, onDeactivated, ref, watch } from 'vue';
+import { ref, watch, computed } from 'vue';
-export function useFetchData(fetch) {
+export function useFetchData() {
// 鍒嗛〉淇℃伅
- const currentPage = ref(1);
- const totalPage = ref(1);
+ const page = ref(1);
+ const pageNum = ref(1);
const pageSize = ref(20);
const total = ref(0);
- watch(currentPage, (nValue, oValue) => {
+ watch(page, (nValue, oValue) => {
if (nValue != oValue) {
fetchData();
}
@@ -21,14 +21,20 @@
// 鍔犺浇鐘舵��, 0: 鍔犺浇瀹屾垚; 1: 鍔犺浇涓�; 2: 宸插叏閮ㄥ姞杞�; 3: 鍔犺浇澶辫触;
const loadStatus = ref(0);
+ const loading = computed(() => {
+ return loadStatus.value == 1;
+ });
+
// 鏁版嵁鑾峰彇
- function fetchData() {
+ function fetchData(fetch) {
loadStatus.value = 1;
- fetch(currentPage.value, pageSize.value)
+ fetch(page.value, pageSize.value)
.then((pageInfo) => {
- currentPage.value = pageInfo.currentPage;
- totalPage.value = pageInfo.totalPage;
- total.value = pageInfo.total;
+ if (pageInfo) {
+ page.value = pageInfo.page ? pageInfo.page : 1;
+ pageNum.value = pageInfo.pageNum ? pageInfo.pageNum : 1;
+ total.value = pageInfo.total ? pageInfo.total : 0;
+ }
loadStatus.value = 0;
})
@@ -40,5 +46,5 @@
});
}
- return {currentPage, totalPage, pageSize, total, loadStatus, fetchData}
+ return { page, pageNum, pageSize, total, loadStatus, loading, fetchData };
}
diff --git a/src/composables/formConfirm.js b/src/composables/formConfirm.js
index fcd2828..0bb274c 100644
--- a/src/composables/formConfirm.js
+++ b/src/composables/formConfirm.js
@@ -26,8 +26,7 @@
// });
//琛ㄥ崟鍐呭
- const formObj = reactive(defaultForm ? defaultForm : {});
- // const formObj = reactive({});
+ const formObj = ref(defaultForm ? defaultForm : {});
let formObjClone = useCloned(formObj, { manual: true });
//琛ㄥ崟缁勪欢寮曠敤
const formRef = ref(null);
@@ -97,15 +96,15 @@
formRef.value.validate(async (valid) => {
if (valid) {
if (messageBox) {
- useMessageBoxTip({
- confirmMsg: submit.msg,
- confirmTitle: submit.title,
- onConfirm: async () => {
- const res = await submit.do();
- submited();
- return res;
- }
- });
+ useMessageBoxTip({
+ confirmMsg: submit.msg,
+ confirmTitle: submit.title,
+ onConfirm: async () => {
+ const res = await submit.do();
+ submited();
+ return res;
+ }
+ });
} else {
await submit.do();
submited();
diff --git a/src/enum/bgTask.js b/src/enum/bgTask.js
new file mode 100644
index 0000000..6e0c920
--- /dev/null
+++ b/src/enum/bgTask.js
@@ -0,0 +1,74 @@
+// 鑰楁椂浠诲姟鏋氫妇
+import { Enum } from './enum';
+
+const BG_TASK_TYPE = Enum({
+ TEST: {
+ name: 'TEST',
+ label: '娴嬭瘯浠诲姟',
+ value: '0'
+ },
+ AUTO_SCORE: {
+ name: 'AUTO_SCORE',
+ label: '鑷姩璇勪及浠诲姟',
+ value: '1'
+ }
+});
+
+const BG_TASK_STATUS = Enum({
+ WAITING: {
+ name: 'WAITING',
+ label: '绛夊緟',
+ value: '0'
+ },
+ RUNNING: {
+ name: 'RUNNING',
+ label: '杩愯涓�',
+ value: '1'
+ },
+ SUCCESS: {
+ name: 'SUCCESS',
+ label: '浠诲姟鎴愬姛',
+ value: '2'
+ },
+ FAIL: {
+ name: 'FAIL',
+ label: '浠诲姟鍑洪敊',
+ value: '3'
+ },
+ SHUTDOWN: {
+ name: 'SHUTDOWN',
+ label: '宸插叧闂�',
+ value: '4'
+ }
+});
+
+/**
+ * 閫氳繃鍚嶇О鏌ユ壘鏋氫妇绫�
+ * @param {String} name
+ * @returns
+ */
+function nTlBgTask(name) {
+ if (name in BG_TASK_TYPE) {
+ return BG_TASK_TYPE[name];
+ } else if (name in BG_TASK_STATUS) {
+ return BG_TASK_STATUS[name];
+ }
+}
+
+function enumBgTask(allOption = true) {
+ const l = _enumBgTask();
+ if (!allOption) {
+ l.shift();
+ }
+
+ return l;
+}
+
+function _enumBgTask() {
+ return Object.values(BG_TASK_TYPE).unshift({
+ label: '鍏ㄩ儴',
+ value: null
+ });
+}
+
+export { enumBgTask, BG_TASK_TYPE, BG_TASK_STATUS, nTlBgTask };
diff --git a/src/enum/enum.js b/src/enum/enum.js
new file mode 100644
index 0000000..12a03c3
--- /dev/null
+++ b/src/enum/enum.js
@@ -0,0 +1,19 @@
+const validator = {
+ get(target, name) {
+ // eslint-disable-next-line no-prototype-builtins
+ if (!target.hasOwnProperty(name)) {
+ throw new Error(`"${name}" value does not exist in the enum`);
+ } else if (typeof target[name] === 'object' && target[name] != null) {
+ return new Proxy(target[name], validator);
+ } else {
+ return target[name];
+ }
+ },
+ set(target, name, value) {
+ throw new Error('Cannot add a new value to the enum');
+ }
+};
+
+export function Enum(baseEnum) {
+ return new Proxy(baseEnum, validator);
+}
diff --git a/src/views/fysp/evaluation/DataSource.vue b/src/views/fysp/evaluation/DataSource.vue
index c680dec..0c16095 100644
--- a/src/views/fysp/evaluation/DataSource.vue
+++ b/src/views/fysp/evaluation/DataSource.vue
@@ -4,28 +4,17 @@
<CompPreCheck></CompPreCheck>
</el-col>
<el-col :span="8">
- <el-card shadow="never" class="radius">
- <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="submit"
- >鍒锋柊浠诲姟</el-button
- >
- </el-row>
- </template>
- </el-card>
+ <CompEvaTask></CompEvaTask>
</el-col>
</el-row>
</template>
<script>
+import CompEvaTask from './components/CompEvaTask.vue';
import CompPreCheck from './components/CompPreCheck.vue';
export default {
name: 'DataSource',
- components: { CompPreCheck },
+ components: { CompPreCheck, CompEvaTask },
data() {
return {};
}
diff --git a/src/views/fysp/evaluation/components/CompEvaTask.vue b/src/views/fysp/evaluation/components/CompEvaTask.vue
new file mode 100644
index 0000000..57299b1
--- /dev/null
+++ b/src/views/fysp/evaluation/components/CompEvaTask.vue
@@ -0,0 +1,125 @@
+<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">
+ <FYBgTaskCard
+ :model="v"
+ @start="startTask"
+ @shutDown="shutDownTask"
+ @remove="removeTask"
+ @gotoResult="gotoResult"
+ ></FYBgTaskCard>
+ </template>
+ </el-scrollbar>
+ </el-card>
+</template>
+<script>
+/**
+ * 鑷姩璇勪及浠诲姟绠$悊
+ */
+import { useFetchData } from '@/composables/fetchData';
+import bgtaskApi from '@/api/fysp/bgtaskApi';
+import { enumBgTask, BG_TASK_TYPE } from '@/enum/bgTask';
+
+export default {
+ setup() {
+ const { loading, fetchData } = useFetchData();
+ return { loading, fetchData };
+ },
+ data() {
+ return {
+ taskList: [],
+ taskIndex: 0
+ };
+ },
+ methods: {
+ _getParam(taskStatus) {
+ return {
+ type: taskStatus.type,
+ id: taskStatus.id
+ };
+ },
+ fetchTask() {
+ this.fetchData((page, pageSize) => {
+ return bgtaskApi
+ .fetchTaskStatus({
+ type: BG_TASK_TYPE.TEST.name
+ })
+ .then((res) => {
+ this.taskList = res.data;
+ });
+ });
+ },
+ startTask(taskStatus) {
+ this.fetchData((page, pageSize) => {
+ return bgtaskApi.startTask(this._getParam(taskStatus)).then((res) => {
+ this.taskList = this.taskList.concat(res.data);
+ });
+ });
+ },
+ newTestTask() {
+ this.fetchData((page, pageSize) => {
+ return bgtaskApi.newTestTask(`Test-Task-${++this.taskIndex}`).then((res) => {
+ this.taskList = this.taskList.concat(res.data);
+ });
+ });
+ },
+ startNewTestTask() {
+ this.fetchData((page, pageSize) => {
+ return bgtaskApi.startNewTestTask(`Test-Task-${++this.taskIndex}`).then((res) => {
+ this.taskList = this.taskList.concat(res.data);
+ });
+ });
+ },
+ shutDownTask(taskStatus) {
+ this.fetchData((page, pageSize) => {
+ return bgtaskApi.shutDownTask(this._getParam(taskStatus)).then((res) => {
+ 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;
+ });
+ });
+ });
+ },
+ removeTask(taskStatus){
+
+ },
+ gotoResult(taskStatus) {
+
+ }
+ },
+};
+</script>
+<style scoped>
+.scrollbar {
+ padding: 8px;
+}
+</style>
diff --git a/src/views/fysp/evaluation/components/CompHistoryRecord.vue b/src/views/fysp/evaluation/components/CompHistoryRecord.vue
deleted file mode 100644
index 95fda22..0000000
--- a/src/views/fysp/evaluation/components/CompHistoryRecord.vue
+++ /dev/null
@@ -1,10 +0,0 @@
-<template>
- <div></div>
-</template>
-<script>
-export default {
- methods:{
-
- }
-}
-</script>
\ No newline at end of file
diff --git a/src/views/fytz/user/components/CompUserInfo.vue b/src/views/fytz/user/components/CompUserInfo.vue
index d782e78..423d624 100644
--- a/src/views/fytz/user/components/CompUserInfo.vue
+++ b/src/views/fytz/user/components/CompUserInfo.vue
@@ -92,10 +92,10 @@
const props = defineProps({
//鍩烘湰淇℃伅
model: {
- type: Object,
- default: () => {
- return { isenable: true };
- }
+ type: Object
+ // default: () => {
+ // return { isenable: true };
+ // }
},
create: {
type: Boolean,
@@ -107,9 +107,14 @@
}
});
-const formInfo = computed(() => {
- return parseUserInfo(props.model);
-});
+const formInfo = ref({ isenable: true });
+
+watch(
+ () => props.model,
+ (nValue) => {
+ formInfo.value = parseUserInfo(nValue);
+ }
+);
const emit = defineEmits(['onSubmit', 'onCancel', 'updateEdit']);
--
Gitblit v1.9.3