111 lines
2.3 KiB
Vue
111 lines
2.3 KiB
Vue
<template>
|
|
<div>
|
|
<el-input :value="multiple ? (realValue.length > 0 ? `(${realValue.length})${showValue}` : null): showValue"
|
|
@focus="openDialog"
|
|
:size="size"
|
|
readonly
|
|
:placeholder="placeholder"></el-input>
|
|
|
|
<sm-user-dialog :show.sync="dialogShow"
|
|
:search="search"
|
|
:multiple="multiple"
|
|
:init-select="realValue"
|
|
@select="onSubmit"
|
|
:title="title"></sm-user-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
|
|
import SmUserDialog from "@/components/Business/SmUser/smUserDialog.vue";
|
|
|
|
export default {
|
|
name: 'smUserSelect',
|
|
components: {SmUserDialog},
|
|
props:{
|
|
size: {
|
|
type: String,
|
|
default: "medium"
|
|
},
|
|
placeholder: {
|
|
type: String,
|
|
default: "点击选择用户",
|
|
},
|
|
// 是否多选
|
|
multiple: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
// 双向绑定的值(为id)
|
|
value: {
|
|
type: [Array, String, Number],
|
|
default: () => {
|
|
return []
|
|
}
|
|
},
|
|
// 查询条件
|
|
search: {
|
|
type: Object,
|
|
default: () => ({})
|
|
},
|
|
// 标题
|
|
title: {
|
|
type: String,
|
|
default: "选择用户"
|
|
},
|
|
beforeOpen: {
|
|
type: Function,
|
|
default: () => {
|
|
return true;
|
|
}
|
|
},
|
|
beforeClose: {
|
|
type: Function,
|
|
default: () => {
|
|
return true;
|
|
}
|
|
},
|
|
// 展示值
|
|
showValue: {
|
|
type: String,
|
|
default: null,
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
realValue: [], // 真实的值
|
|
dialogShow: false, // 展示对话框
|
|
}
|
|
},
|
|
methods: {
|
|
// 修改值
|
|
inputValue(val){
|
|
this.$emit('input', val);
|
|
},
|
|
// 确定
|
|
onSubmit(selected){
|
|
if (this.multiple) {
|
|
this.realValue = selected;
|
|
this.inputValue(selected.map(item => item.userId));
|
|
} else {
|
|
this.realValue = [selected];
|
|
this.inputValue(selected.userId);
|
|
}
|
|
this.$emit('submit', selected);
|
|
this.closeDialog();
|
|
},
|
|
closeDialog() {
|
|
if (this.beforeClose()) {
|
|
this.dialogShow = false;
|
|
}
|
|
},
|
|
// 打开对话框
|
|
openDialog(){
|
|
if (this.beforeOpen()) {
|
|
this.dialogShow = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|