Просмотр исходного кода

管道展示列表渲染/管道管理运行接口调试

lph 1 год назад
Родитель
Сommit
f6192767df

+ 10 - 0
ruoyi-ui/src/api/bpmprocess/process.js

@@ -163,3 +163,13 @@ export function processList(query) {
     baseURL: process.env.VUE_APP_BASE_API4,
   })
 }
+
+// 运行节点
+export function btnCommonApiProcess(data) {
+  return request({
+    url: '/system/runbpm/process/processNodeExecution',
+    method: 'post',
+    data: data,
+    baseURL: process.env.VUE_APP_BASE_API4
+  })
+}

+ 1 - 1
ruoyi-ui/src/api/tablelist/commonTable.js

@@ -216,4 +216,4 @@ export function btnCommonApi(data) {
     data: data,
     baseURL: process.env.VUE_APP_BASE_API3
   })
-}
+}

+ 37 - 1
ruoyi-ui/src/utils/bpmn/getNodeSequence.js

@@ -1,4 +1,4 @@
-
+import { getProcessEngine } from "@packages/bpmn-utils/BpmnDesignerUtils";
 export default function getNodeSequence(xmlObj) {
   if (!xmlObj.childNodes[0].childNodes[0]) return [];
   let nodeList = Array.from(xmlObj.childNodes[0].childNodes[0].childNodes)
@@ -13,6 +13,7 @@ export default function getNodeSequence(xmlObj) {
     nodeId: startNode.id,
     preNodeId: null,
     nextNodeId: nextNodeId,
+    nodeInfo: getNodeInfo(startNode.id, nodeList)
   })
   while (nextNodeId) {
     if (!nextNodeId) break
@@ -25,9 +26,11 @@ export default function getNodeSequence(xmlObj) {
         nodeId: currentId,
         preNodeId,
         nextNodeId,
+        nodeInfo: getNodeInfo(currentId, nodeList)
       }
     )
   }
+  console.log(res);
   return res
 
 }
@@ -46,3 +49,36 @@ const getNodeId = (node, flag, nodeList) => {
   if (!targetId) return false;
   return targetId;
 }
+
+/**
+ * 
+ * @param {节点Id} nodeId 
+ * @param {节点列表} nodeList 
+ */
+function getNodeInfo(nodeId, nodeList) {
+  let targetNode = nodeList.find(item => item.id == nodeId)
+  let prefix = getProcessEngine();
+  let id = targetNode.getAttribute('id')
+  let localName = targetNode.localName
+  let name = targetNode.getAttribute('name');
+  let nodeDescription = targetNode.getAttribute(prefix + 'nodeDescription')
+  let industryType = targetNode.getAttribute(prefix + 'IndustryType')
+  let normalScriptKey = targetNode.getAttribute(prefix + 'NormalScriptKey')
+  let normalScriptTriggerType = targetNode.getAttribute(prefix + 'NormalScriptTriggerType')
+  let executeUserType = targetNode.getAttribute(prefix + 'executeUserType')
+  let executeUser = targetNode.getAttribute(prefix + 'executeUser');
+  let virtuallyRole = targetNode.getAttribute(prefix + 'virtuallyRole')
+  let res = {
+    localName,//节点类型
+    id,//节点ID
+    name,//节点名称
+    nodeDescription,//节点表述
+    industryType,
+    normalScriptKey,//正常节点key
+    normalScriptTriggerType,//正常节点触发类型
+    executeUserType,//执行用户类型
+    executeUser,//执行用户
+    virtuallyRole,//虚拟角色
+  };
+  return res
+}

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

@@ -31,3 +31,16 @@ export async function createNewDiagram(modeler, newXml, settings) {
     catchError(e);
   }
 }
+
+// xml字符串转xml对象
+export function xmlStr2XmlObj(xmlStr) {
+  var xmlObj = {};
+  if (document.all) {
+    var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
+    xmlDom.loadXML(xmlStr);
+    xmlObj = xmlDom;
+  } else {
+    xmlObj = new DOMParser().parseFromString(xmlStr, "text/xml");
+  }
+  return xmlObj;
+}

+ 46 - 8
ruoyi-ui/src/views/bussiness/components/TaskItem.vue

@@ -1,17 +1,23 @@
 <template>
-  <div class="task-item-wrap">
+  <div
+    :class="{
+      'task-item-wrap': true,
+      'done-bg': cardData.isDone,
+      'now-border': cardData.isNow,
+    }"
+  >
     <div class="task-title">
