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;
});