Răsfoiți Sursa

添加formkey字段/部分表单校验/sql语句拼接调整

lph 1 an în urmă
părinte
comite
d85aa1f497

+ 13 - 0
ruoyi-ui/src/utils/bpmn/formDataValidate.js

@@ -0,0 +1,13 @@
+export function formDataValidate(obj) {
+  let { rootElements } = obj.rootElement
+  if (!rootElements[0].name) {
+    return {
+      flag: false,
+      msg: '流程名称为必填项!'
+    }
+  }
+
+  return {
+    flag: true,
+  }
+}

+ 1 - 1
ruoyi-ui/src/utils/index.js

@@ -403,7 +403,7 @@ export function titleCase(str) {
 }
 
 // 下划转驼峰
-export function camelCase(str) {
+export function camelCase(str = '') {
   return str.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase())
 }
 

+ 105 - 152
ruoyi-ui/src/views/bpmprocess/index.vue

@@ -24,7 +24,11 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="流程开启状态" class="item_label" prop="processOpneState">
+      <el-form-item
+        label="流程开启状态"
+        class="item_label"
+        prop="processOpneState"
+      >
         <el-input
           v-model="queryParams.processOpneState"
           placeholder="请输入流程开启状态"
@@ -32,7 +36,11 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="流程部署时间" class="item_label" prop="processDeployTime">
+      <el-form-item
+        label="流程部署时间"
+        class="item_label"
+        prop="processDeployTime"
+      >
         <el-date-picker
           clearable
           v-model="queryParams.processDeployTime"
@@ -42,14 +50,25 @@
         >
         </el-date-picker>
       </el-form-item>
-      <el-form-item label="版本状态" prop="processVersion">
-        <el-input
+      <!-- <el-form-item label="版本状态" prop="processVersion">
+       
+        <el-select
           v-model="queryParams.processVersion"
+          value-key="value"
           placeholder="请输入版本状态"
+          filterable
           clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
+          @change="handleQuery"
+        >
+          <el-option
+            v-for="item in dict.type.bpm_version"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item> -->
       <el-form-item>
         <el-button
           type="primary"
@@ -175,9 +194,13 @@
       <el-table-column label="版本注释" align="center" prop="note" />
       <el-table-column label="版本状态" align="center" prop="processVersion">
         <template slot-scope="scope">
-          <span style="color: #337ab7;cursor: pointer;" @click="versionStatusHandle(scope.row)">{{
-            getDictLabel(scope.row.processVersion, dict.type.bpm_version)
-          }}</span>
+          <span
+            style="color: #337ab7; cursor: pointer"
+            @click="versionStatusHandle(scope.row)"
+            >{{
+              getDictLabel(scope.row.processVersion, dict.type.bpm_version)
+            }}</span
+          >
         </template>
       </el-table-column>
       <!-- <el-table-column label="节点json串" align="center" prop="processJson" /> -->
@@ -242,62 +265,6 @@
       @pagination="getList"
     />
 
-    <!-- 添加或修改流程定义对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="流程名称" prop="processName">
-          <el-input v-model="form.processName" placeholder="请输入流程名称" />
-        </el-form-item>
-        <el-form-item label="流程别名" prop="processKey">
-          <el-input v-model="form.processKey" placeholder="请输入流程别名" />
-        </el-form-item>
-        <el-form-item label="流程开启状态" prop="processOpneState">
-          <el-input
-            v-model="form.processOpneState"
-            placeholder="请输入流程开启状态"
-          />
-        </el-form-item>
-        <el-form-item label="流程部署时间" prop="processDeployTime">
-          <el-date-picker
-            clearable
-            v-model="form.processDeployTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择流程部署时间"
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="版本注释" prop="note">
-          <el-input
-            v-model="form.note"
-            type="textarea"
-            placeholder="请输入内容"
-          />
-        </el-form-item>
-        <el-form-item label="版本状态" prop="processVersion">
-          <el-input
-            v-model="form.processVersion"
-            placeholder="请输入版本状态"
-          />
-        </el-form-item>
-        <el-form-item label="xml文件存放地址" prop="processXmlPath">
-          <el-input
-            v-model="form.processXmlPath"
-            placeholder="请输入xml文件存放地址"
-          />
-        </el-form-item>
-        <el-form-item label="删除标志" prop="delFlag">
-          <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
-        </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" placeholder="请输入备注" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
-    </el-dialog>
     <!-- 预览流程图对话框 -->
     <el-dialog
       :title="previewData.processName"
