Procházet zdrojové kódy

管道管理的列表渲染/按钮操作外链.内链添加query参数

lph před 1 rokem
rodič
revize
fc661cf0e6

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

@@ -153,3 +153,13 @@ export function delScript(id) {
     method: 'delete'
   })
 }
+
+// 执行管道列表数据
+export function processList(query) {
+  return request({
+    url: '/system/execute/process/list',
+    method: 'get',
+    params: query,
+    baseURL: process.env.VUE_APP_BASE_API4,
+  })
+}

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

@@ -28,7 +28,6 @@ export default function getNodeSequence(xmlObj) {
       }
     )
   }
-  console.log(res);
   return res
 
 }

+ 183 - 3
ruoyi-ui/src/views/bussiness/processMange.vue

@@ -47,30 +47,210 @@
           </div>
           <div class="search-input">
             <el-input placeholder="请输入..." v-model="queryString">
-              <el-button slot="append" icon="el-icon-search"></el-button>
+              <el-button
+                slot="append"
+                icon="el-icon-search"
+                @click="searchList"
+              ></el-button>
             </el-input>
           </div>
         </div>
       </div>
-      <div class="show-body"></div>
+      <div class="show-body">
+        <el-table :data="tableData" border stripe>
+          <el-table-column type="selection" width="55" align="center" />
+          <el-table-column type="index" width="50" align="center" />
+          <el-table-column
+            v-for="col in columns"
+            :prop="col.prop"
+            :key="col.prop"
+            :label="col.label"
+            align="center"
+          >
+            <template slot-scope="scope">
+              <span v-if="col.prop == 'benCreateTime'">{{
+                scope.row.benCreateTime.replace("T", " ")
+              }}</span>
+              <span v-if="col.prop == 'bepTaskProcessType'">{{
+                getDictLabel(scope.row.bepTaskProcessType, dict.type.bpm_type)
+              }}</span>
+              <span v-if="col.prop == 'benTaskNodeState'">{{
+                scope.row.benTaskNodeState == "0" ? "已执行" : "未执行"
+              }}</span>
+              <span v-else>{{ scope.row[col.prop] }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center">
+            <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"
+                      @click="excuteHandler(scope.row)"
+                      v-hasPermi="['system:user:edit']"
+                      >处理</el-button
+                    ></el-dropdown-item
+                  >
+                  <el-dropdown-item>
+                    <el-button
+                      size="mini"
+                      type="text"
+                      icon="el-icon-delete"
+                      @click="runHandler(scope.row)"
+                      v-hasPermi="['system:user:remove']"
+                      >运行管道</el-button
+                    >
+                  </el-dropdown-item>
+                  <el-dropdown-item>
+                    <el-dropdown
+                      size="mini"
+                      @command="(command) => handleCommand(command, scope.row)"
+                    >
+                      <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']"
+                          >重置密码</el-dropdown-item
+                        >
+                        <el-dropdown-item
+                          command="handleAuthRole"
+                          icon="el-icon-circle-check"
+                          v-hasPermi="['system:user:edit']"
+                          >分配角色</el-dropdown-item
+                        > -->
+                      </el-dropdown-menu>
+                    </el-dropdown>
+                  </el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          v-show="total > 0"
+          :total="total"
+          :page.sync="queryParams.pageNum"
+          :limit.sync="queryParams.pageSize"
+          @pagination="getList"
+        />
+      </div>
     </div>
   </div>
 </template>
 
 <script>
+import { processList } from "@/api/bpmprocess/process";
 export default {
   name: "processMange",
   props: [],
   components: {},
+  dicts: ["bpm_type"],
   data() {
     return {
       taskType: 1,
       queryString: "",
       taskStatus: 3,
+      tableData: [], //表格数据
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+      },
+      total: 0,
+      columns: [
+        {
+          prop: "bepTaskKey",
+          label: "任务编号",
+        },
+        {
+          prop: "bepTaskName",
+          label: "任务名称",
+        },
+        {
+          prop: "bepTaskProcessType",
+          label: "任务流程类型",
+        },
+        {
+          prop: "bepTaskProcessState",
+          label: "任务流程状态",
+        },
+        {
+          prop: "benTaskNodeName",
+          label: "节点名称",
+        },
+        {
+          prop: "benTaskNodeState",
+          label: "节点状态",
+        },
+        {
+          prop: "benTaskNodeType",
+          label: "节点类型",
+        },
+        {
+          prop: "benCreateBy",
+          label: "创建人",
+        },
+        {
+          prop: "benCreateTime",
+          label: "创建时间",
+        },
+      ],
     };
   },
   computed: {},
-  methods: {},
+  methods: {
+    // 获取列表数据
+    getList() {
+      processList(this.queryParams).then((res) => {
+        console.log(res);
+        if (res.code == 200) {
+          this.tableData = res.rows.map((item) => item.resultMap);
+          this.total = res.total;
+          console.log(this.tableData);
+        } else {
+          this.$message.error("网络异常,请稍后再试");
+        }
+      });
+    },
+    // 搜索回调
+    searchList() {
+      this.getList();
+    },
+    // 处理回调
+    excuteHandler(row) {
+      console.log("处理", row);
+    },
+    // 处理回调
+    runHandler(row) {
+      console.log("运行", row);
+    },
+    // 触发异常回调
+    handleCommand(command, row) {
+      console.log("触发异常");
+    },
+    // 获取字典对应label
+    getDictLabel(value, dictLsit = []) {
+      return dictLsit.find((item) => {
+        return item.value == value;
+      })?.label;
+    },
+  },
+  mounted() {
+    this.getList();
+  },
 };
 </script>
 

