<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
    <th:block th:include="include :: header('新增家庭支出')" />
    <th:block th:include="include :: datetimepicker-css" />
    <style>
        .container {
            margin: 50px;
            font-family: sans-serif;
        }
        .select-group {
            display: flex;
            gap: 20px;
            margin-bottom: 20px;
        }
        select {
            padding: 8px 12px;
            border: 1px solid #ddd;
            border-radius: 4px;
            min-width: 180px;
            font-size: 14px;
        }
        .result {
            margin-top: 20px;
            padding: 10px;
            border: 1px dashed #666;
            border-radius: 4px;
        }
    </style>
</head>
<body class="white-bg">
    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
        <form class="form-horizontal m" id="form-expense-add">
            <div class="col-xs-12">
                <div class="form-group">
                    <label class="col-sm-3 control-label is-required">支出金额:</label>
                    <div class="col-sm-8">
                        <input name="amount" class="form-control" type="text" required>
                    </div>
                </div>
            </div>
            <div class="col-xs-12">
                <div class="form-group">
                    <label class="col-sm-3 control-label">支出备注:</label>
                    <div class="col-sm-8">
                        <textarea name="remark" class="form-control"></textarea>
                    </div>
                </div>
            </div>
            <div class="col-xs-12">
                <div class="form-group">
                    <label class="col-sm-3 control-label">支出地区:</label>
                    <input type="hidden" name="region" id="region" />
                    <div class="container">
                        <h3>省-市-区三级联动选择</h3>
                        <div class="select-group">
                            <!-- 一级选择:省 -->
                            <select id="province">
                                <option value="">请选择省份</option>
                            </select>

                            <!-- 二级选择:市 -->
                            <select id="city" disabled>
                                <option value="">请先选择省份</option>
                            </select>

                            <!-- 三级选择:区 -->
                            <select id="district" disabled>
                                <option value="">请先选择城市</option>
                            </select>
                        </div>

                        <!-- 选中结果展示 -->
                        <div class="result">
                            选中结果:<span id="selectedResult">未选择</span>
                        </div>
                    </div>
                </div>
            </div>
            <div class="col-xs-12">
                <div class="form-group">
                    <label class="col-sm-3 control-label is-required">支出时间:</label>
                    <div class="col-sm-8">
                        <div class="input-group date">
                            <input name="expenseTime" class="form-control" placeholder="yyyy-MM-dd" type="text" required>
                            <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
                        </div>
                    </div>
                </div>
            </div>
            <div class="col-xs-12">
                <div class="form-group">
                    <label class="col-sm-3 control-label">图片:</label>
                    <div class="col-sm-8">
                        <input name="image" class="form-control" type="text">
                    </div>
                </div>
            </div>
        </form>
    </div>
    <th:block th:include="include :: footer" />
    <th:block th:include="include :: datetimepicker-js" />
    <script th:inline="javascript">
        var prefix = ctx + "system_expense/expense"
        $("#form-expense-add").validate({
            focusCleanup: true
        });

        function submitHandler() {
            if ($.validate.form()) {
                $.operate.save(prefix + "/add", $('#form-expense-add').serialize());
            }
        }

        $("input[name='expenseTime']").datetimepicker({
            format: "yyyy-mm-dd",
            minView: "month",
            autoclose: true
        });

        //三级联动选择
        const areaData = {
            "110000": {
                name: "北京市",
                cities: {
                    "110100": {
                        name: "北京市",
                        districts: {
                            "110101": "东城区",
                            "110102": "西城区",
                            "110105": "朝阳区",
                            "110106": "丰台区"
                        }
                    }
                }
            },
            "310000": {
                name: "上海市",
                cities: {
                    "310100": {
                        name: "上海市",
                        districts: {
                            "310101": "黄浦区",
                            "310104": "徐汇区",
                            "310105": "长宁区",
                            "310106": "静安区"
                        }
                    }
                }
            },
            "440000": {
                name: "广东省",
                cities: {
                    "440100": {
                        name: "广州市",
                        districts: {
                            "440103": "荔湾区",
                            "440104": "越秀区",
                            "440105": "海珠区"
                        }
                    },
                    "440300": {
                        name: "深圳市",
                        districts: {
                            "440303": "罗湖区",
                            "440304": "福田区",
                            "440305": "南山区"
                        }
                    }
                }
            }
        };

        // 获取DOM元素
        const provinceSelect = document.getElementById('province');
        const citySelect = document.getElementById('city');
        const districtSelect = document.getElementById('district');
        const resultSpan = document.getElementById('selectedResult');

        // 初始化省份下拉框
        function initProvince() {
            // 遍历省份数据,添加到下拉框
            for (const [code, province] of Object.entries(areaData)) {
                const option = document.createElement('option');
                option.value = code; // 存储省份编码
                option.textContent = province.name; // 显示省份名称
                provinceSelect.appendChild(option);
            }
        }

        // 根据选中的省份加载城市
        function loadCities(provinceCode) {
            // 清空城市和区的下拉框
            citySelect.innerHTML = '<option value="">请选择城市</option>';
            districtSelect.innerHTML = '<option value="">请先选择城市</option>';

            // 禁用/启用城市下拉框
            if (!provinceCode) {
                citySelect.disabled = true;
                districtSelect.disabled = true;
                return;
            }
            citySelect.disabled = false;

            // 加载对应省份的城市数据
            const cities = areaData[provinceCode].cities;
            for (const [code, city] of Object.entries(cities)) {
                const option = document.createElement('option');
                option.value = code;
                option.textContent = city.name;
                citySelect.appendChild(option);
            }
        }

        // 根据选中的城市加载区
        function loadDistricts(cityCode, provinceCode) {
            // 清空区的下拉框
            districtSelect.innerHTML = '<option value="">请选择区</option>';

            // 禁用/启用区下拉框
            if (!cityCode || !provinceCode) {
                districtSelect.disabled = true;
                return;
            }
            districtSelect.disabled = false;

            // 加载对应城市的区数据
            const districts = areaData[provinceCode].cities[cityCode].districts;
            for (const [code, districtName] of Object.entries(districts)) {
                const option = document.createElement('option');
                option.value = code;
                option.textContent = districtName;
                districtSelect.appendChild(option);
            }
        }

        // 更新选中结果
        function updateResult() {
            const provinceCode = provinceSelect.value;
            const cityCode = citySelect.value;
            const districtCode = districtSelect.value;

            if (!provinceCode) {
                resultSpan.textContent = '未选择';
                document.getElementById('region').value = ''; // 清空隐藏字段
                return;
            }

            // 拼接地区字符串(省-市-区)
            let region = areaData[provinceCode].name;
            if (cityCode) {
                region += ' - ' + areaData[provinceCode].cities[cityCode].name;
            }
            if (districtCode && cityCode) {
                region += ' - ' + areaData[provinceCode].cities[cityCode].districts[districtCode];
            }

            resultSpan.textContent = region;
            document.getElementById('region').value = region; // 赋值给隐藏字段
        }

        // 绑定事件监听
        provinceSelect.addEventListener('change', function() {
            const provinceCode = this.value;
            loadCities(provinceCode); // 加载对应城市
            updateResult(); // 更新结果
        });

        citySelect.addEventListener('change', function() {
            const provinceCode = provinceSelect.value;
            const cityCode = this.value;
            loadDistricts(cityCode, provinceCode); // 加载对应区
            updateResult(); // 更新结果
        });

        districtSelect.addEventListener('change', function() {
            updateResult(); // 更新结果
        });

        // 初始化页面
        initProvince();
    </script>
</body>
</html>

 

posted on 2025-12-03 17:02  fafrkvit  阅读(0)  评论(0)    收藏  举报