<template>
    <!-- 设备详情 -->
    <view class="content">
        <view class="name_box">
            <view class="name_content">{{ devInfo.devName }}</view>
        </view>
        <view class="radar-box">
            <view
                :style="{
                    width: `${length / 200}px`,
                    height: `${width / 200}px`,
                    position: 'relative',
                    overflow: 'hidden',
                }"
                :class="[
                    width < 25500 && length < 25000 ? 'tranStyle' : 'center',
                ]"
            >
                <view
                    v-for="(item, index) in modules"
                    :key="index"
                    class="moduleContent"
                >
                    <view
                        :class="item.type"
                        :style="{
                            width: `${item.width / 2}px`,
                            height: `${item.length / 2}px`,
                            top: `${item.top / 2}px`,
                            left: `${item.left / 2}px`,
                            transform: `rotate(${item.rotate}deg)`,
                            'transform-origin': 'center center',
                        }"
                    >
                        <image
                            class="module-img"
                            :src="`../../static/furnitures/${item.type}.png`"
                            mode=""
                        />
                    </view>
                </view>
                <template v-if="devType == 'LNB'">
                    <view v-for="item in targetPoints" :key="item.id">
                        <image
                            class="action-icon-M"
                            :style="{
                                position: 'absolute',
                                transform: `translate3d(${
                                    item.displayX / 2 + 100
                                }px, ${
                                    -item.displayY / 2 + 100
                                }px, 0) translate(-50%, -50%)`,
                                zIndex: 9999,
                                transition: 'transform 1s linear',
                                willChange: 'transform',
                            }"
                            :src="`../../static/${lnbAction}.png`"
                            mode=""
                        />
                    </view>
                </template>
                <template v-else>
                    <image
                        v-if="actionName"
                        class="action-icon-G"
                        :style="{
                            top: `${top / 200}px`,
                            left: `${left / 200}px`,
                        }"
                        :src="`../../images/furnitures/${actionName}.png`"
                        mode=""
                    />
                </template>
            </view>
        </view>

        <view class="switchBox">
            <text class="name">呼吸灯</text>
            <switch
                :value="statusLight"
                @change="handleLightChange"
                :active-value="1"
                :inactive-value="0"
                size="24px"
                active-color="#07c160"
                inactive-color="#eeeff1"
                style="transform: scale(0.8)"
            />
        </view>
        <view class="notice-info">
            <view class="notice_title" @click="discrepancy">
                <text style="color: #95a4b3; font-size: 28rpx">{{
                    todayDate
                }}</text>
                <image src="../../static/rightArrow.png"></image>
            </view>
            <view
                @click="getFrenEcharts()"
                class="title"
                v-if="
                    devInfo.installPosition == 'Bedroom' ||
                    (breathRate === 0 && breathRate !== '')
                "
            >
                <view
                    class="title-text"
                    style="color: #111111; font-size: 30rpx"
                    >当前呼吸率</view
                >
                <view
                    style="
                        display: flex;
                        justify-content: center;
                        align-items: center;
                    "
                >
                    <view
                        class="title-btn"
                        style="color: #111111; font-size: 30rpx"
                        v-if="breathRate !== ''"
                    >
                        {{ breathRate }}次/分钟</view
                    >
                    <view
                        v-else
                        class="title-btn"
                        style="color: #111111; font-size: 30rpx"
                    >
                        暂无
                    </view>
                    <image
                        src="../../static/rightArrow.png"
                        style="margin-left: auto; width: 30rpx; height: 30rpx"
                    ></image>
                </view>
            </view>

            <view class="title" v-if="devInfo.installPosition == 'Toilet'">
                <view class="title-text" style="color: #22dea7"
                    >今日卫生间使用频次</view
                >
                <view class="title-btn" style="color: #22dea7"
                    >{{
                        freQuenceList.length == "" ? "0" : freQuenceList.length
                    }}次</view
                >
            </view>
            <view class="title" v-if="devInfo.installPosition != 'Toilet'">
                <view class="title-text" style="color: #22dea7"
                    >今日进出频次</view
                >
                <view class="title-btn" style="color: #22dea7"
                    >{{
                        freQuenceList.length == "" ? "0" : freQuenceList.length
                    }}次</view
                >
            </view>
            <view
                class="stayDetail"
                v-if="freQuenceList.length > 0 && freQuenceList.length == 1"
            >
                <view v-for="item in freQuenceList" :key="item.id">
                    <view class="stayDetail-item">
                        <view class="stayDetail-text"
                            >{{
                                item.info.start_time.slice(11, 16)
                            }}目标进入</view
                        >
                        <view class="stayDetail-btn"
                            >{{
                                item.info.end_time.slice(11, 16)
                            }}目标离开</view
                        >
                    </view>
                </view>
            </view>
            <view
                class="stayDetail"
                v-if="freQuenceList.length > 0 && freQuenceList.length > 1"
            >
                <swiper
                    class="auto-scroll-swiper"
                    :indicator-dots="false"
                    :autoplay="false"
                    :interval="3000"
                    :circular="true"
                    :display-multiple-items="1"
                    :vertical="false"
                    :current="currentIndex"
                    @change="onSwiperChange"
                >
                    <swiper-item
                        v-for="item in freQuenceList"
                        :key="item.id"
                        class="stayDetail-item"
                    >
                        <view class="stayDetail-text"
                            >{{
                                item.info.start_time.slice(11, 16)
                            }}目标进入</view
                        >
                        <view class="stayDetail-btn"
                            >{{
                                item.info.end_time.slice(11, 16)
                            }}目标离开</view
                        >
                    </swiper-item>
                </swiper>
            </view>
            <!-- <view class="title" v-if="devInfo.installPosition == 'Toilet'">
                <view class="title-text" style="color: #ff976a"
                    >昨日卫生间使用频次</view
                >
                <view class="title-btn" style="color: #ff976a"
                    >{{
                        freQuenceList.length == "" ? "0" : freQuenceList.length
                    }}次</view
                >
            </view>
            <view class="title" v-else>
                <view class="title-text" style="color: #ff976a"
                    >昨日进出频次</view
                >
                <view class="title-btn" style="color: #ff976a"
                    >{{
                        freQuenceList.length == "" ? "0" : freQuenceList.length
                    }}次</view
                >
            </view> -->
        </view>
        <view class="box" v-if="!breathShow">
            <view class="handle-btn">
                <view class="btn1" @click="shareDevice">分享</view>
                <view class="btn1" @click="gotoSetting">设置</view>
                <view class="btn2" @click="healthAlarm"> 健康闹钟 </view>
            </view>
        </view>

        <view class="box" v-else>
            <view class="handle-btn">
                <view class="closeBreath" @click="breathShow = false"
                    >关闭呼吸率曲线图</view
                >
                <view class="btn2" @click="saveBreath"> 保存呼吸率曲线图 </view>
            </view>
        </view>

        <!-- 遮罩层 -->
        <view class="mask" v-if="shareModel" @click="shareModel = false"></view>
        <!-- 弹窗内容 -->
        <view class="share-modal" v-if="shareModel">
            <view class="modal-header">
                <text class="cancel-btn" @click="shareModel = false">取消</text>
                <text class="modal-title">分享</text>
                <text class="confirm-btn" @click="onShareConfirm()">确认</text>
            </view>
            <view class="modal-body">
                <view class="info-row">
                    <view class="label">设备序列号：</view>
                    <view class="value">{{ devInfo.clientId }}</view>
                </view>
                <view class="info-row">
                    <view class="label">设备名称：</view>
                    <view class="value">{{ devInfo.devName }}</view>
                </view>
                <view class="input-row phoneInfo">
                    <view>被分享人</view>
                    <input
                        class="input"
                        placeholder="请输入手机号"
                        type="number"
                        v-model="sharedPhone"
                    />
                </view>
                <view class="funChoice">
                    <view class="funItem" @click="smChange()">
                        <label class="simple-radio">
                            <radio
                                :value="messageFlag"
                                color="#7c5345"
                                :checked="messageFlag == true"
                                class="hide-original"
                            />
                            <text>短信权限</text>
                        </label>
                    </view>
                    <view class="funItem">
                        <label class="simple-radio" @click="snChange()">
                            <radio
                                :value="serviceNumberFlag"
                                color="#7c5345"
                                :checked="serviceNumberFlag == true"
                                class="hide-original"
                            />
                            <text>服务号通知</text>
                        </label>
                    </view>
                    <view class="funItem">
                        <label class="simple-radio" @click="vfChange()">
                            <radio
                                :value="voipFlag"
                                color="#7c5345"
                                :checked="voipFlag == true"
                                class="hide-original"
                            />
                            <text>语音通话</text>
                        </label>
                    </view>
                </view>
            </view>
        </view>
        <view class="modal-mask" v-if="choiceVisible" @click="closeChoice">
            <view class="modal-container">
                <view class="modal-header">
                    <text class="title">请选择分享方式</text>
                </view>

                <view class="modal-buttons">
                    <!-- 手机号分析按钮 -->
                    <button class="btn phone-btn" @click="handlePhoneAnalysis">
                        <text>手机号分享</text>
                    </button>

                    <!-- 链接分享按钮 -->
                    <button class="btn link-btn" @click="handleLinkShare">
                        <text>链接分享</text>
                    </button>
                </view>
            </view>
        </view>

        <!-- ECharts图标模块 -->
        <view v-if="breathShow" class="echartsClass">
            <image
                src="../../static/closePng.png"
                class="closePng"
                @click="breathShow = false"
            ></image>

            <l-echart
                id="chart-canvas"
                canvas-id="chart-canvas"
                ref="chartRef"
                @finished="initChart"
                v-if="breathShow"
                @click="breathShow = false"
            ></l-echart>
        </view>

        <alarModel
            v-if="isInitAlarm"
            :clientIdProp="clientIdProp"
            @sendChange="receptionChange"
            @sendHealth="receptHealth"
        />
    </view>
