(function () { 'use strict'; var Api = function () { return window.AdminApi; }; var Ui = function () { return window.AdminUi; }; var I = function () { return window.AdminI18n; }; var State = function () { return window.AdminState; }; var Filter = function () { return window.AdminFilter; }; var Menu = function () { return window.AdminMenu; }; var Router = function () { return window.AdminRouter; }; function buildQuery() { var st = State().orders; var q = 'orders?page=' + st.page + '&size=' + st.size; if (st.q) q += '&q=' + encodeURIComponent(st.q); if (st.status) q += '&status=' + encodeURIComponent(st.status); if (st.refund_status) q += '&refund_status=' + encodeURIComponent(st.refund_status); if (st.channel) q += '&channel=' + encodeURIComponent(st.channel); if (st.from) q += '&from=' + encodeURIComponent(st.from); if (st.to) q += '&to=' + encodeURIComponent(st.to); return q; } function statusOptions(selected) { var opts = [{ v: '', l: '全部状态' }, { v: 'pending', l: '待支付' }, { v: 'paid', l: '已支付' }, { v: 'cancelled', l: '已取消' }, { v: 'refunded', l: '已退款' }]; return opts.map(function (o) { return ''; }).join(''); } function refundStatusOptions(selected) { var opts = [{ v: '', l: '全部退款' }, { v: 'pending', l: '待审核' }, { v: 'none', l: '无申请' }, { v: 'approved', l: '已通过' }, { v: 'rejected', l: '已拒绝' }]; return opts.map(function (o) { return ''; }).join(''); } function channelOptions(selected) { var opts = [{ v: '', l: '全部渠道' }, { v: 'alipay', l: '支付宝' }, { v: 'wechat', l: '微信支付' }]; return opts.map(function (o) { return ''; }).join(''); } function renderFilterBar(st) { return Filter().bar( Filter().field('关键词', Filter().searchInput('orderQ', st.q, '订单号或邮箱')) + Filter().field('状态', Filter().select('orderStatus', statusOptions(st.status))) + Filter().field('退款', Filter().select('orderRefundStatus', refundStatusOptions(st.refund_status))) + Filter().field('渠道', Filter().select('orderChannel', channelOptions(st.channel))) + Ui().filterDateField('orderFrom', '从', st.from) + Ui().filterDateField('orderTo', '至', st.to), '' + '' ); } function orderActionMenu(o) { var items = [{ label: '详情', action: 'detail', dataset: { id: String(o.id) } }]; if (o.status === 'pending') { items.push({ label: '取消', action: 'cancel', dataset: { id: String(o.id) } }); } if (o.status === 'paid' && o.refund_status === 'pending') { items.push({ label: '通过退款', action: 'refund_approve', dataset: { id: String(o.id) } }); items.push({ label: '拒绝退款', action: 'refund_reject', dataset: { id: String(o.id) } }); } if (o.status === 'paid' && (o.refund_status === 'none' || !o.refund_status)) { items.push({ label: '退款', action: 'refund_direct', dataset: { id: String(o.id) } }); } return Menu().actionMenu('order-' + o.id, items); } function bindOrderMenus(root) { Menu().bind(root, function (action, btn) { var id = parseInt(btn.dataset.id, 10); if (action === 'detail') showOrderDetail(id); if (action === 'cancel') { Ui().confirm('确认取消该待支付订单?', function () { Api().postJson('orders/' + id + '/cancel', {}).then(function (r) { if (r) { soonToast('订单已取消', 'success'); Ui().closeDrawer(); render(); } }); }); } if (action === 'refund_approve' || action === 'refund_direct') { var title = action === 'refund_direct' ? '管理员退款' : '通过退款申请'; openNoteModal(title, '可选:填写审核备注', function (note) { return Api().postJson('orders/' + id + '/refund/approve', { note: note }).then(function (r) { if (r) { soonToast('退款已处理', 'success'); Ui().closeDrawer(); render(); } }); }); } if (action === 'refund_reject') { openNoteModal('拒绝退款', '请填写拒绝原因', function (note) { if (!note) { soonToast('请填写拒绝原因', 'warn'); return false; } return Api().postJson('orders/' + id + '/refund/reject', { note: note }).then(function (r) { if (r) { soonToast('已拒绝退款', 'success'); Ui().closeDrawer(); render(); } }); }); } }); } function applyFilters() { var st = State().orders; st.q = Ui().el('orderQ').value.trim(); st.status = Ui().el('orderStatus').value; st.refund_status = Ui().el('orderRefundStatus').value; st.channel = Ui().el('orderChannel').value; st.from = Ui().el('orderFrom').value; st.to = Ui().el('orderTo').value; if (st.from && st.to && st.from > st.to) { soonToast('开始日期不能晚于结束日期', 'warn'); return false; } st.page = 1; return true; } function bindFilters() { Ui().el('orderSearchBtn').onclick = function () { if (applyFilters()) { Router().syncQuery(); render(); } }; Ui().el('orderResetBtn').onclick = function () { State().orders = { page: 1, size: 20, q: '', status: '', refund_status: '', channel: '', from: '', to: '', }; Router().syncQuery(); render(); }; } function rowActions(o) { var btns = ''; if (o.status === 'pending') { btns += ''; } if (o.status === 'paid' && o.refund_status === 'pending') { btns += ''; btns += ''; } if (o.status === 'paid' && (o.refund_status === 'none' || !o.refund_status)) { btns += ''; } return '
无退款记录
'; } var subHtml; if (sub) { subHtml = Ui().detailRow('会员状态', I().badgeStatus(sub.status)) + Ui().detailRow('开始', I().esc(I().formatDateTime(sub.started_at))) + Ui().detailRow('到期', I().esc(I().formatDateTime(sub.expires_at))); } else { subHtml = '无关联会员记录
'; } var drawerActions = rowActions(o).replace(/