zhangjq
2026-01-30 f77148161b96117814337b615a96ecfaead90b20
合同模块页面整理,业主车辆数据修复
6个文件已修改
2个文件已添加
651 ■■■■ 已修改文件
public/components/admin/editContract/editContract.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/components/admin/editContract/editContract.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/pages/admin/advertisementSummary/advertisementSummary.html 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/pages/admin/contractManage/contractManage.html 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/pages/admin/contractManage/contractManage.js 150 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/pages/contract/contractDetail/contractDetail.html 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/pages/contract/contractDetail/contractDetail.js 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/pages/property/listOwnerCar/listOwnerCar.js 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/components/admin/editContract/editContract.html
@@ -226,7 +226,6 @@
                            </div>
                        </div>
                    </div>
                    <div v-for="(item,index) in editContractInfo.contractTypeSpecs">
                        <div class="row" v-if="index % 3 == 0">
                            <div class="col-sm-4">
public/components/admin/editContract/editContract.js
@@ -21,14 +21,6 @@
                startTime: '',
                endTime: '',
                signingTime: '',
                propertyCompany: '',
                contractTerm: '',
                isArchived: '',
                contractReminderDate: '',
                signatoryAddress: '',
                contactEmail: '',
                contactWechat: '',
                remarks: '',
                contractTypes: [],
                contractTypeSpecs: [],
                tempfile: '',
@@ -277,14 +269,6 @@
                    startTime: '',
                    endTime: '',
                    signingTime: '',
                    propertyCompany: '',
                    contractTerm: '',
                    isArchived: '',
                    contractReminderDate: '',
                    signatoryAddress: '',
                    contactEmail: '',
                    contactWechat: '',
                    remarks: '',
                    contractTypes: _contractTypes,
                    contractTypeSpecs: [],
                    tempfile: '',
public/pages/admin/advertisementSummary/advertisementSummary.html
@@ -6,7 +6,9 @@
                <h5>
                    广告合同汇总表
                </h5>
            </div>
                <!-- 分页组件 -->
    <vc:create path="frame/pagination"></vc:create>
</div>
            <div class="ibox-content">
                <!-- 广告合同查询条件区域 -->
                <div class="row">
@@ -78,10 +80,7 @@
                                            <i class="fa fa-plus"></i>
                                            添加合同
                                        </button>
                                        <button type="button" class="btn btn-primary" v-on:click="_exportContractData()" style="margin-left: 10px;">
                                            <i class="fa fa-download"></i>
                                            导出数据
                                        </button>
                                        <button type="button" class="btn btn-primary" v-on:click="_openImportContractModal()" style="margin-left: 10px;">
                                            <i class="fa fa-upload"></i>
                                            导入数据
@@ -119,7 +118,7 @@
                                    <th class="text-center">联系邮箱</th>
                                    <th class="text-center">联系微信</th>
                                    <th class="text-center">备注</th>
                                    <th class="text-center">操作</th>
                                </tr>
                            </thead>
                            <tbody>
@@ -144,22 +143,16 @@
                                    <td class="text-center">{{item.contactEmail || '-'}}</td>
                                    <td class="text-center">{{item.contactWechat || '-'}}</td>
                                    <td class="text-center">{{item.remark || '-'}}</td>
                                    <td class="text-center">
                                        <button type="button" class="btn btn-xs btn-info"
                                                v-on:click="_openEditContractModel(item)">编辑</button>
                                        <button type="button" class="btn btn-xs btn-danger"
                                                v-on:click="_openDeleteContractModel(item)">删除</button>
                                    </td>
                                </tr>
                                <tr v-if="advertisementSummaryInfo.contracts.length == 0">
                                    <td colspan="21" style="text-align: center; color: #999;">
                                    <td colspan="20" style="text-align: center; color: #999;">
                                        暂无数据
                                    </td>
                                </tr>
                            </tbody>
                            <tfoot>
                                <tr>
                                    <td colspan="21">
                                    <td colspan="20">
                                        <ul class="pagination float-right"></ul>
                                    </td>
                                </tr>
