layui.use(['laytpl', 'table', 'jquery', 'form', 'miniTab', 'xmSelect', 'laydate', 'soulTable','upload'], function () { let $ = layui.jquery, table = layui.table, xmSelect = layui.xmSelect, miniTab = layui.miniTab, laydate = layui.laydate, soulTable = layui.soulTable, upload = layui.upload, form = layui.form; /** index page **/ if ($('.location-index-page').length > 0) { miniTab.listen(); let listUrl = $('#table-container').data('url'); let insTb = table.render({ elem: '#table-container', title: '订单列表', defaultToolbar: ['filter', 'exports', { title: '搜索' , layEvent: 'search' , icon: 'layui-icon-search' }], toolbar: '#toolbar-tpl', method: 'POST', url: listUrl, page: true, limit: 20, limits: [20, 50, 100, 200, 500, 1000], request: { pageName: 'page', limitName: 'size', }, parseData: function (res) { return { "code": res.code, //解析接口状态 "msg": res.msg, //解析提示文本 "count": res.data.total, //解析数据长度 "data": res.data.list //解析数据列表 }; }, cols: [[ {type: 'checkbox'}, { title: '#', width: 50, collapse: true, hide: true,children: [ { title: '订单商品列表' , url: function (row) { //row 为当前行数据 // console.log(row); return '/manager/mall/order/get-order-spu?coding=' + row.coding }, parseData: function (res) { return { "code": res.code, //解析接口状态 "msg": res.msg, //解析提示文本 "count": res.data.total, //解析数据长度 "data": res.data.list //解析数据列表 }; }, toolEvent: function (obj, pobj) { // obj 子表当前行对象 // pobj 父表当前行对象 let childId = this.id; // 通过 this 对象获取当前子表的id if (obj.event === 'check-sku') { layer.confirm('本次操作将核销剩余所有数量,请确认操作', {icon: 3}, function (index) { $.post('/manager/mall/order/check-sku', { coding: obj.data.coding, id: obj.data.id, num: obj.data.not_check_num }, function (res) { layer.msg(res.msg); if (res.code === 0) { table.reload(childId) } }); layer.close(index) }) } } // ,height: 300 , cols: [[ {type: 'checkbox', fixed: 'left'}, {field: 'spu_name', title: '商品名称', minWidth: 200}, {field: 'sku_name', title: '规格', minWidth: 180}, {field: 'num', title: '数量', minWidth: 165}, // { // field: 'is_virtual', title: '是否虚拟物品', minWidth: 180,templet: function (d) { // return d.is_virtual === 1 ? '是' : '否'; // } // }, // { // field: 'is_activity', title: '是否活动商品',minWidth: 150, templet: function (d) { // return d.is_activity === 1 ? '是' : '否'; // } // }, // {field: 'activity_text', title: '活动类型'}, // { // field: 'is_check', title: '已全部核销',minWidth: 150, templet: function (d) { // let text = d.is_check === 1 ? '是' : '否'; // return d.is_virtual === 1 ? text : '无需核销'; // } // }, // { // field: 'not_check_num', title: '待核销数量', minWidth: 150,templet: function (d) { // return d.is_virtual === 1 ? d.not_check_num : '无'; // } // }, // { // field: 'check_type', title: '核验方式',minWidth: 150, templet: function (d) { // let text = d.check_type === 'frontend' ? '线下核销' : '后台核销'; // return d.is_virtual === 1 ? text : '无需核销'; // } // }, // {field: 'check_by', title: '核验人', minWidth: 165}, // {minWidth: 100, fixed: 'right', title: '操作', templet: '#child-row-operate'} ]] , done: function () { } } ] }, { field: 'coding', title: '订单编号', minWidth: 200, templet: function (d) { return d.coding + '\t'; // 数字+\t 避免导出时长数字被转为科学计数 } }, {field: 'created_at', title: '下单时间', width: 180}, {field: 'paid_at', title: '支付时间', width: 180, hide: true}, {field: 'status_text', title: '订单状态', minWidth: 100}, {field: 'nickname', title: '用户昵称',minWidth: 150}, // {field: 'real_name', title: '用户姓名',minWidth: 150}, {field: 'phone',title: '电话',minWidth: 150}, // {field: 'pick_self_text', title: '配送方式',minWidth: 150}, // {field: 'is_score_text', title: '积分订单', minWidth: 150}, {field: 'price', title: '实付金额', minWidth: 150}, {field: 'score', title: '使用积分', minWidth: 150}, {field: 'address', title: '收货信息', minWidth: 200}, // 默认隐藏列 {field: 'shipped_at', title: '发货时间', width: 160, hide: true}, {field: 'express_number', title: '快递单号', minWidth: 150, hide: true}, {field: 'express_code', title: '快递公司代号', minWidth: 150, hide: true}, {field: 'express_name', title: '快递公司名称', minWidth: 150, hide: true}, {field: 'accepted_at', title: '确认收货时间', width: 160, hide: true}, {minWidth: 200, title: '操作', templet: '#row-operate'} ]], done: function () { Tools.setInsTb(insTb); soulTable.render(this) } }); let option = { elem: '#upload-order' ,url: '/manager/upload/file' ,done: function(res, index, upload){ //上传后的回调 console.log(res); if (res.code === 0 || res.code === 200) { importFile(res.data.src); } else { layer.msg('上传失败'+res.msg); } } ,accept: 'file' //允许上传的文件类型 ,field: 'file_file' ,exts: 'xls' ,size: 50 //最大允许上传的文件大小 //,…… } upload.render(option) //监听工具条 注意区别toolbar和tool toolbar是表头上的工具条 tool是行中的工具条 table.on('toolbar(table-container)', function (obj) { let layEvent = obj.event; let insTb = Tools.getInsTb(); let url = $($(this).context).data('href') let title = $($(this).context).data('title') let width = $($(this).context).data('width') ? $($(this).context).data('width') : '100%'; let height = $($(this).context).data('height') ? $($(this).context).data('height') : '100%'; // debugger; switch (layEvent) { // toolbar 刷新 case 'refresh': refreshTab(insTb); return false; case 'import-file': // TODO 待完善 第二次点击导入无效 upload.render(option) // up.reload(option) return false; // toolbar 搜索 case 'search': let search = $('.table-search-fieldset'); if (search.hasClass('div-show')) { search.css('display', 'none').removeClass('div-show'); } else { search.css('display', 'block').addClass('div-show'); } return false; // toolbar 导出物流 case 'export-list': let checkStatus = table.checkStatus('table-container'); //idTest 即为基础参数 id 对应的值 let ids = []; let type = 'all';//all=导出所有符合条件的待发货订单 only=指定ID let isScore = $('#is-score').data('score'); if (checkStatus.data.length > 0) { type = 'only';//查询全部 layer.confirm('此操作仅导出待发货订单', {icon: 3}, function (index) { $(checkStatus.data).each(function (i, item) { if (item.status === 'paid') { ids.push(item.id); } }) if (ids.length <= 0) { layer.msg('请选择正确的待发货订单'); return false; } layer.close(index) exportFile(type, ids, isScore); }) } else { exportFile(type, ids, isScore); } return false; default: if (layEvent !== 'LAYTABLE_COLS' && layEvent !== 'LAYTABLE_EXPORT') { openLayer(url, title, width, height); return false; } } }); // 下单时间范围筛选 laydate.render({ elem: '#order-start-at', type: 'datetime', }); laydate.render({ elem: '#order-end-at', type: 'datetime', }); } /** index page **/ if ($('.location-course-page').length > 0) { miniTab.listen(); let listUrl = $('#table-container').data('url'); let insTb = table.render({ elem: '#table-container', title: '订单列表', defaultToolbar: ['filter', 'exports', { title: '搜索' , layEvent: 'search' , icon: 'layui-icon-search' }], toolbar: '#toolbar-tpl', method: 'POST', url: listUrl, page: true, limit: 20, limits: [20, 50, 100, 200, 500, 1000], request: { pageName: 'page', limitName: 'size', }, parseData: function (res) { return { "code": res.code, //解析接口状态 "msg": res.msg, //解析提示文本 "count": res.data.total, //解析数据长度 "data": res.data.list //解析数据列表 }; }, cols: [[ {type: 'checkbox'}, { title: '#', width: 50, collapse: true, hide: true,children: [ { title: '订单商品列表' , url: function (row) { //row 为当前行数据 // console.log(row); return '/manager/mall/order/get-order-spu?coding=' + row.coding }, parseData: function (res) { return { "code": res.code, //解析接口状态 "msg": res.msg, //解析提示文本 "count": res.data.total, //解析数据长度 "data": res.data.list //解析数据列表 }; }, toolEvent: function (obj, pobj) { // obj 子表当前行对象 // pobj 父表当前行对象 let childId = this.id; // 通过 this 对象获取当前子表的id if (obj.event === 'check-sku') { layer.confirm('本次操作将核销剩余所有数量,请确认操作', {icon: 3}, function (index) { $.post('/manager/mall/order/check-sku', { coding: obj.data.coding, id: obj.data.id, num: obj.data.not_check_num }, function (res) { layer.msg(res.msg); if (res.code === 0) { table.reload(childId) } }); layer.close(index) }) } } // ,height: 300 , cols: [[ {type: 'checkbox', fixed: 'left'}, {field: 'spu_name', title: '商品名称', minWidth: 200}, {field: 'sku_name', title: '规格', minWidth: 180}, {field: 'num', title: '数量', minWidth: 165}, ]] , done: function () { } } ] }, { field: 'coding', title: '订单编号', minWidth: 200, templet: function (d) { return d.coding + '\t'; // 数字+\t 避免导出时长数字被转为科学计数 } }, {field: 'created_at', title: '下单时间', width: 180}, {field: 'paid_at', title: '支付时间', width: 180, hide: true}, {field: 'status_text', title: '订单状态', minWidth: 100}, {field: 'nickname', title: '用户昵称',minWidth: 150}, // {field: 'real_name', title: '用户姓名',minWidth: 150}, // {field: 'phone',title: '电话',minWidth: 150}, // {field: 'pick_self_text', title: '配送方式',minWidth: 150}, // {field: 'is_score_text', title: '积分订单', minWidth: 150}, {field: 'price', title: '实付金额', minWidth: 150}, // {field: 'score', title: '使用积分', minWidth: 150}, // {field: 'address', title: '收货信息', minWidth: 200}, // 默认隐藏列 // {field: 'shipped_at', title: '发货时间', width: 160, hide: true}, // {field: 'express_number', title: '快递单号', minWidth: 150, hide: true}, // {field: 'express_code', title: '快递公司代号', minWidth: 150, hide: true}, // {field: 'express_name', title: '快递公司名称', minWidth: 150, hide: true}, {field: 'accepted_at', title: '确认收货时间', width: 160, hide: true}, {minWidth: 200, title: '操作', templet: '#row-operate'} ]], done: function () { Tools.setInsTb(insTb); soulTable.render(this) } }); let option = { elem: '#upload-order' ,url: '/manager/upload/file' ,done: function(res, index, upload){ //上传后的回调 console.log(res); if (res.code === 0 || res.code === 200) { importFile(res.data.src); } else { layer.msg('上传失败'+res.msg); } } ,accept: 'file' //允许上传的文件类型 ,field: 'file_file' ,exts: 'xls' ,size: 50 //最大允许上传的文件大小 //,…… } upload.render(option) //监听工具条 注意区别toolbar和tool toolbar是表头上的工具条 tool是行中的工具条 table.on('toolbar(table-container)', function (obj) { let layEvent = obj.event; let insTb = Tools.getInsTb(); let url = $($(this).context).data('href') let title = $($(this).context).data('title') let width = $($(this).context).data('width') ? $($(this).context).data('width') : '100%'; let height = $($(this).context).data('height') ? $($(this).context).data('height') : '100%'; // debugger; switch (layEvent) { // toolbar 刷新 case 'refresh': refreshTab(insTb); return false; case 'import-file': // TODO 待完善 第二次点击导入无效 upload.render(option) // up.reload(option) return false; // toolbar 搜索 case 'search': let search = $('.table-search-fieldset'); if (search.hasClass('div-show')) { search.css('display', 'none').removeClass('div-show'); } else { search.css('display', 'block').addClass('div-show'); } return false; // toolbar 导出物流 case 'export-list': let checkStatus = table.checkStatus('table-container'); //idTest 即为基础参数 id 对应的值 let ids = []; let type = 'all';//all=导出所有符合条件的待发货订单 only=指定ID let isScore = $('#is-score').data('score'); if (checkStatus.data.length > 0) { type = 'only';//查询全部 layer.confirm('此操作仅导出待发货订单', {icon: 3}, function (index) { $(checkStatus.data).each(function (i, item) { if (item.status === 'paid') { ids.push(item.id); } }) if (ids.length <= 0) { layer.msg('请选择正确的待发货订单'); return false; } layer.close(index) exportFile(type, ids, isScore); }) } else { exportFile(type, ids, isScore); } return false; default: if (layEvent !== 'LAYTABLE_COLS' && layEvent !== 'LAYTABLE_EXPORT') { openLayer(url, title, width, height); return false; } } }); // 下单时间范围筛选 laydate.render({ elem: '#order-start-at', type: 'datetime', }); laydate.render({ elem: '#order-end-at', type: 'datetime', }); } if ($('.location-operate-page').length > 0) { // 快递公司选择 let expressEle = $('#express-list'); let expressListJson = expressEle.data('menu') ? expressEle.data('menu') : []; xmSelect.render({ el: '#express-list', paging: false, autoRow: true, radio: true, clickClose: true, name: 'express_id', tips: '请选择配送方式', direction: 'auto', height: '180px', model: { icon: 'show', }, prop: { name: 'name', value: 'value', }, theme: { color: '#1e84ff', }, data: expressListJson, on: function (data) { } }); } if ($('.location-detail-page').length > 0) { miniTab.listen(); //监听行工具条 table.on('tool(table-container)', function (obj) { let layEvent = obj.event; let insTb = Tools.getInsTb(); switch (layEvent) { // 行 删除 case 'check-sku': layer.confirm('本次操作将核销剩余所有数量,请确认操作', {icon: 3}, function (index) { $.post('/manager/mall/order/check-sku', { coding: obj.data.coding, id: obj.data.id, num: obj.data.not_check_num }, function (res) { layer.msg(res.msg); if (res.code === 0) { refreshTab(insTb); } }); layer.close(index) }) return false; //其他 默认为打开弹出层 default: openLayer(url, title, width, height); return false; } }); // 渲染表格 let listUrl = $('#table-container').data('url'); let insTb = table.render({ elem: '#table-container', toolbar: '#toolbar-tpl-detail', defaultToolbar: [], url: listUrl, method: 'post', even: true, limits: [10, 20, 50, 100, 200, 500, 1000, 2000], request: { pageName: 'page', limitName: 'size', }, parseData: function (res) { return { "code": res.code, //解析接口状态 "msg": res.msg, //解析提示文本 "count": res.data.total, //解析数据长度 "data": res.data.list //解析数据列表 }; }, page: true, cols: [[ {type: 'checkbox', fixed: 'left'}, {field: 'spu_name', title: '商品名称', minWidth: 200}, {field: 'sku_name', title: '规格', minWidth: 180}, {field: 'num', title: '数量', minWidth: 165}, // { // field: 'is_virtual', title: '是否虚拟物品', minWidth: 180,templet: function (d) { // return d.is_virtual === 1 ? '是' : '否'; // } // }, // { // field: 'is_activity', title: '是否活动商品', minWidth: 165, templet: function (d) { // return d.is_activity === 1 ? '是' : '否'; // } // }, // {field: 'activity_text', title: '活动类型'}, // { // field: 'is_check', title: '已全部核销', minWidth: 165, templet: function (d) { // let text = d.is_check === 1 ? '是' : '否'; // return d.is_virtual === 1 ? text : '无需核销'; // } // }, // { // field: 'not_check_num', title: '待核销数量', minWidth: 165, templet: function (d) { // return d.is_virtual === 1 ? d.not_check_num : '无'; // } // }, // { // field: 'check_type', title: '核验方式', minWidth: 165, templet: function (d) { // let text = d.check_type === 'frontend' ? '线下核销' : '后台核销'; // return d.is_virtual === 1 ? text : '无需核销'; // } // }, // {field: 'check_by', title: '核验人', minWidth: 165}, // {minWidth: 100, fixed: 'right', title: '操作', templet: '#child-row-operate'} ]], done: function () { Tools.setInsTb(insTb); } }); } if ($('.location-course-detail-page').length > 0) { miniTab.listen(); //监听行工具条 table.on('tool(table-container)', function (obj) { let layEvent = obj.event; let insTb = Tools.getInsTb(); switch (layEvent) { //其他 默认为打开弹出层 default: openLayer(url, title, width, height); return false; } }); // 渲染表格 let listUrl = $('#table-container').data('url'); let insTb = table.render({ elem: '#table-container', toolbar: '#toolbar-tpl-detail', defaultToolbar: [], url: listUrl, method: 'post', even: true, limits: [10, 20, 50, 100, 200, 500, 1000, 2000], request: { pageName: 'page', limitName: 'size', }, parseData: function (res) { return { "code": res.code, //解析接口状态 "msg": res.msg, //解析提示文本 "count": res.data.total, //解析数据长度 "data": res.data.list //解析数据列表 }; }, page: true, cols: [[ {type: 'checkbox', fixed: 'left'}, {field: 'spu_name', title: '课程名称', minWidth: 200}, // {field: 'sku_name', title: '规格', minWidth: 180}, {field: 'num', title: '数量', minWidth: 165}, ]], done: function () { Tools.setInsTb(insTb); } }); } }); function exportFile(type, ids, isScore) { layui.use(['table', 'jquery'], function () { let $ = layui.jquery, table = layui.table; $.post('/manager/mall/order/export-order-list', { ids: ids, is_score: isScore, type: type }, function (res) { if (res.code === 0) { console.log(res.data); table.exportFile(res.data.header, res.data.data, 'xls'); //默认导出 csv,也可以为:xls } else { layer.msg(res.msg); } }); }); } function importFile(file) { layui.use(['table', 'jquery'], function () { let $ = layui.jquery; let index = layer.load(); $.post('/manager/mall/order/import-order', { file: file }, function (res) { layer.close(index); if (res.code === 0) { refreshTab(insTb); layer.alert('操作成功,本次成功更新记录数:'+res.data.count, {icon: 6}); // console.log(res.data); } else { layer.alert(res.msg); } }); }); }