Files
zhxg_app_v1.0/pages/applyrelieve/applyrelieve.vue
2025-07-16 15:34:34 +08:00

448 lines
11 KiB
Vue

<template>
<view class="container" style="padding-bottom: 60px;">
<uni-forms :modelValue="form" :rules="rules" ref="form">
<!-- 姓名 -->
<uni-forms-item label="姓名" name="stuName">
<uni-easyinput type="text" v-model="form.stuName" placeholder="请输入姓名" />
</uni-forms-item>
<!-- 学号 -->
<uni-forms-item label="学号" name="stuNo">
<uni-easyinput type="text" v-model="form.stuNo" placeholder="请输入学号" />
</uni-forms-item>
<!-- 性别选择 -->
<uni-forms-item label="性别" required name="gender">
<uni-data-checkbox v-model="form.gender" :localdata="sexs" />
</uni-forms-item>
<!-- <uni-forms-item label="性别" name="gender">
<picker :range="politicalOptions" v-model="form.gender" @change="onPoliticalChange">
<view class="select">{{ politicalOptions[selectedPoliticalIndex] || '请选择性别' }}</view>
</picker>
</uni-forms-item> -->
<!-- 系部 -->
<uni-forms-item label="系部" name="departmentName">
<uni-easyinput type="text" v-model="form.departmentName" placeholder="请输入系部" />
</uni-forms-item>
<!-- 年级 -->
<uni-forms-item label="年级" name="gradeName">
<uni-easyinput type="text" v-model="form.gradeName" placeholder="请输入年级" />
</uni-forms-item>
<!-- 班级 -->
<uni-forms-item label="班级" name="className">
<uni-easyinput type="text" v-model="form.className" placeholder="请输入班级" />
</uni-forms-item>
<!-- 民族 -->
<uni-forms-item label="民族" name="mz">
<uni-easyinput type="text" v-model="form.mz" placeholder="请输入民族" />
</uni-forms-item>
<!-- 出生日期 -->
<uni-forms-item label="出生日期" name="birthday">
<uni-easyinput type="text" v-model="form.birthday" placeholder="请输入出生日期" />
</uni-forms-item>
<!-- 籍贯 -->
<uni-forms-item label="籍贯" name="jg">
<uni-easyinput type="text" v-model="form.jg" placeholder="省/自治区/直辖市" />
</uni-forms-item>
<!-- 处分文号 -->
<uni-forms-item label="处分文号" name="penaltyNumber">
<uni-easyinput type="text" v-model="form.penaltyNumber" placeholder="请输入处分文号" @blur="handleBlurPenalty" />
</uni-forms-item>
<!-- 违纪时间 -->
<uni-forms-item label="违纪时间" name="violationDate">
<uni-easyinput type="text" v-model="form.violationDate" placeholder="请输入违纪时间" />
</uni-forms-item>
<!-- 处分等级 -->
<uni-forms-item label="处分等级" name="penaltyType">
<uni-data-select v-model="form.penaltyType" :localdata="penaltyTypeOptions" :disabled="true"></uni-data-select>
</uni-forms-item>
<!-- 处分建议 -->
<uni-forms-item label="处分建议" name="penaltyRecommendation">
<uni-easyinput type="textarea" v-model="form.penaltyRecommendation" maxlength="500" placeholder="请输入处分建议" />
</uni-forms-item>
<!-- 违纪条例 -->
<uni-forms-item label="违纪条例" name="stuName">
<uni-easyinput type="textarea" v-model="form.violationRegulations" maxlength="500" placeholder="请输入违纪条例" />
</uni-forms-item>
<!-- 按钮 -->
<view class="btn">
<button style="background-color: red;" @click="clean">清除</button>
<button style="background-color: whitesmoke; color: black;" @click="save">保存</button>
<button @click="submitForm">提交申请</button>
</view>
</uni-forms>
</view>
</template>
<script>
import {
getMyStuInfo,
getPenaltyNumber,
save,
addRelieve
} from "@/api/applyleave/applyleave.js";
// import {
// getDicts
// } from "@/api/system/dict/data";
export default {
data() {
return {
options: ['一等', '二等', '三等'], // 处分等级
selectedOptionIndex: -1, // 当前选中的奖项索引
politicalOptions: ['男', '女'], // 政治面貌选项
selectedPoliticalIndex: -1, // 当前选中的政治面貌索引
stuname: "", //
stduID: "",
system: "",
introduction: "",
deeds: "",
grade: "",
studclass: "",
nation: "",
birth: "",
Hometown: "",
city: "",
number: "",
thought: "",
time: "",
form: {
stuNo: '',
stuName: '',
gender: '',
departmentName: '',
gradeName: '',
className: '',
mz: '',
birthday: '',
jg: "",
penaltyNumber: '',
violationDate: '',
penaltyType: '',
penaltyRecommendation: '',
violationRegulations: ''
},
penaltyTypeOptions: null,
// 表单校验
rules: {
stuNo: {
rules: [{
required: true,
message: '学号不能为空',
trigger: 'blur'
}]
},
stuName: {
rules: [{
required: true,
errorMessage: '请输入姓名',
}]
},
gender: {
rules: [{
required: true,
errorMessage: '请选择性别',
}]
},
departmentName: {
rules: [{
required: true,
errorMessage: '请输入院部',
}]
},
gradeName: {
rules: [{
required: true,
errorMessage: '请输入年级',
}]
},
className: {
rules: [{
required: true,
errorMessage: '请输入班级',
}]
},
mz: {
rules: [{
required: true,
errorMessage: '请输入民族',
}]
},
birthday: {
rules: [{
required: true,
errorMessage: '请输入出生日期',
}]
},
jg: {
rules: [{
required: true,
errorMessage: '请选择籍贯',
}]
},
penaltyNumber: {
rules: [{
required: true,
errorMessage: '请输入处分文号',
}]
},
violationDate: {
rules: [{
required: true,
errorMessage: '违纪时间不能为空',
}]
},
penaltyType: {
rules: [{
required: true,
errorMessage: '处分等级不能为空',
}]
},
penaltyRecommendation: {
rules: [{
required: true,
errorMessage: '请输入处分建议',
}]
},
violationRegulations: {
rules: [{
required: true,
errorMessage: '请输入违纪条例',
}]
},
},
sexs: [{
text: '男',
value: '男'
}, {
text: '女',
value: '女'
}],
};
},
onLoad() {
this.loadMyStuInfo()
getDicts("rt_penalty_type").then(response => {
this.penaltyTypeOptions = response.data.map((item) => ({
value: item.dictValue, // 根据实际情况映射 value
text: item.dictLabel, // 如果 dictValue 和 value 相同,否则映射 dictValue
}));
});
},
mounted() {
// 在组件挂载时尝试从本地存储中加载已保存的数据
this.loadFormData();
},
methods: {
loadMyStuInfo() {
getMyStuInfo().then(res => {
this.form.stuNo = res.data.stuNo
this.form.stuName = res.data.studentName
this.form.gender = res.data.gender
this.form.departmentName = res.data.departmentName
this.form.gradeName = res.data.gradeName
this.form.className = res.data.className
this.form.mz = res.data.mz
this.form.birthday = res.data.birthday
this.form.jg = res.data.jg
})
},
handleBlurPenalty() {
if (this.form.penaltyNumber) {
getPenaltyNumber(this.form.penaltyNumber).then((res) => {
if (res.code == 500) {
return
}
if (res.data) {
this.form.penaltyNumber = res.data.penaltyNumber
this.form.violationDate = res.data.violationDate
this.form.penaltyType = res.data.penaltyType.toString()
this.form.penaltyRecommendation = res.data.penaltyRecommendation
this.form.violationRegulations = res.data.violationRegulations
} else {
this.$message.error('未找到相关处分文号')
}
})
}
},
onPickerChange(event) {
this.selectedOptionIndex = event.detail.value;
},
//
onPoliticalChange(event) {
this.selectedPoliticalIndex = event.detail.value;
},
// 清空表单
clean() {
this.form = null
},
save() {
this.$refs.form.validate().then(res => {
uni.showModal({
confirmText: "确定",
cancelText: "放弃",
confirmColor: "#aa0000",
title: "确定提交保存吗?",
success: res => {
if (res.confirm) {
save(this.form).then(res => {
if (res.code == 200) {
uni.showToast({
title: '保存成功',
duration: 2000,
success: res => {
// 跳转会主页
}
});
} else {
uni.showToast({
title: res.msg,
icon: 'none'
});
}
})
}
}
})
}).catch(err => {
console.log('表单错误信息:', err);
})
},
submitForm() {
this.$refs.form.validate().then(res => {
uni.showModal({
confirmText: "确定",
cancelText: "放弃",
confirmColor: "#aa0000",
title: "确定提交申请吗?",
success: res => {
if (res.confirm) {
addRelieve(this.form).then(res => {
if (res.code == 200) {
uni.showToast({
title: '提交成功',
duration: 2000,
success: res => {
// 跳转会主页
}
});
} else {
uni.showToast({
title: res.msg,
icon: 'none'
});
}
})
}
}
})
}).catch(err => {
console.log('表单错误信息:', err);
})
},
loadFormData() {
// 尝试从本地存储中加载已保存的表单数据
const savedData = localStorage.getItem('formData');
if (savedData) {
const formData = JSON.parse(savedData);
this.stduID = formData.stduID;
this.stuname = formData.stuname;
this.system = formData.system;
this.studclass = formData.studclass;
this.deeds = formData.deeds;
this.introduction = formData.introduction;
this.grade = formData.grade;
this.birth = formData.birth;
this.nation = formData.nation;
this.deeds = formData.deeds;
this.Hometown = formData.Hometown;
this.city = formData.city;
this.number = formData.number;
this.thought = formData.thought;
this.time = formData.time;
// 如果性别存在于选项中,则设置其索引
this.selectedOptionIndex = this.options.indexOf(formData.gender);
this.selectedPoliticalIndex = this.politicalOptions.indexOf(formData.because);
}
}
}
};
</script>
<style>
.container {
display: flex;
flex-direction: column;
align-items: center;
padding: 10rpx;
}
.form-item {
width: 95%;
height: 80rpx;
display: flex;
align-items: center;
margin-bottom: 20rpx;
justify-content: space-between;
border-bottom: 1px solid #ededee;
}
.form-text {
width: 95%;
margin-bottom: 20rpx;
border-bottom: 1px solid #ededee;
}
.txt {
margin-top: 20rpx;
}
.label {
text-align: right;
margin-right: 20rpx;
}
.select {
color: #888889;
}
.uni-input {
/* width: 23%; */
color: #888889;
text-align: right;
}
.btn {
width: 100%;
height: 90rpx;
display: flex;
justify-content: space-between;
position: fixed;
bottom: 20px;
left: 0;
margin: 0 auto;
}
button {
width: 30%;
background-color: #87CEFA;
color: white;
}
</style>