zhangjq
2026-01-19 0eae7d5afa9093409539325c56ca03d20c55c1f7
删除起草合同页面错误添加的字段并重启项目
5个文件已修改
551 ■■■■ 已修改文件
public/components/admin/editContract/editContract.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/pages/admin/addContract/addContract.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/pages/property/carCreateFee/carCreateFee.html 386 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/pages/property/carCreateFee/carCreateFee.js 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/pages/property/contractCreateFee/contractCreateFee.html 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/components/admin/editContract/editContract.js
@@ -21,6 +21,14 @@
                startTime: '',
                endTime: '',
                signingTime: '',
                propertyCompany: '',
                contractTerm: '',
                isArchived: '',
                contractReminderDate: '',
                signatoryAddress: '',
                contactEmail: '',
                contactWechat: '',
                remarks: '',
                contractTypes: [],
                contractTypeSpecs: [],
                tempfile: '',
@@ -269,6 +277,14 @@
                    startTime: '',
                    endTime: '',
                    signingTime: '',
                    propertyCompany: '',
                    contractTerm: '',
                    isArchived: '',
                    contractReminderDate: '',
                    signatoryAddress: '',
                    contactEmail: '',
                    contactWechat: '',
                    remarks: '',
                    contractTypes: _contractTypes,
                    contractTypeSpecs: [],
                    tempfile: '',
public/pages/admin/addContract/addContract.html
@@ -402,6 +402,7 @@
                            </div>
                        </div>
                    </div>
                    <div v-for="(item,index) in addContractInfo.contractTypeSpecs">
                        <div class="row" v-if="index % 3 == 0">
                            <div class="col-sm-4">
public/pages/property/carCreateFee/carCreateFee.html
@@ -1,223 +1,209 @@
<div>
    <div class="ibox ">
        <div class="ibox-title">
            <h5>
                <vc:i18n name="查询条件" namespace="carCreateFee"></vc:i18n>
            </h5>
            <div class="ibox-tools" style="top:10px;">
