Browse Source

流程权限控制板

yjf_v3
超级管理员 2 years ago
parent
commit
b750f64a7b
  1. 1
      src/api/DesignForm/type.ts
  2. 2
      src/api/DesignForm/types.ts
  3. 17
      src/api/workflowapi/index.ts
  4. 5
      src/components/DesignForm/formControlAttr.vue
  5. 10
      src/components/workflow/dialog/matrix.vue
  6. 177
      src/components/workflow/drwer/approverDrawer.vue
  7. 152
      src/components/workflow/drwer/promoterDrawer.vue
  8. 82
      src/views/sysworkflow/lowcodepage/lowCodeFormPage.vue
  9. 29
      src/views/sysworkflow/lowcodepage/pageDesignes.vue
  10. 40
      src/views/sysworkflow/lowcodepage/workFlow.vue

1
src/api/DesignForm/type.ts

@ -133,6 +133,7 @@ export interface hanziToPinyin{
title:string;
types:number;
connector:string;
formJson?:string;
}
//获取工作流步进节点
export interface nodeFlow extends enableVersionId{

2
src/api/DesignForm/types.ts

@ -112,7 +112,7 @@ export interface formData{
labelStyle:{},
inputStyle:{}
};
purview?:any;
purview?:any[];
}
//表单基本信息
export interface formTableInfo{

17
src/api/workflowapi/index.ts

@ -111,3 +111,20 @@ export function openFormFlow(data: any) {
data: data
});
}
//获取所有组件状态
export function analysisForm(data: any) {
return request({
url: '/systemapi/task_flow/analysisForm',
method: 'post',
data: data
});
}
//编辑节点权限
export function setFlowFormKeyPower(data: any) {
return request({
url: '/systemapi/task_flow/setFlowFormKeyPower',
method: 'post',
data: data
});
}

5
src/components/DesignForm/formControlAttr.vue

