zhengnaiwen_citu 6 meses atrás
pai
commit
067b818230

+ 21 - 0
src/api/workflow.js

@@ -0,0 +1,21 @@
+import http from '@/utils/request'
+
+// 工作流 列表查询
+export function getWorkflowList (data) {
+  return http.post('/work/flow/tmplate/page', data)
+}
+
+// 工作流 工作流可选功能地址
+export function getWorkflowFun () {
+  return http.post('/work/flow/tmplate/fun')
+}
+
+// 工作流 工作流模版保存
+export function saveWorkflow (data) {
+  return http.post('/work/flow/tmplate/save', data)
+}
+
+// 工作流 工作流模版详情
+export function getWorkflow (data) {
+  return http.post('/work/flow/tmplate/detail', data)
+}

+ 17 - 1
src/components/AutoComponents/MTable/index.vue

@@ -8,7 +8,8 @@
       ref="table"
       :data="items"
       v-bind="$attrs"
-      v-on="$listeners"
+      v-on="listens"
+      @sort-change="onSortChange"
     >
       <template #append>
         <slot name="table-append"></slot>
@@ -70,9 +71,24 @@ export default {
       default: 0
     }
   },
+  computed: {
+    listens () {
+      const { 'sort-change': sortChange, ..._listeners } = this.$listeners
+      return _listeners
+    }
+  },
   methods: {
     handleCurrentChange (val) {
       this.$emit('page-change', val)
+    },
+    onSortChange (e) {
+      if (!e.order) {
+        this.$emit('sort-change', [])
+        return
+      }
+      this.$emit('sort-change', [
+        { column: e.prop, asc: e.order === 'ascending' }
+      ])
     }
   }
 }

+ 139 - 0
src/views/system/workflowM/index.vue

