define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) { var Controller = { index: function () { // 初始化表格参数配置 Table.api.init({ extend: { index_url: 'withdraw/withdraw/index' + location.search, del_url: 'withdraw/withdraw/del', multi_url: 'withdraw/withdraw/multi', table: 'withdraw', } }); // 初始化表格 var table = $("#table"); // 表格配置 table.bootstrapTable({ url: $.fn.bootstrapTable.defaults.extend.index_url, pk: 'id', sortName: 'id', sortOrder: 'desc', showToggle: false, showColumns: false, showExport: false, commonSearch: true, searchFormVisible: false, columns: [ [ {checkbox: true}, {field: 'id', title: 'ID', width: 80, sortable: true}, { field: 'user.username', title: __('User'), operate: 'LIKE', formatter: function (value, row, index) { // 显示用户头像和用户名 var avatar = row.user && row.user.avatar ? row.user.avatar : '/assets/img/avatar.png'; var username = row.user && row.user.username ? row.user.username : '游客'; var userId = row.user_id || ''; // 处理头像URL var avatarUrl = avatar; if (avatar && !avatar.startsWith('http') && !avatar.startsWith('//')) { avatarUrl = Fast.api.cdnurl ? Fast.api.cdnurl(avatar) : avatar; } return '
' + '' + '
' + '
' + username + '
' + '
ID: ' + userId + '
' + '
' + '
'; } }, {field: 'amount', title: '提现金额', width: 100, formatter: function(value, row, index) { return '¥' + parseFloat(value).toFixed(2); }}, {field: 'paid_fee', title: '实际到账', width: 100, formatter: function(value, row, index) { return '¥' + parseFloat(value).toFixed(2); }}, {field: 'charge_fee', title: '手续费', width: 80, formatter: function(value, row, index) { return '¥' + parseFloat(value).toFixed(2); }}, {field: 'charge_rate_format', title: '费率', width: 60}, {field: 'withdraw_type_text', title: '提现方式', width: 120, formatter: function(value, row, index) { var iconMap = { 'wechat': '/assets/img/wechat.png', 'alipay': '/assets/img/alipay.png', 'bank': '/assets/img/bank.png' }; var icon = iconMap[row.withdraw_type] || '/assets/img/bank.png'; return '
' + '' + '' + value + '' + '
'; }}, {field: 'withdraw_sn', title: '商户单号', width: 200}, {field: 'withdraw_info', title: '打款信息', width: 250, formatter: function(value, row, index) { if (!value) return '-'; var html = ''; $.each(value, function(key, val) { html += '
' + key + ': ' + val + '
'; }); return html; }}, {field: 'wechat_transfer_state_text', title: '微信转账状态', width: 120, visible: false}, {field: 'createtime', title: '申请时间', width: 160, operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime}, {field: 'updatetime', title: '更新时间', width: 160, operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime}, {field: 'status', title: '状态', width: 80, searchList: {"-1":"已拒绝","0":"待审核","1":"处理中","2":"已处理"}, custom: {"all":"全部"}, formatter: function(value, row, index) { var statusClass = Controller.getStatusClass(value); var statusText = Controller.getStatusText(value); return '' + statusText + ''; }}, { field: 'operate', title: __('Operate'), width: 200, table: table, events: Table.api.events.operate, buttons: [ { name: 'handle', title: '处理', classname: 'btn btn-xs btn-primary btn-dialog', icon: 'fa fa-cog', url: 'withdraw/withdraw/handle', visible: function(row) { return row.status == 0 || row.status == 1; } }, { name: 'log', title: '日志', classname: 'btn btn-xs btn-info btn-dialog', icon: 'fa fa-list-alt', url: 'withdraw/withdraw/log' }, { name: 'check_wechat', title: '检查微信状态', classname: 'btn btn-xs btn-warning btn-ajax', icon: 'fa fa-refresh', url: 'withdraw/withdraw/checkWechatTransferResult', confirm: '确认要检查微信转账状态吗?', success: function(data, ret) { table.bootstrapTable('refresh'); Layer.msg(ret.msg); }, visible: function(row) { return row.withdraw_type == 'wechat' && row.status == 1; } } ], formatter: Table.api.formatter.operate } ] ] }); // 为表格绑定事件 Table.api.bindevent(table); // 批量处理操作绑定 $(document).on("click", ".btn-handle-agree", function () { Controller.handleBatch('agree'); }); $(document).on("click", ".btn-handle-withdraw", function () { Controller.handleBatch('withdraw'); }); $(document).on("click", ".btn-handle-agree-withdraw", function () { Controller.handleBatch('agree_and_withdraw'); }); $(document).on("click", ".btn-handle-refuse", function () { var ids = Table.api.selectedids(table); if (ids.length === 0) { Layer.msg("请先选择要操作的记录"); return false; } Fast.api.open("withdraw/withdraw/handle/ids/" + ids.join(","), "拒绝提现", { callback: function() { table.bootstrapTable('refresh'); } }); }); $(document).on("click", ".btn-handle-cancel", function () { Controller.handleBatch('cancel'); }); $(document).on("click", ".btn-handle-refund", function () { Controller.handleBatch('refund_commission'); }); }, handle: function () { // 处理页面的表单提交 Form.api.bindevent($("form[role=form]")); // 根据操作类型显示隐藏拒绝理由 $('#action').on('change', function() { var action = $(this).val(); if (action === 'refuse') { $('.refuse-reason').show(); $('#refuse_msg').attr('data-rule-required', 'true'); } else { $('.refuse-reason').hide(); $('#refuse_msg').removeAttr('data-rule-required'); } }); // 表单提交前验证 var isSubmitting = false; // 防止重复提交 $('#handle-form').on('submit', function(e) { e.preventDefault(); // 阻止默认提交 if (isSubmitting) { return false; } var action = $('#action').val(); if (!action) { Layer.msg('请选择处理操作'); return false; } if (action === 'refuse') { var refuseMsg = $('#refuse_msg').val().trim(); if (!refuseMsg) { Layer.msg('请输入拒绝理由'); return false; } } // 显示确认对话框 var actionText = Controller.getActionText(action); var form = $(this); Layer.confirm('确认要' + actionText + '这笔提现申请吗?', function(index) { isSubmitting = true; Layer.close(index); // 使用 FastAdmin 的 ajax 提交 Fast.api.ajax({ url: form.attr('action') || 'withdraw/withdraw/handle', data: form.serialize(), type: 'POST' }, function(data, ret) { isSubmitting = false; parent.Layer.msg(ret.msg, {icon: 1}); setTimeout(function() { var index = parent.Layer.getFrameIndex(window.name); parent.Layer.close(index); parent.$(".btn-refresh").trigger("click"); }, 1000); }, function(data, ret) { isSubmitting = false; Layer.msg(ret.msg); }); }); return false; }); }, log: function () { // 日志页面使用服务器端渲染,无需 JavaScript 初始化 // 如果需要可以在这里添加其他交互功能 }, // 批量处理方法 handleBatch: function(action) { var table = $("#table"); var ids = Table.api.selectedids(table); if (ids.length === 0) { Layer.msg("请先选择要操作的记录"); return false; } var actionText = ''; switch(action) { case 'agree': actionText = '同意'; break; case 'withdraw': actionText = '打款'; break; case 'agree_and_withdraw': actionText = '同意并打款'; break; case 'cancel': actionText = '撤销'; break; case 'refund_commission': actionText = '退回佣金'; break; } Layer.confirm("确认要" + actionText + "选中的提现申请吗?", function(index) { Fast.api.ajax({ url: 'withdraw/withdraw/handle', data: {ids: ids, action: action} }, function(data, ret) { table.bootstrapTable('refresh'); Layer.close(index); }); }); }, // 获取状态样式类名 getStatusClass: function(status) { var classes = { '-1': 'danger', // 已拒绝 '0': 'info', // 待审核 '1': 'warning', // 处理中 '2': 'success' // 已处理 }; return classes[status] || 'default'; }, // 获取状态文本 getStatusText: function(status) { var statusTexts = { '-1': '已拒绝', '0': '待审核', '1': '处理中', '2': '已处理' }; return statusTexts[status] || '未知状态'; }, // 获取操作文本 getActionText: function(action) { var actionTexts = { 'agree': '同意', 'withdraw': '打款', 'agree_and_withdraw': '同意并打款', 'refuse': '拒绝', 'cancel': '撤销', 'refund_commission': '退回佣金' }; return actionTexts[action] || '处理'; }, api: { // 解析Config中的JSON字符串的辅助函数 parseConfigJson: function(configKey, defaultValue) { var configValue = Config[configKey] || defaultValue || {}; // 如果是字符串,尝试解析JSON if (typeof configValue === 'string') { try { return JSON.parse(configValue); } catch (e) { return defaultValue || {}; } } return configValue; }, bindevent: function () { Form.api.bindevent($("form[role=form]")); } } }; return Controller; });