Commit 814ad1f57fda3e72903045b35a7e79cd9f48c9cd

Authored by ww
1 parent 86532274

perf: DEFECT-1173 任务中心新增详情页面

  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>
... ...