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

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

相关推荐
小猫会后空翻25 分钟前
XSS相关理解
前端·xss
brzhang1 小时前
我十几个项目都是这套Flutter 快速开发框架,今天开源了,从此你只用关心业务了
前端·后端·架构
BLACK5951 小时前
Nuxt3中PC端与移动端适配的三种方式(含Nuxt官网同款实现方式)
前端·vue.js·nuxt.js
小宁爱Python2 小时前
TypeScript 泛型详解:从基础到实战应用
前端·javascript·typescript
鱼樱前端2 小时前
一文讲解时下比较火的Rust语言之-rust开发环境搭建
前端·javascript
Moment3 小时前
Next.js 15.4 正式发布:Turbopack 全面稳定,预热 Next.js 16 😍😍😍
前端·javascript·node.js
虚!!!看代码3 小时前
uni-app 跳转页面传参
前端·vue.js·uni-app
脑袋大大的3 小时前
UniApp 自定义导航栏:解决安全区域适配问题的完整实践
前端·javascript·安全·uni-app·uniapp·app开发·uniappx
这辈子谁会真的心疼你3 小时前
pdf格式怎么提取其中一部分张页?
前端·pdf
人工智能训练师3 小时前
Tailwind CSS中设定宽度和高度的方法
前端·css·css3