361 lines
9.2 KiB
Vue
361 lines
9.2 KiB
Vue
<template>
|
||
<div class="personal-info">
|
||
<PageHeader
|
||
title="个人信息"
|
||
:is-back="true"
|
||
:border-bottom="false"
|
||
:background="headerBackground"
|
||
/>
|
||
|
||
<div class="content-wrapper">
|
||
<div class="form-container">
|
||
<div class="form-item">
|
||
<div class="form-label">头像</div>
|
||
<div class="form-value">
|
||
<image
|
||
class="avatar"
|
||
:src="teacherInfo.avatar || '@/static/notes/default-avatar.png'"
|
||
mode="aspectFill"
|
||
></image>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-item">
|
||
<div class="form-label">姓名</div>
|
||
<div class="form-value">
|
||
<u-input
|
||
v-model="teacherInfo.name"
|
||
:border="false"
|
||
placeholder="请输入姓名"
|
||
:clearable="false"
|
||
:custom-style="{ textAlign: 'right' }"
|
||
></u-input>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-merge">
|
||
<div class="form-item-merge">
|
||
<div class="form-label">所属学校</div>
|
||
<div class="form-value">
|
||
<u-input
|
||
v-model="teacherInfo.schoolName"
|
||
:border="false"
|
||
placeholder="请输入学校名称"
|
||
:clearable="false"
|
||
:custom-style="{ textAlign: 'right' }"
|
||
:disabled="true"
|
||
></u-input>
|
||
</div>
|
||
</div>
|
||
<div class="line" style="height: 1px"></div>
|
||
<div class="form-item-merge">
|
||
<div class="form-label">学院</div>
|
||
<div class="form-value" @click="showCollegePicker = true">
|
||
{{ teacherInfo.collegeName || "请选择学院" }}
|
||
<u-icon name="arrow-right" color="#999" size="24"></u-icon>
|
||
</div>
|
||
</div>
|
||
<div class="line" style="height: 1px"></div>
|
||
<div class="form-item-merge">
|
||
<div class="form-label">专业</div>
|
||
<div class="form-value" @click="showMajorPicker = true">
|
||
{{ teacherInfo.professionalName || "请选择专业" }}
|
||
<u-icon name="arrow-right" color="#999" size="24"></u-icon>
|
||
</div>
|
||
</div>
|
||
<div class="line" style="height: 1px"></div>
|
||
<div class="form-item-merge">
|
||
<div class="form-label">岗位</div>
|
||
<div class="form-value">
|
||
<u-input
|
||
v-model="teacherInfo.post"
|
||
:border="false"
|
||
placeholder="请输入岗位"
|
||
:clearable="false"
|
||
:custom-style="{ textAlign: 'right' }"
|
||
></u-input>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="save-btn" @click="saveInfo">保存</div>
|
||
<!-- 学院选择器 -->
|
||
<u-select
|
||
v-model="showCollegePicker"
|
||
:list="collegeList"
|
||
@confirm="confirmCollege"
|
||
></u-select>
|
||
|
||
<!-- 专业选择器 -->
|
||
<u-select
|
||
v-model="showMajorPicker"
|
||
:list="majorList"
|
||
@confirm="confirmMajor"
|
||
></u-select>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import PageHeader from "@/components/PageHeader.vue";
|
||
|
||
export default {
|
||
name: "PersonalInfo",
|
||
components: {
|
||
PageHeader,
|
||
},
|
||
data() {
|
||
return {
|
||
teacherInfo: {
|
||
name: "",
|
||
id: "",
|
||
collegeName: "",
|
||
professionalName: "",
|
||
post: "",
|
||
collegeManagementId: "",
|
||
professionalManagementId: "",
|
||
schoolName: ""
|
||
},
|
||
headerBackground: {
|
||
background: "transparent",
|
||
},
|
||
showCollegePicker: false,
|
||
showMajorPicker: false,
|
||
collegeList: [],
|
||
majorList: [],
|
||
};
|
||
},
|
||
onLoad() {
|
||
// 从vuex获取教师信息
|
||
const info = this.vuex_teacherInfo || {};
|
||
this.teacherInfo = {
|
||
...info,
|
||
schoolName: "江西新能源科技职业技术学院",
|
||
};
|
||
|
||
this.getSchoolInfo();
|
||
},
|
||
methods: {
|
||
// 获取学院和专业信息
|
||
getSchoolInfo() {
|
||
this.$u.api.getData().then((res) => {
|
||
if (res.succeed && res.data) {
|
||
this.handleSchoolInfo(res);
|
||
}
|
||
});
|
||
},
|
||
// 处理获取的接口数据
|
||
handleSchoolInfo(res) {
|
||
// 处理学院信息
|
||
if (res.data && res.data.length > 0) {
|
||
// 设置学院列表
|
||
this.collegeList = res.data.map((item) => ({
|
||
value: item.value,
|
||
label: item.label,
|
||
}));
|
||
|
||
// 设置初始专业列表为第一个学院的专业
|
||
if (res.data[0].children && res.data[0].children.length > 0) {
|
||
this.majorList = res.data[0].children;
|
||
}
|
||
|
||
// 如果已有选择的学院,则设置对应的专业列表
|
||
if (this.teacherInfo.collegeName) {
|
||
const selectedCollege = res.data.find(
|
||
(item) => item.label === this.teacherInfo.collegeName
|
||
);
|
||
if (selectedCollege && selectedCollege.children) {
|
||
this.majorList = selectedCollege.children;
|
||
|
||
// 如果没有collegeManagementId,则设置它
|
||
if (!this.teacherInfo.collegeManagementId) {
|
||
this.teacherInfo.collegeManagementId = selectedCollege.value;
|
||
}
|
||
|
||
// 如果有专业名称但没有专业ID,则设置专业ID
|
||
if (this.teacherInfo.professionalName && !this.teacherInfo.professionalManagementId) {
|
||
const selectedMajor = selectedCollege.children.find(
|
||
(item) => item.label === this.teacherInfo.professionalName
|
||
);
|
||
if (selectedMajor) {
|
||
this.teacherInfo.professionalManagementId = selectedMajor.value;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
// 确认学院选择
|
||
confirmCollege(e) {
|
||
this.teacherInfo.collegeName = e[0].label;
|
||
this.teacherInfo.collegeManagementId = e[0].value;
|
||
|
||
// 根据选中的学院更新专业列表
|
||
this.$u.api.getData().then((res) => {
|
||
if (res.succeed && res.data) {
|
||
const selectedCollege = res.data.find(
|
||
(item) => item.label === this.teacherInfo.collegeName
|
||
);
|
||
|
||
if (selectedCollege && selectedCollege.children) {
|
||
this.majorList = selectedCollege.children;
|
||
// 清空之前选择的专业
|
||
this.teacherInfo.professionalName = "";
|
||
}
|
||
}
|
||
});
|
||
},
|
||
|
||
// 确认专业选择
|
||
confirmMajor(e) {
|
||
this.teacherInfo.professionalName = e[0].label;
|
||
this.teacherInfo.professionalManagementId = e[0].value;
|
||
},
|
||
|
||
// 保存个人信息
|
||
saveInfo() {
|
||
// 表单验证
|
||
if (!this.teacherInfo.name) {
|
||
return this.$u.toast("请输入姓名");
|
||
}
|
||
if (!this.teacherInfo.schoolName) {
|
||
return this.$u.toast("请输入学校名称");
|
||
}
|
||
if (!this.teacherInfo.collegeName) {
|
||
return this.$u.toast("请选择学院");
|
||
}
|
||
if (!this.teacherInfo.professionalName) {
|
||
return this.$u.toast("请选择专业");
|
||
}
|
||
if (!this.teacherInfo.post) {
|
||
return this.$u.toast("请输入岗位");
|
||
}
|
||
|
||
this.$u.vuex("vuex_teacherInfo", this.teacherInfo);
|
||
console.log("this.teacherInfo----", this.teacherInfo);
|
||
let query = {
|
||
...this.teacherInfo,
|
||
schoolName: "江西新能源科技职业技术学院",
|
||
};
|
||
|
||
this.$u.api
|
||
.updateTeacherInfo(query)
|
||
.then((res) => {
|
||
this.$u.toast("保存成功");
|
||
setTimeout(() => {
|
||
uni.navigateBack();
|
||
}, 1500);
|
||
})
|
||
.catch((err) => {
|
||
this.$u.toast("保存失败,请重试");
|
||
});
|
||
|
||
// 模拟保存成功
|
||
this.$u.toast("保存成功");
|
||
setTimeout(() => {
|
||
uni.navigateBack();
|
||
}, 1500);
|
||
},
|
||
},
|
||
};
|
||
</script>
|
||
|
||
<style scoped>
|
||
.personal-info {
|
||
height: 100vh;
|
||
background-image: url("@/static/notes/bg.png");
|
||
background-position: center top;
|
||
background-repeat: no-repeat;
|
||
background-size: 100% auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
position: relative;
|
||
}
|
||
|
||
.content-wrapper {
|
||
flex: 1;
|
||
display: flex;
|
||
flex-direction: column;
|
||
padding: 20rpx 30rpx 60px;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.form-container {
|
||
border-radius: 8px;
|
||
margin-top: 46rpx;
|
||
}
|
||
|
||
.form-item {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
padding: 30rpx;
|
||
border-radius: 20rpx;
|
||
margin-bottom: 20rpx;
|
||
background-color: #fff;
|
||
}
|
||
|
||
.form-merge {
|
||
display: flex;
|
||
flex-direction: column;
|
||
border-radius: 20rpx;
|
||
background-color: #fff;
|
||
}
|
||
|
||
.form-item-merge {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
padding: 30rpx;
|
||
}
|
||
|
||
.line {
|
||
width: 90%;
|
||
height: 1px;
|
||
background-color: #f0f0f0;
|
||
margin: 0 auto;
|
||
}
|
||
|
||
.form-label {
|
||
font-size: 28rpx;
|
||
font-weight: 500;
|
||
color: #333;
|
||
flex-shrink: 0;
|
||
width: 160rpx;
|
||
}
|
||
|
||
.form-value {
|
||
display: flex;
|
||
align-items: center;
|
||
font-size: 27rpx;
|
||
font-weight: 500;
|
||
color: #333;
|
||
flex: 1;
|
||
justify-content: flex-end;
|
||
text-align: right;
|
||
}
|
||
|
||
.avatar {
|
||
width: 52rpx;
|
||
height: 52rpx;
|
||
border-radius: 50%;
|
||
margin-right: 20rpx;
|
||
}
|
||
|
||
.save-btn {
|
||
width: 90%;
|
||
height: 90rpx;
|
||
line-height: 90rpx;
|
||
text-align: center;
|
||
color: #fff;
|
||
background: #4f6aff;
|
||
border-radius: 16rpx;
|
||
margin: 60rpx auto;
|
||
font-size: 32rpx;
|
||
font-weight: bold;
|
||
display: fixed;
|
||
bottom: 0;
|
||
}
|
||
</style>
|