(function(vc) { 'use strict'; vc.extends({ /** * 数据定义 * 包含组件的所有数据模型 */ data: { /** * 合同收款状态信息 * 包含数据列表、查询条件、分页信息、表单数据等 */ contractPaymentStatusInfo: { /** * 数据列表 * 存储从后端获取的合同收款状态记录 */ dataList: [], /** * 查询条件 * 用于筛选合同收款状态记录 */ conditions: { /** * 合同ID * 精确匹配查询 */ contractId: '', /** * 付款状态 * 精确匹配查询 */ paymentStatus: '' }, /** * 分页信息 */ page: 1, // 当前页码 row: 10, // 每页条数 total: 0, // 总记录数 /** * 表单数据 * 用于添加和编辑合同收款状态 */ formData: { id: '', // 主键ID contractId: '', // 合同ID(必填) paymentStatus: '', // 付款状态 receivableAmount: 0, // 应收金额 receivedAmount: 0, // 已收金额 unpaidAmount: 0, // 未付金额(自动计算) specialDiscount: 0, // 特殊折扣 collectionProgress: '', // 收款进度 finalCollectionDeadline: '', // 最终收款截止日期 collectionReminderStatus: '', // 收款提醒状态 remark: '' // 备注 }, /** * 是否为编辑模式 * true: 编辑现有记录 * false: 添加新记录 */ isEdit: false }, /** * 付款状态枚举 * 定义所有可能的付款状态 */ PAYMENT_STATUS: { UNPAID: '未付款', // 未付款状态 PARTIAL_PAID: '部分付款', // 部分付款状态 PAID: '已付款', // 已付款状态 OVERDUE: '逾期', // 逾期状态 CANCELLED: '已取消', // 已取消状态 REFUNDED: '已退款' // 已退款状态 }, /** * 收款提醒状态枚举 * 定义所有可能的收款提醒状态 */ REMINDER_STATUS: { NOT_REMINDED: '未提醒', // 未提醒状态 REMINDED: '已提醒', // 已提醒状态 OVERDUE_REMINDED: '逾期提醒', // 逾期提醒状态 URGENT_REMINDED: '紧急提醒' // 紧急提醒状态 } }, /** * 初始化方法 * 功能:组件初始化时执行的方法 * 实现:调用查询方法获取初始数据 */ _initMethod: function() { // 初始化查询:获取合同收款状态列表 this._queryContractPaymentStatus(); }, /** * 初始化事件 * 功能:组件初始化时绑定的事件 * 实现:目前未绑定任何事件,预留扩展 */ _initEvent: function() { }, /** * 方法集合 * 包含组件的所有业务方法 */ methods: { /** * 查询合同收款状态 * 功能:根据查询条件获取合同收款状态列表 * 实现:调用后端接口获取数据并更新列表 */ _queryContractPaymentStatus: function() { var that = this; /** * 构建查询参数 * 包含分页信息和查询条件 */ var params = { page: that.contractPaymentStatusInfo.page, // 当前页码 row: that.contractPaymentStatusInfo.row, // 每页条数 contractId: that.contractPaymentStatusInfo.conditions.contractId, // 合同ID paymentStatus: that.contractPaymentStatusInfo.conditions.paymentStatus // 付款状态 }; /** * 调用后端查询接口 * 接口地址:/app/contractPaymentStatus/queryContractPaymentStatus * 请求方式:GET */ vc.http.apiGet('/app/contractPaymentStatus/queryContractPaymentStatus', { params: params }, function(json, res) { /** * 处理成功响应 * 解析响应数据并更新组件状态 */ var _json = JSON.parse(json); if (_json.code === '0000') { // 更新数据列表 that.contractPaymentStatusInfo.dataList = _json.data || []; // 更新总记录数 that.contractPaymentStatusInfo.total = _json.total || 0; } else { // 显示错误信息 vc.toast(_json.msg || '查询失败'); } }, function(errInfo, error) { /** * 处理失败响应 * 显示网络错误信息 */ vc.toast('查询失败,请检查网络连接'); }); }, /** * 重置查询条件 * 功能:清空所有查询条件 * 实现:重置conditions对象并重新查询 */ _resetQuery: function() { this.contractPaymentStatusInfo.conditions = { contractId: '', paymentStatus: '' }; this.contractPaymentStatusInfo.page = 1; this._queryContractPaymentStatus(); }, /** * 切换页码 * 功能:处理分页导航 * 实现:更新页码并重新查询 */ _changePage: function(page) { if (page < 1) return; this.contractPaymentStatusInfo.page = page; this._queryContractPaymentStatus(); }, /** * 打开添加弹窗 * 功能:重置表单数据并打开添加弹窗 * 实现:清空formData并设置isEdit为false */ _openAddModal: function() { this.contractPaymentStatusInfo.formData = { id: '', contractId: '', paymentStatus: '', receivableAmount: 0, receivedAmount: 0, unpaidAmount: 0, specialDiscount: 0, collectionProgress: '', finalCollectionDeadline: '', collectionReminderStatus: '', remark: '' }; this.contractPaymentStatusInfo.isEdit = false; $('#contractPaymentStatusModal').modal('show'); }, /** * 打开编辑弹窗 * 功能:填充表单数据并打开编辑弹窗 * 实现:复制选中项数据到formData并设置isEdit为true */ _openEditModal: function(item) { this.contractPaymentStatusInfo.formData = JSON.parse(JSON.stringify(item)); this.contractPaymentStatusInfo.isEdit = true; $('#contractPaymentStatusModal').modal('show'); }, /** * 保存合同收款状态 * 功能:添加或编辑合同收款状态 * 实现:根据isEdit状态调用不同的后端接口 */ _saveContractPaymentStatus: function() { var that = this; var formData = that.contractPaymentStatusInfo.formData; /** * 表单验证 * 检查必填字段是否为空 */ if (!formData.contractId) { vc.toast('请输入合同ID'); return; } if (!formData.paymentStatus) { vc.toast('请选择付款状态'); return; } /** * 计算未付金额 * 计算公式:未付金额 = 应收金额 - 已收金额 - 特殊折扣 */ formData.unpaidAmount = parseFloat(formData.receivableAmount || 0) - parseFloat(formData.receivedAmount || 0) - parseFloat(formData.specialDiscount || 0); /** * 业务规则验证 * 验证各种业务逻辑规则 */ if (!that._validateBusinessRules(formData)) { return; } /** * 根据是否为编辑模式选择不同的接口 */ var url = that.contractPaymentStatusInfo.isEdit ? '/app/contractPaymentStatus/updateContractPaymentStatus' : '/app/contractPaymentStatus/saveContractPaymentStatus'; /** * 添加操作人信息 * 从系统中获取当前用户作为操作人 */ if (that.contractPaymentStatusInfo.isEdit) { formData.updateUser = vc.getData('/userInfo/userName') || ''; // 更新人 } else { formData.createUser = vc.getData('/userInfo/userName') || ''; // 创建人 } /** * 调用后端保存接口 * 发送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 || '保存成功'); // 关闭弹窗 $('#contractPaymentStatusModal').modal('hide'); // 重新查询数据,刷新列表 that._queryContractPaymentStatus(); } else { // 显示错误信息 vc.toast(_json.msg || '保存失败'); } }, function(errInfo, error) { /** * 处理失败响应 * 显示网络错误信息 */ vc.toast('保存失败,请检查网络连接'); }); }, /** * 删除合同收款状态 * 功能:删除指定的合同收款状态 * 实现:调用后端删除接口并更新列表 */ _deleteContractPaymentStatus: function(id) { var that = this; if (confirm('确定要删除这条记录吗?')) { vc.http.apiPost('/app/contractPaymentStatus/deleteContractPaymentStatus', 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._queryContractPaymentStatus(); } else { vc.toast(_json.msg || '删除失败'); } }, function(errInfo, error) { vc.toast('删除失败,请检查网络连接'); }); } }, /** * 根据ID查询单条合同收款状态 * 功能:根据主键ID查询单条记录 * 实现:调用后端接口获取单条记录详情 */ _getContractPaymentStatusById: function(id) { var that = this; var params = { id: id }; vc.http.apiGet('/app/contractPaymentStatus/getContractPaymentStatusById', { params: params }, function(json, res) { var _json = JSON.parse(json); if (_json.code === '0000') { // 可以用于查看详情或其他操作 console.log('查询单条记录成功:', _json.data); vc.toast('查询成功'); } else { vc.toast(_json.msg || '查询失败'); } }, function(errInfo, error) { vc.toast('查询失败,请检查网络连接'); }); }, /** * 根据合同ID查询合同收款状态 * 功能:根据合同ID查询对应的所有收款状态记录 * 实现:调用后端接口获取合同相关的所有收款状态 */ _getContractPaymentStatusByContractId: function(contractId) { var that = this; var params = { contractId: contractId }; vc.http.apiGet('/app/contractPaymentStatus/getContractPaymentStatusByContractId', { params: params }, function(json, res) { var _json = JSON.parse(json); if (_json.code === '0000') { // 更新数据列表为该合同的收款状态记录 that.contractPaymentStatusInfo.dataList = _json.data || []; that.contractPaymentStatusInfo.total = _json.data ? _json.data.length : 0; // 更新查询条件中的合同ID that.contractPaymentStatusInfo.conditions.contractId = contractId; vc.toast('查询成功,共找到 ' + (that.contractPaymentStatusInfo.total) + ' 条记录'); } else { vc.toast(_json.msg || '查询失败'); } }, function(errInfo, error) { vc.toast('查询失败,请检查网络连接'); }); }, /** * 业务规则验证 * 功能:验证收款状态的业务逻辑 * 实现:检查已收金额和特殊折扣是否符合规则 * @param {Object} formData - 表单数据对象 * @returns {boolean} - 验证是否通过 */ _validateBusinessRules: function(formData) { /** * 获取金额值并转换为数字 * 使用parseFloat和|| 0确保即使值为null或undefined也能正确处理 */ var receivableAmount = parseFloat(formData.receivableAmount || 0); var receivedAmount = parseFloat(formData.receivedAmount || 0); var specialDiscount = parseFloat(formData.specialDiscount || 0); /** * 验证规则1:已收金额不能大于应收金额 * 确保已收金额在合理范围内 */ if (receivedAmount > receivableAmount) { vc.toast('业务逻辑错误:已收金额不能大于应收金额'); return false; } /** * 验证规则2:特殊折扣不能大于应收金额 * 确保特殊折扣在合理范围内 */ if (specialDiscount > receivableAmount) { vc.toast('业务逻辑错误:特殊折扣不能大于应收金额'); return false; } /** * 所有验证通过 */ return true; } } }); })(window.vc);