index.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <ContentWrap>
  3. <!-- 流程设计器,负责绘制流程等 -->
  4. <MyProcessDesigner
  5. key="designer"
  6. v-if="xmlString !== undefined"
  7. v-model="xmlString"
  8. :value="xmlString"
  9. v-bind="controlForm"
  10. keyboard
  11. ref="processDesigner"
  12. @init-finished="initModeler"
  13. :additionalModel="controlForm.additionalModel"
  14. @save="save"
  15. />
  16. <!-- 流程属性器,负责编辑每个流程节点的属性 -->
  17. <MyProcessPenal
  18. key="penal"
  19. :bpmnModeler="modeler as any"
  20. :prefix="controlForm.prefix"
  21. class="process-panel"
  22. :model="model"
  23. />
  24. </ContentWrap>
  25. </template>
  26. <script lang="ts" setup>
  27. import { MyProcessDesigner, MyProcessPenal } from '@/components/bpmnProcessDesigner/package'
  28. // 自定义元素选中时的弹出菜单(修改 默认任务 为 用户任务)
  29. import CustomContentPadProvider from '@/components/bpmnProcessDesigner/package/designer/plugins/content-pad'
  30. // 自定义左侧菜单(修改 默认任务 为 用户任务)
  31. import CustomPaletteProvider from '@/components/bpmnProcessDesigner/package/designer/plugins/palette'
  32. import * as ModelApi from '@/api/bpm/model'
  33. defineOptions({ name: 'BpmModelEditor' })
  34. const router = useRouter() // 路由
  35. const { query } = useRoute() // 路由的查询
  36. const message = useMessage() // 国际化
  37. const xmlString = ref(undefined) // BPMN XML
  38. const modeler = ref(null) // BPMN Modeler
  39. const controlForm = ref({
  40. simulation: true,
  41. labelEditing: false,
  42. labelVisible: false,
  43. prefix: 'flowable',
  44. headerButtonSize: 'mini',
  45. additionalModel: [CustomContentPadProvider, CustomPaletteProvider]
  46. })
  47. const model = ref<ModelApi.ModelVO>() // 流程模型的信息
  48. /** 初始化 modeler */
  49. const initModeler = (item) => {
  50. setTimeout(() => {
  51. modeler.value = item
  52. }, 10)
  53. }
  54. /** 添加/修改模型 */
  55. const save = async (bpmnXml) => {
  56. const data = {
  57. ...model.value,
  58. bpmnXml: bpmnXml // bpmnXml 只是初始化流程图,后续修改无法通过它获得
  59. } as unknown as ModelApi.ModelVO
  60. // 提交
  61. if (data.id) {
  62. await ModelApi.updateModel(data)
  63. message.success('修改成功')
  64. } else {
  65. await ModelApi.createModel(data)
  66. message.success('新增成功')
  67. }
  68. // 跳转回去
  69. close()
  70. }
  71. /** 关闭按钮 */
  72. const close = () => {
  73. router.push({ path: '/bpm/manager/model' })
  74. }
  75. /** 初始化 */
  76. onMounted(async () => {
  77. const modelId = query.modelId as unknown as number
  78. if (!modelId) {
  79. message.error('缺少模型 modelId 编号')
  80. return
  81. }
  82. // 查询模型
  83. const data = await ModelApi.getModel(modelId)
  84. xmlString.value = data.bpmnXml
  85. model.value = {
  86. ...data,
  87. bpmnXml: undefined // 清空 bpmnXml 属性
  88. }
  89. })
  90. </script>
  91. <style lang="scss">
  92. .process-panel__container {
  93. position: absolute;
  94. top: 90px;
  95. right: 60px;
  96. }
  97. </style>