liubp
2025-12-19 5bdaf416d66b675131004de1aba5d161772a52b0
public/pages/common/communityManage/add/add.js
@@ -122,7 +122,7 @@
            // 确保 vc.component 已完全初始化后再调用
            let retryCount = 0;
            const maxRetries = 20; // 最多重试20次(约1秒)
            const loadData = function() {
            const loadData = function () {
                if (vc.component && typeof vc.component._loadCommunityDetail === 'function') {
                    vc.component._loadCommunityDetail();
                } else {
@@ -140,14 +140,14 @@
        _initEvent: function () {
            // 初始化时添加输入事件监听,自动移除错误样式
            const $that = this;
            setTimeout(function() {
            setTimeout(function () {
                // 为所有输入框和选择框添加输入事件监听
                const inputs = document.querySelectorAll('.community-add input, .community-add select');
                inputs.forEach(function(input) {
                    input.addEventListener('input', function() {
                inputs.forEach(function (input) {
                    input.addEventListener('input', function () {
                        $that.removeError(input.id);
                    });
                    input.addEventListener('change', function() {
                    input.addEventListener('change', function () {
                        $that.removeError(input.id);
                    });
                });
@@ -155,33 +155,33 @@
        },
        methods: {
            // 添加错误样式
            addError: function(elementId) {
            addError: function (elementId) {
                const element = document.getElementById(elementId);
                if (element) {
                    element.classList.add('error');
                }
            },
            // 移除错误样式
            removeError: function(elementId) {
            removeError: function (elementId) {
                const element = document.getElementById(elementId);
                if (element) {
                    element.classList.remove('error');
                }
            },
            // 清除所有错误样式
            clearAllErrors: function() {
            clearAllErrors: function () {
                const elements = document.querySelectorAll('.community-add input.error, .community-add select.error');
                elements.forEach(function(element) {
                elements.forEach(function (element) {
                    element.classList.remove('error');
                });
            },
            toBoolString: function(value, defaultValue) {
            toBoolString: function (value, defaultValue) {
                if (value === undefined || value === null) {
                    return defaultValue;
                }
                return value ? 'true' : 'false';
            },
            chooseProvince: function(event) {
            chooseProvince: function (event) {
                const provCode = event.target.value;
                vc.component.selectProv = provCode;
                vc.component.selectCity = '';
@@ -190,7 +190,7 @@
                vc.component.areas = [];
                // 更新 formData 中的省份名称
                if (vc.component.provs && vc.component.provs.length > 0) {
                    vc.component.provs.forEach(function(_param) {
                    vc.component.provs.forEach(function (_param) {
                        if (_param.areaCode == provCode) {
                            vc.component.selectProvName = _param.areaName;
                            vc.component.formData.projectAddressProvince = _param.areaName;
@@ -204,14 +204,14 @@
                    vc.component._initArea('202', provCode);
                }
            },
            chooseCity: function(event) {
            chooseCity: function (event) {
                const cityCode = event.target.value;
                vc.component.selectCity = cityCode;
                vc.component.selectArea = '';
                vc.component.areas = [];
                // 更新 formData 中的城市名称
                if (vc.component.citys && vc.component.citys.length > 0) {
                    vc.component.citys.forEach(function(_param) {
                    vc.component.citys.forEach(function (_param) {
                        if (_param.areaCode == cityCode) {
                            vc.component.selectCityName = _param.areaName;
                            vc.component.formData.projectAddressCity = _param.areaName;
@@ -224,25 +224,25 @@
                    vc.component._initArea('303', cityCode);
                }
            },
            chooseArea: function(event) {
            chooseArea: function (event) {
                const areaCode = event.target.value;
                vc.component.selectArea = areaCode;
                vc.component.formData.cityCode = areaCode;
                vc.component.formData.areaAddress = '';
                // 更新 formData 中的区县名称
                if (vc.component.areas && vc.component.areas.length > 0) {
                    vc.component.areas.forEach(function(_param) {
                    vc.component.areas.forEach(function (_param) {
                        if (_param.areaCode == areaCode) {
                            vc.component.selectAreaName = _param.areaName;
                            vc.component.formData.projectAddressDistrict = _param.areaName;
                        }
                    });
                }
                // 构建区域地址
                if (vc.component.provs && vc.component.provs.length > 0) {
                    vc.component.provs.forEach(function(_param) {
                    vc.component.provs.forEach(function (_param) {
                        if (_param.areaCode == vc.component.selectProv) {
                            vc.component.selectProvName = _param.areaName;
                            vc.component.formData.areaAddress = _param.areaName;
@@ -250,7 +250,7 @@
                    });
                }
                if (vc.component.citys && vc.component.citys.length > 0) {
                    vc.component.citys.forEach(function(_param) {
                    vc.component.citys.forEach(function (_param) {
                        if (_param.areaCode == vc.component.selectCity) {
                            vc.component.selectCityName = _param.areaName;
                            if (vc.component.formData.areaAddress) {
@@ -262,7 +262,7 @@
                    });
                }
                if (vc.component.areas && vc.component.areas.length > 0) {
                    vc.component.areas.forEach(function(_param) {
                    vc.component.areas.forEach(function (_param) {
                        if (_param.areaCode == vc.component.selectArea) {
                            vc.component.selectAreaName = _param.areaName;
                            if (vc.component.formData.areaAddress) {
@@ -274,7 +274,7 @@
                    });
                }
            },
            _initArea: function(_areaLevel, _parentAreaCode) {
            _initArea: function (_areaLevel, _parentAreaCode) {
                var _param = {
                    params: {
                        areaLevel: _areaLevel,
@@ -291,7 +291,7 @@
                                // 填充省份下拉框
                                const provinceSelect = document.getElementById('province');
                                if (provinceSelect) {
                                    _tmpAreas.forEach(function(item) {
                                    _tmpAreas.forEach(function (item) {
                                        const option = document.createElement('option');
                                        option.value = item.areaCode;
                                        option.textContent = item.areaName;
@@ -304,7 +304,7 @@
                                const citySelect = document.getElementById('city');
                                if (citySelect) {
                                    citySelect.innerHTML = '<option value="">请选择市</option>';
                                    _tmpAreas.forEach(function(item) {
                                    _tmpAreas.forEach(function (item) {
                                        const option = document.createElement('option');
                                        option.value = item.areaCode;
                                        option.textContent = item.areaName;
@@ -317,7 +317,7 @@
                                const areaSelect = document.getElementById('area');
                                if (areaSelect) {
                                    areaSelect.innerHTML = '<option value="">请选择区</option>';
                                    _tmpAreas.forEach(function(item) {
                                    _tmpAreas.forEach(function (item) {
                                        const option = document.createElement('option');
                                        option.value = item.areaCode;
                                        option.textContent = item.areaName;
@@ -338,7 +338,7 @@
                    return {};
                }
                return {
                    communityId: info.communityId || info.communityId || '',
                    communityId: info.communityId || '',
                    newBId: info.newBId || '',
                    feePrice: info.feePrice || '',
                    projectAddressProvince: info.projectAddressProvince || info.provinceName || '',
@@ -393,7 +393,7 @@
                    groundNonMotorVehicleArea: info.groundNonMotorVehicleArea || info.nonElectricCarGroundArea || '',
                    undergroundNonMotorVehicleArea: info.undergroundNonMotorVehicleArea || info.nonElectricCarUndergroundArea || '',
                    clubhouseArea: info.clubhouseArea || info.clubArea || '',
                    hasDecorationRubbishPoint: vc.component.toBoolString(info.hasDecorationRubbishPoint, info.garbageFixed ? 'true' : 'false'),
                    hasDecorationRubbishPoint: info.hasDecorationRubbishPoint === '是' || info.garbageFixed == 1 ? '是' : '否',
                    securityEntranceCount: info.securityEntranceCount || info.gateGuardTotal || '',
                    elevatorCount: info.elevatorCount || info.elevatorTotal || '',
                    elevatorType: info.elevatorType || '',
@@ -435,17 +435,17 @@
                }
                const $that = this;
                const formData = vc.component.formData;
                // 清除之前的错误样式
                vc.component.clearAllErrors();
                // 验证必填字段
                if (!formData.name || formData.name.trim() === '') {
                    vc.toast('请输入小区名称');
                    vc.component.addError('input-name');
                    return;
                }
                // 构建详细地址
                const addressParts = [];
                if (formData.projectAddressTown) {
@@ -455,7 +455,7 @@
                    addressParts.push(formData.projectAddressRoad);
                }
                const address = addressParts.join(' ') || '';
                if (!address || address.trim() === '') {
                    vc.toast('请输入详细地址');
                    if (!formData.projectAddressTown || formData.projectAddressTown.trim() === '') {
@@ -466,7 +466,7 @@
                    }
                    return;
                }
                // 构建区域地址
                let areaAddress = formData.areaAddress || '';
                // 如果 areaAddress 为空,尝试从省市区名称构建
@@ -489,7 +489,7 @@
                    }
                    areaAddress = areaParts.join('');
                }
                if (!areaAddress || areaAddress.trim() === '') {
                    vc.toast('请选择所在城市');
                    if (!vc.component.selectProv) {
@@ -503,7 +503,7 @@
                    }
                    return;
                }
                // 验证区域编码(必须选择到区县级别)
                const cityCode = formData.cityCode || vc.component.selectArea || '';
                if (!cityCode || cityCode.trim() === '') {
@@ -519,7 +519,7 @@
                    }
                    return;
                }
                // 验证联系电话(使用物业联系人电话或报修电话)
                const tel = formData.propertyManagerPhone || formData.dayRepairPhone || '';
                if (!tel || tel.trim() === '') {
@@ -529,13 +529,13 @@
                        vc.component.addError('input-phone');
                    }
                    // 如果物业联系人电话为空,且日间电话也为空,则也标记日间电话
                    if ((!formData.propertyManagerPhone || formData.propertyManagerPhone.trim() === '') &&
                    if ((!formData.propertyManagerPhone || formData.propertyManagerPhone.trim() === '') &&
                        (!formData.dayRepairPhone || formData.dayRepairPhone.trim() === '')) {
                        vc.component.addError('input-day-phone');
                    }
                    return;
                }
                // 状态映射:statusCd (1=正常, 2=暂停, 3=注销) -> state (状态编码)
                let state = '1100'; // 默认正常状态
                if (formData.statusCd === '1') {
@@ -545,7 +545,7 @@
                } else if (formData.statusCd === '3') {
                    state = '1300'; // 注销(假设编码)
                }
                // 构建提交数据
                const submitData = {
                    // 基础参数 - 必填
@@ -555,7 +555,7 @@
                    tel: tel,
                    cityCode: cityCode,
                    state: state,
                    // 基础参数 - 可选
                    tmpAddress: formData.tmpAddress || '',
                    nearbyLandmarks: formData.nearbyLandmarks || '',
@@ -568,7 +568,7 @@
                    communityId: formData.communityId || '',
                    communityCode: formData.communityCode || '',
                    communityArea: formData.communityArea || '',
                    // 项目扩展参数
                    projectAddressProvince: formData.projectAddressProvince || '',
                    projectAddressCity: formData.projectAddressCity || '',
@@ -622,7 +622,6 @@
                    groundNonMotorVehicleArea: formData.groundNonMotorVehicleArea || '',
                    undergroundNonMotorVehicleArea: formData.undergroundNonMotorVehicleArea || '',
                    clubhouseArea: formData.clubhouseArea || '',
                    hasDecorationRubbishPoint: formData.hasDecorationRubbishPoint || '',
                    securityEntranceCount: formData.securityEntranceCount || '',
                    elevatorCount: formData.elevatorCount || '',
                    elevatorType: formData.elevatorType || '',
@@ -650,11 +649,11 @@
                    multilayerVillaBuildingCount: formData.multilayerVillaBuildingCount || '',
                    residentialHouseholdCount: formData.residentialHouseholdCount || '',
                    shopHouseholdCount: formData.shopHouseholdCount || '',
                    // 扩展属性
                    attrs: formData.attrs || []
                };
                // 转换数字字段
                const numberFields = [
                    'fireHydrantCount', 'fireChannelCount', 'waterTankCount', 'reservoirCount',
@@ -665,23 +664,22 @@
                    'barrierGateCount', 'waterPumpCount', 'groundParkingSpaces', 'undergroundParkingSpaces',
                    'totalBuildingCount', 'buildingUnitCount', 'highRiseBuildingCount',
                    'multilayerVillaBuildingCount', 'residentialHouseholdCount', 'shopHouseholdCount',
                    'payFeeMonth', 'hasManagerCertificate', 'hasDecorationRubbishPoint'
                    'payFeeMonth', 'hasManagerCertificate'
                ];
                numberFields.forEach(field => {
                    if (submitData[field] !== '' && submitData[field] !== null && submitData[field] !== undefined) {
                        submitData[field] = Number(submitData[field]);
                    } else if (field === 'hasManagerCertificate' || field === 'hasDecorationRubbishPoint') {
                    } else if (field === 'hasManagerCertificate') {
                        submitData[field] = 0;
                    }
                });
                // 转换Decimal字段
                const decimalFields = [
                    'feePrice', 'projectLandArea', 'totalConstructionArea', 'chargeableTotalArea',
                    'chargeableAreaMultilayer', 'chargeableAreaHighRise1', 'chargeableAreaHighRiseUp',
                    'chargeableAreaShop', 'chargeableAreaVilla', 'chargeableAreaOffice',
                    'chargeableAreaCommercialHouse', 'greenArea', 'groundNonMechanicalFee',
                    'garageNonMechanicalFee', 'temporaryHourlyFee', 'temporaryDailyFee',
                    'garageNonMechanicalFee', 'temporaryHourlyFee', 'temporaryDailyFee',
                    'temporaryPerTimeFee', 'communityArea'
                ];
                decimalFields.forEach(field => {
@@ -691,7 +689,7 @@
                        submitData[field] = 0;
                    }
                });
                // 清理空字符串字段,转换为null或删除
                Object.keys(submitData).forEach(key => {
                    if (submitData[key] === '') {