@@ -313,82 +280,60 @@
       </template>
     </el-dialog>
 
-
     <!-- 版本状态对话框 -->
     <el-dialog title="版本状态" width="800px" :visible.sync="isVersionsStatus">
-      <el-table
-      :data="versionForm"
-      style="width: 100%">
-        <el-table-column
-          prop="processId"
-          label="主键"
-          align="center">
+      <el-table :data="versionForm" style="width: 100%">
+        <el-table-column prop="processId" label="主键" align="center">
         </el-table-column>
-        <el-table-column
-          prop="processName"
-          label="流程名称"
-          align="center">
+        <el-table-column prop="processName" label="流程名称" align="center">
         </el-table-column>
-        <el-table-column
-          prop="processKey"
-          label="流程别名"
-          align="center">
+        <el-table-column prop="processKey" label="流程别名" align="center">
         </el-table-column>
-        <el-table-column
-          prop="processType"
-          label="流程类型"
-          align="center">
+        <el-table-column prop="processType" label="流程类型" align="center">
         </el-table-column>
         <el-table-column
           prop="startEventType"
           label="启动事件类型"
-          align="center">
+          align="center"
+        >
         </el-table-column>
-        <el-table-column
-          prop="note"
-          label="版本注释"
-          align="center">
+        <el-table-column prop="note" label="版本注释" align="center">
         </el-table-column>
-        <el-table-column
-          prop="remark"
-          label="备注"
-          align="center">
+        <el-table-column prop="remark" label="备注" align="center">
         </el-table-column>
         <el-table-column
-        label="操作"
-        align="center"
-        class-name="small-padding fixed-width"
-      >
-        <template slot-scope="scope">
-          <el-dropdown>
-            <el-button type="warning" plain size="small">
-              处理<i class="el-icon-arrow-down el-icon--right"></i>
-            </el-button>
-            <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item>
-                <el-button
-                  size="mini"
-                  type="text"
-                  icon="el-icon-edit"
-                  v-hasPermi="['system:user:edit']"
-                  @click="statusStartHandle(scope.row)"
-                  >启用
-                </el-button>
-              </el-dropdown-item>
-      
-            </el-dropdown-menu>
-          </el-dropdown>
-        </template>
-      </el-table-column>
+          label="操作"
+          align="center"
+          class-name="small-padding fixed-width"
+        >
+          <template slot-scope="scope">
+            <el-dropdown>
+              <el-button type="warning" plain size="small">
+                处理<i class="el-icon-arrow-down el-icon--right"></i>
+              </el-button>
+              <el-dropdown-menu slot="dropdown">
+                <el-dropdown-item>
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-edit"
+                    v-hasPermi="['system:user:edit']"
+                    @click="statusStartHandle(scope.row)"
+                    >启用
+                  </el-button>
+                </el-dropdown-item>
+              </el-dropdown-menu>
+            </el-dropdown>
+          </template>
+        </el-table-column>
       </el-table>
 
       <pagination
-      :total="statustotal"
-      :page.sync="statusParams.pageNum"
-      :limit.sync="statusParams.pageSize"
-      @pagination="pagelist(versionForm)"
-    />
-
+        :total="statustotal"
+        :page.sync="statusParams.pageNum"
+        :limit.sync="statusParams.pageSize"
+        @pagination="pagelist(versionForm)"
+      />
     </el-dialog>
   </div>
 </template>