+ 273 - 170
ruoyi-ui/src/views/system/excuteBtnMange/index.vue

@@ -263,7 +263,7 @@
               </span>
             </el-form-item>
           </el-col>
-          <el-col :span="24">
+          <el-col :span="12">
             <el-form-item label="按钮类型" prop="btnType">
               <el-select
                 v-model="btnGroupFormData.btnType"
@@ -280,79 +280,86 @@
               </el-select>
             </el-form-item>
           </el-col>
+          <!-- 非目录 -->
           <div v-show="btnGroupFormData.btnType != 6">
-            <el-col :span="12">
-              <el-form-item label="绑定表单" prop="btnFormKey">
-                <el-select
-                  v-model="btnGroupFormData.btnFormKey"
-                  placeholder="请选择表单"
-                  clearable
-                  filterable
-                >
-                  <el-option
-                    v-for="item in formOptions"
-                    :key="item.fId"
-                    :label="item.dfName"
-                    :value="item.fId"
+            <div
+              v-show="
+                btnGroupFormData.btnType != 3 && btnGroupFormData.btnType != 7
+              "
+            >
+              <el-col :span="12">
+                <el-form-item label="绑定表单" prop="btnFormKey">
+                  <el-select
+                    v-model="btnGroupFormData.btnFormKey"
+                    placeholder="请选择表单"
+                    clearable
+                    filterable
                   >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="执行流程" prop="btnProcessKey">
-                <el-select
-                  v-model="btnGroupFormData.btnProcessKey"
-                  placeholder="请选择执行流程"
-                  clearable
-                  filterable
-                >
-                  <el-option
-                    v-for="item in processOptions"
-                    :key="item.processKey"
-                    :label="item.processName"
-                    :value="item.processKey"
+                    <el-option
+                      v-for="item in formOptions"
+                      :key="item.fId"
+                      :label="item.dfName"
+                      :value="item.fId"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="执行流程" prop="btnProcessKey">
+                  <el-select
+                    v-model="btnGroupFormData.btnProcessKey"
+                    placeholder="请选择执行流程"
+                    clearable
+                    filterable
                   >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="绑定表格" prop="btnTableKey">
-                <el-select
-                  v-model="btnGroupFormData.btnTableKey"
-                  placeholder="请选择表格"
-                  clearable
-                  filterable
-                >
-                  <el-option
-                    v-for="item in tableOptions"
-                    :key="item.tableKey"
-                    :label="item.dtName"
-                    :value="item.tableKey"
+                    <el-option
+                      v-for="item in processOptions"
+                      :key="item.processKey"
+                      :label="item.processName"
+                      :value="item.processKey"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="绑定表格" prop="btnTableKey">
+                  <el-select
+                    v-model="btnGroupFormData.btnTableKey"
+                    placeholder="请选择表格"
+                    clearable
+                    filterable
                   >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="绑定脚本" prop="btnScriptKey">
