Browse Source

添加工作流

v3
超级管理员 2 years ago
parent
commit
26eba2ecfc
  1. 11
      src/api/DesignForm/requestapi.ts
  2. 34
      src/api/DesignForm/type.ts
  3. 12
      src/api/taskapi/management.ts
  4. 32
      src/api/taskapi/types.ts
  5. 2
      src/components/workflow/dialog/common.ts
  6. 22
      src/components/workflow/dialog/positionDialog.vue
  7. 23
      src/components/workflow/drwer/approverDrawer.vue
  8. 20
      src/components/workflow/drwer/conditionDrawer.vue
  9. 36
      src/views/taskplatform/taskmanagement/flowStep.vue
  10. 65
      src/views/taskplatform/taskmanagement/taskcustomerform.vue
  11. 160
      vite.config.ts.timestamp-1700438049737-94a706be71b5b.mjs

11
src/api/DesignForm/requestapi.ts

@ -19,7 +19,8 @@ import {
optimizeRepairForm,
publicFormTableStruct,
hanziToPinyin,
gogoBackFormTabelStruct
gogoBackFormTabelStruct,
nodeFlow
} from './type';
//自定义表单列表
export function getCustomerFormList(queryParams: SearchForm): AxiosPromise<CustomerFormPageResult> {
@ -167,3 +168,11 @@ export function chineseToPinyin(data: hanziToPinyin){
data: data
});
}
//获取工作流步进节点
export function generateFlow(data: nodeFlow){
return request({
url: '/systemapi/task_flow/generateFlow',
method: 'post',
data: data
});
}

34
src/api/DesignForm/type.ts

@ -59,6 +59,8 @@ export interface customerFormVersionCont{
editTime:number;
table_structure:string;
dict:string;
createrstr:string;
flowkeystr:string;
}
//编辑自定义表单内容
export interface editFormInfo extends customerFromCont{
@ -132,3 +134,35 @@ export interface hanziToPinyin{
types:number;
connector:string;
}
//获取工作流步进节点
export interface nodeFlow extends enableVersionId{
conditionList?:conditionInfo[]
}
export interface conditionInfo{
factorid:string;
type:number;
isCheckbox?:boolean;
answers?:string[];
oneanswer?:string;
customFields?:customFieldsInfo[];
nodeUserList?:nodeUserInfo[];
}
//自定义条件
export interface customFieldsInfo{
wordfield:string;
optType:string;
leftval:string;
leftoptType?:string;
rightoptType?:string;
rightval?:string;
}
//节点条件人员
export interface nodeUserInfo{
type:number;
targetId:string;
name?:string;
icon?:string;
iconToBase64?:string;
}

12
src/api/taskapi/management.ts

@ -6,7 +6,8 @@ import {
gainTaskListQuery,
gainTaskListPageResult,
customerFormLogo,
customerFormVersionCont
customerFormVersionCont,
nodeFlow
} from '@/api/taskapi/types'
@ -64,3 +65,12 @@ export function delCustomerFormData(data: customerFormLogo) {
data: data
});
}
//获取工作流步进节点
export function generateFlow(data: nodeFlow):any{
return request({
url: '/systemapi/task_flow/generateFlow',
method: 'post',
data: data
});
}

32
src/api/taskapi/types.ts

@ -55,3 +55,35 @@ export interface customerFormVersionCont{
table_structure:string;
dict:string;
}
//获取工作流步进节点
export interface nodeFlow extends customerFormLogo{
conditionList?:conditionInfo[]
}
export interface conditionInfo{
factorid:string;
type:number;
isCheckbox?:boolean;
answers?:string[];
oneanswer?:string;
customFields?:customFieldsInfo[];
nodeUserList?:nodeUserInfo[];
}
//自定义条件
export interface customFieldsInfo{
wordfield:string;
optType:string;
leftval:string;
leftoptType?:string;
rightoptType?:string;
rightval?:string;
}
//节点条件人员
export interface nodeUserInfo{
type:number;
targetId:string;
name?:string;
icon?:string;
iconToBase64?:string;
}

