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,6 +21,7 @@ | ||
21 | enum DropMenuEvent { | 21 | enum DropMenuEvent { |
22 | DELETE = 'DELETE', | 22 | DELETE = 'DELETE', |
23 | EDIT = 'EDIT', | 23 | EDIT = 'EDIT', |
24 | + DETAIL = 'DETAIL', | ||
24 | } | 25 | } |
25 | 26 | ||
26 | const props = withDefaults( | 27 | const props = withDefaults( |
@@ -35,7 +36,7 @@ | @@ -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 | const loading = ref(false); | 41 | const loading = ref(false); |
41 | 42 | ||
@@ -131,6 +132,12 @@ | @@ -131,6 +132,12 @@ | ||
131 | :trigger="['hover']" | 132 | :trigger="['hover']" |
132 | :drop-menu-list="[ | 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 | text: '编辑', | 141 | text: '编辑', |
135 | event: DropMenuEvent.DELETE, | 142 | event: DropMenuEvent.DELETE, |
136 | disabled: !!getRecord.state, | 143 | disabled: !!getRecord.state, |
@@ -18,13 +18,11 @@ export enum FormFieldsEnum { | @@ -18,13 +18,11 @@ export enum FormFieldsEnum { | ||
18 | export enum TaskTargetEnum { | 18 | export enum TaskTargetEnum { |
19 | DEVICES = 'DEVICES', | 19 | DEVICES = 'DEVICES', |
20 | PRODUCTS = 'PRODUCTS', | 20 | PRODUCTS = 'PRODUCTS', |
21 | - ALL = 'all', | ||
22 | } | 21 | } |
23 | 22 | ||
24 | export enum TaskTargetNameEnum { | 23 | export enum TaskTargetNameEnum { |
25 | DEVICES = '设备', | 24 | DEVICES = '设备', |
26 | PRODUCTS = '产品', | 25 | PRODUCTS = '产品', |
27 | - ALL = '不限任务目标类型', | ||
28 | } | 26 | } |
29 | 27 | ||
30 | export enum TaskTypeEnum { | 28 | export enum TaskTypeEnum { |
@@ -17,8 +17,11 @@ | @@ -17,8 +17,11 @@ | ||
17 | import { Authority } from '/@/components/Authority'; | 17 | import { Authority } from '/@/components/Authority'; |
18 | import { getBoundingClientRect } from '/@/utils/domUtils'; | 18 | import { getBoundingClientRect } from '/@/utils/domUtils'; |
19 | import { RunTaskModal } from './components/RunTaskModal'; | 19 | import { RunTaskModal } from './components/RunTaskModal'; |
20 | + import { DetailDrawer } from './components/DetailDrawer'; | ||
21 | + import { useDrawer } from '/@/components/Drawer'; | ||
20 | 22 | ||
21 | const [registerModal, { openModal }] = useModal(); | 23 | const [registerModal, { openModal }] = useModal(); |
24 | + const [registerDrawer, { openDrawer }] = useDrawer(); | ||
22 | const [registerRunTaskModal, { openModal: openRunTaskModal }] = useModal(); | 25 | const [registerRunTaskModal, { openModal: openRunTaskModal }] = useModal(); |
23 | 26 | ||
24 | const [registerForm, { getFieldsValue }] = useForm({ | 27 | const [registerForm, { getFieldsValue }] = useForm({ |
@@ -66,6 +69,10 @@ | @@ -66,6 +69,10 @@ | ||
66 | openRunTaskModal(true, record); | 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 | const reload = () => getDataSource(); | 76 | const reload = () => getDataSource(); |
70 | 77 | ||
71 | const listElRef = ref<Nullable<ComponentElRef>>(null); | 78 | const listElRef = ref<Nullable<ComponentElRef>>(null); |
@@ -136,11 +143,18 @@ | @@ -136,11 +143,18 @@ | ||
136 | </template> | 143 | </template> |
137 | <template #renderItem="{ item }"> | 144 | <template #renderItem="{ item }"> |
138 | <List.Item :key="item.id"> | 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 | </List.Item> | 153 | </List.Item> |
141 | </template> | 154 | </template> |
142 | </List> | 155 | </List> |
143 | </section> | 156 | </section> |
157 | + <DetailDrawer @register="registerDrawer" /> | ||
144 | <DetailModal @register="registerModal" :reload="reload" /> | 158 | <DetailModal @register="registerModal" :reload="reload" /> |
145 | <RunTaskModal :reload="reload" @register="registerRunTaskModal" /> | 159 | <RunTaskModal :reload="reload" @register="registerRunTaskModal" /> |
146 | </PageWrapper> | 160 | </PageWrapper> |