Browse Source

列表任务按钮完成

lwx_v7
超级管理员 2 years ago
parent
commit
1829b12e5b
  1. 32
      src/api/taskapi/management.ts
  2. 14
      src/components/DesignForm/public/form/form.vue
  3. 67
      src/components/DesignForm/tableListPage/formPageCont.vue
  4. 66
      src/components/DesignForm/tableListPage/index.vue
  5. 2
      src/utils/workflow/const.ts
  6. 4
      src/views/sysworkflow/lowcodepage/appFormList.vue
  7. 3
      src/views/taskplatform/taskmanagement/runFlowStep.vue
  8. 248
      src/views/taskplatform/taskmanagement/runFlowStep_20240411.vue

32
src/api/taskapi/management.ts

@ -117,3 +117,35 @@ export function realTimeUpdateFlow(data: any):any{
data: data
});
}
//根据表单数据实时更新流程
export function draftsInitiateApproval(data?:any){
return request({
url: '/systemapi/task_management/draftsInitiateApproval',
method: 'post',
data: data
});
}
//根据表单数据实时更新流程
export function retractRunWorkFlow(data?:any){
return request({
url: '/systemapi/task_management/retractRunWorkFlow',
method: 'post',
data: data
});
}
//重新发起流程
export function afreshRunWorkflow(data?:any){
return request({
url: '/systemapi/task_management/afreshRunWorkflow',
method: 'post',
data: data
});
}
//提交审批结果
export function authorizeWorkflow(data?:any){
return request({
url: '/systemapi/task_management/authorizeWorkflow',
method: 'post',
data: data
});
}

14
src/components/DesignForm/public/form/form.vue

