完善我的申请

This commit is contained in:
xiangheng
2023-12-19 01:44:54 +08:00
parent c48a106744
commit f5382fd2f7
16 changed files with 408 additions and 190 deletions

View File

@@ -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 })
}

View File

@@ -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>

View File

@@ -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,

View File

@@ -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"

View File

@@ -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) => {

View File

@@ -0,0 +1 @@
<!-- 已完成审批 -->

View File

@@ -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"
/>

View 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>

View File

@@ -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) {

View File

@@ -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"` // 创建时间
}

View File

@@ -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)
}

View File

@@ -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"`

View File

@@ -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
}
// 返回节点数组,最后一个节点为用户或结束节点

View File

@@ -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)
}

View File

@@ -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:'删除时间'"` // 删除时间

View File

@@ -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:'删除时间'"` // 删除时间
}