-      <span>{{ itemData.index }}.</span>
-      <span>工艺校验</span>
+      <span class="mr5">{{ number }}.</span>
+      <span>{{ cardData.nodeInfo.name }}</span>
     </div>
     <div class="msg-list">
       <div class="msg-item">
         <i class="el-icon-user-solid icon"></i>
-        <span>admin</span>
+        <span>{{ cardData.nodeInfo.name || "暂无执行人" }}</span>
       </div>
       <div class="msg-item">
         <i class="el-icon-s-help icon"></i>
-        <span>任务类</span>
+        <span>{{ cardData.nodeInfo.localName || "未知类型" }}</span>
       </div>
       <div class="msg-item">
         <i class="el-icon-success icon"></i>
@@ -27,19 +33,45 @@ export default {
   props: ["itemData", "index"],
   components: {},
   data() {
-    return {};
+    return {
+      cardData: {},
+      number: "",
+    };
+  },
+  watch: {
+    myItemData: {
+      handler(nval) {
+        this.cardData = nval;
+      },
+      deep: true,
+      immediate: true,
+    },
+    myIndex: {
+      handler(nval) {
+        this.number = nval;
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  computed: {
+    myItemData() {
+      return this.itemData;
+    },
+    myIndex() {
+      return this.index;
+    },
   },
-  computed: {},
   methods: {},
 };
 </script>
 
 <style scoped lang="scss">
 .task-item-wrap {
-  background-color: #cdf1e5 !important;
   padding: 12px 16px;
   flex: 1;
   box-sizing: border-box;
+  background-color: #ebe6e6;
   // margin-right: 15px;
   .task-title {
     font-size: 14px;
@@ -58,4 +90,10 @@ export default {
     }
   }
 }
+.done-bg {
+  background-color: #cdf1e5 !important;
+}
+.now-border {
+  border: 5px solid rgb(167, 238, 171) !important;
+}
 </style>

+ 26 - 11
ruoyi-ui/src/views/bussiness/components/taskList.vue

@@ -3,23 +3,25 @@
     <div class="title-list">
       <div class="title-item">
         <span class="title-label">任务号:</span>
-        <span class="title-content">47AS04-51-1299_002</span>
+        <span class="title-content">{{ baseInfo.benTaskProcessKey }}</span>
       </div>
-      <div class="title-item">
+      <!-- <div class="title-item">
         <span class="title-label">图号:</span>
         <span class="title-content">1CG312-99</span>
-      </div>
+      </div> -->
       <div class="title-item">
         <span class="title-label">任务名称:</span>
-        <span class="title-content">支架</span>
+        <span class="title-content">{{ baseInfo.bepTaskName }}</span>
       </div>
-      <div class="title-item">
+      <!-- <div class="title-item">
         <span class="title-label">数量:</span>
         <span class="title-content">3</span>
-      </div>
+      </div> -->
       <div class="title-item">
         <span class="title-label">完成时间:</span>
-        <span class="title-content">2023年11月1日</span>
+        <span class="title-content">{{
+          baseInfo.benCreateTime.replace("T", " ")
+        }}</span>
       </div>
     </div>
     <div class="card-list-wrap">
@@ -30,7 +32,7 @@
         <TaskItem
           class="card-item"
           v-for="(item, index) of tempList"
-          :key="item.taskKey"
+          :key="item.nodeId"
           :itemData="item"
           :index="index + 1"
         ></TaskItem>
@@ -48,10 +50,11 @@ import TaskItem from "./TaskItem.vue";
 import { start } from "nprogress";
 export default {
   name: "TaskList",
-  props: [],
+  props: ["cardData"],
   components: { TaskItem },
   data() {
     return {
+      baseInfo: {},
       start: 0,
       end: 5,
       taskItemList: [
@@ -140,13 +143,25 @@ export default {
   },
   computed: {
     tempList() {
-      return this.taskItemList.slice(this.start, this.end);
+      return this.baseInfo?.cardList.slice(this.start, this.end);
+    },
+    myCardData() {
+      return this.cardData;
+    },
+  },
+  watch: {
+    myCardData: {
+      handler(nval) {
+        this.baseInfo = nval;
+      },
+      deep: true,
+      immediate: true,
     },
   },
   methods: {
     prevOrNext(flag) {
       if (flag == 1) {
-        if (this.end >= this.taskItemList.length) return;
+        if (this.end >= this.baseInfo?.cardList.length) return;
         this.start++;
         this.end++;
       } else {

+ 56 - 45
ruoyi-ui/src/views/bussiness/processMange.vue

@@ -82,31 +82,32 @@
           </el-table-column>
           <el-table-column label="操作" align="center">
             <template slot-scope="scope">
-              <el-button
-                type="warning"
-                plain
-                size="small"
-                class="mr10"
-                @click="runHandler(scope.row)"
-              >
-                运行
-              </el-button>
-              <el-dropdown>
-                <el-button type="warning" plain size="small">
-                  处理<i class="el-icon-arrow-down el-icon--right"></i>
+              <div class="excute-wrap">
+                <el-button
+                  type="warning"
+                  plain
+                  size="small"
+                  class="mr10 mb5"
+                  @click="runHandler(scope.row)"
+                >
+                  运行
                 </el-button>
-                <el-dropdown-menu slot="dropdown">
-                  <el-dropdown-item
-                    ><el-button
-                      size="mini"
-                      type="text"
-                      icon="el-icon-edit"
-                      @click="excuteHandler(scope.row)"
-                      v-hasPermi="['system:user:edit']"
-                      >处理</el-button
-                    ></el-dropdown-item
-                  >
-                  <!-- <el-dropdown-item>
+                <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"
+                        @click="excuteHandler(scope.row)"
+                        v-hasPermi="['system:user:edit']"
+                        >处理</el-button
+                      ></el-dropdown-item
+                    >
+                    <!-- <el-dropdown-item>
                     <el-button
                       size="mini"
                       type="text"
@@ -116,19 +117,21 @@
                       >运行管道</el-button
                     >
                   </el-dropdown-item> -->
-                  <el-dropdown-item>
-                    <el-dropdown
-                      size="mini"
-                      @command="(command) => handleCommand(command, scope.row)"
-                    >
-                      <el-button
+                    <el-dropdown-item>
+                      <el-dropdown
                         size="mini"
-                        type="text"
-                        icon="el-icon-d-arrow-right"
-                        >触发异常</el-button
+                        @command="
+                          (command) => handleCommand(command, scope.row)
+                        "
                       >
-                      <el-dropdown-menu slot="dropdown">
-                        <!-- <el-dropdown-item
+                        <el-button
+                          size="mini"
+                          type="text"
+                          icon="el-icon-d-arrow-right"
+                          >触发异常</el-button
+                        >
+                        <el-dropdown-menu slot="dropdown">
+                          <!-- <el-dropdown-item
                           command="handleResetPwd"
                           icon="el-icon-key"
                           v-hasPermi="['system:user:resetPwd']"
@@ -140,11 +143,12 @@
                           v-hasPermi="['system:user:edit']"
                           >分配角色</el-dropdown-item
                         > -->
-                      </el-dropdown-menu>
-                    </el-dropdown>
-                  </el-dropdown-item>
-                </el-dropdown-menu>
-              </el-dropdown>
+                        </el-dropdown-menu>
+                      </el-dropdown>
+                    </el-dropdown-item>
+                  </el-dropdown-menu>
+                </el-dropdown>
+              </div>
             </template>
           </el-table-column>
         </el-table>
@@ -162,7 +166,7 @@
 
 <script>
 import { processList } from "@/api/bpmprocess/process";
-import { btnCommonApi } from "@/api/tablelist/commonTable";
+import { btnCommonApiProcess } from "@/api/bpmprocess/process";
 import getNodeSequence from "@/utils/bpmn/getNodeSequence";
 export default {
   name: "processMange",
@@ -246,22 +250,29 @@ export default {
     },
     // 处理回调
     runHandler(row) {
-      let { benTaskNodeKey, bepTaskProcessXmlContent } = row;
+      console.log(row);
+      let { benTaskNodeKey, bepTaskProcessXmlContent, implementationName } =
+        row;
       let { nodeId, nextNodeId } = this.getNextNodeKey(
         benTaskNodeKey,
         bepTaskProcessXmlContent
       );
       let payLoad = {
         basicMap: {
-          nodeKey: nodeId,
+          taskNodeKey: nodeId,
           nextNodeKey: nextNodeId,
-          tableName: "",
+          // tableName: "",
+          implementationName: row.benmTaskAutomaticScriptTriggerType,
+          taskProcessKey: row.bepTaskKey,
         },
         commMap: {
           //formData
         },
       };
-      console.log("运行", row);
+      btnCommonApiProcess(payLoad).then((res) => {
+        console.log(res);
+      });
+      console.log(payLoad);
     },
     // 获取下一个节点的nodekey
     getNextNodeKey(nodeKey, xmlStr) {

+ 64 - 3
ruoyi-ui/src/views/bussiness/progressShow.vue

@@ -35,7 +35,11 @@
         </div>
       </div>
       <div class="show-body">
-        <TaskList v-for="i of 5" :key="i"></TaskList>
+        <TaskList
+          v-for="(item, index) of tableData"
+          :key="index + 1"
+          :cardData="item"
+        ></TaskList>
         <pagination
           v-show="total > 0"
           :total="total"
@@ -50,6 +54,9 @@
 
 <script>
 import TaskList from "./components/taskList.vue";
+import { processList } from "@/api/bpmprocess/process";
+import getNodeSequence from "@/utils/bpmn/getNodeSequence";
+import { xmlStr2XmlObj } from "@/utils/bpmn/xml";
 export default {
   name: "ProgressShow",
   props: [],
@@ -58,16 +65,70 @@ export default {
     return {
       processType: 1,
       queryString: "",
-      total: 1,
+      total: 0,
       queryParams: {
         pageNum: 1,
         pageSize: 5,
       },
+      tableData: [], //列表数据
     };
   },
   computed: {},
   methods: {
-    getList() {},
+    // 获取列表数据
+    getList() {
+      processList(this.queryParams).then((res) => {
+        if (res.code == 200) {
+          this.tableData = this.getTableData(
+            res.rows.map((item) => item.resultMap)
+          );
+          this.total = res.total;
+          console.log(this.tableData);
+        } else {
+          this.$message.error("网络异常,请稍后再试");
+        }
+      });
+    },
+    // 获取表格展示数据
+    getTableData(dataList) {
+      let res = [];
+      res = dataList.map((item) => {
+        let baseObj = {
+          benTaskProcessKey: item.bepTaskKey, //任务编号
+          bepTaskName: item.bepTaskName, //任务名称
+          benCreateTime: item.benCreateTime, //开始或结束时间  需要根据bepTaskProcessState状态 来判定
+          currentNodeKey: item.benTaskNodeKey, //当前节点key
+          cardList: [],
+        };
+        let xmlObj = xmlStr2XmlObj(item.bepTaskProcessXmlContent);
+        console.dir(xmlObj);
+        baseObj.cardList = getNodeSequence(xmlObj);
+        return baseObj;
+      });
+      res = this.setNodeState(res);
+      return res;
+    },
+    // 设置节点完成情况
+    setNodeState(res) {
+      res.forEach((re) => {
+        let nowKey = re.currentNodeKey;
+        let isDone = true;
+        re.cardList.forEach((item) => {
+          if (item.nodeId == nowKey) {
+            isDone = false;
+            item.isDone = isDone;
+            item.isNow = true;
+          } else {
+            item.isDone = isDone;
+            item.isNow = false;
+          }
+        });
+      });
+      return res;
+    },
+  },
+  mounted() {
+    this.getList();
   },
 };
 </script>

+ 1 - 1
ruoyi-ui/src/views/dataEngine/datamodeling/editTable.vue

@@ -82,7 +82,7 @@
           </template>
         </el-table-column>
 
-        <el-table-column prop="isPrimary" label="键" width="100">
+        <el-table-column prop="isPrimary" label="键" width="100">
           <template slot-scope="scope">
             <!-- <el-radio-group v-model="scope.row.isPrimary">
                 <el-radio :label="true">是</el-radio>

+ 6 - 2
ruoyi-ui/src/views/system/bpmnPro/components/Panel/components/ElementExecuteUser.vue

@@ -130,9 +130,13 @@ export default {
   },
   methods: {
     initFormData() {
-      this.exeUserValue = getExecuteUser(getActive()) || "";
-      console.log(this.exeUserValue);
       this.exeUserType = getExecuteUserType(getActive()) || "1";
+      if (this.exeUserType == 2) {
+        let temp = getExecuteUser(getActive()) || "";
+        this.exeUserValue = temp ? temp.split(",") : [];
+      } else {
+        this.exeUserValue = getExecuteUser(getActive()) || "";
+      }
       if (this.exeUserType && this.isFirst) {
         if (this.exeUserType == 3) {
           this.exeRoleListHandler();