<div class="animated fadeInRight ecommerce">
    <div class="row">
        <div class="col-md-1 padding-r-0">
            <div class=" border-radius ">
                <div class="margin-xs-r  treeview ">
                    <ul class="list-group text-center border-radius">
                        <li class="list-group-item node-orgTree "
                            @click="swatchCarTypeCd('1001')"
                            :class="{'vc-node-selected':carCreateFeeInfo.conditions.carTypeCd == '1001'}">
                            地面停车费表
                        </li>
                        <li class="list-group-item node-orgTree "
                            @click="swatchCarTypeCd('1002')"
                            :class="{'vc-node-selected':carCreateFeeInfo.conditions.carTypeCd == '1002'}">
                            地下停车费表
                        </li>
                        <li class="list-group-item node-orgTree "
                            @click="swatchCarTypeCd('1003')"
                            :class="{'vc-node-selected':carCreateFeeInfo.conditions.carTypeCd == '1003'}">
                            临时停车费表
                        </li>
                    </ul>
                </div>
            </div>
        </div>
        <div class="ibox-content">
            <div class="row">
                <div class="col-sm-2">
                    <div class="form-group input-group">
                        <input type="text" :placeholder="vc.i18n('请填写停车场-车位,如 1-101','carCreateFee')"
                            class="form-control " v-model.trim="carCreateFeeInfo.conditions.allNum"
                            @keyup.enter="_queryParkingSpaceMethod">
        <div class="col-md-11">
            <div class="ibox ">
                <div class="ibox-title">
                    <h5>
                        <vc:i18n name="查询条件" namespace="carCreateFee"></vc:i18n>
                    </h5>
                    <div class="ibox-tools" style="top:10px;">
                    </div>
                </div>
                <div class="col-sm-2">
                    <div class="form-group">
                        <div class="form-group">
                            <input type="text" :placeholder="vc.i18n('请填写车牌号','carCreateFee')" class="form-control "
                                v-model.trim="carCreateFeeInfo.conditions.carNumLike"
                                @keyup.enter="_queryParkingSpaceMethod">
                <div class="ibox-content">
                    <div class="row">
                        <div class="col-sm-2">
                            <div class="form-group input-group">
                                <input type="text" :placeholder="vc.i18n('请填写停车场-车位,如 1-101','carCreateFee')"
                                    class="form-control " v-model.trim="carCreateFeeInfo.conditions.allNum"
                                    @keyup.enter="_queryParkingSpaceMethod">
                            </div>
                        </div>
                        <div class="col-sm-2">
                            <div class="form-group">
                                <div class="form-group">
                                    <input type="text" :placeholder="vc.i18n('请填写车牌号','carCreateFee')" class="form-control "
                                        v-model.trim="carCreateFeeInfo.conditions.carNumLike"
                                        @keyup.enter="_queryParkingSpaceMethod">
                                </div>
                            </div>
                        </div>
                        <div class="col-sm-2">
                            <div class="form-group">
                                <input type="text" :placeholder="vc.i18n('请填写业主名称','carCreateFee')" class="form-control "
                                    v-model.trim="carCreateFeeInfo.conditions.ownerName"
                                    @keyup.enter="_queryParkingSpaceMethod">
                            </div>
                        </div>
                        <div class="col-sm-2">
                            <select class="custom-select" v-model="carCreateFeeInfo.conditions.state">
                                <option selected value="">{{vc.i18n('请选择车位状态','carCreateFee')}}</option>
                                <option v-for="(item,index) in carCreateFeeInfo.states" :key="index" :value="item.statusCd">
                                    {{item.name}}
                                </option>
                            </select>
                        </div>
                        <div class="col-sm-2">
                            <button type="button" class="btn btn-primary btn-sm" v-on:click="_queryParkingSpaceMethod()">
                                <i class="fa fa-search"></i>
                                <span>
                                    <vc:i18n name="查询" namespace="carCreateFee"></vc:i18n>
                                </span>
                            </button>
                            <button type="button" class="btn btn-info btn-sm" v-on:click="_resetParkingSpaceMethod()"
                                style="margin-left: 20px;">
                                <i class="fa fa-repeat"></i>
                                <span>
                                    <vc:i18n name="重置" namespace="carCreateFee"></vc:i18n>
                                </span>
                            </button>
                        </div>
                    </div>
                </div>
                <div class="col-sm-2">
                    <div class="form-group">
                        <input type="text" :placeholder="vc.i18n('请填写业主名称','carCreateFee')" class="form-control "
                            v-model.trim="carCreateFeeInfo.conditions.ownerName"
                            @keyup.enter="_queryParkingSpaceMethod">
            </div>
            <div class="ibox">
                <div class="ibox-title">
                    <h5>
                        <vc:i18n name="车辆收费" namespace="carCreateFee"></vc:i18n>
                    </h5>
                    <div class="ibox-tools" style="top:10px;">
                        <button type="button" class="btn btn-primary btn-sm" style="margin-left:10px"
                            v-on:click="_openCarCreateFeeAddModal(null,true)">
                                <vc:i18n name="批量创建" namespace="carCreateFee"></vc:i18n>
                        </button>
                    </div>
                </div>
                <div class="col-sm-2">
                    <select class="custom-select" v-model="carCreateFeeInfo.conditions.state">
                        <option selected value="">{{vc.i18n('请选择车位状态','carCreateFee')}}</option>
                        <option v-for="(item,index) in carCreateFeeInfo.states" :key="index" :value="item.statusCd">
                            {{item.name}}
                        </option>
                    </select>
                </div>
                <div class="col-sm-2">
                    <button type="button" class="btn btn-primary btn-sm" v-on:click="_queryParkingSpaceMethod()">
                        <i class="fa fa-search"></i>
                        <span>
                            <vc:i18n name="查询" namespace="carCreateFee"></vc:i18n>
                        </span>
                    </button>
                    <button type="button" class="btn btn-info btn-sm" v-on:click="_resetParkingSpaceMethod()"
                        style="margin-left: 20px;">
                        <i class="fa fa-repeat"></i>
                        <span>
                            <vc:i18n name="重置" namespace="carCreateFee"></vc:i18n>
                        </span>
                    </button>
                <div class="ibox-content">
                    <div class="row">
                        <div class="col-sm-12">
                            <button type="button" class="btn btn-primary btn-sm" style="margin-bottom:10px"
                                v-on:click="_importCarDataByType(carCreateFeeInfo.conditions.carTypeCd)">
                                <i class="fa fa-upload"></i>
                                <span>
                                    {{carCreateFeeInfo.conditions.carTypeCd == '1001' ? '导入地面停车费' :
                                      carCreateFeeInfo.conditions.carTypeCd == '1002' ? '导入地下停车费' : '导入临时停车费'}}
                                </span>
                            </button>
                        </div>
                    </div>
                    <table class="footable table table-stripped toggle-arrow-tiny" style="margin-top:10px" data-page-size="10">
                        <thead>
                            <tr>
                                <th data-hide="phone" class="text-center">车牌号</th>
                                <th data-hide="phone" class="text-center">停车场(单位:号)</th>
                                <th data-hide="phone" class="text-center">车位(单位:号)</th>
                                <th data-hide="phone" class="text-center">业主名称</th>
                                <th data-hide="phone" class="text-center">联系方式</th>
                                <th data-hide="phone" class="text-center">车位状态</th>
                                <th class="text-center">操作</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr v-for="car in carCreateFeeInfo.cars">
                                <td class="text-center">{{car.carNum}}</td>
                                <td class="text-center">{{car.areaNum}}</td>
                                <td class="text-center">{{car.num}}</td>
                                <td class="text-center">{{car.ownerName}}</td>
                                <td class="text-center">{{car.link}}</td>
                                <td class="text-center">{{car.stateName}}</td>
                                <td class="text-center">
                                    <div class="btn-group">
                                        <button class="btn-white btn btn-xs" v-on:click="_openViewParkingSpaceCreateFee(car)">
                                            查看收费
                                        </button>
                                    </div>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                    <!-- 分页 -->
                    <vc:create path="frame/pagination"></vc:create>
                </div>
            </div>
        </div>
    </div>
    <div class="ibox">
        <div class="ibox-title">
            <h5>
                <vc:i18n name="车辆收费" namespace="carCreateFee"></vc:i18n>
            </h5>
            <div class="ibox-tools" style="top:10px;">
                <!-- <button type="button" class="btn btn-white btn-sm" style="margin-left:10px"
                    v-on:click="_openFeeImportExcel()">
                    <i class="fa fa-plus"></i>
                    <span>
                        <vc:i18n name="自定义模板" namespace="carCreateFee"></vc:i18n>
                    </span>
                </button>
                <button type="button" class="btn btn-white btn-sm" style="margin-left:10px"
                    v-on:click="_openDoCreateRoomFee()">
                    <i class="fa fa-plus"></i>
                    <span>
                        <vc:i18n name="自定义创建" namespace="carCreateFee"></vc:i18n>
                    </span>
                </button> -->
                <button type="button" class="btn btn-primary btn-sm" style="margin-left:10px"
                    v-on:click="_openCarCreateFeeAddModal(null,true)">
                        <vc:i18n name="批量创建" namespace="carCreateFee"></vc:i18n>
                </button>
                <button type="button" class="btn btn-primary btn-sm" style="margin-left:10px"
                    v-on:click="_importCarData()">
                        <vc:i18n name="数据导入" namespace="carCreateFee"></vc:i18n>
                </button>
                <!-- <button type="button" class="btn btn-primary btn-sm" style="margin-left:10px"
                    v-on:click="_toBuyCarMonthCard()">
                        <vc:i18n name="购买月卡" namespace="carCreateFee"></vc:i18n>
                </button> -->
            </div>
        </div>
        <div class="ibox-content">
            <table class="footable table table-stripped toggle-arrow-tiny" style="margin-top:10px" data-page-size="10">
                <thead>
                    <tr>
                        <th data-hide="phone" class="text-center">
                            <vc:i18n name="车牌号" namespace="carCreateFee"></vc:i18n>
                        </th>
                        <th data-hide="phone" class="text-center">
                            <vc:i18n name="停车场(单位:号)" namespace="carCreateFee"></vc:i18n>
                        </th>
                        <th data-hide="phone" class="text-center">
                            <vc:i18n name="车位(单位:号)" namespace="carCreateFee"></vc:i18n>
                        </th>
                        <th data-hide="phone" class="text-center">
                            <vc:i18n name="业主名称" namespace="carCreateFee"></vc:i18n>
                        </th>
                        <th data-hide="phone" class="text-center">
                            <vc:i18n name="联系方式" namespace="carCreateFee"></vc:i18n>
                        </th>
                        <th data-hide="phone" class="text-center">
                            <vc:i18n name="车位状态" namespace="carCreateFee"></vc:i18n>
                        </th>
                        <th class="text-center">
                            <vc:i18n name="操作" namespace="carCreateFee"></vc:i18n>
                        </th>
                    </tr>
                </thead>
                <tbody>
                    <tr v-for="car in carCreateFeeInfo.cars">
                        <td class="text-center">
                            {{car.carNum}}
                        </td>
                        <td class="text-center">
                            {{car.areaNum}}
                        </td>
                        <td class="text-center">
                            {{car.num}}
                        </td>
                        <td class="text-center">
                            {{car.ownerName}}
                        </td>
                        <td class="text-center">
                            {{car.link}}
                        </td>
                        <td class="text-center">
                            {{car.stateName}}
                        </td>
                        <td class="text-center">
                            <!--<div class="btn-group" v-if="car.state != 'F'">
                                    <button class="btn-white btn btn-xs"
                                            v-on:click="_openCarCreateFeeAddModal(car,false)">
                                        <span><vc:i18n name="创建收费" namespace="carCreateFee"></vc:i18n></span>
                                    </button>
                                </div>-->
                            <div class="btn-group">
                                <button class="btn-white btn btn-xs" v-on:click="_openViewParkingSpaceCreateFee(car)">
                                    <vc:i18n name="查看收费" namespace="carCreateFee"></vc:i18n>
                                </button>
                            </div>
                        </td>
                    </tr>
                </tbody>
            </table>
            <!-- 分页 -->
            <vc:create path="frame/pagination"></vc:create>
        </div>
    </div>
    <vc:create path="property/carCreateFeeAdd"></vc:create>
    <vc:create path="property/exportCarFeeImportExcel"></vc:create>
    <vc:create path="property/doImportCreateFee"></vc:create>
    <!-- 车辆数据导入弹窗 -->
    <div class="modal fade" id="importCarDataModal" tabindex="-1" role="dialog" aria-labelledby="importCarDataModalLabel" aria-hidden="true">
        <div class="modal-dialog modal-lg" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="importCarDataModalLabel">车辆数据导入</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    <div class="ibox-content">
                        <div>
                            <div class="form-group row">
                                <label class="col-sm-2 col-form-label">选择文件</label>
                                <div class="col-sm-10">
                                    <div class="custom-file">
                                        <input id="carExcelFile" ref="carExcelFile" type="file"
                                               class="custom-file-input form-control" name="carExcelFile"
                                               v-on:change="getCarExcelFile($event)" accept=".xls,.xlsx,.csv">
                                        <label for="carExcelFile" class="custom-file-label">
                                            {{carCreateFeeInfo.excelFile==''?'必填,请选择数据文件':carCreateFeeInfo.excelFile.name}}
                                        </label>
        <vc:create path="property/carCreateFeeAdd"></vc:create>
        <vc:create path="property/exportCarFeeImportExcel"></vc:create>
        <vc:create path="property/doImportCreateFee"></vc:create>
        <!-- 车辆数据导入弹窗 -->
        <div class="modal fade" id="importCarDataModal" tabindex="-1" role="dialog" aria-labelledby="importCarDataModalLabel" aria-hidden="true">
            <div class="modal-dialog modal-lg" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <h5 class="modal-title" id="importCarDataModalLabel">车辆数据导入</h5>
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <div class="modal-body">
                        <div class="ibox-content">
                            <div>
                                <div class="form-group row">
                                    <label class="col-sm-2 col-form-label">选择文件</label>
                                    <div class="col-sm-10">
                                        <div class="custom-file">
                                            <input id="carExcelFile" ref="carExcelFile" type="file"
                                                   class="custom-file-input form-control" name="carExcelFile"
                                                   v-on:change="getCarExcelFile($event)" accept=".xls,.xlsx,.csv">
                                            <label for="carExcelFile" class="custom-file-label">
                                                {{carCreateFeeInfo.excelFile==''?'必填,请选择数据文件':carCreateFeeInfo.excelFile.name}}
                                            </label>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label class="col-sm-2 col-form-label">导入类型</label>
                                <div class="col-sm-10">
                                    <select class="custom-select" v-model="carCreateFeeInfo.importAdapt">
                                        <option value="importOwnerCarV2">地面/地下停车费</option>
                                        <option value="importCarInout">临时停车费</option>
                                    </select>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label class="col-sm-2 col-form-label">下载模板</label>
                                <div class="col-sm-10">
                                    <div v-if="carCreateFeeInfo.importAdapt == 'importOwnerCarV2'">
                                        请先下载 <a href="/import/中华东波清地面停车费.xlsx" target="_blank">地面停车费导入新模板</a> 或 <a href="/import/中华东波清地下停车费模版.xlsx" target="_blank">地下停车费导入新模板</a>
                                        <span>准备数据后,上传导入</span>
                                <div class="form-group row">
                                    <label class="col-sm-2 col-form-label">导入类型</label>
                                    <div class="col-sm-10">
                                        <select class="custom-select" v-model="carCreateFeeInfo.importAdapt">
                                            <option value="importOwnerCarV2">地面/地下停车费</option>
                                            <option value="importCarInout">临时停车费</option>
                                        </select>
                                    </div>
                                    <div v-else-if="carCreateFeeInfo.importAdapt == 'importCarInout'">
                                        请先下载 <a href="/import/临时停车费导入模板.xlsx" target="_blank">临时停车费导入模板</a>
                                        <span>准备数据后,上传导入</span>
                                </div>
                                <div class="form-group row">
                                    <label class="col-sm-2 col-form-label">下载模板</label>
                                    <div class="col-sm-10">
                                        <div v-if="carCreateFeeInfo.importAdapt == 'importOwnerCarV2'">
                                            请先下载 <a href="/import/中华东波清地面停车费.xlsx" target="_blank">地面停车费导入新模板</a> 或 <a href="/import/中华东波清地下停车费模版.xlsx" target="_blank">地下停车费导入新模板</a>
                                            <span>准备数据后,上传导入</span>
                                        </div>
                                        <div v-else-if="carCreateFeeInfo.importAdapt == 'importCarInout'">
                                            请先下载 <a href="/import/中华东波清临时停车费模版.xlsx" target="_blank">临时停车费导入模板</a>
                                            <span>准备数据后,上传导入</span>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
                    <button type="button" class="btn btn-primary" v-on:click="_importCarDataSubmit()">导入</button>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
                        <button type="button" class="btn btn-primary" v-on:click="_importCarDataSubmit()">导入</button>
                    </div>
                </div>
            </div>
        </div>