@@ -462,7 +455,7 @@
        </div>
    </div>
    
    <!-- 分页组件 -->
    <vc:create path="frame/pagination"></vc:create>
</div>
public/pages/admin/contractManage/contractManage.html
@@ -15,49 +15,20 @@
                </div>
                <div class="ibox-content">
                    <div class="row">
                        <div class="col-sm-2">
                        <div class="col-sm-3">
                            <div class="form-group">
                                <label>年份:</label>
                                <input type="text" placeholder="yyyy/mm/日"
                                       v-model="contractManageInfo.conditions.year" class=" form-control yearPicker">
                            </div>
                        </div>
                        <div class="col-sm-2">
                            <div class="form-group">
                                <label>小区:</label>
                                <select class="custom-select" v-model="contractManageInfo.conditions.communityId">
                                    <option selected value="">请选择小区</option>
                                    <option :value="item.communityId"
                                            v-for="(item,index) in contractManageInfo.communities">
                                        {{item.name}}
                                    </option>
                                </select>
                            </div>
                        </div>
                        <div class="col-sm-2">
                            <div class="form-group">
                                <label>小区编码:</label>
                                <input type="text" placeholder="请输入"
                                       v-model="contractManageInfo.conditions.communityCode" class=" form-control">
                            </div>
                        </div>
                        <div class="col-sm-2">
                            <div class="form-group">
                                <label>合同名称:</label>
                                <input type="text" :placeholder="vc.i18n('请输入合同名称','contractManage')"
                                       v-model="contractManageInfo.conditions.contractNameLike" class=" form-control">
                            </div>
                        </div>
                        <div class="col-sm-2">
                        <div class="col-sm-4">
                            <div class="form-group">
                                <label>合同编号:</label>
                                <input type="text" :placeholder="vc.i18n('请输入合同编号','contractManage')"
                                       v-model="contractManageInfo.conditions.contractCodeLike" class=" form-control">
                            </div>
                        </div>
                        <div class="col-sm-2">
                        <div class="col-sm-3">
                            <div class="form-group">
                                <label>合同类型:</label>
                                <select class="custom-select" v-model="contractManageInfo.conditions.contractType">
                                    <option selected value="">请选择合同类型</option>
                                    <option :value="item.contractTypeId"
@@ -67,7 +38,7 @@
                                </select>
                            </div>
                        </div>
                        <div class="col-sm-12" style="margin-top: 10px;">
                        <div class="col-sm-2">
                            <button type="button" class="btn btn-primary btn-sm" v-on:click="_queryContractMethod()">
                                <i class="fa fa-search"></i>
                                <span><vc:i18n name="查询" namespace="contractManage"></vc:i18n></span>
@@ -221,9 +192,4 @@
    </div>
    <vc:create path="admin/editContract"></vc:create>
    <vc:create path="admin/deleteContract"></vc:create>
    <!-- 合同管理分成信息 -->
    <vc:contractManagementShare></vc:contractManagementShare>
    <vc:addContractManagementShare></vc:addContractManagementShare>
    <vc:editContractManagementShare></vc:editContractManagementShare>
