Showing
6 changed files
with
162 additions
and
4 deletions
| 1 | +import { DescItem } from '/@/components/Description'; | |
| 2 | +import { | |
| 3 | + ExecuteTimeTypeEnum, | |
| 4 | + ExecuteTimeTypeNameEnum, | |
| 5 | + FormFieldsEnum, | |
| 6 | + PeriodTypeNameEnum, | |
| 7 | +} from '../DetailModal/config'; | |
| 8 | +import { TaskStatusEnum, TaskTargetEnum, TaskTargetNameEnum } from '../../config'; | |
| 9 | +import { h } from 'vue'; | |
| 10 | +import { Tag } from 'ant-design-vue'; | |
| 11 | +import { TaskStatusNameEnum } from '../../config'; | |
| 12 | +import { TaskRecordType } from '/@/api/task/model'; | |
| 13 | +import { TaskTypeNameEnum } from '../../config'; | |
| 14 | +import { TimeUnitNameEnum } from '/@/enums/toolEnum'; | |
| 15 | +import { PeriodTypeEnum } from '../DetailModal/config'; | |
| 16 | + | |
| 17 | +enum WeekEnum { | |
| 18 | + MON = 'MON', | |
| 19 | + TUES = 'TUES', | |
| 20 | + WED = 'WED', | |
| 21 | + THUR = 'THUR', | |
| 22 | + FRI = 'FRI', | |
| 23 | + SAT = 'SAT', | |
| 24 | + SUN = 'SUN', | |
| 25 | +} | |
| 26 | + | |
| 27 | +enum WeekNameEnum { | |
| 28 | + MON = '星期一', | |
| 29 | + TUES = '星期二', | |
| 30 | + WED = '星期三', | |
| 31 | + THUR = '星期四', | |
| 32 | + FRI = '星期五', | |
| 33 | + SAT = '星期六', | |
| 34 | + SUN = '星期天', | |
| 35 | +} | |
| 36 | + | |
| 37 | +const isWeek = (string: string) => { | |
| 38 | + return Object.keys(WeekEnum).some((item) => string.includes(item)); | |
| 39 | +}; | |
| 40 | + | |
| 41 | +const extractCronExpression = (expression: string) => { | |
| 42 | + const flag = isWeek(expression); | |
| 43 | + const list = expression.split(' '); | |
| 44 | + const unit = flag ? list[list.length - 1] : list[3]; | |
| 45 | + return flag ? WeekNameEnum[unit] : unit; | |
| 46 | +}; | |
| 47 | + | |
| 48 | +export const schemas: DescItem[] = [ | |
| 49 | + { | |
| 50 | + field: FormFieldsEnum.NAME, | |
| 51 | + label: '任务名', | |
| 52 | + }, | |
| 53 | + { | |
| 54 | + field: FormFieldsEnum.TARGET_TYPE, | |
| 55 | + label: '目标类型', | |
| 56 | + render(val: TaskTargetEnum) { | |
| 57 | + return h( | |
| 58 | + Tag, | |
| 59 | + { color: val === TaskTargetEnum.DEVICES ? 'blue' : 'cyan' }, | |
| 60 | + () => TaskTargetNameEnum[val] | |
| 61 | + ); | |
| 62 | + }, | |
| 63 | + }, | |
| 64 | + { | |
| 65 | + field: 'state', | |
| 66 | + label: '任务状态', | |
| 67 | + render(val: TaskStatusEnum) { | |
| 68 | + return h( | |
| 69 | + Tag, | |
| 70 | + { color: val === TaskStatusEnum.NORMAL ? 'success' : 'error' }, | |
| 71 | + () => TaskStatusNameEnum[TaskStatusEnum[val]] | |
| 72 | + ); | |
| 73 | + }, | |
| 74 | + }, | |
| 75 | + { | |
| 76 | + field: FormFieldsEnum.EXECUTE_CONTENT_TYPE, | |
| 77 | + label: '任务类型', | |
| 78 | + render(_val: any, data: TaskRecordType) { | |
| 79 | + return TaskTypeNameEnum[data.executeContent.type]; | |
| 80 | + }, | |
| 81 | + }, | |
| 82 | + { | |
| 83 | + field: FormFieldsEnum.EXECUTE_TIME_TYPE, | |
| 84 | + label: '定时方式', | |
| 85 | + render(_val: any, data: TaskRecordType) { | |
| 86 | + return ExecuteTimeTypeNameEnum[data.executeTime.type]; | |
| 87 | + }, | |
| 88 | + }, | |
| 89 | + { | |
| 90 | + field: FormFieldsEnum.EXECUTE_TIME_INTERVAL, | |
| 91 | + label: '间隔时间', | |
| 92 | + render(_val: any, data: TaskRecordType) { | |
| 93 | + const { executeTime } = data; | |
| 94 | + const { time, type, periodType, pollUnit, period } = executeTime; | |
| 95 | + console.log({ time, type, periodType, pollUnit }); | |
| 96 | + return type === ExecuteTimeTypeEnum.POLL | |
| 97 | + ? `${time}${TimeUnitNameEnum[pollUnit]}` | |
| 98 | + : `${PeriodTypeNameEnum[periodType]} ${ | |
| 99 | + periodType === PeriodTypeEnum.DAY | |
| 100 | + ? '' | |
| 101 | + : `/ ${extractCronExpression(period)}${isWeek(period) ? '' : '号'}` | |
| 102 | + } / ${time}`; | |
| 103 | + }, | |
| 104 | + }, | |
| 105 | + { | |
| 106 | + field: 'createTime', | |
| 107 | + label: '创建时间', | |
| 108 | + }, | |
| 109 | + { | |
| 110 | + field: 'updateTime', | |
| 111 | + label: '修改时间', | |
| 112 | + }, | |
| 113 | +]; | ... | ... |
| 1 | +export { default as DetailDrawer } from './index.vue'; | ... | ... |
| 1 | +<script lang="ts" setup> | |
| 2 | + import { useDescription, Description } from '/@/components/Description'; | |
| 3 | + import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; | |
| 4 | + import { schemas } from './config'; | |
| 5 | + import { ModalParamsType } from '/#/utils'; | |
| 6 | + import { TaskRecordType } from '/@/api/task/model'; | |
| 7 | + defineEmits(['register']); | |
| 8 | + | |
| 9 | + const [registerDrawer] = useDrawerInner((data: ModalParamsType<TaskRecordType>) => { | |
| 10 | + const { record } = data; | |
| 11 | + setDescProps({ data: record }); | |
| 12 | + }); | |
| 13 | + | |
| 14 | + const [registerDescription, { setDescProps }] = useDescription({ | |
| 15 | + schema: schemas, | |
| 16 | + labelStyle: { width: '120px' }, | |
| 17 | + column: 1, | |
| 18 | + }); | |
| 19 | +</script> | |
| 20 | + | |
| 21 | +<template> | |
| 22 | + <BasicDrawer title="任务详情" @register="registerDrawer" width="30%"> | |
| 23 | + <Description @register="registerDescription" /> | |
| 24 | + </BasicDrawer> | |
| 25 | +</template> | ... | ... |
| ... | ... | @@ -21,6 +21,7 @@ |
| 21 | 21 | enum DropMenuEvent { |
| 22 | 22 | DELETE = 'DELETE', |
| 23 | 23 | EDIT = 'EDIT', |
| 24 | + DETAIL = 'DETAIL', | |
| 24 | 25 | } |
| 25 | 26 | |
| 26 | 27 | const props = withDefaults( |
| ... | ... | @@ -35,7 +36,7 @@ |
| 35 | 36 | } |
| 36 | 37 | ); |
| 37 | 38 | |
| 38 | - const emit = defineEmits(['edit', 'runTask']); | |
| 39 | + const emit = defineEmits(['edit', 'runTask', 'detail']); | |
| 39 | 40 | |
| 40 | 41 | const loading = ref(false); |
| 41 | 42 | |
| ... | ... | @@ -131,6 +132,12 @@ |
| 131 | 132 | :trigger="['hover']" |
| 132 | 133 | :drop-menu-list="[ |
| 133 | 134 | { |
| 135 | + text: '详情', | |
| 136 | + event: DropMenuEvent.DETAIL, | |
| 137 | + icon: 'ant-design:eye-outlined', | |
| 138 | + onClick: emit.bind(null, 'detail', getRecord), | |
| 139 | + }, | |
| 140 | + { | |
| 134 | 141 | text: '编辑', |
| 135 | 142 | event: DropMenuEvent.DELETE, |
| 136 | 143 | disabled: !!getRecord.state, | ... | ... |
| ... | ... | @@ -18,13 +18,11 @@ export enum FormFieldsEnum { |
| 18 | 18 | export enum TaskTargetEnum { |
| 19 | 19 | DEVICES = 'DEVICES', |
| 20 | 20 | PRODUCTS = 'PRODUCTS', |
| 21 | - ALL = 'all', | |
| 22 | 21 | } |
| 23 | 22 | |
| 24 | 23 | export enum TaskTargetNameEnum { |
| 25 | 24 | DEVICES = '设备', |
| 26 | 25 | PRODUCTS = '产品', |
| 27 | - ALL = '不限任务目标类型', | |
| 28 | 26 | } |
| 29 | 27 | |
| 30 | 28 | export enum TaskTypeEnum { | ... | ... |
| ... | ... | @@ -17,8 +17,11 @@ |
| 17 | 17 | import { Authority } from '/@/components/Authority'; |
| 18 | 18 | import { getBoundingClientRect } from '/@/utils/domUtils'; |
| 19 | 19 | import { RunTaskModal } from './components/RunTaskModal'; |
| 20 | + import { DetailDrawer } from './components/DetailDrawer'; | |
| 21 | + import { useDrawer } from '/@/components/Drawer'; | |
| 20 | 22 | |
| 21 | 23 | const [registerModal, { openModal }] = useModal(); |
| 24 | + const [registerDrawer, { openDrawer }] = useDrawer(); | |
| 22 | 25 | const [registerRunTaskModal, { openModal: openRunTaskModal }] = useModal(); |
| 23 | 26 | |
| 24 | 27 | const [registerForm, { getFieldsValue }] = useForm({ |
| ... | ... | @@ -66,6 +69,10 @@ |
| 66 | 69 | openRunTaskModal(true, record); |
| 67 | 70 | }; |
| 68 | 71 | |
| 72 | + const handleDetail = (record: TaskRecordType) => { | |
| 73 | + openDrawer(true, { mode: DataActionModeEnum.READ, record } as ModalParamsType); | |
| 74 | + }; | |
| 75 | + | |
| 69 | 76 | const reload = () => getDataSource(); |
| 70 | 77 | |
| 71 | 78 | const listElRef = ref<Nullable<ComponentElRef>>(null); |
| ... | ... | @@ -136,11 +143,18 @@ |
| 136 | 143 | </template> |
| 137 | 144 | <template #renderItem="{ item }"> |
| 138 | 145 | <List.Item :key="item.id"> |
| 139 | - <TaskCard :record="item" :reload="reload" @runTask="handleRunTask" @edit="handleEdit" /> | |
| 146 | + <TaskCard | |
| 147 | + :record="item" | |
| 148 | + :reload="reload" | |
| 149 | + @runTask="handleRunTask" | |
| 150 | + @detail="handleDetail" | |
| 151 | + @edit="handleEdit" | |
| 152 | + /> | |
| 140 | 153 | </List.Item> |
| 141 | 154 | </template> |
| 142 | 155 | </List> |
| 143 | 156 | </section> |
| 157 | + <DetailDrawer @register="registerDrawer" /> | |
| 144 | 158 | <DetailModal @register="registerModal" :reload="reload" /> |
| 145 | 159 | <RunTaskModal :reload="reload" @register="registerRunTaskModal" /> |
| 146 | 160 | </PageWrapper> | ... | ... |