123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- <template>
- <div class="process-panel__container" :style="{ width: `${this.width}px` }">
- <el-collapse v-model="activeTab">
- <el-collapse-item name="base">
- <template #title>
- <div class="panel-tab__title">
- <el-icon><info-filled /></el-icon>常规
- </div>
- </template>
- <element-base-info :id-edit-disabled="idEditDisabled" :business-object="elementBusinessObject" :type="elementType" />
- </el-collapse-item>
- <el-collapse-item name="condition" v-if="elementType === 'Process'" key="message">
- <template #title>
- <div class="panel-tab__title">
- <el-icon><comment /></el-icon>消息与信号
- </div>
- </template>
- <signal-and-massage />
- </el-collapse-item>
- <el-collapse-item name="condition" v-if="conditionFormVisible" key="condition">
- <template #title>
- <div class="panel-tab__title">
- <el-icon><promotion /></el-icon>流转条件
- </div>
- </template>
- <flow-condition :business-object="elementBusinessObject" :type="elementType" />
- </el-collapse-item>
- <!-- <el-collapse-item name="condition" v-if="formVisible" key="form">-->
- <!-- <template #title>-->
- <!-- <div class="panel-tab__title">-->
- <!-- <el-icon><list /></el-icon>表单-->
- <!-- </div>-->
- <!-- </template>-->
- <!-- <element-form :id="elementId" :type="elementType" />-->
- <!-- </el-collapse-item>-->
- <el-collapse-item name="task" v-if="elementType.indexOf('Task') !== -1" key="task">
- <template #title>
- <div class="panel-tab__title">
- <el-icon><checked /></el-icon>审核者
- </div>
- </template>
- <element-task :id="elementId" :key="elementId" :business-object="elementBusinessObject" :type="elementType" />
- </el-collapse-item>
- <!-- <el-collapse-item name="multiInstance" v-if="elementType.indexOf('Task') !== -1" key="multiInstance">-->
- <!-- <template #title>-->
- <!-- <div class="panel-tab__title">-->
- <!-- <el-icon><help-filled /></el-icon>会签配置-->
- <!-- </div>-->
- <!-- </template>-->
- <!-- <element-multi-instance :business-object="elementBusinessObject" :type="elementType" />-->
- <!-- </el-collapse-item>-->
- <el-collapse-item name="listeners" key="listeners">
- <template #title>
- <div class="panel-tab__title">
- <el-icon><bell-filled /></el-icon>执行监听器
- </div>
- </template>
- <element-listeners :id="elementId" :type="elementType" />
- </el-collapse-item>
- <el-collapse-item name="taskListeners" v-if="elementType === 'UserTask'" key="taskListeners">
- <template #title>
- <div class="panel-tab__title">
- <el-icon><bell-filled /></el-icon>任务监听器
- </div>
- </template>
- <user-task-listeners :id="elementId" :type="elementType" />
- </el-collapse-item>
- <el-collapse-item name="extensions" key="extensions">
- <template #title>
- <div class="panel-tab__title">
- <el-icon><circle-plus /></el-icon>扩展属性
- </div>
- </template>
- <element-properties :id="elementId" :type="elementType" />
- </el-collapse-item>
- <!-- <el-collapse-item name="other" key="other">-->
- <!-- <template #title>-->
- <!-- <div class="panel-tab__title">-->
- <!-- <el-icon><promotion /></el-icon>其他-->
- <!-- </div>-->
- <!-- </template>-->
- <!-- <element-other-config :id="elementId" />-->
- <!-- </el-collapse-item>-->
- </el-collapse>
- </div>
- </template>
- <script>
- import ElementBaseInfo from "./base/ElementBaseInfo.vue";
- import ElementOtherConfig from "./other/ElementOtherConfig.vue";
- import ElementTask from "./task/ElementTask.vue";
- import ElementMultiInstance from "./multi-instance/ElementMultiInstance.vue";
- import FlowCondition from "./flow-condition/FlowCondition.vue";
- import SignalAndMassage from "./signal-message/SignalAndMessage.vue";
- import ElementListeners from "./listeners/ElementListeners.vue";
- import ElementProperties from "./properties/ElementProperties.vue";
- // import ElementForm from "./form/ElementForm.vue";
- import UserTaskListeners from "./listeners/UserTaskListeners.vue";
- import Log from "../Log";
- /**
- * 侧边栏
- * @Author MiyueFE
- * @Home https://github.com/miyuesc
- * @Date 2021年3月31日18:57:51
- */
- export default {
- name: "MyPropertiesPanel",
- components: {
- UserTaskListeners,
- // ElementForm,
- ElementProperties,
- ElementListeners,
- SignalAndMassage,
- FlowCondition,
- ElementMultiInstance,
- ElementTask,
- // ElementOtherConfig,
- ElementBaseInfo
- },
- componentName: "MyPropertiesPanel",
- props: {
- bpmnModeler: Object,
- prefix: {
- type: String,
- default: "camunda"
- },
- width: {
- type: Number,
- default: 480
- },
- idEditDisabled: {
- type: Boolean,
- default: false
- }
- },
- provide() {
- return {
- prefix: this.prefix,
- width: this.width
- };
- },
- data() {
- return {
- activeTab: "base",
- elementId: "",
- elementType: "",
- elementBusinessObject: {}, // 元素 businessObject 镜像,提供给需要做判断的组件使用
- conditionFormVisible: false, // 流转条件设置
- formVisible: false // 表单配置
- };
- },
- watch: {
- elementId: {
- handler() {
- this.activeTab = "base";
- }
- }
- },
- created() {
- this.initModels();
- },
- methods: {
- initModels() {
- // 初始化 modeler 以及其他 moddle
- if (!this.bpmnModeler) {
- // 避免加载时 流程图 并未加载完成
- this.timer = setTimeout(() => this.initModels(), 10);
- return;
- }
- if (this.timer) clearTimeout(this.timer);
- window.bpmnInstances = {
- modeler: this.bpmnModeler,
- modeling: this.bpmnModeler.get("modeling"),
- moddle: this.bpmnModeler.get("moddle"),
- eventBus: this.bpmnModeler.get("eventBus"),
- bpmnFactory: this.bpmnModeler.get("bpmnFactory"),
- elementFactory: this.bpmnModeler.get("elementFactory"),
- elementRegistry: this.bpmnModeler.get("elementRegistry"),
- replace: this.bpmnModeler.get("replace"),
- selection: this.bpmnModeler.get("selection")
- };
- this.getActiveElement();
- },
- getActiveElement() {
- // 初始第一个选中元素 bpmn:Process
- this.initFormOnChanged(null);
- this.bpmnModeler.on("import.done", (e) => {
- this.initFormOnChanged(null);
- });
- // 监听选择事件,修改当前激活的元素以及表单
- this.bpmnModeler.on("selection.changed", ({ newSelection }) => {
- this.initFormOnChanged(newSelection[0] || null);
- });
- this.bpmnModeler.on("element.changed", ({ element }) => {
- // 保证 修改 "默认流转路径" 类似需要修改多个元素的事件发生的时候,更新表单的元素与原选中元素不一致。
- if (element && element.id === this.elementId) {
- this.initFormOnChanged(element);
- }
- });
- },
- // 初始化数据
- initFormOnChanged(element) {
- let activatedElement = element;
- if (!activatedElement) {
- activatedElement = window.bpmnInstances.elementRegistry.find((el) => el.type === "bpmn:Process") ?? window.bpmnInstances.elementRegistry.find((el) => el.type === "bpmn:Collaboration");
- }
- if (!activatedElement) return;
- Log.printBack(`select element changed: id: ${activatedElement.id} , type: ${activatedElement.businessObject.$type}`);
- Log.prettyInfo("businessObject", activatedElement.businessObject);
- window.bpmnInstances.bpmnElement = activatedElement;
- this.bpmnElement = activatedElement;
- this.elementId = activatedElement.id;
- this.elementType = activatedElement.type.split(":")[1] || "";
- this.elementBusinessObject = JSON.parse(JSON.stringify(activatedElement.businessObject));
- this.conditionFormVisible = !!(this.elementType === "SequenceFlow" && activatedElement.source && activatedElement.source.type.indexOf("StartEvent") === -1);
- this.formVisible = this.elementType === "UserTask" || this.elementType === "StartEvent";
- },
- beforeUnmount() {
- window.bpmnInstances = null;
- }
- }
- };
- </script>
|