-                <el-select
-                  v-model="btnGroupFormData.btnScriptKey"
-                  placeholder="请选择绑定节点"
-                  clearable
-                  filterable
-                >
-                  <el-option
-                    v-for="item in scriptOptions"
-                    :key="item.scriptKey"
-                    :label="item.scriptName"
-                    :value="item.scriptKey"
+                    <el-option
+                      v-for="item in tableOptions"
+                      :key="item.tableKey"
+                      :label="item.dtName"
+                      :value="item.tableKey"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="绑定脚本" prop="btnScriptKey">
+                  <el-select
+                    v-model="btnGroupFormData.btnScriptKey"
+                    placeholder="请选择绑定节点"
+                    clearable
+                    filterable
                   >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
+                    <el-option
+                      v-for="item in scriptOptions"
+                      :key="item.scriptKey"
+                      :label="item.scriptName"
+                      :value="item.scriptKey"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+            </div>
             <el-col
               :span="24"
               v-show="
@@ -367,106 +374,151 @@
                 ></el-input>
               </el-form-item>
             </el-col>
-            <el-col
-              :span="24"
+            <!-- <div class="table-wrap">
+              <span class="title mb10">添加query参数</span>
+              <el-table
+                :data="queryTableData"
+                border
+                stripe
+                style="width: 100%"
+              >
+                <el-table-column align="center" type="index" width="50" />
+                <el-table-column
+                  v-for="col in columns"
+                  :prop="col.prop"
+                  :key="col.prop"
+                  :label="col.label"
+                  width="150"
+                  align="center"
+                >
+                  <template slot-scope="scope">
+                    <el-input
+                      v-model="scope.row[col.prop]"
+                      placeholder=""
+                      size="normal"
+                      clearable
+                    ></el-input>
+                  </template>
+                </el-table-column>
+                <el-table-column label="操作" align="center">
+                  <template slot-scope="scope">
+                    <el-button
+                      size="mini"
+                      type="danger"
+                      icon="el-icon-delete"
+                      @click="deleteQueryItem(scope.$index)"
+                      >删除
+                    </el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </div> -->
+            <el-col :span="24">
+              <!-- 
               v-show="
                 btnGroupFormData.btnType != 3 && btnGroupFormData.btnType != 7
-              "
-            >
-              <el-form-item label="" prop="btnParams">
-                <div class="filter-table-wrap">
-                  <span class="title">公共参数</span>
-                  <el-table :data="commonFieldData" style="width: 100%">
-                    <el-table-column label="序号" type="index" width="50">
-                    </el-table-column>
-                    <el-table-column
-                      prop="fieldName"
-                      label="字段名"
-                      width="150"
-                      align="center"
-                    >
-                      <template slot-scope="scope">
-                        <el-select
-                          v-model="scope.row.fieldName"
-                          placeholder="请选择"
+              " -->
+              <!-- <el-form-item label="" prop="btnParams"> -->
+              <div class="filter-table-wrap">
+                <span class="title mb10"
+                  >{{
+                    btnGroupFormData.btnType != 3 &&
+                    btnGroupFormData.btnType != 7
+                      ? "公共"
+                      : "query"
+                  }}参数</span
+                >
+                <el-table :data="commonFieldData" style="width: 100%">
+                  <el-table-column label="序号" type="index" width="50">
+                  </el-table-column>
+                  <el-table-column
+                    prop="fieldName"
+                    label="字段名"
+                    width="150"
+                    align="center"
+                  >
+                    <template slot-scope="scope">
+                      <el-select
+                        v-model="scope.row.fieldName"
+                        placeholder="请选择"
+                      >
+                        <el-option
+                          v-for="item in rootFieldInfo.fieldList"
+                          :key="item.value"
+                          :label="item.value"
+                          :value="item.key"
                         >
