|
@@ -68,7 +68,7 @@
|
|
|
<span>审批人员类型</span>
|
|
|
</div>
|
|
|
<div class="main-content">
|
|
|
- <el-radio-group v-model="form.setType" class="main-content-radio">
|
|
|
+ <el-radio-group :modelValue="form.setType" @change="setTypeChange" class="main-content-radio">
|
|
|
<el-radio v-for="v of setTypeOptions" :key="v.value" :label="v.value">{{ v.label }}</el-radio>
|
|
|
</el-radio-group>
|
|
|
</div>
|
|
@@ -97,11 +97,34 @@
|
|
|
</div>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <el-form-item v-if="form.setType === 4" label="发起人自选">
|
|
|
- <el-radio-group v-model="form.selectMode">
|
|
|
- <el-radio v-for="v of selectModeOptions" :key="v.value" :label="v.value">{{ v.label }}</el-radio>
|
|
|
- </el-radio-group>
|
|
|
- </el-form-item>
|
|
|
+ <template v-if="form.setType === 4">
|
|
|
+ <el-form-item label="发起人自选">
|
|
|
+ <el-radio-group :modelValue="form.selectMode" @change="selectModeChange">
|
|
|
+ <el-radio v-for="v of selectModeOptions" :key="v.value" :label="v.value">{{ v.label }}</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="[1, 2].includes(form.selectMode)" label="候选人">
|
|
|
+ <el-button type="primary" icon="plus" round @click="selectHandle_nodeCandidate(form.nodeCandidate)">选择人员</el-button>
|
|
|
+ <div class="tags-list">
|
|
|
+ <el-tag v-for="(user, index) in form.nodeCandidate?.assignees" :key="user.id" closable @close="delAssigneeItem(index)">{{
|
|
|
+ user.name
|
|
|
+ }}</el-tag>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-else label="候选角色">
|
|
|
+ <el-button type="primary" icon="plus" round @click="selectHandle_nodeCandidate(form.nodeCandidate)">选择角色</el-button>
|
|
|
+ <div class="tags-list">
|
|
|
+ <el-tag
|
|
|
+ v-for="(role, index) in form.nodeCandidate?.assignees"
|
|
|
+ :key="role.id"
|
|
|
+ type="info"
|
|
|
+ closable
|
|
|
+ @close="delAssigneeItem(index)"
|
|
|
+ >{{ role.name }}</el-tag
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
|
|
|
<el-form-item v-if="form.setType === 6" label="连续主管审批终点">
|
|
|
<el-radio-group v-model="form.directorMode">
|
|
@@ -230,12 +253,14 @@ import {
|
|
|
rejectStart_options,
|
|
|
setTypeOptions,
|
|
|
selectModeOptions,
|
|
|
+ selectModeOptions_config,
|
|
|
approveSelfOptions,
|
|
|
directorModeOptions,
|
|
|
examineModeOptions,
|
|
|
setTypeOptions_config
|
|
|
} from './config'
|
|
|
import { ElMessage } from 'element-plus'
|
|
|
+
|
|
|
export default {
|
|
|
components: {
|
|
|
addNode,
|
|
@@ -273,19 +298,6 @@ export default {
|
|
|
watch: {
|
|
|
modelValue() {
|
|
|
this.nodeConfig = this.modelValue
|
|
|
- },
|
|
|
- 'form.setType': {
|
|
|
- handler(type, oldType) {
|
|
|
- // console.error(type, 'type, oldType', oldType)
|
|
|
- if ([1, 3].includes(oldType)) {
|
|
|
- // 上次setType 为 选择成员 or 角色时 对 nodeAssigneeList 重置
|
|
|
- this.form.nodeAssigneeList = []
|
|
|
- }
|
|
|
- if ([5].includes(oldType)) {
|
|
|
- // 上次setType 为 选择成员 or 角色时 对 nodeAssigneeList 重置
|
|
|
- this.form.actionUrl = []
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
@@ -363,6 +375,19 @@ export default {
|
|
|
} else if (_form.setType === 3) {
|
|
|
// 选择角色
|
|
|
if (!_form.nodeAssigneeList || !_form.nodeAssigneeList.length) return this.$message.warning('请选择角色')
|
|
|
+ } else if (_form.setType === 4) {
|
|
|
+ // 发起人自选
|
|
|
+ const config = selectModeOptions_config[this.form.selectMode] || {} // limit: {minSelected, maxSelected}
|
|
|
+ const assignees = _form.nodeCandidate.assignees
|
|
|
+ if (assignees && assignees.length) {
|
|
|
+ // 自选一个人
|
|
|
+ if (_form.selectMode === 1) {
|
|
|
+ if (assignees.length && assignees.length > 1) return this.$message.warning('自选一个人,只能选一个')
|
|
|
+ } else {
|
|
|
+ // 自选多人/自选角色 需要2人以上
|
|
|
+ if (assignees.length && assignees.length < 2) return this.$message.warning(`${config.label},只能选两个以上`)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
if (_form.actionUrl && _form.actionUrl.length) {
|
|
|
// _form.actionUrl = _form.actionUrl[0]
|
|
@@ -383,12 +408,51 @@ export default {
|
|
|
delRole(index) {
|
|
|
this.form.nodeAssigneeList.splice(index, 1)
|
|
|
},
|
|
|
+ delAssigneeItem(index) {
|
|
|
+ this.form.nodeCandidate.assignees.splice(index, 1)
|
|
|
+ },
|
|
|
delFormTemplate(index) {
|
|
|
this.form.actionUrl.splice(index, 1)
|
|
|
},
|
|
|
- selectHandle(type, data) {
|
|
|
+ selectHandle(type, assignees) {
|
|
|
+ // type: 1人员, 3角色 5子表单
|
|
|
+ this.select(type, { assignees })
|
|
|
+ },
|
|
|
+ selectHandle_nodeCandidate(nodeCandidate) {
|
|
|
+ // form.nodeCandidate: {type: 1|2, assignees: {name, id}[]}
|
|
|
+ const limit = selectModeOptions_config[this.form.selectMode]?.limit || {} // {minSelected, maxSelected}
|
|
|
// type: 1人员, 3角色 5子表单
|
|
|
- this.select(type, data)
|
|
|
+ this.select(nodeCandidate.type, { ...nodeCandidate, ...limit })
|
|
|
+ },
|
|
|
+ selectModeChange(mode) {
|
|
|
+ const oldMode = this.form.selectMode
|
|
|
+ this.form.selectMode = mode
|
|
|
+ // console.error(mode, oldMode, 'mode, oldMode')
|
|
|
+ if (!this.form.nodeCandidate) {
|
|
|
+ this.form.nodeCandidate = {}
|
|
|
+ }
|
|
|
+ // 1:用户 2:角色 (3:部门)
|
|
|
+ this.form.nodeCandidate.type = [1, 2].includes(mode) ? 1 : 2
|
|
|
+ const isSameMode = [1, 2].includes(mode) && [1, 2].includes(oldMode)
|
|
|
+ if (!isSameMode) {
|
|
|
+ // selectMode 变化 对 assignees 重置
|
|
|
+ this.form.nodeCandidate.assignees = []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ setTypeChange(setType) {
|
|
|
+ // console.error(type, 'type, oldType', oldType)
|
|
|
+ const oldType = this.form.setType
|
|
|
+ this.form.setType = setType
|
|
|
+ if ([1, 3].includes(oldType)) {
|
|
|
+ // 上次setType 为 1:选择成员 or 3:角色 对 nodeAssigneeList 重置
|
|
|
+ this.form.nodeAssigneeList = []
|
|
|
+ } else if (oldType === 4) {
|
|
|
+ // 4: 发起人自选 重置
|
|
|
+ this.form.nodeCandidate = {}
|
|
|
+ } else if ([5].includes(oldType)) {
|
|
|
+ // 发起人自己 对 actionUrl 重置
|
|
|
+ this.form.actionUrl = []
|
|
|
+ }
|
|
|
},
|
|
|
toText(nodeConfig) {
|
|
|
const type = nodeConfig.setType
|