5 changed files with 503 additions and 10 deletions
@ -0,0 +1,112 @@ |
|||||||
|
<template> |
||||||
|
<div id="formPreview" v-loading="state.loading"/> |
||||||
|
</template> |
||||||
|
<script lang="ts" setup> |
||||||
|
import { PropType, reactive } from 'vue'; |
||||||
|
import { loadMicroApp, MicroApp } from 'qiankun'; |
||||||
|
import { getSubDefineProps } from '/@/qiankun/state'; |
||||||
|
import { GlStateEnum } from '/@/enums/microAppEnum'; |
||||||
|
import { useMicroAppStore } from '/@/store/modules/microApp'; |
||||||
|
import { apps } from '/@/qiankun/apps'; |
||||||
|
import { getFormDefinitionJson } from '/@/api/platform/workflow/extension/controller/formDefinitionJson'; |
||||||
|
import { FORM_DESIGN_APP_COMPONENTS } from '/@/enums/microAppEnum'; |
||||||
|
import { useMessage } from '/@/hooks/web/useMessage'; |
||||||
|
import { startProcessDefinition, auditTask } from '/@/api/platform/workflow/controller/form'; |
||||||
|
import type { Workflow } from '/@/api/platform/workflow/entity/workflow'; |
||||||
|
|
||||||
|
const props = defineProps({ |
||||||
|
taskFormData: { |
||||||
|
type: Array as PropType<Recordable[]>, |
||||||
|
default: () => [] |
||||||
|
}, |
||||||
|
disabled: { |
||||||
|
type: Boolean as PropType<boolean>, |
||||||
|
default: false |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
interface WindowState { |
||||||
|
formDesignApp: MicroApp; |
||||||
|
formData: Recordable; |
||||||
|
options: Recordable; |
||||||
|
loading: boolean; |
||||||
|
} |
||||||
|
|
||||||
|
const state = reactive<WindowState>({ |
||||||
|
formDesignApp: undefined!, |
||||||
|
loading: false, |
||||||
|
formData: {}, |
||||||
|
options: {} |
||||||
|
}); |
||||||
|
const formDesignProps = { |
||||||
|
style: { height: 'calc(100vh - 160px)' }, |
||||||
|
options: {}, |
||||||
|
disabled: false, |
||||||
|
readonly: false, |
||||||
|
}; |
||||||
|
const emit = defineEmits(['success', 'register']); |
||||||
|
const microAppStore = useMicroAppStore(); |
||||||
|
const { createMessage } = useMessage(); |
||||||
|
|
||||||
|
async function init(formJsonId: string) { |
||||||
|
if (formJsonId) { |
||||||
|
state.loading = true; |
||||||
|
state.formData = {}; |
||||||
|
state.formDesignApp = loadMicroApp(Object.assign({} , apps.find(item => item.name == 'form-design'), { |
||||||
|
container: '#formPreview', |
||||||
|
props: { |
||||||
|
...getSubDefineProps(), |
||||||
|
// 表单设计器props |
||||||
|
[GlStateEnum.FORM_DESIGN_APP_PROPS_KEY]: formDesignProps |
||||||
|
} |
||||||
|
}), { sandbox: { experimentalStyleIsolation: true }}); |
||||||
|
state.formDesignApp.mountPromise.then(() => { |
||||||
|
const disableIds:string[] = []; |
||||||
|
const showIds:string[] = []; |
||||||
|
props.taskFormData.forEach((item) => { |
||||||
|
if (item.value !== undefined) { |
||||||
|
state.formData[item.id] = item.value; |
||||||
|
} |
||||||
|
if (item.readable === true) { |
||||||
|
showIds.push(item.id); |
||||||
|
} |
||||||
|
if (item.writable === false) { |
||||||
|
disableIds.push(item.id); |
||||||
|
} |
||||||
|
}); |
||||||
|
const formPreviewApp: Recordable = microAppStore.getFormDesignApp(FORM_DESIGN_APP_COMPONENTS.PREVIEW), |
||||||
|
formRef: Recordable = formPreviewApp.getRef().$refs['form-preview']; |
||||||
|
formRef.setShowIds(showIds); |
||||||
|
formRef.setDisableIds(disableIds); |
||||||
|
state.loading = false; |
||||||
|
}); |
||||||
|
// 处理表单json数据渲染 |
||||||
|
try { |
||||||
|
const data = await getFormDefinitionJson(formJsonId); |
||||||
|
if (!data.json) throw Error('当前数据没有json结构体'); |
||||||
|
formDesignProps.options = eval('(' + data.json + ')'); |
||||||
|
} catch(e: any) { |
||||||
|
createMessage.error(e); |
||||||
|
} |
||||||
|
} else createMessage.info('没有关联流程表单!'); |
||||||
|
} |
||||||
|
|
||||||
|
async function startFormProcessDefinition(data: Partial<Workflow>, callback: Fn) { |
||||||
|
const processVarsity = Object.assign(data.vars || {}, state.formData); |
||||||
|
const processInsId = await startProcessDefinition({ ...data, vars: processVarsity }); |
||||||
|
callback(processInsId); |
||||||
|
} |
||||||
|
|
||||||
|
async function auditFormTask(data: Partial<Workflow>, callback: Fn) { |
||||||
|
const processVarsity = Object.assign(data.vars || {}, state.formData); |
||||||
|
await auditTask({...data, vars: processVarsity}); |
||||||
|
callback(); |
||||||
|
} |
||||||
|
|
||||||
|
defineExpose({ |
||||||
|
init, |
||||||
|
startFormProcessDefinition, |
||||||
|
auditFormTask |
||||||
|
}); |
||||||
|
|
||||||
|
</script> |
Loading…
Reference in new issue