mirror of
https://gitee.com/elegant_wings/dbd-meeting-wx-small.git
synced 2025-06-21 21:19:37 +08:00
482 lines
13 KiB
JavaScript
482 lines
13 KiB
JavaScript
const app = getApp()
|
||
|
||
import Notify from '@vant/weapp/notify/notify';
|
||
|
||
import {
|
||
getStaff,
|
||
selectReservationByIdRq,
|
||
addStaff
|
||
} from "../../../../api/meeting/meetingRoom.js"
|
||
|
||
|
||
Page({
|
||
|
||
/**
|
||
* 页面的初始数据
|
||
*/
|
||
data: {
|
||
IMG_NAME: app.IMG_NAME,
|
||
rId: '',
|
||
checkUser: [],
|
||
// staffMusicList: [{
|
||
// id: 1,
|
||
// name: '张三',
|
||
// isSelect: false
|
||
// }],
|
||
staffMusicList: [],
|
||
// staffServeList: [{
|
||
// id: 4,
|
||
// name: '赵六',
|
||
// isSelect: false
|
||
// }],
|
||
staffServeList: [],
|
||
serviceCheckAll: false,
|
||
musicCheckAll: false
|
||
},
|
||
/**
|
||
* 生命周期函数--监听页面加载
|
||
*/
|
||
onLoad(options) {
|
||
let _this = this
|
||
let rId = options.rId
|
||
|
||
// 从本地缓存获取会务人员总数信息
|
||
let staffCountInfo = wx.getStorageSync('meeting_staff_count_' + rId);
|
||
if (staffCountInfo && staffCountInfo.totalStaffCount > 0) {
|
||
console.log('从本地缓存获取会务人员总数:', staffCountInfo.totalStaffCount);
|
||
}
|
||
|
||
// 从本地缓存获取选择状态
|
||
let staffStatus = wx.getStorageSync('staffStatus_' + rId);
|
||
if (staffStatus) {
|
||
// 计算已选人员总数
|
||
const musicCount = staffStatus.musicIds ? staffStatus.musicIds.length : 0;
|
||
const serviceCount = staffStatus.serviceIds ? staffStatus.serviceIds.length : 0;
|
||
const totalCount = musicCount + serviceCount;
|
||
|
||
if (totalCount > 0) {
|
||
console.log('从本地缓存状态获取会务人员总数:', totalCount);
|
||
|
||
// 更新缓存中的会务人员总数
|
||
wx.setStorageSync('meeting_staff_count_' + rId, {
|
||
totalStaffCount: totalCount,
|
||
timestamp: new Date().getTime()
|
||
});
|
||
}
|
||
}
|
||
|
||
// console.log(ser)
|
||
_this.setData({
|
||
rId: rId
|
||
})
|
||
// 获取数据
|
||
_this.getData()
|
||
},
|
||
|
||
// 获取数据
|
||
getData() {
|
||
let _this = this
|
||
let id = _this.data.rId
|
||
|
||
// 显示加载中提示
|
||
wx.showLoading({
|
||
title: '加载中...',
|
||
mask: true
|
||
});
|
||
|
||
// 获取预约信息
|
||
selectReservationByIdRq({
|
||
id: id
|
||
}).then(res => {
|
||
console.log('预约信息:', res)
|
||
// 初始化数组
|
||
let musicStaffArr = [] // 音控组人员ID
|
||
let serviceStaffArr = [] // 会务服务组人员ID
|
||
let staff = res.waiters || []
|
||
|
||
// 清晰记录每个waiter的类型和ID,便于调试
|
||
console.log('服务器返回的会务人员:', staff.map(item => ({id: item.userId, type: item.type})));
|
||
|
||
// 分别存储音控组和会务服务组的人员ID
|
||
for (let i = 0; i < staff.length; i++) {
|
||
// 类型1为音控组
|
||
if (staff[i].type === '1' || staff[i].type === 1) {
|
||
musicStaffArr.push(staff[i].userId)
|
||
}
|
||
// 类型3为会务服务组
|
||
else if (staff[i].type === '3' || staff[i].type === 3) {
|
||
serviceStaffArr.push(staff[i].userId)
|
||
}
|
||
}
|
||
|
||
getStaff().then(resStaff => {
|
||
wx.hideLoading();
|
||
console.log('会务人员列表:', resStaff)
|
||
let musicList = []
|
||
let serveList = []
|
||
|
||
// 检查服务器返回的已选择人员
|
||
let hasMusicStaff = musicStaffArr.length > 0
|
||
let hasServiceStaff = serviceStaffArr.length > 0
|
||
|
||
// 处理音控组数据
|
||
if (resStaff.voiceWaiter && resStaff.voiceWaiter.length > 0) {
|
||
for (let i = 0; i < resStaff.voiceWaiter.length; i++) {
|
||
let eachObj = resStaff.voiceWaiter[i]
|
||
// 判断该人员是否已被选择
|
||
let isSel = musicStaffArr.includes(eachObj.id)
|
||
musicList.push({
|
||
id: eachObj.id,
|
||
name: eachObj.username,
|
||
isSelect: isSel
|
||
})
|
||
}
|
||
}
|
||
|
||
// 处理会务服务组数据
|
||
if (resStaff.serveWaiter && resStaff.serveWaiter.length > 0) {
|
||
for (let i = 0; i < resStaff.serveWaiter.length; i++) {
|
||
let eachObj = resStaff.serveWaiter[i]
|
||
// 判断该人员是否已被选择
|
||
let isSel = serviceStaffArr.includes(eachObj.id)
|
||
serveList.push({
|
||
id: eachObj.id,
|
||
name: eachObj.username,
|
||
isSelect: isSel
|
||
})
|
||
}
|
||
}
|
||
|
||
// 重新检查选择状态,以确保准确性
|
||
hasMusicStaff = musicList.some(item => item.isSelect);
|
||
hasServiceStaff = serveList.some(item => item.isSelect);
|
||
|
||
// 计算全选状态
|
||
const musicCheckAll = musicList.length > 0 && musicList.every(item => item.isSelect);
|
||
const serviceCheckAll = serveList.length > 0 && serveList.every(item => item.isSelect);
|
||
|
||
console.log('音控组选择状态:', hasMusicStaff, '音控组IDs:', musicStaffArr);
|
||
console.log('会务服务组选择状态:', hasServiceStaff, '会务服务组IDs:', serviceStaffArr);
|
||
|
||
// 保存初始状态到本地存储
|
||
wx.setStorageSync('staffStatus_' + _this.data.rId, {
|
||
hasMusicStaff,
|
||
hasServiceStaff,
|
||
musicIds: musicStaffArr,
|
||
serviceIds: serviceStaffArr,
|
||
timestamp: new Date().getTime()
|
||
});
|
||
|
||
_this.setData({
|
||
staffServeList: serveList,
|
||
staffMusicList: musicList,
|
||
musicCheckAll: musicCheckAll,
|
||
serviceCheckAll: serviceCheckAll
|
||
})
|
||
}).catch(err => {
|
||
wx.hideLoading();
|
||
console.error('获取会务人员列表失败:', err);
|
||
Notify({
|
||
type: 'danger',
|
||
message: '获取会务人员列表失败'
|
||
});
|
||
});
|
||
}).catch(err => {
|
||
wx.hideLoading();
|
||
console.error('获取预约信息失败:', err);
|
||
Notify({
|
||
type: 'danger',
|
||
message: '获取预约信息失败'
|
||
});
|
||
});
|
||
},
|
||
|
||
// 音控组全选
|
||
checkMusicAll() {
|
||
let _this = this
|
||
let checkStatus = !_this.data.musicCheckAll // 直接取反更可靠
|
||
|
||
// 更新所有音控组成员的选择状态
|
||
let staffMusicList = _this.data.staffMusicList.map(item => {
|
||
item.isSelect = checkStatus
|
||
return item
|
||
})
|
||
|
||
_this.setData({
|
||
staffMusicList,
|
||
musicCheckAll: checkStatus
|
||
})
|
||
|
||
// 更新本地存储状态
|
||
let hasServiceStaff = _this.data.staffServeList.some(item => item.isSelect);
|
||
wx.setStorageSync('staffStatus_' + _this.data.rId, {
|
||
hasMusicStaff: checkStatus,
|
||
hasServiceStaff
|
||
});
|
||
|
||
console.log('音控组全选状态更新为:', checkStatus);
|
||
},
|
||
|
||
// 会务服务组全选
|
||
checkServiceAll() {
|
||
let _this = this
|
||
let checkStatus = !_this.data.serviceCheckAll // 直接取反更可靠
|
||
|
||
// 更新所有会务服务组成员的选择状态
|
||
let staffServeList = _this.data.staffServeList.map(item => {
|
||
item.isSelect = checkStatus
|
||
return item
|
||
})
|
||
|
||
_this.setData({
|
||
staffServeList,
|
||
serviceCheckAll: checkStatus
|
||
})
|
||
|
||
// 更新本地存储状态
|
||
let hasMusicStaff = _this.data.staffMusicList.some(item => item.isSelect);
|
||
wx.setStorageSync('staffStatus_' + _this.data.rId, {
|
||
hasMusicStaff,
|
||
hasServiceStaff: checkStatus
|
||
});
|
||
|
||
console.log('会务服务组全选状态更新为:', checkStatus);
|
||
},
|
||
|
||
// 单个选择框点击
|
||
checkBoxClick(e) {
|
||
let _this = this
|
||
console.log('checkBoxClick', e)
|
||
// get param
|
||
let id = e.target.dataset.id
|
||
let type = e.target.dataset.type
|
||
|
||
if (type === 'music') {
|
||
// 音控组成员选择
|
||
let staffMusicList = _this.data.staffMusicList.map(item => {
|
||
if (item.id == id) {
|
||
item.isSelect = !item.isSelect
|
||
}
|
||
return item
|
||
})
|
||
|
||
// 检查是否需要更新全选状态
|
||
const allSelected = staffMusicList.length > 0 && staffMusicList.every(item => item.isSelect);
|
||
const noneSelected = staffMusicList.every(item => !item.isSelect);
|
||
|
||
_this.setData({
|
||
staffMusicList,
|
||
musicCheckAll: allSelected
|
||
})
|
||
|
||
// 检查音控组选择状态
|
||
let hasMusicStaff = staffMusicList.some(item => item.isSelect);
|
||
|
||
// 获取会务服务组选择状态
|
||
let hasServiceStaff = _this.data.staffServeList.some(item => item.isSelect);
|
||
|
||
// 更新本地存储
|
||
wx.setStorageSync('staffStatus_' + _this.data.rId, {
|
||
hasMusicStaff,
|
||
hasServiceStaff
|
||
});
|
||
|
||
console.log('音控组选择状态:', hasMusicStaff, '全选状态:', allSelected);
|
||
|
||
} else if (type === 'serve' || type === 'service') {
|
||
// 会务服务组成员选择 (支持两种数据类型值)
|
||
let staffServeList = _this.data.staffServeList.map(item => {
|
||
if (item.id == id) {
|
||
item.isSelect = !item.isSelect
|
||
}
|
||
return item
|
||
})
|
||
|
||
// 检查是否需要更新全选状态
|
||
const allSelected = staffServeList.length > 0 && staffServeList.every(item => item.isSelect);
|
||
const noneSelected = staffServeList.every(item => !item.isSelect);
|
||
|
||
_this.setData({
|
||
staffServeList,
|
||
serviceCheckAll: allSelected
|
||
})
|
||
|
||
// 检查会务服务组选择状态
|
||
let hasServiceStaff = staffServeList.some(item => item.isSelect);
|
||
|
||
// 获取音控组选择状态
|
||
let hasMusicStaff = _this.data.staffMusicList.some(item => item.isSelect);
|
||
|
||
// 更新本地存储
|
||
wx.setStorageSync('staffStatus_' + _this.data.rId, {
|
||
hasMusicStaff,
|
||
hasServiceStaff
|
||
});
|
||
|
||
console.log('会务服务组选择状态:', hasServiceStaff, '全选状态:', allSelected);
|
||
}
|
||
},
|
||
|
||
// 提交
|
||
submit() {
|
||
let _this = this
|
||
let rId = _this.data.rId
|
||
|
||
// 收集已选择的人员
|
||
let checkUser = []
|
||
let musicList = _this.data.staffMusicList
|
||
let serveList = _this.data.staffServeList
|
||
|
||
// 音控组选择的人员
|
||
let musicSelectedCount = 0
|
||
let musicStaffIds = []
|
||
for (let i = 0; i < musicList.length; i++) {
|
||
if (musicList[i].isSelect) {
|
||
musicSelectedCount++
|
||
musicStaffIds.push(musicList[i].id)
|
||
checkUser.push({
|
||
userId: musicList[i].id,
|
||
type: 1
|
||
})
|
||
}
|
||
}
|
||
|
||
// 会务服务组选择的人员
|
||
let serviceSelectedCount = 0
|
||
let serviceStaffIds = []
|
||
for (let i = 0; i < serveList.length; i++) {
|
||
if (serveList[i].isSelect) {
|
||
serviceSelectedCount++
|
||
serviceStaffIds.push(serveList[i].id)
|
||
checkUser.push({
|
||
userId: serveList[i].id,
|
||
type: 3
|
||
})
|
||
}
|
||
}
|
||
|
||
// 判断是否有选择人员(允许只选择一种类型的人员)
|
||
if (musicSelectedCount < 1 && serviceSelectedCount < 1) {
|
||
return Notify({
|
||
type: 'danger',
|
||
message: '请至少选择一个会务人员'
|
||
});
|
||
}
|
||
|
||
// 处理提交数据为字符串格式
|
||
const musicIdsStr = musicStaffIds.join(',');
|
||
const serviceIdsStr = serviceStaffIds.join(',');
|
||
|
||
console.log('提交选择的会务人员:', {
|
||
音控组: musicIdsStr,
|
||
会务服务组: serviceIdsStr
|
||
});
|
||
|
||
// 显示加载提示
|
||
wx.showLoading({
|
||
title: '提交中...',
|
||
mask: true
|
||
});
|
||
|
||
// 保存当前会务负责人状态到本地存储,包含详细信息
|
||
const hasMusicStaff = musicSelectedCount > 0;
|
||
const hasServiceStaff = serviceSelectedCount > 0;
|
||
wx.setStorageSync('staffStatus_' + _this.data.rId, {
|
||
hasMusicStaff,
|
||
hasServiceStaff,
|
||
musicIds: musicStaffIds,
|
||
serviceIds: serviceStaffIds,
|
||
timestamp: new Date().getTime()
|
||
});
|
||
|
||
// 保存实际选择的总人数到本地缓存
|
||
const totalStaffCount = musicSelectedCount + serviceSelectedCount;
|
||
wx.setStorageSync('meeting_staff_count_' + _this.data.rId, {
|
||
totalStaffCount: totalStaffCount,
|
||
timestamp: new Date().getTime()
|
||
});
|
||
|
||
// 提交到服务器 - 使用正确的参数格式
|
||
addStaff({
|
||
id: rId,
|
||
voiceWaiter: musicIdsStr, // 音控组 - 使用逗号分隔的字符串
|
||
serveWaiter: serviceIdsStr // 会务服务组 - 使用逗号分隔的字符串
|
||
}).then(res => {
|
||
wx.hideLoading();
|
||
console.log('提交会务负责人成功:', res);
|
||
|
||
// 设置标记,表示会务负责人页面有更新,approve页面需要刷新通知状态
|
||
wx.setStorageSync('staffPage_updated', {
|
||
meetingId: rId,
|
||
totalCount: totalStaffCount,
|
||
hasMusicStaff,
|
||
hasServiceStaff,
|
||
timestamp: new Date().getTime()
|
||
});
|
||
|
||
Notify({
|
||
type: 'success',
|
||
message: '设置成功',
|
||
onClose: () => {
|
||
wx.navigateBack();
|
||
}
|
||
});
|
||
}).catch(err => {
|
||
wx.hideLoading();
|
||
console.error('提交会务负责人失败:', err);
|
||
Notify({
|
||
type: 'danger',
|
||
message: '设置失败'
|
||
});
|
||
});
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面初次渲染完成
|
||
*/
|
||
onReady() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面显示
|
||
*/
|
||
onShow() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面隐藏
|
||
*/
|
||
onHide() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面卸载
|
||
*/
|
||
onUnload() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 页面相关事件处理函数--监听用户下拉动作
|
||
*/
|
||
onPullDownRefresh() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 页面上拉触底事件的处理函数
|
||
*/
|
||
onReachBottom() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 用户点击右上角分享
|
||
*/
|
||
onShareAppMessage() {
|
||
|
||
}
|
||
}) |