-                          <el-option
-                            v-for="item in rootFieldInfo.fieldList"
-                            :key="item.value"
-                            :label="item.value"
-                            :value="item.key"
+                          <span style="float: left">{{ item.value }}</span>
+                          <span
+                            style="
+                              float: right;
+                              color: #8492a6;
+                              font-size: 13px;
+                            "
+                            >{{ item.key }}</span
                           >
-                            <span style="float: left">{{ item.value }}</span>
-                            <span
-                              style="
-                                float: right;
-                                color: #8492a6;
-                                font-size: 13px;
-                              "
-                              >{{ item.key }}</span
-                            >
-                          </el-option>
-                        </el-select>
-                      </template>
-                    </el-table-column>
-                    <el-table-column
-                      prop="flagValue"
-                      label="默认值"
-                      width="150"
-                      align="center"
-                    >
-                      <template slot="header" slot-scope="">
-                        默认值
-                        <el-tooltip
-                          class="item"
-                          effect="dark"
-                          content="不设置默认值时,默认为当前行的该字段"
-                          placement="top-start"
-                        >
-                          <i class="el-icon-info"></i>
-                        </el-tooltip>
-                      </template>
-                      <template slot-scope="scope">
-                        <!-- <el-button
+                        </el-option>
+                      </el-select>
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                    prop="flagValue"
+                    label="默认值"
+                    width="150"
+                    align="center"
+                  >
+                    <template slot="header" slot-scope="">
+                      默认值
+                      <el-tooltip
+                        class="item"
+                        effect="dark"
+                        content="不设置默认值时,默认为当前行的该字段"
+                        placement="top-start"
+                      >
+                        <i class="el-icon-info"></i>
+                      </el-tooltip>
+                    </template>
+                    <template slot-scope="scope">
+                      <!-- <el-button
                           type="info"
                           size="small"
                           icon="el-icon-edit"
                           @click="editFlagHandler(scope.row, scope.$index)"
                         >
                         </el-button> -->
-                        <el-input
-                          v-model="scope.row.fieldValue"
-                          placeholder="请输入默认值"
-                          size="normal"
-                          clearable
-                        >
-                        </el-input>
-                      </template>
-                    </el-table-column>
-                    <el-table-column label="操作" align="center">
-                      <template slot-scope="scope">
-                        <el-button
-                          size="mini"
-                          type="danger"
-                          icon="el-icon-delete"
-                          @click="deleteFilterItem(scope.$index)"
-                          >删除
-                        </el-button>
-                      </template>
-                    </el-table-column>
-                  </el-table>
-                  <el-button
-                    type="primary"
-                    class="inline-large-button mb10"
-                    icon="el-icon-plus"
-                    size="mini"
-                    style="width: 100%"
-                    @click="addFilterHandler"
-                  >
-                    添加条件
-                  </el-button>
-                </div>
-              </el-form-item>
+                      <el-input
+                        v-model="scope.row.fieldValue"
+                        placeholder="请输入默认值"
+                        size="normal"
+                        clearable
+                      >
+                      </el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="操作" align="center">
+                    <template slot-scope="scope">
+                      <el-button
+                        size="mini"
+                        type="danger"
+                        icon="el-icon-delete"
+                        @click="deleteFilterItem(scope.$index)"
+                        >删除
+                      </el-button>
+                    </template>
+                  </el-table-column>
+                </el-table>
+                <el-button
+                  type="primary"
+                  class="inline-large-button mb10"
+                  icon="el-icon-plus"
+                  size="mini"
+                  style="width: 100%"
+                  @click="addFilterHandler"
+                >
+                  添加参数
+                </el-button>
+              </div>
+              <!-- </el-form-item> -->
             </el-col>
           </div>
         </el-row>
@@ -620,18 +672,38 @@ export default {
       scriptOptions: [],
       // 普遍字段参数
       commonFieldData: [
-        {
-          fieldName: "",
-          fieldValue: "",
-        },
+        // {
+        //   fieldName: "",
+        //   fieldValue: "",
+        // },
       ],
       rootFieldInfo: {
         tableName: "",
         fieldList: [],
       },
+      queryTableData: [
+        {
+          key: "",
+          value: "",
+        },
+      ],
+      columns: [
+        {
+          label: "参数名",
+          prop: "key",
+        },
+        {
+          label: "值",
+          prop: "value",
+        },
+      ],
     };
   },
