¶Ô±ÈÐÂÎļþ |
| | |
| | | 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); |
| | | }, |
| | | }; |
| | |
| | | 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'] |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| | |
| | | (nValue) => { |
| | | formObj.value = nValue; |
| | | }, |
| | | { deep: true, immediate: true } |
| | | { deep: false, immediate: true } |
| | | ); |
| | | |
| | | //çå¬è¡¨åéç½®åè½è§¦å |
| | |
| | | // æ¥å£æ°æ®çè·å |
| | | 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(); |
| | | } |
| | |
| | | // å è½½ç¶æ, 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; |
| | | }) |
| | |
| | | }); |
| | | } |
| | | |
| | | return {currentPage, totalPage, pageSize, total, loadStatus, fetchData} |
| | | return { page, pageNum, pageSize, total, loadStatus, loading, fetchData }; |
| | | } |
| | |
| | | // }); |
| | | |
| | | //表åå
容 |
| | | const formObj = reactive(defaultForm ? defaultForm : {}); |
| | | // const formObj = reactive({}); |
| | | const formObj = ref(defaultForm ? defaultForm : {}); |
| | | let formObjClone = useCloned(formObj, { manual: true }); |
| | | //表åç»ä»¶å¼ç¨ |
| | | const formRef = ref(null); |
| | |
| | | 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(); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // èæ¶ä»»å¡æä¸¾ |
| | | 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 }; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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); |
| | | } |
| | |
| | | <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">æ¾ç¤ºå½åæ£å¨è¿è¡çèªå¨è¯ä¼°ä»»å¡ç¶æ</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 {}; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <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">æ¾ç¤ºå½åæ£å¨è¿è¡çèªå¨è¯ä¼°ä»»å¡ç¶æ</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> |
| | |
| | | const props = defineProps({ |
| | | //åºæ¬ä¿¡æ¯ |
| | | model: { |
| | | type: Object, |
| | | default: () => { |
| | | return { isenable: true }; |
| | | } |
| | | type: Object |
| | | // default: () => { |
| | | // return { isenable: true }; |
| | | // } |
| | | }, |
| | | create: { |
| | | type: Boolean, |
| | |
| | | } |
| | | }); |
| | | |
| | | 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']); |
| | | |