2
src/components/workflow/dialog/common.ts

@ -60,7 +60,7 @@ export let getRoleList = async () => {
export let getPostList = async () => {
let { data } = await GetPositionUnify()
console.log("getPostList",data);
// console.log("getPostList",data);
positionList.value = data;
}

22
src/components/workflow/dialog/positionDialog.vue

@ -32,7 +32,7 @@ let list = computed(() => {
// change: (item) => {
// checkedRoleList.value = [item]
// }
change: (item:any)=> $func.toChecked(checkedRoleList.value, item),
change: (item:any)=> $func.toChecked(checkedRoleList.value, item),
}]
})
let resList = computed(() => {
@ -55,21 +55,37 @@ watch(() => props.visible, (val:any) => {
if (val) {
getPostList();
searchVal.value = "";
// console.log("--->",props.data)
checkedRoleList.value = props.data.map(({ name, targetId }) => ({
name: name,
name: name,
id: targetId
}));
}
})
let total = computed(() => checkedRoleList.value.length)
const saveDialog = () => {
// console.log("",checkedRoleList.value)
let checkedList = checkedRoleList.value.map((item:any) => ({
type: 4,
targetId: item.id.toString(),
name: item.name
name: item.name,
options:optionsList(item.PositionListId)
}))
// console.log("--2--->",checkedList)
emits('change', checkedList)
}
const optionsList = (val:any[]) =>{
let optionsAry = new Array
if(val&&val.length>0){
val.forEach((item:any) => {
optionsAry.push({
label:"",
value:item.toString()
})
})
}
return optionsAry
}
const delList = () => {
checkedRoleList.value = [];
}

23
src/components/workflow/drwer/approverDrawer.vue

@ -66,7 +66,9 @@ watch(visible,(val:any)=>{
})
watch(approverConfig1, (val:any)=>{
// console.log("directormaxlevel",visible.value)\
val.value.attribute = val.value.attribute*1
console.log("directormaxlevel",val.value)
matrixIsShow.value = false
approverConfig.value = val.value
if(val.type == 3){
@ -75,7 +77,7 @@ watch(approverConfig1, (val:any)=>{
nodeTitle.value = "审批人设置"
}
isExecutor.value = false
// approverConfig.attribute = approverConfig.attribute*1
if(visible.value){
judgeOptionalNode(props.nodeConfig)
.then((data:any)=>{
@ -221,10 +223,10 @@ const updateMatrix = (val:any) =>{
<div v-if="approverConfig.settype==2" class="approver_manager">
<p>
<el-row :gutter="10">
<el-col :span="6">
<el-col v-if="isExecutor" :span="6">
<select v-model="approverConfig.attribute" style="width:100%">
<option value="1">发起人</option>
<option v-if="isExecutor" value="2">执行人</option>
<option value="2">执行人</option>
</select>
</el-col>
<el-col :span="18">
@ -245,9 +247,9 @@ const updateMatrix = (val:any) =>{
<el-button type="primary" @click="addApproverPost">添加/修改行政岗位</el-button>
</el-col>
<el-col :span="6">
<select v-model="approverConfig.attribute" style="width:100%">
<select v-if="isExecutor" v-model="approverConfig.attribute" style="width:100%">
<option value="1">发起人</option>
<option v-if="isExecutor" value="2">执行人</option>
<option value="2">执行人</option>
</select>
</el-col>
</el-row>
@ -283,10 +285,10 @@ const updateMatrix = (val:any) =>{
<p>审批终点</p>
<p style="padding-bottom:20px">
<el-row :gutter="10">
<el-col :span="6">
<el-col v-if="isExecutor" :span="6">
<select v-model="approverConfig.attribute" style="width:100%">
<option value="1">发起人</option>
<option v-if="isExecutor" value="2">执行人</option>
<option value="2">执行人</option>
</select>
</el-col>
<el-col :span="10">
@ -318,7 +320,10 @@ const updateMatrix = (val:any) =>{
</div>
<!--权限矩阵-->
<div v-if="approverConfig.settype==9" class="approver_manager">
<select v-if="isExecutor" v-model="approverConfig.attribute" style="width:100%">
<option value="1">发起人</option>
<option value="2">执行人</option>
</select>
<MatrixPage
v-model:isshow="matrixIsShow"
:data="matrixFieldList"

20
src/components/workflow/drwer/conditionDrawer.vue

@ -166,7 +166,7 @@ const addFactorCondition = () => {
})
}
if(currLent < flowFactorList.value.length){
tableList.value.push({id:currLent+1,name:"",factorid:"",type:0,isok:false,isCheckbox:true,options:[],answers:[],customFields:[]})
tableList.value.push({id:currLent+1,name:"",factorid:"",type:0,isok:false,isCheckbox:true,options:[],oneanswer:"",answers:[],customFields:[]})
if(currLent+1 >= flowFactorList.value.length){
maxFactor.value = true
}else{
@ -231,7 +231,7 @@ const saveCondition = () => {
let isError = false
if(tableList.value.length>0){
for (var i = 0; i < tableList.value.length; i++) {
var {name,type,options,nodeUserList,answers,isCheckbox,customFields} = tableList.value[i]
var {name,type,options,nodeUserList,oneanswer,answers,isCheckbox,customFields} = tableList.value[i]
console.log("conditionConfig.conditionList--1->",name);
console.log("conditionConfig.conditionList--2->",type);
console.log("conditionConfig.conditionList--3->",options);
@ -239,6 +239,7 @@ const saveCondition = () => {
console.log("conditionConfig.conditionList--5->",answers);
console.log("conditionConfig.conditionList--6->",isCheckbox);
console.log("conditionConfig.conditionList--7->",customFields);
console.log("conditionConfig.conditionList--8->",oneanswer);
switch(type){
case 1:
if(nodeUserList){
@ -262,13 +263,18 @@ const saveCondition = () => {
}
break;
case 3:
if(answers.length > 0){
if(!Array.isArray(answers)){
tableList.value[i].answers=[answers]
if (isCheckbox){
if(answers.length > 0){
if(!Array.isArray(answers)){
tableList.value[i].answers=[answers]
}
}else{
isError = true
}
}else{
isError = true
tableList.value[i].oneanswer=oneanswer
}
break;
default:
isError = true
@ -441,7 +447,7 @@ const delCuresTiaoJian = (val:any,old:any) => {
<el-button type="warning" style="margin-top:0px" @click="addCustomFields">添加条件</el-button>
</template>
<template v-if="itemw.type==3">
<el-radio-group v-if="!itemw.isCheckbox" v-model="itemw.answers">
<el-radio-group v-if="!itemw.isCheckbox" v-model="itemw.oneanswer">
<el-radio v-for="optVal in itemw.options" :key="optVal.value" :label="optVal.value">{{optVal.label}}</el-radio>
</el-radio-group>
<el-checkbox-group v-if="itemw.isCheckbox" v-model="itemw.answers">

36
src/views/taskplatform/taskmanagement/flowStep.vue

@ -0,0 +1,36 @@
<!--
@ 作者: 秦东
@ 时间: 2023-11-17 16:43:55
@ 备注: 工作流步进图
-->
<script lang='ts' setup>
const props = defineProps({
flowMap: {
type: Array,
default: () => []
}
})
const emits = defineEmits(["update:flowMap"]);
const flowList = computed({
get: () => props.flowMap,
set: (val) => {
emits("update:flowMap", val);
},
});
watch(()=>props.flowMap,(val:any)=>{
console.log("val----->",val)
flowList=val
})
</script>
<template>
<div>
{{props.flowMap}}
<el-steps direction="vertical" :active="1">
<el-step v-for="item in flowList" :key="item.step" :title="item.step">{{item.nodeName}}</el-step>
</el-steps>
</div>
</template>
<style lang='scss' scoped>
</style>

65
src/views/taskplatform/taskmanagement/taskcustomerform.vue

@ -10,8 +10,8 @@ import {
string2json,
stringToObj
} from '@/utils/DesignForm/form'
import { haveCustomerFormVersion } from '@/api/taskapi/management'
import { nodeFlow } from '@/api/taskapi/types'
import { haveCustomerFormVersion,generateFlow } from '@/api/taskapi/management'
import { judgeSubmitCancel } from '@/api/DesignForm/requestapi'
import '@/assets/scss/element-var.scss'
@ -19,6 +19,8 @@ import '@/assets/scss/index.scss'
import '@/assets/iconfont/iconfont.css'
import 'element-plus/dist/index.css'
import FlowStep from '@/views/taskplatform/taskmanagement/flowStep.vue'
const props = defineProps({
isopen:{
type:Boolean,
@ -65,6 +67,7 @@ const submitButton = {
}
}]
}
const isFlowForm = ref(false)
const loadingData = ref(false)
const formEl = ref()
const router = useRouter()
@ -80,6 +83,13 @@ const state = reactive<any>({
id: 0,
loading: true
})
//
const gainFlowChart = reactive<nodeFlow>({
id:0
})
//
const flowMap = ref<any[]>();
const formType = computed(() => {
// id
if (props.infoid) {
@ -103,6 +113,11 @@ const getTaskFormData = () =>{
haveCustomerFormVersion({id:props.versionid})
.then(({ data }) =>{
console.log("表单数据",data)
if(data.classify == 2){
isFlowForm.value = true;
}else{
isFlowForm.value = false;
}
state.id=props.versionid
state.formData = stringToObj(data.mastesform)
state.dict = string2json(data.dict)
@ -114,6 +129,14 @@ const getTaskFormData = () =>{
}
}
})
//
gainFlowChart.id=data.flowkeystr
generateFlow(gainFlowChart)
.then((data:any) =>{
console.log("获取工作流不进图",data)
flowMap.value = data.data
console.log("获取工作流不进图--->",flowMap.value)
})
})
.finally(()=>{
loadingData.value = false;
@ -167,7 +190,31 @@ watch(()=>props.isopen,()=>{
</script>
<template>
<el-drawer v-model="drawerOpenOrClose" v-loading="loadingData" :title="versiontitle" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerwith" class="drawerClass" >
<div class="drawerBody">
<el-tabs v-if="isFlowForm" tab-position="left" style="height: 100%" class="demo-tabs">
<el-tab-pane label="表单">
<ak-form
ref="formEl"
:form-data="state.formData"
:type="formType"
:dict="state.dict"
request-url="getFormContent"
add-url="saveFormContent"
edit-url="editFormContent"
:before-submit="beforeSubmit"
:after-submit="afterSubmit"
:close-app-submit="closeAppSubmit"
/>
</el-tab-pane>
<el-tab-pane label="流程">
<FlowStep v-molde:flow-map="flowMap" />
</el-tab-pane>
</el-tabs>
<div v-else class="drawerBody">
<ak-form
ref="formEl"
:form-data="state.formData"
@ -209,3 +256,15 @@ watch(()=>props.isopen,()=>{
padding: 20px;
}
</style>
<style>
.demo-tabs > .el-tabs__content {
padding: 0px 20px 20px 20px;
overflow: hidden;
overflow-y: auto;
}
.el-tabs--right .el-tabs__content,
.el-tabs--left .el-tabs__content {
height: 100%;
}
</style>

160
vite.config.ts.timestamp-1700438049737-94a706be71b5b.mjs

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save