diff --git a/web-admin/src/api/oaApproval.ts b/web-admin/src/api/oaApproval.ts index 4c24ca38..e72512be 100644 --- a/web-admin/src/api/oaApproval.ts +++ b/web-admin/src/api/oaApproval.ts @@ -294,3 +294,40 @@ export function fetchWithdrawOaInstance(instanceId: string) { showSuccessMessage: true }) } + +// --------------------------------------------------------------------------- +// 关联审批单 +// --------------------------------------------------------------------------- + +export type OaRelatedSummaryField = { + label: string + value: string + fullWidth?: boolean +} + +export type OaRelatedSummary = { + id: string + unavailable?: boolean + appName: string + applyTime: string + status: string + fields: OaRelatedSummaryField[] +} + +export function fetchOaRelatedCandidates(params?: { + keyword?: string + page?: number + pageSize?: number +}) { + return request.get<{ list: any[]; total: number; page: number; pageSize: number }>({ + url: `${BASE}/related-candidates`, + params + }) +} + +export function fetchOaRelatedSummaries(ids: string[], mode: 'picker' | 'view' = 'view') { + return request.get<{ list: OaRelatedSummary[] }>({ + url: `${BASE}/related-summaries`, + params: { ids: ids.filter(Boolean).join(','), mode } + }) +} diff --git a/web-admin/src/components/oa-approval/OaRelatedApproval.vue b/web-admin/src/components/oa-approval/OaRelatedApproval.vue new file mode 100644 index 00000000..c2a67a80 --- /dev/null +++ b/web-admin/src/components/oa-approval/OaRelatedApproval.vue @@ -0,0 +1,470 @@ + + + + + + diff --git a/web-admin/src/main.ts b/web-admin/src/main.ts index 238628f5..a7c66c09 100644 --- a/web-admin/src/main.ts +++ b/web-admin/src/main.ts @@ -16,12 +16,14 @@ import { setupErrorHandle } from './utils/sys/error-handle' import FcDesigner from '@form-create/designer' import formCreateAutoImport from '@form-create/element-ui/auto-import' import { setupFormCreateUpload } from '@/utils/oa-form-create-upload' +import { setupOaRelatedApproval } from '@/utils/oa-form-create-related-approval' // FormCreate 按字符串解析 el-input / fc-radio 等,主应用是按需自动导入,不会全局注册; // 必须挂上官方 auto-import,否则发起审批/详情里动态表单控件会残缺(如单选项只剩文字)。 FcDesigner.formCreate.use(formCreateAutoImport) // 内置「上传」默认 action=/,改为走附件上传 API,避免 POST 前端原点 404 setupFormCreateUpload(FcDesigner.formCreate) +setupOaRelatedApproval(FcDesigner.formCreate) function maskSecret(value?: string) { if (!value) return '(empty)' diff --git a/web-admin/src/oa-fc-host/main.ts b/web-admin/src/oa-fc-host/main.ts index 94094d82..0e1e0b5c 100644 --- a/web-admin/src/oa-fc-host/main.ts +++ b/web-admin/src/oa-fc-host/main.ts @@ -8,6 +8,7 @@ import * as ElementPlusIconsVue from '@element-plus/icons-vue' import 'element-plus/dist/index.css' import FcDesigner from '@form-create/designer' import { setupFormCreateUpload } from '@/utils/oa-form-create-upload' +import { setupOaRelatedApproval } from '@/utils/oa-form-create-related-approval' import App from './App.vue' const app = createApp(App) @@ -20,4 +21,5 @@ app.use(ElementPlus, { locale: zhCn }) app.use(FcDesigner) app.use(FcDesigner.formCreate) setupFormCreateUpload(FcDesigner.formCreate) +setupOaRelatedApproval(FcDesigner.formCreate) app.mount('#app') diff --git a/web-admin/src/utils/oa-form-create-related-approval.ts b/web-admin/src/utils/oa-form-create-related-approval.ts new file mode 100644 index 00000000..e7e319e4 --- /dev/null +++ b/web-admin/src/utils/oa-form-create-related-approval.ts @@ -0,0 +1,17 @@ +import FcDesigner from '@form-create/designer' +import OaRelatedApproval from '@/components/oa-approval/OaRelatedApproval.vue' +import { relatedApprovalDragRule } from '@/utils/oa-related-approval-rule' + +const FLAG = '__oaRelatedApprovalConfigured' + +export function setupOaRelatedApproval(formCreate?: { component?: (name: string, c: unknown) => void }) { + if ((FcDesigner as any)[FLAG]) return + FcDesigner.component('relatedApproval', OaRelatedApproval) + if (typeof formCreate?.component === 'function') { + formCreate.component('relatedApproval', OaRelatedApproval) + } + if (typeof FcDesigner.addDragRule === 'function') { + FcDesigner.addDragRule(relatedApprovalDragRule) + } + ;(FcDesigner as any)[FLAG] = true +} diff --git a/web-admin/src/utils/oa-related-approval-rule.ts b/web-admin/src/utils/oa-related-approval-rule.ts new file mode 100644 index 00000000..7c6c3fcd --- /dev/null +++ b/web-admin/src/utils/oa-related-approval-rule.ts @@ -0,0 +1,32 @@ +import uniqueId from '@form-create/utils/lib/unique' + +/** FormCreate Designer DragRule:关联审批单 */ +export const relatedApprovalDragRule = { + menu: 'main' as const, + icon: 'icon-select', + label: '关联审批单', + name: 'relatedApproval', + input: true, + mask: true, + validate: ['array'], + event: ['change'], + rule() { + return { + type: 'relatedApproval', + field: uniqueId(), + title: '关联审批单', + info: '', + $required: false, + props: {} + } + }, + props() { + return [ + { + type: 'input', + field: 'formCreateInfo', + title: '提示信息' + } + ] + } +}