</div>
public/pages/admin/contractManage/contractManage.js
@@ -13,19 +13,16 @@
                moreCondition: false,
                contractId: '',
                conditions: {
                    communityId: vc.getCurrentCommunity().communityId,
                    // communityId: vc.getCurrentCommunity().communityId,
                    contractNameLike: '',
                    contractCodeLike: '',
                    contractType: '',
                    partyBLike: '',
                    queryStartTime: '',
                    queryEndTime: '',
                    parentContractCodeLike: '',
                    year: '',
                    communityCode: ''
                    parentContractCodeLike: ''
                },
                contractTypes: [],
                communities: []
            }
        },
        _initMethod: function () {
@@ -38,7 +35,6 @@
                 $that.contractManageInfo.conditions.queryEndTime = _value;
             });*/
            $that._listContractTypes();
            $that._listCommunities();
        },
        _initEvent: function () {
            vc.on('contractManage', 'listContract', function (_param) {
@@ -50,24 +46,6 @@
        },
        methods: {
            _initDateInfo: function () {
                // 年份选择器
                $('.yearPicker').datetimepicker({
                    language: 'zh-CN',
                    fontAwesome: 'fa',
                    format: 'yyyy-mm-dd',
                    initTime: true,
                    initialDate: new Date(),
                    autoClose: 1,
                    todayBtn: true,
                    startView: 2,
                    minView: 2
                });
                $('.yearPicker').datetimepicker()
                    .on('changeDate', function (ev) {
                        var value = $(".yearPicker").val();
                        vc.component.contractManageInfo.conditions.year = value;
                    });
                $('.queryStartTime').datetimepicker({
                    language: 'zh-CN',
                    fontAwesome: 'fa',
@@ -105,24 +83,13 @@
                        }
                    });
                //防止多次点击时间插件失去焦点
                var inputs = document.getElementsByClassName(' form-control queryStartTime');
                if (inputs.length > 0) {
                    inputs[0].addEventListener('click', myfunc);
                }
                document.getElementsByClassName(' form-control queryStartTime')[0].addEventListener('click', myfunc)
                function myfunc(e) {
                    e.currentTarget.blur();
                }
                inputs = document.getElementsByClassName(" form-control queryEndTime");
                if (inputs.length > 0) {
                    inputs[0].addEventListener('click', myfunc);
                }
                inputs = document.getElementsByClassName(" form-control yearPicker");
                if (inputs.length > 0) {
                    inputs[0].addEventListener('click', myfunc);
                }
                document.getElementsByClassName(" form-control queryEndTime")[0].addEventListener('click', myfunc)
                function myfunc(e) {
                    e.currentTarget.blur();
@@ -139,19 +106,75 @@
                param.params.contractCodeLike = param.params.contractCodeLike.trim();
                param.params.partyBLike = param.params.partyBLike.trim();
                param.params.parentContractCodeLike = param.params.parentContractCodeLike.trim();
                //确保communityId被正确传递
                param.params.communityId = vc.getCurrentCommunity().communityId;
                //发送get请求
                vc.http.apiGet('/contract/queryContract',
                    param,
                    function (json, res) {
                        var _contractManageInfo = JSON.parse(json);
                        vc.component.contractManageInfo.total = _contractManageInfo.total;
                        vc.component.contractManageInfo.records = _contractManageInfo.records;
                        vc.component.contractManageInfo.contracts = _contractManageInfo.data;
                        var contracts = _contractManageInfo.data || [];
                        // 适配API返回的数据结构
                        var mappedContracts = contracts.map(function(item) {
                            // 从aContacts字段中提取经办人和联系电话
                            var operator = '';
                            var operatorLink = '';
                            if (item.aContacts) {
                                var parts = item.aContacts.split(' ');
                                if (parts.length >= 2) {
                                    operator = parts[0];
                                    operatorLink = parts[1];
                                } else {
                                    operator = item.aContacts;
                                }
                            }
                            // 状态映射
                            var stateName = '';
                            switch (item.state) {
                                case '1':
                                    stateName = '进行中';
                                    break;
                                case '2':
                                    stateName = '已到期';
                                    break;
                                case '3':
                                    stateName = '已终止';
                                    break;
                                default:
                                    stateName = '未知';
                            }
                            return {
                                communityName: item.communityName || '未知小区',
                                contractName: item.contractName || '',
                                contractCode: item.contractCode || '',
                                parentContractCode: item.parentContractCode || '-',
                                contractTypeName: item.contractTypeName || '未知类型',
                                operator: operator,
                                operatorLink: operatorLink,
                                amount: item.amount || 0,
                                partyB: item.partyB || '',
                                bLink: item.bLink || '',
                                startTime: item.beginTime || '',
                                endTime: item.endTime || '',
                                createTime: item.createTime || item.beginTime || '',
                                stateName: stateName,
                                contractId: item.contractId || '',
                                contractType: item.contractType || ''
                            };
                        });
                        // 修复分页数据 - API返回的records为0,使用data.length
                        var total = _contractManageInfo.total || 0;
                        var records = contracts.length || 0;
                        vc.component.contractManageInfo.total = total;
                        vc.component.contractManageInfo.records = records;
                        vc.component.contractManageInfo.contracts = mappedContracts;
                        vc.emit('pagination', 'init', {
                            total: vc.component.contractManageInfo.records,
                            dataCount: vc.component.contractManageInfo.total,
                            total: records,  // 使用实际数据条数
                            dataCount: total,
                            currentPage: _page
                        });
                    },
@@ -179,29 +202,6 @@
                    }
                );
            },
            _listCommunities: function () {
                try {
                    // 从localStorage获取小区列表
                    var _communities = vc.getCommunitys();
                    if (_communities && _communities.length > 0) {
                        $that.contractManageInfo.communities = _communities;
                        console.log('小区列表获取成功:', _communities);
                    } else {
                        // 如果没有小区列表,使用当前小区
                        var _currentCommunity = vc.getCurrentCommunity();
                        if (_currentCommunity) {
                            $that.contractManageInfo.communities = [_currentCommunity];
                            console.log('使用当前小区:', _currentCommunity);
                        } else {
                            console.error('未找到小区数据');
                            vc.toast('未找到小区数据');
                        }
                    }
                } catch (e) {
                    console.error('小区列表获取错误:', e);
                    vc.toast('获取小区列表失败:' + e.message);
                }
            },
            _openAddContractModal: function () {
                vc.emit('addContract', 'openAddContractModal', {});
            },
@@ -211,27 +211,13 @@
            _openDeleteContractModel: function (_contract) {
                vc.emit('deleteContract', 'openDeleteContractModal', _contract);
            },
            // 打开添加合同管理分成信息模态框
            openAddContractManagementShareModal: function() {
                vc.emit('addContractManagementShare', 'openAddContractManagementShareModal', {});
            },
            // 打开编辑合同管理分成信息模态框
            openEditContractManagementShareModal: function(_item) {
                vc.emit('editContractManagementShare', 'openEditContractManagementShareModal', _item);
            },
            // 跳转到合同管理分成信息页面
            goToContractManagementSharePage: function() {
                vc.jumpToPage('/#/pages/contract/contractManagementShare');
            },
            //查询
            _queryContractMethod: function () {
                vc.component._listContracts(DEFAULT_PAGE, DEFAULT_ROWS);
            },
            //重置
            _resetContractMethod: function () {
                vc.component.contractManageInfo.conditions.communityId = vc.getCurrentCommunity().communityId;
                vc.component.contractManageInfo.conditions.year = "";
                vc.component.contractManageInfo.conditions.communityCode = "";
                // vc.component.contractManageInfo.conditions.communityId = vc.getCurrentCommunity().communityId;
                vc.component.contractManageInfo.conditions.contractNameLike = "";
                // vc.component.contractManageInfo.conditions.contractCode = "";
                vc.component.contractManageInfo.conditions.contractType = "";
public/pages/contract/contractDetail/contractDetail.html
New file
@@ -0,0 +1,273 @@
<div class="white-bg padding-lg padding-top border-radius">
    <div class="flex justify-between">
        <div class="text-title">合同信息</div>
        <div>
            <button type="button" class="btn btn-primary btn-sm" style="margin-left:10px" v-on:click="vc.goBack()">
                <i class="fa fa-close"></i>返回
            </button>
            <button type="button" class="btn btn-primary btn-sm" v-on:click="_printContract()">
                <i class="fa fa-print"></i>
                <vc:i18n name="打印"></vc:i18n>
            </button>
        </div>
    </div>
    <!-- 合同信息 -->
    <div class="margin-top">
        <div class="row">
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="合同名称" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.contractName}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="合同编号" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.contractCode}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="合同类型" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.contractTypeName}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="甲方" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.partyA}}</label>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="甲方联系人" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.aContacts}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="甲方联系电话" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.aLink}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="乙方" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.partyB}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="乙方联系人" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.bContacts}}</label>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <vc:i18n name="乙方联系电话:" namespace="contractDetail"></vc:i18n>
                    </label>
                    <label class="">{{contractDetailInfo.bLink}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="经办人" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.operator}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="联系电话" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.operatorLink}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="合同金额" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.amount}}</label>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="开始时间" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.startTime}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="结束时间" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">{{contractDetailInfo.endTime}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <vc:i18n name="签订时间:" namespace="contractDetail"></vc:i18n>
                    </label>
                    <label class="">{{contractDetailInfo.signingTime}}</label>
                </div>
            </div>
            <div class="col-sm-3">
                <div class="form-group">
                    <label class="col-form-label">
                        <vc:i18n name="状态:" namespace="contractDetail"></vc:i18n>
                    </label>
                    <label class="">{{contractDetailInfo.stateName}}</label>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-sm-3" v-if="contractDetailInfo.contractParentId">
                <div class="form-group">
                    <label class="col-form-label">
                        <span><vc:i18n name="父合同" namespace="contractDetail"></vc:i18n></span>:
                    </label>
                    <label class="">
                        {{contractDetailInfo.contractParentName}}({{contractDetailInfo.contractParentCode}})
                    </label>
                </div>
            </div>
        </div>
    </div>
    <div class="vc-line-primary margin-top"></div>
    <div class="margin-top-sm">
        <ul class="nav nav-tabs">
            <li class="nav-item">
                <a class="nav-link" v-bind:class="{active:contractDetailInfo._currentTab == 'contractDetailRoom'}"
                   v-on:click="changeTab('contractDetailRoom')">
                    <vc:i18n name="房屋" namespace="contractDetail"></vc:i18n>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" v-bind:class="{active:contractDetailInfo._currentTab == 'contractDetailFile'}"
                   v-on:click="changeTab('contractDetailFile')">
                    <vc:i18n name="附件" namespace="contractDetail"></vc:i18n>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" v-bind:class="{active:contractDetailInfo._currentTab == 'contractDetailFee'}"
                   v-on:click="changeTab('contractDetailFee')">
                    <vc:i18n name="合同费用" namespace="contractDetail"></vc:i18n>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" v-bind:class="{active:contractDetailInfo._currentTab == 'contractDetailHisFee'}"
                   v-on:click="changeTab('contractDetailHisFee')">
                    <vc:i18n name="合同缴费记录" namespace="contractDetail"></vc:i18n>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" v-bind:class="{active:contractDetailInfo._currentTab == 'ownerDetailRoomFee'}"
                   v-on:click="changeTab('ownerDetailRoomFee')">
                    <vc:i18n name="房屋费用" namespace="contractDetail"></vc:i18n>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" v-bind:class="{active:contractDetailInfo._currentTab == 'contractDetailHisRoomFee'}"
                   v-on:click="changeTab('contractDetailHisRoomFee')">
                    <vc:i18n name="房屋缴费记录" namespace="contractDetail"></vc:i18n>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" v-bind:class="{active:contractDetailInfo._currentTab == 'contractDetailOwner'}"
                   v-on:click="changeTab('contractDetailOwner')">
                    <vc:i18n name="业主信息" namespace="contractDetail"></vc:i18n>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" v-bind:class="{active:contractDetailInfo._currentTab == 'contractDetailChange'}"
                   v-on:click="changeTab('contractDetailChange')">
                    <vc:i18n name="变更记录" namespace="contractDetail"></vc:i18n>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" v-bind:class="{active:contractDetailInfo._currentTab == 'contractDetailFlow'}"
                   v-on:click="changeTab('contractDetailFlow')">
                    <vc:i18n name="起草审批" namespace="contractDetail"></vc:i18n>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" v-bind:class="{active:contractDetailInfo._currentTab == 'contractDetailSub'}"
                   v-on:click="changeTab('contractDetailSub')">
                    <vc:i18n name="子合同" namespace="contractDetail"></vc:i18n>
                </a>
            </li>
            <li class="nav-item">
                <a class="nav-link" v-bind:class="{active:contractDetailInfo._currentTab == 'contractDetailReceipt'}"
                   v-on:click="changeTab('contractDetailReceipt')">
                    <vc:i18n name="补打收据" namespace="contractDetail"></vc:i18n>
                </a>
            </li>
        </ul>
    </div>
    <div v-if="contractDetailInfo._currentTab == 'contractDetailRoom'">
        <vc:create path="contract/contractDetailRoom"></vc:create>
    </div>
    <div v-if="contractDetailInfo._currentTab == 'contractDetailFile'">
        <vc:create path="contract/contractDetailFile"></vc:create>
    </div>
    <div v-if="contractDetailInfo._currentTab == 'contractDetailFee'">
        <vc:create path="contract/contractDetailFee"></vc:create>
    </div>
    <div v-if="contractDetailInfo._currentTab == 'contractDetailHisFee'">
        <vc:create path="contract/contractDetailHisFee"></vc:create>
    </div>
    <div v-if="contractDetailInfo._currentTab == 'ownerDetailRoomFee'">
        <vc:create path="owner/ownerDetailRoomFee"></vc:create>
    </div>
    <div v-if="contractDetailInfo._currentTab == 'contractDetailHisRoomFee'">
        <vc:create path="contract/contractDetailHisRoomFee"></vc:create>
    </div>
    <div v-if="contractDetailInfo._currentTab == 'contractDetailChange'">
        <vc:create path="contract/contractDetailChange"></vc:create>
    </div>
    <div v-if="contractDetailInfo._currentTab == 'contractDetailFlow'">
        <vc:create path="contract/contractDetailFlow"></vc:create>
    </div>
    <div v-if="contractDetailInfo._currentTab == 'contractDetailSub'">
        <vc:create path="contract/contractDetailSub"></vc:create>
    </div>
    <div v-if="contractDetailInfo._currentTab == 'contractDetailOwner'">
        <vc:create path="contract/contractDetailOwner"></vc:create>
    </div>
    <div v-if="contractDetailInfo._currentTab == 'contractDetailReceipt'">
        <vc:create path="contract/contractDetailReceipt"></vc:create>
    </div>
    <vc:create path="property/deleteFee"></vc:create>
    <vc:create path="property/editFee"></vc:create>
    <vc:create path="property/contractCreateFeeAdd"></vc:create>
    <vc:create path="property/finishFee"></vc:create>
