define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) { var Controller = { index: function () { // 初始化表格参数配置 Table.api.init({ extend: { index_url: 'shop/order/index' + location.search, // add_url: 'shop/order/add', // edit_url: 'shop/order/edit', del_url: 'shop/order/del', multi_url: 'shop/order/multi', import_url: 'shop/order/import', table: 'shop_order', } }); var table = $("#table"); //当双击单元格时 table.on('dbl-click-row.bs.table', function (e, row, element, field) { $(".btn-detail", element).trigger("click"); }); // 初始化表格 table.bootstrapTable({ url: $.fn.bootstrapTable.defaults.extend.index_url, pk: 'id', sortName: 'id', fixedColumns: true, fixedRightNumber: 1, columns: [ [{ checkbox: true }, { field: 'id', title: __('Id') }, { field: 'order_sn', title: __('Order_sn'), operate: 'LIKE' }, { field: 'user_id', title: __('User_id'), operate: 'LIKE', visible: false, // 默认不显示,但可以用于搜索 }, { 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: 'order_address.consignee', title: __('Consignee'), operate: 'LIKE', formatter: function (value, row, index) { return row.order_address ? row.order_address.consignee : ''; } }, { field: 'order_address.mobile', title: __('Mobile'), operate: 'LIKE', formatter: function (value, row, index) { return row.order_address ? row.order_address.mobile : ''; } }, { field: 'order_address.address', title: __('Address'), operate: 'LIKE', visible: false, // 可以用于搜索但默认不显示 formatter: function (value, row, index) { if (!row.order_address) return ''; var address = ''; if (row.order_address.province_name) address += row.order_address.province_name; if (row.order_address.city_name) address += row.order_address.city_name; if (row.order_address.district_name) address += row.order_address.district_name; if (row.order_address.address) address += row.order_address.address; return address; } }, { field: 'goods_price', title: __('Goods_price'), operate: 'BETWEEN' }, // { // field: 'discount_fee', // title: __('Discount_fee'), // operate: 'BETWEEN' // }, // { // field: 'express_fee', // title: __('Express_fee'), // operate: 'BETWEEN' // }, { field: 'order_amount', title: __('Order_amount'), operate: 'BETWEEN' }, { field: 'pay_amount', title: __('Pay_amount'), operate: 'BETWEEN' }, { field: 'pay_type', title: __('Pay_type'), searchList: Controller.api.parseConfigJson('payTypeList'), operate: 'LIKE', formatter: function (value, row) { return row.pay_type_text || value; } }, // { // field: 'pay_mode', // title: __('Pay_mode'), // searchList: Controller.api.parseConfigJson('payModeList'), // operate: 'LIKE', // formatter: function (value, row) { // return row.pay_mode_text || value; // } // }, { field: 'express_name', title: __('Express_name'), operate: 'LIKE' }, { field: 'express_no', title: __('Express_no'), operate: 'LIKE' }, { field: 'order_status', title: __('Order_status'), searchList: Controller.api.parseConfigJson('orderStatusList'), formatter: function (value, row) { return row.order_status_text || value; } // formatter: Table.api.formatter.search, }, { field: 'memo', title: __('Memo'), operate: 'LIKE' }, { field: 'status', title: __('Status'), searchList: Controller.api.parseConfigJson('statusList'), formatter: Table.api.formatter.status }, { field: 'createtime', title: __('Createtime'), operate: 'RANGE', addclass: 'datetimerange', autocomplete: false, formatter: Table.api.formatter.datetime }, { field: 'updatetime', title: __('Updatetime'), operate: 'RANGE', addclass: 'datetimerange', autocomplete: false, formatter: Table.api.formatter.datetime }, // { // field: 'expire_time', // title: __('Expire_time'), // operate: 'RANGE', // addclass: 'datetimerange', // autocomplete: false, // formatter: Table.api.formatter.datetime // }, { field: 'pay_time', title: __('Pay_time'), operate: 'RANGE', addclass: 'datetimerange', autocomplete: false, formatter: Table.api.formatter.datetime }, // { // field: 'refund_time', // title: __('Refund_time'), // operate: 'RANGE', // addclass: 'datetimerange', // autocomplete: false, // formatter: Table.api.formatter.datetime // }, { field: 'shipping_time', title: __('Shipping_time'), operate: 'RANGE', addclass: 'datetimerange', autocomplete: false, formatter: Table.api.formatter.datetime }, { field: 'receive_time', title: __('Receive_time'), operate: 'RANGE', addclass: 'datetimerange', autocomplete: false, formatter: Table.api.formatter.datetime }, { field: 'cancel_time', title: __('Cancel_time'), operate: 'RANGE', addclass: 'datetimerange', autocomplete: false, formatter: Table.api.formatter.datetime }, { field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate, clickToSelect: false, buttons: [{ name: '取消电子面单', title: __('取消电子面单'), classname: 'btn btn-xs btn-success btn-ajax', text: '取消电子面单', icon: 'fa fa-sticky-note-o', extend: 'data-area=\'["90%","90%"]\'', url: 'shop/order/cancel_electronics/oe_id/{oe_id}', hidden: function (row) { return !row.print_template; }, success: function () { table.bootstrapTable('refresh', {}); } }, { name: '订单详情', title: __('订单详情'), classname: 'btn btn-xs btn-primary btn-dialog btn-detail', text: '订单详情', icon: 'fa fa-sticky-note-o', extend: 'data-area=\'["90%","90%"]\'', url: 'shop/order/detail' }] } ] ] }); // 批量打印电子面单 $(document).on('click', '.btn-print-multiple-electronic', function () { let ids = Table.api.selectedids(table); if (!ids.length) { Toastr.error('请选择需打印的订单'); return; } Layer.index = 0; Layer.open({ id: 'electronic', title: '请选择电子面单模板', content: Template("electronictpl", {ids: ids}), zIndex: 8, btn: ["开始打印", "取消"], success: function (layero, index) { Form.events.selectpage(layero); }, yes: function (index, layero) { let electronics_id = $('#electronics_id', layero).val(); if (!electronics_id) { Toastr.error('请选择电子面单模板'); return; } Fast.api.ajax( { url: 'shop/order/prints', data: { ids: ids.join('_'), electronics_id: electronics_id } }, function (data) { let html = ''; data.forEach(item => { //模板,获取成功 if (item.Success) { html += '
'; html += item.PrintTemplate; html += '
'; } }); html && Controller.api.print('电子面单打印', html); return false; } ); } }); }); // 批量打印发货单 $(document).on('click', '.btn-print-multiple-invoice', function () { let order_ids = Table.api.selectedids(table); if (!order_ids.length) { Toastr.error('请选择需打印的订单'); return; } Fast.api.ajax({ url: 'shop/order/orderList', data: { ids: order_ids } }, function (data) { var html = Template("invoicetpl", data); Controller.api.print('发货单打印', html); return false; }) }); // 为表格绑定事件 Table.api.bindevent(table); }, recyclebin: function () { // 初始化表格参数配置 Table.api.init({ extend: { 'dragsort_url': '' } }); var table = $("#table"); // 初始化表格 table.bootstrapTable({ url: 'shop/order/recyclebin' + location.search, pk: 'id', sortName: 'id', columns: [ [{ checkbox: true }, { field: 'id', title: __('Id') }, { field: 'order_sn', title: __('Order_sn'), operate: 'LIKE' }, { field: 'deletetime', title: __('Deletetime'), operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime }, { field: 'operate', width: '130px', title: __('Operate'), table: table, events: Table.api.events.operate, buttons: [{ name: 'Restore', text: __('Restore'), classname: 'btn btn-xs btn-info btn-ajax btn-restoreit', icon: 'fa fa-rotate-left', url: 'shop/order/restore', refresh: true }, { name: 'Destroy', text: __('Destroy'), classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit', icon: 'fa fa-times', url: 'shop/order/destroy', refresh: true } ], formatter: Table.api.formatter.operate } ] ] }); // 为表格绑定事件 Table.api.bindevent(table); }, add: function () { Controller.api.bindevent(); }, edit: function () { Controller.api.bindevent(); }, detail: function () { $(document).on("click", ".btn-refresh", function () { setTimeout(function () { location.reload(); }, 1000); }); //取消,支付 $(document).on('click', '.btn-status-click', function () { let order = $(this).data('order'); let order_id = $('#order_id').val(); $.post('shop/order/edit_status', { order_id, ...order }, function (res) { if (res.code == 1) { window.location.reload(); parent.Toastr.success(res.msg); } else { parent.Toastr.error(res.msg); } }) }); //发货 $(document).on('click', '.btn-deliver', function () { let expressname = $(this).data('expressname'); let expressno = $(this).data('expressno'); let html = Template('expresstpl', {expressname, expressno}); let type = $(this).data('type'); layer.open({ type: 1, skin: 'layui-layer-demo', //样式类名 title: type == 0 ? '发货' : '修改快递信息', anim: 2, area: ['400px', '300px'], shadeClose: 1, //开启遮罩关闭 content: html, btn: ['确认', '取消'], zIndex: 10, yes: function (index) { let expressname = ($('#expressname').val()).trim(); let expressno = ($('#expressno').val()).trim(); if (!expressname) { Toastr.error('请输入快递名称'); return; } if (!expressno) { Toastr.error('请输入快递单号'); return; } let order_id = $('#order_id').val(); $.post('shop/order/deliver', { order_id, expressname, expressno, type }, function (res) { if (res.code == 1) { window.location.reload(); Toastr.success(res.msg); Layer.close(index); } else { Toastr.error(res.msg); } }) }, success: function (layero, index) { Form.api.bindevent($('.shipper')); } }); }); //编辑备注 $('#app').delegate('.btn-edit,.btn-cancel,.btn-save', 'click', function () { let status = $(this).data('status'); switch (status) { case 'edit': $(this).nextAll('a').removeClass('hide'); $(this).parent().prev().children('div').addClass('hide'); $(this).parent().prev().children('input').removeClass('hide'); $(this).addClass('hide'); break; case 'cancel': $(this).prev().removeClass('hide'); $(this).next().addClass('hide'); $(this).parent().prev().children('div').removeClass('hide'); $(this).parent().prev().children('input').addClass('hide'); $(this).addClass('hide'); break; case 'save': let val = $(this).parent().prev().children('input').val(); let field = $(this).data('field'); let id = $(this).data('id'); $.post('shop/order/edit_info', { id: id, field: field, value: val }, function (res) { if (res.code == 1) { window.location.reload(); parent.Toastr.success(res.msg); } else { parent.Toastr.error(res.msg); } }) break; } }); function moneyPrompt(value) { return new Promise((resolve, reject) => { layer.prompt({ title: '确认退款金额', formType: 0, value: value }, function (pass, index) { layer.close(index); resolve(pass) }); }) } function reasonPrompt() { return new Promise((resolve, reject) => { layer.prompt({ title: '拒绝原因', formType: 2 }, function (pass, index) { layer.close(index); resolve(pass) }); }) } Form.api.bindevent($('.electronics')); // 打印快递电子面单 $(document).on('click', '.btn-print-electronic', function () { let order_id = $(this).data('id'); let electronics_id = $('#electronics_id').val(); if (!electronics_id) { Toastr.error('请选择电子面单模板'); return; } Fast.api.ajax('shop/order/electronics?order_id=' + order_id + '&electronics_id=' + electronics_id, function (res) { Controller.api.print('电子面单打印', res.PrintTemplate); return false; }); }); // 打印发货单 $(document).on('click', '.btn-print-invoice', function () { let order_ids = $(this).data("id"); Fast.api.ajax({ url: 'shop/order/orderList', data: { ids: order_ids } }, function (data) { var html = Template("invoicetpl", data); Controller.api.print('发货单打印', html); return false; }) }); //查询物流 $(document).on('click', '.btn-logistics', function () { parent.layer.open({ type: 2, shade: false, zIndex: 9999999999, title: '物流信息', area: ['90%', '90%'], content: 'https://www.kuaidi100.com/all/htky.shtml?mscomnu=' + $(this).data('expressno') }) }) }, //批量打印 prints: function () { let that = this; let ids = Config.order_ids; Controller.api.bindevent(); }, 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]")); }, print: function (title, html) { if (Config.shop.printtype == 'system') { require(['../addons/shop/js/print-html-element.min'], function (PHE) { PHE.printHtml(html, { stylesheets: [], styles: '@page {margin: 5px;}' }); }); } else { if (typeof LODOP == 'undefined') { Toastr.error('请检查C-Lodop打印组件是否安装并启动'); return; } LODOP.PRINT_INIT(title); //初始化 LODOP.ADD_PRINT_HTM(0, 0, "100%", "100%", html); if (Config.shop.clodop_print_view == '1') { LODOP.PREVIEW(); } else if (Config.shop.clodop_print_view == '2') { LODOP.PRINT_DESIGN(); } else { LODOP.PRINT(); } } return; } } }; return Controller; });