@@ -402,7 +347,7 @@ import {
   updateProcess,
   bpmBackups,
   exportFileProcess,
-  enableProcess
+  enableProcess,
 } from "@/api/bpmprocess/process";
 import Preview from "./components/preview.vue";
 
@@ -453,7 +398,7 @@ export default {
         processJson: null,
         processXmlContent: null,
         processXmlPath: null,
-        processVersion:0
+        processVersion: 0,
       },
       // 表单参数
       form: {},
@@ -464,10 +409,10 @@ export default {
         pageNum: 1,
         pageSize: 10,
         processKey: null,
-        processVersion:1
+        processVersion: 1,
       },
       statustotal: 0,
-      processKey: null
+      processKey: null,
     };
   },
   created() {
@@ -667,37 +612,45 @@ export default {
       })?.label;
     },
     // 版本状态
-    versionStatusHandle(row){
-      this.statusParams.processKey = this.processKey ?  this.processKey : row.processKey
-      listProcess(this.statusParams).then(res => {
-        this.statustotal = res.total
-        res.rows.forEach(item => {
+    versionStatusHandle(row) {
+      this.statusParams.processKey = this.processKey
+        ? this.processKey
+        : row.processKey;
+      listProcess(this.statusParams).then((res) => {
+        this.statustotal = res.total;
+        res.rows.forEach((item) => {
           // 启动事件类型
           item.startEventType = this.getDictLabel(
-              item.startEventType,
-              this.dict.type.bpm_start_event_type
-            )
+            item.startEventType,
+            this.dict.type.bpm_start_event_type
+          );
           // 流程类型
-          item.processType = this.getDictLabel(item.processType, this.dict.type.bpm_type)
-        })
-        this.versionForm = res.rows
-      })
-      this.isVersionsStatus = true
+          item.processType = this.getDictLabel(
+            item.processType,
+            this.dict.type.bpm_type
+          );
+        });
+        this.versionForm = res.rows;
+      });
+      this.isVersionsStatus = true;
     },
     // 版本状态分页器