</div>
public/pages/contract/contractDetail/contractDetail.js
New file
@@ -0,0 +1,91 @@
/**
 业主详情页面
 **/
(function (vc) {
    vc.extends({
        data: {
            contractDetailInfo: {
                contractId: '',
                contractName: '',
                contractCode: '',
                contractType: '',
                contractTypeName: '',
                partyA: '',
                partyB: '',
                aContacts: '',
                bContacts: '',
                aLink: '',
                bLink: '',
                operator: '',
                operatorLink: '',
                amount: '',
                startTime: '',
                endTime: '',
                signingTime: '',
                param: '',
                planType: '',
                stateName: '',
                contractParentId: '',
                contractParentName: '',
                contractParentCode: '',
                objId: '',
                files: [],
                _currentTab: 'contractDetailRoom',
            }
        },
        _initMethod: function () {
            $that.contractDetailInfo.contractId = vc.getParam('contractId');
            if (!vc.notNull($that.contractDetailInfo.contractId)) {
                return;
            }
            let _currentTab = vc.getParam('currentTab');
            if (_currentTab) {
                $that.contractDetailInfo._currentTab = _currentTab;
            }
            vc.component._loadContractInfo();
            $that.changeTab($that.contractDetailInfo._currentTab);
        },
        _initEvent: function () {
            vc.on('contractDetail', 'listContractData', function (_info) {
                vc.component._loadContractInfo();
                $that.changeTab($that.contractDetailInfo._currentTab);
            });
        },
        methods: {
            _loadContractInfo: function () {
                let param = {
                    params: {
                        page: 1,
                        row: 1,
                        contractId: $that.contractDetailInfo.contractId
                    }
                };
                //发送get请求
                vc.http.apiGet('/contract/queryContract',
                    param,
                    function (json) {
                        let _contractApplyDetailInfo = JSON.parse(json);
                        let _contractApply = _contractApplyDetailInfo.data[0];
                        vc.copyObject(_contractApply, $that.contractDetailInfo);
                    },
                    function () {
                        console.log('请求失败处理');
                    }
                );
            },
            changeTab: function (_tab) {
                $that.contractDetailInfo._currentTab = _tab;
                vc.emit(_tab, 'switch', {
                    contractId: $that.contractDetailInfo.contractId,
                    contractName: $that.contractDetailInfo.name,
                    link: $that.contractDetailInfo.link,
                    ownerId: $that.contractDetailInfo.objId
                })
            },
            _printContract: function () {
                let _contract = $that.contractDetailInfo;
                window.open("/print.html#/pages/admin/printContract?contractTypeId=" + _contract.contractType + "&contractId=" + _contract.contractId);
            }
        }
    });
})(window.vc);
public/pages/property/listOwnerCar/listOwnerCar.js
@@ -100,13 +100,54 @@
                    param,
                    function (json, res) {
                        let _json = JSON.parse(json);
                        $that.listOwnerCarInfo.total = _json.total;
                        $that.listOwnerCarInfo.records = _json.records;
                        $that.listOwnerCarInfo.ownerCars = _json.data;
                        $that.dealCarAttr(_json.data);
                        let cars = _json.data || [];
                        // 修复数据结构适配
                        let mappedCars = cars.map(function(car) {
                            // 字段名转换和默认值处理
                            return {
                                carId: car.carId || '',
                                carNum: car.carNum || '',
                                carTypeCd: car.carTypeCd || '',
                                carTypeCdName: car.carTypeCdName || '',
                                carTypeName: car.carTypeName || '',
                                carColor: car.carColor || '',
                                ownerId: car.ownerId || '',
                                ownerName: car.ownerName || '',
                                link: car.link || '',
                                roomName: car.roomName || '',
                                areaNum: car.areanum || car.areaNum || '',
                                num: car.num || '',
                                startTime: car.startTime || '',
                                endTime: car.endTime || '',
                                leaseType: car.leaseType || '',
                                leaseTypeName: car.leaseTypeName || '',
                                state: car.state || '',
                                memberCarCount: car.memberCarCount || 0,
                                iotStateName: car.iotStateName || '',
                                iotRemark: car.iotRemark || '',
                                remark: car.remark || '',
                                floorNum: car.floorNum || '',
                                unitNum: car.unitNum || '',
                                roomNum: car.roomNum || '',
                                firstPaymentDate: car.firstPaymentDate || '',
                                paymentDeadlineDate: car.paymentDeadlineDate || '',
                                unitPricePerMonth: car.unitPricePerMonth || ''
                            };
                        });
                        // 修复分页数据
                        let total = _json.total || 0;
                        let records = cars.length || 0;
                        $that.listOwnerCarInfo.total = total;
                        $that.listOwnerCarInfo.records = records;
                        $that.listOwnerCarInfo.ownerCars = mappedCars;
                        $that.dealCarAttr(mappedCars);
                        vc.emit('pagination', 'init', {
                            total: $that.listOwnerCarInfo.records,
                            dataCount: $that.listOwnerCarInfo.total,
                            total: records,  // 使用实际数据条数
                            dataCount: total,
                            currentPage: _page
                        });
                    },