@ -325,7 +325,7 @@ const ruleForm = ref()
const validate = (callback: any) => {
ruleForm.value.validate((valid: boolean, fields: any) => {
console.log("ruleForm.value--->filter-->",ruleForm.value)
// console.log("ruleForm.value--->filter-->",ruleForm.value)
// console.log("getValue--->fields-->",fields)
// console.log("getValue--->valid-->",valid)
@ -415,8 +415,8 @@ provide(constFormBtnEvent, (obj: any) => {
// console.log("稿--------->saveDraft")
break
case "saveEditDraft": //稿
// saveEditDraft()
console.log("保存草稿--------->saveEditDraft")
saveEditDraft()
// console.log("稿--------->saveEditDraft")
break
case 'afreshSubmit': //
afreshSubmit() //
@ -732,7 +732,7 @@ onUnmounted(() => {
//
const afreshSubmit = (params = {}) => {
// let apiUrl = "/systemapi/task_management/newcust_form_editdata"
let apiUrl ="/systemapi/task_management/add_customer_form"
let apiUrl ="/systemapi/task_management/editCustomerTable"
if (props.isSearch || !apiUrl || loading.value) {
if (!props.isSearch && !apiUrl) {
console.error(
@ -870,7 +870,8 @@ const saveDraftPage = (type: string, res: any) => {
//稿
const saveEditDraft = (params = {}) => {
// let apiUrl = "/systemapi/task_management/newcust_form_editdata"
let apiUrl ="/systemapi/task_management/add_customer_form"
// let apiUrl ="/systemapi/task_management/add_customer_form"
let apiUrl ="/systemapi/task_management/editCustomerTable"
if (props.isSearch || !apiUrl || loading.value) {
if (!props.isSearch && !apiUrl) {
console.error(
@ -1010,7 +1011,8 @@ const sendDraftSubmit = (type: string, res: any) => {
* 申请修改
*/
const submitEditButton = (params = {}) => {
let apiUrl = "/systemapi/task_flow/editFormLogData"
// let apiUrl = "/systemapi/task_flow/editFormLogData"
let apiUrl = "/systemapi/task_management/applyForTableFormData"
if (props.isSearch || !apiUrl || loading.value) {
if (!props.isSearch && !apiUrl) {
console.error(

67
src/components/DesignForm/tableListPage/formPageCont.vue

@ -6,9 +6,9 @@
<script lang='ts' setup>
import { submitButton, afreshSubmitButton,editFormCont,draftSubmitButton,editLookFormCont } from "@/utils/workflow/const";
import { json2string,objToStringify,string2json,stringToObj } from '@/utils/DesignForm/form'
import { gainTaskFormInfo,generateFlow,gainEditDataLog } from '@/api/taskapi/management'
import { gainTaskFormInfo,generateFlow,gainEditDataLog,draftsInitiateApproval,afreshRunWorkflow } from '@/api/taskapi/management'
import { Close } from '@element-plus/icons-vue'
import { judgeSubmitCancel } from '@/api/DesignForm/requestapi'
import { judgeSubmitCancel,startRunFlow } from '@/api/DesignForm/requestapi'
import { submitButtonEs } from '@/api/DesignForm/tableButton'
import RunFlowStep from '@/views/taskplatform/taskmanagement/runFlowStep.vue'
@ -43,6 +43,7 @@ const emits = defineEmits(["update:isShow","getPageData"]);
const formLoading = ref(false);
const flowAry = ref<any[]>(); //
const currentProgress = ref<number>(1); //
const runstep = ref(null)
//ID
const openOfClose = computed({
get() {
@ -160,20 +161,68 @@ const drawerBeforeClose = () => {
}
//
const sendDraftSubmit = (type: string,val?:any) => {
// console.log("",type,val)
// emits("getmytodolist")
if (type === 'success') {
if(isFlowTable.value){
if(val.code == 0){
if(props.pageInfo.flowIsOpen == 1){
let sendInfo ={
id:val.data.uuid,
flowList:flowMap.value,
id:val.data.masterKey,
flowList:flowAry.value,
state:3
}
startRunFlow(sendInfo)
console.log("草稿提交审批--1-<",sendInfo)
draftsInitiateApproval(sendInfo)
.then((data:any) =>{
console.log("草稿提交审批---<",sendInfo,data)
if(data.code == 0){
ElMessage.success(data.msg || '提交成功!')
if(runstep.value){
runstep.value.gainRunFlowTask()
}
emits("getPageData");
closeDrawer()
}
})
}
}
}
//稿()
const saveEditFormInfo = (type: string,val?:any) => {
console.log("草稿提交审批--1-<",type,val)
if(type == "success"){
runstep.value.gainRunFlowTask()
emits("getPageData");
closeDrawer()
}
}
//
const anewSubmit = (type: string,val?:any) => {
if(type == "success"){
afreshRunWorkflow({id:val.data.flowkeys})
.then((data:any) => {
// console.log("--------1---------->",data)
console.log("重新提交数据---<",data,runstep.value)
runstep.value.gainRunFlowTask()
})
.finally(() => {
emits("getPageData");
closeDrawer()
})
}
}
/**
@ 作者: 秦东
@ 时间: 2024-04-11 11:35:24
@ 功能: 申请修改
*/
//
const submitEdit = (type: string,val?:any) => {
// console("----->",type,val)
if(type == "success"){
runstep.value.gainRunFlowTask()
emits("getPageData");
closeDrawer()
}
}
</script>
@ -207,6 +256,7 @@ const sendDraftSubmit = (type: string,val?:any) => {
:save-edit-form-info="saveEditFormInfo"
:send-draft-submit= "sendDraftSubmit"
:after-submit="afterSubmit"
:submit-edit="submitEdit"
/>
<el-divider v-if="pageLog&&pageLog.length > 0" content-position="left">历史记录</el-divider>
@ -264,6 +314,7 @@ const sendDraftSubmit = (type: string,val?:any) => {
:after-submit="afterSubmit"
:save-edit-form-info="saveEditFormInfo"
:send-draft-submit= "sendDraftSubmit"
:submit-edit="submitEdit"
/>
<el-divider v-if="pageLog&&pageLog.length > 0" content-position="left">历史记录</el-divider>
<el-timeline style="width: 100%">

66
src/components/DesignForm/tableListPage/index.vue

@ -13,7 +13,7 @@ import type { FormInstance, FormRules,ElNotification } from 'element-plus'
import { gainFormPageListCont } from '@/api/DesignForm/requestapi'
import { Picture,InfoFilled,QuestionFilled } from '@element-plus/icons-vue'
import { softDeletion } from '@/api/taskapi/management'
import { softDeletion,retractRunWorkFlow } from '@/api/taskapi/management'
//
@ -346,6 +346,49 @@ const submitApproval = (val:any) => {
drawerWith.value = container.value?.clientWidth
lookPageInfoIsShow.value = true;
}
/**
@ 作者: 秦东
@ 时间: 2024-04-11 09:36:59
@ 功能: 撤回申请
*/
const withdrawApplication = (val:any) => {
// console.log("", val);
let sendInfo = {
id: val.masters_key,
}
retractRunWorkFlow(sendInfo)
.then((data)=>{
ElMessage({
message: '撤回成功!',
type: 'success'
})
getPageData()
})
}
/**
@ 作者: 秦东
@ 时间: 2024-04-11 11:17:42
@ 功能: 重新提交申请
*/
const afreshSendFlow = (val:any) => {
operState.value = 2
tablePageClass.value = 2;
pageInfoCont.value = val
drawerWith.value = container.value?.clientWidth
lookPageInfoIsShow.value = true;
}
/**
@ 作者: 秦东
@ 时间: 2024-04-11 11:19:21
@ 功能: 申请修改数据
*/
const editFormSendFlow = (val:any) => {
operState.value = 3
tablePageClass.value = 2;
pageInfoCont.value = val
drawerWith.value = container.value?.clientWidth
lookPageInfoIsShow.value = true;
}
</script>
<template>
<div ref="container" v-loading="state.loading" class="table-list-comm">
@ -495,7 +538,7 @@ const submitApproval = (val:any) => {
content="重新申请"
placement="top-end"
>
<el-button type="warning" size="small" class="fa fa-retweet" />
<el-button type="warning" size="small" class="fa fa-retweet" @click="afreshSendFlow(scope.row)" />
</el-tooltip>
<el-tooltip
class="box-item"
@ -505,15 +548,20 @@ const submitApproval = (val:any) => {
>
<el-button @click="lookPageInfo(scope.row)" type="primary" size="small" class="fa fa-eye" />
</el-tooltip>
<el-tooltip
<el-popconfirm
v-if="scope.row.flowIsOpen==1&&scope.row.isRetract"
class="box-item"
effect="dark"
content="撤回"
placement="top-end"
confirm-button-text="确定"
cancel-button-text="取消"
:icon="QuestionFilled"
icon-color="#F56C6C"
title="您确定要撤回此次申请?一经撤回!需要此流程重新提交申请!"
@confirm="withdrawApplication (scope.row)"
@cancel="cancelEvent(scope.row)"
>
<template #reference>
<el-button size="small" class="fa fa-reply-all" />
</el-tooltip>
</template>
</el-popconfirm>
<el-tooltip
v-if="scope.row.flowIsOpen==2"
class="box-item"
@ -545,7 +593,7 @@ const submitApproval = (val:any) => {
content="申请修改"
placement="top-end"
>
<el-button type="info" size="small" class="fa fa-edit" />
<el-button type="info" size="small" class="fa fa-edit" @click="editFormSendFlow(scope.row)" />
</el-tooltip>
</el-button-group>
</template>

2
src/utils/workflow/const.ts

@ -314,7 +314,7 @@ export let draftSubmitButton = {
type: "button",
iconFont: "fa-square-o",
control:{
label: "确认提交2",
label: "确认提交",
type: "primary",
key: "draftSubmit"
},

4
src/views/sysworkflow/lowcodepage/appFormList.vue

@ -206,14 +206,14 @@ const state = reactive({
<img
v-if="item.icon==''"
:src="squareUrl"
title="示例图片"
:title="item.name"
class="picture"
@click.top="startUsing(item.versionId,item.name)"
/>
<img
v-else
:src="item.icon"
title="示例图片"
:title="item.name"
class="picture"
@click.top="startUsing(item.versionId,item.name)"
/>

3
src/views/taskplatform/taskmanagement/runFlowStep.vue

@ -7,6 +7,7 @@
import SvgIcon from "@/components/SvgIcon/index.vue";
import OrgUserPage from "@/views/public/orguser/orguser.vue"
import OrgAllUserPage from "@/views/public/orguser/orgalluser.vue"
import { authorizeWorkflow } from '@/api/taskapi/management'
// import { nodeFlow,conditionInfo,nodelPeoples } from '@/api/taskapi/types'
import { gainRunTaskFlow,submitApprovalResults } from '@/api/DesignForm/requestapi'
@ -112,7 +113,7 @@ const yesOrNo = (val:string,agreeOrRefuse:number) =>{
suggest:sendFlowInfo.value,
flowlist:flowMaps.value
}
submitApprovalResults(sendInfo)
authorizeWorkflow(sendInfo)
.then((data:any)=>{
// console.log("----22222->",data)

248
src/views/taskplatform/taskmanagement/runFlowStep_20240411.vue

@ -0,0 +1,248 @@
<!--
@ 作者: 秦东
@ 时间: 2023-11-24 13:18:02
@ 备注: 流程执行
-->
<script lang='ts' setup>
import SvgIcon from "@/components/SvgIcon/index.vue";
import OrgUserPage from "@/views/public/orguser/orguser.vue"
import OrgAllUserPage from "@/views/public/orguser/orgalluser.vue"
// import { nodeFlow,conditionInfo,nodelPeoples } from '@/api/taskapi/types'
import { gainRunTaskFlow,submitApprovalResults } from '@/api/DesignForm/requestapi'
//
import squareUrlOne from "@/assets/images/1.png"
import squareUrlTwo from "@/assets/images/2.png"
const state = reactive({
circleUrl:squareUrlTwo,
squareUrl: squareUrlOne,
sizeList: ['small', '', 'large'] as const,
})
const { circleUrl, squareUrl, sizeList } = toRefs(state)
const props = defineProps({
flowKey:{
type:String,
default:""
},
currentProgress:{
type:Number,
default:0
}
})
const emits = defineEmits(["update:flowary","updatelist"]);
const flowLoading = ref(false)
const openOrClose = ref(false) //
const openclosebox = ref(false) //
const presetPersonnel = ref<any>([]); //
const selectedPeople = ref<any>([]); //
const flowOpinion = ref(false) //
const currentStep = ref<number>(props.currentProgress)
const flowMaps = ref<any[]>();
//
const gainRunFlowTask = () =>{
flowLoading.value = true
let sendInfo = {
id:props.flowKey
}
gainRunTaskFlow(sendInfo)
.then((data:any) =>{
console.log("获取流程----->",data)
flowMaps.value = data.data.flowList
flowOpinion.value = data.data.operational
currentStep.value = data.data.current_step
emits("update:flowary", data.data.flowList);
})
.finally(()=>{
flowLoading.value = false
})
}
//
onBeforeMount(()=>{
gainRunFlowTask();
})
//
onMounted(()=>{
})
//
const judgeAddUser = (val:any):boolean =>{
console.log("获取流程----1111->",val.judgelist)
if(val.judgelist){
return true
}
return false
}
let zhiXingStep = 1;
//
const addPeople = (val:any) =>{
zhiXingStep = val.step
presetPersonnel.value = val.pendpers
selectedPeople.value = val.operator
if(val.runscope == 1){
openclosebox.value = true
}else{
openOrClose.value = true
}
}
//
const updateNode = (val:any) =>{
if(flowMaps.value&& flowMaps.value.length > 0){
flowMaps.value.forEach((item:any) =>{
if(item.step == zhiXingStep){
item.operator = val
}
})
}
}
const sendFlowInfo = ref<string>() //
//
const yesOrNo = (val:string,agreeOrRefuse:number) =>{
console.log("提交审批----1111->",val,agreeOrRefuse,sendFlowInfo.value)
let sendInfo = {
id:props.flowKey,
agreeOrRefuse:agreeOrRefuse,
suggest:sendFlowInfo.value,
flowlist:flowMaps.value
}
submitApprovalResults(sendInfo)
.then((data:any)=>{
// console.log("----22222->",data)
ElMessage({
message: '处理完成!',
type: 'success'
})
})
.finally(()=>{
gainRunFlowTask();
emits("updatelist");
})
}
defineExpose({gainRunFlowTask})
</script>
<template>
<div class="drawerFormBox boxRight">
<div class="flowBox">
<!-- <el-affix :offset="20" style="width:100%">
<el-text size="large">审批流程</el-text>
</el-affix> -->
<el-steps v-loading="flowLoading" element-loading-text="Loading..." direction="vertical" :active="currentStep">
<el-step v-for="item in flowMaps" :key="item.step">
<template #title>
{{ item.nodeName }}<span v-if="item.examinemode==1"> 依次审批</span><span v-if="item.examinemode==2"> 会签</span><span v-if="item.examinemode==3"> 或签</span>
</template>
<template #description>
<table>
<tr v-for="items in item.operator" :key="items.id">
<td valign="top" align="center" width="50">
<el-avatar v-if="items.iconbase64==''&&items.icon!=''" shape="square" fit="cover" :src="items.icon" />
<el-avatar v-else-if="items.iconbase64!=''" shape="square" fit="cover" :src="items.iconbase64" />
<el-avatar v-else shape="square" fit="cover" :src="squareUrl" />
</td>
<td valign="top" align="left">
<el-row>
<el-col :span="24">
<el-text>{{ items.departmentname }}</el-text>
<el-text><span v-if="items.departmentname"> - </span>{{ items.postname }}</el-text>
<el-text><span v-if="items.departmentname||items.postname"> - </span>{{ items.name }}</el-text>
</el-col>
<el-col :span="24">
<ul>
<li v-for="(logItem,logIndex) in items.log" :key="logIndex" class="logLi">
<el-text v-if="logItem.state==2" type="success">
<span v-if="logItem.cause">{{logItem.cause}}</span><span v-else>已同意</span>
</el-text>
<el-text v-else-if="logItem.state==3" type="danger">
<span v-if="logItem.cause">{{logItem.cause}}</span><span v-else>已驳回</span>
</el-text>
<el-text v-else-if="logItem.state==4" type="primary">
<span v-if="logItem.cause">{{logItem.cause}}</span><span v-else>已查看</span>
</el-text>
<el-text v-else>
<span v-if="logItem.cause">{{logItem.cause}}</span><span v-else>未操作</span>
</el-text> · {{ logItem.time }}
</li>
</ul>
</el-col>
</el-row>
</td>
</tr>
<tr>
<td>
<div v-if="item.judgelist" class="addUser" @click="addPeople(item)">
<svg-icon icon-class="addxuxian" size="50" />
</div>
</td>
<td></td>
</tr>
</table>
</template>
</el-step>
</el-steps>
</div>
<el-affix v-if="flowOpinion" position="bottom" :offset="0">
<div class="approvalBoard">
<el-text size="large" class="appBoardTitle">审批意见</el-text>
<el-row :gutter="20">
<el-col :span="24">
<el-input
v-model="sendFlowInfo"
:autosize="{ minRows: 2, maxRows: 6 }"
type="textarea"
placeholder="请输入审批意见"
/>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="4"></el-col>
<el-col :span="8" class="juzhong"><el-button type="primary" style="width:100%" @click="yesOrNo(props.flowKey,1)">同意</el-button></el-col>
<el-col :span="8" class="juzhong"><el-button type="danger" style="width:100%" @click="yesOrNo(props.flowKey,2)">驳回</el-button></el-col>
<el-col :span="4"></el-col>
</el-row>
</div>
</el-affix>
<OrgUserPage v-if="openOrClose" v-model:openclose="openOrClose" :preset-personnel="presetPersonnel" :selected-people="selectedPeople" @update-node="updateNode" />
<OrgAllUserPage v-if="openclosebox" v-model:openclosebox="openclosebox" :selected-people="selectedPeople" @update-node="updateNode" />
</div>
</template>
<style lang='scss' scoped>
.drawerFormBox{
width: 100%;
height: 100%;
}
.boxRight{
overflow: hidden;
overflow-y: auto;
border-left: 1px solid #EEEEEE;
}
.flowBox{
width: 100%;
padding: 0 5px 0 10px;
}
.approvalBoard{
padding: 5px 10px;
background-color: #FFFFFF;
border-top: 1px solid #EEEEEE;
.juzhong{
padding: 10px 0;
text-align: center;
}
.appBoardTitle{
padding: 5px 0 10px 0;
display: block;
}
}
</style>
Loading…
Cancel
Save