|
|
|
@ -7,7 +7,7 @@ |
|
|
|
import $func from '@/utils/workflow/index' |
|
|
|
import { setTypes, selectModes, selectRanges } from '@/utils/workflow/const' |
|
|
|
import { useStore } from '@/store/workflow/index' |
|
|
|
import { getAllParentNode,judgeOptionalNode } from '@/api/workflowapi/index' |
|
|
|
import { getAllParentNode,judgeOptionalNode,analysisForm,setFlowFormKeyPower } from '@/api/workflowapi/index' |
|
|
|
|
|
|
|
import PositionDialog from '@/components/workflow/dialog/positionDialog.vue' |
|
|
|
import FormWord from '@/components/workflow/dialog/formWord.vue' |
|
|
|
@ -33,6 +33,16 @@ let props = defineProps({ |
|
|
|
type:String, |
|
|
|
default:"" |
|
|
|
}, |
|
|
|
formVersion:{ |
|
|
|
type:String, |
|
|
|
default:"" |
|
|
|
}, |
|
|
|
formData:{ |
|
|
|
type:Object, |
|
|
|
default(){ |
|
|
|
return {} |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
const isExecutor = ref(false) |
|
|
|
const nodeTitle = ref<string>("审批人设置") |
|
|
|
@ -51,6 +61,12 @@ let store = useStore() |
|
|
|
let { setApproverConfig, setApprover } = store |
|
|
|
let approverConfig1 = computed(():any=> store.approverConfig1) |
|
|
|
let approverDrawer = computed(():any=> store.approverDrawer) |
|
|
|
|
|
|
|
const emits = defineEmits<{ |
|
|
|
(e: 'update:formData', val: any): void |
|
|
|
}>() |
|
|
|
|
|
|
|
|
|
|
|
let visible = computed({ |
|
|
|
get(){ |
|
|
|
return approverDrawer.value |
|
|
|
@ -59,12 +75,29 @@ let visible = computed({ |
|
|
|
closeDrawer() |
|
|
|
} |
|
|
|
}) |
|
|
|
const matrixIsShow = ref(false) |
|
|
|
|
|
|
|
watch(visible,(val:any)=>{ |
|
|
|
// if(val) |
|
|
|
const formData = computed({ |
|
|
|
get() { |
|
|
|
return props.formData |
|
|
|
}, |
|
|
|
set(val: formStruct) { |
|
|
|
emits('update:formData', val) |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
const powerUnitAry = ref<any>({ |
|
|
|
nodeKey:"", |
|
|
|
recUnitAry:{ |
|
|
|
masterUnitList:[], |
|
|
|
sunUnitList:[], |
|
|
|
unitAllKey:[], |
|
|
|
unitAllState:[] |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
const matrixIsShow = ref(false) |
|
|
|
|
|
|
|
|
|
|
|
watch(approverConfig1, (val:any)=>{ |
|
|
|
|
|
|
|
val.value.attribute = val.value.attribute*1 |
|
|
|
@ -166,6 +199,55 @@ const saveApprover = ()=> { |
|
|
|
flag: true, |
|
|
|
id: approverConfig1.value.id |
|
|
|
}) |
|
|
|
let powerAry = []; |
|
|
|
if(powerUnitAry.value.recUnitAry.masterUnitList && powerUnitAry.value.recUnitAry.masterUnitList.length > 0){ |
|
|
|
powerUnitAry.value.recUnitAry.masterUnitList.forEach((item:any)=>{ |
|
|
|
powerAry.push(item) |
|
|
|
}) |
|
|
|
} |
|
|
|
if(powerUnitAry.value.recUnitAry.sunUnitList && powerUnitAry.value.recUnitAry.sunUnitList.length > 0){ |
|
|
|
powerUnitAry.value.recUnitAry.sunUnitList.forEach((item:any)=>{ |
|
|
|
if(item.masterUnitList && item.masterUnitList.length > 0){ |
|
|
|
item.masterUnitList.forEach((itemSun:any) => { |
|
|
|
// powerAry.push(item) |
|
|
|
if(!powerAry.includes(itemSun)){ |
|
|
|
powerAry.push(itemSun) |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
console.log("正确",formData.value) |
|
|
|
if(formData.value.purview){ |
|
|
|
console.log("正确") |
|
|
|
let isNew = true |
|
|
|
formData.value.purview.forEach((item:any)=>{ |
|
|
|
console.log("正确---->",item.nodeKey) |
|
|
|
if(item.nodeKey == approverConfig1.value.value.nodeNumber){ |
|
|
|
item.powerAry=powerAry |
|
|
|
isNew = false |
|
|
|
} |
|
|
|
}); |
|
|
|
if(isNew){ |
|
|
|
formData.value.purview.push({ |
|
|
|
nodeKey: approverConfig1.value.value.nodeNumber, |
|
|
|
powerAry:powerAry |
|
|
|
}) |
|
|
|
} |
|
|
|
}else{ |
|
|
|
formData.value.purview = [{ |
|
|
|
nodeKey: approverConfig1.value.value.nodeNumber, |
|
|
|
powerAry:powerAry |
|
|
|
}] |
|
|
|
} |
|
|
|
let sendInfo: any = { |
|
|
|
formKey:props.customerFormKey.toString(), |
|
|
|
formVersion:props.formVersion.toString(), |
|
|
|
formData:JSON.stringify(formData.value), |
|
|
|
formPower:JSON.stringify(formData.value.purview) |
|
|
|
} |
|
|
|
// console.log("sendInfo",sendInfo) |
|
|
|
setFlowFormKeyPower(sendInfo) |
|
|
|
closeDrawer() |
|
|
|
} |
|
|
|
const closeDrawer = ()=> { |
|
|
|
@ -196,10 +278,31 @@ const sureFormTableApprover = (data:any)=> { |
|
|
|
const updateMatrix = (val:any) =>{ |
|
|
|
approverConfig.value.matrix = val; |
|
|
|
} |
|
|
|
/** |
|
|
|
@ 作者: 秦东 |
|
|
|
@ 时间: 2024-03-13 08:24:54 |
|
|
|
@ 功能: 解析表单 |
|
|
|
*/ |
|
|
|
const jieForm = () => { |
|
|
|
console.log("nodeKey:approverConfig1.nodeNumber",approverConfig1.value.value.nodeNumber |
|
|
|
); |
|
|
|
analysisForm({nodeKey:approverConfig1.value.value.nodeNumber,nodeJson:JSON.stringify(formData.value)}) |
|
|
|
.then((data)=>{ |
|
|
|
if(data.code == 0){ |
|
|
|
powerUnitAry.value = data.data |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
watch(()=>visible.value,(val:boolean)=>{ |
|
|
|
if(val){ |
|
|
|
jieForm(); |
|
|
|
} |
|
|
|
}) |
|
|
|
</script> |
|
|
|
<template> |
|
|
|
|
|
|
|
<el-drawer v-model="visible" :append-to-body="true" :title="nodeTitle" class="set_promoter" :show-close="false" :size="550" :before-close="saveApprover"> |
|
|
|
<el-drawer v-model="visible" :append-to-body="true" :title="nodeTitle" class="set_promoter" :show-close="false" :size="550" :before-close="closeDrawer"> |
|
|
|
|
|
|
|
<div class="demo-drawer__content"> |
|
|
|
<!--审批人设置主体--> |
|
|
|
@ -212,6 +315,7 @@ const updateMatrix = (val:any) =>{ |
|
|
|
</el-radio-group> |
|
|
|
</div> |
|
|
|
<!--指定成员--> |
|
|
|
<el-divider v-if="approverConfig.settype==1" content-position="left">指定成员</el-divider> |
|
|
|
<div v-if="approverConfig.settype==1" class="approver_manager"> |
|
|
|
<el-button type="primary" @click="addApprover">添加/修改成员</el-button> |
|
|
|
<p class="selected_list"> |
|
|
|
@ -220,6 +324,7 @@ const updateMatrix = (val:any) =>{ |
|
|
|
</p> |
|
|
|
</div> |
|
|
|
<!--主管--> |
|
|
|
<el-divider v-if="approverConfig.settype==2" content-position="left">主管</el-divider> |
|
|
|
<div v-if="approverConfig.settype==2" class="approver_manager"> |
|
|
|
<p> |
|
|
|
<el-row :gutter="10"> |
|
|
|
@ -240,8 +345,8 @@ const updateMatrix = (val:any) =>{ |
|
|
|
<p class="tip">找不到主管时,由上级主管代审批</p> |
|
|
|
</div> |
|
|
|
<!--行政岗位--> |
|
|
|
<el-divider v-if="approverConfig.settype==3" content-position="left">指定行政岗位</el-divider> |
|
|
|
<div v-if="approverConfig.settype==3" class="approver_manager"> |
|
|
|
<p>指定行政岗位</p> |
|
|
|
<el-row> |
|
|
|
<el-col :span="18"> |
|
|
|
<el-button type="primary" @click="addApproverPost">添加/修改行政岗位</el-button> |
|
|
|
@ -259,6 +364,7 @@ const updateMatrix = (val:any) =>{ |
|
|
|
</p> |
|
|
|
</div> |
|
|
|
<!--发起人自选--> |
|
|
|
<el-divider v-if="approverConfig.settype==4" content-position="left">发起人自选</el-divider> |
|
|
|
<div v-show="approverConfig.settype==4" class="approver_self_select"> |
|
|
|
<el-radio-group v-model="approverConfig.selectMode" style="width: 100%;"> |
|
|
|
<el-radio v-for="({value, label}) in selectModes" :key="value" :label="value">{{label}}</el-radio> |
|
|
|
@ -277,12 +383,13 @@ const updateMatrix = (val:any) =>{ |
|
|
|
</template> |
|
|
|
</div> |
|
|
|
<!--发起人自己--> |
|
|
|
<el-divider v-if="approverConfig.settype==5" content-position="left">发起人自选</el-divider> |
|
|
|
<div v-if="approverConfig.settype==5" class="approver_self"> |
|
|
|
<p>该审批节点设置“发起人自己”后,审批人默认为发起人</p> |
|
|
|
</div> |
|
|
|
<!--连续多级主管--> |
|
|
|
<el-divider v-if="approverConfig.settype==6" content-position="left">连续多级主管</el-divider> |
|
|
|
<div v-if="approverConfig.settype==6" class="approver_manager"> |
|
|
|
<p>审批终点</p> |
|
|
|
<p style="padding-bottom:20px"> |
|
|
|
<el-row :gutter="10"> |
|
|
|
<el-col v-if="isExecutor" :span="6"> |
|
|
|
@ -301,6 +408,7 @@ const updateMatrix = (val:any) =>{ |
|
|
|
</p> |
|
|
|
</div> |
|
|
|
<!--指定审批节点为本节点设置审批人--> |
|
|
|
<el-divider v-if="approverConfig.settype==7" content-position="left">可选节点列表</el-divider> |
|
|
|
<div v-if="approverConfig.settype==7" class="approver_manager"> |
|
|
|
<p>可选节点列表</p> |
|
|
|
<el-radio-group v-model="approverConfig.customNode" class="clear"> |
|
|
|
@ -310,8 +418,8 @@ const updateMatrix = (val:any) =>{ |
|
|
|
</el-radio-group> |
|
|
|
</div> |
|
|
|
<!--根据关联表单设置指定审批字段--> |
|
|
|
<el-divider v-if="approverConfig.settype==8" content-position="left">指定审批字段</el-divider> |
|
|
|
<div v-if="approverConfig.settype==8" class="approver_manager"> |
|
|
|
<p>指定审批字段</p> |
|
|
|
<el-button type="primary" @click="formTableField">添加/修改审批字段</el-button> |
|
|
|
<p class="selected_list"> |
|
|
|
<el-tag v-for="(item,index) in approverConfig.nodeUserList" :key="index" closable type="info" effect="plain" class="tag_us" @close="$func.removeEle(approverConfig.nodeUserList,item,'targetId')">{{item.name}}</el-tag> |
|
|
|
@ -324,40 +432,73 @@ const updateMatrix = (val:any) =>{ |
|
|
|
<option value="1">发起人</option> |
|
|
|
<option value="2">执行人</option> |
|
|
|
</select> |
|
|
|
</div> |
|
|
|
<MatrixPage |
|
|
|
v-if="approverConfig.settype==9" |
|
|
|
v-model:isshow="matrixIsShow" |
|
|
|
:data="matrixFieldList" |
|
|
|
@change="updateMatrix" |
|
|
|
/> |
|
|
|
|
|
|
|
</div> |
|
|
|
<!--补充审批信息--> |
|
|
|
<el-divider v-if="(approverConfig.settype==1&&approverConfig.nodeUserList.length>1)||approverConfig.settype==2||approverConfig.settype==6||(approverConfig.settype==4&&approverConfig.selectMode==2)||approverConfig.settype==8||approverConfig.settype==9" content-position="left">多人审批时采用的审批方式</el-divider> |
|
|
|
<div v-if="(approverConfig.settype==1&&approverConfig.nodeUserList.length>1)||approverConfig.settype==2||approverConfig.settype==6||(approverConfig.settype==4&&approverConfig.selectMode==2)||approverConfig.settype==8||approverConfig.settype==9" class="approver_some"> |
|
|
|
<p>多人审批时采用的审批方式</p> |
|
|
|
<el-radio-group v-model="approverConfig.examineMode" class="clear"> |
|
|
|
<el-radio :label="1">依次审批</el-radio> |
|
|
|
<el-radio v-if="approverConfig.settype!=2" :label="2">会签(须所有审批人同意)</el-radio> |
|
|
|
<el-radio v-if="approverConfig.settype!=2" :label="3">或签(有一位审批人同意即可)</el-radio> |
|
|
|
</el-radio-group> |
|
|
|
</div> |
|
|
|
<el-divider v-if="approverConfig.settype==2||approverConfig.settype==6||approverConfig.settype==9" content-position="left">审批人为空时</el-divider> |
|
|
|
<div v-if="approverConfig.settype==2||approverConfig.settype==6||approverConfig.settype==9" class="approver_some"> |
|
|
|
<p>审批人为空时</p> |
|
|
|
<el-radio-group v-model="approverConfig.noHanderAction" class="clear"> |
|
|
|
<el-radio :label="1">自动审批通过/不允许发起</el-radio> |
|
|
|
<br/> |
|
|
|
<el-radio :label="2">转交给审核管理员</el-radio> |
|
|
|
</el-radio-group> |
|
|
|
</div> |
|
|
|
|
|
|
|
<el-divider content-position="left">退回设置</el-divider> |
|
|
|
<div class="approver_some"> |
|
|
|
<p>退回设置</p> |
|
|
|
<el-radio-group v-model="approverConfig.sendBackNode" class="clear"> |
|
|
|
<el-radio label="beginnode" >发起人</el-radio> |
|
|
|
<el-radio v-for="item in nodeOptional" :key="item.nodeNumber" :label="item.nodeNumber" >{{ item.nodeName }}(编号:{{ item.nodeNumber }})</el-radio> |
|
|
|
</el-radio-group> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<el-divider content-position="left">操作权限</el-divider> |
|
|
|
<div class="info_box"> |
|
|
|
<div class="table_name"><el-text class="mx-1" type="primary">主表</el-text></div> |
|
|
|
<el-table v-if="powerUnitAry.recUnitAry.masterUnitList" :data="powerUnitAry.recUnitAry.masterUnitList" size="small" style="width: 100%; --el-table-border-color: none;" :header-cell-style="{background:'#eef1f6',color:'#606266'}" class="customer-no-border-table" > |
|
|
|
<el-table-column prop="name" label="字段" /> |
|
|
|
<el-table-column label="可见" align="center" width="80"> |
|
|
|
<template #default="scope"> |
|
|
|
<el-checkbox v-model="scope.row.isLook" label="" /> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column label="可编辑" align="center" width="80"> |
|
|
|
<template #default="scope"> |
|
|
|
<el-checkbox v-model="scope.row.isEdit" label="" /> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
</el-table> |
|
|
|
<el-row v-if="powerUnitAry.recUnitAry.sunUnitList" v-for="(item,index) in powerUnitAry.recUnitAry.sunUnitList" :key="index"> |
|
|
|
<el-col :span="24" class="table_name"><el-text class="mx-1" type="primary">{{item.name}}</el-text>子表</el-col> |
|
|
|
<el-col :span="24"> |
|
|
|
<el-table v-if="item.masterUnitList" :data="item.masterUnitList" size="small" style="width: 100%; --el-table-border-color: none;" :header-cell-style="{background:'#eef1f6',color:'#606266'}"> |
|
|
|
<el-table-column prop="name" label="字段" /> |
|
|
|
<el-table-column label="可见" align="center" width="80"> |
|
|
|
<template #default="scope"> |
|
|
|
<el-checkbox v-model="scope.row.isLook" label="" /> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column label="可编辑" align="center" width="80"> |
|
|
|
<template #default="scope"> |
|
|
|
<el-checkbox v-model="scope.row.isEdit" label="" /> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
</el-table> |
|
|
|
</el-col> |
|
|
|
</el-row> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
@ -416,7 +557,7 @@ const updateMatrix = (val:any) =>{ |
|
|
|
} |
|
|
|
} |
|
|
|
.approver_manager,.approver_self_select,.approver_some,.approver_self{ |
|
|
|
border-top: 1px solid #f2f2f2; |
|
|
|
border-top: 0px solid #f2f2f2; |
|
|
|
} |
|
|
|
.approver_self_select, |
|
|
|
.approver_content{ |
|
|
|
@ -487,5 +628,7 @@ const updateMatrix = (val:any) =>{ |
|
|
|
margin-top: 15px; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.info_box{ |
|
|
|
padding: 0 20px; |
|
|
|
} |
|
|
|
</style> |
|
|
|
|