feat : workflow编辑器 无用功能屏蔽

This commit is contained in:
clay
2024-05-13 17:41:17 +08:00
parent 779ebf093a
commit 8d51d68df1
8 changed files with 107 additions and 102 deletions

View File

@@ -310,9 +310,9 @@ const insertNode = debounce((type, parentNode) => {
case 'DELAY': case 'DELAY':
insertDelayNode(children); insertDelayNode(children);
break; break;
case 'TRIGGER': // case 'TRIGGER':
insertTriggerNode(children); // insertTriggerNode(children);
break; // break;
case 'CONDITIONS': case 'CONDITIONS':
insertConditionsNode(children); insertConditionsNode(children);
break; break;

View File

@@ -31,12 +31,12 @@
</el-icon> </el-icon>
<span>延迟等待</span> <span>延迟等待</span>
</div> </div>
<div @click="addTriggerNode"> <!-- <div @click="addTriggerNode">-->
<el-icon style="color:#15BC83;"> <!-- <el-icon style="color:#15BC83;">-->
<SetUp/> <!-- <SetUp/>-->
</el-icon> <!-- </el-icon>-->
<span>触发器</span> <!-- <span>触发器</span>-->
</div> <!-- </div>-->
</div> </div>
<template #reference> <template #reference>
<!-- <el-button :icon="Plus" slot="reference" type="primary" @click="visible = !visible" size="small"--> <!-- <el-button :icon="Plus" slot="reference" type="primary" @click="visible = !visible" size="small"-->

View File

@@ -39,7 +39,7 @@
<el-input-number :min="1" :max="20" :step="1" size="mini" <el-input-number :min="1" :max="20" :step="1" size="mini"
v-model="nodeProps.leader.level"></el-input-number> v-model="nodeProps.leader.level"></el-input-number>
<span> 级主管</span> <span> 级主管</span>
<div style="color: #409EFF; font-size: small;">👉 直接主管为 1 级主管</div> <div style="color: #409EFF; font-size: small;">直接主管为 1 级主管</div>
</el-form-item> </el-form-item>
</div> </div>
<div v-else-if="nodeProps.assignedType === 'ROLE'"> <div v-else-if="nodeProps.assignedType === 'ROLE'">
@@ -56,12 +56,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
<div v-else> <!-- <div v-else>-->
<span class="item-desc">发起人自己作为审批人进行审批</span> <!-- <span class="item-desc">发起人自己作为审批人进行审批</span>-->
</div> <!-- </div>-->
</el-form-item> </el-form-item>
<el-divider></el-divider> <el-divider></el-divider>
<el-form-item label="👤 审批人为空时" prop="text" class="line-mode"> <el-form-item label="审批人为空时" prop="text" class="line-mode">
<el-radio-group v-model="nodeProps.nobody.handler"> <el-radio-group v-model="nodeProps.nobody.handler">
<el-radio label="TO_PASS">自动通过</el-radio> <el-radio label="TO_PASS">自动通过</el-radio>
<el-radio label="TO_REFUSE">自动驳回</el-radio> <el-radio label="TO_REFUSE">自动驳回</el-radio>
@@ -80,7 +80,7 @@
<div v-if="showMode"> <div v-if="showMode">
<el-divider/> <el-divider/>
<el-form-item label="👩‍👦‍👦 多人审批时审批方式" prop="text" class="approve-mode"> <el-form-item label="多人审批时审批方式" prop="text" class="approve-mode">
<el-radio-group v-model="nodeProps.mode"> <el-radio-group v-model="nodeProps.mode">
<el-radio label="NEXT">会签 按选择顺序审批每个人必须同意</el-radio> <el-radio label="NEXT">会签 按选择顺序审批每个人必须同意</el-radio>
<el-radio label="AND">会签可同时审批每个人必须同意</el-radio> <el-radio label="AND">会签可同时审批每个人必须同意</el-radio>
@@ -90,13 +90,13 @@
</div> </div>
<el-divider>高级设置</el-divider> <el-divider>高级设置</el-divider>
<el-form-item label="✍ 审批同意时是否需要签字" prop="text"> <!-- <el-form-item label="✍ 审批同意时是否需要签字" prop="text">-->
<el-switch inactive-text="不用" active-text="需要" v-model="nodeProps.sign"></el-switch> <!-- <el-switch inactive-text="不用" active-text="需要" v-model="nodeProps.sign"></el-switch>-->
<el-tooltip class="item" effect="dark" content="如果全局设置了需要签字,则此处不生效" placement="top-start"> <!-- <el-tooltip class="item" effect="dark" content="如果全局设置了需要签字,则此处不生效" placement="top-start">-->
<i class="el-icon-question" style="margin-left: 10px; font-size: medium; color: #b0b0b1"></i> <!-- <i class="el-icon-question" style="margin-left: 10px; font-size: medium; color: #b0b0b1"></i>-->
</el-tooltip> <!-- </el-tooltip>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="审批期限(为 0 则不生效)" prop="timeLimit"> <el-form-item label="审批期限(为 0 则不生效)" prop="timeLimit">
<el-input style="width: 180px;" placeholder="时长" type="number" <el-input style="width: 180px;" placeholder="时长" type="number"
v-model="nodeProps.timeLimit.timeout.value"> v-model="nodeProps.timeLimit.timeout.value">
<el-select style="width: 75px;" v-model="nodeProps.timeLimit.timeout.unit" slot="append" placeholder="请选择" filterable> <el-select style="width: 75px;" v-model="nodeProps.timeLimit.timeout.unit" slot="append" placeholder="请选择" filterable>
@@ -122,54 +122,54 @@
</span> </span>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="🙅‍ 如果审批被驳回 👇"> <!-- <el-form-item label="🙅‍ 如果审批被驳回 👇">-->
<el-radio-group v-model="nodeProps.refuse.type"> <!-- <el-radio-group v-model="nodeProps.refuse.type">-->
<el-radio label="TO_INITIAL">重新开始流程</el-radio> <!-- <el-radio label="TO_INITIAL">重新开始流程</el-radio>-->
<el-radio label="TO_BEFORE">驳回到上级审批节点</el-radio> <!-- <el-radio label="TO_BEFORE">驳回到上级审批节点</el-radio>-->
<el-radio label="TO_NODE">驳回到指定节点</el-radio> <!-- <el-radio label="TO_NODE">驳回到指定节点</el-radio>-->
</el-radio-group> <!-- </el-radio-group>-->
<div v-if="nodeProps.refuse.type === 'TO_NODE'"> <!-- <div v-if="nodeProps.refuse.type === 'TO_NODE'">-->
<span>指定节点:</span> <!-- <span>指定节点:</span>-->
<el-select style="margin-left: 10px; width: 150px;" placeholder="选择跳转步骤" size="small" <!-- <el-select style="margin-left: 10px; width: 150px;" placeholder="选择跳转步骤" size="small"-->
v-model="nodeProps.refuse.target" filterable> <!-- v-model="nodeProps.refuse.target" filterable>-->
<el-option v-for="(node, index) in nodeOptions" :key="index" :label="node.name" <!-- <el-option v-for="(node, index) in nodeOptions" :key="index" :label="node.name"-->
:value="node.id"></el-option> <!-- :value="node.id"></el-option>-->
</el-select> <!-- </el-select>-->
</div> <!-- </div>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="自定义监听器"> <!-- <el-form-item label="自定义监听器">-->
<div slot="label"> <!-- <div slot="label">-->
<span style="margin-left: 20px">使用自定义监听器: </span> <!-- <span style="margin-left: 20px">使用自定义监听器: </span>-->
<!-- <el-switch v-model="config.listener.state" @change="getListener"></el-switch>--> <!-- &lt;!&ndash; <el-switch v-model="config.listener.state" @change="getListener"></el-switch>&ndash;&gt;-->
</div> <!-- </div>-->
<div v-if="config.listener.state"> <!-- <div v-if="config.listener.state">-->
<div slot="label"> <!-- <div slot="label">-->
<span style="margin-right: 10px">设置监听器</span> <!-- <span style="margin-right: 10px">设置监听器</span>-->
<el-button type="primary" @click="addListener(config.listener.list)" link> + 添加</el-button> <!-- <el-button type="primary" @click="addListener(config.listener.list)" link> + 添加</el-button>-->
</div> <!-- </div>-->
<div v-for="(listen, index) in config.listener.list" :key="index"> <!-- <div v-for="(listen, index) in config.listener.list" :key="index">-->
<el-input v-if="listen.isSys" placeholder="监听器名称" :disabled="true" size="small" style="width: 100px;" <!-- <el-input v-if="listen.isSys" placeholder="监听器名称" :disabled="true" size="small" style="width: 100px;"-->
v-model="listen.listenerName"/> <!-- v-model="listen.listenerName"/>-->
<el-input v-if="!listen.isSys" placeholder="监听器名称" size="small" style="width: 100px;" <!-- <el-input v-if="!listen.isSys" placeholder="监听器名称" size="small" style="width: 100px;"-->
v-model="listen.listenerName"/> <!-- v-model="listen.listenerName"/>-->
<el-radio-group size="small" style="margin: 0 5px;" @change="typeChange(listen)" v-model="listen.isSys"> <!-- <el-radio-group size="small" style="margin: 0 5px;" @change="typeChange(listen)" v-model="listen.isSys">-->
<el-radio-button :label="true">内置</el-radio-button> <!-- <el-radio-button :label="true">内置</el-radio-button>-->
<el-radio-button :label="false">自定义</el-radio-button> <!-- <el-radio-button :label="false">自定义</el-radio-button>-->
</el-radio-group> <!-- </el-radio-group>-->
<el-select v-if="listen.isSys" style="width: 180px;" v-model="listen.listenerValue" size="small" <!-- <el-select v-if="listen.isSys" style="width: 180px;" v-model="listen.listenerValue" size="small"-->
@change="listenerOptionChange(listen)" <!-- @change="listenerOptionChange(listen)"-->
placeholder="请选择表单字段" filterable> <!-- placeholder="请选择表单字段" filterable>-->
<el-option v-for="option in listenerOption" :key="option.value" :label="option.label" <!-- <el-option v-for="option in listenerOption" :key="option.value" :label="option.label"-->
:value="option.value"/> <!-- :value="option.value"/>-->
</el-select> <!-- </el-select>-->
<!-- <el-input v-if="listen.isSys" placeholder="请设置字段值" size="small" v-model="listen.listenerValue" style="width: 180px;"/>--> <!-- &lt;!&ndash; <el-input v-if="listen.isSys" placeholder="请设置字段值" size="small" v-model="listen.listenerValue" style="width: 180px;"/>&ndash;&gt;-->
<el-button v-if="!listen.isSys" type="primary" size="small" @click="settingListener(listen)" link>设置</el-button> <!-- <el-button v-if="!listen.isSys" type="primary" size="small" @click="settingListener(listen)" link>设置</el-button>-->
<el-button @click="delListener(config.listener.list, index)" <!-- <el-button @click="delListener(config.listener.list, index)"-->
class="el-icon-delete" type="primary" <!-- class="el-icon-delete" type="primary"-->
style="margin-left: 5px; color: #c75450;" link/> <!-- style="margin-left: 5px; color: #c75450;" link/>-->
</div> <!-- </div>-->
</div> <!-- </div>-->
</el-form-item> <!-- </el-form-item>-->
</el-form> </el-form>
<!-- <!--
<el-dialog custom-class="custom-dialog" class="border" width="600px" title="定义监听器设置" <el-dialog custom-class="custom-dialog" class="border" width="600px" title="定义监听器设置"
@@ -231,11 +231,12 @@ const orgPickerSelected = ref([])
const approvalTypes = reactive([ const approvalTypes = reactive([
{name: "指定人员", type: "ASSIGN_USER"}, {name: "指定人员", type: "ASSIGN_USER"},
{name: "发起人自选", type: "SELF_SELECT"}, {name: "发起人自选", type: "SELF_SELECT"},
{name: "连续多级主管", type: "LEADER_TOP"}, // {name: "连续多级主管", type: "LEADER_TOP"},
{name: "主管", type: "LEADER"}, {name: "主管", type: "LEADER"},
{name: "角色", type: "ROLE"}, // {name: "角色", type: "ROLE"},
{name: "发起人自己", type: "SELF"}, // {name: "发起人自己", type: "SELF"},
{name: "表单内联系人", type: "FORM_USER"} // {name: "表单内联系人", type: "FORM_USER"},
{name: "矩阵审批", type: "MATRIX_APPROVAL"},
]) ])
const listenerOption = ref([]) const listenerOption = ref([])
const selectListen = ref({}) const selectListen = ref({})

View File

@@ -121,7 +121,7 @@ const users = ref([])
// const orgType = ref('user') // const orgType = ref('user')
const showOrgSelect = ref(false) const showOrgSelect = ref(false)
const groupNames = ref(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']) const groupNames = ref(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'])
const supportTypes = ref([ValueType.number, ValueType.string, ValueType.date, ValueType.dateRange, ValueType.dept, ValueType.user]) const supportTypes = ref([ValueType.number, ValueType.string])
const explains = ref( const explains = ref(
[ [
{label: '等于', value: '='}, {label: '等于', value: '='},
@@ -195,7 +195,7 @@ const selectUser = (value, orgType) => {
const filterConditionMosr = (list) => { const filterConditionMosr = (list) => {
processFromPerms.value.forEach((item) => { processFromPerms.value.forEach((item) => {
console.log(item) console.log(item)
if (item.required){ if (item.required && supportTypes.value.indexOf(item.valueType) > -1){
list.push({title: item.title, id: item.id, valueType: item.valueType}) list.push({title: item.title, id: item.id, valueType: item.valueType})
} }
}) })

View File

@@ -18,24 +18,24 @@
</template> </template>
</el-popover> </el-popover>
</el-form-item> </el-form-item>
<el-form-item label="条件组关系" label-width="150px"> <!-- <el-form-item label="条件组关系" label-width="150px">-->
<el-switch v-model="selectedNode.props.groupsType" active-color="#409EFF" <!-- <el-switch v-model="selectedNode.props.groupsType" active-color="#409EFF"-->
inactive-color="#c1c1c1" active-value="AND" inactive-value="OR" <!-- inactive-color="#c1c1c1" active-value="AND" inactive-value="OR"-->
active-text="" inactive-text=""> <!-- active-text="且" inactive-text="或">-->
</el-switch> <!-- </el-switch>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="条件组表达式"> <!-- <el-form-item label="条件组表达式">-->
<el-input v-model="config.expression" placeholder="输入条件组关系表达式 &为与,|为或"/> <!-- <el-input v-model="config.expression" placeholder="输入条件组关系表达式 &为与,|为或"/>-->
<span class="item-desc">使用表达式构建复杂逻辑例如: (A & B) | C</span> <!-- <span class="item-desc">使用表达式构建复杂逻辑例如: (A & B) | C</span>-->
</el-form-item> <!-- </el-form-item>-->
</el-form> </el-form>
<div> <!-- <div>-->
<el-button type="primary" icon="Plus" style="margin: 0 15px 15px 0" round <!-- <el-button type="primary" icon="Plus" style="margin: 0 15px 15px 0" round-->
@click="addConditionGroup"> <!-- @click="addConditionGroup">-->
添加条件组 <!-- 添加条件组-->
</el-button> <!-- </el-button>-->
<span class="item-desc">只有必填选项才能作为审批条件</span> <!-- <span class="item-desc">只有必填选项才能作为审批条件</span>-->
</div> <!-- </div>-->
<group-item/> <group-item/>
</template> </template>

View File

@@ -46,7 +46,8 @@ const visible = ref(false)
const name = computed(() => { const name = computed(() => {
switch (processStore.getSelectedNode().type) { switch (processStore.getSelectedNode().type) {
case 'ROOT': case 'ROOT':
return '设置发起人'; // return '设置发起人';
return '节点设置';
case 'APPROVAL': case 'APPROVAL':
return '设置审批人'; return '设置审批人';
case 'CC': case 'CC':

View File

@@ -1,10 +1,10 @@
<template> <template>
<div> <!-- <div>-->
<p class="desc">选择能发起该审批的人员/部门不选则默认开放给所有人</p> <!-- <p class="desc">选择能发起该审批的人员/部门不选则默认开放给所有人</p>-->
<el-button size="mini" @click="selectOrg" icon="el-icon-plus" type="primary" round>请选择</el-button> <!-- <el-button size="mini" @click="selectOrg" icon="el-icon-plus" type="primary" round>请选择</el-button>-->
<org-items v-model="select"/> <!-- <org-items v-model="select"/>-->
<org-picker title="请选择可发起本审批的人员/部门" multiple ref="orgPicker" :selected="select" @ok="selected"/> <!-- <org-picker title="请选择可发起本审批的人员/部门" multiple ref="orgPicker" :selected="select" @ok="selected"/>-->
</div> <!-- </div>-->
</template> </template>

View File

@@ -12,6 +12,7 @@
import Node from './Node.vue' import Node from './Node.vue'
import {computed, defineExpose} from 'vue' import {computed, defineExpose} from 'vue'
import {Stamp} from '@element-plus/icons-vue' import {Stamp} from '@element-plus/icons-vue'
const emit = defineEmits(['insertNode', 'selected', 'delNode']) const emit = defineEmits(['insertNode', 'selected', 'delNode'])
const props = defineProps({ const props = defineProps({
config: { config: {
@@ -80,7 +81,7 @@ const content = computed(() => {
if (text && text.title) { if (text && text.title) {
return `表单(${text.title})内的人员` return `表单(${text.title})内的人员`
} else { } else {
return '该表单已被移除😥' return '该表单已被移除'
} }
} }
case "ROLE": case "ROLE":
@@ -91,8 +92,10 @@ const content = computed(() => {
} else { } else {
return '指定角色(未设置)' return '指定角色(未设置)'
} }
case "MATRIX_APPROVAL":
return '矩阵审批'
default: default:
return '未知设置项😥' return '未知设置项'
} }
}) })