diff --git a/apps/web-antd/src/components/form/components/user-tag-select.vue b/apps/web-antd/src/components/form/components/user-tag-select.vue new file mode 100644 index 00000000..96e0c1c2 --- /dev/null +++ b/apps/web-antd/src/components/form/components/user-tag-select.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/apps/web-antd/src/components/oa-template-card-editor/BlockLibrary.vue b/apps/web-antd/src/components/oa-template-card-editor/BlockLibrary.vue index 42c0d131..6918466d 100644 --- a/apps/web-antd/src/components/oa-template-card-editor/BlockLibrary.vue +++ b/apps/web-antd/src/components/oa-template-card-editor/BlockLibrary.vue @@ -40,8 +40,8 @@ defineProps<{ flex-direction: column; width: 200px; height: 100%; - border-right: 1px solid #e5e6eb; - background: #fafbfc; + border-right: 1px solid var(--ant-color-border-secondary, #e5e6eb); + background: var(--ant-color-fill-quaternary, #fafbfc); } .panel-header { @@ -49,16 +49,16 @@ defineProps<{ align-items: center; justify-content: space-between; padding: 12px 16px; - border-bottom: 1px solid #e5e6eb; + border-bottom: 1px solid var(--ant-color-border-secondary, #e5e6eb); font-size: 13px; .title { font-weight: 600; - color: #1d2129; + color: var(--ant-color-text, #1d2129); } .hint { - color: #86909c; + color: var(--ant-color-text-tertiary, #86909c); font-size: 11px; } } @@ -75,19 +75,19 @@ defineProps<{ gap: 8px; padding: 10px 12px; margin-bottom: 6px; - border: 1px dashed #c9cdd4; + border: 1px dashed var(--ant-color-border, #c9cdd4); border-radius: 4px; - background: #fff; + background: var(--ant-color-bg-container, #fff); font-size: 13px; - color: #4e5969; + color: var(--ant-color-text-secondary, #4e5969); cursor: grab; user-select: none; transition: all 0.15s; &:hover { - border-color: #165dff; - color: #165dff; - background: #f2f7ff; + border-color: var(--ant-color-primary, #165dff); + color: var(--ant-color-primary, #165dff); + background: var(--ant-color-primary-bg, #f2f7ff); } &:active { @@ -102,34 +102,7 @@ defineProps<{ .empty-hint { padding: 24px 12px; text-align: center; - color: #c9cdd4; + color: var(--ant-color-text-quaternary, #c9cdd4); font-size: 12px; } - -.dark { - .block-library { - background: #1f1f1f; - border-right-color: #374151; - } - - .panel-header { - border-bottom-color: #374151; - - .title { - color: #e5e7eb; - } - } - - .block-item { - background: #374151; - border-color: #4b5563; - color: #d1d5db; - - &:hover { - border-color: #60a5fa; - color: #60a5fa; - background: rgba(96, 165, 250, 0.1); - } - } -} diff --git a/apps/web-antd/src/components/oa-template-card-editor/Canvas.vue b/apps/web-antd/src/components/oa-template-card-editor/Canvas.vue index eb27ab54..fe4751e7 100644 --- a/apps/web-antd/src/components/oa-template-card-editor/Canvas.vue +++ b/apps/web-antd/src/components/oa-template-card-editor/Canvas.vue @@ -159,7 +159,7 @@ function handleRemove(instanceId: string) { flex-direction: column; flex: 1; min-width: 0; - background: #fff; + background: var(--ant-color-bg-container, #fff); } .panel-header { @@ -167,16 +167,16 @@ function handleRemove(instanceId: string) { align-items: center; justify-content: space-between; padding: 12px 16px; - border-bottom: 1px solid #e5e6eb; + border-bottom: 1px solid var(--ant-color-border-secondary, #e5e6eb); font-size: 13px; .title { font-weight: 600; - color: #1d2129; + color: var(--ant-color-text, #1d2129); } .hint { - color: #86909c; + color: var(--ant-color-text-tertiary, #86909c); font-size: 11px; } } @@ -199,22 +199,22 @@ function handleRemove(instanceId: string) { font-size: 12px; .group-label { - color: #4e5969; + color: var(--ant-color-text-secondary, #4e5969); font-weight: 500; font-family: 'JetBrains Mono', monospace; } .group-count { - color: #86909c; + color: var(--ant-color-text-tertiary, #86909c); } } .group-dropzone { min-height: 60px; padding: 8px; - border: 2px dashed #d9d9d9; + border: 2px dashed var(--ant-color-border, #d9d9d9); border-radius: 6px; - background: #fafbfc; + background: var(--ant-color-fill-quaternary, #fafbfc); } .empty-dropzone { @@ -222,7 +222,7 @@ function handleRemove(instanceId: string) { align-items: center; justify-content: center; min-height: 44px; - color: #c9cdd4; + color: var(--ant-color-text-quaternary, #c9cdd4); font-size: 12px; } @@ -232,9 +232,9 @@ function handleRemove(instanceId: string) { justify-content: space-between; padding: 8px 10px; margin-bottom: 6px; - border: 1px solid #e5e6eb; + border: 1px solid var(--ant-color-border-secondary, #e5e6eb); border-radius: 4px; - background: #fff; + background: var(--ant-color-bg-container, #fff); cursor: pointer; transition: all 0.15s; @@ -243,12 +243,12 @@ function handleRemove(instanceId: string) { } &:hover { - border-color: #165dff; + border-color: var(--ant-color-primary, #165dff); } &.selected { - border-color: #165dff; - background: #f2f7ff; + border-color: var(--ant-color-primary, #165dff); + background: var(--ant-color-primary-bg, #f2f7ff); box-shadow: 0 0 0 2px rgba(22, 93, 255, 0.15); } } @@ -268,13 +268,13 @@ function handleRemove(instanceId: string) { .instance-label { font-size: 13px; - color: #1d2129; + color: var(--ant-color-text, #1d2129); font-weight: 500; } .instance-summary { font-size: 11px; - color: #86909c; + color: var(--ant-color-text-tertiary, #86909c); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -286,52 +286,15 @@ function handleRemove(instanceId: string) { border: none; border-radius: 50%; background: transparent; - color: #86909c; + color: var(--ant-color-text-tertiary, #86909c); font-size: 16px; line-height: 1; cursor: pointer; transition: all 0.15s; &:hover { - background: #f53f3f; + background: var(--ant-color-error, #f53f3f); color: #fff; } } - -.dark { - .canvas { - background: #1f1f1f; - } - - .panel-header { - border-bottom-color: #374151; - - .title { - color: #e5e7eb; - } - } - - .group-dropzone { - background: #1f1f1f; - border-color: #374151; - } - - .instance-item { - background: #374151; - border-color: #4b5563; - - &:hover { - border-color: #60a5fa; - } - - &.selected { - border-color: #60a5fa; - background: rgba(96, 165, 250, 0.1); - } - } - - .instance-label { - color: #e5e7eb; - } -} diff --git a/apps/web-antd/src/components/oa-template-card-editor/JsonPreview.vue b/apps/web-antd/src/components/oa-template-card-editor/JsonPreview.vue index 2df675c7..479fdbc5 100644 --- a/apps/web-antd/src/components/oa-template-card-editor/JsonPreview.vue +++ b/apps/web-antd/src/components/oa-template-card-editor/JsonPreview.vue @@ -68,7 +68,8 @@ async function handleCopy() { flex-direction: column; width: 280px; height: 100%; - border-left: 1px solid #e5e6eb; + border-left: 1px solid var(--ant-color-border-secondary, #e5e6eb); + /* JSON 代码面板保留 VS Code Dark+ 风格暗底(无论浅色/暗色主题) */ background: #1e1e1e; } diff --git a/apps/web-antd/src/components/oa-template-card-editor/PropertyPanel.vue b/apps/web-antd/src/components/oa-template-card-editor/PropertyPanel.vue index 1415a3bb..bfb3cf7c 100644 --- a/apps/web-antd/src/components/oa-template-card-editor/PropertyPanel.vue +++ b/apps/web-antd/src/components/oa-template-card-editor/PropertyPanel.vue @@ -181,7 +181,7 @@ watch( read-only /> @@ -254,7 +254,7 @@ watch( read-only /> @@ -278,8 +278,8 @@ watch( flex-direction: column; width: 280px; height: 100%; - border-left: 1px solid #e5e6eb; - background: #fff; + border-left: 1px solid var(--ant-color-border-secondary, #e5e6eb); + background: var(--ant-color-bg-container, #fff); } .panel-header { @@ -287,16 +287,16 @@ watch( align-items: center; justify-content: space-between; padding: 12px 16px; - border-bottom: 1px solid #e5e6eb; + border-bottom: 1px solid var(--ant-color-border-secondary, #e5e6eb); font-size: 13px; .title { font-weight: 600; - color: #1d2129; + color: var(--ant-color-text, #1d2129); } .hint { - color: #86909c; + color: var(--ant-color-text-tertiary, #86909c); font-size: 11px; max-width: 120px; overflow: hidden; @@ -318,10 +318,10 @@ watch( .section-title { margin-bottom: 12px; padding-bottom: 6px; - border-bottom: 1px solid #f2f3f5; + border-bottom: 1px solid var(--ant-color-split, #f2f3f5); font-size: 12px; font-weight: 600; - color: #4e5969; + color: var(--ant-color-text-secondary, #4e5969); } .form-row { @@ -332,11 +332,11 @@ watch( display: block; margin-bottom: 4px; font-size: 12px; - color: #4e5969; + color: var(--ant-color-text-secondary, #4e5969); .required { margin-left: 2px; - color: #f53f3f; + color: var(--ant-color-error, #f53f3f); } } @@ -345,28 +345,4 @@ watch( flex-direction: column; gap: 4px; } - -.dark { - .property-panel { - background: #1f1f1f; - border-left-color: #374151; - } - - .panel-header { - border-bottom-color: #374151; - - .title { - color: #e5e7eb; - } - } - - .section-title { - border-bottom-color: #374151; - color: #d1d5db; - } - - .form-label { - color: #d1d5db; - } -} diff --git a/apps/web-antd/src/components/oa-template-card-editor/index.vue b/apps/web-antd/src/components/oa-template-card-editor/index.vue index 40ca6e41..b0b448bb 100644 --- a/apps/web-antd/src/components/oa-template-card-editor/index.vue +++ b/apps/web-antd/src/components/oa-template-card-editor/index.vue @@ -493,10 +493,10 @@ defineExpose({ flex-direction: column; width: 100%; height: 480px; - border: 1px solid #e5e6eb; + border: 1px solid var(--ant-color-border-secondary, #e5e6eb); border-radius: 6px; overflow: hidden; - background: #fff; + background: var(--ant-color-bg-container, #fff); } .editor-toolbar { @@ -504,13 +504,13 @@ defineExpose({ align-items: center; justify-content: space-between; padding: 8px 12px; - border-bottom: 1px solid #e5e6eb; - background: #fafbfc; + border-bottom: 1px solid var(--ant-color-border-secondary, #e5e6eb); + background: var(--ant-color-fill-quaternary, #fafbfc); font-size: 13px; .title { font-weight: 600; - color: #1d2129; + color: var(--ant-color-text, #1d2129); } } @@ -519,20 +519,4 @@ defineExpose({ flex: 1; min-height: 0; } - -.dark { - .template-editor { - background: #1f1f1f; - border-color: #374151; - } - - .editor-toolbar { - background: #1f1f1f; - border-bottom-color: #374151; - - .title { - color: #e5e7eb; - } - } -} diff --git a/apps/web-antd/src/views/system/oa-cron-task/api/index.ts b/apps/web-antd/src/views/system/oa-cron-task/api/index.ts new file mode 100644 index 00000000..d5fe8c48 --- /dev/null +++ b/apps/web-antd/src/views/system/oa-cron-task/api/index.ts @@ -0,0 +1,30 @@ +import { requestClient } from '#/api/request'; + +/** + * OA 定时任务管理 API + * + * 仅 list / detail / update;预置 3 条任务不可新增删除。 + * 路由前缀:oa-cron-task/ + */ +const prefix = 'oa-cron-task/'; + +/** + * 分页查询定时任务列表 + */ +export async function getOaCronTaskList(data: any) { + return requestClient.get(`${prefix}list`, { params: data }); +} + +/** + * 获取定时任务详情 + */ +export async function getOaCronTaskInfo(id: number) { + return requestClient.get(`${prefix}detail`, { params: { id } }); +} + +/** + * 更新启停 / 封面 / 跳转 / active_types / preset_payloads / 投递对象等 + */ +export async function updateOaCronTask(data: Record) { + return requestClient.post(`${prefix}update`, data); +} diff --git a/apps/web-antd/src/views/system/oa-cron-task/components/message-config-modal.vue b/apps/web-antd/src/views/system/oa-cron-task/components/message-config-modal.vue new file mode 100644 index 00000000..a5bcca48 --- /dev/null +++ b/apps/web-antd/src/views/system/oa-cron-task/components/message-config-modal.vue @@ -0,0 +1,347 @@ + + + diff --git a/apps/web-antd/src/views/system/oa-cron-task/components/modal.vue b/apps/web-antd/src/views/system/oa-cron-task/components/modal.vue new file mode 100644 index 00000000..2411070a --- /dev/null +++ b/apps/web-antd/src/views/system/oa-cron-task/components/modal.vue @@ -0,0 +1,146 @@ + + +