-    pagelist(row){
-      this.processKey = row[0].processKey
-      this.versionStatusHandle(this.processKey)
+    pagelist(row) {
+      this.processKey = row[0].processKey;
+      this.versionStatusHandle(this.processKey);
     },
     // 版本状态启用
     statusStartHandle(row) {
-      enableProcess({processId: row.processId, processKey: row.processKey}).then(res => {
-        if(res.code == 200){
-          this.getList()
+      enableProcess({
+        processId: row.processId,
+        processKey: row.processKey,
+      }).then((res) => {
+        if (res.code == 200) {
+          this.getList();
           this.$message.success("启用成功");
-          this.isVersionsStatus = false
+          this.isVersionsStatus = false;
         }
-      })
+      });
     },
     // 预览流程图
     prviewHandle(row) {
@@ -720,7 +673,7 @@ export default {
   color: #337ab7;
   cursor: pointer;
 }
-::v-deep .el-form-item__label{
+::v-deep .el-form-item__label {
   width: 98px !important;
 }
 </style>

+ 75 - 0
ruoyi-ui/src/views/system/bpmnPro/components/Panel/components/ElementExecuteForm.vue

@@ -0,0 +1,75 @@
+<template>
+  <el-collapse-item name="element-execute-form">
+    <template #title>
+      <collapse-title title="执行表单">
+        <lucide-icon name="FileSpreadsheet" />
+      </collapse-title>
+    </template>
+    <div class="element-execute-form">
+      <edit-item label="表单key" :label-width="100">
+        <!-- <el-input
+          v-model="formKey"
+          maxlength="32"
+          @change="setExternalTaskPriority"
+        /> -->
+        <el-select
+          v-model="formKey"
+          value-key="value"
+          placeholder="请选择执行表单"
+          clearable
+          filterable
+          @change="updateFormKey"
+        >
+          <el-option
+            v-for="item in formList"
+            :key="item.fId"
+            :label="item.dfTableName"
+            :value="item.fId"
+          >
+          </el-option>
+        </el-select>
+      </edit-item>
+    </div>
+  </el-collapse-item>
+</template>
+
+<script>
+import EventEmitter from "@utils/EventEmitter";
+import { setFormKey, getFormKey } from "@packages/bo-utils/myFieldUtil";
+import { getActive } from "@packages/bpmn-utils/BpmnDesignerUtils";
+import { listForm } from "@/api/dragform/form";
+
+export default {
+  name: "ElementExecuteUser",
+  data() {
+    return {
+      formList: [],
+      formKey: "",
+    };
+  },
+
+  mounted() {
+    this.initFormData();
+
+    EventEmitter.on("element-update", () => {
+      this.initFormData();
+    });
+  },
+  methods: {
+    async initFormData() {
+      this.formKey = getFormKey(getActive());
+      try {
+        let res = await listForm();
+        if (res.code == 200) {
+          this.formList = res.rows;
+        }
+      } catch (error) {
+        console.log(error);
+      }
+    },
+    updateFormKey(value) {
+      setFormKey(getActive(), value);
+    },
+  },
+};
+</script>

+ 136 - 74
ruoyi-ui/src/views/system/bpmnPro/components/Panel/components/ElementGenerations.vue

@@ -6,77 +6,94 @@
       </collapse-title>
     </template>
 
-    <edit-item label="编号">
-      <el-input v-model="elementId" maxlength="32" @change="updateElementId" />
-    </edit-item>
-
-    <edit-item label="名称">
-      <el-input
-        v-model="elementName"
-        maxlength="20"
-        @change="updateElementName"
-      />
-    </edit-item>
+    <el-form inline :model="elFormData" :rules="rules" ref="ruleForm">
+      <!-- <edit-item :label="isProcess ? '流程别名' : 'ID'" prop="elementId"> -->
+      <el-form-item :label="isProcess ? '流程别名:' : 'ID'" prop="elementId">
+        <el-input
+          v-model="elFormData.elementId"
+          maxlength="32"
+          @change="updateElementId"
+        />
+      </el-form-item>
+      <!-- </edit-item> -->
 
-    <template v-if="isProcess">
-      <edit-item key="version" label="版本">
+      <!-- <edit-item :label="isProcess ? '流程名称' : '名称'"> -->
+      <el-form-item :label="isProcess ? '流程名称' : '名称'" prop="elementName">
         <el-input
-          v-model="elementVersion"
+          v-model="elFormData.elementName"
           maxlength="20"
-          @change="updateElementVersion"
+          @change="updateElementName"
         />
-      </edit-item>
-      <edit-item key="note" label="版本描述">
+      </el-form-item>
+      <!-- </edit-item> -->
+      <el-form-item v-if="!isProcess" label="节点描述" prop="nodeDescription">
         <el-input
-          v-model="elementNote"
+          v-model="elFormData.nodeDescription"
           maxlength="20"
-          @change="updateElementNote"
+          @change="updateNodeDescription"
         />
-      </edit-item>
-      <edit-item key="startEventType" label="启动事件">
-        <el-select
-          v-model="startEventType"
-          value-key="value"
-          placeholder="请选择启动事件类型"
-          clearable
-          filterable
-          @change="updateStartEventType"
-        >
-          <el-option
-            v-for="item in dict.type.bpm_start_event_type"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
+      </el-form-item>
+
+      <template v-if="isProcess">
+        <edit-item key="version" label="流程版本">
+          <el-input
+            v-model="elFormData.elementVersion"
+            maxlength="20"
+            @change="updateElementVersion"
+          />
+        </edit-item>
+        <edit-item key="note" label="版本描述">
+          <el-input
+            v-model="elFormData.elementNote"
+            maxlength="20"
+            @change="updateElementNote"
+          />
+        </edit-item>
+        <edit-item key="startEventType" label="启动事件">
+          <el-select
+            v-model="elFormData.startEventType"
+            value-key="value"
+            placeholder="请选择启动事件类型"
+            clearable
+            filterable
+            @change="updateStartEventType"
           >
-          </el-option>
-        </el-select>
-      </edit-item>
-      <edit-item key="bpmType" label="流程类型">
-        <el-select
-          v-model="bpmType"
-          value-key="value"
-          placeholder="请选择流程类型"
-          clearable
-          filterable
-          @change="updateBpmType"
-        >
-          <el-option
-            v-for="item in dict.type.bpm_type"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
+            <el-option
+              v-for="item in dict.type.bpm_start_event_type"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </edit-item>
+        <edit-item key="bpmType" label="流程类型">
+          <el-select
+            v-model="elFormData.bpmType"
+            value-key="value"
+            placeholder="请选择流程类型"
+            clearable
+            filterable
+            @change="updateBpmType"
           >
-          </el-option>
-        </el-select>
-      </edit-item>
+            <el-option
+              v-for="item in dict.type.bpm_type"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </edit-item>
 
-      <edit-item key="executable" label="可执行">
-        <el-switch
-          v-model="elementExecutable"
-          @change="updateElementExecutable"
-        />
-      </edit-item>
-    </template>
+        <edit-item key="executable" label="可执行">
+          <el-switch
+            v-model="elFormData.elementExecutable"
+            @change="updateElementExecutable"
+          />
+        </edit-item>
+      </template>
+    </el-form>
   </el-collapse-item>
 </template>
 
@@ -97,6 +114,8 @@ import {
   setStartEventType,
   getBpmType,
   setBpmType,
+  setNodeDescription,
+  getNodeDescription,
 } from "@packages/bo-utils/myFieldUtil";
 import EventEmitter from "@utils/EventEmitter";
 import { getActive } from "@packages/bpmn-utils/BpmnDesignerUtils";
@@ -106,33 +125,65 @@ export default {
   dicts: ["bpm_type", "bpm_start_event_type"],
   data() {
     return {
-      elementId: "",
-      elementName: "",
-      elementVersion: "",
-      elementNote: "",
-      startEventType: "",
-      bpmType: "",
+      elFormData: {
+        elementId: "",
+        elementName: "",
+        elementVersion: "",
+        elementNote: "",
+        startEventType: "",
+        bpmType: "",
+        nodeDescription: "",
+      },
+
       elementExecutable: true,
       isProcess: false,
+      // rules: {
+      //   elementId: [
+      //     { required: true, message: "请输入流程别名/ID", trigger: "blur" },
+      //   ],
+      //   elementName: [
+      //     { required: true, message: "请输入流程名称/名称", trigger: "blur" },
+      //   ],
+      // },
     };
   },
+  computed: {
+    rules() {
+      let res = {
+        elementId: [
+          { required: true, message: "请输入流程别名/ID", trigger: "blur" },
+        ],
+      };
+      if (this.isProcess) {
+        res.elementName = [
+          { required: true, message: "请输入流程名称/名称", trigger: "blur" },
+        ];
+      }
+      return res;
+    },
+  },
 
   mounted() {
     this.reloadGenerationData();
     EventEmitter.on("element-update", this.reloadGenerationData);
+    EventEmitter.on("formValidate", this.formValidate);
   },
   methods: {
     reloadGenerationData() {
+      this.$refs.ruleForm?.clearValidate();
       this.isProcess = !!getActive() && getActive().type === "bpmn:Process";
-      this.elementId = getActive().id;
-      this.elementName = getNameValue(getActive()) || "";
+      this.elFormData.elementId = getActive().id;
+      this.elFormData.elementName = getNameValue(getActive()) || "";
 
       if (this.isProcess) {
-        this.elementExecutable = getProcessExecutable(getActive());
-        this.elementNote = getNoteValue(getActive()) || "";
-        this.startEventType = getStartEventType(getActive()) || "";
-        this.bpmType = getBpmType(getActive()) || "";
-        this.elementVersion = getProcessVersionTag(getActive()) || "";
+        this.elFormData.elementExecutable = getProcessExecutable(getActive());
+        this.elFormData.elementNote = getNoteValue(getActive()) || "";
+        this.elFormData.startEventType = getStartEventType(getActive()) || "";
+        this.elFormData.bpmType = getBpmType(getActive()) || "";
+        this.elFormData.elementVersion =
+          getProcessVersionTag(getActive()) || "";
+      } else {
+        this.elFormData.nodeDescription = getNodeDescription(getActive()) || "";
       }
     },
     updateElementName(value) {
@@ -162,6 +213,17 @@ export default {
     updateElementExecutable(value) {
       setProcessExecutable(getActive(), value);
     },
+    updateNodeDescription(value) {
+      setNodeDescription(getActive(), value);
+    },
+    // 表单校验
+    formValidate() {
+      return new Promise((resolve, reject) => {
+        this.$refs.ruleForm.validate((res) => {
+          resolve(res);
+        });
+      });
+    },
   },
 };
 </script>

+ 6 - 0
ruoyi-ui/src/views/system/bpmnPro/components/Panel/index.vue

@@ -26,6 +26,7 @@ import { isExecutable } from "@packages/bo-utils/executionListenersUtil";
 import { isAsynchronous } from "@packages/bo-utils/asynchronousContinuationsUtil";
 import { isStartInitializable } from "@packages/bo-utils/initiatorUtil";
 import { getModeler } from "@packages/bpmn-utils/BpmnDesignerUtils";
+import { isTaskOrUserTask } from "@packages/bo-utils/myFieldUtil";
 import ElementGenerations from "@packages/Panel/components/ElementGenerations";
 import ElementDocumentations from "@packages/Panel/components/ElementDocumentations";
 import ElementConditional from "@packages/Panel/components/ElementConditional";
@@ -35,6 +36,7 @@ import ElementExecutionListeners from "@packages/Panel/components/ElementExecuti
 import ElementAsyncContinuations from "@packages/Panel/components/ElementAsyncContinuations";
 import ElementStartInitiator from "@packages/Panel/components/ElementStartInitiator";
 import ElementExtensionField from "@packages/Panel/components/ElementExtensionField";
+import ElementExecuteForm from "@packages/Panel/components/ElementExecuteForm";
 
 export default {
   name: "BpmnPanel",
@@ -49,6 +51,7 @@ export default {
     ElementAsyncContinuations,
     ElementStartInitiator,
     ElementExtensionField,
+    ElementExecuteForm,
   },
   data() {
     return {
@@ -142,6 +145,9 @@ export default {
       isStartInitializable(element) &&
         this.renderComponents.push(ElementStartInitiator);
       this.renderComponents.push(ElementExtensionField);
+      // 添加执行表单
+      isTaskOrUserTask(element) &&
+        this.renderComponents.push(ElementExecuteForm);
     },
   },
 };

+ 11 - 0
ruoyi-ui/src/views/system/bpmnPro/components/Toolbar/tools/Save.vue

@@ -21,6 +21,8 @@ import { mapGetters } from "vuex";
 import { addProcess, updateProcess } from "@/api/bpmprocess/process";
 import xml from "highlight.js/lib/languages/xml";
 import { getProcessEngine } from "@packages/bpmn-utils/BpmnDesignerUtils";
+import EventEmitter from "@utils/EventEmitter";
+import { formDataValidate } from "@utils/formDataValidate";
 export default {
   name: "BpmnSave",
   computed: {
@@ -89,10 +91,19 @@ export default {
       }
     },
     async saveHandler() {
+      // let formValidate = await EventEmitter.emit("formValidate");
+      // if (!formValidate) {
+      //   return;
+      // }
       let _this = this;
       let formData = _this.formData() || {}; // 当前流程表单详细数据
       let processJsonObj = await this.getProcessJson(); // xml标签转换json
       console.log(processJsonObj);
+      let validateRes = formDataValidate(processJsonObj);
+      if (!validateRes.flag) {
+        this.$message.error(validateRes.msg);
+        return;
+      }
       formData.processJson = JSON.stringify(processJsonObj);
       let { rootElements, warnings } = processJsonObj.rootElement;
       formData.processKey = rootElements[0].id; // 流程编号

+ 3 - 0
ruoyi-ui/src/views/system/bpmnPro/components/bo-utils/idUtil.js

@@ -1,6 +1,8 @@
 import { catchError } from "@utils/printCatch";
 import { getModeler } from "@packages/bpmn-utils/BpmnDesignerUtils";
 import { isIdValid } from "@packages/bpmn-utils/BpmnValidator";
+import { Message } from 'element-ui';
+
 
 export function getIdValue(element) {
   return element.businessObject.id;
@@ -10,6 +12,7 @@ export function setIdValue(element, value) {
   const errorMsg = isIdValid(element.businessObject, value);
 
   if (errorMsg && errorMsg.length) {
+    Message.error(errorMsg)
     return catchError(errorMsg);
   }
 

+ 36 - 2
ruoyi-ui/src/views/system/bpmnPro/components/bo-utils/myFieldUtil.js

@@ -1,7 +1,6 @@
 import { catchError } from "@utils/printCatch";
 import { getModeler, getProcessEngine } from "@packages/bpmn-utils/BpmnDesignerUtils";
-import { isAny } from "bpmn-js/lib/features/modeling/util/ModelingUtil";
-import { getBusinessObject, is } from "bpmn-js/lib/util/ModelUtil";
+import { getBusinessObject, is, isAny } from "bpmn-js/lib/util/ModelUtil";
 import { add as collectionAdd } from "diagram-js/lib/util/Collections";
 
 
@@ -50,4 +49,39 @@ export function setBpmType(element, value) {
     [`${prefix}:bpmType`]: value
   });
 }
+// 节点描述
+export function setNodeDescription(element, value) {
+  const modeling = getModeler.getModeling();
+  const prefix = getProcessEngine();
+
+  modeling.updateProperties(element, {
+    [`${prefix}:nodeDescription`]: value
+  });
+}
+export function getNodeDescription(element) {
+  const prefix = getProcessEngine();
+  return element.businessObject.get(`${prefix}:nodeDescription`);
+}
+
+// 执行表单
+export function isTaskOrUserTask(element) {
+  return isAny(element, ["bpmn:Task", 'bpmn:UserTask'])
+}
+
+export function setFormKey(element, value) {
+  const prefix = getProcessEngine();
+  const modeling = getModeler.getModeling();
+  const businessObject = getBusinessObject(element);
+  modeling.updateModdleProperties(element, businessObject, {
+    [`${prefix}:formKey`]: value
+  });
+}
+
+
+export function getFormKey(element) {
+  const prefix = getProcessEngine();
+  const businessObject = getBusinessObject(element);
+
+  return businessObject.get(`${prefix}:formKey`);
+}
 

+ 5 - 5
ruoyi-ui/src/views/system/bpmnPro/components/bpmn-utils/BpmnValidator.js

@@ -24,25 +24,25 @@ export function isIdValid(element, idValue) {
   const idAlreadyExists = assigned && assigned !== element;
 
   if (!idValue) {
-    return "ID 不能为空.";
+    return "流程别名/ID 不能为空.";
   }
 
   if (idAlreadyExists) {
-    return "ID 必须是唯一的";
+    return "流程别名/ID 必须是唯一的";
   }
 
   return validateId(idValue);
 }
 export function validateId(idValue) {
   if (containsSpace(idValue)) {
-    return "ID 不能包含空格";
+    return "流程别名/ID 不能包含空格";
   }
 
   if (!ID_REGEX.test(idValue)) {
     if (QNAME_REGEX.test(idValue)) {
-      return "ID 不能包含前缀";
+      return "流程别名/ID 不能包含前缀";
     }
 
-    return "ID 必须符合 BPMN 规范";
+    return "流程别名/ID 必须符合 BPMN 规范";
   }
 }

+ 18 - 10
ruoyi-ui/src/views/tableMange/index.vue

@@ -44,7 +44,7 @@
             border
             ref="dragTable"
             row-key="id"
-            :max-height="tableHeight"
+            max-height="500px"
           >
             <!--
 
@@ -485,7 +485,7 @@ export default {
       // 当前table唯一标识
       sqlkey: "",
       // 表格的高度
-      tableHeight: document.documentElement.scrollHeight - 245 + "px",
+      // tableHeight: document.documentElement.scrollHeight - 245 + "px",
       tableList: [], //所有表格列表
       tableFieldList: [], // 当前表格字段数据
       tableName: "", // 当前表名称
@@ -930,11 +930,12 @@ export default {
     },
     // 递归拼接查询语句
     getSQLString(tableFieldList, fieldArr, tableArr, sqlType = "mysql") {
+      let prefix = "{DBNAME}.";
       let asOrSpace = sqlType == "oracle" ? " " : " AS ";
       for (let i = 0; i < tableFieldList.length; i++) {
         let temp = tableFieldList[i];
         if (temp.isShow) {
-          let tempArr = temp.tableName + "." + temp.fieldName;
+          let tempArr = prefix + temp.tableName + "." + temp.fieldName;
           if (temp.isChildren) {
             tempArr += asOrSpace + temp.tableName + "_" + temp.fieldName;
           }
@@ -947,14 +948,17 @@ export default {
             temp.relationType +
               " " +
               isNeedUsername +
+              prefix +
               temp.relationTable +
               asOrSpace +
               temp.relationTable +
               " ON " +
+              prefix +
               temp.relationTable +
               "." +
               temp.relationFieldName +
               " = " +
+              prefix +
               temp.tableName +
               "." +
               temp.fieldName
@@ -969,12 +973,15 @@ export default {
         (val) => !val.isShow && val.fieldName == this.formData.primaryKey
       );
       if (isNotInclude) {
-        fieldArr.push(isNotInclude.tableName + "." + isNotInclude.fieldName);
+        fieldArr.push(
+          prefix + isNotInclude.tableName + "." + isNotInclude.fieldName
+        );
       }
     },
 
     // 拼接查询sql语句
     getSQLStr() {
+      let prefix = "{DBNAME}.";
       let sqlType = this.databaseType; //数据库类型
       // let sqlType = "oracle";
       let sql = "";
@@ -997,6 +1004,7 @@ export default {
         fieldNameArr.join(",") +
         " FROM " +
         isNeedUsername +
+        prefix +
         this.tableName +
         asOrSpace +
         this.tableName;
@@ -1294,14 +1302,14 @@ export default {
               this.$router.push({
                 path: "/system/fromModel/index/tablelist",
               });
-              return;
-            }
-            if (res.code == 200) {
-              this.$message.success("创建成功");
             } else {
-              this.$message.warning("创建失败");
+              if (res.code == 200) {
+                this.$message.success("创建成功");
+              } else {
+                this.$message.warning("创建失败");
+              }
+              this.isShowPreview = false;
             }
-            this.isShowPreview = false;
           }
         } else {
           this.$message.warning("请完善表单");

+ 1 - 1
ruoyi-ui/src/views/tablelist/commonTable/listInfo.vue

@@ -377,7 +377,7 @@ export default {
           // 调用查询需要携带当前table的唯一标识
           this.queryParams.queryMap.sqlkey = this.sqlkey;
           this.queryParams.orderByColumn = camelCase(
-            this.queryParams.orderByColumn
+            this.queryParams.orderByColumn || ""
           );
           // 根据sql语句查询当前表数据
           unionListTableData(this.queryParams).then((res) => {