parent
0165c01d75
commit
bffb44a725
12 changed files with 522 additions and 21 deletions
@ -0,0 +1,19 @@ |
|||||||
|
import request from '@/router/axios' |
||||||
|
|
||||||
|
const prefix = '/api/blade-workflow/design/model/scope' |
||||||
|
|
||||||
|
export const getList = (params) => { |
||||||
|
return request({ |
||||||
|
url: `${prefix}/list`, |
||||||
|
method: 'get', |
||||||
|
params |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
export const submit = (row) => { |
||||||
|
return request({ |
||||||
|
url: `${prefix}/submit`, |
||||||
|
method: 'post', |
||||||
|
data: row |
||||||
|
}) |
||||||
|
} |
||||||
@ -0,0 +1,272 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog ref="wf-dialog" |
||||||
|
custom-class="wf-dialog" |
||||||
|
:visible.sync="visible" |
||||||
|
title="人员配置" |
||||||
|
width="60%" |
||||||
|
:before-close="handleClose" |
||||||
|
append-to-body> |
||||||
|
<el-table v-if="visible" |
||||||
|
class="avue-crud" |
||||||
|
:data="data" |
||||||
|
border |
||||||
|
size="mini"> |
||||||
|
<el-table-column align="center" |
||||||
|
header-align="center" |
||||||
|
width="80"> |
||||||
|
<template #header> |
||||||
|
<el-button circle |
||||||
|
type="primary" |
||||||
|
size="mini" |
||||||
|
icon="el-icon-plus" |
||||||
|
@click="data.push({})"></el-button> |
||||||
|
</template> |
||||||
|
<template #default="{$index}"> |
||||||
|
<el-button circle |
||||||
|
type="danger" |
||||||
|
size="mini" |
||||||
|
icon="el-icon-delete" |
||||||
|
@click="data.splice($index, 1)"></el-button> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="人员类型" |
||||||
|
prop="type" |
||||||
|
align="center" |
||||||
|
header-align="center"> |
||||||
|
<template #default="{row, $index}"> |
||||||
|
<el-select v-model="row.type" |
||||||
|
size="mini" |
||||||
|
placeholder="人员类型" |
||||||
|
@change="handleTypeChange($index)"> |
||||||
|
<el-option v-for="item in typeList" |
||||||
|
:key="item.value" |
||||||
|
:label="item.label" |
||||||
|
:value="item.value" |
||||||
|
:disabled="data.find(d => d.type == item.value)"></el-option> |
||||||
|
</el-select> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="值" |
||||||
|
prop="text" |
||||||
|
align="center" |
||||||
|
header-align="center"> |
||||||
|
<template #default="{row, $index}"> |
||||||
|
<template v-if="row.type == 'user'"> |
||||||
|
<el-input v-model="row.text" |
||||||
|
size="mini" |
||||||
|
placeholder="用户" |
||||||
|
readonly |
||||||
|
@click.native="handleSelect($index, 'user-select')"> |
||||||
|
<template #append> |
||||||
|
<el-button icon="el-icon-plus"></el-button> |
||||||
|
</template> |
||||||
|
</el-input> |
||||||
|
</template> |
||||||
|
<template v-else-if="row.type == 'role'"> |
||||||
|
<avue-input-tree :ref="`role_${$index}`" |
||||||
|
v-model="row.value" |
||||||
|
size="mini" |
||||||
|
dataType="string" |
||||||
|
multiple |
||||||
|
clearable |
||||||
|
placeholder="角色" |
||||||
|
:dic="roleList" |
||||||
|
:props="roleProps || {label: 'roleName', value: 'id'}" |
||||||
|
@change="handleChange($index, `role_${$index}`)"> |
||||||
|
</avue-input-tree> |
||||||
|
</template> |
||||||
|
<template v-else-if="row.type == 'dept'"> |
||||||
|
<avue-input-tree :ref="`dept_${$index}`" |
||||||
|
v-model="row.value" |
||||||
|
size="mini" |
||||||
|
dataType="string" |
||||||
|
multiple |
||||||
|
clearable |
||||||
|
placeholder="部门" |
||||||
|
:dic="deptList" |
||||||
|
:props="deptProps || {label: 'deptName', value: 'id'}" |
||||||
|
@change="handleChange($index, `dept_${$index}`)"> |
||||||
|
</avue-input-tree> |
||||||
|
</template> |
||||||
|
<template v-else-if="row.type == 'post'"> |
||||||
|
<avue-input-tree :ref="`post_${$index}`" |
||||||
|
v-model="row.value" |
||||||
|
size="mini" |
||||||
|
dataType="string" |
||||||
|
multiple |
||||||
|
clearable |
||||||
|
placeholder="职位" |
||||||
|
:dic="postList" |
||||||
|
:props="postProps || {label: 'postName', value: 'id'}" |
||||||
|
@change="handleChange($index, `post_${$index}`)"> |
||||||
|
</avue-input-tree> |
||||||
|
</template> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
<template #footer> |
||||||
|
<el-button @click="handleClose" |
||||||
|
size="mini">取消</el-button> |
||||||
|
<el-button type="primary" |
||||||
|
@click="handleSubmit" |
||||||
|
size="mini">确定</el-button> |
||||||
|
</template> |
||||||
|
|
||||||
|
<user-select ref="user-select" |
||||||
|
check-type="checkbox" |
||||||
|
:user-url="userUrl" |
||||||
|
:custom-option="customOption" |
||||||
|
:default-checked="defaultChecked" |
||||||
|
@onConfirm="handleSelectConfirm"></user-select> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
<script> |
||||||
|
import UserSelect from './user-select.vue' |
||||||
|
|
||||||
|
export default { |
||||||
|
props: { |
||||||
|
userOption: Object |
||||||
|
}, |
||||||
|
components: { |
||||||
|
UserSelect, |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
userUrl() { |
||||||
|
return this.userOption.userUrl |
||||||
|
}, |
||||||
|
roleUrl() { |
||||||
|
return this.userOption.roleUrl |
||||||
|
}, |
||||||
|
deptUrl() { |
||||||
|
return this.userOption.deptUrl |
||||||
|
}, |
||||||
|
postUrl() { |
||||||
|
return this.userOption.postUrl |
||||||
|
}, |
||||||
|
customUrl() { |
||||||
|
return this.userOption.customUrl |
||||||
|
}, |
||||||
|
customOption() { |
||||||
|
return this.userOption.customOption |
||||||
|
}, |
||||||
|
roleProps() { |
||||||
|
return this.customOption ? this.customOption.roleProps : null |
||||||
|
}, |
||||||
|
deptProps() { |
||||||
|
return this.customOption ? this.customOption.deptProps : null |
||||||
|
}, |
||||||
|
postProps() { |
||||||
|
return this.customOption ? this.customOption.postProps : null |
||||||
|
} |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
visible(val) { |
||||||
|
if (!this.init) { |
||||||
|
this.getRoleList() |
||||||
|
this.getDeptList() |
||||||
|
this.getPostList() |
||||||
|
this.init = true |
||||||
|
} |
||||||
|
if (val && this.userOption && this.userOption.data) this.$set(this, 'data', JSON.parse(JSON.stringify(this.userOption.data))) |
||||||
|
}, |
||||||
|
}, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
init: false, |
||||||
|
visible: false, |
||||||
|
data: [], |
||||||
|
roleList: [], |
||||||
|
deptList: [], |
||||||
|
postList: [], |
||||||
|
selectIndex: 0, |
||||||
|
defaultChecked: '', |
||||||
|
typeList: [{ |
||||||
|
label: '用户', |
||||||
|
value: 'user' |
||||||
|
}, { |
||||||
|
label: '角色', |
||||||
|
value: 'role' |
||||||
|
}, { |
||||||
|
label: '部门', |
||||||
|
value: 'dept' |
||||||
|
}, { |
||||||
|
label: '职位', |
||||||
|
value: 'post' |
||||||
|
}], |
||||||
|
typeDic: { |
||||||
|
user: '用户', |
||||||
|
role: '角色', |
||||||
|
dept: '部门', |
||||||
|
post: '职位', |
||||||
|
}, |
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
handleSelect(index, ref) { |
||||||
|
this.selectIndex = index |
||||||
|
this.defaultChecked = this.data[index].value |
||||||
|
this.$refs[ref].visible = true |
||||||
|
}, |
||||||
|
handleSelectConfirm(id, name) { |
||||||
|
this.$set(this.data[this.selectIndex], 'value', id) |
||||||
|
this.$set(this.data[this.selectIndex], 'text', name) |
||||||
|
}, |
||||||
|
handleTypeChange(index) { |
||||||
|
this.$set(this.data, index, { |
||||||
|
type: this.data[index].type |
||||||
|
}) |
||||||
|
}, |
||||||
|
handleChange(index, ref) { |
||||||
|
this.$nextTick(() => { |
||||||
|
const text = this.$refs[ref].labelShow.join(',') |
||||||
|
if (text) this.$set(this.data[index], 'text', text) |
||||||
|
}) |
||||||
|
}, |
||||||
|
getRoleList() { |
||||||
|
this.$axios.get(this.roleUrl).then(res => { |
||||||
|
this.roleList = res.data.data |
||||||
|
}) |
||||||
|
}, |
||||||
|
getDeptList() { |
||||||
|
this.$axios.get(this.deptUrl).then(res => { |
||||||
|
this.deptList = res.data.data |
||||||
|
}) |
||||||
|
}, |
||||||
|
getPostList() { |
||||||
|
this.$axios.get(this.postUrl, { current: 1, size: 999 }).then(res => { |
||||||
|
this.postList = res.data.data.records |
||||||
|
}) |
||||||
|
}, |
||||||
|
handleSubmit() { |
||||||
|
this.$emit('submit', this.data.filter(d => d.type && d.value)) |
||||||
|
this.visible = false |
||||||
|
}, |
||||||
|
handleClose(done) { |
||||||
|
this.visible = false |
||||||
|
if (done && typeof done == 'function') done() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="scss"> |
||||||
|
.wf-dialog { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
margin: 0 !important; |
||||||
|
position: absolute; |
||||||
|
top: 40%; |
||||||
|
left: 50%; |
||||||
|
transform: translate(-50%, -40%); |
||||||
|
max-height: calc(100% - 30px); |
||||||
|
max-width: calc(100% - 30px); |
||||||
|
|
||||||
|
.el-dialog__body { |
||||||
|
flex: 1; |
||||||
|
overflow: auto; |
||||||
|
} |
||||||
|
|
||||||
|
.el-select { |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
||||||
Loading…
Reference in new issue