157 lines
3.7 KiB
Vue
157 lines
3.7 KiB
Vue
<template>
|
||
<view class="container">
|
||
<u-upload
|
||
:fileList="fileList"
|
||
@afterRead="afterRead"
|
||
@delete="deletePic"
|
||
multiple
|
||
:maxCount="1"
|
||
></u-upload>
|
||
<view class="form-item">
|
||
<text>昵称:</text>
|
||
<input v-model="nickname" placeholder="请输入昵称" />
|
||
</view>
|
||
<view class="form-item">
|
||
<text>手机号码:</text>
|
||
<input v-model="mobile" placeholder="请输入手机号码" />
|
||
</view>
|
||
<button @click="saveChanges">保存</button>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import {getTenantId, getToken} from "@/utils/auth";
|
||
import request from "@/utils/request";
|
||
import {baseImageUrl} from "@/config";
|
||
|
||
export default {
|
||
data() {
|
||
return {
|
||
nickname: '',
|
||
mobile: '',
|
||
fileList: [],
|
||
};
|
||
},
|
||
onLoad(options) {
|
||
// 获取传递的参数并赋值
|
||
this.id = options.id;
|
||
this.getMy()
|
||
},
|
||
methods: {
|
||
saveChanges() {
|
||
request({
|
||
url: '/system/user/profile/update',
|
||
method: 'put',
|
||
data: {
|
||
nickname: this.nickname,
|
||
mobile: this.mobile,
|
||
}
|
||
})
|
||
// 保存修改后的信息(你可以进行表单验证和 API 请求)
|
||
console.log('保存信息', this.nickname, this.mobile);
|
||
// 假设保存成功后返回上一页
|
||
setTimeout(() => {
|
||
uni.navigateBack();
|
||
}, 500);
|
||
},
|
||
async getMy() {
|
||
let res = await request({
|
||
url: '/system/user/profile/get',
|
||
method: 'get',
|
||
})
|
||
this.nickname = res.data.nickname
|
||
this.mobile = res.data.mobile
|
||
this.avatar = res.data.avatar
|
||
this.fileList.push({
|
||
url: baseImageUrl + '/' +this.avatar,
|
||
status: 'success'
|
||
})
|
||
},
|
||
// 删除图片
|
||
deletePic(event) {
|
||
this[`fileList${event.name}`].splice(event.index, 1)
|
||
},
|
||
// 新增图片
|
||
async afterRead(event) {
|
||
console.log('event', event)
|
||
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
|
||
let lists = [].concat(event.file)
|
||
let fileListLen = this[`fileList${event.name}`].length
|
||
console.log('lists', lists)
|
||
lists.map((item) => {
|
||
this[`fileList${event.name}`].push({
|
||
...item,
|
||
status: 'uploading',
|
||
message: '上传中'
|
||
})
|
||
})
|
||
for (let i = 0; i < lists.length; i++) {
|
||
const result = await this.uploadFilePromise(lists[i].url)
|
||
let item = this[`fileList${event.name}`][fileListLen]
|
||
this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
|
||
status: 'success',
|
||
message: '',
|
||
url: result
|
||
}))
|
||
fileListLen++
|
||
}
|
||
},
|
||
uploadFilePromise(url) {
|
||
return new Promise((resolve, reject) => {
|
||
let a = uni.uploadFile({
|
||
url: this.$baseUrl + '/system/user/profile/update-avatar',
|
||
filePath: url,
|
||
name: 'avatarFile',
|
||
header: {
|
||
'Tenant-Id': getTenantId(),
|
||
'Authorization': 'Bearer ' + getToken()
|
||
},
|
||
formData: {
|
||
user: 'test'
|
||
},
|
||
success: (res) => {
|
||
try {
|
||
let img = JSON.parse(res.data);
|
||
this.imagePath = img.data.url
|
||
|
||
} catch (e) {
|
||
//TODO handle the exception
|
||
}
|
||
setTimeout(() => {
|
||
resolve(res.data.data)
|
||
}, 1000)
|
||
}
|
||
});
|
||
})
|
||
},
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style scoped>
|
||
.container {
|
||
padding: 20px;
|
||
}
|
||
|
||
.form-item {
|
||
margin-bottom: 15px;
|
||
}
|
||
|
||
input {
|
||
width: 95%;
|
||
padding: 10px;
|
||
margin-top: 5px;
|
||
border: 1px solid #ddd;
|
||
border-radius: 4px;
|
||
}
|
||
|
||
button {
|
||
margin-top: 20px;
|
||
background-color: #007aff;
|
||
color: white;
|
||
padding: 10px;
|
||
border-radius: 5px;
|
||
width: 100%;
|
||
}
|
||
</style>
|