-  created() {
+  // created() {
+  //   this.getList();
+  //   this.initFormSubData();
+  // },
+  mounted() {
     this.getList();
     this.initFormSubData();
   },
@@ -640,8 +712,16 @@ export default {
     deleteFilterItem(index) {
       this.commonFieldData.splice(index, 1);
     },
+    // 删除query参数
+    deleteQueryItem(index) {
+      this.queryTableData.splice(index, index);
+    },
     // 添加公共传参
     addFilterHandler() {
+      if (this.rootFieldInfo.fieldList.length == 0) {
+        this.$message.error("请先将按钮组绑定给表格");
+        return;
+      }
       this.commonFieldData.push({
         fieldName: "",
         fieldValue: "",
@@ -794,21 +874,19 @@ export default {
     },
     /** 新增按钮操作 */
     async handleAdd(row) {
-      this.title = "新增按钮";
       this.reset();
       this.getTreeselect();
-
       this.editType = row ? true : false;
       if (row != null && row.id) {
         //在已知节点下新增
         await this.getRootFieldInfo(row.rootKey);
         this.btnGroupFormData.btnParentId = row.id;
+        this.title = "新增按钮";
       } else {
         this.btnGroupFormData.btnParentId = 0;
+        this.title = "添加按钮组";
       }
-      console.log(this.btnGroupFormData.btnParentId);
       this.open = true;
-      this.title = "添加按钮组";
     },
     /** 展开/折叠操作 */
     toggleExpandAll() {
@@ -826,9 +904,18 @@ export default {
       //在已知节点下新增
       await this.getRootFieldInfo(row.rootKey);
       getBtn(row.id).then((response) => {
+        let { btnType, btnParams } = response.data;
+        if (btnType == 3 || btnType == 7) {
+          //内链或外链
+          let tempObj = JSON.parse(btnParams);
+          response.data.btnParams = tempObj.url;
+          this.commonFieldData = JSON.parse(tempObj.commonFieldData) || [];
+        } else {
+          this.commonFieldData = JSON.parse(btnParams) || [];
+        }
         this.btnGroupFormData = response.data;
         this.open = true;
-        this.title = "修改菜单";
+        this.title = "修改按钮";
       });
     },
     // 校验复杂逻辑表单数据
@@ -867,6 +954,11 @@ export default {
             this.btnGroupFormData.btnParams = JSON.stringify(
               this.commonFieldData
             );
+          } else {
+            let tempObj = {};
+            tempObj.url = this.btnGroupFormData.btnParams;
+            tempObj.commonFieldData = JSON.stringify(this.commonFieldData);
+            this.btnGroupFormData.btnParams = JSON.stringify(tempObj);
           }
           if (this.editType) {
             // 新增按钮组
@@ -942,7 +1034,9 @@ export default {
         } else {
           this.$message.error("网络异常请稍后再试");
         }
-      } catch (error) {}
+      } catch (error) {
+        console.log(error);
+      }
     },
     // 添加按钮条件
     addConditionHandler() {
@@ -970,4 +1064,13 @@ export default {
   flex-direction: column;
   align-items: center;
 }
+.table-wrap {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.title {
+  font-weight: 600;
+}
 </style>

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

@@ -1072,11 +1072,27 @@ export default {
 
     // 内链页面跳转
     routerHandler(btnData, type) {
-      let link = btnData.btnParams;
+      let { url, commonFieldData } = JSON.parse(btnData.btnParams);
+      let tempArr = [];
+      if (commonFieldData) {
+        let queryArr = JSON.parse(commonFieldData);
+
+        tempArr = queryArr.map((item) => {
+          let key = this.formatField(item.fieldName, camelCase(this.tableName));
+          let value = item.fieldValue
+            ? item.fieldValue
+            : this.currentRow[item.fieldName];
+          return key + "=" + value;
+        });
+      }
+      if (tempArr.length) {
+        url += "?" + tempArr.join("&");
+      }
+      // let link = btnData.btnParams;
       if (type == "3") {
-        this.$router.push(link);
+        this.$router.push(url);
       } else {
-        window.open("http://" + link, "_blank");
+        window.open("http://" + url, "_blank");
       }
     },