384 lines
9.9 KiB
Vue
384 lines
9.9 KiB
Vue
|
<template>
|
|||
|
<view class="container" style="padding-bottom: 60px;">
|
|||
|
<!--学号 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">学号:</text>
|
|||
|
<input v-model="studID" class="uni-input" focus placeholder="请输入学号" />
|
|||
|
</view>
|
|||
|
<!--姓名 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">姓名:</text>
|
|||
|
<input v-model="name" class="uni-input" focus placeholder="请输入姓名" />
|
|||
|
</view>
|
|||
|
<!-- 性别 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">性别</text>
|
|||
|
<picker :range="options" v-model="selectedOptionIndex" @change="onPickerChange">
|
|||
|
<view class="select">{{ options[selectedOptionIndex] || '性别' }} </view>
|
|||
|
</picker>
|
|||
|
</view>
|
|||
|
<!--院部 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">院部:</text>
|
|||
|
<input v-model="courtyard" class="uni-input" focus placeholder="请输入院部" />
|
|||
|
</view>
|
|||
|
<!--班级 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">班级 :</text>
|
|||
|
<input v-model="classroom" class="uni-input" focus placeholder="请输入班级 " />
|
|||
|
</view>
|
|||
|
<!--联系电话 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">联系电话 :</text>
|
|||
|
<input v-model="phone" class="uni-input" focus placeholder="请输入联系电话 " />
|
|||
|
</view>
|
|||
|
<!--家长姓名 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">家长姓名:</text>
|
|||
|
<input v-model="parent" class="uni-input" focus placeholder="请输入家长姓名 " />
|
|||
|
</view>
|
|||
|
<!--家长联系电话 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">联系电话:</text>
|
|||
|
<input v-model="parentPhone" class="uni-input" focus placeholder="请输入联系电话 " />
|
|||
|
</view>
|
|||
|
<!-- 请假事由 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">请假事由:</text>
|
|||
|
<picker :range="politicalOptions" v-model="selectedPoliticalIndex" @change="onPoliticalChange">
|
|||
|
<view class="select">{{ politicalOptions[selectedPoliticalIndex] || '请选择请假事由' }}</view>
|
|||
|
</picker>
|
|||
|
</view>
|
|||
|
<!-- 请假事由说明 -->
|
|||
|
<view class="form-text">
|
|||
|
<text class="label">请假事由说明:</text>
|
|||
|
<view class="txt">
|
|||
|
<uni-forms-item>
|
|||
|
<uni-easyinput type="textarea" v-model="deeds" maxlength="500" placeholder="输入请假事由说明" />
|
|||
|
</uni-forms-item>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<!-- 请假时间 -->
|
|||
|
<view class="form-item"> <!-- 根据选择的申请类型来决定是否显示 -->
|
|||
|
<text class="label">请假起始时间:</text>
|
|||
|
|
|||
|
<view class="example-body">
|
|||
|
<uni-datetime-picker type="date" :clear-icon="false" v-model="beginData" @maskClick="maskClick"
|
|||
|
:border="false" />
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="form-item"> <!-- 根据选择的申请类型来决定是否显示 -->
|
|||
|
<text class="label">请假截至时间:</text>
|
|||
|
<view class="example-body">
|
|||
|
<uni-datetime-picker type="date" :clear-icon="false" v-model="endData" @maskClick="maskClick"
|
|||
|
:border="false" />
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<!--请假天数 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">请假天数:</text>
|
|||
|
<input v-model="dataNum" class="uni-input" focus placeholder="请输入请假天数 " />
|
|||
|
</view>
|
|||
|
<!-- 上传佐证 -->
|
|||
|
<view class="form-img">
|
|||
|
<text class="label">上传佐证:</text>
|
|||
|
<view class="example-body">
|
|||
|
<uni-file-picker limit="9" title=""></uni-file-picker>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<!-- 是否离桂 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">是否离桂(广西):</text>
|
|||
|
<picker :range="leave" v-model="leaveIndex" @change="onleaveChange">
|
|||
|
<view class="select">{{ leave[leaveIndex] || '请选择是否离桂' }}</view>
|
|||
|
</picker>
|
|||
|
</view>
|
|||
|
<!-- 目的地 -->
|
|||
|
<!-- <view class="form-address">
|
|||
|
|
|||
|
<view class="example-body">
|
|||
|
<complex-picker-region label="目的地址" clear-icon="false" @confirm='confirm' />
|
|||
|
</view>
|
|||
|
</view> -->
|
|||
|
<!--详细地址 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="label">详细地址:</text>
|
|||
|
<input v-model="address" class="uni-input" focus placeholder="请输入详细地址 " />
|
|||
|
</view>
|
|||
|
<!--协议 -->
|
|||
|
<view class="form-item">
|
|||
|
<text class="labelsafe">《广西水利电力职业技术学院安全承诺书》
|
|||
|
</text>
|
|||
|
<label>
|
|||
|
<checkbox :value="isChecked.toString()" @click="toggleCheckbox" />
|
|||
|
</label>
|
|||
|
</view>
|
|||
|
<!-- 签名 -->
|
|||
|
<view class="form-canvas">
|
|||
|
<text class="label">签名:</text>
|
|||
|
<!-- <liu-signature @change="change" bgColor="#e8e8e8" lineColor="#000" :width="700"></liu-signature>
|
|||
|
<image class="success-img" :src="url" @click="previewImg(url)"></image> -->
|
|||
|
<liu-signature @change="change" bgColor="#e8e8e8" lineColor="#000" :width="700"></liu-signature>
|
|||
|
<image class="success-img" :src="url" @click="previewImg(url)"></image>
|
|||
|
</view>
|
|||
|
<!-- 按钮 -->
|
|||
|
<view class="btn">
|
|||
|
<button style="background-color: red;" @click="clean">清除</button>
|
|||
|
<button style="background-color: whitesmoke; color: black;" @click="save">保存</button>
|
|||
|
<button>提交申请</button>
|
|||
|
</view>
|
|||
|
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
export default {
|
|||
|
data() {
|
|||
|
return {
|
|||
|
studID: "",
|
|||
|
name: "",
|
|||
|
courtyard: "",
|
|||
|
options: ['男', '女'],
|
|||
|
classroom: "",
|
|||
|
phone: "",
|
|||
|
parent: "",
|
|||
|
parentPhone: "",
|
|||
|
selectedOptionIndex: -1, // 当前选中的奖项索引
|
|||
|
politicalOptions: ['因病', '因事'], // 请假选项
|
|||
|
selectedPoliticalIndex: -1, // 当前选中的请假索引
|
|||
|
beginData: '',
|
|||
|
endData: "",
|
|||
|
dataNum: "",
|
|||
|
deeds: "",
|
|||
|
leave: ['是', '否'],
|
|||
|
leaveIndex: -1,
|
|||
|
address: "",
|
|||
|
url: "",
|
|||
|
isChecked: false,
|
|||
|
// 签名
|
|||
|
|
|||
|
};
|
|||
|
},
|
|||
|
|
|||
|
mounted() {
|
|||
|
// 在组件挂载时尝试从本地存储中加载已保存的数据
|
|||
|
this.loadFormData();
|
|||
|
|
|||
|
|
|||
|
},
|
|||
|
methods: {
|
|||
|
change(e) {
|
|||
|
console.log('生成的图片:', e)
|
|||
|
this.url = e
|
|||
|
},
|
|||
|
//预览图片
|
|||
|
previewImg(url) {
|
|||
|
if (!url) return
|
|||
|
let list = [url]
|
|||
|
uni.previewImage({
|
|||
|
urls: list
|
|||
|
})
|
|||
|
},
|
|||
|
onPickerChange(event) {
|
|||
|
this.selectedOptionIndex = event.detail.value;
|
|||
|
},
|
|||
|
//
|
|||
|
onPoliticalChange(event) {
|
|||
|
this.selectedPoliticalIndex = event.detail.value;
|
|||
|
},
|
|||
|
// 是否离桂
|
|||
|
|
|||
|
onleaveChange(event) {
|
|||
|
this.leaveIndex = event.detail.value;
|
|||
|
},
|
|||
|
confirm(selectData) {
|
|||
|
console.log('selectData', selectData);
|
|||
|
},
|
|||
|
toggleCheckbox() {
|
|||
|
this.isChecked = !this.isChecked; // 切换选中状态
|
|||
|
},
|
|||
|
// 清空表单
|
|||
|
clean() {
|
|||
|
this.studID = "";
|
|||
|
this.name = "";
|
|||
|
this.courtyard = "";
|
|||
|
this.selectedOptionIndex = -1;
|
|||
|
this.classroom = '';
|
|||
|
this.phone = '';
|
|||
|
this.parent = '';
|
|||
|
this.parentPhone = "";
|
|||
|
this.selectedPoliticalIndex = -1
|
|||
|
this.beginData = "";
|
|||
|
this.endData = '';
|
|||
|
this.dataNum = '';
|
|||
|
this.deeds = '';
|
|||
|
this.leaveIndex = -1;
|
|||
|
this.address = '';
|
|||
|
this.isChecked = false;
|
|||
|
this.$forceUpdate(); // 强制更新组件
|
|||
|
this.url = ''
|
|||
|
localStorage.removeItem('formData');
|
|||
|
},
|
|||
|
save() {
|
|||
|
// 构造数据对象
|
|||
|
const formData = {
|
|||
|
studID: this.studID,
|
|||
|
name: this.name,
|
|||
|
courtyard: this.courtyard,
|
|||
|
classroom: this.classroom,
|
|||
|
phone: this.phone,
|
|||
|
parent: this.parent,
|
|||
|
parentPhone: this.parentPhone,
|
|||
|
beginData: this.beginData,
|
|||
|
endData: this.endData,
|
|||
|
beginData: this.beginData,
|
|||
|
dataNum: this.dataNum,
|
|||
|
deeds: this.deeds,
|
|||
|
address: this.address,
|
|||
|
url: this.url,
|
|||
|
because: this.politicalOptions[this.selectedPoliticalIndex],
|
|||
|
gender: this.options[this.selectedOptionIndex], // 获取选中的性别
|
|||
|
leave: this.leave[this.leaveIndex]
|
|||
|
// 其他表单项...
|
|||
|
};
|
|||
|
|
|||
|
// 将表单数据保存到本地存储
|
|||
|
localStorage.setItem('formData', JSON.stringify(formData));
|
|||
|
|
|||
|
console.log("保存的表单数据:", formData);
|
|||
|
},
|
|||
|
loadFormData() {
|
|||
|
// 尝试从本地存储中加载已保存的表单数据
|
|||
|
const savedData = localStorage.getItem('formData');
|
|||
|
if (savedData) {
|
|||
|
const formData = JSON.parse(savedData);
|
|||
|
// 将加载的数据填充到表单中
|
|||
|
this.studID = formData.studID;
|
|||
|
this.name = formData.name;
|
|||
|
this.courtyard = formData.courtyard;
|
|||
|
this.classroom = formData.classroom;
|
|||
|
this.phone = formData.phone;
|
|||
|
this.parent = formData.parent;
|
|||
|
this.parentPhone = formData.parentPhone;
|
|||
|
this.beginDatabeginData = formData.beginData;
|
|||
|
this.dataNum = formData.dataNum;
|
|||
|
this.deeds = formData.deeds;
|
|||
|
this.url = formData.url;
|
|||
|
// 如果性别存在于选项中,则设置其索引
|
|||
|
this.selectedOptionIndex = this.options.indexOf(formData.gender);
|
|||
|
this.selectedPoliticalIndex = this.politicalOptions.indexOf(formData.because);
|
|||
|
this.leaveIndex = this.leave.indexOf(formData.leave);
|
|||
|
// 其他表单项...
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
},
|
|||
|
|
|||
|
};
|
|||
|
</script>
|
|||
|
|
|||
|
<style scoped>
|
|||
|
.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;
|
|||
|
}
|
|||
|
|
|||
|
.form-img {
|
|||
|
width: 95%;
|
|||
|
margin-bottom: 20rpx;
|
|||
|
border-bottom: 1px solid #ededee;
|
|||
|
}
|
|||
|
|
|||
|
.example-body {
|
|||
|
margin-top: 20rpx;
|
|||
|
margin-bottom: 20rpx;
|
|||
|
}
|
|||
|
|
|||
|
.txt {
|
|||
|
margin-top: 20rpx;
|
|||
|
}
|
|||
|
|
|||
|
.label {
|
|||
|
text-align: right;
|
|||
|
margin-right: 20rpx;
|
|||
|
}
|
|||
|
|
|||
|
.select {
|
|||
|
color: #888889;
|
|||
|
white-space: nowrap;
|
|||
|
/* 防止换行 */
|
|||
|
overflow: hidden;
|
|||
|
/* 隐藏溢出部分 */
|
|||
|
text-overflow: ellipsis;
|
|||
|
/* 显示省略号 */
|
|||
|
}
|
|||
|
|
|||
|
.uni-input {
|
|||
|
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;
|
|||
|
}
|
|||
|
|
|||
|
.form-address {
|
|||
|
|
|||
|
width: 100%;
|
|||
|
display: flex;
|
|||
|
justify-content: space-between;
|
|||
|
}
|
|||
|
|
|||
|
.labelsafe {
|
|||
|
color: red;
|
|||
|
}
|
|||
|
|
|||
|
.form-canvas {
|
|||
|
width: 95%;
|
|||
|
height: 700rpx;
|
|||
|
}
|
|||
|
|
|||
|
.tab-box {
|
|||
|
width: 80%;
|
|||
|
height: 100vh;
|
|||
|
background-color: #f0f0f0;
|
|||
|
}
|
|||
|
.success-img {
|
|||
|
width: 90%;
|
|||
|
height: 300rpx;
|
|||
|
|
|||
|
}
|
|||
|
</style>
|