Compare commits

...

2 Commits

9 changed files with 2065 additions and 1745 deletions

View File

@@ -18,6 +18,23 @@ export function addStudent(data) {
}) })
} }
// 根据关联表id查看详情
export function getStudentDetail(id) {
return request({
url: `/dormitory/srs-dormitory-student/${id}`,
method: 'get'
})
}
// 修改学生宿舍关联
export function updateStudent(data) {
return request({
url: '/dormitory/srs-dormitory-student/update',
method: 'post',
data
})
}
// 获取校区 // 获取校区
export function listAllCampus() { export function listAllCampus() {
return request({ return request({

View File

@@ -1,33 +1,33 @@
import request from '@/utils/request' import request from '@/utils/request'
export function myProcess(data){ export function myProcess(params){
return request({ return request({
'url': '/flowable/task/myProcess', url: '/flowable/task/myProcess',
'method': 'get', method: 'get',
data params
}) })
} }
export function todoList(data){ export function todoList(params){
return request({ return request({
'url': '/flowable/task/todoList', url: '/flowable/task/todoList',
'method': 'get', method: 'get',
data params
}) })
} }
export function finishedList(data){ export function finishedList(params){
return request({ return request({
'url': '/flowable/task/finishedList', url: '/flowable/task/finishedList',
'method': 'get', method: 'get',
data params
}) })
} }
export function flowRecord(data){ export function flowRecord(params){
return request({ return request({
'url': '/flowable/task/flowRecord', url: '/flowable/task/flowRecord',
'method': 'get', method: 'get',
data params
}) })
} }
export function complete(data){ export function complete(data){
return request({ return request({

View File

@@ -1,8 +1,12 @@
// 应用全局配置 // 应用全局配置
module.exports = { module.exports = {
// 统一通过本机 Nginx 反向代理访问后端
// 若在同一台机器调试:使用 localhost:8066
// 若手机在同一局域网:替换为本机局域网 IP例如 172.16.96.111:8066
// 页面在 https://zhxg.gxsdxy.cn 下访问,接口同域同协议以避免 CORS
// baseUrl: 'https://zhxg.gxsdxy.cn/prod_api', // baseUrl: 'https://zhxg.gxsdxy.cn/prod_api',
// baseUrl: 'http://172.16.96.111:8085', // baseUrl: 'https://zhxg.gxsdxy.cn/prod_api',
// baseUrl: 'http://192.168.211.22:8085', // 若本地/内网以 HTTP 访问页面,可改为:
baseUrl: 'http://localhost:8085', baseUrl: 'http://localhost:8085',
// 应用信息 // 应用信息
appInfo: { appInfo: {
@@ -28,7 +32,7 @@ module.exports = {
/** /**
* 开启cas * 开启cas
*/ */
casEnable: false, casEnable: true,
/** /**
* 单点登录url * 单点登录url
@@ -38,5 +42,5 @@ module.exports = {
/** /**
* 单点登出url * 单点登出url
*/ */
caslogoutUrl: 'https://rsso.gxsdxy.cn/logout?service=http://zhxg.gxsdxy.cn/prod_api_test/getinfo', caslogoutUrl: 'http://rsso.gxsdxy.cn/logout?service=http://zhxg.gxsdxy.cn/prod_api_test/getinfo',
} }

View File

@@ -371,6 +371,7 @@
getRtStuQuitSchoolByProcInsId(procInsId) { getRtStuQuitSchoolByProcInsId(procInsId) {
getRtStuQuitSchoolByProcInsId(procInsId).then((res) => { getRtStuQuitSchoolByProcInsId(procInsId).then((res) => {
this.formData = res.data; this.formData = res.data;
console.log(this.formData)
this.get_penalty_type(this.formData.quitType); this.get_penalty_type(this.formData.quitType);
this.get_category(this.formData.quitCategory); this.get_category(this.formData.quitCategory);
if (this.tag == 1) { if (this.tag == 1) {
@@ -422,9 +423,9 @@
const pages = getCurrentPages(); const pages = getCurrentPages();
if (pages && pages.length > 0) { if (pages && pages.length > 0) {
const prevPage = pages[pages.length - 2] || pages[pages.length - 1]; const prevPage = pages[pages.length - 2] || pages[pages.length - 1];
if (prevPage && typeof prevPage.handleChange === 'function') { if (prevPage && typeof prevPage.handleChange === 'function') {
prevPage.handleChange(this.tag || 1); prevPage.handleChange(2);
} }
} }
} }
@@ -495,18 +496,18 @@
}); });
} }
uni.hideLoading(); uni.hideLoading();
uni.navigateBack({ uni.navigateBack({
success: () => { success: () => {
const pages = getCurrentPages(); const pages = getCurrentPages();
if (pages && pages.length > 0) { if (pages.length > 0) {
const prevPage = pages[pages.length - 2] || pages[pages.length - 1]; const prevPage = pages[pages.length - 2]
if (prevPage && typeof prevPage.handleChange === 'function') { if (prevPage && typeof prevPage.getList === 'function') {
prevPage.handleChange(this.tag || 1); prevPage.handleChange(2);
}
} }
} }
})
}
})
}) })
}, },
rejectDialogConfirm() { rejectDialogConfirm() {
@@ -528,10 +529,10 @@
const pages = getCurrentPages(); const pages = getCurrentPages();
if (pages && pages.length > 0) { if (pages && pages.length > 0) {
const prevPage = pages[pages.length - 2] || pages[pages.length - 1]; const prevPage = pages[pages.length - 2] || pages[pages.length - 1];
if (prevPage && typeof prevPage.handleChange === 'function') { if (prevPage && typeof prevPage.handleChange === 'function') {
prevPage.handleChange(this.tag || 1); prevPage.handleChange(2);
console.log('刷新任务数据'); console.log('刷新已办任务数据');
} }
} }
} }
}) })

View File

@@ -8,6 +8,14 @@
</view> </view>
</view> </view>
<view class="content" v-if="processes.length!==0"> <view class="content" v-if="processes.length!==0">
<view class="search-bar">
<input class="input" placeholder="姓名" v-model="searchName" @confirm="doSearch" />
<picker mode="date" :value="searchDate" @change="onDateChange">
<view class="picker-text">{{ searchDate || '时间' }}</view>
</picker>
<button class="primary" @tap="doSearch">搜索</button>
<button class="reset" @tap="resetSearch">重置</button>
</view>
<view class="list"> <view class="list">
<view class="item" v-for="(process,index) in processes" :key="index"> <view class="item" v-for="(process,index) in processes" :key="index">
<view class="top"> <view class="top">
@@ -75,7 +83,9 @@
currentPage: 1, currentPage: 1,
loading: false, // 加载状态标志 loading: false, // 加载状态标志
topLoading: true, topLoading: true,
role: uni.getStorageSync("roles") role: uni.getStorageSync("roles"),
searchName: '',
searchDate: ''
}; };
}, },
onLoad(option) { onLoad(option) {
@@ -130,12 +140,42 @@
this.topLoading = true; this.topLoading = true;
this.getList(); this.getList();
}, },
doSearch() {
this.currentPage = 1;
this.processes = [];
this.topLoading = true;
this.getList();
},
resetSearch() {
this.searchName = '';
this.searchDate = '';
this.currentPage = 1;
this.processes = [];
this.topLoading = true;
this.getList();
},
onDateChange(e) {
this.searchDate = e.detail.value;
},
getList() { getList() {
this.loading = true; this.loading = true;
let sdata = { let sdata = {
pageNum: this.currentPage, pageNum: this.currentPage,
pageSize: 10 pageSize: 10,
}; };
if (this.searchName) {
sdata.startUserName = this.searchName;
}
if (this.searchDate) {
if (this.currentTab === 2) {
// 已办任务PC端使用 startTime/endTime时间对应“提交时间”
sdata.startTime = this.searchDate;
sdata.endTime = this.searchDate;
} else {
// 我发起的、待办任务PC端使用 deployTime时间对应“提交时间”
sdata.deployTime = this.searchDate;
}
}
console.log(this.processes); console.log(this.processes);
if (this.currentTab == 0) { if (this.currentTab == 0) {
myProcess(sdata).then(res => { myProcess(sdata).then(res => {
@@ -320,6 +360,41 @@
} }
} }
.search-bar {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 10px;
background-color: #ffffff;
border-bottom: 1px solid #EDEDED;
position: sticky;
top: 58px;
z-index: 998;
.input {
flex: 1;
border: 1px solid #EDEDED;
border-radius: 4px;
padding: 6px 8px;
height: 36px;
line-height: 36px;
box-sizing: border-box;
}
.picker-text {
border: 1px solid #EDEDED;
border-radius: 4px;
padding: 6px 8px;
color: #555555;
}
button.primary {
border: 1px solid #007aff;
color: #007aff;
}
button.reset {
border: 1px solid #909399;
color: #909399;
}
}
.empty { .empty {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -337,6 +412,7 @@
.content { .content {
padding-top: 58px; padding-top: 58px;
.list { .list {
.item { .item {
padding: 20px 10px; padding: 20px 10px;

File diff suppressed because it is too large Load Diff

View File

@@ -418,12 +418,12 @@
const pages = getCurrentPages(); const pages = getCurrentPages();
if (pages.length > 0) { if (pages.length > 0) {
const prevPage = pages[pages.length - 2] || pages[pages.length - 1] const prevPage = pages[pages.length - 2] || pages[pages.length - 1]
if (prevPage && typeof prevPage.handleChange === 'function') { if (prevPage && typeof prevPage.handleChange === 'function') {
prevPage.handleChange(2); prevPage.handleChange(1);
console.log('刷新已办任务数据'); console.log('切回待办任务');
} else if (prevPage && typeof prevPage.getLeaveList === 'function') { } else if (prevPage && typeof prevPage.getLeaveList === 'function') {
prevPage.getLeaveList(); prevPage.getLeaveList();
} }
} }
} }
}) })
@@ -623,12 +623,12 @@
const pages = getCurrentPages(); const pages = getCurrentPages();
if (pages.length > 0) { if (pages.length > 0) {
const prevPage = pages[pages.length - 2] || pages[pages.length - 1] const prevPage = pages[pages.length - 2] || pages[pages.length - 1]
if (prevPage && typeof prevPage.handleChange === 'function') { if (prevPage && typeof prevPage.handleChange === 'function') {
prevPage.handleChange(2); prevPage.handleChange(1);
} else if (prevPage && typeof prevPage.getLeaveList === } else if (prevPage && typeof prevPage.getLeaveList ===
'function') { 'function') {
prevPage.getLeaveList(); prevPage.getLeaveList();
} }
} }
} }
}) })

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
<template> <template>
<view class="form-container"> <view class="form-container">
<view class="form-title">2025-2026学年学生宿舍入住收集表</view> <view class="form-title">学生宿舍入住收集表</view>
<view class="form-desc">涉及住宿费核算请同学们按照实际入住情况填写</view> <view class="form-desc">涉及住宿费核算请同学们按照实际入住情况填写</view>
<!-- 1. 校区 --> <!-- 1. 校区 -->
@@ -81,6 +81,16 @@
</picker> </picker>
</view> </view>
<view class="form-item">
<view class="item-label">中国农业银行卡号</view>
<input class="input" v-model="form.xhk" placeholder="请输入中国农业银行卡号" />
</view>
<view class="form-item">
<view class="item-label">开户行</view>
<input class="input" v-model="form.bankAddr" placeholder="请输入开户行" />
</view>
<!-- 9. 本人证件照 --> <!-- 9. 本人证件照 -->
<view class="form-item"> <view class="form-item">
<view class="item-label"> <view class="item-label">
@@ -103,408 +113,530 @@
</template> </template>
<script> <script>
import { import {
listAllCampus, addStudent,
listParkByCampus, listAllCampus,
listBuildingByPark, listAllRoomByFloor,
listFloorByBuilding, listBuildingByPark,
listAllRoomByFloor, listFloorByBuilding,
addStudent, listParkByCampus,
submitOwnInfo as submitExtraInfo submitOwnInfo as submitExtraInfo,
} from "@/api/dms/studentDormInfo/index.js" getStudentDetail,
import { updateStudent
getUserProfile } from "@/api/dms/studentDormInfo/index.js";
} from '@/api/system/user' import { alipayVali } from "@/api/helpFunc/bank.js";
import { import {
previewImg getUserProfile
} from "@/utils/uploadImg.js" } from '@/api/system/user';
import { import uploadFile from "@/plugins/upload.js";
checkPic import config from '@/config'
} from "@/utils/checkPic.js" import {
import uploadFile from "@/plugins/upload.js"; checkPic
export default { } from "@/utils/checkPic.js";
data() { import request from "@/utils/request";
return { export default {
user: [], data() {
form: { return {
campusName: '', user: [],
parkName: '', form: {
buildingName: '', campusName: '',
floorName: '', parkName: '',
roomNo: '', buildingName: '',
stuNo: '', floorName: '',
isDormitoryHead: '', roomNo: '',
isDormHead: '', stuNo: '',
checkinTime: '', isDormitoryHead: '',
photo: '', isDormHead: '',
teacherName: '', checkinTime: '',
className: '', photo: '',
deptName: '', xhk: '',
stuName: '', bankAddr: '',
displayText: '', teacherName: '',
isInStudentsleep: '', className: '',
photoData: '' deptName: '',
}, stuName: '',
// 校区选项 displayText: '',
campusOptions: [], isInStudentsleep: '是',
// 园区选项(按校区联动) photoData: ''
parkOptions: [], },
// 楼栋选项(按园区联动) // 校区选项
buildingOptions: [], campusOptions: [],
// 楼层选项(下拉框 // 园区选项(按校区联动
floorOptions: [], parkOptions: [],
// 宿舍号选项(下拉框 // 楼栋选项(按园区联动
dormOptions: [], buildingOptions: [],
// 宿舍长选项 // 楼层选项(下拉框)
dormHeadOptions: ['否', '是'], floorOptions: [],
// 当前选中项的id // 宿舍号选项(下拉框)
selectedCampus: null, // 选中的校区({id, name} dormOptions: [],
selectedPark: null, // 选中的园区 // 宿舍长选项
selectedBuilding: null, // 选中的楼栋 dormHeadOptions: ['否', '是'],
selectedFloor: null, // 选中的楼层 // 当前选中项的id
selectedDorm: null, //选中的宿舍 selectedCampus: null, // 选中的校区({id, name}
}; selectedPark: null, // 选中的园区
selectedBuilding: null, // 选中的楼栋
selectedFloor: null, // 选中的楼层
selectedDorm: null, //选中的宿舍
mode: 'add',
editId: null
};
},
onLoad(options) {
this.getUserProfile()
this.listAllCampus()
if (options && options.mode === 'edit' && options.id) {
this.mode = 'edit'
this.editId = Number(options.id)
this.initEdit(this.editId)
}
},
methods: {
// 获取用户信息
async getUserProfile() {
try {
const res = await getUserProfile()
this.user = res
this.form.stuNo = this.user.data.userName
console.log('当前用户信息:', res)
} catch (err) {
console.error('获取用户信息失败:', err)
}
}, },
onLoad() { // 获取校区数据
this.getUserProfile() async listAllCampus() {
this.listAllCampus() let res = await listAllCampus()
if (res.code == 200) {
this.campusOptions = [...res.data]
}
},
// 编辑模式初始化
async initEdit(id) {
try {
const res = await getStudentDetail(id)
if (res.code !== 200) {
uni.showToast({ title: '加载详情失败', icon: 'none' })
return
}
const d = res.data
this.form.stuNo = d.stuNo || this.form.stuNo
this.form.isDormHead = d.isDormitoryHead === 1 ? '是' : '否'
this.form.checkinTime = d.checkinTime ? String(d.checkinTime).slice(0, 10) : ''
this.form.isInStudentsleep = d.isInStudentsleep || this.form.isInStudentsleep
const own = await request({ url: '/system/student/getOwnInfo', method: 'get' })
if (own && own.data) {
this.form.xhk = own.data.xhk || ''
this.form.bankAddr = own.data.bankAddr || ''
}
const extra = await request({ url: '/comprehensive/extraInfo/getOwnInfo', method: 'get' })
if (extra && extra.data) {
this.form.photo = extra.data.whitePhoto || ''
this.form.photoData = extra.data.whitePhoto ? (config.baseUrl + extra.data.whitePhoto) : ''
}
const campusName = d.campusName
const parkName = d.parkName
const buildingName = d.buildingName
const floorName = d.floorName
const roomNo = d.roomNo
const campus = this.campusOptions.find(c => c.name === campusName)
if (campus) {
this.form.campusName = campus.name
this.selectedCampus = campus.id
await this.listParkByCampus(this.selectedCampus)
const park = this.parkOptions.find(p => p.name === parkName)
if (park) {
this.form.parkName = park.name
this.selectedPark = park.id
await this.listBuildingByPark(this.selectedPark)
const building = this.buildingOptions.find(b => b.name === buildingName)
if (building) {
this.form.buildingName = building.name
this.selectedBuilding = building.id
await this.listFloorByBuilding(this.selectedBuilding)
let floor = this.floorOptions.find(f => String(f.floor) === String(floorName))
if (!floor) {
for (const f of this.floorOptions) {
await this.listAllRoomByFloor(f.id)
const dormTry = this.dormOptions.find(r => r.roomNo === roomNo)
if (dormTry) {
floor = f
this.selectedDorm = dormTry.id
this.form.roomNo = dormTry.roomNo
break
}
}
}
if (floor) {
this.form.floorName = floor.floor
this.selectedFloor = floor.id
if (!this.selectedDorm) {
await this.listAllRoomByFloor(this.selectedFloor)
const dorm = this.dormOptions.find(r => r.roomNo === roomNo)
if (dorm) {
this.form.roomNo = dorm.roomNo
this.selectedDorm = dorm.id
}
}
}
}
}
}
} catch (e) {
console.error(e)
}
},
// 根据校区id获取园区
async listParkByCampus(id) {
let res = await listParkByCampus(id)
if (res.code == 200) {
this.parkOptions = [...res.data]
}
}, },
methods: { // 根据园区id获取楼栋
// 获取用户信息 async listBuildingByPark(id) {
async getUserProfile() { let res = await listBuildingByPark(id)
try { if (res.code == 200) {
const res = await getUserProfile() this.buildingOptions = [...res.data]
this.user = res }
this.form.stuNo = this.user.data.userName },
console.log('当前用户信息:', res) // 根据楼栋id获取楼层
} catch (err) { async listFloorByBuilding(id) {
console.error('获取用户信息失败:', err) let res = await listFloorByBuilding(id)
} if (res.code == 200) {
}, this.floorOptions = [...res.data]
// 获取校区数据 }
async listAllCampus() { },
let res = await listAllCampus() // 根据楼层id获取宿舍号
if (res.code == 200) { async listAllRoomByFloor(id) {
this.campusOptions = [...res.data] let res = await listAllRoomByFloor(id)
} if (res.code == 200) {
}, this.dormOptions = [...res.data]
// 根据校区id获取园区 // 遍历数据,为每个对象添加 displayText 属性
async listParkByCampus(id) { this.dormOptions = res.data.map(v => ({
let res = await listParkByCampus(id) ...v, // 保留原对象所有属性
if (res.code == 200) { // 新增拼接后的显示文本属性
this.parkOptions = [...res.data] displayText: `${v.roomNo} -- ${v.gender} -- 床位 ${v.bedNum} -- 已住 ${v.occupancy}`,
} isFull: v.occupancy >= v.bedNum // 新增:判断是否满人
}, }));
// 根据园区id获取楼栋 }
async listBuildingByPark(id) { },
let res = await listBuildingByPark(id) // 校区选择变化
if (res.code == 200) { handleCampusChange(e) {
this.buildingOptions = [...res.data] this.form.campusName = this.campusOptions[e.detail.value].name;
} this.form.parkName = ''; // 重置园区
}, this.form.buildingName = ''; // 重置楼栋
// 根据楼栋id获取楼层 this.form.floorName = ''; // 重置楼层
async listFloorByBuilding(id) { this.form.roomNo = ''; // 重置宿舍
let res = await listFloorByBuilding(id) // 获取选中的校区id
if (res.code == 200) { this.selectedCampus = this.campusOptions[e.detail.value].id;
this.floorOptions = [...res.data] // 获取对应校区下面的园区
} this.listParkByCampus(this.selectedCampus)
}, },
// 根据楼层id获取宿舍号 // 园区选择变化
async listAllRoomByFloor(id) { handleParkChange(e) {
let res = await listAllRoomByFloor(id) this.form.parkName = this.parkOptions[e.detail.value].name;
if (res.code == 200) { this.form.buildingName = ''; // 重置楼栋
this.dormOptions = [...res.data] this.form.floorName = ''; // 重置楼层
// 遍历数据,为每个对象添加 displayText 属性 this.form.roomNo = ''; // 重置宿舍
this.dormOptions = res.data.map(v => ({ // 获取选中的园区的id
...v, // 保留原对象所有属性 this.selectedPark = this.parkOptions[e.detail.value].id;
// 新增拼接后的显示文本属性 // 获取对应园区下面的楼栋
displayText: `${v.roomNo} -- ${v.gender} -- 床位 ${v.bedNum} -- 已住 ${v.occupancy}`, this.listBuildingByPark(this.selectedPark)
isFull: v.occupancy >= v.bedNum // 新增:判断是否满人 },
})); // 楼栋选择变化
} handleBuildingChange(e) {
}, this.form.buildingName = this.buildingOptions[e.detail.value].name;
// 校区选择变化 this.form.floorName = ''; // 重置楼层
handleCampusChange(e) { this.form.roomNo = ''; // 重置宿舍
this.form.campusName = this.campusOptions[e.detail.value].name; // 获取选中的楼栋的id
this.form.parkName = ''; // 重置园区 this.selectedBuilding = this.buildingOptions[e.detail.value].id;
this.form.buildingName = ''; // 重置楼栋 // 获取选中的楼栋下面的楼层
this.form.floorName = ''; // 重置楼层 this.listFloorByBuilding(this.selectedBuilding)
this.form.roomNo = ''; // 重置宿舍 },
// 获取选中的校区id // 楼层选择变化(下拉框)
this.selectedCampus = this.campusOptions[e.detail.value].id; handleFloorChange(e) {
// 获取对应校区下面的园区 this.form.floorName = this.floorOptions[e.detail.value].floor;
this.listParkByCampus(this.selectedCampus) this.form.roomNo = ''; // 重置宿舍
}, // 获取选中的楼层的id
// 园区选择变化 this.selectedFloor = this.floorOptions[e.detail.value].id;
handleParkChange(e) { // 获取选中的楼层下面的宿舍号
this.form.parkName = this.parkOptions[e.detail.value].name; this.listAllRoomByFloor(this.selectedFloor)
this.form.buildingName = ''; // 重置楼栋 },
this.form.floorName = ''; // 重置楼层 // 宿舍号选择变化(行拉框)
this.form.roomNo = ''; // 重置宿舍 handleDormChange(e) {
// 获取选中的园区的id const index = e.detail.value;
this.selectedPark = this.parkOptions[e.detail.value].id; const selectedDorm = this.dormOptions[index]; // 获取选中的宿舍对象
// 获取对应园区下面的楼栋
this.listBuildingByPark(this.selectedPark)
},
// 楼栋选择变化
handleBuildingChange(e) {
this.form.buildingName = this.buildingOptions[e.detail.value].name;
this.form.floorName = ''; // 重置楼层
this.form.roomNo = ''; // 重置宿舍
// 获取选中的楼栋的id
this.selectedBuilding = this.buildingOptions[e.detail.value].id;
// 获取选中的楼栋下面的楼层
this.listFloorByBuilding(this.selectedBuilding)
},
// 楼层选择变化(下拉框)
handleFloorChange(e) {
this.form.floorName = this.floorOptions[e.detail.value].floor;
this.form.roomNo = ''; // 重置宿舍
// 获取选中的楼层的id
this.selectedFloor = this.floorOptions[e.detail.value].id;
// 获取选中的楼层下面的宿舍号
this.listAllRoomByFloor(this.selectedFloor)
},
// 宿舍号选择变化(行拉框)
handleDormChange(e) {
const index = e.detail.value;
const selectedDorm = this.dormOptions[index]; // 获取选中的宿舍对象
// 判断是否满人 // 判断是否满人
if (selectedDorm.isFull) { if (selectedDorm.isFull) {
// 满人时提示并重置选择 // 满人时提示并重置选择
uni.showToast({ uni.showToast({
title: `宿舍 ${selectedDorm.roomNo} 已住满,无法选择`, title: `宿舍 ${selectedDorm.roomNo} 已住满,无法选择`,
icon: 'none', icon: 'none',
duration: 2000 duration: 2000
});
// 重置宿舍选择(如果之前有选中值则保留,否则为空)
if (!this.form.roomNo) {
this.form.roomNo = '';
}
return;
}
// 未满人时正常选中
this.form.roomNo = selectedDorm.roomNo; // 显示拼接文本
this.selectedDorm = selectedDorm.id; // 存储宿舍ID用于提交
},
// 宿舍长选择变化
handleDormHeadChange(e) {
this.form.isDormitoryHead = this.dormHeadOptions[e.detail.value] == '是' ? 1 : 0;
this.form.isDormHead = this.dormHeadOptions[e.detail.value]
},
// 入住时间选择变化
handleCheckinTimeChange(e) {
this.form.checkinTime = e.detail.value;
},
// 证件照上传
handleUpload() {
uni.chooseImage({
count: 3,
success: async (img) => {
let bool = await checkPic(img.tempFiles[0]);
if (bool) {
uploadFile('/common/upload', img.tempFilePaths[0]).then((res) => {
// if (this.form.photo !== "") {
// this.form.photo = this.form.photo + "," + JSON.parse(res)
// .fileName;
// } else {
// this.form.photo = JSON.parse(res).fileName;
// }
this.form.photoData = img.tempFilePaths[0];
this.form.photo = JSON.parse(res).fileName;
})
}
}
})
},
// 提交表单
async handleSubmit() {
console.log(this.form);
// 验证必填项
if (
!this.form.campusName || // 校区名称字符串空则false
!this.form.parkName || // 园区名称字符串空则false
!this.form.buildingName || // 楼栋名称字符串空则false
(!this.form.floorName && this.form.floorName !== 0) || // 楼层数值排除0的误判
(!this.form.roomNo && this.form.roomNo !== 0) || // 宿舍号数值排除0的误判
!this.form.isDormHead || // 是否宿舍长(值为"是"/"否"
!this.form.checkinTime || // 入住时间日期字符串空则false
!this.form.photo // 证件照blob路径空则false若必填需加
) {
uni.showToast({
title: '带*号的为必填项,请填写完整',
icon: 'none',
duration: 2000
});
return;
}
this.form.dormitoryId = this.selectedDorm;
// 模拟提交
uni.showLoading({
title: '提交中...'
}); });
// 添加入住信息 // 重置宿舍选择(如果之前有选中值则保留,否则为空)
let res = await addStudent(this.form); if (!this.form.roomNo) {
if (res.code == 200) { this.form.roomNo = '';
uni.hideLoading(); }
uni.showToast({ return;
title: '提交成功', }
icon: 'success'
}); // 未满人时正常选中
// 上次图片头像 this.form.roomNo = selectedDorm.roomNo; // 显示拼接文本
let data = submitExtraInfo({ this.selectedDorm = selectedDorm.id; // 存储宿舍ID用于提交
userId: this.user.data.userId, },
whitePhoto: this.form.photo // 宿舍长选择变化
}) handleDormHeadChange(e) {
// if (data.code == 200) { this.form.isDormitoryHead = this.dormHeadOptions[e.detail.value] == '是' ? 1 : 0;
// console.log(data); this.form.isDormHead = this.dormHeadOptions[e.detail.value]
// } },
// 入住时间选择变化
setTimeout(() => { handleCheckinTimeChange(e) {
// 重置表单 this.form.checkinTime = e.detail.value;
this.form = { },
campusName: '', // 证件照上传
parkName: '', handleUpload() {
buildingName: '', uni.chooseImage({
floorName: '', count: 3,
roomNo: '', success: async (img) => {
stuNo: '', let bool = await checkPic(img.tempFiles[0]);
isDormitoryHead: '', if (bool) {
checkinTime: '', uploadFile('/common/upload', img.tempFilePaths[0]).then((res) => {
photo: '' // if (this.form.photo !== "") {
}; // this.form.photo = this.form.photo + "," + JSON.parse(res)
uni.redirectTo({ // .fileName;
url: `/pages/dormitory/studentDormInfo/index` // } else {
// this.form.photo = JSON.parse(res).fileName;
// }
this.form.photoData = img.tempFilePaths[0];
this.form.photo = JSON.parse(res).fileName;
}) })
}, 1000); }
}
})
},
// 提交表单
async handleSubmit() {
console.log(this.form);
// 验证必填项
if (
!this.form.campusName || // 校区名称字符串空则false
!this.form.parkName || // 园区名称字符串空则false
!this.form.buildingName || // 楼栋名称字符串空则false
(!this.form.floorName && this.form.floorName !== 0) || // 楼层数值排除0的误判
(!this.form.roomNo && this.form.roomNo !== 0) || // 宿舍号数值排除0的误判
!this.form.isDormHead || // 是否宿舍长(值为"是"/"否"
!this.form.checkinTime || // 入住时间日期字符串空则false
!this.form.photo
) {
uni.showToast({
title: '带*号的为必填项,请填写完整',
icon: 'none',
duration: 2000
});
return;
}
if (this.form.xhk) {
let cardRes = await alipayVali(this.form.xhk);
if (!cardRes || cardRes.validated == false) {
uni.showToast({
title: '请输入正确的银行卡号',
icon: 'none'
});
return;
}
if (cardRes.bank != 'ABC') {
uni.showToast({
title: '请输入正确的中国农业银行银行卡号',
icon: 'none'
});
return;
} }
} }
} this.form.dormitoryId = this.selectedDorm;
}; uni.showLoading({ title: '提交中...' });
let res;
if (this.mode === 'edit') {
const dto = {
id: this.editId,
dormitoryId: this.form.dormitoryId,
stuNo: this.form.stuNo,
isDormitoryHead: this.form.isDormHead === '是' ? 1 : 0,
checkinTime: this.form.checkinTime ? new Date(this.form.checkinTime) : null,
isInStudentsleep: this.form.isInStudentsleep || '是'
}
res = await updateStudent(dto)
} else {
res = await addStudent(this.form);
}
if (res.code == 200) {
// 上次图片头像
let data = submitExtraInfo({
userId: this.user.data.userId,
whitePhoto: this.form.photo
})
let own = await request({ url: '/system/student/getOwnInfo', method: 'get' });
let payload = {
phone: own.data.phone,
xhk: this.form.xhk ? this.form.xhk.replace(' ', '') : own.data.xhk,
idCard: own.data.idCard,
birthday: own.data.birthday,
bankAddr: this.form.bankAddr ? this.form.bankAddr : own.data.bankAddr
};
await request({ url: '/system/student/changeOwnInfo', method: 'POST', data: payload });
uni.hideLoading();
uni.showToast({ title: '提交成功', icon: 'success' });
// if (data.code == 200) {
// console.log(data);
// }
setTimeout(() => {
// 重置表单
this.form = {
campusName: '',
parkName: '',
buildingName: '',
floorName: '',
roomNo: '',
stuNo: '',
isDormitoryHead: '',
checkinTime: '',
photo: '',
xhk: '',
bankAddr: ''
};
uni.redirectTo({ url: `/pages/dormitory/studentDormInfo/index` })
}, 1000);
}
}
}
};
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.form-container { .form-container {
padding: 30rpx; padding: 30rpx;
background-color: #fff; background-color: #fff;
min-height: 100vh; min-height: 100vh;
} }
.form-title { .form-title {
font-size: 36rpx; font-size: 36rpx;
font-weight: bold; font-weight: bold;
text-align: center; text-align: center;
margin-bottom: 20rpx; margin-bottom: 20rpx;
} }
.form-desc { .form-desc {
font-size: 24rpx; font-size: 24rpx;
color: #666; color: #666;
text-align: center; text-align: center;
margin-bottom: 40rpx; margin-bottom: 40rpx;
} }
.form-item { .form-item {
margin-bottom: 40rpx; margin-bottom: 40rpx;
} }
.item-label { .item-label {
font-size: 28rpx; font-size: 28rpx;
font-weight: 500; font-weight: 500;
color: #333; color: #333;
margin-bottom: 16rpx; margin-bottom: 16rpx;
display: flex; display: flex;
align-items: center; align-items: center;
} }
// 红色*号样式 // 红色*号样式
.required { .required {
color: #ff4d4f; color: #ff4d4f;
margin-right: 6rpx; margin-right: 6rpx;
font-weight: bold; font-weight: bold;
} }
.item-desc { .item-desc {
font-size: 24rpx; font-size: 24rpx;
color: #999; color: #999;
margin-bottom: 20rpx; margin-bottom: 20rpx;
} }
// 下拉框样式 // 下拉框样式
.picker-input { .picker-input {
width: 100%; width: 100%;
height: 80rpx; height: 80rpx;
border: 1px solid #eee; border: 1px solid #eee;
border-radius: 8rpx; border-radius: 8rpx;
display: flex; display: flex;
align-items: center; align-items: center;
padding: 0 20rpx; padding: 0 20rpx;
box-sizing: border-box; box-sizing: border-box;
font-size: 28rpx; font-size: 28rpx;
background-color: #f9f9f9; background-color: #f9f9f9;
} }
// 输入框样式 // 输入框样式
.input { .input {
width: 100%; width: 100%;
height: 80rpx; height: 80rpx;
border: 1px solid #eee; border: 1px solid #eee;
border-radius: 8rpx; border-radius: 8rpx;
padding: 0 20rpx; padding: 0 20rpx;
box-sizing: border-box; box-sizing: border-box;
font-size: 28rpx; font-size: 28rpx;
} }
// 图片上传样式 // 图片上传样式
.upload-btn { .upload-btn {
width: 200rpx; width: 200rpx;
height: 80rpx; height: 80rpx;
border: 1px dashed #ccc; border: 1px dashed #ccc;
border-radius: 8rpx; border-radius: 8rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
gap: 10rpx; gap: 10rpx;
font-size: 28rpx; font-size: 28rpx;
color: #666; color: #666;
margin-bottom: 20rpx; margin-bottom: 20rpx;
} }
.upload-icon { .upload-icon {
font-size: 40rpx; font-size: 40rpx;
font-weight: bold; font-weight: bold;
} }
.upload-tip { .upload-tip {
font-size: 22rpx; font-size: 22rpx;
color: #999; color: #999;
margin-bottom: 20rpx; margin-bottom: 20rpx;
} }
.upload-preview { .upload-preview {
width: 200rpx; width: 200rpx;
height: 200rpx; height: 200rpx;
border-radius: 8rpx; border-radius: 8rpx;
overflow: hidden; overflow: hidden;
} }
.upload-preview image { .upload-preview image {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
// 提交按钮样式 // 提交按钮样式
.submit-btn { .submit-btn {
width: 100%; width: 100%;
height: 90rpx; height: 90rpx;
background-color: #1890ff; background-color: #1890ff;
color: #fff; color: #fff;
font-size: 32rpx; font-size: 32rpx;
border-radius: 45rpx; border-radius: 45rpx;
margin-top: 60rpx; margin-top: 60rpx;
} }
</style> </style>