mirror of
https://gitee.com/xiangheng/x_admin.git
synced 2025-12-24 08:12:55 +08:00
完善我的申请
This commit is contained in:
@@ -38,3 +38,6 @@ export function flow_history_next_node(params: Record<string, any>) {
|
||||
export function flow_history_get_approver(params: Record<string, any>) {
|
||||
return request.post({ url: '/flow_history/get_approver', params })
|
||||
}
|
||||
export function flow_history_pass(params: Record<string, any>) {
|
||||
return request.post({ url: '/flow_history/pass', params })
|
||||
}
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
</v-form-render>
|
||||
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="getData"> 确定 </el-button>
|
||||
</span>
|
||||
<el-button @click="dialogVisible = false">关闭</el-button>
|
||||
<el-button v-if="rowDetails.status == 1" type="primary" @click="getData">
|
||||
确定
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
@@ -36,7 +36,7 @@ const optionData = reactive({})
|
||||
const vFormRef = ref(null)
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
const rowId = ref(0)
|
||||
const rowDetails = ref({})
|
||||
|
||||
const props = defineProps({
|
||||
save: {
|
||||
@@ -44,8 +44,8 @@ const props = defineProps({
|
||||
default: () => {}
|
||||
}
|
||||
})
|
||||
function open(id, form_json, form_data) {
|
||||
rowId.value = id
|
||||
function open(row, form_json, form_data) {
|
||||
rowDetails.value = row
|
||||
formData.value = form_data
|
||||
formJson.value = form_json
|
||||
console.log('open')
|
||||
@@ -53,7 +53,7 @@ function open(id, form_json, form_data) {
|
||||
}
|
||||
function closeFn() {
|
||||
dialogVisible.value = false
|
||||
rowId.value = 0
|
||||
rowDetails.value = {}
|
||||
formData.value = {}
|
||||
formJson.value = {}
|
||||
}
|
||||
@@ -61,7 +61,7 @@ function getData() {
|
||||
vFormRef.value.getFormData().then((formData) => {
|
||||
console.log('formData', formData)
|
||||
props
|
||||
.save(rowId.value, formData)
|
||||
.save(rowDetails.value?.id, formData)
|
||||
.then(() => {
|
||||
closeFn()
|
||||
})
|
||||
@@ -78,4 +78,7 @@ defineExpose({
|
||||
// body {
|
||||
// margin: 0; /* 如果页面出现垂直滚动条,则加入此行CSS以消除之 */
|
||||
// }
|
||||
.el-range-editor.el-input__wrapper {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,132 +1,147 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
:show-close="false"
|
||||
:show-close="true"
|
||||
:fullscreen="false"
|
||||
:close-on-click-modal="false"
|
||||
:close-on-press-escape="false"
|
||||
:destroy-on-close="true"
|
||||
title="审批"
|
||||
top="1px"
|
||||
>
|
||||
<div v-for="node of next_nodes" :key="node.id">
|
||||
{{ node.label }}
|
||||
<el-select
|
||||
class="flex-1"
|
||||
v-if="node.type == 'bpmn:userTask'"
|
||||
v-model="node.applyUserId"
|
||||
placeholder="请选择审批人"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in node.approver"
|
||||
:key="index"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
clearable
|
||||
/>
|
||||
</el-select>
|
||||
</div>
|
||||
<el-form ref="formRef" :model="formData" label-width="84px" :rules="formRules">
|
||||
<el-form-item label="审批节点" prop="flowName">
|
||||
<el-input v-model="formData.flowName" placeholder="请输入流程名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批人" prop="applyUserId">
|
||||
<!-- <el-select
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
label-position="top"
|
||||
label-width="110px"
|
||||
:rules="formRules"
|
||||
>
|
||||
<!-- {{ userTask }} -->
|
||||
<el-form-item v-if="userTask" :label="`${userTask?.label}节点审批人`" prop="templateId">
|
||||
<el-select
|
||||
class="flex-1"
|
||||
v-if="approver.length"
|
||||
v-model="formData.applyUserId"
|
||||
placeholder="请选择审批人"
|
||||
@change="handleTemplateChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in flow_template"
|
||||
v-for="(item, index) in approver"
|
||||
:key="index"
|
||||
:label="item.flowName"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
clearable
|
||||
/>
|
||||
</el-select> -->
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批意见" prop="passRemark">
|
||||
<el-input
|
||||
v-model="formData.passRemark"
|
||||
:rows="2"
|
||||
type="textarea"
|
||||
placeholder="请输入审批意见"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- <el-steps direction="horizontal" :active="next_nodes.length">
|
||||
<el-step :title="node.label" v-for="node of next_nodes" :key="node.id" />
|
||||
</el-steps> -->
|
||||
|
||||
<template #footer>
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="getData"> 确定 </el-button>
|
||||
<el-button @click="dialogVisible = false">关闭</el-button>
|
||||
<el-button type="primary" @click="getData"> 通过 </el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
import { flow_history_next_node, flow_history_get_approver } from '@/api/flow_history'
|
||||
|
||||
const formRef = ref(null)
|
||||
import feedback from '@/utils/feedback'
|
||||
import {
|
||||
flow_history_next_node,
|
||||
flow_history_get_approver,
|
||||
flow_history_pass
|
||||
} from '@/api/flow_history'
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
|
||||
const props = defineProps({
|
||||
save: {
|
||||
type: Function,
|
||||
default: () => {}
|
||||
}
|
||||
})
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
templateId: '',
|
||||
// applyUserId: '',
|
||||
// applyUserNickname: '',
|
||||
flowName: '',
|
||||
flowGroup: '',
|
||||
flowRemark: '',
|
||||
flowFormData: '',
|
||||
flowProcessData: '',
|
||||
status: 0,
|
||||
formValue: ''
|
||||
})
|
||||
// const props = defineProps({
|
||||
// save: {
|
||||
// type: Function,
|
||||
// default: () => {}
|
||||
// }
|
||||
// })
|
||||
|
||||
class formDataState {
|
||||
id = ''
|
||||
passRemark = ''
|
||||
applyUserId = ''
|
||||
}
|
||||
const formData = reactive(new formDataState())
|
||||
const next_nodes = ref([])
|
||||
const userTask = computed(() => {
|
||||
return next_nodes.value.find((item) => item.type == 'bpmn:userTask')
|
||||
})
|
||||
const approver = ref([])
|
||||
const formRules = {
|
||||
id: [
|
||||
applyUserId: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入',
|
||||
message: '请选择',
|
||||
trigger: ['blur']
|
||||
}
|
||||
]
|
||||
}
|
||||
function open(row) {
|
||||
console.log('open')
|
||||
formData.value = row
|
||||
formData.id = row.id
|
||||
dialogVisible.value = true
|
||||
|
||||
flow_history_next_node({
|
||||
applyId: row.id,
|
||||
nodeId: ''
|
||||
currentNodeId: ''
|
||||
}).then((res) => {
|
||||
console.log('res', res)
|
||||
next_nodes.value = res
|
||||
|
||||
res.map((item) => {
|
||||
if (item.type == 'bpmn:userTask') {
|
||||
flow_history_get_approver(item).then((approver) => {
|
||||
console.log('approver', approver)
|
||||
item.approver = approver
|
||||
flow_history_get_approver(item).then((user) => {
|
||||
console.log('user', user)
|
||||
approver.value = user
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
function closeFn() {
|
||||
function BeforeClose() {
|
||||
dialogVisible.value = false
|
||||
|
||||
formData.value = {}
|
||||
// formData = {}
|
||||
}
|
||||
function getData() {
|
||||
formRef.value.getFormData().then((formData) => {
|
||||
console.log('formData', formData)
|
||||
props
|
||||
.save(formData)
|
||||
.then(() => {
|
||||
closeFn()
|
||||
})
|
||||
.catch(() => {})
|
||||
console.log('getData', next_nodes)
|
||||
|
||||
if (!formData.applyUserId) {
|
||||
feedback.msgWarning('请选择审批人')
|
||||
return
|
||||
}
|
||||
flow_history_pass({
|
||||
applyId: formData.id,
|
||||
currentNodeId: '',
|
||||
nextNodeAdminId: formData.applyUserId,
|
||||
passRemark: formData.passRemark
|
||||
}).then(() => {
|
||||
BeforeClose()
|
||||
})
|
||||
// formRef.value.getFormData().then((formData) => {
|
||||
// console.log('formData', formData)
|
||||
// props
|
||||
// .save(formData)
|
||||
// .then(() => {
|
||||
// BeforeClose()
|
||||
// })
|
||||
// .catch(() => {})
|
||||
// })
|
||||
}
|
||||
defineExpose({
|
||||
getData,
|
||||
|
||||
@@ -36,22 +36,7 @@
|
||||
<el-form-item label="流程描述" prop="flowRemark">
|
||||
<el-input v-model="formData.flowRemark" placeholder="请输入流程描述" />
|
||||
</el-form-item>
|
||||
<el-form-item label="表单配置" prop="flowFormData">
|
||||
<el-input
|
||||
v-model="formData.flowFormData"
|
||||
placeholder="请输入表单配置"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 4, maxRows: 6 }"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="流程配置" prop="flowProcessData">
|
||||
<el-input
|
||||
v-model="formData.flowProcessData"
|
||||
placeholder="请输入流程配置"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 4, maxRows: 6 }"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="formValue" prop="formValue">
|
||||
<el-input
|
||||
v-model="formData.formValue"
|
||||
|
||||
@@ -3,25 +3,25 @@
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
|
||||
<el-form-item label="模板" prop="templateId">
|
||||
<el-input class="w-[280px]" v-model="queryParams.templateId" />
|
||||
<el-input v-model="queryParams.templateId" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申请人id" prop="applyUserId">
|
||||
<el-input class="w-[280px]" v-model="queryParams.applyUserId" />
|
||||
<!-- <el-form-item label="申请人id" prop="applyUserId">
|
||||
<el-input v-model="queryParams.applyUserId" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申请人昵称" prop="applyUserNickname">
|
||||
<el-input class="w-[280px]" v-model="queryParams.applyUserNickname" />
|
||||
</el-form-item>
|
||||
<el-input v-model="queryParams.applyUserNickname" />
|
||||
</el-form-item> -->
|
||||
<el-form-item label="流程名称" prop="flowName">
|
||||
<el-input class="w-[280px]" v-model="queryParams.flowName" />
|
||||
<el-input v-model="queryParams.flowName" />
|
||||
</el-form-item>
|
||||
<el-form-item label="流程分类" prop="flowGroup">
|
||||
<el-input class="w-[280px]" v-model="queryParams.flowGroup" />
|
||||
<el-input v-model="queryParams.flowGroup" />
|
||||
</el-form-item>
|
||||
<el-form-item label="流程描述" prop="flowRemark">
|
||||
<el-input class="w-[280px]" v-model="queryParams.flowRemark" />
|
||||
<el-input v-model="queryParams.flowRemark" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态:0待提交,1审批中,2审批完成,3审批失败" prop="status">
|
||||
<el-select v-model="queryParams.status" class="w-[280px]" clearable>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" clearable>
|
||||
<el-option label="全部" value="" />
|
||||
<el-option
|
||||
v-for="(item, index) in dictData.flow_apply_status"
|
||||
@@ -47,21 +47,19 @@
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table class="mt-4" size="large" v-loading="pager.loading" :data="pager.lists">
|
||||
<el-table-column label="模板" prop="templateId" min-width="100" />
|
||||
<el-table-column label="申请人id" prop="applyUserId" min-width="100" />
|
||||
<el-table-column label="申请人昵称" prop="applyUserNickname" min-width="100" />
|
||||
<el-table-column label="流程名称" prop="flowName" min-width="100" />
|
||||
<el-table-column label="流程分类" prop="flowGroup" min-width="100" />
|
||||
<el-table-column label="流程描述" prop="flowRemark" min-width="100" />
|
||||
<el-table-column label="formValue" prop="formValue" min-width="100" />
|
||||
<!-- <el-table-column label="formValue" prop="formValue" min-width="100" /> -->
|
||||
|
||||
<el-table-column label="状态" prop="status" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.flow_apply_status" :value="row.status" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" prop="updateTime" min-width="100" />
|
||||
<el-table-column label="创建时间" prop="createTime" min-width="100" />
|
||||
<el-table-column label="更新时间" prop="updateTime" min-width="130" />
|
||||
<el-table-column label="创建时间" prop="createTime" min-width="130" />
|
||||
<el-table-column label="操作" width="260" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
@@ -70,9 +68,10 @@
|
||||
link
|
||||
@click="OpenViewForm(row)"
|
||||
>
|
||||
编辑表单
|
||||
{{ row.status == 1 ? '编辑表单' : '预览' }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.status == 1 && row.formValue"
|
||||
v-perms="['flow_apply:edit']"
|
||||
type="primary"
|
||||
link
|
||||
@@ -81,14 +80,14 @@
|
||||
提交申请
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
<!-- <el-button
|
||||
v-perms="['flow_apply:edit']"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
</el-button> -->
|
||||
<el-button
|
||||
v-perms="['flow_apply:del']"
|
||||
type="danger"
|
||||
@@ -112,7 +111,7 @@
|
||||
@close="showEdit = false"
|
||||
/>
|
||||
<ViewForm ref="viewFormRef" :save="SaveViewForm"></ViewForm>
|
||||
<ApplySubmit ref="ApplySubmitRef"></ApplySubmit>
|
||||
<ApplySubmit ref="ApplySubmitRef" @close="getLists"></ApplySubmit>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
@@ -125,6 +124,10 @@ import EditPopup from './edit.vue'
|
||||
import ApplySubmit from '@/views/flow_apply/components/apply_submit.vue'
|
||||
import ViewForm from '@/components/flow/XForm/view.vue'
|
||||
|
||||
import useUserStore from '@/stores/modules/user'
|
||||
|
||||
const userStore = useUserStore()
|
||||
|
||||
defineOptions({
|
||||
name: 'flow_apply'
|
||||
})
|
||||
@@ -134,7 +137,7 @@ const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
const showEdit = ref(false)
|
||||
const queryParams = reactive({
|
||||
templateId: '',
|
||||
applyUserId: '',
|
||||
applyUserId: userStore.userInfo?.id,
|
||||
applyUserNickname: '',
|
||||
flowName: '',
|
||||
flowGroup: '',
|
||||
@@ -158,12 +161,12 @@ const handleAdd = async () => {
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
const handleEdit = async (data: any) => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.getDetail(data)
|
||||
}
|
||||
// const handleEdit = async (data: any) => {
|
||||
// showEdit.value = true
|
||||
// await nextTick()
|
||||
// editRef.value?.open('edit')
|
||||
// editRef.value?.getDetail(data)
|
||||
// }
|
||||
|
||||
const handleDelete = async (id: number) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
@@ -187,7 +190,7 @@ const OpenViewForm = async (data: any) => {
|
||||
}
|
||||
console.log(data, form_data, form_json)
|
||||
|
||||
viewFormRef.value?.open(data.id, form_json, form_data)
|
||||
viewFormRef.value?.open(data, form_json, form_data)
|
||||
}
|
||||
const OpenApplySubmit = async (data: any) => {
|
||||
console.log('OpenApplySubmit')
|
||||
@@ -203,6 +206,11 @@ const SaveViewForm = (id, form_data) => {
|
||||
.then(() => {
|
||||
feedback.msgSuccess('保存成功')
|
||||
getLists()
|
||||
|
||||
const row = pager.lists.find((item) => item.id === id)
|
||||
|
||||
ApplySubmitRef.value?.open(row)
|
||||
|
||||
resolve(true)
|
||||
})
|
||||
.catch((err) => {
|
||||
|
||||
1
admin/src/views/flow_history/done.vue
Normal file
1
admin/src/views/flow_history/done.vue
Normal file
@@ -0,0 +1 @@
|
||||
<!-- 已完成审批 -->
|
||||
@@ -5,25 +5,18 @@
|
||||
<el-form-item label="申请id" prop="applyId">
|
||||
<el-input class="w-[280px]" v-model="queryParams.applyId" />
|
||||
</el-form-item>
|
||||
<el-form-item label="模板id" prop="templateId">
|
||||
<el-input class="w-[280px]" v-model="queryParams.templateId" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申请人id" prop="applyUserId">
|
||||
<el-input class="w-[280px]" v-model="queryParams.applyUserId" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="申请人昵称" prop="applyUserNickname">
|
||||
<el-input class="w-[280px]" v-model="queryParams.applyUserNickname" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批人id" prop="approverId">
|
||||
<el-input class="w-[280px]" v-model="queryParams.approverId" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="审批用户昵称" prop="approverNickname">
|
||||
<el-input class="w-[280px]" v-model="queryParams.approverNickname" />
|
||||
</el-form-item>
|
||||
<el-form-item label="节点" prop="nodeId">
|
||||
<el-input class="w-[280px]" v-model="queryParams.nodeId" />
|
||||
</el-form-item>
|
||||
<el-form-item label="通过状态:0待处理,1通过,2拒绝" prop="passStatus">
|
||||
<el-form-item label="通过状态" prop="passStatus">
|
||||
<el-select v-model="queryParams.passStatus" class="w-[280px]" clearable>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
@@ -56,7 +49,7 @@
|
||||
<el-table-column label="节点" prop="nodeId" min-width="100" />
|
||||
<el-table-column label="表单值" prop="formValue" min-width="100" />
|
||||
<el-table-column
|
||||
label="通过状态:0待处理,1通过,2拒绝"
|
||||
label="通过状态:1待处理,2通过,3拒绝"
|
||||
prop="passStatus"
|
||||
min-width="100"
|
||||
/>
|
||||
|
||||
138
admin/src/views/flow_history/todo.vue
Normal file
138
admin/src/views/flow_history/todo.vue
Normal file
@@ -0,0 +1,138 @@
|
||||
<!-- 代办 -->
|
||||
<template>
|
||||
<div class="index-lists">
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
|
||||
<el-form-item label="申请id" prop="applyId">
|
||||
<el-input class="w-[280px]" v-model="queryParams.applyId" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="申请人昵称" prop="applyUserNickname">
|
||||
<el-input class="w-[280px]" v-model="queryParams.applyUserNickname" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="审批用户昵称" prop="approverNickname">
|
||||
<el-input class="w-[280px]" v-model="queryParams.approverNickname" />
|
||||
</el-form-item>
|
||||
<el-form-item label="节点" prop="nodeId">
|
||||
<el-input class="w-[280px]" v-model="queryParams.nodeId" />
|
||||
</el-form-item>
|
||||
<el-form-item label="通过状态" prop="passStatus">
|
||||
<el-select v-model="queryParams.passStatus" class="w-[280px]" clearable>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="通过备注" prop="passRemark">
|
||||
<el-input class="w-[280px]" v-model="queryParams.passRemark" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div>
|
||||
<el-button v-perms="['flow_history:add']" type="primary" @click="handleAdd()">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table class="mt-4" size="large" v-loading="pager.loading" :data="pager.lists">
|
||||
<el-table-column label="申请人昵称" prop="applyUserNickname" min-width="100" />
|
||||
<el-table-column label="审批人id" prop="approverId" min-width="100" />
|
||||
<el-table-column label="审批用户昵称" prop="approverNickname" min-width="100" />
|
||||
<el-table-column label="节点" prop="nodeId" min-width="100" />
|
||||
<el-table-column label="表单值" prop="formValue" min-width="100" />
|
||||
<el-table-column
|
||||
label="通过状态:1待处理,2通过,3拒绝"
|
||||
prop="passStatus"
|
||||
min-width="100"
|
||||
/>
|
||||
<el-table-column label="通过备注" prop="passRemark" min-width="100" />
|
||||
<el-table-column label="更新时间" prop="updateTime" min-width="100" />
|
||||
<el-table-column label="创建时间" prop="createTime" min-width="100" />
|
||||
<el-table-column label="操作" width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
v-perms="['flow_history:edit']"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-perms="['flow_history:del']"
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row.id)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" />
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { flow_history_delete, flow_history_list } from '@/api/flow_history'
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import useUserStore from '@/stores/modules/user'
|
||||
|
||||
const userStore = useUserStore()
|
||||
|
||||
defineOptions({
|
||||
name: 'flow_history'
|
||||
})
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
const showEdit = ref(false)
|
||||
const queryParams = reactive({
|
||||
applyId: '',
|
||||
templateId: '',
|
||||
applyUserId: '',
|
||||
applyUserNickname: '',
|
||||
approverId: userStore?.userInfo?.id,
|
||||
approverNickname: '',
|
||||
nodeId: '',
|
||||
formValue: '',
|
||||
passStatus: 1,
|
||||
passRemark: ''
|
||||
})
|
||||
|
||||
const { pager, getLists, resetPage, resetParams } = usePaging({
|
||||
fetchFun: flow_history_list,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
const handleEdit = async (data: any) => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.getDetail(data)
|
||||
}
|
||||
|
||||
const handleDelete = async (id: number) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await flow_history_delete({ id })
|
||||
feedback.msgSuccess('删除成功')
|
||||
getLists()
|
||||
}
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
@@ -25,7 +25,7 @@ type FlowApplyHandler struct{}
|
||||
// @Param flowRemark query string false "流程描述"
|
||||
// @Param flowFormData query string false "表单配置"
|
||||
// @Param flowProcessData query string false "流程配置"
|
||||
// @Param status query int false "状态:0待提交,1审批中,2审批完成,3审批失败"
|
||||
// @Param status query int false "状态:1待提交,2审批中,3审批完成,4审批失败"
|
||||
// @Success 200 {object} []FlowApplyResp "成功"
|
||||
// @Failure 400 {object} string "请求错误"
|
||||
// @Router /api/flow_apply/list [get]
|
||||
@@ -70,7 +70,7 @@ func (hd FlowApplyHandler) Detail(c *gin.Context) {
|
||||
// @Param flowRemark body string false "流程描述"
|
||||
// @Param flowFormData body string false "表单配置"
|
||||
// @Param flowProcessData body string false "流程配置"
|
||||
// @Param status body int false "状态:0待提交,1审批中,2审批完成,3审批失败"
|
||||
// @Param status body int false "状态:1待提交,2审批中,3审批完成,4审批失败"
|
||||
// @Success 200 {object} response.RespType "成功"
|
||||
// @Router /api/flow_apply/add [post]
|
||||
func (hd FlowApplyHandler) Add(c *gin.Context) {
|
||||
@@ -83,6 +83,7 @@ func (hd FlowApplyHandler) Add(c *gin.Context) {
|
||||
var AdminId = config.AdminConfig.GetAdminId(c)
|
||||
addReq.ApplyUserNickname = Nickname
|
||||
addReq.ApplyUserId = int(AdminId)
|
||||
addReq.Status = 1
|
||||
|
||||
response.CheckAndResp(c, Service.Add(addReq))
|
||||
}
|
||||
@@ -100,7 +101,7 @@ func (hd FlowApplyHandler) Add(c *gin.Context) {
|
||||
// @Param flowRemark body string false "流程描述"
|
||||
// @Param flowFormData body string false "表单配置"
|
||||
// @Param flowProcessData body string false "流程配置"
|
||||
// @Param status body int false "状态:0待提交,1审批中,2审批完成,3审批失败"
|
||||
// @Param status body int false "状态:1待提交,2审批中,3审批完成,4审批失败"
|
||||
// @Success 200 {object} response.RespType "成功"
|
||||
// @Router /api/flow_apply/edit [post]
|
||||
func (hd FlowApplyHandler) Edit(c *gin.Context) {
|
||||
|
||||
@@ -14,7 +14,7 @@ type FlowApplyListReq struct {
|
||||
FlowProcessData string `form:"flowProcessData"` // 流程配置
|
||||
FlowProcessDataList string `form:"flowProcessDataList"` // 流程配置list数据
|
||||
FormValue string `form:"formValue"` // 表单值
|
||||
Status int `form:"status"` // 状态:0待提交,1审批中,2审批完成,3审批失败
|
||||
Status int `form:"status"` // 状态:1待提交,2审批中,3审批完成,4审批失败
|
||||
}
|
||||
|
||||
//FlowApplyDetailReq 申请流程详情参数
|
||||
@@ -34,7 +34,7 @@ type FlowApplyAddReq struct {
|
||||
// FlowProcessData string `form:"flowProcessData"` // 流程配置
|
||||
// FlowProcessDataList string `form:"flowProcessDataList"` // 流程配置list数据
|
||||
FormValue string `form:"formValue"` // 表单值
|
||||
Status int `form:"status"` // 状态:0待提交,1审批中,2审批完成,3审批失败
|
||||
Status int `form:"status"` // 状态:1待提交,2审批中,3审批完成,4审批失败
|
||||
}
|
||||
|
||||
//FlowApplyEditReq 申请流程新增参数
|
||||
@@ -50,7 +50,7 @@ type FlowApplyEditReq struct {
|
||||
// FlowProcessData string `form:"flowProcessData"` // 流程配置
|
||||
// FlowProcessDataList string `form:"flowProcessDataList"` // 流程配置list数据
|
||||
FormValue string `form:"formValue"` // 表单值
|
||||
Status int `form:"status"` // 状态:0待提交,1审批中,2审批完成,3审批失败
|
||||
Status int `form:"status"` // 状态:1待提交,2审批中,3审批完成,4审批失败
|
||||
}
|
||||
|
||||
//FlowApplyDelReq 申请流程新增参数
|
||||
@@ -71,7 +71,7 @@ type FlowApplyResp struct {
|
||||
FlowProcessData string `json:"flowProcessData" structs:"flowProcessData"` // 流程配置
|
||||
FlowProcessDataList string `json:"flowProcessDataList"` // 流程配置list数据
|
||||
FormValue string `json:"formValue"` // 表单值
|
||||
Status int `json:"status" structs:"status"` // 状态:0待提交,1审批中,2审批完成,3审批失败
|
||||
Status int `json:"status" structs:"status"` // 状态:1待提交,2审批中,3审批完成,4审批失败
|
||||
UpdateTime core.TsTime `json:"updateTime" structs:"updateTime"` // 更新时间
|
||||
CreateTime core.TsTime `json:"createTime" structs:"createTime"` // 创建时间
|
||||
}
|
||||
|
||||
@@ -33,7 +33,9 @@ type FlowHistoryHandler struct {
|
||||
// @Router /api/flow_history/list [get]
|
||||
func (hd FlowHistoryHandler) List(c *gin.Context) {
|
||||
var page request.PageReq
|
||||
var listReq FlowHistoryListReq
|
||||
var listReq = FlowHistoryListReq{
|
||||
PassStatus: -9999,
|
||||
}
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
|
||||
return
|
||||
}
|
||||
@@ -138,7 +140,14 @@ func (hd FlowHistoryHandler) Del(c *gin.Context) {
|
||||
// 提交申请
|
||||
//
|
||||
// @Router /api/flow_apply/SubmitApply [post]
|
||||
func (hd FlowHistoryHandler) SubmitApply(c *gin.Context) {
|
||||
func (hd FlowHistoryHandler) Pass(c *gin.Context) {
|
||||
var nextNode NextNodeReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &nextNode)) {
|
||||
return
|
||||
}
|
||||
err := Service.Pass(nextNode)
|
||||
response.CheckAndResp(c, err)
|
||||
|
||||
// 申请流程id,
|
||||
// var addReq FlowApplyAddReq
|
||||
// if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &addReq)) {
|
||||
@@ -165,7 +174,7 @@ func (hd FlowHistoryHandler) NextNode(c *gin.Context) {
|
||||
}
|
||||
|
||||
// response.CheckAndResp(c, Service.GetNextNode(nextNode))
|
||||
res, err := Service.GetNextNode(nextNode)
|
||||
res, _, err := Service.GetNextNode(nextNode)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ type FlowHistoryListReq struct {
|
||||
ApproverNickname string `form:"approverNickname"` // 审批用户昵称
|
||||
NodeId string `form:"nodeId"` // 节点
|
||||
FormValue string `form:"formValue"` // 表单值
|
||||
PassStatus int `form:"passStatus"` // 通过状态:0待处理,1通过,2拒绝
|
||||
PassStatus int `form:"passStatus"` // 通过状态:1待处理,2通过,3拒绝
|
||||
PassRemark string `form:"passRemark"` // 通过备注
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ type FlowHistoryAddReq struct {
|
||||
ApproverNickname string `form:"approverNickname"` // 审批用户昵称
|
||||
NodeId string `form:"nodeId"` // 节点
|
||||
FormValue string `form:"formValue"` // 表单值
|
||||
PassStatus int `form:"passStatus"` // 通过状态:0待处理,1通过,2拒绝
|
||||
PassStatus int `form:"passStatus"` // 通过状态:1待处理,2通过,3拒绝
|
||||
PassRemark string `form:"passRemark"` // 通过备注
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ type FlowHistoryEditReq struct {
|
||||
ApproverNickname string `form:"approverNickname"` // 审批用户昵称
|
||||
NodeId string `form:"nodeId"` // 节点
|
||||
FormValue string `form:"formValue"` // 表单值
|
||||
PassStatus int `form:"passStatus"` // 通过状态:0待处理,1通过,2拒绝
|
||||
PassStatus int `form:"passStatus"` // 通过状态:1待处理,2通过,3拒绝
|
||||
PassRemark string `form:"passRemark"` // 通过备注
|
||||
}
|
||||
|
||||
@@ -66,16 +66,17 @@ type FlowHistoryResp struct {
|
||||
ApproverNickname string `json:"approverNickname" structs:"approverNickname"` // 审批用户昵称
|
||||
NodeId string `json:"nodeId" structs:"nodeId"` // 节点
|
||||
FormValue string `json:"formValue" structs:"formValue"` // 表单值
|
||||
PassStatus int `json:"passStatus" structs:"passStatus"` // 通过状态:0待处理,1通过,2拒绝
|
||||
PassStatus int `json:"passStatus" structs:"passStatus"` // 通过状态:1待处理,2通过,3拒绝
|
||||
PassRemark string `json:"passRemark" structs:"passRemark"` // 通过备注
|
||||
UpdateTime core.TsTime `json:"updateTime" structs:"updateTime"` // 更新时间
|
||||
CreateTime core.TsTime `json:"createTime" structs:"createTime"` // 创建时间
|
||||
}
|
||||
|
||||
type NextNodeReq struct {
|
||||
ApplyId int `form:"applyId"` // 申请id
|
||||
CurrentNodeId string `form:"nodeId"` // 流程里的节点id
|
||||
FormValue string `form:"formValue"`
|
||||
ApplyId int `form:"applyId"` // 申请id
|
||||
CurrentNodeId string `form:"currentNodeId"` // 流程里的节点id
|
||||
FormValue string `form:"formValue"`
|
||||
NextNodeAdminId int `form:"nextNodeAdminId"` // 下一个节点的审批用户id
|
||||
}
|
||||
type FlowTree struct {
|
||||
Id string `json:"id"`
|
||||
|
||||
@@ -184,18 +184,25 @@ func (Service flowHistoryService) GetApprover(node FlowTree) (res []admin.System
|
||||
adminTbName := core.DBTableName(&system_model.SystemAuthAdmin{})
|
||||
|
||||
adminModel := Service.db.Table(adminTbName+" AS admin").Where("admin.is_delete = ?", 0)
|
||||
if userId > 0 {
|
||||
adminModel.Or("admin.id =?", userId)
|
||||
}
|
||||
|
||||
dept := map[string]interface{}{}
|
||||
if deptId > 0 {
|
||||
adminModel.Or("admin.dept_id =?", deptId)
|
||||
dept["admin.dept_id"] = deptId
|
||||
// adminModel.Or("admin.dept_id =?", deptId)
|
||||
}
|
||||
if postId > 0 {
|
||||
adminModel.Or("admin.post_id =?", postId)
|
||||
dept["admin.post_id"] = postId
|
||||
// adminModel.Or("admin.post_id =?", postId)
|
||||
}
|
||||
|
||||
var where = Service.db.Where(dept)
|
||||
if userId > 0 {
|
||||
where.Or("admin.id =?", userId)
|
||||
}
|
||||
|
||||
// 数据
|
||||
var adminResp []admin.SystemAuthAdminResp
|
||||
err := adminModel.Find(&adminResp).Error
|
||||
err := adminModel.Where(where).Find(&adminResp).Error
|
||||
if e = response.CheckErr(err, "获取审批用户失败"); e != nil {
|
||||
return
|
||||
}
|
||||
@@ -208,10 +215,66 @@ func (Service flowHistoryService) GetApprover(node FlowTree) (res []admin.System
|
||||
return adminResp, nil
|
||||
}
|
||||
|
||||
func (Service flowHistoryService) Pass(nextNode NextNodeReq) (e error) {
|
||||
nextNodes, applyDetail, err := Service.GetNextNode(nextNode)
|
||||
|
||||
isEnd := false
|
||||
if err == nil {
|
||||
for _, v := range nextNodes {
|
||||
if v.Type == "bpmn:userTask" {
|
||||
var addReq = FlowHistoryAddReq{}
|
||||
addReq.ApplyId = nextNode.ApplyId
|
||||
addReq.FormValue = nextNode.FormValue
|
||||
addReq.NodeId = v.Id
|
||||
addReq.ApproverId = nextNode.NextNodeAdminId
|
||||
|
||||
// addReq.ApproverNickname = applyDetail.ApproverNickname
|
||||
|
||||
addReq.TemplateId = applyDetail.TemplateId
|
||||
addReq.ApplyUserId = applyDetail.ApplyUserId
|
||||
addReq.ApplyUserNickname = applyDetail.ApplyUserNickname
|
||||
addReq.PassStatus = 1
|
||||
err = Service.Add(addReq)
|
||||
} else if v.Type == "bpmn:endEvent" {
|
||||
isEnd = true
|
||||
var addReq = FlowHistoryAddReq{}
|
||||
addReq.ApplyId = nextNode.ApplyId
|
||||
addReq.FormValue = nextNode.FormValue
|
||||
addReq.NodeId = v.Id
|
||||
addReq.ApproverId = 0
|
||||
|
||||
// addReq.ApproverNickname = applyDetail.ApproverNickname
|
||||
|
||||
addReq.TemplateId = applyDetail.TemplateId
|
||||
addReq.ApplyUserId = applyDetail.ApplyUserId
|
||||
addReq.ApplyUserNickname = applyDetail.ApplyUserNickname
|
||||
addReq.PassStatus = 2
|
||||
err = Service.Add(addReq)
|
||||
}
|
||||
}
|
||||
}
|
||||
// 待提交或者有结束节点,修改申请状态
|
||||
if applyDetail.Status == 1 || isEnd {
|
||||
status := 2 //审批中
|
||||
if isEnd {
|
||||
status = 3 //审批通过
|
||||
}
|
||||
// 更改状态
|
||||
err = flow_apply.Service.Edit(flow_apply.FlowApplyEditReq{
|
||||
Id: nextNode.ApplyId,
|
||||
Status: status,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取下一批流程,直到审批或结束节点
|
||||
*/
|
||||
func (Service flowHistoryService) GetNextNode(nextNode NextNodeReq) (res []FlowTree, e error) {
|
||||
func (Service flowHistoryService) GetNextNode(nextNode NextNodeReq) (res []FlowTree, apply flow_apply.FlowApplyResp, e error) {
|
||||
var applyDetail, err = flow_apply.Service.Detail(nextNode.ApplyId)
|
||||
if e = response.CheckErr(err, "获取审批申请失败"); e != nil {
|
||||
return
|
||||
@@ -241,7 +304,7 @@ func (Service flowHistoryService) GetNextNode(nextNode NextNodeReq) (res []FlowT
|
||||
}
|
||||
var nextNodes []FlowTree
|
||||
res = DeepNextNode(nextNodes, &next, formValue)
|
||||
return res, e
|
||||
return res, applyDetail, e
|
||||
}
|
||||
|
||||
// 返回节点数组,最后一个节点为用户或结束节点
|
||||
|
||||
@@ -38,6 +38,7 @@ func FlowHistoryRoute(rg *gin.RouterGroup) {
|
||||
rg.POST("/flow_history/edit", handle.Edit)
|
||||
rg.POST("/flow_history/del", handle.Del)
|
||||
|
||||
rg.POST("/flow_history/pass", handle.Pass)
|
||||
rg.POST("/flow_history/next_node", handle.NextNode)
|
||||
rg.POST("/flow_history/get_approver", handle.GetApprover)
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ type FlowApply struct {
|
||||
FlowProcessData string `gorm:"comment:'流程配置'"` // 流程配置
|
||||
FlowProcessDataList string `gorm:"comment:'流程配置list数据'"` // 流程配置list数据
|
||||
FormValue string `gorm:"comment:'表单值'"` // 表单值
|
||||
Status int `gorm:"comment:'状态:0待提交,1审批中,2审批完成,3审批失败'"` // 状态:0待提交,1审批中,2审批完成,3审批失败
|
||||
Status int `gorm:"comment:'状态:1待提交,2审批中,3审批完成,4审批失败'"` // 状态:0待提交,1审批中,2审批完成,3审批失败
|
||||
UpdateTime int64 `gorm:"autoUpdateTime;comment:'更新时间'"` // 更新时间
|
||||
CreateTime int64 `gorm:"autoCreateTime;comment:'创建时间'"` // 创建时间
|
||||
DeleteTime int64 `gorm:"comment:'删除时间'"` // 删除时间
|
||||
|
||||
@@ -2,35 +2,32 @@ package model
|
||||
|
||||
//FlowHistory 流程历史实体
|
||||
type FlowHistory struct {
|
||||
|
||||
Id int `gorm:"primarykey;comment:'历史id'"` // 历史id
|
||||
|
||||
ApplyId int `gorm:"comment:'申请id'"` // 申请id
|
||||
|
||||
TemplateId int `gorm:"comment:'模板id'"` // 模板id
|
||||
|
||||
ApplyUserId int `gorm:"comment:'申请人id'"` // 申请人id
|
||||
|
||||
ApplyUserNickname string `gorm:"comment:'申请人昵称'"` // 申请人昵称
|
||||
|
||||
ApproverId int `gorm:"comment:'审批人id'"` // 审批人id
|
||||
|
||||
ApproverNickname string `gorm:"comment:'审批用户昵称'"` // 审批用户昵称
|
||||
|
||||
NodeId string `gorm:"comment:'节点'"` // 节点
|
||||
|
||||
FormValue string `gorm:"comment:'表单值'"` // 表单值
|
||||
|
||||
PassStatus int `gorm:"comment:'通过状态:0待处理,1通过,2拒绝'"` // 通过状态:0待处理,1通过,2拒绝
|
||||
|
||||
PassRemark string `gorm:"comment:'通过备注'"` // 通过备注
|
||||
|
||||
UpdateTime int64 `gorm:"autoUpdateTime;comment:'更新时间'"` // 更新时间
|
||||
|
||||
|
||||
CreateTime int64 `gorm:"autoCreateTime;comment:'创建时间'"` // 创建时间
|
||||
|
||||
|
||||
DeleteTime int64 `gorm:"comment:'删除时间'"` // 删除时间
|
||||
|
||||
Id int `gorm:"primarykey;comment:'历史id'"` // 历史id
|
||||
|
||||
ApplyId int `gorm:"comment:'申请id'"` // 申请id
|
||||
|
||||
TemplateId int `gorm:"comment:'模板id'"` // 模板id
|
||||
|
||||
ApplyUserId int `gorm:"comment:'申请人id'"` // 申请人id
|
||||
|
||||
ApplyUserNickname string `gorm:"comment:'申请人昵称'"` // 申请人昵称
|
||||
|
||||
ApproverId int `gorm:"comment:'审批人id'"` // 审批人id
|
||||
|
||||
ApproverNickname string `gorm:"comment:'审批用户昵称'"` // 审批用户昵称
|
||||
|
||||
NodeId string `gorm:"comment:'节点'"` // 节点
|
||||
|
||||
FormValue string `gorm:"comment:'表单值'"` // 表单值
|
||||
|
||||
PassStatus int `gorm:"comment:'通过状态:1待处理,2通过,3拒绝'"` // 通过状态:0待处理,1通过,2拒绝
|
||||
|
||||
PassRemark string `gorm:"comment:'通过备注'"` // 通过备注
|
||||
|
||||
UpdateTime int64 `gorm:"autoUpdateTime;comment:'更新时间'"` // 更新时间
|
||||
|
||||
CreateTime int64 `gorm:"autoCreateTime;comment:'创建时间'"` // 创建时间
|
||||
|
||||
DeleteTime int64 `gorm:"comment:'删除时间'"` // 删除时间
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user