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;
};

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

相关推荐
RaidenLiu6 分钟前
告别陷阱:精通Flutter Signals的生命周期、高级API与调试之道
前端·flutter·前端框架
非凡ghost7 分钟前
HWiNFO(专业系统信息检测工具)
前端·javascript·后端
非凡ghost9 分钟前
FireAlpaca(免费数字绘图软件)
前端·javascript·后端
非凡ghost15 分钟前
Sucrose Wallpaper Engine(动态壁纸管理工具)
前端·javascript·后端
拉不动的猪17 分钟前
为什么不建议项目里用延时器作为规定时间内的业务操作
前端·javascript·vue.js
该用户已不存在24 分钟前
Gemini CLI 扩展,把Nano Banana 搬到终端
前端·后端·ai编程
地方地方26 分钟前
前端踩坑记:解决图片与 Div 换行间隙的隐藏元凶
前端·javascript
小猫由里香31 分钟前
小程序打开文件(文件流、地址链接)封装
前端
Tzarevich34 分钟前
使用n8n工作流自动化生成每日科技新闻速览:告别信息过载,拥抱智能阅读
前端
掘金一周1 小时前
一个前端工程师的年度作品:从零开发媲美商业级应用的后台管理系统 | 掘金一周 10.23
前端·人工智能·后端