mirror of
https://gitee.com/elegant_wings/dbd-meeting-wx-small.git
synced 2025-06-22 04:19:36 +08:00
505 lines
14 KiB
JavaScript
505 lines
14 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
|
||
|
||
// 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;
|
||
|
||
console.log('提交全选状态:', {
|
||
musicCheckAll: _this.data.musicCheckAll,
|
||
serviceCheckAll: _this.data.serviceCheckAll
|
||
});
|
||
|
||
// 收集音控组选择的ID
|
||
let staffMusicList = _this.data.staffMusicList;
|
||
let musicIds = [];
|
||
let hasMusicStaff = false;
|
||
|
||
// 获取所有选中的音控组成员ID
|
||
staffMusicList.forEach(item => {
|
||
if (item.isSelect) {
|
||
hasMusicStaff = true;
|
||
musicIds.push(item.id);
|
||
}
|
||
});
|
||
|
||
// 收集会务服务组选择的ID
|
||
let staffServeList = _this.data.staffServeList;
|
||
let serveIds = [];
|
||
let hasServiceStaff = false;
|
||
|
||
// 获取所有选中的会务服务组成员ID
|
||
staffServeList.forEach(item => {
|
||
if (item.isSelect) {
|
||
hasServiceStaff = true;
|
||
serveIds.push(item.id);
|
||
}
|
||
});
|
||
|
||
// 将数组转换为以逗号分隔的字符串
|
||
let musicId = musicIds.join(',');
|
||
let serveId = serveIds.join(',');
|
||
|
||
console.log('提交选择状态:', {
|
||
hasMusicStaff,
|
||
hasServiceStaff,
|
||
音控组IDs: musicIds,
|
||
会务服务组IDs: serveIds
|
||
});
|
||
|
||
// 保存选择状态到本地存储,添加更多信息和时间戳
|
||
wx.setStorageSync('staffStatus_' + _this.data.rId, {
|
||
hasMusicStaff,
|
||
hasServiceStaff,
|
||
musicIds: musicIds,
|
||
serviceIds: serveIds,
|
||
timestamp: new Date().getTime()
|
||
});
|
||
|
||
// 显示加载中
|
||
wx.showLoading({
|
||
title: '保存中...',
|
||
mask: true
|
||
});
|
||
|
||
// 调用接口保存到服务器
|
||
addStaff({
|
||
id: _this.data.rId,
|
||
voiceWaiter: musicId, // 音控组 type=1
|
||
serveWaiter: serveId // 会务服务组 type=3
|
||
}).then(res => {
|
||
wx.hideLoading();
|
||
|
||
if (res.code == 0) {
|
||
Notify({
|
||
type: 'success',
|
||
message: '分配成功!'
|
||
});
|
||
|
||
// 再次确认状态已正确保存
|
||
console.log('会务人员设置成功,最终状态:', {
|
||
音控组: hasMusicStaff,
|
||
会务服务组: hasServiceStaff,
|
||
音控组人员: musicIds,
|
||
会务服务组人员: serveIds
|
||
});
|
||
|
||
// 获取页面栈
|
||
let pages = getCurrentPages();
|
||
// 获取上一页实例
|
||
let prevPage = pages[pages.length - 2];
|
||
|
||
// 判断上一页是否是approve页面
|
||
if (prevPage && prevPage.route && prevPage.route.includes('approve')) {
|
||
// 设置上一页的dataChange为true,触发刷新
|
||
prevPage.setData({
|
||
dataChange: true
|
||
});
|
||
|
||
// 尝试直接更新上一页的记录数据
|
||
try {
|
||
// 查找对应的预约记录并更新其状态
|
||
const reservationList = prevPage.data.reservationDataList || [];
|
||
const currentRecord = reservationList.find(item => item.id === _this.data.rId);
|
||
|
||
if (currentRecord) {
|
||
// 构造一个模拟的waiters数组
|
||
const waiters = [];
|
||
|
||
// 添加音控组人员
|
||
musicIds.forEach(id => {
|
||
waiters.push({
|
||
userId: id,
|
||
type: '1'
|
||
});
|
||
});
|
||
|
||
// 添加会务服务组人员
|
||
serveIds.forEach(id => {
|
||
waiters.push({
|
||
userId: id,
|
||
type: '3'
|
||
});
|
||
});
|
||
|
||
// 更新记录的waiters属性
|
||
currentRecord.waiters = waiters;
|
||
|
||
// 重新处理会务负责人状态
|
||
if (typeof prevPage.processStaffStatus === 'function') {
|
||
prevPage.processStaffStatus(currentRecord);
|
||
|
||
// 通知页面更新
|
||
prevPage.setData({
|
||
reservationDataList: reservationList
|
||
});
|
||
|
||
console.log('直接更新上一页预约记录状态成功');
|
||
}
|
||
}
|
||
} catch (err) {
|
||
console.error('更新上一页数据失败:', err);
|
||
}
|
||
}
|
||
|
||
// 返回上一页
|
||
setTimeout(() => {
|
||
wx.navigateBack();
|
||
}, 500);
|
||
} else {
|
||
// 提交失败
|
||
Notify({
|
||
type: 'danger',
|
||
message: res.msg || '分配失败,请重试'
|
||
});
|
||
}
|
||
}).catch(err => {
|
||
wx.hideLoading();
|
||
console.error('分配会务人员失败:', err);
|
||
Notify({
|
||
type: 'danger',
|
||
message: '网络错误,请重试'
|
||
});
|
||
});
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面初次渲染完成
|
||
*/
|
||
onReady() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面显示
|
||
*/
|
||
onShow() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面隐藏
|
||
*/
|
||
onHide() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面卸载
|
||
*/
|
||
onUnload() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 页面相关事件处理函数--监听用户下拉动作
|
||
*/
|
||
onPullDownRefresh() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 页面上拉触底事件的处理函数
|
||
*/
|
||
onReachBottom() {
|
||
|
||
},
|
||
|
||
/**
|
||
* 用户点击右上角分享
|
||
*/
|
||
onShareAppMessage() {
|
||
|
||
}
|
||
}) |