@@ -0,0 +1,139 @@
+<template>
+  <div class="pa-3 white">
+    <m-search class="mb-3" :items="searchItems" v-model="searchValue" @search="search">
+      <template #button>
+        <m-button type="orange" icon="el-icon-plus" @click="onAdd">新增</m-button>
+      </template>
+    </m-search>
+    <m-table
+      v-loading="loading"
+      :headers="headers"
+      :items="items"
+      :total="total"
+      @page-change="paginationChange"
+      @sort-change="onSortChange"
+    >
+      <template #actions="{ row }">
+        <m-button type="primary" text @click="getDetails(row, 'workflowEditRefs')">编辑</m-button>
+        <m-button type="primary" text @click="getDetails(row, 'workflowApprovedRefs')">审批配置</m-button>
+        <m-button type="danger" text @click="onDelete(row)">删除</m-button>
+      </template>
+    </m-table>
+    <WorkflowEdit ref="workflowEditRefs" @refresh="onInit"></WorkflowEdit>
+  </div>
+</template>
+
+<script>
+import {
+  getWorkflowList,
+  getWorkflow
+} from '@/api/workflow'
+import WorkflowEdit from './workflowEdit'
+export default {
+  name: 'WorkFlow',
+  components: {
+    WorkflowEdit
+  },
+  data () {
+    return {
+      searchItems: [
+        {
+          prop: 'name',
+          label: '名称',
+          type: 'input',
+          options: {
+            placeholder: '请输入工作流名称'
+          }
+        },
+        {
+          prop: 'status',
+          label: '状态',
+          type: 'select',
+          options: {
+            placeholder: '请选择状态',
+            items: [
+              { label: '启用', value: 0 },
+              { label: '禁用', value: 1 }
+            ]
+          }
+        }
+      ],
+      searchValue: {
+        name: null,
+        status: null
+      },
+      headers: [
+        { label: '工作流名称', prop: 'name', sortable: 'custom' },
+        { label: '功能地址', prop: 'funUrl', sortable: 'custom' },
+        { label: '状态', prop: 'status', sortable: 'custom' },
+        { label: '版本', prop: 'version', sortable: 'custom' },
+        { label: '创建时间', prop: 'createDate', sortable: 'custom' },
+        { label: '操作', prop: 'actions' }
+      ],
+      items: [],
+      pageInfo: {
+        size: 10,
+        current: 1
+      },
+      orders: [],
+      loading: false,
+      total: 0
+    }
+  },
+  created () {
+    this.onInit()
+  },
+  methods: {
+    async onInit () {
+      this.loading = true
+      try {
+        const { data } = await getWorkflowList({
+          page: {
+            ...this.pageInfo,
+            orders: this.orders
+          },
+          entity: {
+            ...this.searchValue
+          }
+        })
+        this.items = data.records
+        this.total = data.total
+      } catch (error) {
+        this.$message.error(error)
+      } finally {
+        this.loading = false
+      }
+    },
+    onAdd () {
+      this.$refs.workflowEditRefs.open()
+    },
+    search () {
+      this.pageInfo.current = 1
+      this.onInit()
+    },
+    async getDetails (row, ref) {
+      this.loading = true
+      try {
+        const { data } = await getWorkflow({ workFlowTmplateId: row.workFlowTmplateId })
+        this.$refs[ref].open(data)
+      } catch (error) {
+        this.$message.error(error)
+      } finally {
+        this.loading = false
+      }
+    },
+    onDelete () {},
+    paginationChange (page) {
+      this.searchValue.page = page
+      this.search()
+    },
+    onSortChange (e) {
+      console.log(e)
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 1 - 1
src/views/system/workFlow/index.vue → src/views/system/workflowM/workflowApproved.vue

@@ -6,7 +6,7 @@
 
 <script>
 export default {
-  name: 'WorkFlow'
+  name: 'workflowApproved'
 }
 </script>
 

+ 129 - 0
src/views/system/workflowM/workflowEdit.vue

@@ -0,0 +1,129 @@
+<template>
+  <m-dialog :title="item ? '编辑工作流' : '新增工作流'" ref="dialog" @sure="onSure">
+    <m-form ref="form" :items="formItems" v-model="formValues"></m-form>
+  </m-dialog>
+</template>
+
+<script>
+import {
+  getWorkflowFun,
+  saveWorkflow
+} from '@/api/workflow'
+export default {
+  name: 'workFlowEdit',
+  data () {
+    return {
+      item: null,
+      funItems: [],
+      formValues: {
+        name: null,
+        funUrl: null,
+        status: 0
+      }
+    }
+  },
+  computed: {
+    formItems () {
+      return [
+        {
+          label: '工作流名称',
+          prop: 'name',
+          type: 'input',
+          rules: [
+            { required: true, message: '请输入工作流名称', trigger: 'blur' }
+          ],
+          options: {
+            placeholder: '请输入工作流名称'
+          }
+        },
+        {
+          label: '功能地址',
+          prop: 'funUrl',
+          type: 'select',
+          rules: [
+            { required: true, message: '请选择功能地址', trigger: 'blur' }
+          ],
+          options: {
+            placeholder: '请输入功能地址',
+            items: this.funItems
+          }
+        },
+        {
+          label: '工作流状态',
+          prop: 'status',
+          type: 'radioGroup',
+          options: {
+            items: [
+              { text: '启用', label: 0 },
+              { text: '禁用', label: 1 }
+            ]
+          }
+        }
+      ]
+    }
+  },
+  methods: {
+    open (item) {
+      this.getItems()
+      if (!item) {
+        this.item = null
+        this.formValues = {
+          name: null,
+          funUrl: null,
+          status: 0
+        }
+      } else {
+        const { workFlowTmplate, workFlowTmplateItems } = item
+        this.item = {
+          ...workFlowTmplate,
+          workFlowTmplateItems
+        }
+        this.formValues = {
+          name: this.item.name,
+          funUrl: this.item.funUrl,
+          status: this.item.status
+        }
+      }
+      this.$refs.dialog.open()
+    },
+    async getItems () {
+      try {
+        const { data } = await getWorkflowFun()
+        this.funItems = data.map(e => {
+          return {
+            label: e.funName,
+            value: e.funUrl
+          }
+        })
+      } catch (error) {
+        this.$message.error(error)
+      }
+    },
+    onSure () {
+      this.$refs.form.validate(async valid => {
+        if (!valid) {
+          return
+        }
+        try {
+          await saveWorkflow({
+            workFlowTmplate: {
+              ...this.formValues,
+              workFlowTmplateId: this.item ? this.item.workFlowTmplateId : undefined
+            },
+            workFlowTmplateItems: this.item ? this.item.workFlowTmplateItems : []
+          })
+          this.$message.success(this.item ? '保存成功' : '新增成功')
+          this.$refs.dialog.close()
+          this.$emit('refresh')
+        } catch (error) {
+          this.$message.error(error)
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>