Taro+vue3 电影H5 选择座位的时候 判断当前的座位是否 旁边留空 或者中间座位留空

复制代码
const onConfirm = () => {

    const area_arr = selectedSeat.value.map((item) => {
        return item.areaId;
    });
    const abc = isRepeat(area_arr);
    if (!abc) {
        Taro.showToast({
            title: "请选择同一价格的座位,暂不支持跨区域选座~~",
            icon: "none",
            duration: 2000,
        });
        return;
    }

    let flag = true

    let tempList = seatList.value.reduce((acc, seat) => {
        const rowIndex = seat.gRow - 1;
        if (!acc[rowIndex]) {
            acc[rowIndex] = [];
        }
        acc[rowIndex].push(seat);
        return acc;
    }, []);
    const isSeatList = tempList
        .filter(item => Array.isArray(item))
        .map(row => row.filter(item => item.seatNo !== ''));

    // Set realRow property for each seat
    isSeatList.forEach((itemList, index) => {
        for (let i = 0; i < itemList.length; i++) {
            itemList[i].realRow = index + 1;
        }
    });

    // Group selected seats by row
    const seatsByRow = selectedSeat.value.reduce((acc, seat) => {
        const row = seat.row;
        if (!acc[row]) {
            acc[row] = [];
        }
        acc[row].push(seat);
        return acc;
    }, {});

    // Check conditions based on the number of selected seats in each row
    Object.values(seatsByRow).forEach(rowList => {
        rowList.sort((a, b) => a.col - b.col);


        switch (rowList.length) {
            case 1:
                let target = rowList[0];
                let targetIndex = 0;
                let rowNum = 0;

                for (let i = 0; i < isSeatList.length; i++) {
                    for (let j = 0; j < isSeatList[i].length; j++) {
                        if (target.seatNo === isSeatList[i][j].seatNo) {
                            targetIndex = j + 1;
                            rowNum = isSeatList[i].length;
                        }
                    }
                }

                if (targetIndex === 2 || targetIndex === rowNum - 1) {
                    Taro.showToast({
                        title: "座位旁边不要留空哦~",
                        icon: "none",
                    });
                    flag = false

                    return;
                }
                break;

            case 2:
                let firstIndex = 0;
                let secondIndex = 0;
                let rowNum2 = 0;

                for (let i = 0; i < isSeatList.length; i++) {
                    for (let j = 0; j < isSeatList[i].length; j++) {
                        if (rowList[0].seatNo === isSeatList[i][j].seatNo) {
                            firstIndex = j + 1;
                            rowNum2 = isSeatList[i].length;
                        }
                        if (rowList[1].seatNo === isSeatList[i][j].seatNo) {
                            secondIndex = j + 1;
                        }
                    }
                }
                if (isSeatList[firstIndex - 2]?.seatNo === '' || isSeatList[secondIndex]?.seatNo === '') {
                    Taro.showToast({
                        title: "座位旁边不要留空哦~",
                        icon: "none",
                    });
                    flag = false;
                    return;

                }
                // break;
                if (rowList[1].col - rowList[0].col === 2) {
                    Taro.showToast({
                        title: "座位中间不要留空哦~",
                        icon: "none",
                    });
                    flag = false

                    return;
                }

                if (firstIndex === 2 && secondIndex === 3) {
                    Taro.showToast({
                        title: "座位旁边不要留空哦~",
                        icon: "none",
                    });
                    flag = false

                    return;
                }
                if (firstIndex === rowNum2 - 2 && secondIndex === rowNum2 - 1) {
                    Taro.showToast({
                        title: "座位旁边不要留空哦~",
                        icon: "none",
                    });
                    flag = false

                    return;
                }
                if (firstIndex === 2 || firstIndex === rowNum2 - 2 || secondIndex === rowNum2 - 1) {
                    Taro.showToast({
                        title: "座位旁边不要留空哦~",
                        icon: "none",
                    });
                    flag = false

                    return;
                }

                if (firstIndex === 2 && secondIndex === rowNum2 - 1) {
                    Taro.showToast({
                        title: "座位旁边不要留空哦~",
                        icon: "none",
                    });
                    flag = false

                    return;
                }
                break;

            default:
                for (let i = 0; i < rowList.length - 1; i++) {
                    if (rowList[i + 1].col - rowList[i].col === 2) {
                        Taro.showToast({
                            title: "座位中间不要留空哦~",
                            icon: "none",
                        });
                        flag = false

                        return;
                    }
                }

                let theRowSeatList = isSeatList[rowList[0].realRow - 1];
                let first = theRowSeatList.findIndex(item => item.seatNo === rowList[0].seatNo) + 1;
                let second = theRowSeatList.findIndex(item => item.seatNo === rowList[1].seatNo) + 1;

                if (first === 2 && second === 3) {
                    Taro.showToast({
                        title: "座位旁边不要留空哦~",
                        icon: "none",
                    });
                    flag = false

                    return;
                }

                let endFirst = theRowSeatList.findIndex(item => item.seatNo === rowList[rowList.length - 1].seatNo) + 1;
                let endSecond = theRowSeatList.findIndex(item => item.seatNo === rowList[rowList.length - 2].seatNo) + 1;

                if (endFirst === theRowSeatList.length - 1 && endSecond === theRowSeatList.length - 2) {
                    Taro.showToast({
                        title: "座位旁边不要留空哦~",
                        icon: "none",
                    });
                    flag = false

                    return;
                }

                if (first === 2) {
                    Taro.showToast({
                        title: "座位旁边不要留空哦~",
                        icon: "none",
                    });
                    flag = false

                    return;
                }

                if (endFirst === theRowSeatList.length - 1) {
                    Taro.showToast({
                        title: "座位旁边不要留空哦~",
                        icon: "none",
                    });
                    flag = false

                    return;
                }
                break;
        }
    });
    if (flag) {
        phoneInputVisible.value = true;

    }

    // phoneInputVisible.value = true;
};

选择座位的时候 点击确定的时候

相关推荐
行者全栈架构师3 分钟前
【鸿蒙心迹】鸿蒙网络请求架构实战——@ohos.net.http 到 Axios 封装、拦截器与统一错误处理(HarmonyOS 7.x)
前端·算法·架构
全栈Agent 小李10 分钟前
【无标题】
前端·后端·agent·ai编程·全栈·cursor·mcp
羲云10 分钟前
别让 AI 凭记忆做调研:给 WorkBuddy 接上可核验的实时搜索
前端
deli00739 分钟前
连接池到底配多大?QPS 和 RT 算一遍,再跑 1 万次请求实测超时率
前端
风花一世月1 小时前
🏮 我把三坊七巷做成了能飞的 3D 地图(901 个真实建筑轮廓、20 处景点,在线直接玩)
前端
特立独行的猫A1 小时前
用仓颉语言写一个串口调试助手:cj-tauri 实战
前端
小凯在掘金1 小时前
Shadow DOM 和 Virtual DOM ?别再傻傻分不清
前端·html
郑州光合科技余经理1 小时前
本地生活平台搭建:跨业态用户标识怎么贯通
java·开发语言·前端·后端·uni-app·php·ai编程
数据掘金1 小时前
埋点事件命名升级时老数据怎么办
前端
对空六课1 小时前
Vue 组件曝光埋点为什么会重复触发?去重方案与实现思路
服务器·前端·算法·数据分析