123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659 |
- 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 '<div style="display:flex;align-items:center;">' +
- '<img src="' + avatarUrl + '" style="width:40px;height:40px;border-radius:50%;margin-right:10px;" />' +
- '<div>' +
- '<div style="color:#337ab7;font-weight:bold;">' + username + '</div>' +
- '<div style="color:#999;font-size:12px;">ID: ' + userId + '</div>' +
- '</div>' +
- '</div>';
- }
- },
- {
- 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 += '<div style="page-break-after: always">';
- html += item.PrintTemplate;
- html += '</div>';
- }
- });
- 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;
- });
|