@ -33,6 +33,7 @@
formConfig: any
formOtherData: any
customerformid: number | string,
formInfo: any
}>(),
{
formConfig: () => {
@ -56,7 +57,7 @@
const { formConfig, formData } = toRefs(props)
const store = useDesignFormStore() as any
const controlData = computed(() => {
// console.log("----------------->",store)
console.log("注册自定义事件----------------->",props.formInfo)
// console.log("--------1--------->",store.controlAttr)
return store.controlAttr
})
@ -926,7 +927,7 @@
break
case 'labelNameVal':
if(val != ""){
chineseToPinyin({title:val,types:8,connector:""})
chineseToPinyin({title:val,types:8,connector:"",formJson:JSON.stringify(props.formInfo)})
.then((data:any)=>{
if(data.code == 0){
if(data.data != ""){

10
src/components/workflow/dialog/matrix.vue

@ -146,13 +146,16 @@ onMounted(()=>{
})
</script>
<template>
<div>
<el-divider content-position="left">矩阵选项</el-divider>
<el-descriptions
v-if="isShow"
title="权限矩阵"
title=""
direction="vertical"
:column="2"
:size="size"
border
class="suojin"
>
<el-descriptions-item label="可用矩阵" width="50%">
<el-row v-loading="loading">
@ -169,6 +172,7 @@ onMounted(()=>{
</el-row>
</el-descriptions-item>
<el-descriptions-item label="矩阵选项" width="50%">
<el-row v-loading="loadingVal">
<el-col :span="24">
@ -197,6 +201,7 @@ onMounted(()=>{
</el-row>
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<style lang='scss' scoped>
.materBody{
@ -212,4 +217,7 @@ onMounted(()=>{
color:#409EFF;
}
}
.suojin{
padding: 0px 20px;
}
</style>

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

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

152
src/components/workflow/drwer/promoterDrawer.vue

@ -9,6 +9,8 @@ import { AnalysisForm } from '@/components/workflow/drwer/analysisForm'
import $func from '@/utils/workflow/index'
import { useStore } from '@/store/workflow/index'
import { analysisForm,setFlowFormKeyPower } from '@/api/workflowapi/index'
const props = defineProps({
formData:{
@ -16,8 +18,19 @@ const props = defineProps({
default(){
return {}
}
}
},
formKey:{
type:String,
default:""
},
formVersion:{
type:String,
default:""
},
});
const emits = defineEmits<{
(e: 'update:formData', val: any): void
}>()
const formData = computed({
get() {
@ -28,6 +41,9 @@ const formData = computed({
}
});
//
// const
let flowPermission = ref([])
let promoterVisible = ref(false)
let checkedList = ref([])
@ -36,8 +52,6 @@ let store = useStore()
let { setPromoter, setFlowPermission } = store
let promoterDrawer = computed(()=> store.promoterDrawer)
let flowPermission1 = computed(()=> store.flowPermission1)
let approverConfig1 = computed(():any=> store.approverConfig1)
let visible = computed({
get() {
return promoterDrawer.value
@ -64,28 +78,100 @@ const savePromoter = () => {
flag: true,
id: flowPermission1.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 == "begin"){
item.powerAry=powerAry
isNew = false
}
});
if(isNew){
formData.value.purview.push({
nodeKey: "begin",
powerAry:powerAry
})
}
}else{
formData.value.purview = [{
nodeKey: "begin",
powerAry:powerAry
}]
}
// formData.value.purview.push({
// nodeKey: "begin",
// powerAry:powerAry
// }) {{props.formKey}}=>{{props.formVersion}}
let sendInfo: any = {
formKey:props.formKey.toString(),
formVersion:props.formVersion.toString(),
formData:JSON.stringify(formData.value),
formPower:JSON.stringify(formData.value.purview)
}
// console.log("sendInfo",sendInfo)
setFlowFormKeyPower(sendInfo)
// console.log("formDataAll",formData)
// console.log("formData",formData.value.purview)
closeDrawer()
}
const closeDrawer = () => {
setPromoter(false)
}
const powerUnitAry = ref<any>({
nodeKey:"",
recUnitAry:{
masterUnitList:[],
sunUnitList:[],
unitAllKey:[],
unitAllState:[]
}
})
/**
@ 作者: 秦东
@ 时间: 2024-03-13 08:24:54
@ 功能: 解析表单
*/
const jieForm = () => {
AnalysisForm(formData.value)
analysisForm({nodeKey:"begin",nodeJson:JSON.stringify(formData.value)})
.then((data)=>{
if(data.code == 0){
powerUnitAry.value = data.data
}
})
}
onMounted(() => {
watch(()=>visible.value,(val:boolean)=>{
if(val){
jieForm();
}
})
</script>
<template>
<el-drawer v-model="visible" :append-to-body="true" title="发起人" class="set_promoter" :show-close="false" :size="550" :before-close="savePromoter">
<el-drawer v-model="visible" :append-to-body="true" title="发起人" class="set_promoter" :show-close="false" :size="550" :before-close="closeDrawer">
<div class="demo-drawer__content">
<div class="promoter_content drawer_content">
@ -94,17 +180,43 @@ onMounted(() => {
<p>{{ $func.arrToStr(flowPermission) || '所有人' }}</p>
<el-button type="primary" @click="addPromoter">添加/修改发起人</el-button>
</div>
<br />
-----------------------------------------
<br />
{{approverConfig1}}<br />
<br />
-----------------------------------------
<br />
<!-- {{approverConfig1.value.nodeNumber}} <br />
{{approverConfig1.value.nodeName}} -->
<el-divider content-position="left">操作权限</el-divider>
{{formData}}
<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>
<!-- {{formData}} -->
</div>
<div class="demo-drawer__footer clear">
@ -138,4 +250,8 @@ onMounted(() => {
}
}
}
.table_name{
padding : 10px 0
}
</style>

82
src/views/sysworkflow/lowcodepage/lowCodeFormPage.vue

@ -30,6 +30,7 @@ const formConfigCont = reactive<customerFormConfig>({
})
const loading = ref(false)
const pageDesignIsWrite = ref(true);
const flowIsWrite = ref(true);
const emits = defineEmits(["refreshPage"]);
const drawerOpenOrClose = ref(true);
const tabsActive = ref(1);
@ -50,7 +51,7 @@ const state = reactive<formStruct>({
labelStyle:{},
inputStyle:{}
},
purview:{}
purview:[]
},
editor: {},
loading: false,
@ -63,7 +64,7 @@ const state = reactive<formStruct>({
formName: formConfigCont.formName
}
})
//ID
const formKeyStr = computed({
get() {
return props.formKey
@ -72,14 +73,15 @@ const formKeyStr = computed({
emits('update:formKey', val)
}
});
//ID
const formVersion = ref<string>("")
const judgeFormIsEdit = (val:boolean) => {
pageDesignIsWrite.value = val;
}
const handleClick = (tab: TabsPaneContext, event: Event) =>{
console.log(tabsActive.value,tab.paneName, event)
console.log("选项卡--->",creetTabsActive.value,tab.paneName, event)
switch (tab.paneName) {
case 2:
if (creetTabsActive.value != 2){
@ -90,16 +92,21 @@ const handleClick = (tab: TabsPaneContext, event: Event) =>{
break;
case 3:
if (creetTabsActive.value != 3){
PreOperation()
if(PreOperation()){
creetTabsActive.value = tab.paneName
}
}
break;
case 4:
if (creetTabsActive.value != 4){
PreOperation()
if(PreOperation()){
creetTabsActive.value = tab.paneName
}
}
break;
default:
tabsActive.value = 1
creetTabsActive.value = 1
break;
}
}
@ -111,29 +118,51 @@ const handleClick = (tab: TabsPaneContext, event: Event) =>{
const PreOperation = () =>{
switch (creetTabsActive.value) {
case 2:
if(flowIsWrite.value){
ElMessageBox.alert('你设置的流程还未保存!', '温馨提示!', {
confirmButtonText: 'OK',
callback: (action: Action) => {
tabsActive.value = 2
creetTabsActive.value = 2
}
});
flowIsWrite.value = true
}else{
creetTabsActive.value = tabsActive.value
console.log("选项卡-1-->",tabsActive.value,creetTabsActive.value)
}
return true;
break;
case 3:
return true;
break;
case 4:
return true;
break;
default:
// if(pageDesignIsWrite.value){
// ElMessageBox.alert('', '', {
// confirmButtonText: 'OK',
// callback: (action: Action) => {
// tabsActive.value = 1
// }
// });
// }else{
// creetTabsActive.value = tabsActive.value
// }
if(pageDesignIsWrite.value){
ElMessageBox.alert('你设置的表单还未保存!', '温馨提示!', {
confirmButtonText: 'OK',
callback: (action: Action) => {
tabsActive.value = 1
creetTabsActive.value = 1
}
});
pageDesignIsWrite.value = true
}else{
creetTabsActive.value = tabsActive.value
tabsActive.value = 1
}
return true;
break;
}
}
const judgeFlowIsEdit = (val:boolean) => {
flowIsWrite.value = val;
// creetTabsActive.value = 2
}
const closeFormPage = () => {
emits("refreshPage","formPage");
@ -161,24 +190,27 @@ const runNextWindows = (val:number) => {
tabsActive.value = val
}
onMounted(()=>{
formKeyStr.value = "13"
formKeyStr.value = "16"
})
</script>
<template>
<div class="drawerClass">
<el-drawer v-model="drawerOpenOrClose" title="设置/编辑自定义表单" :with-header="false" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerWith">
<el-tabs v-model="tabsActive" @tab-click="handleClick" stretch class="tabsMain">
<el-tab-pane label="页面设计" :name="1">
<PageDesignEs v-model:state="state" v-model:form-key="formKeyStr" :formconfigcont="formConfigCont" @judgeFormIsEdit="judgeFormIsEdit" @runNextWindows="runNextWindows" @closeFormPage="closeFormPage" />
{{creetTabsActive}} == {{tabsActive}}
<PageDesignEs v-model:state="state" v-model:form-key="formKeyStr" v-model:form-version="formVersion" :formconfigcont="formConfigCont" @judgeFormIsEdit="judgeFormIsEdit" @runNextWindows="runNextWindows" @closeFormPage="closeFormPage" />
</el-tab-pane>
<el-tab-pane label="流程设计" :name="2">
<WorkFlow v-model:state="state" v-model:form-key="formKeyStr" @judgeFormIsEdit="judgeFormIsEdit" @runNextWindows="runNextWindows" @closeFormPage="closeFormPage" />
{{creetTabsActive}} == {{tabsActive}}
<WorkFlow v-model:state="state" v-model:form-key="formKeyStr" v-model:form-version="formVersion" @judgeFlowIsEdit="judgeFlowIsEdit" @runNextWindows="runNextWindows" @closeFormPage="closeFormPage" />
</el-tab-pane>
<el-tab-pane label="列表设计" :name="3">{{formKeyStr}}</el-tab-pane>
<el-tab-pane label="列表设计" :name="3">{{creetTabsActive}} == {{tabsActive}}</el-tab-pane>
<el-tab-pane label="页面设置" :name="4"></el-tab-pane>
</el-tabs>
</el-drawer>
</div>
</div>
</template>
<style lang='scss' scoped>
.drawerClass{

29
src/views/sysworkflow/lowcodepage/pageDesignes.vue

@ -30,6 +30,10 @@ const props = defineProps({
type:String,
default:""
},
formVersion:{
type:String,
default:""
},
formconfigcont:{
type:Object,
default(){
@ -47,6 +51,7 @@ const props = defineProps({
const emits = defineEmits<{
(e: 'update:state', val: formStruct): void
(e: 'update:formKey', val: string): void
(e: 'update:formVersion', val: string): void
(e: 'judgeFormIsEdit', val: boolean): void
(e: 'runNextWindows', val: number): void
(e: 'closeFormPage'): void
@ -109,6 +114,7 @@ const editversionstaus = (id:string) =>{
data.forEach((item:any) => {
if(item.status == 1){
versionId.value = item.id.toString()
emits('update:formVersion', item.id.toString())
}
});
}
@ -221,9 +227,12 @@ const saveOtherData = () => {
// emits("handlequery");
// emits("update:draweropenclose", false);
emits("runNextWindows",2);
versionId.value = res.data.id.toString()
emits('update:formVersion', res.data.id.toString())
//
store.setActiveKey('')
store.setControlAttr({})
getInitData()
}else{
ElMessage({
message: res.msg || '保存失败!',
@ -278,13 +287,16 @@ const saveDataNew = () => {
message: res.message || '保存成功!',
type: 'success'
})
emits('update:formKey', res.data.id)
emits('update:formKey', res.data.customerFormCont.id)
emits('update:formVersion', res.data.formVersion.id.toString())
versionId.value = res.data.formVersion.id.toString()
// emits("handlequery");
// emits("update:draweropenclose", false);
emits("runNextWindows",2);
//
store.setActiveKey('')
store.setControlAttr({})
getInitData()
}else{
ElMessage({
message: res.msg || '保存失败!',
@ -488,6 +500,14 @@ const getInitData = () => {
if (result.mastesform) {
state.value.formData = stringToObj(result.mastesform)
}
console.log("初始设计搜索时",state.value.formData)
if(result.mastesformjson){
let kjdkjksd = string2json(result.mastesformjson)
console.log("初始设计搜索时-begin-->",state.value.formData.purview)
state.value.formData.purview=kjdkjksd.purview
console.log("初始设计搜索时--->",kjdkjksd)
}
console.log("初始设计搜索时--end->",state.value.formData)
state.value.formDict = string2json(result.dict)
//
state.value.formOtherData.source = result.source
@ -500,6 +520,7 @@ const getInitData = () => {
//
formControlAttrEl.value.getFormFieldBySource(result.source)
}
emits('judgeFormIsEdit', false)
}else{
ElMessage.error(res.msg || '加载异常')
}
@ -514,6 +535,7 @@ const getInitData = () => {
data.forEach((item:any) => {
if(item.status == 1){
versionId.value = item.id.toString()
emits('update:formVersion', item.id.toString())
}
});
}
@ -532,6 +554,10 @@ onMounted(() => {
}
getInitData()
})
//
// watch(() =>versionId.value ,(val:string)=>{
// emits('update:formVersion', val)
// })
</script>
<template>
<div class="design_container">
@ -563,6 +589,7 @@ onMounted(() => {
:form-config="state.formData.config"
:customerformid="formKeyVal"
:form-list="state.formData.list"
:form-info="state.formData"
@open-dialog="openAceEditDrawer"
/>
<ace-drawer

40
src/views/sysworkflow/lowcodepage/workFlow.vue

@ -17,6 +17,10 @@ const props = defineProps({
type:String,
default:""
},
formVersion:{
type:String,
default:""
},
state:{
type:Object,
default(){
@ -27,7 +31,9 @@ const props = defineProps({
const emits = defineEmits<{
(e: 'update:state', val: formStruct): void
(e: 'judgeFormIsEdit', val: boolean): void
(e: 'update:formKey', val: string): void
(e: 'update:formVersion', val: string): void
(e: 'judgeFlowIsEdit', val: boolean): void
(e: 'runNextWindows', val: number): void
(e: 'closeFormPage'): void
}>()
@ -66,7 +72,8 @@ let processConfig = ref<any>({}); //工作流信息
let directorMaxLeveling = ref<number>(0); //
let workFlowDef = ref({}); //
let tipList = ref<any>([]); //
let tipVisible = ref(false);
let oneIsTrue = true;
/**
@ 作者: 秦东
@ 时间: 2024-03-11 16:33:49
@ -85,7 +92,9 @@ const createFormFlow = () =>{
openOrCloseFormFlow(1)
getFlowVerList()
flowIsTrue.value = true
emits('judgeFlowIsEdit', true)
}
emits('judgeFlowIsEdit', true)
// flowIsTrue.value = true
}
const openOrCloseFormFlow = (val:number) => {
@ -108,6 +117,7 @@ const initWorkFlowData = async() => {
flowPermission.value = flowPermissiones;
directorMaxLeveling = levels;
workFlowDef.value = workName;
setTableId(tableId);
// console.log("max--1->",data)
// console.log("max--6->",tableId)
@ -324,6 +334,7 @@ const saveSet = async () => {
.then((data:any) => {
if(data.code == 0){
ElMessage.success("设置成功");
emits('judgeFlowIsEdit', false)
emits("runNextWindows",3);
// clearCanvas(1);
}
@ -366,6 +377,7 @@ const saveEdit =()=>{
ElMessage.success("设置成功");
// emits("update:openDrawer", false);
// clearCanvas(1);
emits('judgeFlowIsEdit', false)
emits("runNextWindows",3);
}
})
@ -397,6 +409,7 @@ const saveNew = () => {
.then((data:any) => {
if(data.code == 0){
ElMessage.success("设置成功");
emits('judgeFlowIsEdit', false)
emits("runNextWindows",3);
}
})
@ -404,6 +417,19 @@ const saveNew = () => {
getFlowVerList()
})
}
watch(()=>nodeConfig,()=>{
console.log("变动流程")
if(oneIsTrue){
oneIsTrue = false;
emits('judgeFlowIsEdit', false)
}else{
emits('judgeFlowIsEdit', true)
}
},
{
deep: true
})
/**
@ 作者: 秦东
@ 时间: 2024-03-12 15:49:35
@ -411,9 +437,11 @@ const saveNew = () => {
*/
const closwFormFlow = () => {
flowIsTrue.value = false;
emits('judgeFlowIsEdit', false)
openOrCloseFormFlow(2)
}
onMounted(()=>{
console.log("判断是否已经存在工作流以及是否开启",formKeyVal.value)
if(formKeyVal.value == ""){
flowIsTrue.value = false;
}else{
@ -422,9 +450,11 @@ onMounted(()=>{
console.log("判断是否已经存在工作流以及是否开启",data)
if(data.data.isOpen == 1){
flowIsTrue.value = true;
emits('judgeFlowIsEdit', false)
getFlowVerList()
}else{
flowIsTrue.value = false;
emits('judgeFlowIsEdit', false)
}
})
}
@ -502,15 +532,15 @@ onMounted(()=>{
</div>
</section>
<errorDialog v-model:visible="tipVisible" :list="tipList" />
<promoterDrawer v-model:form-data="state.formData" />
<approverDrawer :directormaxlevel="directorMaxLeveling" :node-config="nodeConfig" :is-form-flow="isFormFlow" :customer-form-key="formKeyVal" />
<promoterDrawer v-model:form-data="state.formData" :form-key="formKeyVal" :form-version="formVersion" />
<approverDrawer :directormaxlevel="directorMaxLeveling" :node-config="nodeConfig" :is-form-flow="isFormFlow" :customer-form-key="formKeyVal" v-model:form-data="state.formData" :form-version="formVersion" />
<copyerDrawer />
<conditionDrawer :is-form-flow="isFormFlow" :customer-form-key="formKeyVal" />
</el-col>
</el-row>
<div v-else class="flow_work_begin">
<el-result title="" sub-title="">
<template #icon>{{formKeyVal}}<br>{{state}} <br>
<template #icon>
流程可实现需要多人流转的业务场景<br>绘制流程图设定数据流转方式即可搭建线上工作流<br><br>
<el-image
:src="FlowImgSrc"

Loading…
Cancel
Save