/** * 广告合同信息管理组件 * 功能:用于管理广告合同信息的增删改查和统计功能 */ (function(vc) { 'use strict'; vc.extends({ /** * 数据定义 * 包含组件的所有数据模型 */ data: { /** * 广告合同信息 * 包含数据列表、查询条件、分页信息、表单数据等 */ adContractInfo: { /** * 数据列表 * 存储从后端获取的广告合同信息记录 */ dataList: [], /** * 查询条件 * 用于筛选广告合同信息记录 */ conditions: { /** * 合同ID * 精确匹配查询 */ contractId: '', /** * 广告类型 * 精确匹配查询 */ adType: '', /** * 广告子类型 * 精确匹配查询 */ subType: '' }, /** * 分页信息 */ page: 1, // 当前页码 row: 10, // 每页条数 total: 0, // 总记录数 /** * 表单数据 * 用于添加和编辑广告合同信息 */ formData: { id: '', // 主键ID contractId: '', // 合同ID(必填) adType: '', // 广告类型(必填) subType: '', // 广告子类型(必填) cooperationForm: '', // 合作内容形式(必填) buildingElevatorCount: '', // 小区楼栋数/电梯数 onlineQuantity: '', // 上线数量 facilityLocation: '' // 设施安装位置 }, /** * 是否为编辑模式 * true: 编辑现有记录 * false: 添加新记录 */ isEdit: false, /** * 统计信息 * 存储广告合同统计数据 */ statistics: { totalCount: 0, adTypeCount: {}, subTypeCount: {} } }, /** * 广告类型枚举 * 定义所有可能的广告类型和子类型 */ AD_TYPES: { /** * 电梯广告 */ '电梯广告': { subTypes: ['电梯广告-联讯', '电梯广告-业委会'], description: '电梯内广告' }, /** * 租房 */ '租房': { subTypes: ['租房-租赁', '租房-水电'], description: '房屋租赁相关广告' }, /** * 快递柜 */ '快递柜': { subTypes: [], description: '快递柜广告' }, /** * 场地代收电费 */ '场地代收电费': { subTypes: [], description: '场地电费代收服务广告' }, /** * 充电桩代收电费 */ '充电桩代收电费': { subTypes: [], description: '充电桩电费代收服务广告' }, /** * 场地使用机房基站 */ '场地使用机房基站': { subTypes: [], description: '场地使用机房基站相关广告' }, /** * 净水自贩机 */ '净水自贩机': { subTypes: [], description: '净水自动贩卖机广告' }, /** * 机房基站 */ '机房基站': { subTypes: [], description: '机房基站相关广告' }, /** * 其他广告 */ '其他广告': { subTypes: ['车辆识别系统', '智能柜', '代收电费', '机房基站-电费', '充电站(桩)', '信号接入', '充电桩代收电费-变更', '自助饮料机', '回收柜', '车辆系统', '监控设备', '换电柜', '自助贩卖机', '门禁系统', '新能源充电桩'], description: '其他类型广告' } } }, /** * 初始化方法 * 功能:组件初始化时执行的方法 * 实现:调用查询方法获取初始数据 */ _initMethod: function() { // 初始化查询:获取广告合同信息列表 this._queryAdContractInfo(); }, /** * 初始化事件 * 功能:组件初始化时绑定的事件 * 实现:目前未绑定任何事件,预留扩展 */ _initEvent: function() { }, /** * 方法集合 * 包含组件的所有业务方法 */ methods: { /** * 查询广告合同信息 * 功能:根据查询条件获取广告合同信息列表 * 实现:调用后端接口获取数据并更新列表 */ _queryAdContractInfo: function() { var that = this; /** * 构建查询参数 * 包含分页信息和查询条件 */ var params = { page: that.adContractInfo.page, // 当前页码 row: that.adContractInfo.row, // 每页条数 contractId: that.adContractInfo.conditions.contractId, // 合同ID adType: that.adContractInfo.conditions.adType, // 广告类型 subType: that.adContractInfo.conditions.subType // 广告子类型 }; /** * 调用后端查询接口 * 接口地址:/app/adContractInfo/queryAdContractInfo * 请求方式:GET */ vc.http.apiGet('/app/adContractInfo/queryAdContractInfo', { params: params }, function(json, res) { /** * 处理成功响应 * 解析响应数据并更新组件状态 */ var _json = JSON.parse(json); if (_json.code === '0000') { // 更新数据列表 that.adContractInfo.dataList = _json.data || []; // 更新总记录数 that.adContractInfo.total = _json.total || 0; } else { // 显示错误信息 vc.toast(_json.msg || '查询失败'); } }, function(errInfo, error) { /** * 处理失败响应 * 显示网络错误信息 */ vc.toast('查询失败,请检查网络连接'); }); }, /** * 重置查询条件 * 功能:清空所有查询条件 * 实现:重置conditions对象并重新查询 */ _resetQuery: function() { this.adContractInfo.conditions = { contractId: '', adType: '', subType: '' }; this.adContractInfo.page = 1; this._queryAdContractInfo(); }, /** * 切换页码 * 功能:处理分页导航 * 实现:更新页码并重新查询 */ _changePage: function(page) { if (page < 1) return; this.adContractInfo.page = page; this._queryAdContractInfo(); }, /** * 打开添加弹窗 * 功能:重置表单数据并打开添加弹窗 * 实现:清空formData并设置isEdit为false */ _openAddModal: function() { this.adContractInfo.formData = { id: '', contractId: '', adType: '', subType: '', cooperationForm: '', buildingElevatorCount: '', onlineQuantity: '', facilityLocation: '' }; this.adContractInfo.isEdit = false; $('#adContractInfoModal').modal('show'); }, /** * 打开编辑弹窗 * 功能:填充表单数据并打开编辑弹窗 * 实现:复制选中项数据到formData并设置isEdit为true */ _openEditModal: function(item) { this.adContractInfo.formData = JSON.parse(JSON.stringify(item)); this.adContractInfo.isEdit = true; $('#adContractInfoModal').modal('show'); }, /** * 表单验证 * 功能:验证表单数据的有效性 * 实现:检查必填字段是否为空 * @param {Object} formData - 表单数据对象 * @returns {boolean} - 验证是否通过 */ _validateForm: function(formData) { if (!formData.contractId) { vc.toast('请输入合同ID'); return false; } if (!formData.adType) { vc.toast('请选择广告类型'); return false; } if (!formData.subType) { vc.toast('请选择广告子类型'); return false; } if (!formData.cooperationForm) { vc.toast('请输入合作内容形式'); return false; } return true; }, /** * 保存广告合同信息 * 功能:添加或编辑广告合同信息 * 实现:根据isEdit状态调用不同的后端接口 */ _saveAdContractInfo: function() { var that = this; var formData = that.adContractInfo.formData; /** * 表单验证 * 检查必填字段是否为空 */ if (!that._validateForm(formData)) { return; } /** * 根据是否为编辑模式选择不同的接口 */ var url = that.adContractInfo.isEdit ? '/app/adContractInfo/updateAdContractInfo' : '/app/adContractInfo/saveAdContractInfo'; /** * 调用后端保存接口 * 发送POST请求,传递表单数据 */ vc.http.apiPost(url, JSON.stringify(formData), { headers: { 'Content-Type': 'application/json' } }, function(json, res) { /** * 处理成功响应 */ var _json = JSON.parse(json); if (_json.code === '0000') { vc.toast(_json.msg || '保存成功'); // 关闭弹窗 $('#adContractInfoModal').modal('hide'); // 重新查询数据,刷新列表 that._queryAdContractInfo(); } else { // 显示错误信息 vc.toast(_json.msg || '保存失败'); } }, function(errInfo, error) { /** * 处理失败响应 * 显示网络错误信息 */ vc.toast('保存失败,请检查网络连接'); }); }, /** * 删除广告合同信息 * 功能:删除指定的广告合同信息 * 实现:调用后端删除接口并更新列表 */ _deleteAdContractInfo: function(id) { var that = this; if (confirm('确定要删除这条广告合同信息吗?')) { vc.http.apiPost('/app/adContractInfo/deleteAdContractInfo', JSON.stringify({id: id}), { headers: { 'Content-Type': 'application/json' } }, function(json, res) { var _json = JSON.parse(json); if (_json.code === '0000') { vc.toast(_json.msg || '删除成功'); that._queryAdContractInfo(); } else { vc.toast(_json.msg || '删除失败'); } }, function(errInfo, error) { vc.toast('删除失败,请检查网络连接'); }); } }, /** * 根据合同ID查询广告合同信息 * 功能:根据合同ID查询对应的所有广告合同信息记录 * 实现:调用后端接口获取合同相关的所有广告合同信息 */ _getAdContractInfoByContractId: function(contractId) { var that = this; var params = { contractId: contractId }; vc.http.apiGet('/app/adContractInfo/getAdContractInfoByContractId', { params: params }, function(json, res) { var _json = JSON.parse(json); if (_json.code === '0000') { // 更新数据列表为该合同的广告合同信息记录 that.adContractInfo.dataList = _json.data || []; that.adContractInfo.total = _json.data ? _json.data.length : 0; // 更新查询条件中的合同ID that.adContractInfo.conditions.contractId = contractId; vc.toast('查询成功,共找到 ' + (that.adContractInfo.total) + ' 条记录'); } else { vc.toast(_json.msg || '查询失败'); } }, function(errInfo, error) { vc.toast('查询失败,请检查网络连接'); }); }, /** * 获取广告合同信息统计 * 功能:统计广告合同信息的各种数据 * 实现:调用后端统计接口获取统计数据 */ _getAdContractInfoStatistics: function() { var that = this; var params = { contractId: that.adContractInfo.conditions.contractId, adType: that.adContractInfo.conditions.adType, subType: that.adContractInfo.conditions.subType }; vc.http.apiGet('/app/adContractInfo/queryAdContractInfoStatistics', { params: params }, function(json, res) { var _json = JSON.parse(json); if (_json.code === '0000') { // 更新统计信息 that.adContractInfo.statistics = _json.data || { totalCount: 0, adTypeCount: {}, subTypeCount: {} }; // 显示统计结果 $('#adContractInfoStatisticsModal').modal('show'); } else { vc.toast(_json.msg || '统计失败'); } }, function(errInfo, error) { vc.toast('统计失败,请检查网络连接'); }); }, /** * 获取广告子类型列表 * 功能:根据选择的广告类型获取对应的子类型列表 * 实现:从AD_TYPES枚举中获取对应广告类型的子类型 * @param {string} adType - 广告类型 * @returns {Array} - 子类型列表 */ _getSubTypes: function(adType) { if (!adType || !this.AD_TYPES[adType]) { return []; } return this.AD_TYPES[adType].subTypes; } } }); })(window.vc);