</template>
<script>
import * as echarts from "../../uni_modules/lime-echart/static/echarts.min";

export default {
    data() {
        return {
            width: 0, //检测区域宽度
            length: 0, //检测区域长度
            xOffset: 0,
            yOffset: 0,
            devInfo: "",
            actionName: "",
            startDate: "",
            endDate: "",
            softWare: "",
            statusLight: 0,
            currentDate: new Date().getTime(),
            lnbAction: "action8",
            wsj: false,
            todayWcTimes: "",
            stayDetail: "",
            todayDate: "",
            dev_id: "",
            nowTime: "",
            devName: "",
            devType: "",
            localPhone: uni.getStorageSync("phone"),
            startArr: [],
            freQuenceList: [],
            // mqtt相关
            currentIndex: 0,
            modules: [],
            autoPlayinterval: "",
            choiceVisible: "",
            // 手机号分享授权模块
            shareModel: false,
            alarmModel: false,
            sharedPhone: "",
            messageFlag: true,
            serviceNumberFlag: true,
            voipFlag: true,
            isInitAlarm: "",

            // mqtt模块
            targetPoints: {},
            inactivityTimer: null,
            left: 0,
            top: 0,
            clientIdProp: null,
            breathRate: "",
            breathShow: false,
            breathRpmList: [],
            option: {
                title: [
                    {
                        text: "呼吸率曲线",
                        left: "center",
                        top: 20,
                        textStyle: { fontSize: 14 },
                    },
                    {
                        text: "BPM: 0 次/分钟",
                        left: "center",
                        top: 50,
                        textStyle: { fontSize: 12, color: "#805246" },
                    },
                    {
                        text: "时间 (秒)",
                        left: "right",
                        top: "bottom",
                        textStyle: { fontSize: 12, color: "#888888" },
                    },
                ],
                grid: { left: 60, right: 20, top: 80, bottom: 50 },
                xAxis: {
                    type: "category",
                    data: Array.from({ length: 60 }, (_, i) => i + 1),
                    boundaryGap: false,
                    splitLine: { show: false },
                },
                yAxis: {
                    type: "value",
                    min: 0,
                    max: 40,
                    name: "呼吸率（次）",
                    nameLocation: "end",
                    nameGap: 20,
                    nameTextStyle: { fontSize: 12, color: "#888888" },
                    splitLine: { show: true },
                },
                series: [
                    {
                        type: "line",
                        smooth: true,
                        symbol: "none",
                        lineStyle: { color: "#805246", width: 2 },
                        data: Array(60).fill(0),
                    },
                ],
                animation: true,
                animationDuration: 100,
            },
            index: 0,
            loopTimer: null,
        };
    },
    computed: {},

    methods: {
        getdevInfo(devId) {
            this.$http
                .get(`wap/device/queryDeviceInfoById`, {
                    devId: devId,
                })
                .then((res) => {
                    if (res.data.data) {
                        this.devInfo = res.data.data;
                        this.devType = this.devInfo.devType;

                        this.width =
                            Math.abs(
                                this.devInfo.yyEnd - this.devInfo.yyStart
                            ) * 100;
                        this.length =
                            Math.abs(
                                this.devInfo.xxEnd - this.devInfo.xxStart
                            ) * 100;
                        this.xOffset =
                            (this.devInfo.xxStart + this.devInfo.xxEnd) * 50;
                        this.yOffset =
                            -(this.devInfo.yyStart + this.devInfo.yyEnd) * 50;
                        this.statusLight = this.devInfo.statusLight;
                    }
                })
                .catch((err) => {});
        },
        getdevRoomInfo(devId) {
            this.$http
                .get(`wap/room/readRoom`, {
                    devId: devId,
                })
                .then((res) => {
                    if (res.data.data) {
                        this.modules = res.data.data.furnitures;
                    }
                });
        },
        handleLightChange(e) {
            let newValue = e.detail.value == true ? 1 : 0;
            this.$http
                .post(`wap/device/statusLight`, {
                    statusLight: newValue,
                    devId: this.devInfo.devId,
                })
                .then((res) => {
                    if (res.data.code == 200) {
                        uni.showToast({
                            title: "操作成功",
                            icon: "success",
                        });
                        this.statusLight = newValue;
                    } else {
                        wx.showToast({
                            title: res.data.message,
                            icon: "none",
                        });
                    }
                });
        },

        parseDeviceItem(devItemStr) {
            try {
                const devItem = JSON.parse(devItemStr);
                if (!devItem || !devItem.devId || !devItem.clientId) {
                    throw new Error("设备信息不完整");
                }
                return devItem;
            } catch (e) {
                throw new Error("设备信息解析失败: " + e.message);
            }
        },
        // 分享功能模块
        shareDevice() {
            this.choiceVisible = true;
        },
        onShareConfirm() {
            if (!this.sharedPhone) {
                uni.showModal({
                    content: "请填写手机号!",
                    showCancel: false,
                });
                return;
            }
            let reg_tel =
                /^(13[0-9]|14[01456879]|15[0-3,5-9]|16[2567]|17[0-8]|18[0-9]|19[0-3,5-9])\d{8}$/;
            if (!reg_tel.test(this.sharedPhone)) {
                uni.showModal({
                    content: "请填写正确手机号!",
                    showCancel: false,
                });
                return;
            }
            let shareParam = {
                sharerUserId: uni.getStorageSync("userId"),
                devId: this.devInfo.devId,
                sharerPhone: uni.getStorageSync("phone"),
                sharedUserId: "",
                sharedPhone: this.sharedPhone,
                messageFlag: this.messageFlag == true ? 0 : 1,
                serviceNumberFlag: this.serviceNumberFlag == true ? 0 : 1,
                voipFlag: this.voipFlag == true ? 0 : 1,
            };

            this.$http
                .post("wap/share/deviceShare", shareParam, {
                    header: {
                        "Content-Type": "application/json;charset=UTF-8",
                    },
                })
                .then((res) => {
                    if (res.data.code == 200) {
                        uni.showToast({
                            title: "分享成功",
                            icon: "success",
                            duration: 1500,
                        });
                    } else {
                        uni.showToast({
                            title: res.data.message,
                            icon: "none",
                            duration: 1500,
                        });
                    }
                });
            this.shareModel = false;
        },
        closeChoice() {
            this.choiceVisible = false;
        },
        handlePhoneAnalysis() {
            this.choiceVisible = false;
            this.shareModel = true;
        },
        handleLinkShare() {
            this.choiceVisible = false;
            uni.navigateTo({
                url:
                    "/pagesA/linkShare/linkShare?devInfo=" +
                    JSON.stringify(this.devInfo),
            });
        },
        smChange() {
            this.messageFlag = !this.messageFlag;
        },
        snChange() {
            this.serviceNumberFlag = !this.serviceNumberFlag;
        },
        vfChange() {
            this.voipFlag = !this.voipFlag;
        },
        gotoSetting() {
            uni.navigateTo({
                url:
                    "/pagesA/deviceSetting/deviceSetting?devInfo=" +
                    JSON.stringify(this.devInfo),
            });
        },
        getFrequency(clientId) {
            this.$http
                .post(`wap/stats/alarmEventsQuery`, {
                    clientId: clientId,
                    createTimeStart: this.$time(new Date()),
                    createTimeEnd: this.$time(new Date()),
                    eventType: 1,
                })
                .then((res) => {
                    if (res.data.code == 200) {
                        if (res.data.data.rows.length > 0) {
                            this.freQuenceList = this.parseJsonToObjects(
                                res.data.data.rows
                            );
                        } else {
                            this.freQuenceList = [];
                        }
                    } else {
                        wx.showToast({
                            title: res.data.message,
                            icon: "none",
                        });
                    }
                });
        },
        parseJsonToObjects(jsonArray) {
            return jsonArray.map((item) => {
                // 解析info字段的JSON字符串
                let infoData = {};
                try {
                    infoData = JSON.parse(item.info);
                } catch (e) {
                    console.error("Failed to parse info JSON:", e);
                }

                return {
                    id: item.id,
                    clientId: item.clientId,
                    tenantId: item.tenantId,
                    devName: item.devName,
                    uuid: item.uuid,
                    planUuid: item.planUuid,
                    eventType: item.eventType,
                    info: infoData,
                    isHandle: item.isHandle,
                    createTime: item.createTime,
                    remark: item.remark,
                };
            });
        },
        // 健康闹钟方法
        healthAlarm() {
            uni.navigateTo({
                url:
                    "/pagesA/healthAlarm/healthAlarm?devInfo=" +
                    JSON.stringify(this.devInfo),
            });
        },
        onSwiperChange(event) {
            const current = event.detail.current;
            const totalItems = this.freQuenceList.length;
            if (current === totalItems - 1) {
                this.autoplay = false;
            }
            this.currentIndex = current;
        },

        autoSwipe() {
            if (this.freQuenceList && this.freQuenceList.length > 0) {
                setInterval(() => {
                    let nextIndex = this.currentIndex + 1;
                    if (nextIndex >= this.freQuenceList.length) {
                        nextIndex = 0; // 循环到第一个项目
                    }
                    this.currentIndex = nextIndex;
                }, 3000); // 每3秒自动滚动一次
            }
        },
        discrepancy() {
            uni.navigateTo({
                url:
                    "/pagesA/discrepancy/discrepancy?freQuenceList=" +
                    JSON.stringify(this.freQuenceList),
            });
        },
        getCurrentDate() {
            const now = new Date();
            this.currentDate = `${now.getFullYear()}-${
                now.getMonth() + 1
            }月${now.getDate().toString().padStart(2, "0")}日`;
        },
        receptionChange(val) {
            this.targetPoints = val;
        },
        receptHealth(val) {
            this.breathRate = val;
            this.setEcharts(val);
        },
        getToday() {
            const today = new Date();
            const year = today.getFullYear();
            const month = today.getMonth() + 1;
            const day = today.getDate();
            this.todayDate = `${year}年${month}月${day}日`;
        },
        // echarts图表模块

        getOption(list) {
            // 固定 X 轴 [0 ~ 60]
            const xData = Array.from({ length: 61 }, (_, i) => i);
            const recent = list.slice(-61);
            const data = new Array(61).fill(null);
            for (let i = 0; i < recent.length; i++) {
                data[i] = recent[i];
            }

            return {
                title: [
                    { text: "呼吸率曲线", left: "center", top: 20 },
                    {
                        text: `BPM: ${recent[recent.length - 1] || 0} 次/分钟`,
                        left: "center",
                        top: 50,
                        textStyle: { fontSize: 12, color: "#805246" },
                    },
                    {
                        text: "时间 (秒)",
                        left: "right",
                        top: "bottom",
                        textStyle: {
                            fontSize: 10,
                            color: "#888888",
                            fontWeight: "normal",
                        },
                    },
                ],
                grid: { left: 60, right: 20, top: 80, bottom: 50 },
                xAxis: {
                    type: "category",
                    data: xData,
                    boundaryGap: false,
                },
                yAxis: {
                    type: "value",
                    min: 0,
                    max: 40,
                    name: "呼吸率（次）",
                    nameLocation: "end",
                    nameGap: 20,
                    nameTextStyle: {
                        fontSize: 10,
                        color: "#888888",
                        fontWeight: "normal",
                    },
                    splitLine: { show: true },
                },
                series: [
                    {
                        type: "line",
                        smooth: true,
                        symbol: "none",
                        data: data,
                        showSymbol: false,
                        lineStyle: { color: "#7a4e42", width: 2 },
                    },
                ],
            };
        },

        getFrenEcharts() {
            if (this.breathRate === "" || this.breathRate === null) {
                uni.showToast({
                    title: "暂无呼吸率",
                    icon: "none",
                    duration: 1500,
                });
                return;
            }
            this.breathShow = true;
            this.$nextTick(() => {
                this.initChart();
            });
        },
        initChart() {
            if (!this.$refs.chartRef) return;
            if (this.chartInstance) {
                this.chartInstance.dispose();
                this.chartInstance = null;
            }
            this.$refs.chartRef.init(echarts, (chart) => {
                this.chartInstance = chart;
                chart.setOption(this.option, true);
            });
        },
        setEcharts(val) {
            if (!Array.isArray(this.breathRpmList)) {
                this.breathRpmList = [];
            }
            this.breathRpmList.push(val);
            // if (this.breathRpmList.length > 60) {
            //     this.breathRpmList = this.breathRpmList.shift();
            // }
            if (!this.chartInstance) return;
            const option = this.getOption(this.breathRpmList);
            this.chartInstance.setOption(option, { notMerge: true });
        },
        saveBreath() {
            const chart = this.$refs.chartRef;
            if (!chart) {
                uni.showToast({ title: "图表未渲染", icon: "none" });
                return;
            }
            chart.canvasToTempFilePath({
                success: (res) => {
                    uni.saveImageToPhotosAlbum({
                        filePath: res.tempFilePath,
                        success: () => {
                            uni.showToast({
                                title: "保存成功",
                                icon: "success",
                            });
                        },
                        fail: (err) => {
                            console.error("保存失败：", err);
                            uni.showToast({
                                title: "保存失败",
                                icon: "none",
                            });
                        },
                    });
                },
                fail: (err) => {
                    console.error("导出失败：", err);
                    uni.showToast({
                        title: "导出失败",
                        icon: "none",
                    });
                },
            });
        },
    },

    onShow() {
        this.clientIdProp = uni.getStorageSync("clientIDetail");
        this.isInitAlarm = true;
        this.getToday();
    },
    onLoad(options) {
        const devItem = this.parseDeviceItem(options.devItem);
        const { devId, clientId } = devItem;
        this.getFrequency(clientId);
        this.getdevInfo(devId);
        this.getdevRoomInfo(devId);
        this.autoPlayinterval = setTimeout(() => {
            this.autoSwipe();
        }, 3000);
        this.getCurrentDate();
    },
    onUnload() {
        this.isInitAlarm = false;
        this.inactivityTimer = null;
        this.autoPlayinterval = null;
    },
    onHide() {
        this.inactivityTimer = null;
        this.autoPlayinterval = null;
        this.isInitAlarm = false;
    },
};
</script>
<style lang="less" scoped>
.content {
    height: 100vh;
    background: linear-gradient(180deg, #faede2 0%, #f4f4f4 100%);
    box-sizing: border-box;
    padding-top: 20rpx;

    .name_box {
        display: flex;
        justify-content: center;
        align-items: center;
        margin: 0 auto 37rpx 0;

        .name_content {
            display: inline-flex;
            background: rgba(255, 255, 255, 0.65);
            border-radius: 37rpx;
            padding: 6rpx 18rpx;
        }
    }

    .radar-box {
        margin: 0 auto;
        position: relative;
        display: flex;
        align-items: center;
        justify-content: center;
        width: 710rpx;
        height: 710rpx;
        background: #ffffff;
        border-radius: 37.5rpx;
        box-sizing: border-box;

        .center {
            position: absolute;
            background-color: #fff;
            border: 14rpx solid #333333;
            background-image: url("http://jkld.radar-power.com//uploadFiles/framework/file/20250620/toilet_bg.png");
            background-repeat: no-repeat;
            background-position: center;
            transform: scale(1.3);

            .moduleContent {
                position: relative;

                view {
                    position: absolute;
                }

                .module-img {
                    width: 100%;
                    height: 100%;
                    display: block;
                }
            }
        }

        .tranStyle {
            position: absolute;
            background-color: #fff;
            border: 9rpx solid #333333;
            background-image: url("http://jkld.radar-power.com//uploadFiles/framework/file/20250620/toilet_bg.png");
            background-repeat: no-repeat;
            background-position: center;
            transform: scale(2.2);

            .moduleContent {
                overflow: hidden;

                // position: relative;
                view {
                    position: absolute;
                }

                .module-img {
                    width: 100%;
                    height: 100%;
                    display: block;
                }
            }
        }

        .action-icon-G {
            position: absolute;
            width: 100rpx;
            height: 100rpx;
        }

        .action-icon-M {
            position: absolute;
            width: 50rpx;
            height: 50rpx;
        }
    }

    .switchBox {
        width: 710rpx;
        height: 94rpx;
        margin: 18rpx auto;
        padding: 0 37rpx;
        display: flex;
        align-items: center;
        background: #ffffff;
        border-radius: 37rpx;
        box-sizing: border-box;

        .name {
            color: #111111;
            font-size: 32rpx;
        }
    }

    .notice-info {
        width: 710rpx;
        max-height: 300rpx;
        overflow: hidden;
        padding: 30rpx 37rpx 10rpx 37rpx;
        background: #ffffff;
        border-radius: 37rpx;
        box-sizing: border-box;
        margin: 0 auto;

        .notice_title {
            display: flex;
            align-items: space-between;

            image {
                margin-left: auto;
                width: 30rpx;
                height: 30rpx;
            }
        }

        .title {
            margin-top: 10rpx;
            margin-bottom: 10rpx;
            font-family: PingFang SC, PingFang SC;
            font-weight: 500;
            font-size: 34rpx;
            color: #1757dd;
            display: flex;
            align-items: center;
            justify-content: space-between;

            .title-text {
                font-size: 28rpx;
                font-weight: 500;
                color: #1757dd;
            }

            .title-btn {
                font-size: 28rpx;
                font-weight: 500;
                color: #5a5a5a;
            }
        }

        .stayDetail {
            height: 80rpx;
            overflow: hidden;
            margin-top: 10rpx;
            margin-bottom: 10rpx;
            padding-left: 20rpx;
            font-family: PingFang SC, PingFang SC;
            font-weight: 500;
            font-size: 34rpx;

            .stayDetail-item {
                display: flex;
                padding-bottom: 5rpx !important;
                padding-top: 10rpx !important;
                box-sizing: border-box;
                line-height: 60rpx;

                .stayDetail-text {
                    width: 40%;
                    font-size: 28rpx;
                    height: 30rpx !important;
                }

                .stayDetail-btn {
                    padding-left: 30rpx;
                    font-size: 28rpx;
                    height: 30rpx !important;
                }
            }
        }
    }

    .box {
        position: fixed;
        bottom: 0;
        left: 0;
        width: 100vw;
        height: 168rpx;
        padding: 0 37rpx;
        background: #ffffff;
        box-sizing: border-box;

        .handle-btn {
            margin-top: 40rpx;
            display: flex;
            align-items: center;
            justify-content: space-between;

            .btn1 {
                display: flex;
                align-items: center;
                justify-content: center;
                width: 155rpx;
                height: 94rpx;
                background: #ffebe4;
                border-radius: 28rpx;
                font-weight: 500;
                color: #111111;
                font-size: 32rpx;
                text-align: center;
            }

            .btn2 {
                display: flex;
                align-items: center;
                justify-content: center;
                width: 328rpx;
                height: 94rpx;
                background: linear-gradient(
                    105.95deg,
                    #a27867 0%,
                    #74483d 100%
                );
                border-radius: 28rpx;
                box-shadow: 0rpx 4.69rpx 18.75rpx rgba(72, 41, 29, 0.15),
                    0rpx 9.38rpx 9.38rpx rgba(154, 132, 89, 0.2),
                    0rpx -4.69rpx 28.13rpx 4.69rpx #a16647 inset;
                font-family: MiSans;
                font-weight: 500;
                color: #ffffff;
                font-size: 32rpx;
            }
            .closeBreath {
                display: flex;
                align-items: center;
                justify-content: center;
                width: 328rpx;
                height: 94rpx;
                background: #ffebe4;
                border-radius: 28rpx;
                font-weight: 500;
                color: #111111;
                font-size: 32rpx;
                text-align: center;
            }
        }
    }

    /* 弹窗部分样式 */
    .mask {
        position: fixed;
        left: 0;
        top: 0;
        right: 0;
        bottom: 0;
        background: rgba(0, 0, 0, 0.3);
        z-index: 100;
    }

    .share-modal {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        background: #fff;
        border-radius: 24rpx 24rpx 0 0;
        z-index: 101;
        height: 750rpx;

        .modal-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 32rpx 32rpx 0 32rpx;
            font-size: 30rpx;

            .cancel-btn {
                color: #888;
                font-size: 32rpx;
            }

            .modal-title {
                color: #111111;
                font-size: 36rpx;
            }

            .confirm-btn {
                color: #996e5f;
                font-size: 32rpx;
            }
        }

        .modal-body {
            padding: 50rpx;

            .info-row {
                display: flex;
                margin-bottom: 24rpx;
                font-size: 28rpx;
                padding: 0 20rpx;

                .label {
                    color: #111111;
                    width: 200rpx;
                    font-size: 32rpx;
                    text-align-last: justify;
                }

                .value {
                    text-align: right;
                    width: 65%;
                    color: #111111;
                    font-size: 32rpx;
                }
            }

            .input-row {
                display: flex;
                align-items: center;
                margin-top: 32rpx;
                border-radius: 40rpx;
                background: #f7f7f7;
                padding: 0 24rpx;
                height: 80rpx;

                .input {
                    text-align: right;
                    flex: 1;
                    border: none;
                    background: transparent;
                    font-size: 28rpx;
                    color: #333;
                }
            }

            .funChoice {
                .funItem {
                    .simple-radio {
                        display: flex;
                        align-items: center;
                        padding: 20rpx 0;
                    }
                }
            }
        }
    }

    // 分享弹窗样式

    .modal-mask {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: rgba(0, 0, 0, 0.5);
        display: flex;
        justify-content: center;
        align-items: center;
        z-index: 333;

        .modal-container {
            width: 80%;
            background: #fff;
            border-radius: 16rpx;
            overflow: hidden;
            animation: fadeIn 0.3s;

            .modal-header {
                padding: 30rpx;
                text-align: center;
                border-bottom: 1rpx solid #f5f5f5;

                .title {
                    font-size: 36rpx;
                    display: block;
                    margin-bottom: 10rpx;
                }
            }

            .modal-buttons {
                display: flex;
                flex-direction: column;
                padding: 20rpx;

                .btn {
                    flex: 1;
                    height: 90rpx;
                    margin: 15rpx 0;
                    border-radius: 45rpx;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    font-size: 32rpx;
                    border: none;
                    background: none;
                    position: relative;
                }

                .btn-icon {
                    width: 40rpx;
                    height: 40rpx;
                    margin-right: 15rpx;
                }

                .phone-btn {
                    background: linear-gradient(
                        105.95deg,
                        #ba978a 0%,
                        #a27867 100%
                    );
                    color: white;
                }

                .link-btn {
                    background: linear-gradient(
                        105.95deg,
                        #a27867 0%,
                        #74483d 100%
                    );
                    color: white;
                }
            }
        }
    }

    .echartsClass {
        position: absolute;
        width: 650rpx;
        height: 600rpx;
        top: -8%;
        left: -37%;
        transform: translate(50%, 50%);
        background: #ffffff;
        .closePng {
            width: 40rpx;
            height: 40rpx;
            position: fixed;
            top: 10rpx;
            right: 10rpx;
            z-index: 999;
        }
    }
}
</style>
