parent
b7ce5c3eed
commit
742482eabc
17 changed files with 593 additions and 580 deletions
@ -0,0 +1,236 @@ |
||||
<script setup> |
||||
import { ref } from 'vue' |
||||
import { stuListService, updateStuService } from '@/api/user/stud' |
||||
import { tool, client } from '@/utils/alioss.js' |
||||
import { ElMessage } from 'element-plus' |
||||
const drawer = ref(false) |
||||
const formLabelWidth = '80px' |
||||
const emit = defineEmits(['success']) |
||||
const imgUrl = ref() |
||||
const formModel = ref({ |
||||
icon: '', |
||||
number: '', |
||||
name: '', |
||||
sex: '', |
||||
nickName: '', |
||||
username: '', |
||||
major: '', |
||||
yearAge: '', |
||||
createTime: '', |
||||
}) |
||||
|
||||
formModel.value.sex === '男' ? 0 : 1 |
||||
const open = async (row) => { |
||||
drawer.value = true |
||||
await stuListService(row.id).then((res) => { |
||||
formModel.value = res.data |
||||
imgUrl.value = formModel.value.icon |
||||
// console.log(formModel.value.icon, 'defauleForm.value') |
||||
}) |
||||
} |
||||
const beforeUpload = (file) => { |
||||
const validImageTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/bmp'] |
||||
if (!validImageTypes.includes(file.type)) { |
||||
ElMessage.error('请上传图片') |
||||
return false |
||||
} |
||||
return true |
||||
} |
||||
const upload = async (option) => { |
||||
const res = await tool.oss.upload(option.file) |
||||
// console.log(res, 'res') |
||||
formModel.value.icon = res.url |
||||
imgUrl.value = formModel.value.icon |
||||
} |
||||
const formRef = ref(null) |
||||
|
||||
//校验 |
||||
const rules = { |
||||
number: [ |
||||
{ required: true, message: '请输入学号', trigger: 'blur' }, |
||||
{ min: 2, max: 20, message: '长度在2-20之间', trigger: 'blur' }, |
||||
], |
||||
name: [ |
||||
{ required: true, message: '请输入姓名', trigger: 'blur' }, |
||||
{ min: 2, max: 5, message: '长度在2-5之间', trigger: 'blur' }, |
||||
], |
||||
sex: [ |
||||
{ |
||||
required: true, |
||||
message: '请选择性别', |
||||
trigger: 'change', |
||||
}, |
||||
], |
||||
nickName: [ |
||||
{ |
||||
message: '请输入昵称', |
||||
trigger: 'blur', |
||||
}, |
||||
], |
||||
username: [{ required: true }], |
||||
createTime: [{ required: true }], |
||||
major: [ |
||||
{ required: true, message: '专业不能为空', trigger: 'blur' }, |
||||
{ |
||||
min: 2, |
||||
max: 20, |
||||
message: '职位名称至少2个字符最多20个字符', |
||||
trigger: 'blur', |
||||
}, |
||||
], |
||||
yearAge: [ |
||||
{ |
||||
required: true, |
||||
trigger: 'change', |
||||
message: '请选择入学年份', |
||||
}, |
||||
], |
||||
} |
||||
|
||||
function formatDate(yearAge) { |
||||
return new Date(yearAge).toISOString() |
||||
} |
||||
//提交 |
||||
const onSubmit = async () => { |
||||
await formRef.value.validate() |
||||
console.log(formModel.value, 'form') |
||||
await await updateStuService({ |
||||
id: formModel.value.id, |
||||
userId: formModel.value.userId, |
||||
icon: formModel.value.icon, |
||||
number: formModel.value.number, |
||||
name: formModel.value.name, |
||||
sex: formModel.value.sex, |
||||
nickName: formModel.value.nickName, |
||||
major: formModel.value.major, |
||||
// yearAge: formModel.value.yearAge, |
||||
}).then(() => { |
||||
ElMessage.success('修改成功') |
||||
drawer.value = false |
||||
// console.log('aa') |
||||
emit('success', 'edit') |
||||
// console.log(form.value, 'aaaa') |
||||
// res.value = userStore.getUserInfo() |
||||
// emit('getInfo', res.value) |
||||
// dialog.value = false |
||||
}) |
||||
} |
||||
const onCancel = () => { |
||||
drawer.value = false |
||||
} |
||||
defineExpose({ |
||||
open, |
||||
}) |
||||
</script> |
||||
<template> |
||||
<el-drawer v-model="drawer" title="编辑信息" style=""> |
||||
<el-form |
||||
:model="formModel" |
||||
:rules="rules" |
||||
ref="formRef" |
||||
:label-width="formLabelWidth" |
||||
> |
||||
<el-form-item label="头像" prop="icon"> |
||||
<el-upload |
||||
v-model="formModel.icon" |
||||
class="avatar-uploader" |
||||
:http-request="upload" |
||||
:show-file-list="false" |
||||
:before-upload="beforeUpload" |
||||
> |
||||
<img v-if="imgUrl" :src="imgUrl" class="avatar" /> |
||||
<!-- <img v-if="imageUrl" :src="imageUrl" class="avatar" /> --> |
||||
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon> |
||||
<template #tip> |
||||
<div class="el-upload__tip">图片文件要为jpg/png格式,小于500kb</div> |
||||
</template> |
||||
</el-upload> |
||||
</el-form-item> |
||||
<el-form-item label="学号" prop="number"> |
||||
<el-input v-model="formModel.number" placeholder="请输入学号" /> |
||||
</el-form-item> |
||||
<el-form-item label="姓名" prop="name"> |
||||
<el-input v-model="formModel.name" placeholder="请输入姓名" /> |
||||
</el-form-item> |
||||
<el-form-item label="性别" prop="sex"> |
||||
<el-radio-group v-model="formModel.sex"> |
||||
<el-radio value="男">男</el-radio> |
||||
<el-radio value="女">女</el-radio> |
||||
</el-radio-group> |
||||
</el-form-item> |
||||
<el-form-item label="用户名" prop="userName"> |
||||
<el-input v-model="formModel.username" readonly /> |
||||
</el-form-item> |
||||
<el-form-item label="昵称" prop="nickName"> |
||||
<el-input v-model="formModel.nickName" placeholder="请输入昵称" /> |
||||
</el-form-item> |
||||
|
||||
<el-form-item label="专业" prop="major"> |
||||
<el-input v-model="formModel.major" placeholder="请输入专业" /> |
||||
</el-form-item> |
||||
<el-form-item label="入学年分" prop="yearAge"> |
||||
<el-date-picker |
||||
v-model="formModel.yearAge" |
||||
type="date" |
||||
placeholder="请选择入学年份" |
||||
:size="small" |
||||
style="width: 100%" |
||||
format="YYYY/MM/DD" |
||||
value-format="YYYY-MM-DD" |
||||
/> |
||||
<!-- <el-date-picker |
||||
v-model="formModel.yearAge" |
||||
type="datetime" |
||||
placeholder="Pick a Date" |
||||
format="YYYY/MM/DD hh:mm:ss" |
||||
value-format="YYYY-MM-DDThh:mm:ss" |
||||
/> --> |
||||
</el-form-item> |
||||
<el-form-item label="创建时间" prop="createTime"> |
||||
<el-input v-model="formModel.createTime" readonly /> |
||||
</el-form-item> |
||||
</el-form> |
||||
<div class="footer"> |
||||
<el-button @click="onCancel">取消</el-button> |
||||
<el-button type="primary" @click="onSubmit">确认</el-button> |
||||
</div> |
||||
</el-drawer> |
||||
</template> |
||||
<style scoped lang="scss"> |
||||
.avatar-uploader { |
||||
:deep() { |
||||
.avatar { |
||||
width: 178px; |
||||
height: 178px; |
||||
display: block; |
||||
} |
||||
|
||||
.el-upload { |
||||
border: 1px dashed var(--el-border-color); |
||||
border-radius: 6px; |
||||
cursor: pointer; |
||||
position: relative; |
||||
overflow: hidden; |
||||
transition: var(--el-transition-duration-fast); |
||||
} |
||||
|
||||
.el-upload:hover { |
||||
border-color: var(--el-color-primary); |
||||
} |
||||
|
||||
.el-icon.avatar-uploader-icon { |
||||
font-size: 28px; |
||||
color: #8c939d; |
||||
width: 178px; |
||||
height: 178px; |
||||
text-align: center; |
||||
} |
||||
} |
||||
} |
||||
.footer { |
||||
display: flex; |
||||
justify-content: end; |
||||
align-items: center; |
||||
margin-top: 100px; |
||||
} |
||||
</style> |
Loading…
Reference in new issue