public/pages/property/carCreateFee/carCreateFee.js
@@ -1,6 +1,6 @@
/**
 入驻小区
 **/
/**
  入驻小区
  **/
(function (vc) {
    var DEFAULT_PAGE = 1;
    var DEFAULT_ROW = 10;
@@ -52,7 +52,7 @@
                    params: _conditions
                };
                if (_allNum.split('-').length == 2) {
                    let _allNums = _allNum.split('-')
                    let _allNums = _allNum.split('-');
                    param.params.areaNum = _allNums[0];
                    param.params.num = _allNums[1];
                }
@@ -84,7 +84,7 @@
            _openViewParkingSpaceCreateFee: function (_car) {
                vc.jumpToPage("/#/pages/property/listCarFee?carId=" + _car.carId + "&carNum=" + _car.carNum + "&areaNum=" + _car.areaNum + "&num=" + _car.num);
            },
            _toBuyCarMonthCard:function(){
            _toBuyCarMonthCard: function () {
                vc.jumpToPage("/#/pages/fee/buyCarMonthCard");
            },
            //查询
@@ -114,56 +114,33 @@
            _openDoCreateRoomFee: function () {
                vc.emit('doImportCreateFee', 'openDoImportCreateFeeModal', {})
            },
            // 打开导入弹窗
            _importCarData: function () {
                // 使用原生JavaScript方式打开弹窗,避免jQuery选择器问题
                var modal = document.getElementById('importCarDataModal');
                if (modal) {
                    // 检查是否有Bootstrap Modal实例
                    if (window.$ && $.fn.modal) {
                        // 如果jQuery和Bootstrap Modal可用,使用jQuery方式
                        $('#importCarDataModal').modal('show');
                    } else {
                        // 否则尝试原生方式
                        modal.style.display = 'block';
                        modal.classList.add('show');
                    }
                } else {
                    console.error('导入弹窗元素未找到');
                    vc.toast('导入功能初始化失败,请刷新页面重试');
                }
            },
            // 获取导入文件
            getCarExcelFile: function (e) {
                vc.component.carCreateFeeInfo.excelFile = e.target.files[0];
                $that.carCreateFeeInfo.excelFile = e.target.files[0];
            },
            // 导入车辆数据
            _importCarDataSubmit: function () {
                // 检查是否选择了文件
                if (!vc.component.carCreateFeeInfo.excelFile || vc.component.carCreateFeeInfo.excelFile == '') {
                if (!$that.carCreateFeeInfo.excelFile || $that.carCreateFeeInfo.excelFile === '') {
                    vc.toast('请选择导入文件');
                    return;
                }
                // 添加文件验证
                if (!vc.component._checkFileValid(vc.component.carCreateFeeInfo.excelFile)) {
                if (!$that.checkCarFileType($that.carCreateFeeInfo.excelFile.name.split('.')[1])) {
                    vc.toast('不是有效的Excel格式');
                    return;
                }
                // 构建FormData,使用后端要求的参数格式
                if (!$that.checkCarFileSize($that.carCreateFeeInfo.excelFile.size)) {
                    vc.toast('Excel文件大小不能超过20M');
                    return;
                }
                var param = new FormData();
                param.append('uploadFile', vc.component.carCreateFeeInfo.excelFile); // 后端要求的文件名参数
                param.append('communityId', vc.getCurrentCommunity().communityId); // 小区编号
                param.append('importAdapt', vc.component.carCreateFeeInfo.importAdapt); // 后端提供的导入适配器
                param.append('userId', vc.getData('/userInfo/userId')); // 操作员工编号
                // 显示导入进度提示
                param.append('uploadFile', $that.carCreateFeeInfo.excelFile);
                param.append('communityId', vc.getCurrentCommunity().communityId);
                param.append('importAdapt', $that.carCreateFeeInfo.importAdapt);
                param.append('userId', vc.getData('/userInfo/userId'));
                vc.toast('正在导入中,请稍候...');
                // 使用后端提供的完整接口地址
                vc.http.upload(
                    '/callComponent/upload/assetImport/importData', // 后端指定的完整接口地址
                    param,
                    '/callComponent/upload/assetImport/importData',
                    param,
                    {
                        emulateJSON: true,
                        headers: {
@@ -175,14 +152,13 @@
                            var _json = JSON.parse(json);
                            if (_json.code === 0) {
                                $('#importCarDataModal').modal('hide');
                                vc.toast('导入成功,共导入 ' + _json.data + ' 条数据');
                                vc.component.listCars(vc.component.currentPage, DEFAULT_ROW);
                                // 清空文件选择
                                vc.component.carCreateFeeInfo.excelFile = '';
                                vc.toast('导入成功');
                                vc.jumpToPage('/#/pages/property/assetImportLogDetail?logId=' + _json.data.logId + '&logType=' + $that.carCreateFeeInfo.importAdapt);
                                $that.carCreateFeeInfo.excelFile = '';
                                $('#carExcelFile').val('');
                                return;
                            } else {
                                vc.toast(_json.msg || '导入失败', 10000);
                            }
                            vc.toast(_json.msg || '导入失败', 10000);
                        } catch (e) {
                            console.error('导入响应解析错误:', e);
                            vc.toast('导入失败:数据解析错误', 10000);
@@ -194,26 +170,46 @@
                    }
                );
            },
            // 文件验证方法
            _checkFileValid: function (_file) {
                // 验证文件类型
                const fileName = _file.name;
                const fileExt = fileName.split('.').pop().toLowerCase();
                const acceptTypes = ['xlsx', 'xls', 'csv'];
                if (!acceptTypes.includes(fileExt)) {
                    vc.toast('文件类型不支持,请选择 xlsx、xls 或 csv 格式文件');
                    return false;
            // 检查文件类型
            checkCarFileType: function (fileType) {
                var acceptTypes = ['xlsx', 'xls'];
                for (var i = 0; i < acceptTypes.length; i++) {
                    if (fileType === acceptTypes[i]) {
                        return true;
                    }
                }
                // 验证文件大小(20MB)
                const maxSize = 20 * 1024 * 1024;
                if (_file.size > maxSize) {
                    vc.toast('文件大小不能超过 20MB');
                    return false;
                return false;
            },
            // 检查文件大小
            checkCarFileSize: function (fileSize) {
                var MAX_SIZE = 20 * 1024 * 1024;
                return fileSize <= MAX_SIZE;
            },
            // 切换车辆类型
            swatchCarTypeCd: function (carTypeCd) {
                $that.carCreateFeeInfo.conditions.carTypeCd = carTypeCd;
                $that.listCars(DEFAULT_PAGE, DEFAULT_ROW);
            },
            // 按类型导入车辆数据
            _importCarDataByType: function (carTypeCd) {
                if (carTypeCd === '1001' || carTypeCd === '1002') {
                    $that.carCreateFeeInfo.importAdapt = 'importOwnerCarV2';
                } else if (carTypeCd === '1003') {
                    $that.carCreateFeeInfo.importAdapt = 'importCarInout';
                }
                return true;
                var modal = document.getElementById('importCarDataModal');
                if (modal) {
                    if (window.$ && $.fn.modal) {
                        $('#importCarDataModal').modal('show');
                    } else {
                        modal.style.display = 'block';
                        modal.classList.add('show');
                    }
                } else {
                    console.error('导入弹窗元素未找到');
                    vc.toast('导入功能初始化失败,请刷新页面重试');
                }
            }
        }
    });
})(window.vc);
})(window.vc);
public/pages/property/contractCreateFee/contractCreateFee.html
@@ -98,7 +98,19 @@
                                <span><vc:i18n name="结束时间" namespace="contractCreateFee"></vc:i18n></span>
                            </th>
                            <th class="text-center">
                                <span><vc:i18n name="操作" namespace="contractCreateFee"></vc:i18n></span>
                                <span>物业公司</span>
                            </th>
                            <th class="text-center">
                                <span>合同期限</span>
                            </th>
                            <th class="text-center">
                                <span>是否归档</span>
                            </th>
                            <th class="text-center">
                                <span>联系邮箱</span>
                            </th>
                            <th class="text-center">
                                <span>操作</span>
                            </th>
                        </tr>
                        </thead>
@@ -114,6 +126,10 @@
                            <td class="text-center">{{contract.amount.replace(/\B(?=(\d{3})+(?!\d))/g, ',')}}</td>
                            <td class="text-center">{{contract.startTime}}</td>
                            <td class="text-center">{{contract.endTime}}</td>
                            <td class="text-center">{{contract.propertyCompany?contract.propertyCompany:'-'}}</td>
                            <td class="text-center">{{contract.contractTerm?contract.contractTerm:'-'}}</td>
                            <td class="text-center">{{contract.isArchived == 'Y'?'是':'否'}}</td>
                            <td class="text-center">{{contract.contactEmail?contract.contactEmail:'-'}}</td>
                            <td class="text-center">
                                <div class="btn-group" v-if="contract.state != '2002'">
                                    <button class="btn-white btn btn-xs"
@@ -138,7 +154,7 @@
                        </tbody>
                        <tfoot>
                        <tr>
                            <td colspan="10">
                            <td colspan="13">
                                <ul class="pagination float-right"></ul>
                            </td>
                        </tr>