2022-05-24 10:12:03 +08:00
|
|
|
<template>
|
2022-05-24 16:52:14 +08:00
|
|
|
<Modal :options="getModalOptions" @on-close="handleClose">
|
2022-05-24 10:12:03 +08:00
|
|
|
<template #Context>
|
2022-05-24 16:52:14 +08:00
|
|
|
<n-form
|
|
|
|
|
ref="formRef"
|
|
|
|
|
:model="form"
|
|
|
|
|
label-placement="left"
|
|
|
|
|
:rules="rules"
|
|
|
|
|
>
|
|
|
|
|
<n-form-item
|
|
|
|
|
label="头像:"
|
|
|
|
|
path="avatar"
|
|
|
|
|
>
|
|
|
|
|
<n-upload
|
|
|
|
|
action="https://www.mocky.io/v2/5e4bafc63100007100d8b70f"
|
|
|
|
|
:default-file-list="previewFileList"
|
|
|
|
|
list-type="image-card"
|
|
|
|
|
@preview="handlePreview"
|
|
|
|
|
/>
|
|
|
|
|
<n-modal
|
|
|
|
|
v-model:show="showModal"
|
|
|
|
|
preset="card"
|
|
|
|
|
style="width: 600px"
|
|
|
|
|
title="头像"
|
|
|
|
|
>
|
|
|
|
|
<img :src="form.avatar" style="width: 100%">
|
|
|
|
|
</n-modal>
|
|
|
|
|
</n-form-item>
|
|
|
|
|
<n-form-item label="用户编号:" path="code">
|
|
|
|
|
<n-input
|
|
|
|
|
v-model:value="form.code"
|
|
|
|
|
clearable
|
|
|
|
|
:maxlength="20"
|
|
|
|
|
placeholder="请输入用户编号"
|
|
|
|
|
/>
|
|
|
|
|
</n-form-item>
|
|
|
|
|
<n-form-item label="所属部门:" path="deptId">
|
|
|
|
|
<n-select
|
|
|
|
|
v-model:value="form.deptId"
|
|
|
|
|
:options="deptOptions"
|
|
|
|
|
placeholder="请选择所属部门"
|
|
|
|
|
/>
|
|
|
|
|
</n-form-item>
|
|
|
|
|
<n-form-item label="用户账号:" path="username">
|
|
|
|
|
<n-input
|
|
|
|
|
v-model:value="form.username"
|
|
|
|
|
clearable
|
|
|
|
|
:maxlength="20"
|
|
|
|
|
placeholder="请输入用户账号"
|
|
|
|
|
/>
|
|
|
|
|
</n-form-item>
|
2022-05-24 17:19:33 +08:00
|
|
|
<n-form-item
|
|
|
|
|
label="登录密码:"
|
|
|
|
|
path="password"
|
|
|
|
|
>
|
|
|
|
|
<n-input
|
|
|
|
|
v-model:value="form.password"
|
|
|
|
|
type="password"
|
|
|
|
|
:maxlength="20"
|
|
|
|
|
placeholder="请输入登录密码"
|
|
|
|
|
/>
|
|
|
|
|
</n-form-item>
|
2022-05-24 16:52:14 +08:00
|
|
|
<n-form-item label="角色:" path="roleIds">
|
|
|
|
|
<n-select
|
|
|
|
|
v-model:value="form.roleIds"
|
|
|
|
|
clearable
|
|
|
|
|
:multiple="true"
|
|
|
|
|
:options="rolesOptions"
|
|
|
|
|
placeholder="请选择角色"
|
|
|
|
|
/>
|
|
|
|
|
</n-form-item>
|
|
|
|
|
<n-form-item
|
|
|
|
|
v-if="form.type==2"
|
|
|
|
|
label="驾照类型:"
|
|
|
|
|
path="driverType"
|
|
|
|
|
>
|
|
|
|
|
<n-select
|
|
|
|
|
v-model:value="form.driverType"
|
|
|
|
|
clearable
|
|
|
|
|
:options="[1, 2]"
|
|
|
|
|
placeholder="请选择驾照类型"
|
|
|
|
|
/>
|
|
|
|
|
</n-form-item>
|
|
|
|
|
<n-form-item label="用户姓名:" path="realname">
|
|
|
|
|
<n-input
|
|
|
|
|
v-model:value="form.realname"
|
|
|
|
|
clearable
|
|
|
|
|
:maxlength="20"
|
|
|
|
|
placeholder="请输入用户姓名"
|
|
|
|
|
/>
|
|
|
|
|
</n-form-item>
|
|
|
|
|
<n-form-item label="状态" path="status">
|
|
|
|
|
<n-radio-group
|
|
|
|
|
v-model:value="form.status"
|
|
|
|
|
>
|
|
|
|
|
<n-radio :value="1">正常</n-radio>
|
|
|
|
|
<n-radio :value="2">禁用</n-radio>
|
|
|
|
|
</n-radio-group>
|
|
|
|
|
</n-form-item>
|
2022-05-24 17:19:33 +08:00
|
|
|
|
2022-05-24 16:52:14 +08:00
|
|
|
<n-form-item label="用户类型" path="type">
|
|
|
|
|
<n-radio-group
|
|
|
|
|
v-model:value="form.type"
|
|
|
|
|
>
|
|
|
|
|
<n-radio :value="1">普通用户</n-radio>
|
|
|
|
|
<n-radio :value="2">飞手</n-radio>
|
|
|
|
|
</n-radio-group>
|
|
|
|
|
</n-form-item>
|
|
|
|
|
<n-form-item
|
|
|
|
|
v-if="form.type==2"
|
|
|
|
|
label="驾照编号:"
|
|
|
|
|
path="driverCode"
|
|
|
|
|
>
|
|
|
|
|
<n-input
|
|
|
|
|
v-model:value="form.driverCode"
|
|
|
|
|
clearable
|
|
|
|
|
:maxlength="20"
|
|
|
|
|
placeholder="请输入驾照编号"
|
|
|
|
|
/>
|
|
|
|
|
</n-form-item>
|
|
|
|
|
<n-form-item
|
|
|
|
|
label="备注:"
|
|
|
|
|
:label-col="{sm: {span: 3}, xs: {span: 6}}"
|
|
|
|
|
:wrapper-col="{sm: {span: 21}, xs: {span: 18}}"
|
|
|
|
|
>
|
|
|
|
|
<n-input
|
|
|
|
|
v-model:value="form.note"
|
|
|
|
|
type="textarea"
|
|
|
|
|
:rows="3"
|
|
|
|
|
:maxlength="200"
|
|
|
|
|
placeholder="请输入备注"
|
|
|
|
|
/>
|
|
|
|
|
</n-form-item>
|
|
|
|
|
</n-form>
|
2022-05-24 10:12:03 +08:00
|
|
|
</template>
|
|
|
|
|
</Modal>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
2022-05-24 17:19:33 +08:00
|
|
|
import { defineComponent, computed, onMounted, reactive, toRefs } from 'vue'
|
2022-05-24 10:23:04 +08:00
|
|
|
import Modal from '@/components/CardModal/index.vue'
|
2022-05-24 16:52:14 +08:00
|
|
|
import { getDeptAll } from '@/api/system/dept/index'
|
|
|
|
|
import { getRoleAll } from '@/api/system/role/index'
|
|
|
|
|
import { dataToSelect } from '@/utils/handleData.js'
|
|
|
|
|
export default defineComponent({
|
2022-05-24 10:12:03 +08:00
|
|
|
name: 'UserModal',
|
|
|
|
|
components: { Modal },
|
|
|
|
|
props: {
|
|
|
|
|
visible: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false
|
|
|
|
|
},
|
|
|
|
|
row: {
|
|
|
|
|
type: Object,
|
|
|
|
|
default: () => {}
|
2022-05-24 16:52:14 +08:00
|
|
|
},
|
|
|
|
|
title: {
|
|
|
|
|
type: String,
|
2022-05-24 17:19:33 +08:00
|
|
|
default: '添加用户'
|
2022-05-24 10:12:03 +08:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
emits: {
|
|
|
|
|
'update:visible': null,
|
|
|
|
|
onClose: null,
|
|
|
|
|
done: null
|
|
|
|
|
},
|
|
|
|
|
setup(props, { emit }) {
|
|
|
|
|
const getModalOptions = computed(() => {
|
|
|
|
|
return {
|
2022-05-24 16:52:14 +08:00
|
|
|
title: props.title,
|
|
|
|
|
show: props.visible
|
2022-05-24 10:12:03 +08:00
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
/* 关闭弹窗 */
|
|
|
|
|
const handleClose = () => {
|
|
|
|
|
emit('update:visible', false)
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-24 16:52:14 +08:00
|
|
|
const form = reactive({
|
|
|
|
|
avatar: '',
|
|
|
|
|
code: '',
|
|
|
|
|
deptId: null,
|
|
|
|
|
username: '',
|
|
|
|
|
realname: '',
|
|
|
|
|
password: '',
|
|
|
|
|
roleIds: [],
|
|
|
|
|
driverType: null,
|
|
|
|
|
driverCode: '',
|
|
|
|
|
type: 1,
|
|
|
|
|
status: 1,
|
|
|
|
|
note: ''
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
2022-05-24 17:19:33 +08:00
|
|
|
const optionsList = reactive({
|
|
|
|
|
deptOptions: [],
|
|
|
|
|
rolesOptions: []
|
|
|
|
|
})
|
2022-05-24 16:52:14 +08:00
|
|
|
// 获取部门列表
|
|
|
|
|
async function getDeptOptions() {
|
|
|
|
|
const res = await getDeptAll()
|
2022-05-24 17:19:33 +08:00
|
|
|
optionsList.deptOptions = dataToSelect(res.data, { label: 'name', value: 'id' })
|
|
|
|
|
console.log('部门选项:', optionsList.deptOptions)
|
2022-05-24 16:52:14 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取角色列表
|
|
|
|
|
async function getRoleOptions() {
|
|
|
|
|
const res = await getRoleAll()
|
2022-05-24 17:19:33 +08:00
|
|
|
optionsList.rolesOptions = dataToSelect(res.data, { label: 'name', value: 'id' })
|
2022-05-24 16:52:14 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
getDeptOptions()
|
|
|
|
|
getRoleOptions()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 上传文件
|
|
|
|
|
const handleUpload = ({ file, event }) => {
|
|
|
|
|
console.log(event)
|
|
|
|
|
form.avatar = file.url
|
|
|
|
|
}
|
2022-05-24 10:12:03 +08:00
|
|
|
return {
|
2022-05-24 16:52:14 +08:00
|
|
|
getModalOptions,
|
|
|
|
|
handleClose,
|
|
|
|
|
form,
|
|
|
|
|
rules: reactive({
|
|
|
|
|
avatar: {
|
|
|
|
|
required: true,
|
|
|
|
|
trigger: 'blur',
|
|
|
|
|
message: '请上传头像'
|
|
|
|
|
},
|
|
|
|
|
code: {
|
|
|
|
|
required: true,
|
|
|
|
|
trigger: ['blur', 'input'],
|
|
|
|
|
message: '请输入用户编号'
|
|
|
|
|
},
|
|
|
|
|
deptId: {
|
|
|
|
|
required: true,
|
|
|
|
|
trigger: 'blur',
|
|
|
|
|
message: '请选择部门'
|
|
|
|
|
}
|
|
|
|
|
}),
|
|
|
|
|
handleUpload,
|
2022-05-24 17:19:33 +08:00
|
|
|
...toRefs(optionsList)
|
2022-05-24 10:12:03 +08:00
|
|
|
}
|
2022-05-24 16:52:14 +08:00
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
|
2022-05-24 10:12:03 +08:00
|
|
|
}
|
2022-05-24 16:52:14 +08:00
|
|
|
})
|
2022-05-24 10:12:03 +08:00
|
|
|
</script>
|
2022-05-24 16:52:14 +08:00
|
|
|
<style scoped lang='scss'>
|
|
|
|
|
</style>
|