Merge pull request 'master' (#156) from master into prod

Reviewed-on: http://git.feashow.cn/clay/mosr-web/pulls/156
This commit is contained in:
clay
2024-05-13 11:28:48 +00:00
9 changed files with 111 additions and 141 deletions

View File

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

View File

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

View File

@@ -121,7 +121,7 @@ const users = ref([])
// const orgType = ref('user')
const showOrgSelect = ref(false)
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(
[
{label: '等于', value: '='},
@@ -195,7 +195,7 @@ const selectUser = (value, orgType) => {
const filterConditionMosr = (list) => {
processFromPerms.value.forEach((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})
}
})

View File

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

View File

@@ -34,8 +34,7 @@
</template>
<script setup>
import {defineProps, watch,computed} from "vue";
import {defineProps, computed} from "vue";
import {useProcessStore} from "@/stores/processStore.js";
const props = defineProps({
@@ -45,18 +44,7 @@ const props = defineProps({
}
});
const processStore = useProcessStore();
const tableData = ref([]);
const isIndeterminate = ref(false);
const permSelect = ref("");
const checkStatus = reactive({
readOnly: true,
editable: false,
hide: false
});
const init = () => {
let oldPermMap = new Map()
@@ -66,29 +54,6 @@ const init = () => {
}
}
processStore.getSelectedNode().props.formPerms = [];
//todo 项目字段测试
let perms = [{
id: "projectName",
title: "项目名称",
required: true,
perm: "R"
}, {
id: "projectType",
title: "项目类型",
required: true,
perm: "R"
}, {
id: "projectDesc",
title: "项目描述",
required: true,
perm: "R"
}, {
id: "projectManager",
title: "项目经理",
required: true,
perm: "R"
}];
// formPermsLoad(oldPermMap, processStore.getDesign().formItems);
formPermsLoadMosr(oldPermMap, processFromPerms.value);
};
@@ -119,7 +84,6 @@ const allSelect = (type) => {
const formPermsLoadMosr = (oldPermMap, perms) => {
perms.forEach(perm =>{
console.log(perm)
//刷新名称
let old = oldPermMap.get(perm.id)
if (old) {
@@ -131,7 +95,7 @@ const formPermsLoadMosr = (oldPermMap, perms) => {
id: perm.id, //todo ,id 就是字段名称
title: perm.title,
required: perm.required,
perm: nowNode.type === "ROOT" ? "E" : "R"
perm: nowNode.value.type === "ROOT" ? "E" : "R"
});
}
})

View File

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

View File

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

View File

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